内容简介
编译器是计算机科学的核心技术之一,它是将高级语言程序转换为机器可执行代码的桥梁。本书作为一本高级编译器设计与实现的权威指南,深入探讨了编译器构建的各个方面,涵盖了从词法分析、语法分析、语义分析到中间代码生成、优化和目标代码生成的全部流程。
本书不仅介绍了编译器设计的基本原理和经典算法,还重点阐述了现代编译器实现中的高级技术,包括静态单赋值形式、数据流分析、循环优化、过程间分析等。书中通过丰富的实例和详尽的代码,展示了如何构建一个高效、健壮的编译器,并提供了大量实践建议,帮助读者解决实际开发中遇到的问题。
本书适合作为计算机科学及相关专业的研究生教材,也适合编译器设计人员、系统软件开发者及相关领域的研究人员作为参考用书。通过阅读本书,读者可以全面掌握现代编译器设计的核心思想和技术,从而能够设计和实现高性能的编译器。
目录
1.1 编译器结构回顾
1.2 基本问题中的高级论题
1.3 代码优化的重要性
1.4 优化编译器的结构
1.5 激进型优化编译器中各种优化的位置
1.6 本书各章的阅读流程
1.7 本书没有涉及的相关主题
1.8 例子中所用的目标机
1.9 数的表示与数据的大小
1.10 小结
1.11 进一步阅读
1.12 练习
第2章 非形式化编译算法表示
2.1 扩展的巴科斯-诺尔范式语法表示
2.2 ICAN简介
2.3 ICAN概貌
2.4 完整的程序
2.5 类型定义
2.6 声明
2.8 语句
2.9 小结
2.10 进一步阅读
2.11 练习
第3章 符号表结构
3.1 存储类、可见性和生命期
3.2 符号属性和符号表项
3.3 局部符号表管理
3.4 全局符号表结构
3.5 存储绑定和符号寄存器
3.6 生成取数和存数指令的方法
3.7 小结
3.8 进一步阅读
3.9 练习
第4章 中间表示
4.1 与中间语言设计有关的问题
4.2 高级中间语言
4.3 中级中间语言
4.4 低级中间语言
4.5 多级中间语言
4.6 我们的中间语言:MIR、HIR和LIR
4.7 用ICAN表示MIR、HIR和LIR
4.8 管理中间代码的若干数据结构和例程的ICAN命名
4.9 其他中间语言形式
4.10 小结
4.11 进一步阅读
4.12 练习
第5章 运行时支持
5.1 数据表示和指令
5.2 寄存器用法
5.3 局部栈帧
5.4 运行时栈
5.5 参数传递规则
5.6 过程的入口处理、出口处理、调用和返回
5.7 代码共享与位置无关代码
5.8 符号和多态语言支持
5.9 小结
5.10 进一步阅读
5.11 练习
第6章 自动产生代码生成器
6.1 简介代码生成器的自动生成
6.2 语法制导技术
6.3 语义制导的分析介绍
6.4 树模式匹配和动态规划
6.5 小结
6.6 进一步阅读
6.7 练习
第7章 控制流分析
7.1 控制流分析的方法
7.2 深度为主查找、前序遍历、后序遍历和宽度为主查找
7.3 必经结点和后必经结点
7.4 循环和强连通分量
7.5 可归约性
7.6 区间分析和控制树
7.7 结构分析
7.8 小结
7.9 进一步阅读
7.10 练习
第8章 数据流分析
8.1 一个例子:到达-定值
8.2 基本概念:格、流函数和不动点
8.3 数据流问题及其解决方法的分类
8.4 迭代数据流分析
8.5 流函数的格
8.6 基于控制树的数据流分析
8.7 结构分析
8.8 区间分析
8.9 其他方法
8.10 du链、ud链和网
8.11 静态单赋值形式
8.12 数组、结构和指针的处理
8.13 数据流分析器的自动构造
8.14 更贪婪的分析
8.15 小结
8.16 进一步阅读
8.17 练习
第9章 依赖关系分析和依赖图
9.1 依赖关系
9.2 基本块依赖DAG
9.3 循环中的依赖关系
9.4 依赖关系测试
9.5 程序依赖图
9.6 动态分配的对象之间的依赖关系
9.7 小结
9.8 进一步阅读
9.9 练习
第10章 别名分析
10.1 各种现实程序设计语言中的别名
10.2 别名收集器
10.3 别名传播器
10.4 小结
10.5 进一步阅读
10.6 练习
第11章 优化简介
11.1 第12~18章讨论的全局优化
11.2 流敏感性和可能与一定信息
11.3 各种优化的重要性
11.4 优化的顺序与重复
11.5 进一步阅读
11.6 练习
第12章 前期优化
12.1 常数表达式计算(常数折叠)&.
12.2 聚合量标量替代
12.3 代数化简和重结合
12.4 值编号
12.5 复写传播
12.6 稀有条件常数传播
12.7 小结
12.8 进一步阅读
12.9 练习
第13章 冗余删除
13.1 公共子表达式删除
13.2 循环不变代码外提
13.3 部分冗余删除
13.4 冗余删除和重结合
13.5 代码提升
13.6 小结
13.7 进一步阅读
13.8 练习
第14章 循环优化
14.1 归纳变量优化
14.2 不必要边界检查的消除
14.3 小结
14.4 进一步阅读&.
14.5 练习
第15章 过程优化
15.1 尾调用优化和尾递归删除
15.2 过程集成
15.3 内嵌扩展
15.4 叶例程优化和收缩包装
15.5 小结
15.6 进一步阅读
15.7 练习
第16章 寄存器分配
16.1 寄存器分配和指派
16.2 局部方法
16.3 图着色
16.4 基于优先级的图着色
16.5 其他寄存器分配方法
16.6 小结
16.7 进一步阅读
16.8 练习
第17章 代码调度
17.1 指令调度
17.2 前瞻取和上推
17.3 前瞻调度
17.4 软流水
17.5 踪迹调度
17.6 渗透调度
17.7 小结
17.8 进一步阅读
17.9 练习
第18章 控制流和低级优化
18.1 不可到达代码的删除
18.2 伸直化
18.3 if化简
18.4 循环化简
18.5 循环倒置
18.6 无开关化
18.7 分支优化
18.8 尾融合或交叉转移
18.9 条件传送
18.10 死代码删除
18.11 分支预测
18.12 机器方言和指令归并
18.13 小结
18.14 进一步阅读
18.15 练习
第19章 过程间分析与优化
19.1 过程间控制流分析:调用图
19.2 过程间数据流分析
19.3 过程间常数传播
19.4 过程间别名分析
19.5 过程间优化
19.6 过程间寄存器分配
19.7 全局引用的聚合
19.8 过程间程序管理中的其他主题
19.9 小结
19.10 进一步阅读
19.11 练习
第20章 存储层次优化
20.1 数据和指令高速缓存的影响
20.2 指令高速缓存优化
20.3 数组元素的标量替换
20.4 数据高速缓存优化
20.5 标量优化与面向存储器的优化
20.6 小结
20.7 进一步阅读
20.8 练习
第21章 编译器实例分析与未来的发展趋势
21.1 Sun用于SPARC的编译器
21.2 IBM POWER和PowerPC体系结构的XL编译器
21.3 DEC用于Alpha的编译器
21.4 Intel 386体系结构上的Intel参考编译器
21.5 小结
21.6 编译器设计和实现未来的趋势
21.7 进一步阅读
附录 A 本书使用的汇编语言指南
附录 B 集合、序列、树、DAG和函数的表示
附录 C 软件资源
参考文献
本书由书友@锦小书发布分享,仅供学习交流使用,版权归原作者所有。如有侵权,请联系我们删除。
📖 支持知识自由流动
每一本书的稳定访问,都离不开服务器、存储与带宽的长期维护。

