From ee1e2635e250b7a997cd2650a68ab4065763f64f Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 7 May 2025 17:31:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jcnc/snow/compiler/ir/doc/README.md | 90 ++++++++----------- .../jcnc/snow/compiler/lexer/doc/README.md | 7 +- .../jcnc/snow/compiler/parser/doc/README.md | 7 +- .../jcnc/snow/compiler/semantic/doc/README.md | 5 +- 4 files changed, 51 insertions(+), 58 deletions(-) diff --git a/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md b/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md index 0cf0831..758600b 100644 --- a/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md +++ b/src/main/java/org/jcnc/snow/compiler/ir/doc/README.md @@ -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 核心类型与接口 -│ ├── 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 roots = ...; - -// 2. 创建 IR 构建器 -BasicIRBuilder irBuilder = new BasicIRBuilder(); - -// 3. 构建 IRProgram -IRProgram program = irBuilder.buildProgram(roots); - -// 4. 输出或后续优化 -System.out.println(program); +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 等) ``` ## 开发环境 -- JDK 21 或更高版本 -- 建议使用 Maven 进行构建管理 +* JDK 23 或更高版本 +* Maven 构建管理 +* 推荐 IDE:IntelliJ IDEA +--- diff --git a/src/main/java/org/jcnc/snow/compiler/lexer/doc/README.md b/src/main/java/org/jcnc/snow/compiler/lexer/doc/README.md index 38cee87..7e7f84e 100644 --- a/src/main/java/org/jcnc/snow/compiler/lexer/doc/README.md +++ b/src/main/java/org/jcnc/snow/compiler/lexer/doc/README.md @@ -47,5 +47,8 @@ TokenPrinter.print(tokens); ## 开发环境 -- JDK 21 或更高版本 -- 建议使用 Maven 进行构建管理 +* JDK 23 或更高版本 +* Maven 构建管理 +* 推荐 IDE:IntelliJ IDEA + +--- diff --git a/src/main/java/org/jcnc/snow/compiler/parser/doc/README.md b/src/main/java/org/jcnc/snow/compiler/parser/doc/README.md index f3d2bea..c87662e 100644 --- a/src/main/java/org/jcnc/snow/compiler/parser/doc/README.md +++ b/src/main/java/org/jcnc/snow/compiler/parser/doc/README.md @@ -54,6 +54,9 @@ System.out.println(astJson); ## 开发环境 -- JDK 21 或更高版本 -- 建议使用 Maven 进行构建管理 +* JDK 23 或更高版本 +* Maven 构建管理 +* 推荐 IDE:IntelliJ IDEA + +--- diff --git a/src/main/java/org/jcnc/snow/compiler/semantic/doc/README.md b/src/main/java/org/jcnc/snow/compiler/semantic/doc/README.md index ccb57e0..9a06253 100644 --- a/src/main/java/org/jcnc/snow/compiler/semantic/doc/README.md +++ b/src/main/java/org/jcnc/snow/compiler/semantic/doc/README.md @@ -50,7 +50,8 @@ SemanticAnalysisReporter.report(runner.getErrors()); ## 开发环境 -- JDK 21 或更高版本 -- 建议使用 Maven 进行构建管理 +* JDK 23 或更高版本 +* Maven 构建管理 +* 推荐 IDE:IntelliJ IDEA --- \ No newline at end of file