《编译原理实验指导课件.ppt》由会员分享,可在线阅读,更多相关《编译原理实验指导课件.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Yu Zhang,USTCYu Zhang,USTC编译原理实验指导课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导2资源资源v编译原理实验教程及实验软件包编译原理实验教程及实验软件包http:/ 1.5的文法规范文件:的文法规范文件:java15.cup,java15.jjEclipse AST-JDT Plug-in Developer GuideReferenceAPI
2、Reference org.eclipse.jdt.core.domJDK+Ant Eclipse IDEJFlex,Java CUP(LALR)/JavaCC(LL(k))GCC/SPIMYu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导3编译器实现框架编译器实现框架Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导4实验入门指南实验入门指南初步了解初步了解v开发基础开发基础Eclipse IDE+JDK+ant-命令控制台命令控制台+JDK+ant-汇编码的运行:汇编码的运行:GCC、SPIM自主研发的实验平台及支持库自主
3、研发的实验平台及支持库v实验语言实验语言SimpleMiniJOOL语言的特点(见实验教程语言的特点(见实验教程2.1节)节)SkipOOMiniJOOL语言的特点语言的特点-词法:实验教程词法:实验教程3.2节;语法:节;语法:4.1节;语义:节;语义:5.1节节v中间表示中间表示Eclipse AST:(见实验教程:(见实验教程2.4,2.5节)节)LIR:(见实验教程:(见实验教程6.2节)节)Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导5实验入门指南实验入门指南初步了解初步了解v目标机目标机X86 CISC生成的汇编码能由生成的汇编码能由GCC编
4、译生成可执行文件编译生成可执行文件MIPS RISC生成的汇编码能由生成的汇编码能由SPIM模拟器解释执行模拟器解释执行汇编码简介:实验教程汇编码简介:实验教程7.2和和7.3节节v汇编码的内部表示汇编码的内部表示AIR(实验教程实验教程7.4节节)Yu Zhang,USTCYu Zhang,USTC实验软件包:课程设计开发包目录实验软件包:课程设计开发包目录编译原理实验指导编译原理实验指导6v课程设计开发包目录课程设计开发包目录Yu Zhang,USTCYu Zhang,USTC实验软件包:实验支持库的构成实验软件包:实验支持库的构成编译原理实验指导编译原理实验指导7Yu Zhang,UST
5、CYu Zhang,USTC实验运行平台实验运行平台编译原理实验指导编译原理实验指导8参见实验教程参见实验教程2.3节节v目的目的提供各类编译器组件及组件间信息访问的接口,简称提供各类编译器组件及组件间信息访问的接口,简称实验平台接口。实验平台接口。提供一个实验运行平台,它能够将若干个编译器组件提供一个实验运行平台,它能够将若干个编译器组件连接装配成一个完整的编译器或解释器并控制它们的连接装配成一个完整的编译器或解释器并控制它们的运行。运行。用户可以通过平台配置文件灵活地定制待装配的各个用户可以通过平台配置文件灵活地定制待装配的各个编译器组件以及待编译或解释执行的源程序文件等。编译器组件以及待
6、编译或解释执行的源程序文件等。Yu Zhang,USTCYu Zhang,USTC实验平台接口实验平台接口编译原理实验指导编译原理实验指导9Yu Zhang,USTCYu Zhang,USTC实验任务实验任务(1)v每一学生可选的待开发组件每一学生可选的待开发组件组件组件1:带语义检查的分析器:带语义检查的分析器(生成生成AST)组件组件2:带语义检查的分析器:带语义检查的分析器(生成生成LIR)组件组件3:基于:基于AST的的x86汇编代码生成器汇编代码生成器组件组件4:基于:基于AST的的MIPS汇编代码生成器汇编代码生成器组件组件5:基于:基于LIR的的x86汇编代码生成器汇编代码生成器
7、组件组件6:基于:基于LIR的的MIPS汇编代码生成器汇编代码生成器v合作伙伴的组合方式合作伙伴的组合方式组件组件1+组件组件3+GCC 组件组件1+组件组件4+SPIM组件组件2+组件组件5+GCC 组件组件2+组件组件6+SPIM编译原理实验指导编译原理实验指导10Yu Zhang,USTCYu Zhang,USTC实验任务实验任务(2)v前端任务:组件前端任务:组件1或组件或组件2词法分析、语法分析、静态语义分析、中间表示的生成词法分析、语法分析、静态语义分析、中间表示的生成其中涉及符号表的设计与实现其中涉及符号表的设计与实现v后端任务:组件后端任务:组件3组件组件6之一之一需要考虑动态
8、语义检查(如数组下标越界)、短路计算、需要考虑动态语义检查(如数组下标越界)、短路计算、寄存器分配等,但是对代码优化不作要求。寄存器分配等,但是对代码优化不作要求。独立开发后端时,需要设计和实现符号表独立开发后端时,需要设计和实现符号表生成的生成的x86汇编代码应能直接用汇编代码应能直接用gcc汇编连接得到可执行汇编连接得到可执行文件,生成的文件,生成的MIPS汇编代码则应能在汇编代码则应能在SPIM上执行上执行若需要使用其他目标平台,必须在若需要使用其他目标平台,必须在6月月13日前与张昱老日前与张昱老师联系并确认是否可以使用。师联系并确认是否可以使用。编译原理实验指导编译原理实验指导11Y
9、u Zhang,USTCYu Zhang,USTC实验任务实验任务(3)v最终的编译器最终的编译器自行选择前后端自行选择前后端-定义好接口,不开放源代码,只提供定义好接口,不开放源代码,只提供jar文件和接口说明,运文件和接口说明,运行时应能输出作者名行时应能输出作者名-你的前端(后端)被采用得越多,则得分越高你的前端(后端)被采用得越多,则得分越高每个同学只负责自己提交的编译器的质量。每个同学只负责自己提交的编译器的质量。组件发布人不必考虑其发布的版本被使用的所有编译组件发布人不必考虑其发布的版本被使用的所有编译器的质量。器的质量。编译原理实验指导编译原理实验指导12Yu Zhang,UST
10、CYu Zhang,USTC提交和发布时间节点提交和发布时间节点v提交节点提交节点5月月15 提交系统设计书,包括进度表和提交系统设计书,包括进度表和拟开发的组件拟开发的组件5月月22前前 经老师认可学生可调整拟开发的组件经老师认可学生可调整拟开发的组件5月月31 提交已完成源代码和前后端接口描述提交已完成源代码和前后端接口描述6月月10 再次提交已完成源代码和进度报告再次提交已完成源代码和进度报告6月月20 提交源文件、类库文件、测试程序、设计文档提交源文件、类库文件、测试程序、设计文档等等6月月22 提交课程实践的收获、体会和建议(发邮件给提交课程实践的收获、体会和建议(发邮件给张昱老师)
11、张昱老师)v发布节点发布节点6月月13 发布测试程序发布测试程序6月月16 发布测试环境,对最终提交文档的规定发布测试环境,对最终提交文档的规定编译原理实验指导编译原理实验指导13每次提交时需要说明当前的执行进每次提交时需要说明当前的执行进度与计划中的出入与原因,以及对度与计划中的出入与原因,以及对计划的调整(如果有的话)!计划的调整(如果有的话)!Yu Zhang,USTCYu Zhang,USTC课程设计成绩评定课程设计成绩评定(1)v评分方式和过程评分方式和过程10 12个学生一组,大家参与,公开评分个学生一组,大家参与,公开评分评委:评委:1个教师、助教、同组所有同学个教师、助教、同组
12、所有同学教师主导测试过程、学生自己动手按老师要求操作,教师主导测试过程、学生自己动手按老师要求操作,并用投影机当众显示测试过程并用投影机当众显示测试过程老师提问,同组同学也可以提问,当众回答老师提问,同组同学也可以提问,当众回答问题主要围绕完成的设计和编程,以及测试中暴露出问题主要围绕完成的设计和编程,以及测试中暴露出的设计或编程错误的设计或编程错误编译原理实验指导编译原理实验指导14Yu Zhang,USTCYu Zhang,USTC课程设计成绩评定课程设计成绩评定(2)v评分依据评分依据工程的规范性工程的规范性编译器的正确性编译器的正确性错误定位与恢复能力错误定位与恢复能力所生成的目标代码
13、的质量所生成的目标代码的质量 回答问题时所表现出的对本课程设计所涉及的编译知回答问题时所表现出的对本课程设计所涉及的编译知识的掌握程度识的掌握程度对自己设计和编码的编译器和解释器的熟悉程度对自己设计和编码的编译器和解释器的熟悉程度操作的熟练程度操作的熟练程度所提交文档的完整性、条理性及其中反映的分析和设所提交文档的完整性、条理性及其中反映的分析和设计的思想计的思想编译原理实验指导编译原理实验指导15Yu Zhang,USTCYu Zhang,USTC课程设计成绩评定课程设计成绩评定(3)v成绩确定成绩确定每个评委给该组同学排名次,同学评委的排名要包括自每个评委给该组同学排名次,同学评委的排名要
14、包括自己己由助教根据所有有效排名表,给出最终的排名由助教根据所有有效排名表,给出最终的排名由老师根据本组的情况,确定本组的最高分和最低分,由老师根据本组的情况,确定本组的最高分和最低分,依据排名,按等间隔确定每个同学的分数依据排名,按等间隔确定每个同学的分数被老师、助教和过半数同学认为所提交文档不是自己课被老师、助教和过半数同学认为所提交文档不是自己课程设计成果时,则程设计成果时,则0分分未按时交也是未按时交也是0分分编译原理实验指导编译原理实验指导16Yu Zhang,USTCYu Zhang,USTC课程设计成绩评定课程设计成绩评定(4)v奖惩奖惩若所开发的前端若所开发的前端(或后端或后端
15、)被多个同学被多个同学(开发的合作伙伴除开发的合作伙伴除外外)采用,则在分组评分的基础上加分,加分原则是:采用,则在分组评分的基础上加分,加分原则是:1、每增加两个采用者加、每增加两个采用者加1分;分;2、课程设计和平时作业合计不超过、课程设计和平时作业合计不超过50分。分。独自完成整个编译器,分组评定成绩后降独自完成整个编译器,分组评定成绩后降10分分前后端人数比例严重失调,抬高少数人一端分数前后端人数比例严重失调,抬高少数人一端分数v备注备注成绩评定可能有考虑不周的地方,解释权在老师成绩评定可能有考虑不周的地方,解释权在老师系统地发现所提供的参考源代码中的错误,给予表彰和系统地发现所提供的
16、参考源代码中的错误,给予表彰和奖励奖励编译原理实验指导编译原理实验指导17Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导18实验入门指南实验入门指南深入学习深入学习1v开发基础开发基础写一个简单的写一个简单的Java程序程序 mydir/src/test.java或者直接利用或者直接利用lab1中的代码中的代码lab1/src/用用Eclipse编译和调试编译和调试-尝试按实验教程中尝试按实验教程中1.3.3节介绍的各种方法来建立工程节介绍的各种方法来建立工程-学习在学习在Eclipse下调试和运行下调试和运行在命令控制台下编译和调试在命令控制台下编译和调
17、试-用用javac编译编译Java源程序,得到源程序,得到Java字节码字节码-用用java运行运行Java字节码字节码-写一个写一个ant编译文件(参见实验教程中编译文件(参见实验教程中1.3.4节),用节),用ant来编来编译和运行译和运行Java程序程序-用实验平台运行,熟悉配置文件用实验平台运行,熟悉配置文件Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导19实验入门指南实验入门指南深入学习深入学习2vSkipOOMiniJOOL语言及其语言及其AST编写编写SkipOOMiniJOOL程序程序-目的:了解语言特点,所写程序可以作为测试程序目的:了解
18、语言特点,所写程序可以作为测试程序查看查看SkipOOMiniJOOL程序的程序的AST-方法:参见方法:参见lab3-目的:通过目的:通过AST图形化输出了解一个图形化输出了解一个SkipOOMiniJOOL程序与其程序与其AST的对应关系的对应关系手工构造手工构造SimpleMiniJOOL程序的程序的AST-方法:参见实验教程第方法:参见实验教程第2章,章,TestCase.java等等-从小语言入手来学习从小语言入手来学习AST的构造的构造构造构造AST的一些注意事项的一些注意事项-关于关于List类型的实例:可以用类型的实例:可以用java.util.LinkedList(或(或Ar
19、rayList)-一个一个AST节点不能被多棵节点不能被多棵AST(子树)所引用(子树)所引用Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导20实验入门指南实验入门指南深入学习深入学习3v前端:词法分析语法分析语义分析前端:词法分析语法分析语义分析做法做法-使用使用JFlex+CUP来生成分析器的源码来生成分析器的源码:参见参见ch4和和ch5-使用使用JavaCC来生成分析器的源码来生成分析器的源码:参见参见ch5-手工编写分析器手工编写分析器先支持先支持SimpleMiniJOOL,再扩展到,再扩展到SkipOO语言中的注意点:语言中的注意点:-变量的
20、作用域,同名问题的处理,等等变量的作用域,同名问题的处理,等等了解了解AST访问者类、管理符号的一些容器类访问者类、管理符号的一些容器类(如如HashMap)、List等等等等各类符号的描述信息各类符号的描述信息定义符号类、符号表类定义符号类、符号表类Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导21实验入门指南实验入门指南深入学习深入学习4v前端:词法分析语法分析语义分析前端:词法分析语法分析语义分析利用分析器的生成工具构造分析器时利用分析器的生成工具构造分析器时,-先构造简单的语法分析器:不构造先构造简单的语法分析器:不构造AST、不进行错误处理、不进
21、行错误处理重点重点:熟悉分析器的生成工具及其使用方法:熟悉分析器的生成工具及其使用方法-再构造能输出再构造能输出AST的语法分析器,它只能分析正确的源程序的语法分析器,它只能分析正确的源程序重点重点:熟悉在产生式的语义动作中添加构造:熟悉在产生式的语义动作中添加构造AST的代码的代码-再构造能处理语法错误并产生再构造能处理语法错误并产生AST的语法分析器的语法分析器重点重点:识别哪些错误?如何处理错误?如何恢复错误?错误:识别哪些错误?如何处理错误?如何恢复错误?错误信息?信息?-以以AST Visitor的实现类为基础实现语义检查的实现类为基础实现语义检查重点重点:符号表的设计,语义检查:符
22、号表的设计,语义检查-修改文法规范文件,增加符号表的维护与语义检查动作修改文法规范文件,增加符号表的维护与语义检查动作重点重点:注意了解语法和语义分析之间的相互影响:注意了解语法和语义分析之间的相互影响Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导22实验入门指南实验入门指南深入学习深入学习5v前端:词法分析语法分析语义分析前端:词法分析语法分析语义分析AST-LIR-了解了解LIR-AST中的结构到中的结构到LIR的映射关系的映射关系Yu Zhang,USTCYu Zhang,USTC编译原理实验指导编译原理实验指导23实验入门指南实验入门指南深入学习深
23、入学习6v后端:由后端:由LIR/AST生成生成x86或或MIPS汇编码汇编码了解了解x86/MIPS汇编码及其相关工具(汇编码及其相关工具(gcc/spim)总结语言的语法结构与汇编码之间的映射关系总结语言的语法结构与汇编码之间的映射关系-写出对应的写出对应的C程序,用程序,用gcc编译得到编译得到x86汇编码或汇编码或spim汇编码汇编码AST和和LIR的表示与使用(见实验教程的第的表示与使用(见实验教程的第2,6章)章)了解汇编语言特征配置文件及汇编码的内部表示(见了解汇编语言特征配置文件及汇编码的内部表示(见实验教程的第实验教程的第7章)章)不考虑寄存器分配的代码生成(不考虑寄存器分配的代码生成(lab6或或lab7中的中的Generator1.java)考虑寄存器分配的代码生成(考虑寄存器分配的代码生成(lab6或或lab7中的中的Generator2.java/Generator3.java)