diff --git a/doc/Lab2-AST到IR实验说明.md b/doc/Lab2-AST到IR实验说明.md index aa3f14c..72cbb27 100644 --- a/doc/Lab2-AST到IR实验说明.md +++ b/doc/Lab2-AST到IR实验说明.md @@ -1,8 +1,8 @@ -# Lab2:从 AST 生成中间表示(IR) +# Lab2:从 ANTLR 解析结果生成中间表示(IR) ## 1. 本实验定位 -本仓库当前提供了一个“最小可运行”的 AST -> IR 示例链路。 +本仓库当前提供了一个“最小可运行”的 ANTLR 解析结果 -> IR 示例链路。 Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多 SysY 语法正确翻译为 IR。 ## 2. Lab2 要求 @@ -10,7 +10,7 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多 需要同学完成: 1. 熟悉 IR 相关数据结构与构建接口。 -2. 理解当前 AST -> IR 的最小实现流程。 +2. 理解当前 ANTLR 解析结果 -> IR 的最小实现流程。 3. 在现有框架上扩展 IR 生成能力,使其覆盖课程要求的Sysy语法。 @@ -22,7 +22,7 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多 - `src/ir/IRBuilder.cpp` - `src/ir/IRPrinter.cpp` -2. AST -> IR 生成器 +2. ParseTree -> IR 生成器 - `src/irgen/IRGen.h` - `src/irgen/IRGenDriver.cpp` - `src/irgen/IRGenFunc.cpp` @@ -46,11 +46,10 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多 2. 视实现需要可能修改 - `src/main.cpp`(当需要调整输出阶段行为) - - `src/sem/*`(当新增语法依赖更多语义信息) ## 5. 当前最小示例实现说明 -当前 AST -> IR 仅覆盖最小子集: +当前 ParseTree -> IR 仅覆盖最小子集: 1. 常量整数、变量引用、二元加法表达式。 2. 局部变量声明(当前采用 LLVM 前端常见的 `alloca/load/store` 内存模型)。 @@ -74,11 +73,15 @@ cmake --build build -j "$(nproc)" ```bash ./build/bin/compiler --emit-ir test/test_case/simple_add.sy ``` -` -推荐使用统一脚本验证 “IR -> LLVM 后端 -> 可执行程序” 整体链路,用于验证ir的正确性: +如需打印 ANTLR 语法树: ```bash -./scripts/verify_ir_with_llvm.sh test/test_case/simple_add.sy out/ir --run +./build/bin/compiler --emit-parse-tree test/test_case/simple_add.sy ``` +推荐使用统一脚本验证 “IR -> LLVM 后端 -> 可执行程序” 整体链路,用于验证 IR 的正确性: + +```bash +./scripts/verify_ir_with_llvm.sh test/test_case/simple_add.sy out/ir --run +```