diff --git a/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md b/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md new file mode 100644 index 0000000..0cf0831 --- /dev/null +++ b/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md @@ -0,0 +1,69 @@ +# Snow Compiler – IR 模块 + +> Snow 编译器的后端子模块 —— 将解析器生成的 AST 转换为中间表示(IR),并管理寄存器与指令序列 + +## 项目简介 + +**IR**(Intermediate Representation)模块位于 Snow 编译器的后端,承担将上游语法树(AST)“降解”为可供后续优化、寄存器分配与目标代码生成的中间指令流的任务。 +它定义了 IR 程序、函数、指令与操作数的核心抽象,并提供了一个从 AST 到 IR 的构建器,便于插入各种优化 Pass 或不同后端。 + +## 核心功能 + +- **AST → IR 构建器** + `BasicIRBuilder` 递归遍历 AST 节点,生成 `IRProgram`、`IRFunction` 与指令序列。 +- **虚拟寄存器管理** + 按需分配唯一编号的 `VirtualRegister`,支持后续 SSA 扩展。 +- **丰富的指令集** + 算术运算、常量加载、返回、标签与跳转等指令由 `IROp` 枚举与 `IRInstruction` 子类统一管理。 +- **模块化组织** + 接口、值类型、指令实现、构建逻辑分包,职责清晰,易于扩展。 +- **可扩展优化** + 在 `IRFunction` 上可插入常量折叠、死代码消除、基本块重组等优化 Pass。 + +## 模块结构 + +``` +org.jcnc.snow.compiler.ir +├── core/ // IR 核心类型与接口 +│ ├── IRProgram.java +│ ├── IRFunction.java +│ ├── IRInstruction.java +│ ├── IROp.java +│ └── IRValue.java +│ +├── value/ // 各类 IR 值类型 +│ ├── VirtualRegister.java +│ ├── Constant.java +│ └── Label.java +│ +├── instr/ // 具体指令实现 +│ ├── LoadConstInstruction.java +│ ├── BinOpInstruction.java +│ ├── UnaryOpInstruction.java +│ └── ReturnInstruction.java +│ +└── builder/ // AST → IR 构建器 + └── BasicIRBuilder.java +``` + +## 快速上手 + +``` +// 1. 假设已有一颗通过 Parser 生成的 AST 根节点列表 +List roots = ...; + +// 2. 创建 IR 构建器 +BasicIRBuilder irBuilder = new BasicIRBuilder(); + +// 3. 构建 IRProgram +IRProgram program = irBuilder.buildProgram(roots); + +// 4. 输出或后续优化 +System.out.println(program); +``` + +## 开发环境 + +- JDK 21 或更高版本 +- 建议使用 Maven 进行构建管理 +