编译原理课程设计
作者 : 王雷 刘志成 周晶 编著
出版日期 : 2005-03-21
ISBN : 7-111-15877-6
定价 : 23.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 221
开本 : 16开
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

编译原理是大学计算机专业的必修课程。本书使用优秀的开源Java编译器GJC作为编译教学的基础平台,通过分析一个真正实用的现代编译系统,把编译理论应用到实际的工程实践中。全书不仅包括对编译器源代码的分析、对实例的讲解,还在最后给出3个具体的课程设计实验,介绍如何用书本上的编译理论实现一个真正的编译器。
  本书适合作为大专院校编译原理课程设计的指导用书,相关的从业人员和研究人员也可以从中获得有益的参考。

图书特色

图书前言

编译理论和技术作为计算机科学研究和工程应用的基础,受到了广泛的重视。编译原理是一门实践性很强的课程,但是在教学过程中容易偏重于理论的介绍,而忽视了实验环节,因此学生很难真正掌握这门学科的精髓。本书正是为弥补这一缺陷而编写的编译实验教程,因此可以和讲授编译理论的教材配合使用。
  本书希望通过分析一个真正实用的、开放源代码的现代编译系统,使读者了解编译器的构造。目前影响比较广泛的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

图书序言

近年来,我国在计算机应用、计算机软件和电子类相关专业的人才培养方面,取得了长足的进展,每年的毕业生都有数十万人。但是这些毕业生走进企业、公司、政府机构或研究单位之后,往往深刻地感觉到缺乏实际开发设计项目的经验,不善于综合运用所学理论,对知识的把握缺乏融会贯通的能力。
  综合考察目前高等院校教学大纲、课程设置以及内容安排等方面的情况,多数学校还是比较重视训练学生的实际设计能力。但是,从安排设计实践的内容上看,基本上是围绕相关课程教学内容而展开的,不能够构成对实际问题的解决方案;从配套程序的规模上看,一般只是几十行到几百行的源代码,或者是一个单独电路的设计,远远小于一个小型项目的规模;从设计的结构上看,由于设计实践是围绕着课程教学内容而进行的,问题已经高度抽象,学生很难得到有关综合运用所学知识的整体训练机会。而且,这些内容相对简单、问题域已经高度抽象、规模较小的设计实践一人基本上就能完成,学生几乎无法通过这些设计实践,去真正获得有关项目管理和团队协作等方面的基本训练和工作经验。
  由此可以看出,大多数学校对学生实际设计能力的训练与国外知名大学和国内精品课程相比较,还是存在一些差距的。为此,机械工业出版社华章分社和一批高等院校的教师,针对当前高等院校计算机硬件、软件和电子类相关课程教学中存在的问题,参考国内外知名大学相关课程成功的教学经验,设计编写了这套“高等院校计算机课程设计指导丛书”,其目的就是通过课程设计的一系列训练,把知识获取和项目实践两个方面有机地结合起来。
  在这套“高等院校计算机课程设计指导丛书”中的每一门课程设计里,都安排了由多个子项目组成的一个课程设计项目。学生们可以在教师的指导下,逐步设计实现这些子项目,并最终完成一个功能相对完整,可以运行的系统,其代码可以是数千行,甚至上万行。通过这种设计课程,学生一方面可以结合课程的教学内容循序渐进地进行设计方面的实践训练,另一方面,在参与一系列子项目的实践过程中,还能提高如何综合运用所学知识解决实际问题的能力,以及获得有关项目管理和团队合作等众多方面的具体经验,增强对相关课程具体内容的理解和掌握能力,培养对整体课程知识综合运用和融会贯通能力。
  参加丛书编写的各高等院校的教师都有着丰富的教学、科研,以及与企业合作开发项目等多方面的经验。每个课程设计中的子项目和整体项目,都来自教师们具体的科研和设计开发实践,所选设计项目与教学内容配合紧密,项目的难度与规模适宜。
  最后,感谢机械工业出版社华章分社编辑们的大力支持,使出版有关这套丛书的计划,从单纯的构想演化成带有油墨芳香的真实。

