Skip to content

Instantly share code, notes, and snippets.

@taineleau-zz
Last active May 13, 2021 18:45
Show Gist options
  • Save taineleau-zz/35e5de53e14770738ff4cf30cdce238d to your computer and use it in GitHub Desktop.
Save taineleau-zz/35e5de53e14770738ff4cf30cdce238d to your computer and use it in GitHub Desktop.
2016 Fudan Compiler Project

#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.mdreport.pdfsrc文件夹,如下结构:

     	/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 分)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment