本项目是ZJU编译原理的大作业,内容是实现一个类Pascal语言的编译器
项目前端使用flex与bison完成,后端拟使用llvm完成
- llvm 9.0.0
- flex 2.5.35 Apple(flex-32)
- bison (GNU Bison) 2.3
linux 环境下安装:
sudo apt install llvm
sudo apt install flex bison
- MacOS (recommend)
- Linux
NOTE:
- llvm use c++14 features, so compiling with
-std=gnu++11
won't work, please modify Makefile with-std=g++14
. - use
-fpermissive
to downgrade some diagnostics about nonconformant code from errors to warnings. - change
TheModule->dump();
in SPL-Complier/CodeGenerator.cpp:15 tomodule->print(llvm::errs(), nullptr);
because llvm5.0+ does not support dump anymore.
make
cat ./test/test2.pas | ./spl
cat ./test/test.pas | ./spl 2> spl.ll
lli spl.ll
需要Graphviz
llvm-as < spl.ll | opt -analyze -view-cfg
dot *.dot -T png -o dag.png
由于使用了D3.js读取本地json,所以需要在服务器上才能读取,建议在VSCode中安装live Sever插件,然后在tree.html里右键,然后打开liveSever,这样就能看到了
如果不想安这个插件的话,就只能自己配置一个html服务器了,可以用Apache做
注意需要先运行程序生成tree.json
LLVM程序员手册 LLVM教程 GNU Pascal文档 lex教程 flex+lex+llvm实例教程 上个教程的git仓库 Pascal教程 GNU lex教程