MiniDecaf 是清华大学 2020 年秋季学期编译原理课程所用的教学语言,它是在 C 的一小部分语言特性上修改而来。
git clone git@github.com:decaf-lang/minidecaf.git -b md-xxy
cd minidecaf/如果此框架有所更新,你可以通过以下方式更新本地的框架
git fetch origin md-xxy
git reset --hard origin/md-xxy- OS: *nix(Mac 或者 Linux)
- JDK 14
- RISCV 交叉编译器和模拟器
注:本框架使用 Gradle 的 ANTLR 插件,你可以无需单独下载 ANTLR。
你可以使用一款你喜欢的 IDE 来编译和调试本项目,或者可以直接使用命令行。
本项目的编译方式是 gradle 的 build 任务。
我们的 parser 代码由 ANTLR 自动生成(synthesis),为了让 IDE 能够解析到其中的符号,在第一次开发本项目以及后续更改文法时及时 build 更新 parser 代码。
./gradlew buildjar 包会生成于 build/libs/minidecaf.jar。
你也可以通过以下方式单独生成 parser,
./gradlew generateGrammarSource生成的 parser 代码位于 build/generated-src/antlr/main/minidecaf/*。
- 可以参考 这里 载入本项目;
- 可以通过
View > Tool Windows > Gradle打开 Gradle 窗口; - 可以参考 这里 来运行 Gradle 的
build > build任务,从而编译本项目,生成所需的 parser 代码(build/generated-src/antlr/main/minidecaf/*)和 jar 包(在build/libs/minidecaf.jar)。
- 可以通过
File > Import > Gradle > Existing Gradle Project载入本项目; - 可以运行 gradle 任务
ide > eclipse,以生成 Eclipse 所需的配置文件; - 可以运行 gradle 任务
build > build,以生成 parser 代码; - 可以通过
File > Refresh来刷新项目。
如果报错
Unbound classpath container: 'JRE System Library [...]' in project 'minidecaf',可以参考这里。但也有可能不是 JRE System Library 的问题,只需把它删掉重新添加即可。
如果你看到注释是乱码,可以参考这里把编码方式改为 UTF-8。
java -ea -jar build/libs/minidecaf.jar <input minidecaf file> <output riscv assembly file>测例及脚本可见于这里。
供你参考的代码在最后 12 个 commit,你可以通过 git log 查看、git checkout 切换,或者直接在 GitHub 中查看。