【问题标题】:Learning Resources on Parsers, Interpreters, and Compilers [closed]解析器、解释器和编译器的学习资源 [关闭]
【发布时间】:2010-09-07 16:38:31
【问题描述】:

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此需要在解析器、解释器和编译器的构建方面相对扎实。所以:

  • 有人知道有关构建解析器、解释器和编译器的任何好的资源吗?

编辑:我不是在寻找编译器编译器/解析器编译器,例如 Lex、Yacc 和 Bison...

【问题讨论】:

    标签: compiler-construction interpreter parsing compiler-theory language-theory


    【解决方案1】:

    不是很容易,但很详尽:the dragon book

    【讨论】:

      【解决方案2】:

      Compiler Construction: Principles and Practice 是这方面的最佳书籍。

      【讨论】:

        【解决方案3】:

        Aho 的“龙书”是 标准参考,但另一个不错的选择是 Andrew Appel 的 Modern Compiler Implementation in Java(也可在 MLC 中使用)。它逐步引导您了解编译器/解释器的每个必要组件,并提供大量有用的源代码。

        【讨论】:

          【解决方案4】:

          RE:lex、yacc、bison

          您的意思是您不需要指向它们的指针,或者您对使用它们不感兴趣?我不建议手动编写词法分析器或解析器。

          编辑:您可能对“编译器-编译器”可以完成的工作有一种夸大的感觉:编译的真正困难部分是在您构建 AST 之后开始的。 Aho、Louden 和 Appel 的书都很不错。

          【讨论】:

          • @Chris Conway 因为研究这个主题的一个主要原因是为了了解它,所以我更倾向于从头开始构建这样的东西。我知道很多 compiler-compilers 等,我可能会研究它们是如何实现的,但除此之外,我想要帮助我更好地理解解析器、解释器、和编译器的工作以及如何实现它们。
          【解决方案5】:

          Steve Yegge (Rich Programmer Food) 的这篇非常有趣的博文不会告诉您关于如何 构建编译器的所有信息(尽管它确实包含了相当多的好东西洞察力),但它很好地解释了为什么你想了解编译器。

          哎呀,那篇帖子差点让我开始学习编译器,而且我有一份全职工作,家里有一个 3 岁的孩子,平均每天有大约 -1.5 小时的空闲时间。

          【讨论】:

            【解决方案6】:

            我推荐Compiler Design in C,不幸的是你必须在二手书网站上找到它。这本书唯一真正的问题是它是在编译速度是一个重要因素时写回来的,所以编译器是用 C 编写的。这已经足够低级语言了,有时实现理论被埋在实现代码之下。

            您提到了解释器和编译器。我实际上建议从解释器而不是编译器开始。开始使用口译员要容易得多,而且使用它们往往更有趣,因为您可以立即获得有关您的工作方式的反馈。

            【讨论】:

              【解决方案7】:

              我最近阅读了Programming Language Processors in Java,并会向您推荐它,因为它从基本概念开始,然后带您完成递归下降编译器的实现,包括代码生成以及对替代方法的大量讨论。不过,我还没有阅读此线程中的其他建议书,因此无法与这些书进行比较。如果您不了解 Java,请不要被 In Java 部分推迟,因为这些概念及其实现已经得到很好的解释,您无需详细了解 Java 即可了解要点。

              【讨论】:

              • 我觉得这本书比龙书好很多。强烈推荐。
              【解决方案8】:

              以防万一:

              • 愿意玩
              • 希望有机会更快地构建一些东西,然后更深入
              • 可以在底层平台上使用 .NET

              ...那么我建议您检查 Microsoft 的 Dynamic Language Runtime,它在整个 Dynamic Silverlight SDK 中作为源代码提供。

              http://www.codeplex.com/sdlsdk

              它的一些优点是它提供了许多即用型功能,例如控制台、通用类型系统、通用抽象语法树等。该软件包包括三个实现:Python、Ruby 和 Javascript。

              也许这是实现 DLR 之外的短语言的好机会,然后开始检查实际的 DLR 代码,然后开始自己构建基本的东西。

              无论如何,祝你好运!

              【讨论】:

                【解决方案9】:

                MIT OpenCourseWare(OCW) 站点有一个课程,其项目是构建编译器……他们参考了 Dragon 的书和 Appel 的书,但除此之外,还有课堂笔记和讲座。班级是6.035 - Computer Language Engineering

                我发现课堂笔记对于解释递归下降解析器非常有用。

                【讨论】:

                  【解决方案10】:

                  我找到了"Let's build a compiler" - Jack Crenshaw 的教程,非常容易理解。 Jack 从头开始​​为 Pascal 构建了一个编译器,对每一步都有非常详细的解释。

                  【讨论】:

                    【解决方案11】:

                    这是一本老书,而且过时了,但我发现 Brinch Hansen on Pascal Compilers 是一本非常实用的关于创建语言和构建编译器元素的介绍。尽管有这个名字,但它并不特定于 Pascal。如果你能找到一份副本,那是非常值得的。

                    【讨论】:

                      【解决方案12】:

                      我读过的关于编译器的最好的论文是 1964 Val Schorre 的“META II 一种面向语法的编译器编写语言”。 (http://doi.acm.org/10.1145/800257.808896)

                      在 10 页中,他向您展示了如何构建一个非常简单但 非常有效的编译器 - 编译器,提供 您使用编译器 - 编译器语法并为您提供足够的 您可以在一个下午手动实施的详细信息(其中一个令人惊讶 当你意识到它是如何递归的时的概念时刻),并且只是为了咧嘴笑实现了一个 类似 ALGOL 的语言。这篇论文是一种完全的气体,真的应该 任何使用编译器技术的人都需要阅读。

                      这里有一个链接可以玩元编译的精彩教程, 基于论文。 http://www.bayfronttechnologies.com/mc_tutorial.html

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2010-09-05
                        • 2017-06-28
                        • 1970-01-01
                        • 2010-12-12
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多