递归上升解析器如何工作?我自己编写了一个递归下降解析器,但是我不太了解LR解析器。我的found on Wikipedia只是增加了我的困惑。
另一个问题是为什么递归上升解析器没有比基于表的解析器使用更多。似乎递归上升解析器总体上具有更高的性能。
最佳答案
经典的dragon book很好地解释了LR解析器的工作方式。如果我没记错的话,还可以在Parsing Techniques. A Practical Guide.上阅读有关它们的信息。维基百科中的文章(至少是介绍)是不正确的。它们是由Donald Knuth创建的,他在《计算机编程艺术》第5卷中对其进行了解释。如果您了解西班牙语,这里有我发的完整书籍here。并不是所有的书都是西班牙语。
在了解它们如何工作之前,您必须了解一些概念,例如“首先”,“跟随”和“提前”。另外,我真的建议您在尝试理解LR(上升)解析器之前,先了解LL(后代)解析器背后的概念。
有一系列解析器LR,特别是LR(K),SLR(K)和LALR(K),其中K是它们需要工作的前瞻次数。 Yacc支持LALR(1)解析器,但是您可以进行调整,而不是基于理论进行调整,以使其能够使用更强大的语法。
关于性能,取决于所分析的语法。它们以线性时间执行,但是它们需要多少空间取决于您为最终解析器建立的状态数。
关于parsing - 递归上升解析器如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/929819/