优化注释

This commit is contained in:
Luke 2025-05-10 15:21:01 +08:00
parent 49deeef9fd
commit 98ceb4faa8

View File

@ -1,49 +1,31 @@
# Snow Compiler IR 模块
# Snow Compiler - IR 模块
> Snow 编译器的中间表示子模块 —— 负责将带有类型和符号信息的 AST 转换为可优化的中间表示IR并管理相关数据结构
> Snow 编译器的中间表示模块 —— 负责构建、组织和输出中间表示指令IR
## 项目简介
**IR** 是 [Snow 编译器]() 的后端子模块承担在语义分析Semantic之后将抽象语法树AST构建成一套通用、可扩展的中间表示。
该模块定义了 IR 的核心数据结构、指令集与构建流程,通过分层的 Builder API 从高层 AST 生成完整的 `IRProgram`,为后续优化和目标代码生成阶段提供坚实基础。
**IRIntermediate Representation** 是 [Snow 编译器]() 项目的核心模块,承担中间表示的构建、组织与管理任务。
它用于在前端语法分析与后端目标代码生成之间,提供结构清晰、便于优化和转换的抽象表示形式。
IR 模块以类 SSAStatic Single Assignment形式设计通过统一的指令体系、虚拟寄存器模型和构建器架构实现了良好的表达力与可扩展性为后续优化和代码生成阶段打下基础。
## 核心功能
* **IR 构建**`IRProgramBuilder` 将顶层 AST 节点列表或模块节点,构建为完整的 `IRProgram`
* **分块构建器**`FunctionBuilder``ExpressionBuilder``StatementBuilder` 在上下文 `IRContext``IRBuilderScope` 中协同生成 IR
* **指令定义**:提供一元运算、二元运算、加载常量、返回等指令实现
* **核心数据结构**`IRProgram``IRFunction``IRInstruction``IROpCode``IRValue`
* **值管理**:支持虚拟寄存器(`IRVirtualRegister`)、常量(`IRConstant`)、标签(`IRLabel`
* **可扩展性**`InstructionFactory` 支持自定义或扩展新指令
* **统一的中间表示模型**:表达控制流与数据流,支持函数、指令、值等核心结构
* **IR 构建器体系**:模块化构建函数、表达式与语句 IR简化前端对接
* **灵活的指令层级结构**:支持二元操作、跳转、返回等多种基本指令
* **寄存器与常量模型**:统一管理虚拟寄存器、常量、标签等值类型
* **IR 打印与调试支持**:辅助输出 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
│ ├── IROpCode.java
│ └── IRValue.java
├── instruction/ // 各类指令实现
│ ├── BinaryOperationInstruction.java
│ ├── UnaryOperationInstruction.java
│ ├── LoadConstInstruction.java
│ └── ReturnInstruction.java
├── value/ // IR 值类型
│ ├── IRVirtualRegister.java
│ ├── IRConstant.java
│ └── IRLabel.java
└── doc/ // 文档与示例README 等)
├── builder/ // 构建器模块:负责构造表达式、函数与语句的 IR
├── core/ // 核心定义IR 基础结构,如函数、指令、程序、访问器等
├── instruction/ // 指令实现:具体的 IR 指令类型(如加法、跳转、返回等)
├── value/ // 值模型:常量、标签、虚拟寄存器等
└── doc/ // 模块文档
```
## 开发环境