SysY语言编译器
本编译器采用了前端ANTLR+后端MLIR的总体架构,当前完成了前端到AST的生成,具体文件结构如下。
sys-y-compiler
├── LICENSE
├── Makefile
├── README.en.md
├── README.md
├── build
├── doc
│ ├── SysY语言定义.pdf
│ └── SysY运行时库.pdf
├── include
│ └── sysy
│ ├── Frontend
│ │ ├── Ast.h
│ │ ├── AstTramsform.h
│ │ ├── AstType.h
│ │ ├── Frontend.h
│ │ ├── Location.h
│ │ ├── SysYLexer.h
│ │ ├── SysYOp.h
│ │ ├── SysYParser.h
│ │ ├── SysYParserBaseVisitor.h
│ │ ├── SysYParserVisitor.h
│ │ ├── SysYVisitor.h
│ │ └── SysyContext.h
│ └── Support
│ ├── CommandLine.h
│ ├── common.h
│ └── debug.h
├── lib
│ └── Frontend
│ ├── Ast.cpp
│ ├── AstTramsform.cpp
│ ├── Frontend.cpp
│ ├── Location.cpp
│ ├── SysYLexer.cpp
│ ├── SysYLexer.g4
│ ├── SysYParser.cpp
│ ├── SysYParser.g4
│ ├── SysYParserBaseVisitor.cpp
│ ├── SysYParserVisitor.cpp
│ ├── SysYVisitor.cpp
│ └── SysyContext.cpp
├── scripts
│ └── config.mk
├── sysyc
├── sysyc.cpp
└── test.sy
编译依赖于LLVM和ANTLR
我们需要修改scripts/config.mk 中的变量LLVM_CONFIG为您系统中正确的CONIG脚本名。
我们需要安装ANTLR作为依赖文件。
cd <Where/you/want/to/install/Antlr4>
wget https://www.antlr.org/download/antlr-4.9.3-complete.jar
export CLASSPATH=".:<Where/you/want/to/install/Antlr4>/antlr-4.9.3-complete.jar:$CLASSPATH"
alias antlr4='java -jar <Where/you/want/to/install/Antlr4>/antlr-4.9.3-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
我们还需要安装ANTLR的C++运行时环境
git clone https://github.com/antlr/antlr4.git
cd antlr4/runtime/Cpp
mkdir build && mkdir run && cd build
cmake .. -DANTLR_JAR_LOCATION=<Where/you/want/to/install/Antlr4>/antlr-4.9.3-complete.jar -DWITH_DEMO=True
make
sudo make install
后我们需要修改scripts/config.mk的ANTLR相关的变量
ANTLR4 = java -jar <Where/you/want/to/install/Antlr4>/antlr-4.9.2-complete.jar -Dlanguage=Cpp -no-listener -visitor
可以使用发行版
$ sysyc <filename> [opt, ..]
# 打印源代码
$ sysyc <filename> --gen=src
# 打印CST
$ sysyc <filename> --gen=cst
# 打印AST
$ sysyc <filename> --gen=ast