- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
工厂类
编译原理实验指导 编译原理实验指导 张昱 中国科学技术大学 计算机科学技术系 2008.4.21 合肥 资源 编译原理实验教程及实验软件包 /~yuzhang/compiler Java语言规范(第3版)--JLS3 /docs/books/jls/ Java 1.5的文法规范文件 java15.cup java15.jj Eclipse AST Help JDT Plug-in Developer Guide Reference?API Reference ?org.eclipse.jdt.core.dom 实验入门指南—初步了解 开发基础 Eclipse、JDK、命令控制台、ant Eclipse AST(见JDT Plug-in Developer Guide) AST节点:ASTNode及派生类 AST的构造:AST类(工厂类) AST的访问:ASTVisitor类 AST的图形化显示包ASTView(见实验教程3.5.6节) SimpleMiniJOOL语言的特点 SkipOOMiniJOOL语言的特点 实验入门指南—深入学习1 开发基础 写一个简单的Java程序 mydir/src/test.java或者直接利用lab1中的代码lab1/src/… 用Eclipse编译和调试 尝试按实验教程中节介绍的各种方法来建立工程 学习在Eclipse下调试和运行 在命令控制台下编译和调试 用javac编译Java源程序,得到Java字节码 用java运行Java字节码 写一个ant编译文件(参见实验教程中的图1-14),用ant来编译和运行Java程序 用实验平台运行,熟悉配置文件 实验入门指南—深入学习2 SkipOOMiniJOOL语言及其AST 编写SkipOOMiniJOOL程序 目的:了解语言特点,所写程序可以作为测试程序 查看SkipOOMiniJOOL程序的AST 方法:参见lab5中的Generator1里的main方法 目的:通过AST图形化输出了解一个SkipOOMiniJOOL程序与其AST的对应关系 手工构造SimpleMiniJOOL程序的AST 方法:参见实验教程第3章, TestCase.java等 从小语言入手来学习AST的构造 构造AST的一些注意事项 关于List类型的实例:可以用java.util.LinkedList(或ArrayList) 一个AST节点不能被多棵AST(子树)所引用 实验入门指南—深入学习3 前端:词法分析+语法分析+语义分析 做法 使用JFlex+CUP来生成分析器的源码: 参见ch4和ch5 使用JavaCC来生成分析器的源码: 参见ch5 手工编写分析器 先支持SimpleMiniJOOL,再扩展到SkipOO… 语言中的注意点: 变量的作用域,同名问题的处理,等等 了解AST访问者类、管理符号的一些容器类(如HashMap)、List等等 各类符号的描述信息?定义符号类、符号表类 实验入门指南—深入学习4 前端:词法分析+语法分析+语义分析 利用分析器的生成工具构造分析器时, 先构造简单的语法分析器:不构造AST、不进行错误处理重点:熟悉分析器的生成工具及其使用方法 再构造能输出AST的语法分析器,它只能分析正确的源程序重点:熟悉在产生式的语义动作中添加构造AST的代码 再构造能处理语法错误并产生AST的语法分析器重点:识别哪些错误?如何处理错误?如何恢复错误?错误信息? 以AST Visitor的实现类为基础实现语义检查重点:符号表的设计,语义检查 修改文法规范文件,增加符号表的维护与语义检查动作重点:注意了解语法和语义分析之间的相互影响 实验入门指南—深入学习5 后端:由AST生成x86或mips汇编码 了解x86汇编码及其相关工具(gcc) 了解mips汇编码及其相关工具(spim) 总结语言的语法结构与汇编码之间的映射关系 写出对应的C程序,用gcc编译得到x86汇编码或spim汇编码 汇编码的内部表示(见实验教程的第7章) 不考虑寄存器分配(假设伪寄存器无限多)的代码生成(lab5或lab6中的Generator1.java) 考虑寄存器分配(假设伪寄存器无限多)的代码生成(lab5或lab6中的Generator2.java) * Yu Zhang, USTC Yu Zhang, USTC Yu Zhang, USTC
文档评论(0)