标记如何导致冲突?

时间:2012-01-11 00:31:50

标签: compiler-construction grammar bison yacc lex

为什么包含以下规则的语法会导致冲突?

    Statement   |   IF  {...} LP BoolExp RP %prec IFX  Statement { ... }
                |       ...

IFX终端是解决悬空的标准技巧。我认为这在某种程度上是相关的。 删除第一个标记可消除冲突。

消息野牛输出是:

  

警告:由于冲突,规则在解析器中无用:$ @ 2:/ * empty * /

1 个答案:

答案 0 :(得分:0)

Answered in the comments

@sarnold写道:

  

我希望这是相关且有用的:http://lists.gnu.org/archive/html/help-bison/2001-10/msg00011.html/

但是,SO仅弃用了网络链接的答案。所以我在这里总结一下。 该链接指向名单"由于@Hans Aberg的嵌入式操作" 导致的Shift减少错误。概括地说它建议:

  

解决此问题的最佳方法可能是收集语义   A和B生成的信息,然后在应用C或D时使用。