每个LR(0)文法都是SLR(1),但反之亦然,为什么?
发布于 2010-11-14 07:33:35
基本上,SLR(1)文法可以解决相应LR(0)文法中存在的shift-reduce冲突。以维基百科的SLR parser页面上的示例语法为例(它在一个更低、更严格的级别对此进行了解释):
E
当LR(0)解析器正在解析E并且"1“是下一个输入符号时,它可以识别E和reduce (规则3),或者它可以转换以解析后面的E(规则2)。因为它不能向前看,所以LR(0)不能决定要做什么。如果我们查看LR(0)在遇到"1“(添加了字符串结束符号)时可能处理的items,这一点就会变得更加明显:
1·E $
第一个需要移位,第二个需要减少。
使用上面的语法,SLR(1)语法可以向前看一个符号,并确定要采取的操作。E后面只能跟$,因此reduce操作仅在字符串末尾有效。这对应于第二个项目,您可以看到下一个符号是"$“。
有关SLR(1)而不是LR(0)的另一个示例语法,请参阅德克萨斯大学的Fegaras的notes for CSE 5317/4305。
https://stackoverflow.com/questions/4175031
复制相似问题