丛书写作组

图书目录

第1章  引言 1
1.1  本书的目的 1
1.2  平台的选择 1
1.3  GJC的总体结构 2
1.4  实验设计 8
第2章  词法分析 9
2.1  单词符号的定义 11
2.2  词法分析程序的基本数据结构 12
2.3  词法分析程序的初始化 15
2.4  扫描下一个字符 16
2.5  扫描下一个符号 17
2.6  滤除源程序中的注释 22
2.7  读取一个标识符 23
2.8  读取一个数值常量 24
2.9  实例分析 25
2.10  小结 27
第3章  语法分析 29
3.1  自顶向下分析 29
3.1.1  自顶向下分析的一般过程 29
3.1.2  自顶向下分析方法的特点 29
3.1.3  自顶向下分析存在的问题及解决方法 30
3.1.4  自顶向下分析的主要方法 32
3.2  自底向上分析 33
3.2.1  基本算法思想 33
3.2.2  自底向上分析的主要方法 33
3.3  GJC中的语法分析过程 34
3.3.1  主要数据结构及方法 35
3.3.2  对各种语法成分的分析 39
3.4  实例分析 51
3.5  小结 61
第4章  符号表管理 63
4.1  GJC中与符号表管理相关的类 65
4.2  Java语言中符号的种类 66
4.3  符号名字的管理 67
4.4  符号的表示 72
4.5  类型的表示 75
4.6  可见性管理 78
4.7  实例分析 84
4.8  小结 86
第5章  抽象语法树 87
5.1  源程序的中间形式 87
5.1.1  逆波兰表示 87
5.1.2  N元表示 88
5.1.3  树形表示 89
5.2  GJC中的抽象语法树 90
5.2.1  Tree.java 90
5.2.2  TreeScanner. java和TreeTranslator.java 100
5.2.3  TreeMaker.java 100
5.2.4  TreeInfo.java 103
5.3  小结 108
第6章  语义分析 109
6.1  上下文环境 109
6.2  符号表相关的操作 112
6.3  语义检查 116
6.4  语义分析的主体 124
6.5  实例分析 131
6.6  小结 133
第7章  错误处理 135
7.1  概述 135
7.2  错误的种类 135
7.3  错误的诊察与报告 136
7.4  错误处理技术 139
7.4.1  错误改正 139
7.4.2  错误局部化处理 140
7.5  限制重复报告错误信息 142
7.6  小结 143
第8章  Java虚拟机指令集简介 145
8.1  Java虚拟机的指令集编码 145
8.2  Java虚拟机支持的基本数据类型 148
8.3  面向堆栈指令的语义 149
8.4  将Java翻译成字节码指令 154
8.5  小结 160
第9章  代码生成 161
9.1  指令的编码 162
9.2  生成代码的管理 165
9.3  指令的发射 165
9.4  存储管理 169
9.5  为Java语言的各种结构生成代码 172
9.5.1  为Java方法生成代码 172
9.5.2  为方法的调用生成代码 174
9.5.3  为循环结构生成代码 175
9.5.4  为条件语句生成代码 177
9.5.5  为异常捕获部分生成代码 178
9.6  实例分析 182
9.7  小结 186
附录一  Pascal实现的PL/0编译器源代码 187
附录二  在J2SE中单独编译GJC编译器 205
附录三  用jdb调试GJC编译器 207
实验一  为Java语言增加默认参数的特性 209
实验二  Java虚拟机上的PL/0编译器 213
实验三  使用工具自动生成词法分析器和语法分析器 219
参考文献 222

教学资源推荐
作者: 马玉春 著
作者: [美] 卢博米尔·佩尔科维奇(Ljubomir Perkovic) 著
作者: 史涯晴 贺汛 编著
作者: 辛运帏 饶一梅
参考读物推荐
作者: (美)Erik M. Buck 著
作者: 袁林 编著
作者: (美)Steven L.Halter, Steven J.Munroe