我试图自学野牛的用法。手册页bison(1)关于bison:
使用LALR(1),IELR(1)或规范LR(1)解析器表生成确定性LR或广义LR(GLR)解析器。
什么是IELR解析器?我在万维网上找到的所有相关文章都是付费的。
我试图自学野牛的用法。手册页bison(1)关于bison:
使用LALR(1),IELR(1)或规范LR(1)解析器表生成确定性LR或广义LR(GLR)解析器。
什么是IELR解析器?我在万维网上找到的所有相关文章都是付费的。
Answers:
该IELR(1)分析算法是在2008年开发了乔尔E.丹尼作为他的博士的一部分 在克莱姆森大学的Brian A. Malloy的指导下进行研究。IELR(1)算法是David Pager在1977年开发的所谓“最小” LR(1)算法的变体,它本身是Donald Knuth在1965年发明的LR(k)解析算法的变体。IELR(1)中的IE代表不充分消除(请参阅最后一节)。
的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都是被广泛使用的成熟软件,执行了错误的解析器操作,从而表明了这种限制不仅是学术上的。
Denny和Malloy通过将Pager算法生成的过渡表与等效LR(1)语法的过渡表进行比较,研究了Pager算法缺陷的根源,并确定了它们所称的不足之处的两个来源,这些不足源出现在Pager的过渡表中算法,但不在LR(1)转换表中。Denny和Malloy的IELR(1)(不充分消除 LR(1))算法是一种算法,旨在消除在生成实际上与Pager算法大小相同的转换表时的这些不足。
声称对其进行介绍的文章:IELR(1):具有冲突解决功能的非LR(1)语法的实用LR(1)解析器表(通过archive.org),克莱姆森大学的Joel E. Denny和Brian A. Malloy ,可从Malloy的网站免费获得。
他们的价值是我无法回答的。(个人而言,我不理解需要进行如此残酷的CFG解析-为什么仅使用GLR时会限制您的表达能力?对我来说有意义的是TAG或PEG(它们看起来很自然,可以增加表达能力)或树语法(对于XML之类的语言,从设计上来说,识别解析树是没有问题的。)