我似乎无法理解LALR(1)和LR(1)之间的区别,只是LALR(1)的状态似乎少于LR(1)。
我想知道是否有人有例子说明差异和一些解释。
谢谢
答案 0 :(得分:1)
Dragon书中有一个示例(示例4.44;如果是第二版,则为4.58):
S' → S
S → aAd | bBd | aBe | bAe
A → c
B → c
由于语法仅生成四个字符串,因此创建LR项目集非常容易。当您执行此操作时,您会看到有两组具有相同项目但前瞻不同的集合,分别对应于前缀ac
和bc
。没有冲突,因此语法为LR(1)。
LALR算法合并了项目集相同的状态,有效地合并了它们的先行状态。这会产生减少/减少冲突,因此语法不是LALR(1)。