所以有一个消息来源说它是,而另一个消息来说它不是
一位消息人士说:
另一个人说:我找到的最接近的答案是:
Relationship between LR(0), LL(0), LALR(1), etc?
但这并没有回答LL(1)和LALR(1)之间的关系
还如果你能回答更一般的问题,那就是LL(k)和LALR(k)之间的关系,它会更有帮助
感谢。
答案 0 :(得分:2)
最新答案(至少在SE网络上)可以在answer网站的computing science中找到,其中解析理论问题可能会吸引更好的答案。
在阅读该答案中的图表时,请注意 grammars 的包含关系与语言的包含关系之间存在差异。其中一个最明显的例子是所有LR(k)语法都可以机械地转换成LR(1)语法,结果只有两类LR 语言:LR( 0)和LR(1)。 (实际上,您可以将LR(k)语言简化为SLR(1),因此各种算法区别也会在语言级别上消失。)另一方面,LL(k)语言是严格的包含层次结构。 LL(k)语言的联合(对于有限k)是LR(1)的严格子集。
但对于语法而言,关系并非如此简单。显然,LL(k),LR(k),LALR(k),SLR(k)等形成层次结构,直观地因为没有必要使用所有先行信息,并且因为任何语法都可以添加需要k + 1前瞻的产品(适用于LL和LR算法)。
LL(k)语法必然是LR(k),但它们不一定是LALR(k)。在Appel's Modern Compiler Implementation textbook中有一个练习,它提供了一个LL(1)语法的例子,它不是LALR(1);你可以找到this answer中转录的语法。这应该提供关于如何构造k>的示例的想法。 1.(找到非LL(k)的LALR(k)语法是微不足道的:你需要的只是左递归。)