编译程序设计原理与技术 - 中国高校教材图书网
|
书名: |
编译程序设计原理与技术
|
| ISBN: | 7-5635-0623-3 |
责任编辑: | |
| 作者: |
李文生 编 著
相关图书
|
装订: | 平装 |
| 印次: | 1-1 |
开本: | 16开 |
| 定价: |
¥34.00
折扣价:¥22.78
折扣:0.67
节省了11.22元
|
字数: |
340千字
|
| 出版社: |
北京邮电大学出版社 |
页数: |
|
| 出版日期: |
2002-09-01 |
每包册数: |
|
| 国家规划教材: |
|
省部级规划教材: |
|
| 入选重点出版项目: |
|
获奖信息: |
|
|
|
| 内容简介: |
内 容 简 介 在较多地参考了国内外权威人士的著作的基础上,本书系统地介绍了编译程序设计的基本原理和技术。其主要内容包括词法分析、语法分析、类型检查、中间代码生成、代码生成和代码优化等。本书旨在培养学生发现问题、提出问题,进而分析和解决问题的能力。本书内容充实,图文并茂,各章节内容循序渐进,并注意理论与实践的结合,可以作为高等学校计算机科学与技术专业的教材或参考书,也可供其他专业的学生或从事计算机工作的工程技术人员阅读参考。
|
| 作者简介: |
|
|
| 章节目录: |
目 录
第1章 形式语言与自动机基础1
1.1 语言和文法1
1.1.1 字母表和符号串1
1.1.2 语言2
1.1.3 文法及其形式定义3
1.1.4 推导和短语5
1.1.5 分析树及二义性7
1.1.6 文法的变换8
1.2 自动机与正规表达式12
1.2.1 确定的有限自动机(DFA)12
1.2.2 非确定的有限自动机(NFA)14
1.2.3 具有ε转移的非确定的有限自动机16
1.2.4 正规文法与有限自动机的等价性20
1.2.5 正规表达式与有限自动机的等价性23
1.2.6 正规表达式与正规文法26
1.2.7 DFA的化简29
习 题31
第2章 编译概述33
2.1 翻译和解释33
2.1.1 程序设计语言33
2.1.2 翻译程序34
2.2 编译的阶段35
2.2.1 分析阶段36
2.2.2 综合阶段38
2.2.3 符号表管理41
2.2.4 错误处理41
2.2.5 前端和后端42
2.2.6 “遍”的概念42
2.3 编译程序的前后处理器44
2.3.1 预处理器44
2.3.2 汇编程序45
2.3.3 连接装配程序46
2.4 编译原理和技术的应用46
习 题47
第3章 词法分析48
3.1 词法分析器的作用48
3.1.1 词法分析器与语法分析器的关系48
3.1.2 分离词法分析器的好处49
3.2 词法分析器的输入与输出49
3.2.1 设置输入缓冲器的必要性50
3.2.2 配对缓冲器50
3.2.3 词法分析器的输出52
3.3 记号的描述和识别53
3.3.1 词法与正规文法53
3.3.2 记号的文法53
3.3.3 状态转换图与记号的识别56
3.4 词法分析程序的设计与实现57
3.4.1 文法及状态转换图58
3.4.2 词法分析器的构造59
3.4.3 词法分析器的实现61
3.5 软件工具LEX63
3.5.1 LEX规格说明64
3.5.2 LEX的工作原理66
习 题68
第4章 语法分析70
4.1 语法分析器的作用70
4.1.1 语法分析器的地位70
4.1.2 常用的分析方法70
4.1.3 语法错误的处理71
4.2 自顶向下分析72
4.2.1 递归下降分析方法72
4.2.2 预测分析器73
4.2.3 非递归的预测分析器78
4.3 自底向上分析85
4.3.1 规范归约85
4.3.2 “移进归约”方法的实现86
4.4 LR分析器88
4.4.1 LR分析器的模型及工作过程88
4.4.2 SLR分析表的构造92
4.4.3 LR(1)分析表的构造101
4.4.4 LALR分析表的构造107
4.4.5 LR分析方法对二义文法的应用112
4.4.6 LR分析的错误处理与恢复117
4.5 软件工具YACC118
4.5.1 YACC说明文件119
4.5.2 用YACC处理二义文法121
4.5.3 用LEX建立YACC的词法分析器123
4.5.4 YACC内部名称124
习 题124
第5章 语法制导翻译技术129
5.1 语法制导定义130
5.1.1 语法制导定义的形式130
5.1.2 综合属性131
5.1.3 继承属性132
5.1.4 依赖图133
5.1.5 计算次序134
5.2 S属性定义的自底向上翻译135
5.2.1 语法树136
5.2.2 构造表达式的语法树136
5.2.3 构造表达式的语法树的语法制导定义137
5.2.4 表达式的有向非循环图(dag)138
5.2.5 S属性定义的自底向上实现139
5.3 L属性定义142
5.3.1 L属性定义142
5.3.2 翻译方案143
5.4 L属性定义的自顶向下翻译146
5.4.1 消除翻译方案中的左递归146
5.4.2 预测翻译器的设计151
5.5 L属性定义的自底向上翻译154
5.5.1 从翻译方案中去掉嵌入的动作154
5.5.2 分析栈中的继承属性155
5.5.3 模拟继承属性的计算157
5.5.4 用综合属性代替继承属性161
5.6 非L属性定义的翻译162
5.6.1 从左到右遍历子结点162
5.6.2 其他遍历顺序163
习 题166
第6章 类型检查170
6.1 语义分析的概念170
6.2 类型体制172
6.2.1 类型表达式173
6.2.2 类型体制174
6.2.3 静态和动态类型检查174
6.2.4 错误恢复175
6.3 简单类型检查器的说明175
6.3.1 语言说明175
6.3.2 确定标识符的类型176
6.3.3 表达式的类型检查176
6.3.4 语句的类型检查178
6.4 类型表达式的等价178
6.4.1 类型表达式的结构等价179
6.4.2 类型表达式的名字等价181
6.4.3 类型表示中的环182
6.5 类型检查有关的其他主题183
6.5.1 函数和运算符的重载183
6.5.2 类型转换185
6.5.3 多态函数187
6.6 符号表189
6.6.1 建立和访问符号表的时机190
6.6.2 符号表的内容191
6.6.3 在符号表上的操作193
6.6.4 符号表的组织195
习 题198
第7章 运行时刻环境200
7.1 基本概念200
7.1.1 过程200
7.1.2 活动树201
7.1.3 控制栈203
7.1.4 声明的作用域204
7.1.5 名字的联编204
7.2 存储组织205
7.2.1 运行时刻内存的划分205
7.2.2 活动记录206
7.2.3 编译时局部数据的安排206
7.3 存储分配策略207
7.3.1 静态存储分配207
7.3.2 栈式存储分配209
7.3.3 堆式存储分配213
7.4 访问非局部名字215
7.4.1 程序块215
7.4.2 非嵌套过程的静态作用域216
7.4.3 嵌套过程的静态作用域218
7.4.4 动态作用域规则222
7.5 参数传递方式224
7.5.1 传值调用224
7.5.2 引用调用225
7.5.3 复制恢复226
7.5.4 传名调用227
习 题228
第8章 中间代码生成231
8.1 中间语言231
8.1.1 图示法231
8.1.2 三地址代码233
8.1.3 语法制导翻译生成三地址代码237
8.2 声明语句的翻译238
8.2.1 过程中的声明语句238
8.2.2 过程定义的处理239
8.2.3 记录声明的处理242
8.3 赋值语句的翻译242
8.3.1 表达式中仅涉及简单变量的情况243
8.3.2 表达式中涉及数组元素的情况246
8.3.3 记录中域的访问251
8.4 布尔表达式的翻译251
8.4.1 翻译布尔表达式的方法251
8.4.2 数值表示法252
8.4.3 控制流语句253
8.4.4 布尔表达式的控制流翻译255
8.5 CASE语句的翻译257
8.6 回填技术259
8.6.1 使用回填技术翻译布尔表达式259
8.6.2 使用回填技术翻译控制流语句263
8.6.3 标号和转移语句的翻译268
8.7 过程调用语句的翻译269
习 题271
第9章 目标代码生成274
9.1 代码生成器设计时要考虑的问题274
9.1.1 代码生成器的输入274
9.1.2 代码生成器的输出275
9.1.3 存储管理275
9.1.4 指令选择276
9.1.5 寄存器分配276
9.1.6 计算次序的选择277
9.1.7 代码生成器的设计277
9.2 目标机器277
9.2.1 目标机器277
9.2.2 指令代价278
9.3 运行时的存储管理279
9.3.1 静态存储分配280
9.3.2 栈式存储分配281
9.3.3 运行时名字的地址283
9.4 基本块与控制流图284
9.4.1 基本块284
9.4.2 控制流图285
9.5 下次引用信息286
9.6 一个简单的代码生成器288
9.6.1 寄存器描述器和地址描述器289
9.6.2 函数getreg289
9.6.3 代码生成算法290
9.6.4 为其他类型的语句生成目标代码292
习 题293
第10章 代码优化295
10.1 优化概述295
10.1.1 程序优化295
10.1.2 优化器的组织297
10.1.3 优化的主要种类298
10.2 基本块的优化299
10.2.1 常数合并及常数传播299
10.2.2 删除冗余的公共表达式301
10.2.3 复写传播302
10.2.4 删除死代码303
10.2.5 削弱计算强度303
10.2.6 临时变量改名303
10.2.7 交换语句的位置303
10.3 循环优化303
10.3.1 循环展开304
10.3.2 频度削弱/代码外提305
10.3.3 归纳变量的删除305
10.3.4 削弱计算强度306
10.4 窥孔优化308
10.4.1 冗余传送308
10.4.2 死代码308
10.4.3 控制流优化309
10.4.4 代数化简309
10.4.5 强度削弱309
10.4.6 利用机器的特点310
10.5 dag在代码优化中的应用310
10.5.1 基本块的dag的构造311
10.5.2 dag的应用312
习 题316
第11章 编译程序的设计与实现318
11.1 设计与实现方法318
11.1.1 编译程序的实现语言318
11.1.2 构造编译程序的自展方法319
11.1.3 构造编译程序的移植方法320
11.1.4 编译程序构造举例321
11.2 编译实践322
11.2.1 Sub-P语言说明322
11.2.2 Sub-P编译程序的设计说明325
11.2.3 Sub-P编译程序的测试326
11.2.4 设计报告要求327
参考文献328
|
| 精彩片段: |
|
|
| 书 评: |
|
|
| 其 它: |
|
|
|