图书介绍
编译原理和技术 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![编译原理和技术 第2版](https://www.shukui.net/cover/42/31198296.jpg)
- 陈意云编著 著
- 出版社: 合肥:中国科学技术大学出版社
- ISBN:7312008895
- 出版时间:1989
- 标注页数:316页
- 文件大小:13MB
- 文件页数:329页
- 主题词:
PDF下载
下载说明
编译原理和技术 第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
目录1
第1章 引论1
1.1 编译的阶段1
1.1.1 词法分析2
1.1.2 语法分析2
1.1.3 语义分析4
1.1.4 中间代码生成5
1.1.5 代码优化5
1.1.6 代码生成6
1.1.7 符号表管理6
1.1.8 错误诊断和报告8
1.1.9 阶段的分组8
1.2 编译器的伙伴8
1.2.1 预处理器9
1.2.2 汇编器10
1.2.3 装配器和连接编辑器11
2.1 词法分析器的作用12
第2章 词法分析12
2.1.1 分离词法分析的理由13
2.1.2 记号、模式、单词13
2.1.3 记号的属性14
2.1.4 词法错误15
2.2 记号的描述15
2.2.1 串和语言15
2.2.2 语言的运算16
2.2.3 正规式16
2.2.5 表示的缩写18
2.2.4 正规定义18
2.2.6 非正规集19
2.3 记号的识别19
2.3.1 转换图20
2.3.2 实现转换图22
2.4 有限自动机23
2.4.1 不确定的有限自动机23
2.4.2 确定的有限自动机25
2.4.3 NFA到DFA的变换25
2.5 从正规式到NFA29
2.6 DFA的化简31
2.7 词法分析器的说明语言33
习题36
第3章 语法分析39
3.1 分析器的作用39
3.1.1 语法错误的处理40
3.1.2 错误恢复策略41
3.2 上下文无关文法42
3.2.1 符号使用的约定43
3.2.2 推导44
3.2.3 分析树和推导45
3.2.4 二义性46
3.3 语言和文法46
3.3.1 正规式和上下文无关文法的比较47
3.3.2 验证文法产生的语言48
3.3.3 适当的表达式文法48
3.3.4 消除二义性49
3.3.5 消除左递归50
3.3.6 提左因子51
3.3.7 非上下文无关的语言结构52
3.3.8 形式语言概述53
3.4 自上而下分析55
3.4.1 自上而下分析的一般方法55
3.4.2 预测分析器56
3.4.3 非递归的预测分析58
3.4.4 开始符号和后继符号59
3.4.5 构造预测分析表60
3.4.6 LL(1)文法61
3.4.7 预测分析的错误恢复62
3.5 自下而上分析63
3.5.1 句柄64
3.5.2 用栈实现移进-归约分析66
3.5.3 移进-归约分析的冲突67
3.6 LR分析器68
3.6.1 LR分析算法69
3.6.2 LR文法72
3.6.3 构造SLR分析表73
3.6.4 构造规范LR分析表79
3.6.5 构造LALR分析表83
3.6.6 非LR的上下文无关结构86
3.7 二义文法的应用87
3.7.1 使用优先级和结合规则来解决分析动作的冲突87
3.7.2 悬空else的二义性89
3.7.3 特殊情况产生式引起的二义性90
3.7.4 LR分析的错误恢复92
3.8 分析器的生成器94
3.8.1 分析器的生成器Yacc95
3.8.2 用Yacc处理二义文法97
3.8.3 用Lex建立Yacc的词法分析器99
3.8.4 Yacc的错误恢复100
习题101
第4章 语法制导的翻译107
4.1 语法制导的定义107
4.1.1 语法制导定义的形式108
4.1.2 综合属性108
4.1.3 继承属性109
4.1.4 依赖图110
4.1.5 计算次序111
4.2 S属性的自下而上计算112
4.2.1 语法树113
4.2.2 构造表达式的语法树113
4.2.3 构造语法树的语法制导定义114
4.2.4 表达式的无环有向图115
4.2.5 S属性的自下而上计算116
4.3 L属性定义118
4.3.2 翻译方案119
4.3.1 L属性定义119
4.4 自上而下翻译122
4.4.1 删除翻译方案的左递归122
4.4.2 预测翻译器的设计126
4.5 继承属性的自下而上计算127
4.5.1 删除翻译方案中嵌入的动作127
4.5.2 分析栈上的继承属性128
4.5.3 模拟继承属性的计算130
4.5.5 一个困难的语法制导定义133
4.5.4 用综合属性代替继承属性133
4.6.1 自左向右遍历134
4.6 递归计算134
4.6.2 其它遍历方法135
4.7 语法制导定义的分析137
4.7.1 属性的递归计算137
4.7.2 强无环的语法制导定义138
习题140
第5章 类型检查143
5.1.1 类型表达式144
5.1 类型体制144
5.1.2 类型体制145
5.1.3 静态和动态的类型检查146
5.1.4 错误恢复146
5.2 简单类型检查器的说明146
5.2.1 一个简单的语言147
5.2.2 表达式的类型检查148
5.2.3 语句的类型检查148
5.2.5 类型转换149
5.2.4 函数的类型检查149
5.3 类型表达式的等价150
5.3.1 类型表达式的结构等价151
5.3.2 类型表达式的名字152
5.3.3 类型表示中的环153
5.4 函数和算符的重载154
5.4.1 子表达式的可能类型集合154
5.4.2 缩小可能类型的集合156
5.5 多态函数156
5.5.1 为什么要使用多态函数157
5.5.2 类型变量158
5.5.3 一个含多态函数的语言159
5.5.4 代换、实例和合一161
5.5.5 多态函数的检查161
习题165
第6章 运行环境168
6.1 源语言问题168
6.1.1 过程168
6.1.2 活动树169
6.1.3 控制栈170
6.1.4 声明的作用域171
6.1.5 名字的结合171
6.2 存储组织172
6.2.1 运行时内存的划分172
6.2.2 活动记录173
6.2.3 编译时的局部数据安排174
6.3.1 静态分配175
6.3 存储分配策略175
6.3.2 栈分配177
6.3.3 悬空引用180
6.3.4 堆分配181
6.4 访问非局部名字182
6.4.1 程序块182
6.4.2 无过程嵌套的静态作用域184
6.4.3 有过程嵌套的静态作用域185
6.4.4 动态作用域188
6.5 参数传递189
6.5.1 值调用190
6.5.2 引用调用191
6.5.3 复写-恢复191
6.5.4 换名调用192
习题193
第7章 中间代码生成196
7.1 中间语言196
7.1.1 后缀表示196
7.1.3 三地址代码197
7.1.2 图形表示197
7.1.4 三地址语句的种类198
7.1.5 三地址语句的实现199
7.1.6 内部表示的比较200
7.2 声明201
7.2.1 过程中的声明201
7.2.2 作用域信息的保存202
7.3 赋值语句204
7.3.1 符号表中的名字204
7.2.3 记录的域名204
7.3.2 临时名字的重新使用205
7.3.3 数组元素的定址206
7.3.4 数组元素定址的翻译方案208
7.3.5 赋值语句中的类型转换210
7.3.6 记录域的访问211
7.4.1 翻译布尔表达式的方法212
7.4.2 数值表示212
7.4 布尔表达式212
7.4.3 短路代码214
7.4.4 控制流语句214
7.4.5 布尔表达式的控制流翻译216
7.5 分情况语句218
习题220
第8章 代码生成224
8.1 代码生成器设计中的问题224
8.1.1 代码生成器的输入224
8.1.3 存储管理225
8.1.2 目标程序225
8.1.4 指令选择226
8.1.5 寄存器分配226
8.1.6 计算次序选译227
8.1.7 代码生成途径228
8.2 目标机器228
8.2.1 目标机器228
8.2.2 指令代价229
8.3.1 基本块230
8.3 基本块和流图230
8.3.2 基本块的变换232
8.3.3 流图233
8.4 下次引用信息234
8.4.1 计算下次引用信息234
8.4.2 临时名字的存储分配235
8.5 一个简单的代码生成器235
8.5.1 寄存器描述和地址描述236
8.5.2 代码生成算法236
8.5.3 函数getreg237
8.5.4 为其它类型的语句产生代码238
8.5.5 条件语句239
习题240
第9章 代码优化241
9.1 引言241
9.1.1 代码改进变换的标准241
9.1.2 争取较好的性能242
9.1.3 优化编译器的组织243
9.2 优化的主要种类245
9.2.1 公共子表达式245
9.2.2 复写传播247
9.2.3 死代码删除248
9.2.4 循环优化248
9.2.5 代码外提248
9.2.6 归纳变量和强度消弱249
9.3 流图中的循环250
9.3.1 必经结点250
9.3.2 自然循环251
9.3.4 前置结点252
9.3.3 内循环252
9.3.5 可归约流图253
9.4 全局数据流分析介绍254
9.4.1 点和路径255
9.4.2 到达-定值256
9.4.3 到达-定值的迭代算法256
9.4.4 可用表达式259
9.4.5 活跃变量分析262
9.4.6 定值-引用链262
9.5.1 公共子表达式删除263
9.5 代码改进变换263
9.5.2 复写传播264
9.5.3 寻找循环不变计算266
9.5.4 代码外提267
9.5.5 代码外提后维持数据流信息268
9.5.6 归纳变量删除269
9.5.7 有循环不变计算的归纳变量272
习题272
10.1.1 对象274
10.1 面向对象语言的概念274
第10章 面向对象语言的编译274
10.1.2 对象类275
10.1.3 继承性275
10.1.4 信息封装277
10.1.5 小结277
10.2 方法的编译278
10.3 编译继承性的方案279
10.3.1 简单继承性的编译方案280
10.3.2 多继承性的编译方案282
习题286
第11章 函数式程序设计语言的编译289
11.1 函数式程序设计语言简介289
11.1.1 SFP的构造289
11.1.2 参数传递机制290
11.1.3 自由出现和约束出现292
11.2 一个简单的函数式语言的编译简介293
11.2.1 几个受启发的例子293
11.2.3 环境与约束295
11.2.2 4个编译函数295
11.3 抽象机的系统结构296
11.3.1 FAM的栈297
11.3.2 FAM的堆298
11.3.3 名字的寻址299
11.3.4 约束的建立300
11.4 指令集和编译300
11.4.1 程序表达式300
11.4.2 简单表达式301
11.4.3 变量的引用性出现302
11.4.4 函数定义303
11.4.5 函数应用304
11.4.6 构造和计算闭包307
11.4.7 letrec表达式和局部变量309
11.5 表的实现310
11.5.1 SFP的扩充310
11.5.2 表表达式的编译312
11.5.3 表运算的编译312
习题315