如同 1.6 中所述,编译的阶段通常划分为前端分析源代码,后端负责目标代码的综合,通常还有一个中间端负责语言和机器无关的代码优化。2,4章讨论了前端的工作,最终构建语法树。本章转向后端的工作,特别是代码生成,汇编和链接。我们在 17 章继续代码优化。
在 6 - 10 章,我们通常讨论编译器生成的代码实现多种语言特性。现在我们要研究编译器如何从语法树生成代码,以及如何将多个编译产物组合成一个可执行程序。在 15.1 更详细讨论程序综合。我们特别关注将该工作氛围不同阶段的几种合理方式。15.2 我们考虑很多种不同的 IR 形式。在网站上,我们提供了两个具体示例--GNU 编译器使用的 GIMPLE 和 RTL 格式。我们将在 16 章研究两种其他的 IR 形式:Java bytecode 和 微软使用的 Common Intermediate Lanuage(CIL) 以及其他实现。
在 15.3 中我们研究从抽象语法树汇编代码的生成,使用属性语法作为形式化框架。在 15.4 我们讨论二进制目标文件的内部构造,以及程序在内存中的布局。15.5 描述汇编。15.6 考虑链接。