LL(1)语法的例子不是LALR?

时间:2011-06-27 00:02:06

标签: parsing compilation

我现在正在学习编译理论课程中的解析器。 我需要找到LL(1)但不在LALR中的语法示例。 我知道它应该存在。请帮我想一想这个问题最简单的例子。

2 个答案:

答案 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语法更多的语言也就不足为奇了。