【发布时间】:2010-11-13 22:16:30
【问题描述】:
每个 LR(0) 语法都是 SLR(1) 但反之亦然不一定是真的,为什么?
【问题讨论】:
每个 LR(0) 语法都是 SLR(1) 但反之亦然不一定是真的,为什么?
【问题讨论】:
基本上,SLR(1) 文法可以解决相应 LR(0) 文法中存在的移位归约冲突。以维基百科SLR parser 页面上的示例语法为例(它以更低、更严格的水平对此进行了解释):
当 LR(0) 解析器正在解析 E 并且“1”是下一个输入符号时,它可以识别 E 并减少(规则 3)或它可以转换以解析后面的 E(规则 2)。因为它不能向前看,所以 LR(0) 不能确定要做什么。如果我们查看items,这将变得更加明显,LR(0) 在遇到“1”时可能正在处理(已添加字符串结束符号):
第一个需要移位,第二个需要减少。
使用上述文法,SLR(1) 文法可以向前看一个符号并确定要采取的行动。 E 后面只能跟 $,所以 reduce 动作只在字符串末尾有效。这对应于第二项,您可以看到下一个符号是“$”。
有关 SLR(1) 而不是 LR(0) 的另一个示例语法,请参阅德克萨斯大学的 Fegaras 的notes for CSE 5317/4305。
【讨论】: