LL无法表示的LR语法示例?

时间:2012-01-10 19:44:41

标签: parsing lr ll

所有LL语法都是LR语法,但不是相反,但我仍然很难处理这种区别。我很好奇LR示例中没有等效LL表示的小例子(如果有的话)。

1 个答案:

答案 0 :(得分:18)

嗯,就语法而言,它很简单 - 任何简单的左递归语法都是LR(可能是LR(1))而不是LL。所以列表语法如:

list ::= list ',' element | element

是LR(1)(假设元素的产生是)但不是LL。这样的语法可以很容易地通过左因子等转换成LL语法,所以这不是太有趣了。

更感兴趣的是LR而不是LL的语言 - 这是一种语言,对于任何k,存在LR(1)语法但没有LL(k)语法。一个例子是需要可选的尾随匹配的东西。例如,任意数量的a符号的语言后跟相同数量或更少的b符号,但不会更多b s - {a ^ i b ^ j |我> = j}。有一个简单的LR(1)语法:

S ::= a S | P
P ::= a P b | \epsilon

但没有LL(k)语法。原因是LL语法需要在查看a时决定是匹配a + b对还是奇数a,而LR语法可以将该决定推迟到看到b或输入结束之后。< / p> cs.stackechange.com上的

This post有很多关于此

的参考资料