fix(frontend): 修复部分实现
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
# Lab2:从 ANTLR 解析结果生成中间表示(IR)
|
||||
# Lab2:生成中间表示(IR)
|
||||
|
||||
## 1. 本实验定位
|
||||
|
||||
本仓库当前提供了一个“最小可运行”的 ANTLR 解析结果 -> IR 示例链路。
|
||||
|
||||
Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多 SysY 语法正确翻译为 IR。
|
||||
|
||||
## 2. Lab2 要求
|
||||
@@ -10,11 +9,10 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多
|
||||
需要同学完成:
|
||||
|
||||
1. 熟悉 IR 相关数据结构与构建接口。
|
||||
2. 理解当前 ANTLR 解析结果 -> IR 的最小实现流程。
|
||||
2. 理解当前语法树 -> IR 的最小实现流程。
|
||||
3. 在现有框架上扩展 IR 生成能力,使其覆盖课程要求的Sysy语法。
|
||||
|
||||
|
||||
|
||||
## 3. 当前代码框架(与 Lab2 直接相关)
|
||||
|
||||
1. IR 定义与打印
|
||||
@@ -22,7 +20,7 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多
|
||||
- `src/ir/IRBuilder.cpp`
|
||||
- `src/ir/IRPrinter.cpp`
|
||||
|
||||
2. ParseTree -> IR 生成器
|
||||
2. 语法树 -> IR 生成器
|
||||
- `src/irgen/IRGen.h`
|
||||
- `src/irgen/IRGenDriver.cpp`
|
||||
- `src/irgen/IRGenFunc.cpp`
|
||||
@@ -49,7 +47,7 @@ Lab2 的目标是在该示例基础上扩展语义覆盖范围,逐步把更多
|
||||
|
||||
## 5. 当前最小示例实现说明
|
||||
|
||||
当前 ParseTree -> IR 仅覆盖最小子集:
|
||||
当前语法树 -> IR 仅覆盖最小子集:
|
||||
|
||||
1. 常量整数、变量引用、二元加法表达式。
|
||||
2. 局部变量声明(当前采用 LLVM 前端常见的 `alloca/load/store` 内存模型)。
|
||||
@@ -74,14 +72,14 @@ cmake --build build -j "$(nproc)"
|
||||
./build/bin/compiler --emit-ir test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
如需打印 ANTLR 语法树:
|
||||
如需打印语法树:
|
||||
|
||||
```bash
|
||||
./build/bin/compiler --emit-parse-tree test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
推荐使用统一脚本验证 “IR -> LLVM 后端 -> 可执行程序” 整体链路,用于验证 IR 的正确性:
|
||||
推荐使用统一脚本验证 “IR -> LLVM 后端 -> 可执行程序” 整体链路,用于验证 IR 的正确性:
|
||||
|
||||
|
||||
```bash
|
||||
./scripts/verify_ir_with_llvm.sh test/test_case/simple_add.sy out/ir --run
|
||||
|
||||
Reference in New Issue
Block a user