每个LR(0)语法都是SLR(1),但反之亦然,不一定是正确的,为什么?

StackOverflow https://stackoverflow.com/questions/4175031

  •  09-10-2019
  •  | 
  •  

每个LR(0)语法都是SLR(1),但反之亦然,不一定是正确的,为什么?

有帮助吗?

解决方案

基本上,SLR(1)语法可以解决相应LR(0)语法中存在的转移冲突。以Wikipedia的语法为例 SLR解析器 页面(以较低,更严格的层次解释这一点):

  1. S→E。
  2. E→1 E
  3. E→1

当LR(0)解析器解析 e “ 1”是下一个输入符号,它可以识别 e 并减少(规则3),否则可能会移动以解析以下E(规则2)。因为它无法向前看,所以LR(0)无法确定该执行。如果我们看一下,这将变得更加明显 项目 当LR(0)遇到“ 1”(已添加了串线符号)时,它可能正在处理:

  • E→1•E $
  • E→1•$

第一个需要轮班,第二个需要减少。

使用上述语法,SLR(1)语法可以向前看一个符号,并确定要采取的动作。 e 只能在$之后进行$,因此减少操作仅在字符串结束时有效。这对应于第二个项目,您可以看到下一个符号为“ $”。

有关SLR(1)而不是LR(0)的另一个示例语法,请参见Fegaras' CSE 5317/4305的注释 在德克萨斯大学。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top