Go to file
jackfiled 1094158e37
Some checks failed
Build Docker Image / Build-Canon (push) Has been cancelled
Integration Test / Open-Set-Test (push) Has been cancelled
Test canon project / Test-Canon (push) Has been cancelled
feat: README.md & LICENSE
2024-07-03 16:29:42 +08:00
.gitea/workflows feat: 按照open_set中的示例调整语法 (#71) 2024-05-01 21:06:27 +08:00
Canon.Console refact: 重构代码生成 (#72) 2024-05-04 11:56:06 +08:00
Canon.Core fix:对于const重复定义检查错误 (#85) 2024-05-14 14:10:42 +08:00
Canon.Generator feat: 语法树的访问者和类型检测访问者 (#56) 2024-04-26 10:18:49 +08:00
Canon.Server fix:修复前端bug (#83) 2024-05-13 22:29:32 +08:00
Canon.Tests fix:对于const重复定义检查错误 (#85) 2024-05-14 14:10:42 +08:00
docs feat: add docs latex source files 2024-07-03 16:28:25 +08:00
open_set add: 头歌上的隐藏测试集 (#82) 2024-05-13 13:31:29 +08:00
scripts feat: 按照open_set中的示例调整语法 (#71) 2024-05-01 21:06:27 +08:00
.editorconfig init: repo 2024-03-09 20:11:27 +08:00
.gitignore feat: 按照open_set中的示例调整语法 (#71) 2024-05-01 21:06:27 +08:00
Canon.sln feat: 前端界面优化 (#48) 2024-04-21 16:30:44 +08:00
LICENSE feat: README.md & LICENSE 2024-07-03 16:29:42 +08:00
README.md feat: README.md & LICENSE 2024-07-03 16:29:42 +08:00

Canon

北京邮电大学2021级编译原理与技术课程设计成果仓库。

课程设计要求

本次课程设计的要求为设计一个从Pascal-S语言到C语言的简单编译器Pascal-S语言为Pascal语言的一个子集需求中详细给出了该语言的语法定义。

课程设计的验收方式为头歌平台测试集验证与过程性评价两个部分组成。其中头歌平台类似于OJ平台提供了一系列指定的输入Pascal-S程序和输出结果验证编译器是否正确工作。测试集由70个公开测试集和25个隐藏测试集组成在隐藏测试集中可能存在部分测试点针对提供的Pascal-S语法进行了扩充例如要求实现字符串的语法。过程性评价包括一次中期进度汇报和最后的验收汇报最后提交的报告亦作为评分的依据之一。

本仓库中的实现

我们在此次课程设计中使用dotnet平台实现了一个名为Canon的Pascal-S编译器。

Cano n中文名卡农意为“规律”亦是一种音乐作曲技巧。

编译器全部为自行编程实现,没有使用类似于flexbison之类的前端辅助工具。词法分析使用自行实现的自动机算法,语法分析使用LR(1)文法,在项目中实现了一个简单的LR(1)分析器生成工具。语义分析和代码生成使用类似于语法制导翻译的技术,详细设计见课程设计说明。

项目结构

项目中由程序、文档、公开测试集测试工具三部分组成。

项目中程序使用Visual Studio的解决方案工具进行管理。程序中由C#项目组成:

  • Canon.Core项目中的核心程序实现,包括实现编译器的所有核心代码。
  • Canon.Generator项目,编译器中的LR(1)分析器生成工具。
  • Canon.Console项目为命令行版本的编译器项目,负责编译器中的输入输出管理等的功能,并能够通过NativAOT功能输出为单个可执行文件。
  • Canon.Server项目为服务器版本的编译器项目提供了交互式编译的功能并可以可视化的查看编译输出的语法树和C语言代码。
  • Canon.Tests项目,单元测试项目。

项目中的最终报告文件使用latex撰写,报告的源代码在docs文件夹下,可以使用latexmk进行编译:

cd docs
latexmk main.tex

即可获得CanonReport.pdf文件。

项目中提供了一个公开测试集的自动测试工具,使用python编写,需要在系统中安装fpc编译器和gcc编译器。脚本会自动使用fpc编译器和自行实现的编译器pascc编译所有的公开测试集输入代码,并比对两个编译器输出文件的执行结果是否一致。使用方法可参见CI文件.gitea/workflows/integration_test.yaml

支持

如果您在学习或者是抄袭的过程中发现了问题,我们十分欢迎您提出,您可以通过发起issue或者是发送电子邮件的方式联系我们。