微信扫一扫,移动浏览光盘
简介
编译原理是计算机学科的一门重要专业基础课。本书旨在介绍编译程
序设计的基本原理、实现技术、方法和工具,充分考虑了教师便于教学,
学生便于自学的问题。在介绍基本原理和实现技术中,注重循序渐进、深
入浅出,每一章节都提供了编译程序实现的具体实例,每章末尾给出了丰
富的习题以辅助学生更好地掌握编译过程。
本书包含了编译程序设计的基础理论和具体实现技术,主要内容有:
形式语言和自动机理论、词法分析、语法分析、语义分析、中间代码生成
、中间代码优化和目标代码生成等编译过程。
本书可作为大专院校计算机专业本科生教材,也可作为计算机工程技
术人员的参考书。
目录
第1章 编译引论1
1.1 程序设计语言和编译程序1
1.2 编译程序的结构2
1.2.1 编译程序的构成2
1.2.2 遍4
1.2.3 编译程序的前端和后端4
1.3 编译程序和程序设计环境5
1.4 编译程序的实现5
习题17
第2章 形式语言与自动机理论基础8
2.1 基本概念8
2.2 文法10
2.2.1 文法的定义10
2.2.2 文法分类11
2.2.3 推导和归约13
2.2.4 语法树与文法二义性14
2.2.5 文法等价变换17
2.3 有限自动机(FA)21
2.3.1 确定有限自动机21
2.3.2 非确定有限自动机24
2.3.3 DFA与NFA的等价25
2.3.4 DFA的化简27
2.4 正则表达式29
2.4.1 正则表达式与正则集29
2.4.2 正则表达式与有限自动机的相互转换30
习题232
第3章 词法分析34
3.1 词法分析介绍34
3.1.1 词法分析程序的功能34
3.1.2 词法分析程序的接口34
3.2 词法分析程序设计35
3.2.1 单词分类35
3.2.2 单词的内部表示35
3.2.3 单词的形式描述35
3.2.4 自动机的实现37
3.3 词法分析程序的实现38
3.3.1 实现词法分析程序应注意的问题38
3.3.2 单词结构40
3.3.3 实现算法40
3.4 词法分析程序自动生成42
3.4.1 LEX简介42
3.4.2 LEX工作原理43
3.4.3 LEX源文件结构43
3.4.4 LEX系统中的正则式45
3.4.5 LEX的使用方式47
3.4.6 应用实例48
习题348
第4章 语法分析——自顶向下分析方法49
4.1 语法分析程序介绍49
4.1.1 语法分析程序的功能49
4.1.2 语法错误类别及错误处理49
4.1.3 自顶向下语法分析基本思想51
4.1.4 3个重要的集合52
4.1.5 自顶向下语法分析条件54
4.2 递归下降法55
4.2.1 递归下降法语法分析原理55
4.2.2 递归下降法语法分析程序的构造56
4.3 LL(1)分析方法57
4.3.1 LL(1)分析法原理57
4.3.2 LL(1)分析表的构造58
4.3.3 LL(1)驱动程序的构造60
4.4 自顶向下分析程序的自动生成61
习题462
第5章 语法分析——自底向上分析方法63
5.1 自底向上语法分析方法介绍63
5.2 简单优先分析64
5.2.1 简单优先文法及其优先关系矩阵的构造64
5.2.2 简单优先分析算法66
5.3 LR分析法66
5.3.1 LR类分析法的工作过程67
5.3.2 LR(0)分析方法68
5.3.3 SLR(1)分析方法75
5.3.4 LR(1)分析方法78
5.3.5 LALR(1)分析方法81
5.3.6 LR方法小结83
5.4 自底向上分析程序的自动生成85
习题586
第6章 语义分析和符号表88
6.1 语义分析概述88
6.1.1 语义88
6.1.2 语义分析的功能89
6.1.3 语义分析的一般过程91
6.2 符号表的数据结构92
6.2.1 标识符的属性93
6.2.2 标识符的内部表示94
6.2.3 类型的内部表示100
6.2.4 值的内部表示103
6.3 符号表的管理104
6.3.1 符号表的建立与访问104
6.3.2 符号表的组织105
6.3.3 符号表的局部化处理107
6.4 程序设计语言符号表的实例111
6.4.1 Pascal的符号表111
6.4.2 C的符号表113
习题6119
第7章 中间代码生成121
7.1 常用的中间代码结构121
7.1.1 后缀式121
7.1.2 抽象语法树和DAG121
7.1.3 三地址中间代码122
7.2 语法制导方法概论123
7.3 类型检查和类型转换125
7.4 中间代码生成中的几个问题125
7.4.1 语义信息的获取和保存125
7.4.2 语义栈Sem及其操作126
7.4.3 常用的语义子程序126
7.5 表达式的中间代码生成127
7.6 下标变量的中间代码生成129
7.6.1 下标变量的地址129
7.6.2 下标变量的四元式结构130
7.6.3 下标变量的中间代码生成过程130
7.6.4 下标变量中间代码生成实例131
7.7 赋值语句的中间代码132
7.8 过程调用和函数调用的中间代码133
7.9 控制语句的中间代码生成135
7.9.1 goto语句和标号定位的中间代码135
7.9.2 条件语句的中间代码136
7.9.3 while语句的中间代码136
7.10 过程∕函数声明的中间代码生成137
习题7138
第8章 中间代码优化140
8.1 优化方法概述140
8.2 基本块划分142
8.3 常量表达式局部优化144
8.4 公共表达式局部优化144
8.5 循环不变式外提146
8.5.1 循环不变式外提概述146
8.5.2 循环不变式外提原理149
8.6 其他各类优化介绍151
习题8152
第9章 运行时存储空间的组织与管理154
9.1 目标程序运行时的存储结构154
9.1.1 目标程序运行时内存的划分154
9.1.2 目标程序运行时的存储分配策略155
9.2 过程活动记录和运行时栈161
9.2.1 过程活动记录161
9.2.2 过程活动记录的申请和释放162
9.3 变量访问环境164
9.3.1 变量访问环境概述164
9.3.2 Display表方法165
9.3.3 静态链方法168
习题9170
第10章 目标代码生成172
10.1 目标代码生成介绍172
10.1.1 代码生成器的输入和输出172
10.1.2 指令选择172
10.2 虚拟机173
10.3 寄存器的分配175
10.3.1 单寄存器机器的寄存器分配175
10.3.2 多寄存器机器的寄存器分配175
10.4 四元式到目标代码的翻译176
10.4.1 表达式四元式的翻译176
10.4.2 赋值语句四元式的翻译177
10.4.3 输入输出语句四元式的翻译178
10.4.4 条件语句四元式的翻译178
10.4.5 循环语句四元式的翻译179
10.4.6 标号语句四元式和goto语句四元式的翻译181
10.4.7 过程、函数说明语句四元式的翻译181
10.4.8 过程和函数调用语句四元式的翻译182
习题10183
参考文献184
1.1 程序设计语言和编译程序1
1.2 编译程序的结构2
1.2.1 编译程序的构成2
1.2.2 遍4
1.2.3 编译程序的前端和后端4
1.3 编译程序和程序设计环境5
1.4 编译程序的实现5
习题17
第2章 形式语言与自动机理论基础8
2.1 基本概念8
2.2 文法10
2.2.1 文法的定义10
2.2.2 文法分类11
2.2.3 推导和归约13
2.2.4 语法树与文法二义性14
2.2.5 文法等价变换17
2.3 有限自动机(FA)21
2.3.1 确定有限自动机21
2.3.2 非确定有限自动机24
2.3.3 DFA与NFA的等价25
2.3.4 DFA的化简27
2.4 正则表达式29
2.4.1 正则表达式与正则集29
2.4.2 正则表达式与有限自动机的相互转换30
习题232
第3章 词法分析34
3.1 词法分析介绍34
3.1.1 词法分析程序的功能34
3.1.2 词法分析程序的接口34
3.2 词法分析程序设计35
3.2.1 单词分类35
3.2.2 单词的内部表示35
3.2.3 单词的形式描述35
3.2.4 自动机的实现37
3.3 词法分析程序的实现38
3.3.1 实现词法分析程序应注意的问题38
3.3.2 单词结构40
3.3.3 实现算法40
3.4 词法分析程序自动生成42
3.4.1 LEX简介42
3.4.2 LEX工作原理43
3.4.3 LEX源文件结构43
3.4.4 LEX系统中的正则式45
3.4.5 LEX的使用方式47
3.4.6 应用实例48
习题348
第4章 语法分析——自顶向下分析方法49
4.1 语法分析程序介绍49
4.1.1 语法分析程序的功能49
4.1.2 语法错误类别及错误处理49
4.1.3 自顶向下语法分析基本思想51
4.1.4 3个重要的集合52
4.1.5 自顶向下语法分析条件54
4.2 递归下降法55
4.2.1 递归下降法语法分析原理55
4.2.2 递归下降法语法分析程序的构造56
4.3 LL(1)分析方法57
4.3.1 LL(1)分析法原理57
4.3.2 LL(1)分析表的构造58
4.3.3 LL(1)驱动程序的构造60
4.4 自顶向下分析程序的自动生成61
习题462
第5章 语法分析——自底向上分析方法63
5.1 自底向上语法分析方法介绍63
5.2 简单优先分析64
5.2.1 简单优先文法及其优先关系矩阵的构造64
5.2.2 简单优先分析算法66
5.3 LR分析法66
5.3.1 LR类分析法的工作过程67
5.3.2 LR(0)分析方法68
5.3.3 SLR(1)分析方法75
5.3.4 LR(1)分析方法78
5.3.5 LALR(1)分析方法81
5.3.6 LR方法小结83
5.4 自底向上分析程序的自动生成85
习题586
第6章 语义分析和符号表88
6.1 语义分析概述88
6.1.1 语义88
6.1.2 语义分析的功能89
6.1.3 语义分析的一般过程91
6.2 符号表的数据结构92
6.2.1 标识符的属性93
6.2.2 标识符的内部表示94
6.2.3 类型的内部表示100
6.2.4 值的内部表示103
6.3 符号表的管理104
6.3.1 符号表的建立与访问104
6.3.2 符号表的组织105
6.3.3 符号表的局部化处理107
6.4 程序设计语言符号表的实例111
6.4.1 Pascal的符号表111
6.4.2 C的符号表113
习题6119
第7章 中间代码生成121
7.1 常用的中间代码结构121
7.1.1 后缀式121
7.1.2 抽象语法树和DAG121
7.1.3 三地址中间代码122
7.2 语法制导方法概论123
7.3 类型检查和类型转换125
7.4 中间代码生成中的几个问题125
7.4.1 语义信息的获取和保存125
7.4.2 语义栈Sem及其操作126
7.4.3 常用的语义子程序126
7.5 表达式的中间代码生成127
7.6 下标变量的中间代码生成129
7.6.1 下标变量的地址129
7.6.2 下标变量的四元式结构130
7.6.3 下标变量的中间代码生成过程130
7.6.4 下标变量中间代码生成实例131
7.7 赋值语句的中间代码132
7.8 过程调用和函数调用的中间代码133
7.9 控制语句的中间代码生成135
7.9.1 goto语句和标号定位的中间代码135
7.9.2 条件语句的中间代码136
7.9.3 while语句的中间代码136
7.10 过程∕函数声明的中间代码生成137
习题7138
第8章 中间代码优化140
8.1 优化方法概述140
8.2 基本块划分142
8.3 常量表达式局部优化144
8.4 公共表达式局部优化144
8.5 循环不变式外提146
8.5.1 循环不变式外提概述146
8.5.2 循环不变式外提原理149
8.6 其他各类优化介绍151
习题8152
第9章 运行时存储空间的组织与管理154
9.1 目标程序运行时的存储结构154
9.1.1 目标程序运行时内存的划分154
9.1.2 目标程序运行时的存储分配策略155
9.2 过程活动记录和运行时栈161
9.2.1 过程活动记录161
9.2.2 过程活动记录的申请和释放162
9.3 变量访问环境164
9.3.1 变量访问环境概述164
9.3.2 Display表方法165
9.3.3 静态链方法168
习题9170
第10章 目标代码生成172
10.1 目标代码生成介绍172
10.1.1 代码生成器的输入和输出172
10.1.2 指令选择172
10.2 虚拟机173
10.3 寄存器的分配175
10.3.1 单寄存器机器的寄存器分配175
10.3.2 多寄存器机器的寄存器分配175
10.4 四元式到目标代码的翻译176
10.4.1 表达式四元式的翻译176
10.4.2 赋值语句四元式的翻译177
10.4.3 输入输出语句四元式的翻译178
10.4.4 条件语句四元式的翻译178
10.4.5 循环语句四元式的翻译179
10.4.6 标号语句四元式和goto语句四元式的翻译181
10.4.7 过程、函数说明语句四元式的翻译181
10.4.8 过程和函数调用语句四元式的翻译182
习题10183
参考文献184
编著者还有:郭德贵、张晶、张红、杨冬
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×