Skip to content

Latest commit

 

History

History
44 lines (33 loc) · 1.51 KB

File metadata and controls

44 lines (33 loc) · 1.51 KB

SysY Compiler

使用 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:优化前 IR
  • llvm_ir_opt.txt:优化后 IR
  • mips.txt:生成的 MIPS 汇编

SysY 文法见 文法说明.pdf,更完整的架构、算法和实现说明见 文档.md