【问题标题】:What are good resources on compilation? [duplicate]什么是编译的好资源? [复制]
【发布时间】:2010-09-14 06:39:51
【问题描述】:

不耐烦的总结:我正在寻找关于为通用语言结构生成代码而不是解析的良好参考。

我对编程语言很感兴趣,并尝试尽可能多地阅读文献。但他们中的大多数都从功能和理论的角度涵盖了这个主题,我发现它们很难理解,更不用说实现这些想法了。

所以问题是;对于以更命令性和实用的方式涵盖该主题的编程语言实现,您建议使用哪些资源?

例如,我发现“Lua 5.0 的实现”论文很有启发性。

请注意,我不是在寻找有关解析或标记化的文章。

【问题讨论】:

    标签: code-generation language-features compiler-theory


    【解决方案1】:

    这里有一堆很好的教科书:

    Java 中的现代编译器实现(老虎书) A.W.上诉 剑桥大学出版社,1998 国际标准书号 0-52158-388-8 一本关于编译器实现的教科书教程,包括许多语言特性的技术

    编译器:原理、技术和工具(龙书) Aho、Lam、Sethi 和 Ullman 艾迪生-卫斯理,2006 国际标准书号 0321486811 经典的编译器教科书,虽然它的前端重点反映了它的时代。

    高级编译器设计与实现(鲸鱼书) 史蒂文·穆奇尼克 摩根考夫曼出版社,1997 国际标准书号 1-55860-320-4 本质上是一本优化食谱;非常完整,适合工业从业者和研究人员。

    设计编译器(方舟书) 基思 D.库珀,琳达 Torczon 摩根考夫曼出版社,2003 国际标准书号 1-55860-698-X 现代课堂教科书,更加强调后端和实施技术。

    为现代架构优化编译器 兰迪艾伦和肯肯尼迪 摩根考夫曼出版社,2001 国际标准书号 1-55860-286-0 一本专注于优化的现代教科书,包括并行化和内存层次优化。

    编程语言语用学 迈克尔·L·斯科特 摩根考夫曼出版社,2005 国际标准书号 0126339511

    【解决方案2】:

    据说(我通读了它,但还没有读过),An Incremental Approach to Compiler Construction 非常棒。它描述了作者如何教授他的编译器课程。

    摘自:

    编译器被认为是神奇的神器,由巫师精心打造,普通人深不可测。关于编译器的书籍最好被描述为巫师谈话:由一群无所不知的从业者编写并为其编写。现实生活中的编译器过于复杂,无法用作教育工具。现实生活中的编译器和教育玩具编译器之间的差距太大了。新手编译器编写者面对一道难以逾越的障碍感到困惑,“最好写一个解释器。”

    本文的目标是打破这一障碍。我们展示了构建编译器可以像构建解释器一样简单。我们构建的编译器接受 Scheme 编程语言的大部分子集,并为 Intel-x86 架构(个人计算的主要架构)生成汇编代码。编译器的开发分为许多小的增量步骤。每一步都会为逐渐扩展的 Scheme 子集生成一个完全工作的编译器。每个编译器步骤都会生成真正的汇编代码,这些代码可以被汇编然后由硬件直接执行。我们假设读者熟悉基本的计算机体系结构:它的组件和执行模型。不需要详细了解 Intel-x86 架构。

    编译器的开发在扩展教程中有详细描述。教程提供了支持材料,例如与综合测试套件相结合的自动化测试工具。我们希望 Scheme 的当前和未来实现者在本文中找到开发高性能编译器的动机以及实现该目标的方法。

    【讨论】:

      【解决方案3】:

      我建议使用ANTLR。我用了一段时间,发现它很容易使用。

      【讨论】:

      【解决方案4】:

      “龙”和“虎”书(见上文)都很棒,虽然我觉得“虎”(阿佩尔)书有点密集。我也很喜欢 David Galles 的 Modern Compiler Design。至于帮助您理解的工具和实用程序,我建议您查看以下一项或多项:

      【讨论】:

        【解决方案5】:

        我最喜欢的是 Robert Morgan 的“构建优化编译器”。非常实用,涵盖了静态单个赋值。

        【讨论】:

          【解决方案6】:

          另一个提示:不要开始深入研究 GCC;这太复杂了。您想要一些更具研究性和简单性的东西,我建议您研究类似用 Java 编写的 Java 编译器或用 Erlang 编写的 Erlang 编译器。

          【讨论】:

            【解决方案7】:

            The Design and Evolution of C++ 由 Bjarne Stroustrup 撰写,代码很少,但主要讨论设计语言时的权衡和其他问题。

            【讨论】:

              【解决方案8】:

              尝试查看LLVM 项目及其出版物和教程。

              【讨论】:

                【解决方案9】:

                我喜欢 Nicolas Wirth 的 Compiler Construction,但也许是因为学习 (Turbo) Pascal 是我决定进入计算机科学领域的原因。

                http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf

                【讨论】:

                  【解决方案10】:

                  紫龙书是有史以来最好的。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-12-26
                    • 1970-01-01
                    • 2010-09-18
                    相关资源
                    最近更新 更多