一个将 SysY 语言(C 语言子集)编译到 MIPS 汇编的完整编译器,使用 Java 从零实现。涵盖编译器前端到后端的完整流程,并包含中间代码优化。
SysY 源码
│ 词法分析(有限自动机)
▼ → Token 流
│ 语法分析(递归下降)
▼ → 语法树 / PCode
│ 错误处理(词法/语法/语义错误检测)
▼ 符号表管理
│ 中间代码生成(四元式)
▼ → 中间代码
│ 优化(Optimizer)
▼ 目标代码生成
→ MIPS 汇编
| 阶段 | 内容 |
|---|---|
| 01-词法分析 | 基于有限自动机的词法分析器,将源码切分为 Token(标识符、关键字、数字、运算符、注释处理) |
| 02-语法分析与PCode | 递归下降语法分析,构建语法结构并编译为 PCode,内置虚拟机解释执行。含设计文档 |
| 03-错误处理 | 在词法、语法、语义层面检测并报告错误(符号表、类型检查、作用域) |
| 04-代码生成与优化 | 生成 MIPS 目标代码,并对中间代码做优化(含优化前后中间代码/目标代码对比) |
- 词法分析:有限自动机(DFA)驱动,分类型 Lexer(数字、字符、关键字、注释)
- 语法分析:递归下降(recursive descent),每个非终结符对应一个解析函数
- 符号表:分层作用域管理(SymbolManager / SymbolTable)
- 中间表示:四元式(FourParts),便于优化
- 目标代码:MIPS 汇编,含寄存器分配
- 优化:中间代码级优化(见 04 阶段的优化前后对比)
各阶段独立成目录,src/ 下为 Java 源码,testfile*.txt 为测试用例。项目按编译流程分阶段组织,完整展示了从零构建一个编译器的过程。