什么是IELR(1)解析器?


14

我试图自学野牛的用法。手册页bison(1)关于bison:

使用LALR(1),IELR(1)或规范LR(1)解析器表生成确定性LR或广义LR(GLR)解析器。

什么是IELR解析器?我在万维网上找到的所有相关文章都是付费的。



@reinierpost我现在觉得很愚蠢。我为什么没找到这个?
FUZxxl 2012年

我不知道
-Google

@reinierpost,您是否想通过引用您的链接来回答此问题,以便清理此问题
Merbs 2012年

嗯...就这样就好了。
reinierpost 2012年

Answers:


3

IELR(1)解析算法

IELR(1)分析算法是在2008年开发了乔尔E.丹尼作为他的博士的一部分 在克莱姆森大学的Brian A. Malloy的指导下进行研究。IELR(1)算法是David Pager在1977年开发的所谓“最小” LR(1)算法的变体,它本身是Donald Knuth在1965年发明LR(k)解析算法的变体。IELR(1)中的IE代表不充分消除(请参阅最后一节)。

LR(1)算法

LR(1) IELR(1)的一部分代表大号 EFT到右,- [R ightmost推导与1超前记号。LR(1)解析器也称为规范解析器。此类解析算法采用自底向上,移位减少的解析策略,并具有堆栈和状态转换表,确定了解析期间要采取的下一个动作。

从历史上看,LR(1)算法由于过渡表的内存需求大而受到不利影响。Pager的改进是开发了一种在生成过渡表时组合过渡状态的方法,从而显着减小了表的大小。因此,Pager算法使LR(1)解析器在空间和时间效率方面与其他解析策略竞争。短语“最小LR(1)解析器”是指Pager算法引入的转换表的最小大小。

寻呼机算法的局限性

最小的LR(1)算法根据要解析的语言的特定输入语法生成转换表。不同的语法可以产生相同的语言。实际上,非LR(1)语法有可能产生LR(1)可解析的语言。在实践中,LR(1)解析器生成器接受非LR(1)语法,该语法具有解决两个可能状态转换之间的冲突(“移位-减少冲突”)的规范,以适应这一事实。Denny和Malloy发现,即使提供了某些非LR(1)语法,即使非LR(1)语法生成了LR(1)语言,Pager的算法也无法生成足以解析LR(1)语言的强大解析器。

Denny和Malloy通过证明Gawk和Gpic都是被广泛使用的成熟软件,执行了错误的解析器操作,从而表明了这种限制不仅是学术上的。

IELR(1)的改进

Denny和Malloy通过将Pager算法生成的过渡表与等效LR(1)语法的过渡表进行比较,研究了Pager算法缺陷的根源,并确定了它们所称的不足之处的两个来源,这些不足源出现在Pager的过渡表中算法,但不在LR(1)转换表中。Denny和Malloy的IELR(1)(不充分消除 LR(1))算法是一种算法,旨在消除在生成实际上与Pager算法大小相同的转换表时的这些不足


6

声称对其进行介绍的文章:IELR(1):具有冲突解决功能的非LR(1)语法的实用LR(1)解析器表(通过archive.org),克莱姆森大学的Joel E. Denny和Brian A. Malloy ,可从Malloy的网站免费获得。

他们的价值是我无法回答的。(个人而言,我不理解需要进行如此残酷的CFG解析-为什么仅使用GLR时会限制您的表达能力?对我来说有意义的是TAGPEG(它们看起来很自然,可以增加表达能力)或树语法(对于XML之类的语言,从设计上来说,识别解析树是没有问题的。)


虽然我确实同意有关技术的原则,但问题通常是传统的确定性解析具有更好,更完整的实现。另一个问题是常规CF解析功能更强大,但GLR可能不是最好的版本。
babou 2014年

4
人们开发出笨拙的CFG解析器的主要原因是,GLR解析器不一定在线性时间内运行,这对于许多应用程序来说是一个巨大的问题。IELR解析器可以保证线性运行时以及更多。
2015年

我不明白为什么会有问题。
reinierpost 2015年

2
Øñ4Øñ3一世XØñX。人类不会永远活着,还有很多事情要做。浪费时间通常是不好的。
用户

3
我想指出:“个人而言,我不理解这种残缺的CFG解析的必要性-当您仅可以使用GLR时,为什么要限制您的表达能力?” 在这种情况下被误导了。IELR(1)用于生成效率更高的LR(1)解析器表,从而可以实现效率更高的GLR解析器
orlp
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.