第1章 绪论 1
1.1 语言翻译与编译程序 1
1.2 编译器与解释器 1
1.3 编译程序的工作原理与基本结构 2
1.3.1 高级语言的主要成分 2
1.3.2 编译的基本过程 4
1.3.3 编译各阶段的工作 4
1.3.4 编译程序的基本结构 6
1.3.5 编译的前端和后端 7
1.3.6 编译的遍数 8
1.4 编译器的编写 8
1.5 本章小结 8
习题 9
第2章 词法分析 12
2.1 词法分析概述 12
2.1.1 相关问题 12
2.1.2 词法分析器的功能和工作方式 13
2.1.3 源程序的输入及预处理 15
2.2 模式的形式化描述 16
2.2.1 语言及其基本概念 16
2.2.2 正规式与正规集 18
2.2.3 状态转换图 20
2.3 有限自动机 21
2.3.1 有限自动机(Finite Automata,FA) 21
2.3.2 非确定型有限自动机(Nondeterministic Finite Automata,NFA) 22
2.3.3 确定型有限自动机(deterministic Finite Automata,DFA) 23
2.4 正规式到词法分析器 24
2.4.1 正规式到NFA 24
2.4.2 NFA到DFA的变换 28
2.4.3 DFA的化简 30
2.5 词法分析器的自动生成 31
2.6 本章小结 33
习题 34
第3章 语法分析 36
3.1 上下文无关文法(Context Free Crammar,CFG) 36
3.1.1 上下文无关文法的定义 36
3.1.2 语法分析的基本术语 37
3.1.3 语法树和二义性 39
3.1.4 文法与语言的分类 40
3.2 自上而下的语法分析 41
3.2.1 自上而下语法分析的一般方法和基本问题 42
3.2.2 消除文法的左递归 43
3.2.3 消除回溯提取左因子 44
3.2.4 递归下降分析法 45
3.2.5 预测分析法 48
3.3 自下而上的语法分析 53
3.3.1 自下而上语法分析的一般方法和基本问题 53
3.3.2 符号栈的使用 55
3.3.3 LR分析法 56
3.3.4 LR(0)分析表的构造 60
3.3.5 SLR(1)分析表的构造 64
3.4 二义文法的应用 67
3.5 语法分析器的自动生成工具YACC简介 70
3.6 本章小结 71
习题 72
第4章 语法制导翻译与中间代码生成 76
4.1 语法制导翻译 76
4.1.1 语义分析 76
4.1.2 属性文法 77
4.1.3 语义规则 79
4.1.4 LR分析的翻译概述 81
4.1.5 递归下降分析的翻译概述 82
4.2 中间代码 84
4.2.1 后缀式 85
4.2.2 三地址代码 85
4.2.3 图形表示 89
4.3 说明性语句的翻译 90
4.3.1 变量和数组变量的声明 90
4.3.2 过程的定义、声明和过程调用的处理 95
4.3.3 记录中的域名 97
4.4 执行性语句的翻译 97
4.4.1 赋值语句的翻译 97
4.4.2 布尔表达式的翻译 102
4.4.3 控制语句的翻译 108
4.4.4 过程调用 112
4.4.5 类型检查 113
4.5 本章小题 114
习题 114
第5章 符号表与运行时环境 117
5.1 符号表 117
5.1.1 符号表的组织与作用 117
5.1.2 符号表的整理与查找 118
5.1.3 作用域规则 120
5.2 目标程序运行时的活动 120
5.2.1 过程与活动 121
5.2.2 活动记录 122
5.2.3 名字绑定 123
5.3 运行时存储器的划分 124
5.3.1 存储器划分 124
5.3.2 存储分配策略 125
5.4 本章小结 131
习题 132
第6章 代码优化与代码生成 134
6.1 代码优化 134
6.1.1 局部优化 134
6.1.2 循环优化 137
6.1.3 循环优化举例 139
6.2 代码生成的相关问题 140
6.3 简单的代码生成器 146
6.3.1 基本块和流程 146
6.3.2 寄存器分配 148
6.3.3 目标代码生成算法 149
6.4 本章小结 150
习题 151