1 / 8

编译原理实验指导

编译原理实验指导. 张昱 中国科学技术大学 计算机科学技术系 2008.4.21 合肥. 资源. 编译原理实验教程及实验软件包 http://staff.ustc.edu.cn/~yuzhang/compiler Java 语言 规范 (第 3 版)-- JLS3 http://java.sun.com/docs/books/jls/ Java 1.5 的文法规范文件 java15.cup java15.jj Eclipse AST Help JDT Plug-in Developer Guide

kobe
Download Presentation

编译原理实验指导

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 编译原理实验指导 张昱 中国科学技术大学 计算机科学技术系 2008.4.21 合肥

  2. 资源 • 编译原理实验教程及实验软件包 • http://staff.ustc.edu.cn/~yuzhang/compiler • Java语言规范(第3版)--JLS3 • http://java.sun.com/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 编译原理实验指导

  3. 实验入门指南—初步了解 • 开发基础 • Eclipse、JDK、命令控制台、ant • Eclipse AST(见JDT Plug-in Developer Guide) • AST节点:ASTNode及派生类 • 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字节码 • 写一个ant编译文件(参见实验教程中的图1-14),用ant来编译和运行Java程序 • 用实验平台运行,熟悉配置文件 编译原理实验指导

  5. 实验入门指南—深入学习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(子树)所引用 编译原理实验指导

  6. 实验入门指南—深入学习3 • 前端:词法分析+语法分析+语义分析 • 做法 • 使用JFlex+CUP来生成分析器的源码: 参见ch4和ch5 • 使用JavaCC来生成分析器的源码: 参见ch5 • 手工编写分析器 • 先支持SimpleMiniJOOL,再扩展到SkipOO… • 语言中的注意点: • 变量的作用域,同名问题的处理,等等 • 了解AST访问者类、管理符号的一些容器类(如HashMap)、List等等 • 各类符号的描述信息定义符号类、符号表类 编译原理实验指导

  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) 编译原理实验指导

More Related