适用于LR(1)但不适用于LALR(1)的语法示例?

时间:2019-01-28 01:19:34

标签: parsing

我似乎无法理解LALR(1)和LR(1)之间的区别,只是LALR(1)的状态似乎少于LR(1)。

我想知道是否有人有例子说明差异和一些解释。

谢谢

1 个答案:

答案 0 :(得分:1)

Dragon书中有一个示例(示例4.44;如果是第二版,则为4.58):

S' → S
S  → aAd | bBd | aBe | bAe
A  → c
B  → c

由于语法仅生成四个字符串,因此创建LR项目集非常容易。当您执行此操作时,您会看到有两组具有相同项目但前瞻不同的集合,分别对应于前缀acbc。没有冲突,因此语法为LR(1)。

LALR算法合并了项目集相同的状态,有效地合并了它们的先行状态。这会产生减少/减少冲突,因此语法不是LALR(1)。