修改文档

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

View File

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

View File

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

View File

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