-2
我有以下语法:YACC降低/减少冲突
- X:(Z)O
- X:N
- Z:X
- Z:ZX
- ○:+ | - |/| *
- N:[0..9]
解析器堆CURREN tly是:“(z(zx”,下一个令牌是)+)*
规则3或4中的哪一个要解析器来减少,为什么?
谢谢
我有以下语法:YACC降低/减少冲突
解析器堆CURREN tly是:“(z(zx”,下一个令牌是)+)*
规则3或4中的哪一个要解析器来减少,为什么?
谢谢
答案是:规则4.
直观地说,这是因为规则3和规则4是左关联的一对X的转换到Z的贪婪方式。
另一个原因是,如果我们减少规则3,我们会在解析栈上结束Z Z,这不是可能的句子形式。语法不会生成具有Z Z的偏导数。
哪些是终端符号?冲突中涉及哪些规则? YACC展示的信息是什么?这看起来非常像家庭作业。请优化您的问题。 – mschonaker 2012-03-24 20:58:49
是的,这是一项功课。终端符号是0..9和+ -/*。我没有得到的是分析器是将x减少到z还是将zx减小到z。可能是第一个,因为规则z:x是第一个,但我不确定。 – user1290468 2012-03-24 21:10:46
'yacc -v'的输出会告诉你语法是什么(或'bison -v')。 – 2012-03-24 21:59:24