增加文档

This commit is contained in:
Luke 2025-04-30 16:26:13 +08:00
parent 303e8aa32b
commit becea1f7c4

View File

@ -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<Node> roots = ...;
// 2. 创建 IR 构建器
BasicIRBuilder irBuilder = new BasicIRBuilder();
// 3. 构建 IRProgram
IRProgram program = irBuilder.buildProgram(roots);
// 4. 输出或后续优化
System.out.println(program);
```
## 开发环境
- JDK 21 或更高版本
- 建议使用 Maven 进行构建管理