修改文档

This commit is contained in:
Luke 2025-05-07 17:31:52 +08:00
parent f741bdaa3a
commit ee1e2635e2
4 changed files with 51 additions and 58 deletions

View File

@ -1,69 +1,55 @@
# Snow Compiler IR 模块
> Snow 编译器的后端子模块 —— 将解析器生成的 AST 转换为中间表示IR并管理寄存器与指令序列
> Snow 编译器的中间表示子模块 —— 负责将带有类型和符号信息的 AST 转换为可优化的中间表示IR并管理相关数据结构
## 项目简介
**IR**Intermediate Representation模块位于 Snow 编译器的后端承担将上游语法树AST“降解”为可供后续优化、寄存器分配与目标代码生成的中间指令流的任务。
它定义了 IR 程序、函数、指令与操作数的核心抽象,并提供了一个从 AST 到 IR 的构建器,便于插入各种优化 Pass 或不同后端
**IR** 是 [Snow 编译器]() 的后端子模块承担在语义分析Semantic之后将抽象语法树AST构建成一套通用、可扩展的中间表示。
该模块定义了 IR 的核心数据结构、指令集与构建流程,通过分层的 Builder API 从高层 AST 生成完整的 `IRProgram`,为后续优化和目标代码生成阶段提供坚实基础
## 核心功能
- **AST → IR 构建器**
`BasicIRBuilder` 递归遍历 AST 节点,生成 `IRProgram``IRFunction` 与指令序列。
- **虚拟寄存器管理**
按需分配唯一编号的 `VirtualRegister`,支持后续 SSA 扩展。
- **丰富的指令集**
算术运算、常量加载、返回、标签与跳转等指令由 `IROp` 枚举与 `IRInstruction` 子类统一管理。
- **模块化组织**
接口、值类型、指令实现、构建逻辑分包,职责清晰,易于扩展。
- **可扩展优化**
`IRFunction` 上可插入常量折叠、死代码消除、基本块重组等优化 Pass。
* **IR 构建**`IRProgramBuilder` 将顶层 AST 节点列表或模块节点,构建为完整的 `IRProgram`
* **分块构建器**`FunctionBuilder``ExpressionBuilder``StatementBuilder` 在上下文 `IRContext``IRBuilderScope` 中协同生成 IR
* **指令定义**:提供一元运算、二元运算、加载常量、返回等指令实现
* **核心数据结构**`IRProgram``IRFunction``IRInstruction``IROpCode``IRValue`
* **值管理**:支持虚拟寄存器(`IRVirtualRegister`)、常量(`IRConstant`)、标签(`IRLabel`
* **可扩展性**`InstructionFactory` 支持自定义或扩展新指令
## 模块结构
```
org.jcnc.snow.compiler.ir
├── core/ // IR 核心类型与接口
ir/
├── builder/ // AST → IR 构建器
│ ├── IRProgramBuilder.java
│ ├── FunctionBuilder.java
│ ├── ExpressionBuilder.java
│ ├── StatementBuilder.java
│ ├── InstructionFactory.java
│ ├── IRContext.java
│ └── IRBuilderScope.java
├── core/ // 核心 IR 数据结构
│ ├── IRProgram.java
│ ├── IRFunction.java
│ ├── IRInstruction.java
│ ├── IROp.java
├── IROpCode.java
│ └── IRValue.java
├── value/ // 各类 IR 值类型
│ ├── VirtualRegister.java
│ ├── Constant.java
│ └── Label.java
├── instr/ // 具体指令实现
├── instruction/ // 各类指令实现
│ ├── BinaryOperationInstruction.java
│ ├── UnaryOperationInstruction.java
│ ├── 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);
├── value/ // IR 值类型
│ ├── IRVirtualRegister.java
│ ├── IRConstant.java
│ └── IRLabel.java
└── doc/ // 文档与示例README 等)
```
## 开发环境
- JDK 21 或更高版本
- 建议使用 Maven 进行构建管理
* JDK 23 或更高版本
* Maven 构建管理
* 推荐 IDEIntelliJ IDEA
---

View File

@ -47,5 +47,8 @@ TokenPrinter.print(tokens);
## 开发环境
- JDK 21 或更高版本
- 建议使用 Maven 进行构建管理
* JDK 23 或更高版本
* Maven 构建管理
* 推荐 IDEIntelliJ IDEA
---

View File

@ -54,6 +54,9 @@ System.out.println(astJson);
## 开发环境
- JDK 21 或更高版本
- 建议使用 Maven 进行构建管理
* JDK 23 或更高版本
* Maven 构建管理
* 推荐 IDEIntelliJ IDEA
---

View File

@ -50,7 +50,8 @@ SemanticAnalysisReporter.report(runner.getErrors());
## 开发环境
- JDK 21 或更高版本
- 建议使用 Maven 进行构建管理
* JDK 23 或更高版本
* Maven 构建管理
* 推荐 IDEIntelliJ IDEA
---