我想为教育目的编写一个解析器生成器,并且想知道是否有一些很好的在线资源或教程来解释如何编写一个。类似于 Jack Crenshaw 的“让我们构建编译器”的内容。
我想为 LR(1) 语法编写解析器生成器。
我对生成 action 和 goto 表背后的理论有很好的理解,但想要一些资源来帮助我实现它。
首选语言是 C/C++、Java,尽管其他语言也可以。
谢谢。
我想为教育目的编写一个解析器生成器,并且想知道是否有一些很好的在线资源或教程来解释如何编写一个。类似于 Jack Crenshaw 的“让我们构建编译器”的内容。
我想为 LR(1) 语法编写解析器生成器。
我对生成 action 和 goto 表背后的理论有很好的理解,但想要一些资源来帮助我实现它。
首选语言是 C/C++、Java,尽管其他语言也可以。
谢谢。
我同意其他人的观点,龙书是 LR 解析的良好背景。
如果你对递归下降解析器感兴趣,一个非常有趣的学习体验是这个网站,它引导你构建一个完全独立的编译器系统,可以编译自己和其他语言:
这一切都基于 Val Schorre 的一篇惊人的 10 页小技术论文:META II: A Syntax-Oriented Compiler Writing Language fromHonest -to-God 1964。我在 1970 年学会了如何构建编译器。有一个头脑- 当您终于了解编译器如何重新生成自身时,令人激动的时刻......
我从大学时代就认识网站作者,但与网站无关。
如果你想走 python 路线,我会推荐以下。
我发现这两种方法都非常有帮助,pyparsing 的作者 Paul McGuire 在您遇到问题时非常擅长帮助您。《Python 中的文本处理》一书只是一本方便的参考书,触手可及,可帮助您在尝试构建解析器时进入正确的思维框架。
我还要指出,OO 语言更适合作为语言解析引擎,因为它是可扩展的并且多态性是正确的方法(恕我直言)。从状态机而不是“在 xyz 末尾查找分号”的角度来看问题将证明您的解析器最终会变得更加健壮。
希望有帮助!
不是真的在线,但Dragon Book对 LR 解析进行了相当详尽的讨论。
我发现在学习编写 LR 解析器之前学习编写递归下降解析器更容易。老实说,在写了很多年解析器之后,我从来没有发现有必要写一个 LR 解析器。
我最近在 CodeProject 上写了一篇名为“在 C# 4.0 中实现编程语言工具”的教程,其中描述了递归下降解析技术。