第1章 编译程序概论 1
1.1编程语言与翻译系统 1
1.1.1程序设计语言 1
1.1.2常用的高级语言 2
1.1.3编译程序的概念 5
1.2编译程序的工作过程 5
1.2.1词法分析 6
1.2.2语法分析 6
1.2.3语义分析和中间代码产生 6
1.2.4代码优化 7
1.2.5目标代码生成 8
1.3编译程序的逻辑结构 9
1.3.1编译程序的总体框架 9
1.3.2编译程序的表格管理 10
1.3.3编译程序中的错误及出错处理 10
1.3.4编译程序的分遍处理 10
1.3.5编译前端与后端 11
1.4编译技术应用 11
1.4.1高级语言的实现 11
1.4.2针对计算机体系结构的优化 12
1.4.3新计算机体系结构的设计 13
1.4.4 程序翻译 14
1.4.5提高软件开发效率的工具 14
1.5本章小结 15
习题1. 16
第2章 文法和语言 17
2.1符号和符号串 17
2.2文法和语言的形式定义 19
2.2.1文法和上下文无关文法 19
2.2.2推导和语法分析树 20
2.2.3句型、句子和语言 21
2.3 Chomsky文法分类 22
2.4文法和语言的二义性 25
2.5文法的等价及其变换 27
2.6本章小结 30
习题2 30
第3章 词法分析与有限自动机 32
3.1词法分析器的设计思想 32
3.1.1词法分析器的任务和输出形式 32
3.1.2将词法分析工作分离的考虑 34
3.2词法分析器的设计 34
3.2.1输入缓冲区和预处理程序 34
3.2.2扫描器的工作原理 35
3.2.3状态转换图与单词的识别 36
3.2.4状态转换图的代码实现 39
实验一 词法分析器的设计 40
3.3单词的描述工具 41
3.3.1正规文法 42
3.3.2正规式与正规集 42
3.4有限自动机 44
3.4.1确定有限自动机(DFA) 45
3.4.2非确定有限自动机(NFA) 46
3.4.3将NFA转换为DFA 48
3.4.4确定有限自动机的化简 50
3.5正规文法、正规式和有限自动机的等价特性 52
3.5.1正规文法与正规式的等价性 52
3.5.2正规文法与有限自动机的等价性 53
3.5.3正规式与有限自动机的等价性 56
3.6词法分析器的自动构造工具—— LEX 58
3.7本章小结 64
习题3 64
第4章 自上而下语法分析方法 67
4.1语法分析的任务和分析方法 67
4.2自上而下分析的基本思想和面临的问题 68
4.2.1自上而下分析的基本思想 68
4.2.2自上而下分析存在的困难和缺陷 69
4.3左递归和回溯的消除 71
4.3.1消除直接左递归 71
4.3.2消除间接左递归 72
4.3.3提取左公因子消除回溯 74
4.4 LL(1)分析法 75
4.4.1 FIRST集及其计算方法 76
4.4.2 FOLLOW集及其计算方法 77
4.4.3 LL(1)文法及LL(1)判定条件 78
4.4.4 LL(1)分析方法 79
4.5不带回溯的自上而下分析方法 79
4.5.1递归下降分析程序 79
4.5.2预测分析程序 81
4.6 LL(1)分析中的错误处理 86
实验二 语法分析器设计之一——预测分析程序 87
4.7本章小结 88
习题4 88
第5章 自下而上语法分析方法 91
5.1自下而上分析的一般思想和面临的问题 91
5.1.1归约和“移进—归约”分析法 91
5.1.2短语、句柄和最左素短语 94
5.1.3规范归约与规范推导 95
5.1.4自下而上分析的核心问题和分析方法 96
5.1.5语法分析栈的使用与语法树的表示 97
5.2算符优先分析法 99
5.2.1算符文法和算符优先文法 99
5.2.2 FIRSTVT集和LASTVT集 100
5.2.3算符优先关系表及优先函数 101
5.2.4算符优先分析算法及其特点 104
5.2.5算符优先分析中的出错处理 107
实验三 语法分析器设计之二——算符优先分析程序 110
5.3 LR分析法 110
5.3.1 LR分析器的工作原理 110
5.3.2 LR(0)分析器 117
5.3.3 SLR (1)分析器 124
5.3.4 LR(1)分析器 130
5.3.5 LALR(1)分析器 134
5.3.6二义文法在LR分析中的应用 141
5.3.7 LR分析中的出错处理 144
实验四 语法分析器设计之三——LR分析程序 146
5.4语法分析器的自动产生工具——YACC 147
5.5本章小结 149
习题5 150
第6章 语法制导翻译和语义分析 154
6.1属性文法与语法制导翻译 154
6.1.1属性及属性文法 154
6.1.2综合属性与继承属性 155
6.1.3 S—属性文法与L—属性文法 156
6.1.4基于属性文法的语法制导翻译 157
6.2语义分析和中间代码的产生 159
6.2.1语义分析的任务 159
6.2.2常见的中间代码形式 159
6.3简单算术表达式及赋值语句的翻译 162
6.4布尔表达式的翻译 164
6.4.1布尔表达式的翻译方法 164
6.4.2控制语句中布尔表达式的翻译 165
6.5控制结构的翻译 169
6.5.1 if语句的翻译 169
6.5.2 while语句的翻译 170
6.5.3 for语句的翻译 171
6.5.4 goto语句的翻译 173
6.6说明语句的翻译 175
6.6.1简单说明语句的翻译 175
6.6.2过程中的说明 175
6.7数组的翻译 176
6.7.1数组元素的地址计算 176
6.7.2赋值语句中数组元素的翻译 177
6.8过程调用语句的翻译 180
6.8.1参数传递的方式 180
6.8.2过程调用的处理 181
6.9本章小结 181
习题6 182
第7章 符号表 184
7.1符号表的作用与内容 184
7.1.1符号表的作用 184
7.1.2符号表的内容与操作 185
7.2符号表的组织与管理 187
7.2.1符号表的组织结构 187
7.2.2符号表的构造与查找 190
7.3名字的作用范围 193
7.4本章小结 196
习题7 197
第8章 代码优化 199
8.1优化概述 199
8.2局部优化 205
8.2.1基本块及流图 205
8.2.2基本块的DAG表示及其应用 208
8.3循环优化 213
8.3.1代码外提 213
8.3.2强度削弱 217
8.3.3删除归纳变量 218
8.4本章小结 220
习题8 220
第9章 目标代码生成 225
9.1代码生成概述 225
9.2目标机器模型 227
9.3一种简单的代码生成算法 228
9.3.1活跃信息与待用信息 230
9.3.2寄存器和变量地址描述 231
9.3.3简单代码生成算法 231
9.3.4寄存器分配 234
9.4本章小结 237
习题9 237
参考文献 239