不耐烦的总结:我正在寻找关于为通用语言结构生成代码而不是解析的良好参考。
我对编程语言很感兴趣,并尝试尽可能多地阅读文献。但他们中的大多数都从功能和理论的角度涵盖了这个主题,我发现他们很难理解,更不用说实现这些想法了。
所以问题是;对于以更加命令式和实用的方式涵盖该主题的编程语言实现,您建议使用哪些资源?
例如,我发现“ Lua 5.0 的实现”论文很有启发性。
请注意,我不是在寻找有关解析或标记化的文章。
不耐烦的总结:我正在寻找关于为通用语言结构生成代码而不是解析的良好参考。
我对编程语言很感兴趣,并尝试尽可能多地阅读文献。但他们中的大多数都从功能和理论的角度涵盖了这个主题,我发现他们很难理解,更不用说实现这些想法了。
所以问题是;对于以更加命令式和实用的方式涵盖该主题的编程语言实现,您建议使用哪些资源?
例如,我发现“ Lua 5.0 的实现”论文很有启发性。
请注意,我不是在寻找有关解析或标记化的文章。
这里有一堆很好的教科书:
Modern Compiler Implementation in Java (Tiger book) AW Appel Cambridge University Press, 1998 ISBN 0-52158-388-8 关于编译器实现的教科书教程,包括许多语言特性的技术
编译器:原理、技术和工具(龙书) Aho、Lam、Sethi 和 Ullman Addison-Wesley,2006 年 ISBN 0321486811 经典的编译器教科书,虽然它的前端重点反映了它的时代。
Advanced Compiler Design and Implementation (Whale book) Steven Muchnick Morgan Kaufman Publishers, 1997 ISBN 1-55860-320-4 非常完整,适合工业从业者和研究人员。
Engineering a Compiler (Ark book) Keith D. Cooper, Linda Torczon Morgan Kaufman Publishers, 2003 ISBN 1-55860-698-XA 现代课堂教科书,更加强调后端和实施技术。
为现代架构优化编译器 Randy Allen 和 Ken Kennedy Morgan Kaufman 出版商,2001 ISBN 1-55860-286-0 一本现代教科书,重点关注包括并行化和内存层次优化在内的优化。
编程语言语用学 Michael L. Scott Morgan Kaufmann Publishers, 2005 ISBN 0126339511
据说(我通读了它,但还没有完成),编译器构造的增量方法非常好。它描述了作者如何教授他的编译器课程。
从摘要:
编译器被认为是神奇的神器,由巫师精心打造,普通人深不可测。关于编译器的书籍最好被描述为巫师谈话:由一群无所不知的从业者编写并为其编写。现实生活中的编译器过于复杂,无法用作教育工具。现实生活中的编译器和教育玩具编译器之间的差距太大了。新手编译器编写者面对一道难以逾越的障碍感到困惑,“最好写一个解释器。”</p>
本文的目标是打破这一障碍。我们展示了构建编译器可以像构建解释器一样简单。我们构建的编译器接受 Scheme 编程语言的大部分子集,并为 Intel-x86 架构(个人计算的主要架构)生成汇编代码。编译器的开发分为许多小的增量步骤。每一步都会为逐渐扩展的 Scheme 子集生成一个完全工作的编译器。每个编译器步骤都会生成真正的汇编代码,这些代码可以被组装然后由硬件直接执行。我们假设读者熟悉基本的计算机体系结构:它的组件和执行模型。不需要详细了解 Intel-x86 架构。
扩展教程中详细描述了编译器的开发。教程提供了支持材料,例如自动测试工具和综合测试套件。我们希望 Scheme 的当前和未来的实现者在本文中找到开发高性能编译器的动机以及实现该目标的方法。
“龙”和“虎”的书(见上文)都很棒,虽然我觉得“虎”(阿佩尔)的书有点密集。我也很喜欢David Galles 的Modern Compiler Design。至于帮助您理解的工具和实用程序,我建议您查看以下一项或多项:
我建议玩ANTLR。我用了一段时间,发现它很容易使用。
我最喜欢的是 Robert Morgan 的“Building an Optimizing Compiler”。非常实用,涵盖了静态单一分配。
Another hint: do not start digging into GCC; it is way too complicated. You want something more researchy and simple to start with, I would suggest looking into something like a Java compiler written in Java or the Erlang compilers written in Erlang.
Bjarne Stroustrup 撰写的 C++ 的设计和演变,代码很少,但主要讨论了设计语言中的权衡和其他问题。
尝试查看LLVM项目及其出版物和教程。
我喜欢 Nicolas Wirth 的 Compiler Construction,但也许那是因为学习 (Turbo) Pascal 是我决定进入计算机科学的原因。
紫龙书是有史以来最好的。