1、编译原理实验指导,张昱中国科学技术大学 计算机科学技术系2008.4.21 合肥,编译原理实验指导,2,资源,编译原理实验教程及实验软件包http:/ 1.5的文法规范文件java15.cupjava15.jjEclipse AST HelpJDT Plug-in Developer GuideReferenceAPI Reference org.eclipse.jdt.core.dom,编译原理实验指导,3,实验入门指南初步了解,开发基础Eclipse、JDK、命令控制台、antEclipse AST(见JDT Plug-in Developer Guide)AST节点:ASTNode及派生
2、类AST的构造:AST类(工厂类)AST的访问:ASTVisitor类 AST的图形化显示包ASTView(见实验教程3.5.6节)SimpleMiniJOOL语言的特点SkipOOMiniJOOL语言的特点,编译原理实验指导,4,实验入门指南深入学习1,开发基础写一个简单的Java程序 mydir/src/test.java或者直接利用lab1中的代码lab1/src/用Eclipse编译和调试尝试按实验教程中1.4.3.3节介绍的各种方法来建立工程学习在Eclipse下调试和运行在命令控制台下编译和调试用javac编译Java源程序,得到Java字节码用java运行Java字节码写一个an
3、t编译文件(参见实验教程中的图1-14),用ant来编译和运行Java程序用实验平台运行,熟悉配置文件,编译原理实验指导,5,实验入门指南深入学习2,SkipOOMiniJOOL语言及其AST编写SkipOOMiniJOOL程序目的:了解语言特点,所写程序可以作为测试程序查看SkipOOMiniJOOL程序的AST方法:参见lab5中的Generator1里的main方法目的:通过AST图形化输出了解一个SkipOOMiniJOOL程序与其AST的对应关系手工构造SimpleMiniJOOL程序的AST方法:参见实验教程第3章, TestCase.java等从小语言入手来学习AST的构造构造A
4、ST的一些注意事项关于List类型的实例:可以用java.util.LinkedList(或ArrayList)一个AST节点不能被多棵AST(子树)所引用,编译原理实验指导,6,实验入门指南深入学习3,前端:词法分析语法分析语义分析做法使用JFlex+CUP来生成分析器的源码: 参见ch4和ch5使用JavaCC来生成分析器的源码: 参见ch5手工编写分析器先支持SimpleMiniJOOL,再扩展到SkipOO语言中的注意点:变量的作用域,同名问题的处理,等等了解AST访问者类、管理符号的一些容器类(如HashMap)、List等等各类符号的描述信息定义符号类、符号表类,编译原理实验指导,
5、7,实验入门指南深入学习4,前端:词法分析语法分析语义分析利用分析器的生成工具构造分析器时,先构造简单的语法分析器:不构造AST、不进行错误处理重点:熟悉分析器的生成工具及其使用方法再构造能输出AST的语法分析器,它只能分析正确的源程序重点:熟悉在产生式的语义动作中添加构造AST的代码再构造能处理语法错误并产生AST的语法分析器重点:识别哪些错误?如何处理错误?如何恢复错误?错误信息?以AST Visitor的实现类为基础实现语义检查重点:符号表的设计,语义检查修改文法规范文件,增加符号表的维护与语义检查动作重点:注意了解语法和语义分析之间的相互影响,编译原理实验指导,8,实验入门指南深入学习5,后端:由AST生成x86或mips汇编码了解x86汇编码及其相关工具(gcc)了解mips汇编码及其相关工具(spim)总结语言的语法结构与汇编码之间的映射关系写出对应的C程序,用gcc编译得到x86汇编码或spim汇编码汇编码的内部表示(见实验教程的第7章)不考虑寄存器分配(假设伪寄存器无限多)的代码生成(lab5或lab6中的Generator1.java)考虑寄存器分配(假设伪寄存器无限多)的代码生成(lab5或lab6中的Generator2.java),