第1章 引论 1
1.1 文本程序 1
1.2 如何使用本书 2
1.3 概述 3
1.4 设计 7
1.5 公共声明 11
1.6 语法规范 13
1.7 错误 14
深入阅读 15
2.1 内存管理接口 16
第2章 存储管理 16
2.2 分配区的表示 17
2.3 空间分配 18
2.4 空间释放 20
2.5 字符串 20
深入阅读 23
练习 23
第3章 符号管理 26
3.1 符号的表示 27
3.2 符号表的表示 29
3.3 作用域的改变 32
3.4 查找和建立标识符 32
3.5 标号 33
3.6 常量 35
3.7 产生的变量 37
深入阅读 38
练习 38
第4章 类型 40
4.1 类型表示 40
4.2 类型管理 42
4.3 类型断言 45
4.4 类型构造器 46
4.5 函数类型 48
4.6 结构和枚举类型 49
4.7 类型检查函数 52
4.8 类型映射 56
深入阅读 56
练习 57
第5章 代码生成接口 59
5.1 类型度量 59
5.2 接口记录 60
5.3 符号 60
5.4 类型 61
5.5 dag操作 61
5.6 接口标志 65
5.8 定义 67
5.7 初始化 67
5.9 常量 69
5.10 函数 70
5.11 接口绑定 72
5.12 上行调用 73
深入阅读 75
练习 75
第6章 词法分析器 77
6.1 输入 77
6.2 单词的识别 81
6.3 关键字的识别 85
6.4 标识符的识别 86
6.5 数字的识别 87
6.6 字符常量和字符串的识别 92
深入阅读 95
练习 95
第7章 语法分析 97
7.1 语言和语法 97
7.2 二义性和分析树 98
7.3 自上而下的语法分析 100
7.4 FIRST和FOLLOW集合 102
7.5 编写分析函数 104
7.6 处理语法错误 106
深入阅读 110
练习 111
第8章 表达式 112
8.1 表达式的表示 112
8.2 表达式分析 115
8.3 C语言表达式的分析 117
8.4 赋值表达式 119
8.5 条件表达式 121
8.6 二元表达式 122
8.7 一元表达式和后缀表达式 124
8.8 基本表达式 127
练习 130
深入阅读 130
第9章 表达式语义 132
9.1 转换 132
9.2 一元操作符和后缀操作符 136
9.3 函数调用 141
9.4 二元操作符 147
9.5 赋值操作 150
9.6 条件操作 154
9.7 常量折叠 156
深入阅读 165
练习 165
第10章 语句 167
10.1 代码的表示 167
10.2 执行点 170
10.3 语句的识别 171
10.4 if语句 173
10.5 标号和goto语句 174
10.6 循环 176
10.7 switch语句 178
10.8 返回语句 188
10.9 管理标号和跳转指令 191
深入阅读 194
练习 194
11.1 转换单元 196
第11章 声明 196
11.2 声明 197
11.3 声明符 206
11.4 函数声明符 210
11.5 结构说明符 215
11.6 函数定义 222
11.7 复合语句 229
11.8 结束处理 236
11.9 主程序 238
深入阅读 240
练习 241
第12章 中间代码的生成 243
12.1 消除公共子表达式 244
12.2 构建节点 248
12.3 控制流 250
12.4 赋值语句 256
12.5 函数调用 259
12.6 强制计算顺序 261
12.7 驱动代码生成 263
12.8 删除多次引用的节点 267
深入阅读 272
练习 273
第13章 构造代码生成器 275
13.1 代码生成器的组织 276
13.2 接口扩展 277
13.3 上行调用 279
13.4 节点扩展 280
13.5 符号扩展 282
13.6 帧的布局 284
13.7 生成块复制的代码 287
13.8 初始化 289
深入阅读 290
练习 290
第14章 选择和发送指令 291
14.1 规范 292
14.2 标记树 294
14.3 化简树 295
14.4 代价函数 302
14.5 调试 303
14.6 发送器 304
14.7 寄存器定位 309
14.8 指令选择的协调 313
14.9 共享规则 314
14.10 编写规范 315
深入阅读 316
练习 316
15.1 组织结构 318
第15章 寄存器分配 318
15.2 寄存器状态跟踪 319
15.3 寄存器分配 322
15.4 寄存器溢出 327
深入阅读 334
练习 334
第16章 MIPS R3000代码的生成 335
16.1 寄存器 336
16.2 指令的选取 339
16.3 函数的实现 349
16.4 数据的定义 355
16.5 块的复制 359
练习 360
深入阅读 360
第17章 SPARC代码的生成 362
17.1 寄存器 363
17.2 指令的选取 366
17.3 函数的实现 378
17.4 数据的定义 384
17.5 块的复制 386
深入阅读 387
练习 387
第18章 X86代码的生成 389
18.1 寄存器 390
18.2 指令的选取 394
18.3 函数的实现 407
18.4 数据的定义 409
深入阅读 412
练习 412
第19章 回顾 413
19.1 数据结构 413
19.2 接口 414
19.3 句法和语义分析 415
19.4 代码生成和优化 416
19.5 测试和验证 416
深入阅读 417
参考文献 419