refactor(frontend): 添加对只编译前端的支持

This commit is contained in:
jing
2026-03-17 18:18:55 +08:00
parent 10ea8aad14
commit a091d9108a
6 changed files with 126 additions and 62 deletions

View File

@@ -7,7 +7,7 @@
| 实验 | 名称 | 任务/目标 |
| --- | --- | --- |
| Lab1 | 语法树构建 | 基于 SysY 源程序完成语法分析与语法树构建,并按约定输出语法树 |
| Lab1 | 语法树构建 | 基于 SysY 源程序完成语法分析与语法树构建;建议使用 `COMPILER_PARSE_ONLY=ON` 仅构建前端,并通过 `--emit-parse-tree` 输出语法树 |
| Lab2 | 中间表示生成 | 将语法树翻译为 LLVM 风格的中间表示IR并输出 IR |
| Lab3 | 指令选择与汇编生成 | 将 IR 翻译为目标平台汇编代码(本项目以 ARM64/AArch64 为主) |
| Lab4 | 基本标量优化 | 实现常见的标量优化(如常量传播、死代码删除、简化 CFG 等) |
@@ -71,16 +71,33 @@ java -jar third_party/antlr-4.13.2-complete.jar \
src/antlr4/SysY.g4
```
### 3.2 CMake 构建
### 3.2 Lab1 语法树构建
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCOMPILER_PARSE_ONLY=ON
cmake --build build -j "$(nproc)"
```
该模式只构建前端解析与语法树打印,不编译 `sem` / `irgen` / `mir`,适合 Lab1。
构建成功后,可执行文件位于:`./build/bin/compiler`
### 3.3 运行自检
运行语法树打印:
```bash
./build/bin/compiler --emit-parse-tree test/test_case/functional/simple_add.sy
```
### 3.3 全量构建
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCOMPILER_PARSE_ONLY=OFF
cmake --build build -j "$(nproc)"
```
该模式会继续编译 `sem` / `irgen` / `mir`,用于后续实验。
### 3.4 运行自检
运行帮助信息能正常输出,说明基本环境与可执行文件均正常:
@@ -88,7 +105,9 @@ cmake --build build -j "$(nproc)"
./build/bin/compiler --help
```
跑完整编译流程自检:从 SysY 源码生成 AArch64 汇编,完成汇编、链接,在 QEMU 下运行结果程序,并与 `test/test_case` 下同名 `.out` 自动比对:
若当前处于 Lab1只需检查语法树输出是否符合预期。
若需要跑完整编译流程自检,则先使用全量构建模式,再执行下面的命令:从 SysY 源码生成 AArch64 汇编,完成汇编、链接,在 QEMU 下运行结果程序,并与 `test/test_case` 下同名 `.out` 自动比对:
```bash
./scripts/verify_asm.sh test/test_case/functional/simple_add.sy test/test_result/function/asm --run