style(doc): 完善实验文档验证要求
This commit is contained in:
@@ -57,7 +57,7 @@ java -jar third_party/antlr-4.13.2-complete.jar \
|
||||
## 6. Lab1 测试建议
|
||||
|
||||
|
||||
按提供的测试输入回归验证:
|
||||
先用单个样例检查语法树输出是否基本正常:
|
||||
|
||||
1. 运行 `./build/bin/compiler --emit-parse-tree <case.sy>` 检查解析是否成功。
|
||||
2. 出现报错时优先回查 `SysY.g4` 逻辑。
|
||||
@@ -68,6 +68,8 @@ java -jar third_party/antlr-4.13.2-complete.jar \
|
||||
./build/bin/compiler --emit-parse-tree test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
但最终不能只检查 `simple_add`。完成 Lab1 后,应至少对 `test/test_case` 下全部 `.sy` 用例逐个验证解析是否成功;如有需要,也可以自行编写批量测试脚本统一执行。
|
||||
|
||||
## 7. 关于 AST 的建议
|
||||
|
||||
同学们也可以自行设计一层抽象语法树(AST),将 ANTLR 语法树先转换为 AST,再进入后续阶段。
|
||||
|
||||
@@ -68,7 +68,7 @@ cmake --build build -j "$(nproc)"
|
||||
|
||||
## 7. Lab2 验证方式
|
||||
|
||||
项目编译后按提供测试输入回归:
|
||||
可先用单个样例检查 IR 输出是否基本正确:
|
||||
|
||||
```bash
|
||||
./build/bin/compiler --emit-ir test/test_case/simple_add.sy
|
||||
@@ -86,3 +86,5 @@ cmake --build build -j "$(nproc)"
|
||||
```bash
|
||||
./scripts/verify_ir.sh test/test_case/simple_add.sy test/test_result/ir --run
|
||||
```
|
||||
|
||||
但最终不能只检查 `simple_add`。完成 Lab2 后,应对 `test/test_case` 下全部测试用例逐个回归,确认 IR 生成与 `--run` 链路都能通过;如有需要,也可以自行编写批量测试脚本统一执行。
|
||||
|
||||
@@ -73,7 +73,7 @@ cmake --build build -j "$(nproc)"
|
||||
|
||||
## 7. Lab3 验证方式
|
||||
|
||||
项目编译后按提供测试输入回归:
|
||||
可先用单个样例检查汇编输出是否基本正确:
|
||||
|
||||
```bash
|
||||
./build/bin/compiler --emit-asm test/test_case/simple_add.sy
|
||||
@@ -85,4 +85,5 @@ cmake --build build -j "$(nproc)"
|
||||
./scripts/verify_asm.sh test/test_case/simple_add.sy test/test_result/asm --run
|
||||
```
|
||||
|
||||
若最终输出 `输出匹配: test/test_case/simple_add.out`,说明当前最小子集示例 `return a + b` 的完整后端链路已经跑通。
|
||||
若最终输出 `输出匹配: test/test_case/simple_add.out`,说明当前示例用例 `return a + b` 的完整后端链路已经跑通。
|
||||
但最终不能只检查 `simple_add`。完成 Lab3 后,应对 `test/test_case` 下全部测试用例逐个回归,确认代码生成结果能够通过统一验证;如有需要,也可以自行编写批量测试脚本统一执行。
|
||||
|
||||
@@ -129,13 +129,13 @@ cmake --build build -j "$(nproc)"
|
||||
|
||||
## 7. Lab4 验证方式
|
||||
|
||||
项目编译后可先按当前最小样例检查后端链路是否仍能运行:
|
||||
项目编译后可先用当前示例用例检查后端链路是否仍能运行:
|
||||
|
||||
```bash
|
||||
./build/bin/compiler --emit-asm test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
推荐继续使用统一脚本验证 “源码 -> 汇编 -> 可执行程序” 整体链路。`--run` 模式下会自动读取同名 `.in`,并将程序输出与退出码和同名 `.out` 比对,用于做最小回归:
|
||||
推荐继续使用统一脚本验证 “源码 -> 汇编 -> 可执行程序” 整体链路。`--run` 模式下会自动读取同名 `.in`,并将程序输出与退出码和同名 `.out` 比对,用于检查单个用例的完整结果:
|
||||
|
||||
```bash
|
||||
./scripts/verify_asm.sh test/test_case/simple_add.sy test/test_result/asm --run
|
||||
@@ -147,4 +147,4 @@ cmake --build build -j "$(nproc)"
|
||||
2. 是否减少了不必要的 `load/store` 与重复访存。
|
||||
3. 是否消除了无意义的恒等操作。
|
||||
|
||||
完成 Lab4 后,最终不应只停留在 `simple_add` 这一最小示例,而应对 `test/test_case` 下全部测试用例逐个回归,确保生成代码功能正确;在此基础上,再尽量减少不必要的 spill/reload、无效拷贝、冗余访存与低效机器指令,以提升最终性能表现。
|
||||
完成 Lab4 后,最终不应只停留在 `simple_add` 这一示例用例,而应对 `test/test_case` 下全部测试用例逐个回归,确保生成代码功能正确;如有需要,也可以自行编写批量测试脚本统一执行。在此基础上,再尽量减少不必要的 spill/reload、无效拷贝、冗余访存与低效机器指令,以提升最终性能表现。
|
||||
|
||||
@@ -207,6 +207,8 @@ cmake --build build -j "$(nproc)"
|
||||
./build/bin/compiler --emit-ir test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
这条命令只适合先观察单个样例的 IR 形态。完成 Lab5 后,不能只检查 `simple_add`,还应覆盖 `test/test_case` 下全部测试用例。
|
||||
|
||||
### 8.2 语义回归
|
||||
|
||||
```bash
|
||||
@@ -215,5 +217,6 @@ cmake --build build -j "$(nproc)"
|
||||
```
|
||||
|
||||
目标:脚本自动读取同名 `.in`,并将程序输出与退出码和同名 `.out` 比对,确保优化后程序行为与优化前保持一致。
|
||||
完成 Lab5 后,应对 `test/test_case` 下全部测试用例逐个回归;如有需要,也可以自行编写批量测试脚本统一执行。
|
||||
|
||||
---
|
||||
|
||||
@@ -163,6 +163,8 @@ cmake --build build -j "$(nproc)"
|
||||
|
||||
`--run` 模式下脚本会自动读取同名 `.in`,并将程序输出与退出码和同名 `.out` 比对。
|
||||
|
||||
完成 Lab6 后,不能只检查 `simple_add` 这类单个样例,而应对 `test/test_case` 下全部测试用例逐个回归;如有需要,也可以自行编写批量测试脚本统一执行。
|
||||
|
||||
### 9.2 优化效果对比(示例)
|
||||
|
||||
```bash
|
||||
@@ -171,4 +173,6 @@ cmake --build build -j "$(nproc)"
|
||||
./build/bin/compiler --emit-asm test/test_case/simple_add.sy
|
||||
```
|
||||
|
||||
这里的 `simple_add` 只用于展示如何观察单个样例的输出差异;实际评估优化效果时,仍应结合更多测试用例,必要时覆盖全部测试集。
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user