使用 Java 独立实现的 SysY 编译器,将 SysY(C 语言子集)编译为可在 MARS 中运行的 MIPS 汇编。
项目覆盖完整编译流程:
源码 -> 词法分析 -> 递归下降语法分析 -> 语义检查
-> LLVM 风格 IR -> SSA/GVN/死代码删除
-> Phi 消除 -> 寄存器分配 -> MIPS 汇编
- Lexer、递归下降 Parser、AST 与错误恢复
- 嵌套作用域符号表及语义检查
- 基于
Value/User/Use和 def-use 链的 LLVM 风格 IR - CFG、支配树、支配边界及 Mem2Reg/SSA 转换
- GVN、公共子表达式消除、常量折叠和死代码删除
- 关键边拆分、Phi 消除与 Parallel Copy
- 活跃变量分析、线性寄存器分配及栈溢出
- MIPS 指令选择、函数调用约定和部分乘除法优化
src/frontend 词法、语法、AST、语义分析与符号表
src/midend/llvmir LLVM 风格中间表示
src/midend/optimize CFG、SSA、GVN 与死代码删除
src/backend MIPS 代码生成与寄存器分配
test 测试输入、参考输出及 SysY 测试程序
docs 设计与优化记录
项目入口为 src/Compiler.java,默认读取根目录下的 testfile.txt,并生成:
error.txt:语法或语义错误llvm_ir.txt:优化前 IRllvm_ir_opt.txt:优化后 IRmips.txt:生成的 MIPS 汇编
SysY 文法见 文法说明.pdf,更完整的架构、算法和实现说明见 文档.md。