Estoy escribiendo una gramática en YACC (en realidad Bison), y estoy teniendo un problema de cambio/reducción. Resulta de incluir los operadores de incremento y decremento de posfijo. Aquí es una versión reducida de la gramática:¿Cómo solucionar el cambio de YACC/reducir conflictos del operador de incremento posterior?
%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 ')'
;
%%
bisonte me dice que hay 12 de desplazamiento/reducción conflictos, pero si me comente todas las líneas para el incremento y decremento de sufijo, que funciona bien. ¿Alguien sabe cómo solucionar este conflicto? En este punto, estoy considerando pasar a un generador de analizadores LL (k), lo que lo hace mucho más fácil, pero las gramáticas LALR siempre me han parecido mucho más naturales para escribir. También estoy considerando GLR, pero no conozco ningún buen generador de analizadores sintácticos GLR C/C++.
Agradecería que los votantes de abajo al menos dieran una razón ... – Zifre