2012-03-24 104 views
-2

我有以下语法:YACC降低/减少冲突

  1. X:(Z)O
  2. X:N
  3. Z:X
  4. Z:ZX
  5. ○:+ | - |/| *
  6. N:[0..9]

解析器堆CURREN tly是:“(z(zx”,下一个令牌是)+)*

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

谢谢

+0

哪些是终端符号?冲突中涉及哪些规则? YACC展示的信息是什么?这看起来非常像家庭作业。请优化您的问题。 – mschonaker 2012-03-24 20:58:49

+0

是的,这是一项功课。终端符号是0..9和+ -/*。我没有得到的是分析器是将x减少到z还是将zx减小到z。可能是第一个,因为规则z:x是第一个,但我不确定。 – user1290468 2012-03-24 21:10:46

+1

'yacc -v'的输出会告诉你语法是什么(或'bison -v')。 – 2012-03-24 21:59:24

回答

0

答案是:规则4.

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

另一个原因是,如果我们减少规则3,我们会在解析栈上结束Z Z,这不是可能的句子形式。语法不会生成具有Z Z的偏导数。