参考资料
下面列出本书相关的主要参考资料。
它们不是阅读本书的前置条件,但在你想进一步理解 C 标准、编译器实现、链接器、解释器或增量式开发方法时很有用。
在线工具
Compiler Explorer:在线查看 C/C++ 代码对应汇编输出的工具。学习调用约定、优化结果和不同编译器行为时非常方便。
C 语言规范与标准化资料
N1570 [PDF]:C11 语言规范的最终草案。内容与正式标准基本一致,是查证 C 语言细节时最常用的公开资料。
N1570:C11 规范的 HTML 版,适合直接在浏览器中搜索和跳转。
X4J11/86-196 [PDF]:关于 C 预处理器宏展开算法的资料。实现预处理器时可以参考。
Rationale for American National Standard for Information Systems - Programming Language - C:C89 标准化委员会的设计说明。它解释了标准中许多设计选择背后的理由,比单纯阅读规范更容易理解语言为何如此定义。
相关编译器项目
8cc:作者实现的一个小型 C 编译器。代码规模较小,适合阅读整体结构。
9cc:作者实现的另一个 C 编译器项目,也是本书讲解思路的直接来源之一。
C 编译器从零开始开发(日记):作者记录编译器开发过程的文章。它展示了从非常小的功能开始,逐步扩展到更完整编译器的实际过程。
编译器与解释器书籍
An Incremental Approach to Compiler Construction [PDF]:介绍增量式编译器开发思想的论文。本书采用的“每一步都让编译器保持可运行”的方法,与这篇论文的思想相通。
Crafting Interpreters:Robert Nystrom 编写的在线书籍,讲解解释器和语言实现。它不是 C 编译器书,但在语法分析、AST、运行时设计等主题上很有参考价值。
A Retargetable C Compiler: Design and Implementation,David R. Hanson / Christopher W. Fraser:介绍 lcc 编译器实现的书。想了解更传统、更完整的 C 编译器结构时可以阅读。
如果你只想跟着本书完成自己的编译器,不必一开始就把这些资料全部读完。更实际的做法是:遇到标准细节时查 N1570;想验证汇编输出时用 Compiler Explorer;想学习完整项目结构时,再阅读 8cc、9cc 或 lcc 相关资料。