在生成一个非常基本的类似于XML的语言扫描程序时,在“野牛”文件的“编译”期间,我偶然发现了我有点担心的警告。
bison.y: warning: 2 reduce/reduce conflicts [-wconflicts-rr]
bison -d bison.y error - warnings
警告如上所述,尽管我花了很多时间来解决这个问题,但到目前为止,还没有真正的突破。因此,我需要一些帮助。
代码:
%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void yyerror(char *);
extern char *yytext;
extern int yylineno;
int yylex();
extern FILE *yyin;
%}
%union{
float floatval;
int integerval;
char *stringval;
char *booleanval;
char *datetimeval;
}
%token WORKBOOK_ST_TAG WORKBOOK_END_TAG
%token STYLES_ST_TAG STYLES_END_TAG
%token STYLE_ST_TAG STYLE_END_TAG
%token ID_TAG
%token WORKSHEET_ST_TAG WORKSHEET_END_TAG
%token NAME_TAG PROTECTED_TAG
%token TABLE_ST_TAG TABLE_END_TAG
%token EXP_RC_TAG EXP_CC_TAG
%token COLUMN_OP_TAG COLUMN_CL_TAG WIDTH_TAG
%token ROW_ST_TAG ROW_END_TAG
%token HEIGHT_TAG HIDDEN_TAG
%token CELL_ST_TAG CELL_END_TAG
%token MERGE_A_TAG MERGE_D_TAG
%token STYLE_ID_TAG
%token DATA_ST_TAG DATA_END_TAG
%token TYPE_TAG
%token NUM_ATTR STRING_ATTR DATETIME_ATTR BOOL_ATTR
%token INT DECIMAL STRING BOOLEAN DATETIME
%token COMM_ST_TAG COMM_END_TAG
%%
workbook : WORKBOOK_ST_TAG wb_cont WORKBOOK_END_TAG
;
wb_cont : styles worksheet worksheets | comment wb_cont
;
worksheets : worksheet worksheets |
;
styles : STYLES_ST_TAG styles_cont STYLES_END_TAG styles | ;
;
styles_cont : style styles_cont | comment styles_cont |
;
style : style_st_tag style_cont STYLE_END_TAG
;
style_st_tag : STYLE_ST_TAG ID '>'
;
ID : ID_TAG '=' '"' STRING '"'
;
style_cont : | comment style_cont
;
worksheet : ws_st_tag ws_cont WORKSHEET_END_TAG
;
ws_st_tag : WORKSHEET_ST_TAG ws_attr '>'
;
ws_attr : name | name protected | protected name
;
name : NAME_TAG '=' '"' STRING '"'
;
protected : PROTECTED_TAG '=' '"' BOOLEAN '"'
;
ws_cont : table ws_cont | comment ws_cont |
;
table : table_st_tag table_cont TABLE_END_TAG
;
table_st_tag : TABLE_ST_TAG table_attr '>'
;
table_attr : ExpCC table_attr | ExpRC table_attr | styleID table_attr |
;
ExpCC : EXP_CC_TAG '=' '"' INT '"'
;
ExpRC : EXP_RC_TAG '=' '"' INT '"'
;
table_cont : | columns rows | comment table_cont
;
columns: | column columns
;
rows : | row rows
;
column : col_tag
;
col_tag : COLUMN_OP_TAG col_attr COLUMN_CL_TAG
;
col_attr : | height col_attr | width col_attr | styleID col_attr
;
width : WIDTH_TAG '=' '"' INT '"'
;
row : row_st_tag row_cont ROW_END_TAG
;
row_st_tag : ROW_ST_TAG row_attr '>'
;
row_attr : | height row_attr | hidden row_attr | styleID row_attr
;
height : HEIGHT_TAG '=' '"' INT '"'
;
hidden : HIDDEN_TAG '=' '"' BOOLEAN '"'
;
row_cont : | cell row_cont | comment row_cont
;
cell : cell_st_tag cell_cont CELL_END_TAG
;
cell_st_tag : CELL_ST_TAG cell_attr '>'
;
cell_attr : | mergeacross cell_attr | mergedown cell_attr | styleID cell_attr
;
mergeacross : MERGE_A_TAG '=' '"'INT'"'
;
mergedown : MERGE_D_TAG '=' '"'INT'"'
;
styleID : STYLE_ID_TAG '=' '"'STRING'"'
;
cell_cont : | data cell_cont | comment cell_cont
;
data : data_st_tag data_cont data_end_tag
;
data_st_tag : DATA_ST_TAG data_type '>'
;
data_end_tag : DATA_END_TAG
;
data_type : TYPE_TAG '"' data_attr '"'
;
data_attr : NUM_ATTR | STRING_ATTR | DATETIME_ATTR | BOOL_ATTR
;
data_cont : | STRING data_cont | INT data_cont | comment data_cont
;
comment : COMM_ST_TAG comm_cont COMM_END_TAG
;
comm_cont : | STRING comm_cont | INT comm_cont | STRING '-' comm_cont | INT '-' comm_cont
;
%%