我是新来的野牛,我试图做一个文法解析表达式。 我现在面临着一种转变/减少困惑,我无法解决。解决表达语法中的移位/减少冲突
语法如下:
%left "[" "("
%left "+"
%%
expression_list : expression_list "," expression
| expression
| /*empty*/
;
expression : "(" expression ")"
| STRING_LITERAL
| INTEGER_LITERAL
| DOUBLE_LITERAL
| expression "(" expression_list ")" /*function call*/
| expression "[" expression "]" /*index access*/
| expression "+" expression
;
这是我的语法,但我面对的转变/减少与这两个规则"(" expression ")"
和expression "(" expression_list ")"
冲突。 我该如何解决这个冲突?
编辑:我知道我可以使用优先级攀登来解决这个问题,但我不想这样做,因为这只是表达式语法的一小部分,而表达式语法的大小会使用优先级爬升爆炸。
如果这是您的语法的整体,它没有转换 - 减少冲突。但是,我怀疑这是你的整个语法。 – rici
哇我现在觉得真是愚蠢......我在另一条规则中发现了一个错字,这影响了这一条 – Exagon
这就是为什么我们要求[mcve],这与“我的代码的几行”有很大不同。如果您制作[mcve],它通常会帮助您澄清问题,为您解决问题。 – rici