6-LALR预测分析表

  • 研究LALR的原因

    • 规范LR分析表的状态数偏多
  • LALR特点

    • LALR和SLR的分析表有同样多的状态,比规范LR分析表要小得多
    • LALR的能力介于SLR和规范LR之间
    • LALR的能力在很多情况下已经够用
  • LALR分析表构造方法

    • 通过合并规范LR(1)项目集来得到
    • 合并核心项

image.png

写出自动机,发现有共同点
image.png

image.png

合并之后的
image.png

image.png

分析表
image.png

该报错的依旧是报错
image.png

是否会引起冲突

对于 LR(1) 文法, 合并得到的 LALR(1) 分析表是否会引入冲突?

·     不会引入移入/归约冲突

假设合并后出现冲突,[A → α·, a] 与 [B → β · aγ, b]

则在 LR(1) 自动机中, 存在某状态同时包含 [A → α·, a] 与 [B → β · aγ, c] (c随便是什么)

·     可能会引入归约/归约冲突

image.png

总结

语法分析: 

自顶向下:  LL(1)

自底向上:  LR(0),  SLR(1), LALR(1), LR(1)

LL(1), LR(0), SLR(1), LALR(1), LR(1)文法之间的关系

https://blog.csdn.net/zuzhiang/article/details/79047743

LR(0) < SLR(1) < LALR(1) < LR(1)

即某个文法,如果是LR(0)文法,

那其一定是SLR(1)文法,

反过不成立。

什么是LR(0)文法?

LR(0)自动机, LR(0)分析表

LL(1) 和他们没关系

所有的二义性文法都不是上述文法.