You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Lab1 运行说明
## 1. 环境要求
建议环境中具备以下工具:
- `java`
- `cmake`
- `g++` / `clang++`
- `make``ninja`
可先检查:
```bash
java -version
cmake --version
g++ --version
```
## 2. 手动生成 ANTLR 代码
在仓库根目录执行:
```bash
mkdir -p build/generated/antlr4
java -jar third_party/antlr-4.13.2-complete.jar \
-Dlanguage=Cpp \
-visitor -no-listener \
-Xexact-output-dir \
-o build/generated/antlr4 \
src/antlr4/SysY.g4
```
## 3. 手动配置与编译
在仓库根目录执行:
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j "$(nproc)"
```
编译成功后,可执行文件位于:
```bash
./build/bin/compiler
```
## 4. 单个样例运行
### 4.1 仅输出语法树
```bash
./build/bin/compiler --emit-parse-tree test/test_case/functional/simple_add.sy
```
### 4.2 验证最小 IR 仍可工作
```bash
./build/bin/compiler --emit-ir test/test_case/functional/simple_add.sy
```
## 5. 批量测试
我提供了一个批量测试脚本:
```bash
./solution/run_lab1_batch.sh
```
如果希望在批量测试时把每个样例的语法树保存到 `test_tree/` 目录,可以加可选项:
```bash
./solution/run_lab1_batch.sh --save-tree
```
该脚本会自动完成:
1. 重新生成 `build/generated/antlr4` 下的 ANTLR 文件
2. 执行 `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release`
3. 执行 `cmake --build build -j "$(nproc)"`
4. 批量测试 `test/test_case/functional/*.sy`
5. 批量测试 `test/test_case/performance/*.sy`
若使用 `--save-tree`,还会额外:
6. 在仓库根目录下创建 `test_tree/`
7. 将语法树按测试集目录结构保存,例如:
```bash
test_tree/functional/simple_add.tree
test_tree/performance/fft0.tree
```
若某个用例失败,脚本会打印失败用例名并返回非零退出码。
## 6. 常用附加命令
### 6.1 查看帮助
```bash
./build/bin/compiler --help
```
### 6.2 指定单个样例文件
```bash
./build/bin/compiler --emit-parse-tree <your_case.sy>
```
### 6.3 重新从零开始构建
```bash
rm -rf build
mkdir -p build/generated/antlr4
java -jar third_party/antlr-4.13.2-complete.jar \
-Dlanguage=Cpp \
-visitor -no-listener \
-Xexact-output-dir \
-o build/generated/antlr4 \
src/antlr4/SysY.g4
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j "$(nproc)"
```
## 7. 结果判定
Lab1 主要检查点是:
- 合法 SysY 程序可以被 `SysY.g4` 成功解析
- `--emit-parse-tree` 能输出语法树
- `test/test_case` 下样例可以批量通过语法树模式
本项目当前实现中Lab1 的重点是“语法分析与语法树构建”,不是完整语义分析和完整 IR/汇编支持。