首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个LR(0)文法都是SLR(1),但反之亦然,为什么?

每个LR(0)文法都是SLR(1),但反之亦然,为什么?
EN

Stack Overflow用户
提问于 2010-11-14 06:16:31
回答 1查看 3.3K关注 0票数 3

每个LR(0)文法都是SLR(1),但反之亦然,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-14 07:33:35

基本上,SLR(1)文法可以解决相应LR(0)文法中存在的shift-reduce冲突。以维基百科的SLR parser页面上的示例语法为例(它在一个更低、更严格的级别对此进行了解释):

  1. S

E

  1. E→1 E
  2. E→1

当LR(0)解析器正在解析E并且"1“是下一个输入符号时,它可以识别E和reduce (规则3),或者它可以转换以解析后面的E(规则2)。因为它不能向前看,所以LR(0)不能决定要做什么。如果我们查看LR(0)在遇到"1“(添加了字符串结束符号)时可能处理的items,这一点就会变得更加明显:

  • E

1·E $

  • E→1·$

第一个需要移位,第二个需要减少。

使用上面的语法,SLR(1)语法可以向前看一个符号,并确定要采取的操作。E后面只能跟$,因此reduce操作仅在字符串末尾有效。这对应于第二个项目,您可以看到下一个符号是"$“。

有关SLR(1)而不是LR(0)的另一个示例语法,请参阅德克萨斯大学的Fegaras的notes for CSE 5317/4305

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4175031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档