图书介绍
编译程序构造原理和实现技术PDF|Epub|txt|kindle电子书版本网盘下载
![编译程序构造原理和实现技术](https://www.shukui.net/cover/72/32808746.jpg)
- 金成植编著 著
- 出版社: 北京:高等教育出版社
- ISBN:7040074923
- 出版时间:2000
- 标注页数:401页
- 文件大小:19MB
- 文件页数:416页
- 主题词:
PDF下载
下载说明
编译程序构造原理和实现技术PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一章 编译程序概述1
1.1 编译程序和解释程序1
1.2 编译程序的功能分解和组织结构3
1.3 编译程序的复杂性5
1.4 编译程序的设计实现6
1.5 编译程序的测试与维护7
1.6 几个经典编译程序8
第二章 一个微小编译器11
2.1 微小语言Micro11
2.2 Micro的词法分析12
2.3 Micro的语法分析16
2.4 Micro的语义分析19
2.5 Micro的目标代码22
练习题26
第三章 有限自动机与词法分析器28
3.1 词法分析28
3.1.1 词法分析器的功能28
3.1.2 单词的内部表示29
3.1.3 保留字30
3.1.4 空格符、制表符和换行符31
3.1.5 括号类配对预检32
3.1.6 向前看多个字符的处理32
3.1.7 字符串空间34
3.1.8 词法错误校正34
3.1.9 词法分析的结束36
3.2 正则表达式36
3.2.1 基本概念36
3.2.2 正则表达式及其一些性质37
3.2.3 正则定义38
3.2.4 正则表达式的局限性39
3.3 有限自动机(FA)39
3.3.1 确定有限自动机(DFA)39
3.3.2 确定有限自动机的实现42
3.3.3 非确定有限自动机(NFA)43
3.3.4 NFA到DFA的转换44
3.3.5 确定有限自动机的化简47
3.3.6 正则表达式到DFA的转换50
3.4 词法分析器的构造51
3.4.1 用DFA人工构造词法分析器51
3.4.2 使用词法分析器的生成器ScanGen54
3.4.3 Lex56
练习题58
第四章 文法与语法分析60
4.1 语法分析的功能60
4.1.1 语法分析器和识别器60
4.1.2 语法分析器的输入60
4.1.3 语法错误类别及关键性错误61
4.1.4 语法错误处理61
4.2 上下文无关文法62
4.2.1 文法和语言62
4.2.2 最左推导和最右推导65
4.2.3 语法分析树与二义性66
4.2.4 文法分析算法68
4.2.5 自顶向下方法概述72
4.2.6 自底向上方法概述73
4.3 递归下降法——自顶向下分析74
4.3.1 递归下降法原理74
4.3.2 消除公共前缀76
4.3.3 消除左递归77
4.4 LL分析方法——自顶向下分析80
4.4.1 LL(1)文法80
4.4.2 LL(1)分析表83
4.4.3 LL(1)分析的驱动器84
4.4.4 LL(1)中的if-then-else问题86
4.4.5 LL(1)分析器的自动生成器LLGen88
4.5 LR方法——自底向上分析89
4.5.1 句柄89
4.5.2 活前缀和归约活前缀90
4.5.3 线性正则式的状态机91
4.5.4 LR状态机的构造93
4.5.5 LR(0)和SLR(1)文法97
4.5.6 LR(1)文法103
4.5.7 LALR(1)文法109
4.5.8 二义性文法的处理116
4.5.9 另一种Shift-Reduce分析技术118
4.5.10 LL(1)与LALR(1)的比较119
4.6 LR分析器的生成器121
4.6.1 LALR分析器的生成器Yacc121
4.6.2 LALR分析器的生成器LALRGen122
4.7 语法错误处理122
4.7.1 错误恢复和错误修复122
4.7.2 递归下降分析的错误恢复123
4.7.3 LL分析的错误恢复126
4.7.4 LR分析的错误恢复128
练习题129
第五章 语义分析133
5.1 语义分析基础133
5.1.1 语义分析内容133
5.1.2 标识符的内部表示134
5.1.3 类型的内部表示138
5.1.4 值的内部表示143
5.2 符号表144
5.2.1 表处理技术145
5.2.2 符号表的局部化151
5.2.3 二叉式局部符号表152
5.2.4 散列式全局符号表154
5.2.5 嵌套式局部符号表155
5.2.6 符号表界面157
5.3 类型表达式159
5.3.1 类型的等价性和相容性159
5.3.2 类型的分析160
5.3.3 枚举类型——EnumTYPE162
5.3.4 子界类型——SubRangeTYPE163
5.3.5 数组类型——ArrayTYPE163
5.3.6 集合类型——SetTYPE164
5.3.7 文件类型——FileTYPE165
5.3.8 指针类型——PointerTYPE165
5.3.9 记录类型——RecordTYPE166
5.4 声明的语义分析169
5.4.1 标号声明部分——LabelDecPart170
5.4.2 常量声明部分——ConstDecPart172
5.4.3 类型声明部分——TypeDecPart173
5.4.4 变量声明部分——VarDecPart174
5.4.5 子程序首部——RoutHead176
5.4.6 过程/函数的向前声明179
5.5 执行体Body的语义分析180
5.5.1 表达式分析181
5.5.2 定位性标号和使用性标号183
5.5.3 赋值语句和调用语句分析184
5.5.4 结构语句分析188
练习题190
第六章 运行时的存储空间192
6.1 运行时的存储空间结构192
6.2 运行时的存储空间分配193
6.2.1 静态区的存储分配193
6.2.2 栈区的存储分配194
6.2.3 堆区的存储分配197
6.2.4 堆区空间管理199
6.3 运行时的过程活动记录与栈区的组织结构201
6.3.1 过程活动记录(Activation Record)201
6.3.2 动态链(Dynamic Chain)204
6.3.3 活跃活动记录206
6.4 运行时的变量访问206
6.4.1 变量的访问环境206
6.4.2 局部Display表方法209
6.4.3静态链方法(Static Chain)211
6.4.4 全局Display表方法和寄存器方法213
6.5 非正常出口和形式过程语句215
6.5.1 非正常出口的动态链和Display表215
6.5.2 形式过程语句和Display表216
6.5.3 奇特型调用和Display表217
6.6 分程序记录和动态数组空间218
6.6.1 分程序的记录218
6.6.2 动态数组的分配220
练习题224
第七章 动作文法和属性文法225
7.1 动作方法(Action Grammar)225
7.1.1 动作符(Action Symbol)225
7.1.2 动作文法(Action Grammar)225
7.1.3 尾动作文法227
7.1.4 抽象动作文法228
7.2 动作文法的实现230
7.2.1 动作文法的LL实现230
7.2.2 动作文法的LR实现236
7.2.3 Yacc——LALR分析器的生成器241
7.3 属性文法244
7.3.1 属性文法的定义244
7.3.2 继承属性和综合属性246
7.3.3 属性规则246
7.3.4 属性树和属性依赖图248
7.3.5 属性求值248
7.3.6 拷贝型属性文法250
7.4 属性文法在编译器设计中的应用251
7.4.1 类型分析的属性文法描述251
7.4.2 声明分析的属性文法描述253
7.4.3 语句分析的属性文法描述254
7.5 S——属性文法及其属性求值256
7.5.1 S——属性文法256
7.5.2 S——属性文法的递归实现——自顶向下求值256
7.5.3 S——属性文法的LL实现——自顶向下求值258
7.5.4 S——属性文法的LR实现——自底向上求值259
7.6 L——属性文法及其属性求值260
7.6.1 L——属性文法260
7.6.2 LL——L属性文法的递归实现——自顶向下求值261
7.6.3 LL——L属性文法的LL实现——自顶向下求值262
7.6.4 L——属性文法的栈式遍历树实现262
7.6.5 LR——L属性文法的LR实现——自底向下求值263
7.6.6 LALR分析器的生成器LALRGen267
练习题271
第八章 中间代码生成273
8.1 中间语言273
8.1.1 中间语言设置和直接代码生成273
8.1.2 栈式中间代码——后缀式274
8.1.3 三地址中间代码275
8.1.4 抽象语法树和DAG276
8.1.5 多元式中间代码277
8.2 简单表达式的中间代码生成279
8.2.1 表达式的语义信息279
8.2.2 表达式的中间代码结构282
8.2.3 类型转换284
8.2.4 表达式中间代码的生成285
8.2.5 布尔表达式的短路中间代码289
8.2.6 变量的中间代码292
8.3 多维下标变量的中间代码生成299
8.3.1 多维下标变量299
8.3.2 多维下标变量的地址公式299
8.3.3 多维下标变量的中间代码结构301
8.4 原子语句的中间代码303
8.4.1 输入输出语句的中间代码303
8.4.2 赋值语句的中间代码303
8.4.3 过程调用和函数调用的中间代码304
8.4.4 GOTO语句和标号定位的中间代码310
8.5 结构语句的中间代码311
8.5.1 条件语句的中间代码311
8.5.2 While语句的中间代码312
8.5.3 Repeat语句的中间代码313
8.5.4 For语句的中间代码314
8.5.5 Case语句的中间代码316
8.6 声明的中间代码321
8.6.1 变量声明的中间代码321
8.6.2 过程和函数的中间代码321
练习题322
第九章 中间代码优化324
9.1 引言324
9.1.1 优化目标和要求324
9.1.2 优化的必要性325
9.1.3 优化内容和难点325
9.1.4 局部优化和全局优化327
9.1.5 基本块和程序流图328
9.2 常量表达式优化329
9.2.1 常量表达式的局部优化329
9.2.2 基于常量定值分析的常量表达式全局优化330
9.2.3 可用常量定值的数据流分析331
9.3 公共表达式优化333
9.3.1 基于相似性的公共表达式局部优化333
9.3.2 基于值编码的公共表达式局部优化335
9.3.3 基于DAG的公共表达式局部优化338
9.3.4 基于可用表达式分析的公共表达式全局优化339
9.3.5 可用表达式定值的数据流分析340
9.4 循环不变表达式外提341
9.4.1 循环识别341
9.4.2 外提对象和安全性342
9.4.3 不变式外提的实现原理343
9.4.4 过程/函数的副作用分析346
9.4.5 一种简单的外提优化349
9.4.6 循环必经点分析350
9.5 循环内归纳表达式的优化351
9.5.1 归纳变量和归纳表达式351
9.5.2 归纳表达式的优化原理352
9.5.3 乘法运算的强度削减优化355
练习题356
第十章 目标代码生成358
10.1 目标代码358
10.1.1 虚拟目标代码358
10.1.2 实际目标代码359
10.1.3 窥孔优化361
10.2 临时变量361
10.2.1 临时变量的特点361
10.2.2 临时变量的存储空间362
10.2.3 变量的状态描述364
10.3 寄存器365
10.3.1 寄存器分类365
10.3.2 寄存器的状态描述365
10.3.3 寄存器的分配368
10.3.4 寄存器的释放代价370
10.4 基于多元式的代码生成371
10.4.1 编址模式(Addressing Mode)371
10.4.2 间接编址模式的转换372
10.4.3 目标代码生成基本技术373
10.4.4 其他寄存器的状态追踪379
10.5 基于树结构的代码生成380
10.5.1 多元式到树的转换380
10.5.2 计算寄存器个数381
10.5.3 从带寄存器个数标记的树生成代码382
10.6 基于DAG的代码生成385
10.6.1 从树构造DAG385
10.6.2 给DAG结点标上序号和虚寄存器388
10.6.3 从带排序和虚寄存器标记的DAG生成代码389
10.7 代码生成器的生成器391
10.7.1 代码生成器的自动化391
10.7.2 基于指令模板匹配的代码生成技术391
10.7.3 基于语法分析的代码生成技术394
10.8 其他396
10.8.1 标号和GOTO的代码生成396
10.8.2 过程/函数调用的代码生成396
练习题398
参考文献400