我现在正在学习编译理论课程中的解析器。 我需要找到LL(1)但不在LALR中的语法示例。 我知道它应该存在。请帮我想一想这个问题最简单的例子。
答案 0 :(得分:14)
Some googling为非LALR(1)语法提出了这个例子,即LL(1):
S ::= '(' X
| E ']'
| F ')'
X ::= E ')'
| F ']'
E ::= A
F ::= A
A ::= ε
LALR(1)构造失败,因为E和F之间存在减少 - 减少冲突。在LR(0)状态集中,存在由
构成的状态E ::= A . ;
F ::= A . ;
这是S和X上下文所需要的。 LALR(1)这些项目的前瞻设置因此混合了源自S和X产品的令牌。这与LR(1)不同,其中这些情况有不同的状态。
使用LL(1),通过查看第一组备选方案做出决定,其中')'和']'总是出现在不同的备选方案中。
答案 1 :(得分:1)
来自龙书(第二版,第242页):
可以使用LR方法解析的语法类是可以使用预测或LL方法解析的语法类的正确超集。对于语法为LR(k),我们必须能够以右句形式识别生产右侧的出现,其中k个输入符号为先行。这个要求远不如LL(k)语法那么严格,在这些语法中我们必须能够识别生产的使用,只看到右边派生的前k个符号。因此,LR语法可以描述比LL语法更多的语言也就不足为奇了。