#2016 编译 Project 说明
任课老师:邱锡鹏
Project TA:陈丹露
提交地址为 ftp://by:[email protected] 。 由于众所周知的安全问题,请直接提交格式完全和 https://gist.github.com/taineleau/35e5de53e14770738ff4cf30cdce238d 中描述一致的以学号命名的压缩包到根目录下,请勿重复提交,如发现有非自己提交的压缩包或需要重新提交,请用学邮发邮件给TA: [email protected]。
##一、总览
-
任务内容: 为 miniJava 语言(BNF、详细定义及样例)构造一个编译器的前端,将输入的 miniJava 语言代码段转化成抽象语法树,占期末总评 30%,即总分 30 分。
-
截止日期:2017年1月2号 23:59
-
迟交规定:超出截止日期后,每推迟一天扣五分,扣完即止。
-
严禁抄袭,抄袭者直接零分;同时,请勿共享你的代码给其他同学,否则将受到同样的惩罚。
-
提交地址将会稍后在 elearning 上发布
-
有任何评测上的疑问请发邮件至:
[email protected]
,或者在课程 Project 的gist
上面直接评论。
##二、提交要求
-
1~2人一组,若两人一组,请写清楚分工,并放于根目录的
README.md
中,分工将会一定程度影响个人得分 -
请使用
git
管理你的开发进度,一并提交,git log
将是证明独立完成任务的唯一依据。请注意:-
不合理的 git log 将会大幅扣分,如:明显是大段复制粘贴自别人的代码
-
请更频繁地 commit 你的代码(如每隔一小时,或者每次编译之前),虽然 git 的本质并不是用来做抄袭检验,这种 git commit 的方式也不在实际中使用
-
git log 也会作为检查
成员贡献
的重要参考标准,请慎重对待 -
因此,两人一组的小组请不要共用一个账号
-
两人协作可考虑使用 github 的 private repo,也可以使用 Bitbucket,Gitlab 等免费私有仓库的服务
-
-
请将你的项目用zip压缩,并提交格式形如 "学号1_学号2.zip"的压缩包,在根目录下放置
README.md
,report.pdf
和src
文件夹,如下结构:/13300000001_13300000002 | src | README.md | report.pdf
-
README.md
包含:组员分工(如有),运行代码的方式,运行平台,依赖说明等 -
report.pdf
是本次项目的报告,具体要求请看下文第四部分 -
src
文件夹包含这个Project的所有源文件 -
请注意,提交格式不符合规范,直接扣5分
-
-
请确保提交的代码可以执行
##三、项目要求
-
使用词法/语法自动生成工具,Flex/Bison,Lex/Yacc,Jlex/CUP,JavaCC, ANTLR 或其它你认为更好的工具。
-
推荐使用 ANTLR,使用 ANTLR 之前,强烈建议先阅读 ANTLR 的文档和作者出的一本书,《The Definitive ANTLR 4 Reference》,书中有部分源代码,将会对本次项目很有帮助。
- 注意,若使用 ANTLR,请使用 v4 而不是 v3 版本
-
git log 与
README.md
3 分 -
项目报告 7 分
-
正确的词法/语法分析,给出对应的文法文件 2 分
-
输出正确的抽象语法树 3 分
-
错误处理功能,提示错误类型(词法错误、语法错误、语义错误等)、出错位置等 共 7 分
- 词法错误 2 分
- 语法错误 2 分
- 语义错误 3 分
-
错误修复 3 分
-
按照错误修复的性能给分,请在报告中详细解释错误修复中你所使用的方法
-
如果错误修复做得比较完善,相应也会在
额外功能
获得比较多的加分
-
-
额外功能:发挥想象力,使编译器尽善尽美 5分
-
可以给 miniJava 添加新的语言特性
-
可以接通一个后端,使得 miniJava 编译器能真正使用(可酌情有超出期末总评30%的附加分)
-
可以让错误提示更加user-friendly
-
以上三个只是例子,你可以添加任何你认为有用的 feature
-
请注意,这部分分数主要以代码量/技术难度来权衡给分,在报告中“畅想”的不会纳入范围
-
##四、报告要求
####格式
-
请重视文档撰写,不要大段粘贴无关代码
- 请把 TA 当做一个对编译一无所知的对象,来撰写你的报告
-
报告格式:A4,小四号字,1.5倍行距,报告请
不要
超过10页
文档应该包含(请尽量下面的顺序组织报告):
-
不同工具之间的对比,词法/句法分析的原理,选择某个特定工具的原因(2 分)
-
具体说明你的源代码的结构,核心代码的工作原理,实际工作中遇到的问题与解决思路(1 分)
-
错误处理与修复的机理,错误修复的结果、屏幕截图与说明(2分)
- 请注意,屏幕截图是
必要的
- 请注意,屏幕截图是
-
额外功能的说明与项目感想(2 分)