A naive SPL compiler implementation in C++.
- LLVM 6.0
并相应修改CMakeLists.txt中INC_DIR和LINK_DIR
- gcc/clang
- CMake
flex -o lexer.cpp --yylineno lexer.l
bison -d -o parser.cpp parser.y
cmake .
make
./splc input.spl
splc和system.spl必须在同一目录下
output.ll
LLVM �IR。
output.s
本机汇编代码。
可以通过 gcc -o test.out output.s
生成本机可执行文件。
mips.s
MIPS汇编, target = mips-apple-darwin17.6.0。
- 数组 一维
- record实现
- 常量不可被重新赋值
- 类型检查
- 函数调用
- 乘除
- 加减区分 real integer
- var: call by reference
- write, writeln
- read
- 变量自动赋初值
- Factor: T_NOT_FACTOR T_MINUS_FACTOR
- 倒序访问是否有问题
- 主程序返回值
- SPL基本语法
- 可视化AST
dependency: graphviz
dot -Tpng -o ast.png ast.dot
- 代码生成(default target和MIPS)
default target可在本机编译运行,检查正确性。 MIPS为实验要求。
- 超简单的错误提示。