- 西安电子科技大学出版社
- 9787560656588
- 1版
- 349536
- 平装
- 16开
- 2020-06
- 329
- 224
- TP314
- TP自动化技术、计算机技术
内容简介
本书系统介绍了编译器构造的基本原理和一些经典实现技术,主要内容包括形式文法和形式语言理论、基于有限自动机的词法分析技术、自顶向下和自底向上的语法分析技术、基于语法制导翻译的语义分析和中间代码生成、代码优化、目标代码运行时刻环境的组织、目标代码生成等。本书理论部分讲解深入浅出,技术与算法部分简明扼要,为帮助读者理解,特别重视实例的选取和剖析。为适应“新工科”建设要求,本书专门讨论了编译技术在实际工程领域的应用,设计了几个与新兴产业紧密结合的工程案例。附录部分给出了一个简单模型语言编译器实例,读者通过阅读编译器源代码,可以对编译器实现有更深刻的理解。
本书可作为计算机相关本科专业编译原理与编译技术的教材,也可供其他专业学生及工程技术人员参考。
本书可作为计算机相关本科专业编译原理与编译技术的教材,也可供其他专业学生及工程技术人员参考。
目录
第 1 章 编译器概述 …………………………………………………………………………………………1
1.1 程序设计语言发展史 ………………………………………………………………………………1
1.2 语言翻译器 ……………………………………………………………………………………………2
1.3 编译器结构 ……………………………………………………………………………………………4
1.4 编译器构造方法 ………………………………………………………………………………………8
1.5 小结 ……………………………………………………………………………………………………10
习题 …………………………………………………………………………………………………………10
第2章 形式文法和形式语言 ………………………………………………………………………………11
2.1 自然语言与形式语言 …………………………………………………………………………………11
2.2 文法和语言的形式定义 ………………………………………………………………………………12
2.2.1 一个自然语言的例子 ……………………………………………………………………………12
2.2.2 字母表和符号串 …………………………………………………………………………………13
2.2.3 语言的非形式定义 ………………………………………………………………………………14
2.2.4 语言的运算 ………………………………………………………………………………………15
2.2.5 语言的描述 ………………………………………………………………………………………15
2.2.6 文法的形式定义 …………………………………………………………………………………16
2.2.7 推导与归约 ………………………………………………………………………………………18
2.2.8 语言与文法 ………………………………………………………………………………………19
2.3 文法和语言的分类 ……………………………………………………………………………………21
2.4 上下文无关文法的句型分析 …………………………………………………………………………23
2.4.1 用上下文无关文法描述高级语言 ………………………………………………………………23
2.4.2 句型推导与分析树 ………………………………………………………………………………24
2.4.3 句子、文法和语言的二义性 ……………………………………………………………………27
2.4.4 二义文法的改造 …………………………………………………………………………………27
2.5 小结 ……………………………………………………………………………………………………29
习题 …………………………………………………………………………………………………………30
第3章 词法分析 ……………………………………………………………………………………………32
3.1 词法分析程序的设计 …………………………………………………………………………………32
3.2 单词的描述—— 正规表达式 …………………………………………………………………………34
3.3 单词的识别—— 有限自动机 …………………………………………………………………………36
3.3.1 有限自动机的定义 ………………………………………………………………………………36
3.3.2 NFA到DFA的转换 ……………………………………………………………………………39
3.3.3 DFA的最小化 ……………………………………………………………………………………42
3.4 正规表达式与有限自动机的等价性 …………………………………………………………………46
3.5 词法分析程序的自动构造工具 ………………………………………………………………………49
3.6 小结 ……………………………………………………………………………………………………51
习题 …………………………………………………………………………………………………………51
第4章 语法分析 ……………………………………………………………………………………………54
4.1 语法分析概述 …………………………………………………………………………………………54
4.2 自顶向下语法分析方法 ………………………………………………………………………………56
4.2.1 不确定的自顶向下分析 …………………………………………………………………………56
4.2.2 确定的自顶向下分析 ……………………………………………………………………………57
4.2.3 非 LL(1)文法到 LL(1)文法的等价变换 ………………………………………………………62
4.2.4 无回溯递归下降分析法 …………………………………………………………………………66
4.2.5 非递归预测分析器 ………………………………………………………………………………68
4.2.6 预测分析中的错误处理 …………………………………………………………………………71
4.3 自底向上语法分析—— LR分析 ……………………………………………………………………73
4.3.1 自底向上语法分析的关键——识别句柄 ………………………………………………………73
4.3.2 自底向上语法分析的实现方法——移进—归约法 ……………………………………………74
4.3.3 LR分析器模型 …………………………………………………………………………………75
4.3.4 构造LR(0)分析表 ………………………………………………………………………………78
4.3.5 构造SLR(1)分析表 ……………………………………………………………………………86
4.3.6 LR(1)和LALR(1)分析表的构造 …………………………………………………………………88
4.4 语法分析程序的自动构造工具 ………………………………………………………………………93
4.5 小结 ……………………………………………………………………………………………………95
习题 …………………………………………………………………………………………………………96
第5章 语法制导翻译技术 …………………………………………………………………………………99
5.1 语义分析概述 …………………………………………………………………………………………99
5.2 语法制导定义 …………………………………………………………………………………………99
5.3 S -属性定义及其自底向上的属性计算 ……………………………………………………………104
5.4 L -属性定义及其深度优先的属性计算 ……………………………………………………………105
5.5 小结 …………………………………………………………………………………………………109
习题 ………………………………………………………………………………………………………109
第6章 语义分析与中间代码生成 ………………………………………………………………………111
6.1 类型检查 ……………………………………………………………………………………………111
6.2 说明语句的处理 ……………………………………………………………………………………114
6.3 中间语言 ……………………………………………………………………………………………120
6.4 赋值语句的翻译 ……………………………………………………………………………………123
6.5 布尔表达式和控制流语句的翻译 …………………………………………………………………128
6.6 回填技术 ……………………………………………………………………………………………136
6.7 小结 …………………………………………………………………………………………………141
习题 ………………………………………………………………………………………………………142
第7章 代码优化 …………………………………………………………………………………………143
7.1 代码优化概述 ………………………………………………………………………………………143
7.2 基本块与局部优化 …………………………………………………………………………………145
7.3 控制流分析与循环优化 ……………………………………………………………………………150
7.4 数据流分析与全局优化 ……………………………………………………………………………154
7.5 小结 …………………………………………………………………………………………………154
习题 ………………………………………………………………………………………………………155
第8章 目标代码运行时刻环境的组织 …………………………………………………………………157
8.1 目标代码运行时刻环境 ……………………………………………………………………………157
8.2 源语言相关问题讨论 ………………………………………………………………………………158
8.3 运行时刻内存空间的组织 …………………………………………………………………………161
8.4 运行时刻内存空间分配策略 ………………………………………………………………………162
8.4.1 静态存储分配 …………………………………………………………………………………162
8.4.2 栈式存储分配 …………………………………………………………………………………164
8.4.3 堆式存储分配 …………………………………………………………………………………166
8.5 对非局部名字的访问 ………………………………………………………………………………167
8.5.1 程序设计语言的作用域规则 …………………………………………………………………167
8.5.2 分程序结构的处理 ……………………………………………………………………………168
8.5.3 无嵌套过程语言的处理 ………………………………………………………………………170
8.5.4 有嵌套过程语言的处理 ………………………………………………………………………170
8.6 小结 …………………………………………………………………………………………………174
习题 ………………………………………………………………………………………………………175
第9章 目标代码生成 ……………………………………………………………………………………176
9.1 代码生成器概述 ……………………………………………………………………………………176
9.2 运行时刻内存空间管理的实现 ……………………………………………………………………179
9.3 一个简单的代码生成器 ……………………………………………………………………………183
9.3.1 下次引用信息和活跃信息 ……………………………………………………………………183
9.3.2 寄存器描述器和地址描述器 …………………………………………………………………185
9.3.3 简单代码生成算法 ……………………………………………………………………………186
9.4 小结 …………………………………………………………………………………………………190
习题 ………………………………………………………………………………………………………191
第10章 编译技术应用 ……………………………………………………………………………………192
10.1 DFA在网上购物平台中的应用 …………………………………………………………………192
10.2 广义LR分析方法在自然语言语法分析中的应用 ……………………………………………194
10.3 属性文法在模式识别中的应用 …………………………………………………………………196
附录 SMini——一个简单模型语言编译器 ………………………………………………………………201
一、S语言简介 …………………………………………………………………………………………201
二、假想目标机及其指令集 ……………………………………………………………………………202
三、SMini设计与实现 …………………………………………………………………………………205
四、SMini操作与编译示例 ……………………………………………………………………………207
参考文献………………………………………………………………………………………………………216
1.1 程序设计语言发展史 ………………………………………………………………………………1
1.2 语言翻译器 ……………………………………………………………………………………………2
1.3 编译器结构 ……………………………………………………………………………………………4
1.4 编译器构造方法 ………………………………………………………………………………………8
1.5 小结 ……………………………………………………………………………………………………10
习题 …………………………………………………………………………………………………………10
第2章 形式文法和形式语言 ………………………………………………………………………………11
2.1 自然语言与形式语言 …………………………………………………………………………………11
2.2 文法和语言的形式定义 ………………………………………………………………………………12
2.2.1 一个自然语言的例子 ……………………………………………………………………………12
2.2.2 字母表和符号串 …………………………………………………………………………………13
2.2.3 语言的非形式定义 ………………………………………………………………………………14
2.2.4 语言的运算 ………………………………………………………………………………………15
2.2.5 语言的描述 ………………………………………………………………………………………15
2.2.6 文法的形式定义 …………………………………………………………………………………16
2.2.7 推导与归约 ………………………………………………………………………………………18
2.2.8 语言与文法 ………………………………………………………………………………………19
2.3 文法和语言的分类 ……………………………………………………………………………………21
2.4 上下文无关文法的句型分析 …………………………………………………………………………23
2.4.1 用上下文无关文法描述高级语言 ………………………………………………………………23
2.4.2 句型推导与分析树 ………………………………………………………………………………24
2.4.3 句子、文法和语言的二义性 ……………………………………………………………………27
2.4.4 二义文法的改造 …………………………………………………………………………………27
2.5 小结 ……………………………………………………………………………………………………29
习题 …………………………………………………………………………………………………………30
第3章 词法分析 ……………………………………………………………………………………………32
3.1 词法分析程序的设计 …………………………………………………………………………………32
3.2 单词的描述—— 正规表达式 …………………………………………………………………………34
3.3 单词的识别—— 有限自动机 …………………………………………………………………………36
3.3.1 有限自动机的定义 ………………………………………………………………………………36
3.3.2 NFA到DFA的转换 ……………………………………………………………………………39
3.3.3 DFA的最小化 ……………………………………………………………………………………42
3.4 正规表达式与有限自动机的等价性 …………………………………………………………………46
3.5 词法分析程序的自动构造工具 ………………………………………………………………………49
3.6 小结 ……………………………………………………………………………………………………51
习题 …………………………………………………………………………………………………………51
第4章 语法分析 ……………………………………………………………………………………………54
4.1 语法分析概述 …………………………………………………………………………………………54
4.2 自顶向下语法分析方法 ………………………………………………………………………………56
4.2.1 不确定的自顶向下分析 …………………………………………………………………………56
4.2.2 确定的自顶向下分析 ……………………………………………………………………………57
4.2.3 非 LL(1)文法到 LL(1)文法的等价变换 ………………………………………………………62
4.2.4 无回溯递归下降分析法 …………………………………………………………………………66
4.2.5 非递归预测分析器 ………………………………………………………………………………68
4.2.6 预测分析中的错误处理 …………………………………………………………………………71
4.3 自底向上语法分析—— LR分析 ……………………………………………………………………73
4.3.1 自底向上语法分析的关键——识别句柄 ………………………………………………………73
4.3.2 自底向上语法分析的实现方法——移进—归约法 ……………………………………………74
4.3.3 LR分析器模型 …………………………………………………………………………………75
4.3.4 构造LR(0)分析表 ………………………………………………………………………………78
4.3.5 构造SLR(1)分析表 ……………………………………………………………………………86
4.3.6 LR(1)和LALR(1)分析表的构造 …………………………………………………………………88
4.4 语法分析程序的自动构造工具 ………………………………………………………………………93
4.5 小结 ……………………………………………………………………………………………………95
习题 …………………………………………………………………………………………………………96
第5章 语法制导翻译技术 …………………………………………………………………………………99
5.1 语义分析概述 …………………………………………………………………………………………99
5.2 语法制导定义 …………………………………………………………………………………………99
5.3 S -属性定义及其自底向上的属性计算 ……………………………………………………………104
5.4 L -属性定义及其深度优先的属性计算 ……………………………………………………………105
5.5 小结 …………………………………………………………………………………………………109
习题 ………………………………………………………………………………………………………109
第6章 语义分析与中间代码生成 ………………………………………………………………………111
6.1 类型检查 ……………………………………………………………………………………………111
6.2 说明语句的处理 ……………………………………………………………………………………114
6.3 中间语言 ……………………………………………………………………………………………120
6.4 赋值语句的翻译 ……………………………………………………………………………………123
6.5 布尔表达式和控制流语句的翻译 …………………………………………………………………128
6.6 回填技术 ……………………………………………………………………………………………136
6.7 小结 …………………………………………………………………………………………………141
习题 ………………………………………………………………………………………………………142
第7章 代码优化 …………………………………………………………………………………………143
7.1 代码优化概述 ………………………………………………………………………………………143
7.2 基本块与局部优化 …………………………………………………………………………………145
7.3 控制流分析与循环优化 ……………………………………………………………………………150
7.4 数据流分析与全局优化 ……………………………………………………………………………154
7.5 小结 …………………………………………………………………………………………………154
习题 ………………………………………………………………………………………………………155
第8章 目标代码运行时刻环境的组织 …………………………………………………………………157
8.1 目标代码运行时刻环境 ……………………………………………………………………………157
8.2 源语言相关问题讨论 ………………………………………………………………………………158
8.3 运行时刻内存空间的组织 …………………………………………………………………………161
8.4 运行时刻内存空间分配策略 ………………………………………………………………………162
8.4.1 静态存储分配 …………………………………………………………………………………162
8.4.2 栈式存储分配 …………………………………………………………………………………164
8.4.3 堆式存储分配 …………………………………………………………………………………166
8.5 对非局部名字的访问 ………………………………………………………………………………167
8.5.1 程序设计语言的作用域规则 …………………………………………………………………167
8.5.2 分程序结构的处理 ……………………………………………………………………………168
8.5.3 无嵌套过程语言的处理 ………………………………………………………………………170
8.5.4 有嵌套过程语言的处理 ………………………………………………………………………170
8.6 小结 …………………………………………………………………………………………………174
习题 ………………………………………………………………………………………………………175
第9章 目标代码生成 ……………………………………………………………………………………176
9.1 代码生成器概述 ……………………………………………………………………………………176
9.2 运行时刻内存空间管理的实现 ……………………………………………………………………179
9.3 一个简单的代码生成器 ……………………………………………………………………………183
9.3.1 下次引用信息和活跃信息 ……………………………………………………………………183
9.3.2 寄存器描述器和地址描述器 …………………………………………………………………185
9.3.3 简单代码生成算法 ……………………………………………………………………………186
9.4 小结 …………………………………………………………………………………………………190
习题 ………………………………………………………………………………………………………191
第10章 编译技术应用 ……………………………………………………………………………………192
10.1 DFA在网上购物平台中的应用 …………………………………………………………………192
10.2 广义LR分析方法在自然语言语法分析中的应用 ……………………………………………194
10.3 属性文法在模式识别中的应用 …………………………………………………………………196
附录 SMini——一个简单模型语言编译器 ………………………………………………………………201
一、S语言简介 …………………………………………………………………………………………201
二、假想目标机及其指令集 ……………………………………………………………………………202
三、SMini设计与实现 …………………………………………………………………………………205
四、SMini操作与编译示例 ……………………………………………………………………………207
参考文献………………………………………………………………………………………………………216