第1章 编译程序概述 1
1.1 概念 1
1.2 源程序的分析 2
1.2.1 词法分析器 2
1.2.2 语法分析器 3
1.2.3 语义分析 4
1.2.4 中间代码生成器 5
1.2.5 代码优化 6
1.2.6 代码生成 6
1.2.7 出错表 7
1.2.8 符号表 7
1.3 总结 7
1.4 编译器的遍 9
1.5 实例1——编译器程序 9
1.5.1 词法分析器 10
1.5.2 语法分析器 14
1.5.3 代码生成器 17
1.6 实例2——使用工具Flex 20
第2章 形式语言 23
2.1 符号串 23
2.2 文法和形式语言 25
2.3 语法树和二义性 31
2.4 扩充BNF范式 34
2.5 文法的分类 35
2.6 正则文法 38
第3章 词法分析 41
3.1 词法分析器的作用 41
3.2 词法分析器的设计 43
3.3 有穷自动机 45
3.3.1 确定有穷自动机 45
3.3.2 非确定有穷自动机 50
3.3.3 从非确定有穷自动机到确定有穷自动机的转换 51
3.3.4 最小化DFA 53
3.3.5 有ε输入符号的状态子集的ε闭包 54
3.3.6 从正则表达式到DFA转换举例 56
第4章 自顶向下语法分析 62
4.1 文法的实用限制 62
4.2 头符号集和后继符号集 65
4.3 避免回溯 66
4.4 自顶向下语法分析方法 69
4.4.1 递归子程序法 69
4.4.2 LL(1)方法 70
第5章 自底向上语法分析 75
5.1 算符优先分析法 75
5.1.1 算符优先的关系 76
5.1.2 构造算符优先关系 76
5.1.3 算符优先关系文法 78
5.1.4 最左素短语 79
5.1.5 算符优先分析算法和程序 80
5.2 LR(0)分析法 83
5.2.1 可归前缀 83
5.2.2 构造识别可归前缀的有穷自动机 84
5.2.3 项目集的闭包 87
5.2.4 LR(0)分析表 88
5.3 SLR(1)分析法 92
第6章 符号表和类型检查 98
6.1 符号表的作用 98
6.2 符号表的属性 99
6.3 符号表的设计 101
6.4 符号表的结构 103
6.4.1 符号表的操作 103
6.4.2 符号表的结构 104
6.5 类型检查 107
第7章 存储组织与分配 109
7.1 静态存储分配 109
7.2 动态存储分配 115
7.2.1 栈分配 115
7.2.2 嵌套过程的存储分配 117
7.2.3 堆存储分配 119
第8章 中间语言 121
8.1 后缀表示 122
8.1.1 后缀的定义 122
8.1.2 E.W.DIJKSTRA方法 122
8.1.3 扩展后缀 124
8.2 四元组表示 125
8.3 三元组表示 127
8.4 三元组和四元组中间代码的比较 127
8.5 伪代码 128
8.6 汇编代码 130
第9章 代码生成 132
9.1 目标程序的结构 132
9.1.1 条件语句目标程序 133
9.1.2 循环语句目标程序 134
9.1.3 过程语句目标程序 135
9.2 代码生成实例 137
9.2.1 代码生成算法 137
9.2.2 符号表的作用 140
第10章 代码优化 141
10.1 优化类型的分类 142
10.2 源代码的优化 142
10.3 三元组代码的优化 147
10.4 四元组代码的优化 150
10.5 目标代码的优化 151
参考文献 155