
《编译原理与技术》系统地介绍了编译程序的设计原理和基本实现技术,主要内容包括词法分析、语法分析、语义分析、中间代码生成、代码生成和代码优化等,还重点介绍了用于实现语义分析和中间代码生成的语法制导翻译技术,以及程序运行时存储空间的组织与管理。在介绍基本理论和方法的同时,注重实际应用,介绍了LEX和YACC的使用方法及原理,剖析了PL/0语言的编译程序,讨论了GCC编译程序的基本结构。配合理论教学,给出了一些实践题目,旨在培养学生分析和解决问题的能力。
编辑推荐
《编译原理与技术》内容充实、图文并茂、各章节内容循序渐进,并注意理论与实践的结合。《编译原理与技术》可作为高等学校计算机科学与技术专业的本科生教材或参考书,也可供其他专业的学生或从事计算机工作的工程技术人员阅读参考。 目录
第1章 编译概述
1.1 翻译和解释
1.1.1 程序设计语言
1.1.2 翻译程序
1.2 编译的阶段和任务
1.2.1 分析阶段
1.2.2 综合阶段
1.2.3 符号表管理
1.2.4 错误处理
1.3 编译有关的其他概念
1.3.1 前端和后端
1.3.2 “遍”的概念
1.4 编译程序的伙伴工具
1.4.1 预处理器
1.4.2 汇编程序
1.4.3 连接装配程序
1.5 编译原理的应用
习题1
第2章 形式语言与自动机基础
2.1 语言和文法
2.1.1 字母表和符号串
2.1.2 语言
2.1.3 文法及其形式定义
2.1.4 推导和短语
2.1.5 分析树及二义性
2.1.6 文法变换
2.2 有限自动机
2.2.1 确定的有限自动机
2.2.2 非确定的有限自动机
2.2.3 具有ε—转移的非确定的有限自动机
2.2.4 DFA的化简
2.3 正规文法与有限自动机的等价性
2.4 正规表达式与有限自动机的等价性
2.5 正规表达式与正规文法的等价性
2.5.1 正规定义式
2.5.2 表示的缩写
2.5.3 正规表达式转换为等价的正规文法
习题2
第3章 词法分析
3.1 词法分析程序与语法分析程序的关系
3.2 词法分析程序的输入与输出
3.2.1 输入缓冲区
3.2.2 词法分析程序的输出
3.3 记号的描述和识别
3.3.1 词法与正规文法
3.3.2 记号的文法
3.3.3 状态转换图与记号的识别
3.4 词法分析程序的设计与实现
3.4.1 文法及状态转换图
3.4.2 词法分析程序的构造
3.4.3 词法分析程序的实现
3.5 软件工具LEX
3.5.1 LEX源程序
3.5.2 LEX的工作原理
习题3
程序设计1
第4章 语法分析
4.1 语法分析程序
4.1.1 语法分析程序的地位
4.1.2 常用的语法分析方法
4.1.3 语法错误的处理
4.2 自顶向下分析方法
4.2.1 递归下降分析
4.2.2 递归调用预测分析
4.2.3 非递归预测分析
4.3 自底向上分析方法
4.3.1 规范归约
4.3.2 “移进—归约”方法的实现
4.4 LR分析方法
4.4.1 LR分析程序的模型及工作过程
4.4.2 SLR(1)分析表的构造
4.4.3 LR(1)分析表的构造
4.4.4 LALR(1)分析表的构造
4.4.5 LR分析方法对二义文法的应用
4.4.6 LR分析的错误处理与恢复
4.5 软件工具YACC
4.5.1 YACC源程序
4.5.2 YACC对二义文法的处理
4.5.3 用LEX建立YACC的词法分析程序
4.5.4 YACC内部名称
习题4
程序设计2
第5章 语法制导翻译技术
5.1 语法制导定义及翻译方案
5.1.1 语法制导定义
5.1.2 依赖图
5.1.3 计算次序
5.1.4 S属性定义和L属性定义
5.1.5 翻译方案
5.2 S属性定义的自底向上翻译
5.2.1 构造表达式的语法树
5.2.2 构造语法树的语法制导定义
5.2.3 S属性定义的自底向上实现
5.3 L属性定义的自顶向下翻译
5.3.1 消除翻译方案中的左递归
5.3.2 预测翻译程序的设计
5.4 L属性定义的自底向上翻译
5.4.1 去掉翻译方案中嵌入的动作
5.4.2 分析栈中的继承属性
5.4.3 模拟继承属性的计算
5.4.4 用综合属性代替继承属性
习题5
……
第6章 语义分析
第7章 运行环境
第8章 中间代码生成
第9章 代码生成
第10章 代码优化
第11章 编译程序的实现
附录 PL/0编译程序源程序
参考文献 文摘
版权页:
插图:
2.错误恢复策略
语法分析程序在分析输入符号串(记号序列)的过程中,一旦发现错误,就应做适当的恢复。通常,编译程序试图恢复自己到某一状态,以便可以继续分析后续的输入串,使错误不断地被检查出来。但是如果恢复不当,也可能引起令人讨厌的、以假乱真的伪错误大量涌现,这些错误不是源程序中的,而是由于恢复时改变了分析程序的状态所引起的。同样,语法错误的恢复也可能引入语义伪错误(由语义分析程序或代码生成程序检查出来),如错误恢复时,分析程序可能跳过某个变量如rate的声明,以后遇到rate引用时,虽然语法没有错,但由于符号表中无rate的条目,因此会产生“变量rate未定义”的错误信息。
有时,错误所在的位置远远先于发现它的位置,并且这种错误的准确性质也难以推断,在一些困难的场合,出错处理程序可能需要猜想程序员的本意。
分析程序可以采用的错误恢复策略有很多种,有几种方法已被广泛使用,但还没有哪一种策略是被普遍接受的,现介绍以下几种方法。
1)紧急恢复
这是最简单的恢复方式,适用于大多数分析程序。其做法是:一旦发现错误,分析程序每次抛弃一个输入记号,直到向前扫描指针所指向的当前输入记号属于某个指定的同步记号集合为止。同步记号一般是定界符,如语句结束符分号、块结束标识END等,它们在源程序中的作用是清楚的。
这种方法简单,不会陷入死循环。但它常常会跳过一段输入记号而不检查其中是否含有错误,在一个语句中很少出现多个错误的情况下,还是可以胜任的,但是编译程序的设计者必须选择适当的同步记号。| ISBN | |
|---|---|
| 出版社 | 清华大学出版社 |
| 作者 | 李文生 |
| 尺寸 | 16 |