2009-08-31 77 views
6

我想为教育目的编写一个解析器生成器,并且想知道是否有一些不错的在线资源或解释如何编写解析器的教程。 Jack Crenshaw撰写的“Let's Build a Compiler”一书。用于编写解析器生成器的在线资源

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

我对生成动作和goto表背后的理论有一个体面的理解,但想要一些资源,这将帮助我实现它。

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

谢谢。

回答

8

我同意别人的看法,龙书是LR解析的好背景。

如果你有兴趣的递归下降解析器,一个极为有趣的学习体验是这个网站,它会引导您通过建立一个完全独立的编译器系统,该系统可以编译本身和其他语言:

MetaII Compiler Tutorial

这是全部基于Val Schorre发表的一篇精彩的小型10页技术论文:META II:面向句法的编译器编写语言来自诚实至神的1964年。我从1970年开始学习了如何构建编译器。当你最终了解编译器如何重新生成自己时,有一个令人兴奋的时刻......

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

1

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

2

如果你想去蟒蛇路线,我会建议以下。

我发现这两个是非常有益的,保麦圭尔pyparsing的作者是超级帮助你来的时候遇到问题。 Python中的文本处理(Text Processing in Python)只是一个方便的参考,它可以帮助您在尝试构建解析器时掌握正确的思路。

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

希望有助于!

0

我发现在学习编写LR解析器之前学习编写递归下降解析器会更容易。说实话,经过多年的编写解析器,我从来没有觉得有必要编写一个LR解析器。

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