图书介绍
编译原理PDF|Epub|txt|kindle电子书版本网盘下载
![编译原理](https://www.shukui.net/cover/14/34936948.jpg)
- 赵建华,郑滔,戴新宇译 著
- 出版社: 北京:机械工业出版社
- ISBN:9787111269292
- 出版时间:2009
- 标注页数:412页
- 文件大小:29MB
- 文件页数:426页
- 主题词:
PDF下载
下载说明
编译原理PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 引论1
1.1语言处理器1
1.2一个编译器的结构2
1.2.1词法分析3
1.2.2语法分析4
1.2.3语义分析5
1.2.4中间代码生成5
1.2.5代码优化5
1.2.6代码生成6
1.2.7符号表管理6
1.2.8将多个步骤组合成趟6
1.2.9编译器构造工具7
1.3程序设计语言的发展历程7
1.3.1走向高级程序设计语言7
1.3.2对编译器的影响8
1.3.31.3节的练习8
1.4构建一个编译器的相关科学8
1.4.1编译器设计和实现中的建模9
1.4.2代码优化的科学9
1.5编译技术的应用10
1.5.1高级程序设计语言的实现10
1.5.2针对计算机体系结构的优化11
1.5.3新计算机体系结构的设计12
1.5.4程序翻译13
1.5.5软件生产率工具14
1.6程序设计语言基础15
1.6.1静态和动态的区别15
1.6.2环境与状态15
1.6.3静态作用域和块结构17
1.6.4显式访问控制18
1.6.5动态作用域19
1.6.6参数传递机制20
1.6.7别名21
1.6.81.6节的练习22
1.7第1章总结22
1.8第1章参考文献23
第2章一个简单的语法制导翻译器24
2.1引言24
2.2语法定义25
2.2.1文法定义26
2.2.2推导27
2.2.3语法分析树28
2.2.4二义性29
2.2.5运算符的结合性29
2.2.6运算符的优先级30
2.2.72.2节的练习31
2.3语法制导翻译32
2.3.1后缀表示33
2.3.2综合属性33
2.3.3简单语法制导定义35
2.3.4树的遍历35
2.3.5翻译方案35
2.3.62.3节的练习37
2.4语法分析37
2.4.1自顶向下分析方法38
2.4.2预测分析法39
2.4.3何时使用?产生式41
2.4.4设计一个预测分析器41
2.4.5左递归42
2.4.62.4节的练习42
2.5简单表达式的翻译器43
2.5.1抽象语法和具体语法43
2.5.2调整翻译方案43
2.5.3非终结符号的过程44
2.5.4翻译器的简化45
2.5.5完整的程序46
2.6词法分析47
2.6.1剔除空白和注释48
2.6.2预读48
2.6.3常量49
2.6.4识别关键字和标识符49
2.6.5词法分析器50
2.6.6 2.6节的练习53
2.7符号表53
2.7.1为每个作用域设置一个符号表54
2.7.2符号表的使用56
2.8生成中间代码57
2.8.1两种中间表示形式57
2.8.2语法树的构造58
2.8.3静态检查61
2.8.4三地址码62
2.8.52.8节的练习66
2.9第2章总结66
第3章 词法分析68
3.1词法分析器的作用68
3.1.1词法分析及语法分析69
3.1.2词法单元、模式和词素69
3.1.3词法单元的属性70
3.1.4词法错误71
3.1.53.1节的练习71
3.2词法单元的规约71
3.2.1串和语言72
3.2.2语言上的运算72
3.2.3正则表达式73
3.2.4正则定义74
3.2.5正则表达式的扩展75
3.2.6 3.2节的练习76
3.3词法单元的识别78
3.3.1状态转换图79
3.3.2保留字和标识符的识别80
3.3.3完成我们的例子81
3.3.4基于状态转换图的词法分析器的体系结构82
3.3.53.3节的练习84
3.4词法分析器生成工具Lex86
3.4.1 Lex的使用86
3.4.2 Lex程序的结构87
3.4.3 Lex中的冲突解决89
3.4.4向前看运算符89
3.4.53.4节的练习90
3.5有穷自动机91
3.5.1不确定的有穷自动机91
3.5.2转换表92
3.5.3自动机中输入字符串的接受92
3.5.4确定的有穷自动机93
3.5.53.5节的练习93
3.6从正则表达式到自动机94
3.6.1从NFA到DFA的转换94
3.6.2最小化一个DFA的状态数96
3.6.3从正则表达式构造NFA99
3.6.4字符串处理算法的效率101
3.6.53.6节的练习103
3.7词法分析器生成工具的设计103
3.7.1生成的词法分析器的结构103
3.7.2词法分析器使用的DFA105
3.7.3词法分析器的状态最小化105
3.7.4实现向前看运算符105
3.7.53.7节的练习106
3.8第3章总结107
3.9第3章参考文献108
第4章 语法分析110
4.1引论110
4.1.1语法分析器的作用110
4.1.2代表性的文法111
4.1.3语法错误的处理112
4.1.4错误恢复策略112
4.2上下文无关文法113
4.2.1上下文无关文法的正式定义114
4.2.2符号表示的约定114
4.2.3推导115
4.2.4语法分析树和推导116
4.2.5二义性117
4.2.6验证文法生成的语言118
4.2.7上下文无关文法和正则表达式119
4.2.84.2节的练习119
4.3设计文法121
4.3.1词法分析和语法分析121
4.3.2消除二义性122
4.3.3左递归的消除123
4.3.4提取左公因子124
4.3.5非上下文无关语言的构造125
4.3.64.3节的练习126
4.4自顶向下的语法分析126
4.4.1递归下降的语法分析128
4.4.2 FIRST和FOLLOW129
4.4.3 LL(1)文法130
4.4.4非递归的预测分析133
4.4.5预测分析中的错误恢复134
4.4.64.4节的练习136
4.5自底向上的语法分析137
4.5.1归约138
4.5.2句柄剪枝138
4.5.3移入-归约语法分析技术139
4.5.4移入-归约语法分析中的冲突140
4.5.54.5节的练习141
4.6 LR语法分析技术介绍:简单LR技术142
4.6.1为什么使用LR语法分析器142
4.6.2项和LR(0)自动机143
4.6.3 LR语法分析算法147
4.6.4构造SLR语法分析表150
4.6.5可行前缀152
4.6.64.6节的练习153
4.7更强大的LR语法分析器154
4.7.1规范LR(1)项154
4.7.2构造LR(1)项集155
4.7.3规范LR(1)语法分析表158
4.7.4构造LALR语法分析表159
4.7.5高效构造LALR语法分析表的方法162
4.7.64.7节的练习165
4.8使用二义性文法165
4.8.1用优先级和结合性解决冲突165
4.8.2“悬空-else”的二义性167
4.8.3 LR语法分析中的错误恢复168
4.8.44.8节的练习169
4.9语法分析器生成工具170
4.9.1语法分析器生成工具Yacc170
4.9.2使用带有二义性文法的Yacc规约173
4.9.3用Lex创建Yacc的词法分析器175
4.9.4 Yacc中的错误恢复175
4.9.54.9节的练习176
4.10第4章总结177
4.11第4章参考文献178
第5章 语法制导的翻译182
5.1语法制导定义182
5.1.1继承属性和综合属性183
5.1.2在语法分析树的结点上对SDD求值184
5.1.35.1节的练习186
5.2 SDD的求值顺序186
5.2.1依赖图186
5.2.2属性求值的顺序187
5.2.3 S属性的定义188
5.2.4 L属性的定义188
5.2.5具有受控副作用的语义规则189
5.2.65.2节的练习190
5.3语法制导翻译的应用191
5.3.1抽象语法树的构造191
5.3.2类型的结构194
5.3.35.3节的练习195
5.4语法制导的翻译方案195
5.4.1后缀翻译方案195
5.4.2后缀SDT的语法分析栈实现196
5.4.3产生式内部带有语义动作的SDT197
5.4.4从SDT中消除左递归198
5.4.5 L属性定义的SDT200
5.4.65.4节的练习204
5.5实现L属性的SDD204
5.5.1在递归下降语法分析过程中进行翻译205
5.5.2边扫描边生成代码207
5.5.3 L属性的SDD和LL语法分析208
5.5.4 L属性的SDD的自底向上语法分析212
5.5.55.5节的练习214
5.6第5章总结215
5.7第5章参考文献216
第6章 中间代码生成217
6.1语法树的变体218
6.1.1表达式的有向无环图218
6.1.2构造DAG的值编码方法219
6.1.36.1节的练习220
6.2三地址代码221
6.2.1地址和指令221
6.2.2四元式表示223
6.2.3三元式表示223
6.2.4静态单赋值形式225
6.2.56.2节的练习225
6.3类型和声明225
6.3.1类型表达式226
6.3.2类型等价227
6.3.3声明227
6.3.4局部变量名的存储布局227
6.3.5声明的序列229
6.3.6记录和类中的字段230
6.3.76.3节的练习230
6.4表达式的翻译231
6.4.1表达式中的运算231
6.4.2增量翻译232
6.4.3数组元素的寻址233
6.4.4数组引用的翻译234
6.4.56.4节的练习235
6.5类型检查236
6.5.1类型检查规则236
6.5.2类型转换237
6.5.3函数和运算符的重载238
6.5.46.5节的练习239
6.6控制流239
6.6.1布尔表达式240
6.6.2短路代码240
6.6.3控制流语句240
6.6.4布尔表达式的控制流翻译242
6.6.5避免生成冗余的goto指令244
6.6.6布尔值和跳转代码245
6.6.76.6节的练习246
6.7回填246
6.7.1使用回填技术的一趟式目标代码生成246
6.7.2布尔表达式的回填247
6.7.3控制转移语句249
6.7.4 break语句、continue语句和goto语句250
6.7.56.7节的练习251
6.8 switch语句252
6.8.1 switch语句的翻译252
6.8.2 switch语句的语法制导翻译253
6.8.36.8节的练习254
6.9过程的中间代码254
6.10第6章总结255
6.11第6章参考文献256
第7章 运行时刻环境258
7.1存储组织258
7.2空间的栈式分配259
7.2.1活动树260
7.2.2活动记录262
7.2.3调用代码序列263
7.2.4栈中的变长数据265
7.2.57.2节的练习266
7.3栈中非局部数据的访问267
7.3.1没有嵌套过程时的数据访问267
7.3.2和嵌套过程相关的问题267
7.3.3一个支持嵌套过程声明的语言268
7.3.4嵌套深度268
7.3.5访问链269
7.3.6处理访问链270
7.3.7过程型参数的访问链271
7.3.8显示表272
7.3.97.3节的练习273
7.4堆管理274
7.4.1存储管理器274
7.4.2一台计算机的存储层次结构275
7.4.3程序中的局部性276
7.4.4碎片整理278
7.4.5人工回收请求280
7.4.67.4节的练习282
7.5垃圾回收概述282
7.5.1垃圾回收器的设计目标282
7.5.2可达性284
7.5.3引用计数垃圾回收器285
7.5.47.5节的练习286
7.6基于跟踪的回收的介绍286
7.6.1基本的标记-清扫式回收器287
7.6.2基本抽象288
7.6.3标记-清扫式算法的优化289
7.6.4标记并压缩的垃圾回收器290
7.6.5复制回收器292
7.6.6开销的比较293
7.6.77.6节的练习294
7.7第7章总结294
7.8第7章参考文献295
第8章 代码生成298
8.1代码生成器设计中的问题299
8.1.1代码生成器的输入299
8.1.2目标程序299
8.1.3指令选择300
8.1.4寄存器分配301
8.1.5求值顺序302
8.2目标语言302
8.2.1一个简单的目标机模型302
8.2.2程序和指令的代价304
8.2.38.2节的练习304
8.3目标代码中的地址306
8.3.1静态分配306
8.3.2栈分配307
8.3.3名字的运行时刻地址309
8.3.48.3节的练习309
8.4基本块和流图310
8.4.1基本块311
8.4.2后续使用信息312
8.4.3流图312
8.4.4流图的表示方式313
8.4.5循环313
8.4.68.4节的练习314
8.5基本块的优化314
8.5.1基本块的DAG表示314
8.5.2寻找局部公共子表达式315
8.5.3消除死代码316
8.5.4代数恒等式的使用316
8.5.5数组引用的表示317
8.5.6指针赋值和过程调用318
8.5.7从DAG到基本块的重组319
8.5.88.5节的练习320
8.6一个简单的代码生成器320
8.6.1寄存器和地址描述符321
8.6.2代码生成算法321
8.6.3函数getReg的设计324
8.6.48.6节的练习324
8.7窥孔优化325
8.7.1消除冗余的加载和保存指令325
8.7.2消除不可达代码326
8.7.3控制流优化326
8.7.4代数化简和强度消减327
8.7.5使用机器特有的指令327
8.7.68.7节的练习327
8.8寄存器分配和指派327
8.8.1全局寄存器分配328
8.8.2使用计数328
8.8.3外层循环的寄存器指派330
8.8.4通过图着色方法进行寄存器分配330
8.8.58.8节的练习331
8.9通过树重写来选择指令331
8.9.1树翻译方案331
8.9.2通过覆盖一个输入树来生成代码333
8.9.3通过扫描进行模式匹配334
8.9.4用于语义检查的例程335
8.9.5通用的树匹配方法335
8.9.68.9节的练习336
8.10表达式的优化代码的生成337
8.10.1 Ershov数337
8.10.2从带标号的表达式树生成代码337
8.10.3寄存器数量不足时的表达式求值338
8.10.48.10节的练习340
8.11使用动态规划的代码生成340
8.11.1连续求值340
8.11.2动态规划的算法341
8.11.38.11节的练习343
8.12第8章总结343
8.13第8章参考文献344
第9章 机器无关优化346
9.1优化的主要来源346
9.1.1冗余的原因346
9.1.2一个贯穿本章的例子:快速排序347
9.1.3保持语义不变的转换348
9.1.4全局公共子表达式349
9.1.5复制传播350
9.1.6死代码消除350
9.1.7代码移动351
9.1.8归纳变量和强度消减351
9.1.9 9.1节的练习353
9.2数据流分析简介354
9.2.1数据流抽象354
9.2.2数据流分析模式355
9.2.3基本块上的数据流模式356
9.2.4到达定值357
9.2.5活跃变量分析362
9.2.6可用表达式363
9.2.7小结365
9.2.89.2节的练习365
9.3数据流分析基础367
9.3.1半格368
9.3.2传递函数371
9.3.3通用框架的迭代算法372
9.3.4数据流解的含义374
9.3.59.3节的练习375
9.4常量传播376
9.4.1常量传播框架的数据流值376
9.4.2常量传播框架的交汇运算377
9.4.3常量传播框架的传递函数377
9.4.4常量传递框架的单调性378
9.4.5常量传播框架的不可分配性378
9.4.6对算法结果的解释379
9.4.79.4节的练习380
9.5流图中的循环380
9.5.1支配结点380
9.5.2深度优先排序382
9.5.3深度优先生成树中的边384
9.5.4回边和可归约性384
9.5.5流图的深度385
9.5.6自然循环385
9.5.7迭代数据流算法的收敛速度386
9.5.89.5节的练习388
9.6第9章总结389
9.7第9章参考文献391
附录一个完整的编译器前端394