LL和LR语法的语言理论比较


66

人们经常说LR(k)解析器比LL(k)解析器更强大。这些陈述在大多数时候都含糊不清。特别是,我们应该比较固定的类还是所有的并集?那么情况如何呢?我尤其对LL(*)如何适合感兴趣。kk

据我所知,语法分析器LL和LR接受的各个语法集合是正交的,因此让我们来谈谈由各个语法集合产生的语言。令表示由解析器可以解析的语法生成的语言的类别,其他类别也类似。LR(k)LR(k)

我对以下关系感兴趣:

  • LL(k)?LR(k)
  • i=1LL(k)?i=1LR(k)
  • i=1LL(k)=?LL()
  • LL()?i=1LR(k)

其中一些可能很容易。我的目标是收集一个“完整”的比较。参考被赞赏。


2
也许这可以帮助您!语法层次结构图像
Andrea Tucci

1
@AndreaTucci:是的,但这仅涵盖语法,不涉及生成的语言。
拉斐尔

Answers:


60

有许多已知的收容措施。让表示包含,而表示适当的包含。让表示不可比性。×

令,。LL=kLL(k)LR=kLR(k)

语法水平

对于LL

  • LL(0)LL(1)LL(2)LL(2)LL(k)LLLL()
  • SLL(1)=LL(1),SLL(k)LL(k),SLL(k+1)×LL(k)

Rosenkrantz和Stearns 在确定性自上而下语法属性中证明了其中的大多数。是一个微不足道的练习。Terence Parr的演示文稿将放在幻灯片13上。Jarzabek和Krawczyk的纸上LL-正则语法显示,它们的证明从小到扩展到SLL(k+1)×LL(k)LL()LLLLRLLLL()

对于LR

  • LR(0)SLR(1)LALR(1)LR(1)
  • SLR(k)LALR(k)LR(k)
  • SLR(1)SLR(2)SLR(k)
  • LALR(1)LALR(2)LALR(k)
  • LR(0)LR(1)LR(2)LR(k)LR

这些都是简单的练习。

LL与LR

  • LL(k)LR(k)确定性自上而下语法加上任何左递归语法的属性
  • LL(k)×SLR(k),LALR(k),LR(k1)(简单练习)
  • LLLR(任何左递归语法)
  • LL()×LR(左递归与任意先行)

语言水平

对于LL

  • LL(0)LL(1)LL(2)LL(k)LLLL()
  • SLL(k)=LL(k)

其中大多数已在确定性自上而下语法的性质中得到证明。Nijholt的和LR常规语法的等价问题参考了显示。Jarzabek和Krawczyk撰写的LL-regular语法显示了,并且它们的证明也很容易地扩展到LL(k)LL()LLLLRLLLL()

对于LR

  • LR(0)SLR(1)=LALR(1)=LR(1)=SLR(k)=LALR(k)=LR(k)=LR

克努斯(Knuth)在他的《语言从左到右的翻译》一书中介绍了LR(k)证明了其中的一些,其余的在将LR(k)语法转换为LR(1),SLR(1),和(1,1) Mickunas等人的有界右上下文语法

LL与LR

  • { 一个b Ĵ | Ĵ }LLLR(1)(根据上述内容,严格约束的典范示例为){aibj|ij}
  • { a i b j | Ĵ }LL()×LR(语言显示了一半的要求,Nijholt引入的LL 和LR常规语法的等价问题引用了论文显示另一半){aibj|ij}
  • LR(1)=DCFL(请参见此处的参考)。

很好的答案,我已经投票了。我会以为Frank deRemer在他的原始LALR论文中证明了LALR <= LR?(1969年?)
user207421

@EJP:如果通过折叠状态定义,则是立即的。deRemer仅证明他的构造创建了相同的解析器。语法类不相等,这是一个很好的练习(甚至对此站点来说是一个很好的问题)。语言类的平等性要棘手得多:如果您确实想要详细信息,请阅读这篇论文;)大号大号ř 大号řLALR(k)LR(k)LALRLR
亚历克斯·十·布林克2012年

1
@AlextenBrink我确实读过这篇论文,并由Frank de Remer教书,但是已经30多年了;-)感谢所有细节。
user207421

为每个不等式收集示例语法可能会很好。
o11c 2015年

1
@ o11c我认为这将使一个答案不堪重负。我的印象是亚历克斯在必要时提供了很好的参考。他对某些人说“轻松运动”。我想,如果读者不能提出一种语法,他们可以发布一个新问题,询问具体情况。
拉斐尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.