本书特色:
编译理论和技术作为计算机科学研究和工程应用的基础,受到了广泛的重视。编译原理也是大学计算机专业的必修课程。本书使用优秀的开源Java编译器GJC作为编译教学的基础平台,通过分析一个真正实用的现代编译系统,把编译理论应用到实际的工程实践中。全书不仅包括对编译器源代码的分析、对实例的讲解,还在最后给出3个具体的课程设计实验,介绍如何用书本上的编译理论实现一个真正的编译器。
●使用优秀的开源编译器作为教学平台,系统规模不大,且源程序有着很好的注释。
●通过详尽的源代码剖析和实例讲解,循序渐进地启发学生完成课程设计。
●结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实践需要。
●是一本注重应用的实验教程,因此可以和讲授编译理论的教材配合使用。
编译原理是大学计算机专业的必修课程。本书使用优秀的开源Java编译器GJC作为编译教学的基础平台,通过分析一个真正实用的现代编译系统,把编译理论应用到实际的工程实践中。全书不仅包括对编译器源代码的分析、对实例的讲解,还在最后给出3个具体的课程设计实验,介绍如何用书本上的编译理论实现一个真正的编译器。
本书适合作为大专院校编译原理课程设计的指导用书,相关的从业人员和研究人员也可以从中获得有益的参考
第1章 引言
1. 1 本书的目的
1. 2 平台的选择
1. 3 GJC的总体结构
1. 4 实验设计
第2章 词法分析
2. 1 单词符号的定义
2. 2 词法分析程序的基本数据结构
2. 3 词法分析程序的初始化
2. 4 扫描下一个字符
2. 5 扫描下一个符号
2. 6 滤除源程序中的注释
2. 7 读取一个标识符
2. 8 读取一个数值常量
2. 9 实例分析
2. 10 小结
第3章 语法分析
3. 1 自顶向下分析
3. 1. 1 自顶向下分析的一般过程
3. 1. 2 自顶向下分析方法的特点
3. 1. 3 自顶向下分析存在的问题及解决方法
3. 1. 4 自顶向下分析的主要方法
3. 2 自底向上分析
3. 2. 1 基本算法思想
3. 2. 2 自底向上分析的主要方法
3. 3 GJC中的语法分析过程
3. 3. 1 主要数据结构及方法
3. 3. 2 对各种语法成分的分析
3. 4 实例分析
3. 5 小结
第4章 符号表管理
4. 1 GJC中与符号表管理相关的类
4. 2 Java语言中符号的种类
4. 3 符号名字的管理
4. 4 符号的表示
4. 5 类型的表示
4. 6 可见性管理
4. 7 实例分析
4. 8 小结
第5章 抽象语法树
5. 1 源程序的中间形式
5. 1. 1 逆波兰表示
5. 1. 2 N元表示
5. 1. 3 树形表示
5. 2 GJC中的抽象语法树
5. 2. 1 Tree.java
5. 2. 2 TreeScanner.java和TreeTranslator.java
5. 2. 3 TreeMaker.java
5. 2. 4 Treelnfo.java
5. 3 小结
第6章 语义分析
6. 1 上下文环境
6. 2 符号表相关的操作
6. 3 语义检查
6. 4 语义分析的主体
6. 5 实例分析
6. 6 小结
第7章 错误处理
7. 1 概述
7. 2 错误的种类
7. 3 错误的诊察与报告
7. 4 错误处理技术
7. 4. 1 错误改正
7. 4. 2 错误局部化处理
7. 5 限制重复报告错误信息
7. 6 小结
第8章 Java虚拟机指令集简介
8. 1 Java虚拟机的指令集编码
8. 2 Java虚拟机支持的基本数据类型
8. 3 面向堆栈指令的语义
8. 4 将Java翻译成字节码指令
8. 5 小结
第9章 代码生成
9. 1 指令的编码
9. 2 生成代码的管理
9. 3 指令的发射
9. 4 存储管理
9. 5 为Java语言的各种结构生成代码
9. 5. 1 为Java方法生成代码
9. 5. 2 为方法的调用生成代码
9. 5. 3 为循环结构生成代码
9. 5. 4 为条件语句生成代码
9. 5. 5 为异常捕获部分生成代码
9. 6 实例分析
9. 7 小结
附录一 Pascal实现的PL/O编译器源代码
附录二 在J2SE中单独编译GJC编译器
附录三 用jdb调试GJC编译器
实验一 为Java语言增加默认参数的特性
实验二 Java虚拟机上的PL/O编译器
实验三 使用工具自动生成词法分析器和语法分析器
参考文献
第1章 引言
1. 1 本书的目的
1. 2 平台的选择
1. 3 GJC的总体结构
1. 4 实验设计
第2章 词法分析
2. 1 单词符号的定义
2. 2 词法分析程序的基本数据结构
2. 3 词法分析程序的初始化
2. 4 扫描下一个字符
2. 5 扫描下一个符号
2. 6 滤除源程序中的注释
2. 7 读取一个标识符
2. 8 读取一个数值常量
2. 9 实例分析
2. 10 小结
第3章 语法分析
3. 1 自顶向下分析
3. 1. 1 自顶向下分析的一般过程
3. 1. 2 自顶向下分析方法的特点
3. 1. 3 自顶向下分析存在的问题及解决方法
3. 1. 4 自顶向下分析的主要方法
3. 2 自底向上分析
3. 2. 1 基本算法思想
3. 2. 2 自底向上分析的主要方法
3. 3 GJC中的语法分析过程
3. 3. 1 主要数据结构及方法
3. 3. 2 对各种语法成分的分析
3. 4 实例分析
3. 5 小结
第4章 符号表管理
4. 1 GJC中与符号表管理相关的类
4. 2 Java语言中符号的种类
4. 3 符号名字的管理
4. 4 符号的表示
4. 5 类型的表示
4. 6 可见性管理
4. 7 实例分析
4. 8 小结
第5章 抽象语法树
5. 1 源程序的中间形式
5. 1. 1 逆波兰表示
5. 1. 2 N元表示
5. 1. 3 树形表示
5. 2 GJC中的抽象语法树
5. 2. 1 Tree.java
5. 2. 2 TreeScanner.java和TreeTranslator.java
5. 2. 3 TreeMaker.java
5. 2. 4 Treelnfo.java
5. 3 小结
第6章 语义分析
6. 1 上下文环境
6. 2 符号表相关的操作
6. 3 语义检查
6. 4 语义分析的主体
6. 5 实例分析
6. 6 小结
第7章 错误处理
7. 1 概述
7. 2 错误的种类
7. 3 错误的诊察与报告
7. 4 错误处理技术
7. 4. 1 错误改正
7. 4. 2 错误局部化处理
7. 5 限制重复报告错误信息
7. 6 小结
第8章 Java虚拟机指令集简介
8. 1 Java虚拟机的指令集编码
8. 2 Java虚拟机支持的基本数据类型
8. 3 面向堆栈指令的语义
8. 4 将Java翻译成字节码指令
8. 5 小结
第9章 代码生成
9. 1 指令的编码
9. 2 生成代码的管理
9. 3 指令的发射
9. 4 存储管理
9. 5 为Java语言的各种结构生成代码
9. 5. 1 为Java方法生成代码
9. 5. 2 为方法的调用生成代码
9. 5. 3 为循环结构生成代码
9. 5. 4 为条件语句生成代码
9. 5. 5 为异常捕获部分生成代码
9. 6 实例分析
9. 7 小结
附录一 Pascal实现的PL/O编译器源代码
附录二 在J2SE中单独编译GJC编译器
附录三 用jdb调试GJC编译器
实验一 为Java语言增加默认参数的特性
实验二 Java虚拟机上的PL/O编译器
实验三 使用工具自动生成词法分析器和语法分析器
参考文献
编译理论和技术作为计算机科学研究和工程应用的基础, 受到了广泛的重视. 编译原理是一门实践性很强的课程, 但是在教学过程中容易偏重于理论的介绍, 而忽视了实验环节, 因此学生很难真正掌握这门学科的精髓. 本书正是为弥补这一缺陷而编写的编译实验教程, 因此可以和讲授编译理论的教材配合使用.
本书希望通过分析一个真正实用的. 开放源代码的现代编译系统, 使读者了解编译器的构造. 目前影响比较广泛的Java编译器有:GNU GCC中的GCJ编译器. IBM的Jikes编译器. Sun Hotspot J2SE使用的javac编译器(内部称作gjc-generic java compiler, GJC)以及实验Java新特性的pizza编译器等. 最终本书选择了GJC作为研究的平台.
为了使读者能更清晰地理解编译器各个部分的代码, 本书采用了静态分析和动态跟踪相结合的方法. 针对编译器的每个部分, 首先对源代码进行静态的分析, 比较复杂的部分给出了相应的类图, 然后, 在每个部分的最后对一个程序进行动态跟踪, 各个动态跟踪部分合起来就是GJC的整个编译过程. 通过对编译器的分析, 本书不仅介绍了一个真正的编译器是如何用编译理论来指导实现, 而且还对编译器所采用的一些设计模式(例如工厂模式. 访问者模式等)进行了详细分析. 本书的主要内容如下:
第1章, 介绍了开放源代码编译器的选取. GJC整体的代码分布. GJC总体结构以及编译执行的流程.
第2章, 简单介绍了词法分析的原理, 详细分析了GJC采用Java语言实现的一个针对Java语言的词法分析程序.
第3章, 简单介绍了语法分析的原理, 详细分析GJC语法分析中的基本数据结构和各种语法成分, 介绍了GJC采用的递归下降分析法和算符优先方法.
第4章, 介绍GJC中与符号管理相关的数据结构和设计方法.
第5章, 简单介绍了编译系统常用的中间语言, 详细分析GJC中抽象语法树的定义以及相关数据结构.
第6章, 详细介绍了GJC中的上下文环境. 对符号表的操作. 类型检查等功能, 分析了GJC语义分析的主要功能.
第7章, 讨论了编译器中错误的分类, 详细介绍GJC中的错误处理功能.
第8章, 介绍了Java虚拟机的指令集编码. 各条指令的意义以及如何使用这些指令. 这些知识是代码生成部分的基础.
第9章, 介绍了代码生成涉及到的指令编码. 生成代码的管理. 指令发射. 存储管理等. 详细分析了GJC为Java语言的各种控制结构生成代码的方法.
此外, 本书以GJC为平台设计了三个实验. 为了使读者能够顺利地完成实验, 本书不仅给出了一些参考文献和代码, 而且还为每个实验给出了实验指南和参考难度. 读者可以根据自己的兴趣对实验进行扩充, 也可以根据实际的教学情况对实验进行选择.
限于时间和水平, 书中对GJC源代码的理解不一定完全准确, 给出的实验指南也未必是最好的方案, 欢迎广大读者多提宝贵意见.
最后, 感谢机械工业出版社华章分社的编辑们对本书的大力支持. 感谢所有亲人和朋友们的理解和支持!
作 者
2004. 12