本书是编译原理课程的辅导教材。书中对该课程的各部分内容进行了整理、归纳和总结,并指出其重点。同时,选取了一些具有一定难度和代表性的例题,进行了深入细致的分析和解答,为读者提供了解题思路和解题方法。书中还精选了一些与历届研究生入学试题相类似、难度相当的题目作为习题,并给出了参考答案。另外,本书还设计了一个简单的程序设计语言的编译程序,并将其作为实验内容,通过该实验可使读者加深对编译理论的理解,提高程序设计水平。
本书可作为编译原理课程的考研复习用书、教学辅导用书和实验指导书,也可作为计算机软件人员的参考资料。
第1章编译概述
1.1主要内容
1.1.1计算机的语言层次
1.1.2翻译程序
1.1.3编译的阶段
1.1.4编译的遍(趟)
1.1.5本章重点
1.2例题解析
1.3习题
1.4习题参考答案
第2章文法和语言
2.1主要内容
2.1.1基础概念
2.1.2文法的形式定义及
2.1.3文法、语言的分类
2.1.4本章重点
2.2例题解析
2.3习题
2.4习题参考答案
第3章词法分析
3.1主要内容
3.1.1词法分析的任务
3.1.2单词的种类与机内表示方法
3.1.3单词的描述
3.1.4正规文法、正规式、NFA、DFA认之间的等价变换
3.1.5词法分析器的设计
3.1.6词法分析器的设计技术
3.1.7本章重点
3.2例题解析
3.3习题
3.4习题参考答案
第4章语法分析
4.1主要内容
4.1.1语法分析的任务
4.12自顶向下分析法
4.1.3自底向上分析法
4.1.4本章重点
4.2例题解析
4.3习题
4.4习题参考答案
第5章语法制导翻译技术
5.1主要内容
5.1.1语法制导翻译的任务
5.12语法制导翻译的基本思想
5.1.3中间代码的形式
5.1.4属性文法
5.1.5各种典型语法成分的翻译要点
5.1.6本章重点
5.2例题解析
5.3习题
5.4习题参考答案
第6章符号表
6.1主要内容
6.1.1符号表的作用
6.1.2符号表的建立
6.1.3符号表的内容
6.1.4符号表的组织
6.1.5符号表的管理
6.1.6本章重点
6.2例题解析
6.3习题
6.4习题参考答案
第7章运行时存储空间组织
7.1主要内容
7.1.1运行时存储器的划分
7.1.2数据空间的分配策略
7.1.3简单程序设计语言的栈式存储分配
7.1.4嵌套过程语言的栈式实现
7.1.5过程调用、进入、返回
7.1.6本章重点
7.2例题解析
7.3习题
7.4习题参考答案
第8章代码优化
8.1主要内容
8.1.1局部优化
8.1.2循环优化
8.1.3本章重点
8.2例题解析
8.3习题
8.4习题参考答案
第9章目标代码生成
9.1主要内容
9.1.1目标代码
9.1.2目标机器模型
9.1.3个简单的代码生成器
9.1.4本章重点
9.2例题解析
93习题
94习题参考答案
附录
附录AS语言说明
A1字符集的定义
A.2单词集的定义
A3数据类型定义
A4表达式定义
A.5语句定义
A6程序定义
A.7源程序书写格式的规定
附录BS语言词法分析程序
B.1任务
B.2要求
B.3数据结构
B.4程序参考结构及模块说明
附录CS语言语法/语义分析程序
C.1任务
C.2要求
C.3数据结构
C.4程序参考结构及模块说明
附录DS语言目标代码生成程序
D.1任务
D.2要求
D.3数据结构
D.4程序参考结构
D.5寄存器分配策略
D.6代码生成器的模块结构及说明
附录ES语言编译程序清单
参考文献
编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支。编译原理作为计算机专业的一门核心课程,在教学中占有十分重要的地位。由于其内容具有较强的理论性和实践性,学生在学习过程中普遍感到内容抽象、难于理解、题目难做。为此特编写本书,希望本书能够成为学生学习编译原理的好帮手,能使读者更全面、更透彻地理解和掌握编译的原理和方法,不再感到这门课程难学。
本书作为编译原理课程的学习辅导用书,内容包括了编译各阶段的基本理论与方法,以及在编译过程中涉及到的一些问题。全书共分9章:第1章简单介绍了编译程序的功能、编译阶段的划分及编译程序的结构;第2章对语言与它的描述工具——文法进行了叙述;第3章为词法分析,涉及的主要技术是正规式与有限自动机:第4章为语法分析,主要包括自顶向下分析法中的预测分析法(LL(1)分析法)和递归下降分析法、自底向上分析法中的算符优先分析法和LR分析法:第5章为语法制导翻译与中间代码生成的相关内容;第6章介绍了编译过程中大量使用的符号表,包括它的作用及组织方法和管理方式;第7章从编译的角度介绍了程序运行时如何分配、管理好存储空间:第8章为代码优化,主要介绍了局部优化、循环优化的方法;第9章为目标代码生成,主要介绍了基本块的优化算法。
书中每章的结构都相同,包括四部分:(1)主要内容。介绍这一章应掌握的概念、技术和相关算法,并点出这一章的重点;(2)例题解析。精选了一些典型题目,给出了解题思路、解题方法和要注意的问题,题目不多,但具有代表性:(3)习题。要学好编译的方法,就必须亲自动手做题目,这里给出了一些与例题相对应的作业:(4)习题参考答案。对习题中的每一道题目都给出了参考答案,大部分题目还给出了解题过程。
本书还给出了一个简单的程序设计语言(S语言)的编译程序,将其作为实验。该实验将编译程序划分为三遍,分别实现词法分析、语法分析并生成中间代码、生成目标代码。书的最后附上了C语言程序清单。
本书实验程序由戴跃发、刘继臣、王继刚等同学编程、调试,在此表示衷心感谢。
由于作者水平有限,书中不妥之处,敬请读者批评指正。
编 者