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

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

我对生成操作和转到表背后的理论有很好的理解,但需要一些资源来帮助我实现它。

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

谢谢。

有帮助吗?

解决方案

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

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

MetaII 编译器教程

这一切都基于 Val Schorre 撰写的一篇令人惊叹的 10 页技术论文: 元二:一种面向语法的编译器编写语言 从1964年开始。早在 1970 年,我就从中学会了如何构建编译器。当你终于明白编译器如何自我再生时,有一个令人兴奋的时刻......

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

其他提示

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

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

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

希望有帮助!

不是真的在线,但龙书具有相当精细LR分析的讨论。

我发现它更容易学习,学习写LR分析器之前写递归下降解析器。嗯,老实说,经过多年的写作解析器的,我从来不认为有必要写一个LR语法分析器。

我最近写在CodeProject教程称为在C#4.0实现编程语言工具其描述了递归下降解析技术。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top