修改文档
This commit is contained in:
parent
f741bdaa3a
commit
ee1e2635e2
@ -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 构建管理
|
||||||
|
* 推荐 IDE:IntelliJ IDEA
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
@ -47,5 +47,8 @@ TokenPrinter.print(tokens);
|
|||||||
|
|
||||||
## 开发环境
|
## 开发环境
|
||||||
|
|
||||||
- JDK 21 或更高版本
|
* JDK 23 或更高版本
|
||||||
- 建议使用 Maven 进行构建管理
|
* Maven 构建管理
|
||||||
|
* 推荐 IDE:IntelliJ IDEA
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
@ -54,6 +54,9 @@ System.out.println(astJson);
|
|||||||
|
|
||||||
## 开发环境
|
## 开发环境
|
||||||
|
|
||||||
- JDK 21 或更高版本
|
* JDK 23 或更高版本
|
||||||
- 建议使用 Maven 进行构建管理
|
* Maven 构建管理
|
||||||
|
* 推荐 IDE:IntelliJ IDEA
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,8 @@ SemanticAnalysisReporter.report(runner.getErrors());
|
|||||||
|
|
||||||
## 开发环境
|
## 开发环境
|
||||||
|
|
||||||
- JDK 21 或更高版本
|
* JDK 23 或更高版本
|
||||||
- 建议使用 Maven 进行构建管理
|
* Maven 构建管理
|
||||||
|
* 推荐 IDE:IntelliJ IDEA
|
||||||
|
|
||||||
---
|
---
|
||||||
Loading…
x
Reference in New Issue
Block a user