yacc减少/减少冲突

时间:2012-03-24 20:40:57

标签: parsing yacc

我有以下语法:

  1. x:(z)o
  2. x:n
  3. z:x
  4. z:z x
  5. o:+ | - | / | *
  6. n:[0..9]
  7. 解析器堆栈当前是:“(z(zx”下一个令牌是+)*)*

    规则3或4中的哪一个要使解析器减少以及为什么?

    谢谢

1 个答案:

答案 0 :(得分:0)

答案是:规则4。

直观地说,这是因为规则3和规则4是一个左关联对,它以贪婪的方式将X转换为Z.

另一个原因是,如果我们减少规则3,我们最终会在解析堆栈上使用Z Z,这不是一种可能的句子形式。语法不会生成具有Z Z的部分派生。