野牛减少/减少冲突警告

时间:2018-09-15 18:22:19

标签: parsing bison

在生成一个非常基本的类似于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
        ;

%%

0 个答案:

没有答案