所有 LL 语法都是 LR 语法,但不是相反,但我仍然很难处理这种区别。我很好奇没有等效 LL 表示的 LR 语法的小例子(如果有的话)。
问问题
2567 次
1 回答
21
好吧,就语法而言,它很容易——任何简单的左递归语法都是 LR(可能是 LR(1))而不是 LL。所以一个列表语法像:
list ::= list ',' element | element
是 LR(1)(假设元素的产生是)但不是 LL。这样的文法可以很容易地通过左因子等转换为 LL 文法,所以这并不太有趣。
更有趣的是 LR 但不是 LL 的 LANGUAGES - 这是一种存在 LR(1) 语法但没有任何 k 的 LL(k) 语法的语言。一个例子是需要可选尾随匹配的东西。例如,语言中任意数量的a
符号后跟相同数量或更少的b
符号,但不能更多b
s -- { a^ib^j | 我 >= j }。有一个简单的 LR(1) 语法:
S ::= a S | P
P ::= a P b | \epsilon
但没有 LL(k) 语法。原因是 LL 文法在查看 a 时需要决定是匹配 a+b 对还是匹配奇数 a,而 LR 文法可以将这个决定推迟到它看到 b 或输入的结尾之后。
cs.stackechange.com 上的这篇文章有很多关于此的参考
于 2012-01-10T22:33:11.783 回答