很简单
- 使用已经有的 brython master 的
brython.js和brython_stdlib.js。 - 直接复制
minidecaf/minidecaf到minidecaf-web/Lib/site-packages/minidecaf - 适当修改
MiniDecafParser.py(似乎 brython 还没有修好 bug)
-
OS: *nix(Mac 或 Linux)
-
make: 因为有 Makefile
-
Python 至少 3.6,运行
python --version检查- ubuntu 下安装命令是
sudo apt install python3
- ubuntu 下安装命令是
-
pip 版本随意,但须是 python3 的。运行
pip --version,最后应该是 python 3.x。- ubuntu 下安装命令是
sudo apt install python3-pip
- ubuntu 下安装命令是
-
ANTLR 工具:按照 https://www.antlr.org/ 的 Quick Start 安装即可
- 因为网络原因可能 Quick Start 那块加载不出来,那么请看实验指导书的截图。
- 如果你没有完全按照官网指导把 antlr 的 jar 放到系统目录,你还需要在
~/.bashrc(或~/.zshrc)中export ANTLR_JAR=/path/to/your/antlr.jar。
-
Python 的 ANTLR API:
pip install antlr4-python3-runtime- 或者
pip install -r minidecaf/requirements.txt
# 运行编译,生成源代码(默认 i.c)对应的汇编(默认 o.s)
make [i=i.c] [o=o.s]
# 显示源代码的具体语法树
make cst [i=i.c]
- 改
gen_asm了嘛? - 运行测例之前,先在本项目下
make grammar-py
make: python: Command not found
先确认你安装了 python 3:
$ python3 -V
Python 3.8.2
然后
$ sudo ln -s /usr/bin/python3 /usr/bin/python
$ make
cd minidecaf && java -jar /usr/local/lib/antlr-4.8-complete.jar -Dlanguage=Python3 -visitor -o generated MiniDecaf.g4
python -m minidecaf i.c o.s
riscv64-unknown-elf-gcc -march=rv32im -mabi=ilp32 o.s
qemu-riscv32 a.out ; echo $?
233
你得自己建立 i.c 文件,内容是你的输入 MiniDecaf 程序。
多遍编译器,支持输出中间结果。pass 有:
-
lex/parse:直接使用 ANTLR
- 没有构建抽象语法树,直接在 ANTLR 的具体语法树上做接下来的处理
make lex,make parse以及make cst来看 lex/parse 结果
-
namer:名称解析,解析完成以后做一遍变量重命名(alpha conversion)
make ni看 namer 结果
-
typer:类型检查
make ti看 typer 结果
-
irgen:生成栈式机 IR
make ir看生成的 IR
-
asmgen:从 IR 生成汇编
make asm然后看o.s(或者make o=OUTFILE的输出文件)