用于编写解析器生成器的在线资源

时间:2009-08-31 21:22:36

标签: parsing parser-generator lr

我想编写一个用于教育目的的解析器生成器,并且想知道是否有一些很好的在线资源或教程可以解释如何编写一个。杰克·克伦肖(Jack Crenshaw)的“让我们建立一个编译器”的方法。

我想为LR(1)语法编写解析器生成器。

我对生成动作和goto表背后的理论有了不错的理解,但是想要一些能帮助我实现它的资源。

首选语言是C / C ++,Java,即使是其他语言也可以。

感谢。

4 个答案:

答案 0 :(得分:8)

我赞同其他人,龙书是LR解析的好背景。

如果您对递归下降解析器感兴趣,本网站提供了一个非常有趣的学习体验,它将引导您构建一个完全独立的编译器系统,该系统可以编译自己和其他语言:

MetaII Compiler Tutorial

这完全基于Val Schorre撰写的一篇10页的精彩技术论文: META II:面向语法的编译器编写语言从1964年的老实到神。我学会了如何构建1970年的编译器。当你最终了解编译器如何重新生成时,会有一个令人兴奋的时刻....

我从大学时代就知道网站作者,但与网站无关。

答案 1 :(得分:2)

如果你想去python路线我会推荐以下内容。

我发现这两者都非常有用,而pyparsing的作者Paul McGuire在遇到问题时能够帮助你。 Python中的文本处理这本书只是一个方便的参考,可以帮助您在尝试构建解析器时帮助您进入正确的思维框架。

我还要指出,OO语言更适合作为语言解析引擎,因为它是可扩展的,多态性是正确的方法(恕我直言)。从状态机而不是“在xyz结束时查找分号”来看问题将证明您的解析器最终会变得更加健壮。

希望有帮助!

答案 2 :(得分:1)

不是真的在线,但Dragon Book对LR解析有相当精细的讨论。

答案 3 :(得分:0)

在学习编写LR解析器之前,我发现学习编写递归下降解析器更容易。老实说,经过多年编写解析器后,我从未发现编写LR解析器是必要的。

我最近在CodeProject上编写了一个名为Implementing Programming Language Tools in C# 4.0的教程,它描述了递归下降解析技术。