8

我想为教育目的编写一个解析器生成器,并且想知道是否有一些很好的在线资源或教程来解释如何编写一个。类似于 Jack Crenshaw 的“让我们构建编译器”的内容。

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

我对生成 action 和 goto 表背后的理论有很好的理解,但想要一些资源来帮助我实现它。

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

谢谢。

4

4 回答 4

9

我同意其他人的观点,龙书是 LR 解析的良好背景。

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

MetaII 编译器教程

这一切都基于 Val Schorre 的一篇惊人的 10 页小技术论文:META II: A Syntax-Oriented Compiler Writing Language fromHonest -to-God 1964。我在 1970 年学会了如何构建编译器。有一个头脑- 当您终于了解编译器如何重新生成自身时,令人激动的时刻......

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

于 2009-09-01T09:23:47.877 回答
2

如果你想走 python 路线,我会推荐以下。

我发现这两种方法都非常有帮助,pyparsing 的作者 Paul McGuire 在您遇到问题时非常擅长帮助您。《Python 中的文本处理》一书只是一本方便的参考书,触手可及,可帮助您在尝试构建解析器时进入正确的思维框架。

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

希望有帮助!

于 2009-08-31T22:32:58.217 回答
1

不是真的在线,但Dragon Book对 LR 解析进行了相当详尽的讨论。

于 2009-08-31T21:25:00.693 回答
-1

我发现在学习编写 LR 解析器之前学习编写递归下降解析器更容易。老实说,在写了很多年解析器之后,我从来没有发现有必要写一个 LR 解析器。

我最近在 CodeProject 上写了一篇名为“在 C# 4.0 中实现编程语言工具”的教程,其中描述了递归下降解析技术。

于 2011-10-29T02:36:29.133 回答