你可以选择题目难度 你可以寻求多方帮助 但是,你不能 -不做 -拷贝 …
《编译技术》课程设计 计算机学院 杨海燕
题目 根据给定的文法实现编译器,产生中间代码(四元式),生成面向特定体系结构的目标代码。
文法 类Pascal、类C语言的文法 PL/0 C0
PL/0文法 教材上的文法略做改动 文法说明 示例 具有常量、变量、整数、无数据类型(缺省为整型)、过程(无参数)、赋值语句、if-then-else、while-do/do-while语句、repeat-until语句、过程调用、复合语句、读语句、写语句 示例
C0文法 类C语言的文法 文法说明 具有常量、变量、整数、整型、函数(带参数,有/无返回值)、赋值语句、if-then-else、while语句、函数调用、复合语句、读语句、写语句(带字符串),return语句 示例
扩充PL/0或C0文法 进行了语法成分上的扩充 文法说明 示例扩充PL/0 C0 具有常量、变量、整数、实数、整型、实型、字符型、过程(带参数)、函数(带参数)、赋值语句、if-then-else、while语句、for语句、repeat-until语句、case语句、过程调用、函数调用、复合语句、读语句、写语句(带字符串) 示例扩充PL/0 C0
代码生成和优化 代码生成 目标体系结构为X86和MIPS 流图、基本块、四元式都要有。采用DAG图表示基本块内部的,需要将DAG图同时用四元式表达 代码生成X86或MIPS汇编码 直接生成机器码的可以获得加分 PL/0注意DISPLAY表或访问链的生成 临时寄存器的申请/使用需要完成(不易掌握)
代码生成和优化 基本优化完成: 基本块内部的公共子表达式删除 基本的数据流分析(变量的活性分析,为全局寄存器分配准备) 全局寄存器分配 着色算法 基于访问统计的分配算法 (选作)其他优化,例如复制传播、循环强度削弱等,可以自行选作,成功完成都有加分
作业题目1 难度等级:很简单 目标:完成编译器及解释执行程序,解释执行程序对编译器产生的PCODE能解释执行,产生运行结果 文法:PL/0文法(与教材上的文法略有差别) 优化:无 中间代码:无 目标码:PCODE 最高分:65
作业题目2 难度等级:较简单 标:完成编译器及解释执行程序,解释执行程序对编译器产生的PCODE能解释执行,产生运行结果 文法:C0文法 优化:无 中间代码:无 目标码:PCODE 最高分:70
作业题目3 难度等级:适中 目标:完成编译器及解释执行程序,解释执行程序对编译器产生的PCODE能解释执行,产生运行结果 文法:扩充C0或扩充PL/0文法 优化:无 中间代码:无 目标码:PCODE 最高分:80
作业题目4 难度等级:较难 目标:实现编译器,生成X86汇编 文法: C0文法 优化:无 中间代码:四元式 目标码:X86汇编 最高分:89
作业题目5 难度等级:很难 目标:实现编译器,生成X86汇编或MIPS汇编 文法: C0文法 优化: 基本块内部的公共子表达式删除 全局寄存器分配(着色算法) 基本的数据流分析(变量的活性分析,为全局寄存器分配准备) 中间代码:四元式 目标码:X86汇编或MIPS汇编 最高分:100
作业要求 每人独立完成一份作业 采用递归子程序法进行语法分析,除了难度等级为“很难”的题目允许利用词法分析和语法分析的自动生成工具外,其他难度等级的所有代码要求手工编程实现 可以有图形用户界面 完成以下文档(word文档) 需求说明(应给出语法或语法图) 详细设计(应给出程序结构,各函数的功能描述和调用依赖关系,符号表结构,运行栈结构,出错信息编号及描述等) 操作说明(包括程序安装、环境配置;程序启动后,编译、运行、结果显示等操作的说明) 测试报告(提供至少10个测试程序的源程序及测试结果(其中5个有错误的文件),如有扩充,还需另外提供5个测试程序) 总结感想 用C/C++或Java语言实现 开发环境(Win2K, WinXP) Eclipse 3.2,JDK1.4.2 Visual Studio 2003
作业要求(续) 提交完整的项目/工程文件,在集成开发环境下可编译运行 提交能直接运行的程序包 目录命名及组织 学号_姓名[_申优][MIPS](如35060501_×××_申优) 源代码 可执行文件 文档 阅读PL/0,PASCAL-S源代码
新教学编译器架构
考核方案 检查文档内容是否齐全、正确 将对每份作业的源程序进行编译,编译不通过不能得分;不能正常运行,不能得分 每份作业将用自己提交的测试程序和老师准备的5个测试程序进行测试,根据通过的测试点给分,并能根据要求修改测试程序进行测试 回答老师的现场提问 申优的同学参加申优答辩 若发现程序或文档雷同,按作弊处理 文档所占比例20%,程序及运行状况所占比例80%
作业获取和提交 http://compile.buaa.edu.cn
作业获取和提交 登录后请修改密码 填写个人信息:联系电话和email 每人最多两次获取题目(不同难度),以最后一次为准(不保留前一次的记录) 2008年12月8日之后可获取作业题目
交流与沟通 在线答疑——论坛 同学 助教 老师 联系方式 xhshi@buaa.edu.cn 史晓华 82338487 compiler_yhy@sohu.com 杨海燕 82317624
参考资料 《编译原理及编译程序构造》第十四章 第十五章 附录A 附录B 参考书 Compilers: Principles, Techniques, and Tools. By Alfred V. AHO, Ravi SETHI and Jeffrey D. ULLMAN 中文版:编译原理,李建中,姜守旭译,机械工业出版社 Advanced Compiler Design and Implementation. By Steven S. Muchnick. 中文版:高级编译器设计与实现,赵克佳,沈志宇译,机械工业出版社