编译原理基础 - 中国高校教材图书网
|
书名: |
编译原理基础
|
| ISBN: | 978–7–5606 -1111–2 |
责任编辑: | |
| 作者: |
刘 坚
相关图书
|
装订: | 平装 |
| 印次: | 1-1 |
开本: | 16开 |
| 定价: |
¥29.00
折扣价:¥27.55
折扣:0.95
节省了1.45元
|
字数: |
473千字
|
| 出版社: |
西安电子科技大学出版社 |
页数: |
|
| 出版日期: |
2008-10-01 |
每包册数: |
|
| 国家规划教材: |
|
省部级规划教材: |
|
| 入选重点出版项目: |
|
获奖信息: |
|
|
|
| 内容简介: |
本书系统地介绍了程序设计语言翻译的基本原理与技术,内容包括编译器构造的所有重要阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、运行时的存储分配以及目标代码的生成等。本书还介绍了编译器编写工具LEX和YACC的工作原理与使用方法,并对语法制导翻译与属性计算、类型与类型检查、数据流分析等编译器构造和程序分析技术中当前重点关注的原理和方法进行了讨论。 本书既可以作为工科院校计算机专业或非计算机专业本科生与研究生的教材,也可以作为软件技术人员和程序设计语言爱好者的参考书。
|
| 作者简介: |
|
|
| 章节目录: |
第1章 引言 1
1.1 从面向机器的语言到面向人类的语言 1
1.2 语言之间的翻译 2
1.3 编译器与解释器 3
1.4 编译器的工作原理与基本组成 4
1.4.1 通用程序设计语言的主要成分 4
1.4.2 以阶段划分编译器 5
1.4.3 编译器各阶段的工作 6
1.4.4 编译器的分析/综合模式 10
1.4.5 编译器扫描的遍数 11
1.5 编译器的编写 11
1.6 本章小结 12
习题 13
第2章 词法分析 14
2.1 词法分析中的若干问题 14
2.1.1 记号、模式与单词 14
2.1.2 记号的属性 15
2.1.3 词法分析器的作用与工作方式 16
2.1.4 输入缓冲区 17
2.2 模式的形式化描述 18
2.2.1 字符串与语言 18
2.2.2 正规式与正规集 20
2.2.3 记号的说明 21
2.3 记号的识别——有限自动机 22
2.3.1 不确定的有限自动机(Nondeterministic Finite Automata,NFA) 22
2.3.2 确定的有限自动机(Deterministic Finite Automata,DFA) 25
2.3.3 有限自动机的等价 26
2.4 从正规式到词法分析器 27
2.4.1 从正规式到NFA 27
2.4.2 从NFA到DFA 29
2.4.3 最小化DFA 33
2.4.4* DFA的“短路”计算 35
2.4.5 由DFA构造词法分析器 42
2.5 本章小结 44
习题 45
第3章 语法分析 48
3.1 语法分析的若干问题 48
3.1.1 语法分析器的作用 48
3.1.2 语法错误的处理原则 49
3.2 上下文无关文法 50
3.2.1 上下文无关文法的定义与表示 50
3.2.2 CFG产生语言的基本方法——推导 52
3.2.3 推导、分析树与语法树 53
3.2.4 二义性与二义性的消除 54
3.3 语言与文法简介 59
3.3.1 正规式与上下文无关文法 59
3.3.2 上下文有关文法 60
3.3.3 形式语言与自动机简介 62
3.4 自上而下语法分析 63
3.4.1 自上而下分析的一般方法 63
3.4.2 消除左递归 64
3.4.3 提取左因子 66
3.4.4 递归下降分析 67
3.4.5 预测分析器 71
3.5 自下而上语法分析 77
3.5.1 自下而上分析的基本方法 77
3.5.2 LR分析 80
3.6* LR(1)与LALR(1)分析 89
3.6.1 SLR分析器的弱点 89
3.6.2 LR(1)分析器 90
3.6.3 LALR(1)分析器 92
3.6.4 LR(1)与LALR(1)的关系 94
3.6.5 LR(1)与二义文法的关系 96
3.7* 编译器编写工具 97
3.7.1 词法分析器生成器LEX 97
3.7.2 语法分析器生成器YACC 109
3.7.3 语言识别器生成工具简述 131
3.8 本章小结 134
习题 136
第4章 静态语义分析 139
4.1 语法制导翻译简介 139
4.1.1 语法与语义 139
4.1.2 属性与语义规则 140
4.1.3 语义规则的两种形式 141
4.1.4 LR分析翻译方案的设计 142
4.1.5 递归下降分析翻译方案的设计 144
4.2* 属性的计算 145
4.2.1 综合属性与自下而上分析 145
4.2.2 继承属性与自上而下分析 146
4.2.3 依赖图与属性计算 148
4.2.4 L_属性的增量分析 151
4.2.5 L_属性的自下而上计算 154
4.2.6 属性的空间分配 160
4.2.7 YACC源程序中的语法制导翻译 163
4.3 中间代码简介 165
4.3.1 后缀式 165
4.3.2 三地址码 166
4.3.3 图形表示 170
4.4 符号表简介 171
4.4.1 符号表条目 172
4.4.2 构成名字的字符串 173
4.4.3 名字的作用域 173
4.4.4 线性表 175
4.4.5 散列表 175
4.5 声明语句的翻译 177
4.5.1 变量的声明 177
4.5.2 数组变量的声明 179
4.5.3 过程的定义与声明 184
4.5.4 记录的域名 194
4.6 简单算术表达式与赋值句 195
4.6.1 简单变量的语法制导翻译 195
4.6.2 变量的类型转换 195
4.7 数组元素的引用 198
4.7.1 数组元素的地址计算 199
4.7.2 数组元素引用的语法制导翻译 200
4.8 布尔表达式 203
4.8.1 布尔表达式的作用与结构 203
4.8.2 布尔表达式的计算方法 203
4.8.3 数值表示与直接计算的语法制导翻译 204
4.8.4 短路计算的语法制导翻译 206
4.8.5 拉链与回填 207
4.9 控制语句 209
4.9.1 标号与无条件转移 210
4.9.2 条件转移 211
4.10 过程调用 214
4.11* 类型检查 215
4.11.1 类型、类型系统与类型检查 215
4.11.2 类型系统 219
4.11.3 简单的类型检查 222
4.11.4 类型表达式的等价 226
4.11.5 多态函数的类型检查 229
4.11.6 特定多态的类型检查 235
4.12 本章小结 238
习题 240
第5章 运行环境 243
5.1 过程的动态特性 243
5.1.1 过程与活动 243
5.1.2 控制栈与活动记录 245
5.1.3 名字的绑定 246
5.2 运行时数据空间的组织 247
5.2.1 运行时内存的划分与数据空间的存储分配策略 247
5.2.2 静态与动态分配简介 248
5.3 栈式动态分配 250
5.3.1 控制栈中的活动记录 250
5.3.2 调用序列与返回序列 251
5.3.3 栈式分配中对非本地名字的访问 252
5.3.4 参数传递的实现 255
5.4 本章小结 257
习题 258
第6章 代码生成 260
6.1 代码生成的相关问题 260
6.2 简单的计算机模型 260
6.3 简单的代码生成器 262
6.3.1 基本块、流图与循环 263
6.3.2 下次引用信息与活跃信息 266
6.3.3 简单的代码生成 267
6.4 本章小结 269
习题 269
第7章 代码优化 271
7.1 局部优化 271
7.1.1 基本块的优化 271
7.1.2 窥孔优化 276
7.1.3 表达式的优化代码生成 278
7.2 独立于机器的优化 281
7.2.1 运行实例:快排序 282
7.2.2 全局公共子表达式 284
7.2.3 复写传播(Copy Propagation) 286
7.2.4 死代码消除(Dead-Code Elimination) 286
7.2.5 代码外提(Code Motion) 287
7.2.6 归纳变量与强度削弱 287
7.3* 数据流分析简介 289
7.3.1 数据流抽象 290
7.3.2 数据流分析模式 291
7.3.3 基本块上的数据流模式 292
7.3.4 到达定值(Reaching Definitions) 292
7.3.5 活跃变量(Live Varibale) 296
7.3.6 可用表达式(Availabal Expression) 297
7.3.7 小结 300
7.4* 数据流分析的数学基础 300
7.4.1 半格(Semilattices) 301
7.4.2 转换函数(Transfer Functions) 303
7.4.3 通用框架的迭代算法 305
7.4.4 数据流解的意义 306
7.5 本章小结 308
习题 309
参考文献 311
|
| 精彩片段: |
|
|
| 书 评: |
“编译原理”是国内高校计算机科学与技术专业的必修专业课程之一,系统介绍程序设计语言翻译的原理与技术,是一门理论与实践并重的课程,在引导学生进行科学思维和提高学生解决实际问题能力两方面均有重要的作用。 全书共七章,分为基本原理与方法、专题论述两部分。50学时左右的本科生课程可以仅教授基本原理与方法部分。专题论述部分均用“*”标注,内容涉及现代编译器构造所使用的原理、工具与技术,可以作为超过50学时课程的补充部分,或者作为研究生课程的 内容。 基本原理与方法 第1章引言,介绍有关程序设计语言和语言翻译的基本概念,内容包括:高级语言与低级语言,编译与解释,编译器基本框架,构造编译器的方法与工具。第2章词法分析,从构词规则和词法分析两个方面讨论词法分析器的构造,内容包括:模式的描述与记号的识别,状态转换图与词法分析器,正规表达式与有限状态自动机。第3章语法分析,从原理上和方法上详细讨论文法和不同的语法分析方法,内容包括:语法分析器在编译器中的位置和作用,上下文无关文法与上下文有关文法、文法的二义性及其消除,自上而下的LL分析和自下而上的SLR分析。第4章静态语义分析,介绍语法制导翻译生成中间代码的一般方法,内容包括:语法与语义、属性与语义规则,中间代码的表现形式,名字信息的保存,声明性语句的语法制导翻译,可执行语句的语法制导翻译。第5章运行环境,内容包括:过程的动态特性、活动树与控制栈、名字的绑定,存储分配策略、栈式存储分配与非本地数据的访问。第6章代码生成,简单介绍代码生成所需考虑的问题和在一个假想的计算机模型上如何生成基本块的目标代码。 专题论述 3.6节LR(1)与LALR(1)分析,内容包括:在基于LR(0)分析的基础上讨论向前看符号(lookaheads)的作用,重点讨论最实用的LALR(1)分析器的构造。3.7节编译器编写工具,主要介绍LEX与YACC的基本工作原理和如何利用它们进行词法分析器、语法分析器的设计,并给出了详细的设计实例。4.2节属性的计算,从原理上讨论属性及其性质、属性的一般计算方法以及在自下而上分析和自上而下分析中属性的同步计算。4.11节类型检查,介绍类型系统在程序设计语言与编译器中的地位、类型与程序设计范型,详细讨论了类型表达式、类型等价、单态与多态的类型检查方法。7.3节数据流分析简介、7.4节数据流分析的数学基础,数据流分析是代码优化和程序分析技术的基础,在编译器构造、软件安全分析和逆向工程中均起重要作用。7.3节介绍数据流分析的基本概念和三种典型的数据流分析算法,7.4节对不同的数据流分析进行归纳总结,并且给出统一的数学模型。 为配合编译教学的实施,本书作者提供由西安电子科技大学软件工程研究所开发的类LEX/YACC工具XDCFLEX/XDYACC,其中的XDCFLEX可以生成对中文注释和字符串的识别。 XDCFLEX/XDYACC基于C/C++,可分别运行在PC机的DOS和Windows环境,稍加修改,也可在其它环境(如UNIX或LINUX上)运行。读者可以通过访问“http://www.xduph.com”,在本书页面下下载该软件。 本书的编写得到了西安电子科技大学出版社的支持,龚杰民教授审阅了全书,郭强和张学敏等同学为XDCFLEX/XDYACC的研制开发作出了贡献,在此一并表示诚挚的谢意。 本书已被作为国家级“十一五”规划教材。作者力图反映编译及其相关领域的基础知识与发展方向,并且力图用通俗的语言讲述抽象的原理。但是限于作者水平,书中难免有错误与欠妥之处,恳请读者批评指正。
|
| 其 它: |
|
|
|