Zif*_*fre 6 parsing yacc lalr bison shift-reduce-conflict
我正在YACC(实际上是Bison)写一个语法,我有一个转移/减少问题.它包括后缀增量和减量运算符.这是语法的精简版:
%token NUMBER ID INC DEC
%left '+' '-'
%left '*' '/'
%right PREINC
%left POSTINC
%%
expr: NUMBER
| ID
| expr '+' expr
| expr '-' expr
| expr '*' expr
| expr '/' expr
| INC expr %prec PREINC
| DEC expr %prec PREINC
| expr INC %prec POSTINC
| expr DEC %prec POSTINC
| '(' expr ')'
;
%%
Run Code Online (Sandbox Code Playgroud)
Bison告诉我有12个移位/减少冲突,但如果我注释掉后缀增量和减量的行,它就可以正常工作.有谁知道如何解决这个冲突?在这一点上,我正在考虑转向LL(k)解析器生成器,这使得它更容易,但LALR语法似乎总是更自然地编写.我也在考虑GLR,但我不知道有什么好的C/C++ GLR解析器生成器.