1概论 1
1.1 程序设计语言 1
1.2 编译程序 3
1.3 源程序执行的途径 4
1.3.1 编译途径 4
1.3.2 解释途径 5
1.4 编译程序的结构 6
1.4.1 编译程序的组成 6
1.4.2 编译程序的逻辑结构 11
1.5 编译程序的开发 12
1.5.1 编译程序的开发过程 12
1.5.2 编译程序的开发技术 13
习题 15
2文法和形式语言 16
2.1 符号和符号串 16
2.1.1 字母表和符号串 17
2.1.2 符号串的运算 18
2.2 文法和语言 20
2.2.1 文法和推导 21
2.2.2 文法和语言 25
2.2.3 递归规则和递归文法 26
2.2.4 短语、简单短语与句柄 28
2.3 语法树和二义性 29
2.3.1 语法树和推导 29
2.3.2 文法的二义性 33
2.4 文法的实用限制 37
2.4.1 文法的实用限制 37
2.4.2 文法的变换 40
2.5 扩充的BNF表示法 45
2.6 文法和语言分类 47
2.6.1 Chomsky对文法的定义 47
2.6.2 文法和语言分类 47
2.6.3 四类文法的关系 51
2.7 正则表达式和正则集 52
习题 54
3 自动机 57
3.1 转换图 57
3.2 确定有限自动机(DFA) 58
3.2.1 有限自动机 58
3.2.2 确定有限自动机 59
3.3 不确定有限自动机(NFA) 61
3.3.1 不确定有限自动机 61
3.3.2 NFA与DFA的变换 64
3.4 ε-自动机 66
3.5 自动机的简化 68
3.5.1 等价状态和无关状态 68
3.5.2 自动机的简化 68
3.6 语法图与自动机 71
3.6.1 语法图 71
3.6.2 语法图与自动机 72
3.7 下推自动机 75
3.7.1 下推自动机 75
3.7.2 下推自动机与上下文无关文法 76
习题 79
4 符号表 80
4.1 符号表及其应用 80
4.1.1 符号表 80
4.1.2 符号表的查填 81
4.1.3 符号表的作用 81
4.2 符号表的内容 82
4.2.1 单词的基本属性 82
4.2.2 符号表的内容 83
4.3 存储分配与符号表的组织 84
4.3.1 存储分配概述 84
4.3.2 各种类型的数据在计算机中的存储 86
4.3.3 符号表的组织 93
4.4 标识符的处理 93
4.4.1 标识符的出现和处理 93
4.4.2 标识符的作用域 94
4.5 符号表的结构和存取 94
4.5.1 无序符号表和有序符号表 94
4.5.2 栈符号表 95
习题 99
5 词法分析 100
5.1 引言 100
5.2 取单词 102
5.3 读标识符 105
5.4 取无正负号数 105
5.5 词法分析器的自动生成 108
5.5.1 词法分析程序的自动生成问题 108
5.5.2 Lex源程序 108
5.5.3 lex编译程序 110
5.5.4 词法分析程序 110
习题 111
6语法和语义分析 114
6.1 常用的终结符号集 114
6.1.1 首符号集 114
6.1.2 向前看集 115
6.1.3 可选集 115
6.2 句子的分析 116
6.2.1 自顶向下分析 116
6.2.2 自底向上分析 119
6.3 虚拟机 120
6.3.1 虚拟机 120
6.3.2 虚拟机的汇编指令 121
6.4 递归子程序方法 123
6.4.1 递归子程序及其调用 123
6.4.2 递归子程序分析方法 125
6.5 LL(k)分析方法 128
6.5.1 LL(1)分析方法 129
6.5.2 LL(1)文法 130
6.5.3 LL(1)分析表 131
6.6 运算符优先数法 135
6.6.1 简单表达式的逆波兰表示 135
6.6.2 逆波兰表达式的生成 136
6.6.3 逆波兰表达式的处理 140
6.6.4 运算符优先数法 141
6.6.5 运算符的优先关系 144
6.6.6 优先矩阵 146
6.6.7 合适优先函数 150
6.7 状态矩阵法 152
6.7.1 状态的构造 153
6.7.2 状态矩阵法 156
习题 159
7递归子程序方法 161
7.1 PL/0程序设计语言 161
7.1.1 PL/0概述 161
7.1.2 PL/0语法图 161
7.1.3 PL/0各语法成分之间的关系 163
7.2 PL/0处理机 164
7.2.1 PL/0处理机简介 164
7.2.2 数据的存储与访问 165
7.2.3 PL/0机的指令系统 168
7.3 代码生成形式 169
7.4 PL/0编译程序的子程序 172
7.4.1 有关表格和几个辅助子程序 172
7.4.2 读单词 174
7.4.3 说明部分的处理 175
7.4.4 表达式的处理 177
7.4.5 语句的处理 183
7.4.6 分程序的处理 190
习题 193
8 LR(k)分析方法 194
8.1 LR分析方法的逻辑结构及分析过程 194
8.1.1 活前缀与可归前缀 194
8.1.2 LR分析方法的逻辑结构 196
8.1.3 LR分析过程 198
8.2 LR(0)分析表的构造 201
8.2.1 基本概念 201
8.2.2 状态描述序列和状态转换图 203
8.2.3 LR(0)分析表的构造 206
8.2.4 应用举例 207
8.3 SLR(1)分析表的构造 207
8.3.1 问题提出 207
8.3.2 SLR(1)分析表的构造 210
8.3.3 SLR(1)分析表 211
8.3.4 应用举例 211
8.4 LR(1)分析表的构造 213
8.4.1 问题提出 213
8.4.2 LR(1)分析表构造的方法思想 214
8.4.3 状态描述序列 216
8.4.4 LR(1)分析表的构造规则 216
8.4.5 LR(1)文法 217
8.4.6 LR(1)分析表 217
8.5 LALR(1)分析表的构造 219
8.5.1 问题提出 219
8.5.2 LALR(1)分析表 223
习题 224
9 中间语言 227
9.1 逆波兰表示 227
9.1.1 赋值语句的逆波兰表示 227
9.1.2 转向语句的逆波兰表示 227
9.1.3 条件语句的逆波兰表示 227
9.1.4 循环语句的逆波兰表示 229
9.2 四元式 230
9.2.1 四元式 230
9.2.2 表达式和赋值语句的四元式 231
9.2.3 转向语句和条件语句的四元式 231
9.2.4 循环语句的四元式 233
9.3 三元式 233
9.3.1 三元式 233
9.3.2 表达式和赋值语句的三元式 234
9.3.3 转向语句和条件语句的三元式 234
9.3.4 循环语句的三元式 235
9.4 树表示 236
习题 237
10优化 239
10.1 引言 239
10.2 有关概念 239
10.2.1 变量的使用点和定义点 239
10.2.2 基本块 240
10.2.3 区域变量和区域常量 240
10.2.4 常表达式 241
10.3 优化处理概述 241
10.3.1 合并常量运算 241
10.3.2 消除基本块中的公共子表达式 241
10.3.3 外提循环中的不变表达式 242
10.3.4 消减运算强度 243
10.4 表达式的优化 244
10.4.1 合并表达式中的常量运算 244
10.4.2 消除公共子表达式 245
10.5 循环优化 246
10.5.1 外提不变表达式 247
10.5.2 循环中的下标变量的优化 249
习题 251
11语法制导翻译与代码生成 253
11.1 语法制导翻译 253
11.1.1 语法制导翻译 253
11.1.2 语法制导翻译思想 253
11.1.1 常用语法制导翻译 254
11.2 表达式的翻译 254
11.2.1 语法规则与代码形式 254
11.2.2 语法制导翻译技术 255
11.3 布尔表达式的翻译 256
11.3.1 语法规则与代码生成 256
11.3.2 语法制导翻译技术 257
11.4 语句的语法制导翻译 257
11.4.1 赋值语句的翻译 258
11.4.2 条件语句的翻译 259
11.4.3 循环语句的翻译 260
11.4.4 转向语句和带有标号语句的翻译 261
11.4.5 复合语句的翻译 261
11.5 过程调用语句的翻译 262
11.5.1 过程调用语句的语法规则和代码形式 262
11.5.2 过程调用的语法制导翻译技术 263
11.6 说明部分的翻译 264
11.6.1 说明部分的语法规则和代码形式 264
11.6.2 说明部分的语法制导翻译技术 265
11.7 属性文法技术 267
11.7.1 增量式文法 267
11.7.2 属性文法 268
11.8 目标代码的生成 271
11.8.1 目标代码形式 271
11.8.2 目标代码生成 271
11.9 寄存器的分配 272
习题 273
12存储组织与分配 274
12.1 静态存储分配 274
12.1.1 静态存储分配 274
12.1.2 静态存储分配方法 274
12.1.3 静态存储分配满足的条件 275
12.2 栈式存储分配 276
12.2.1 栈式存储分配 276
12.2.2 分程序结构的栈式存储分配 277
12.2.3 以过程为单位的栈式存储分配 278
12.2.4 分程序的入口和出口 280
12.3 堆式存储分析 281
12.4 参数传递 281
习题 284
13程序的查错与处理 285
13.1 引言 285
13.2 词法分析阶段的查错处理 286
13.2.1 词法错误 286
13.2.2 词法错误的处理 286
13.3 语法分析阶段的查错处理 287
13.3.1 语法错误 287
13.3.2 语法错误的处理 287
13.4 语义分析阶段的错误处理 288
13.4.1 语义错误 288
13.4.2 语义错误的处理 288
13.5 错误处理程序 289
习题 290
附录 291
附录Ⅰ PL/0语言的文法规则 291
附录Ⅱ PASCAL语言的文法规则 292
参考文献 295