Files
nudt-compiler-cpp/doc/Lab1-语法树构建.md
2026-03-09 15:37:36 +08:00

72 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lab1构建antlr规则生成语法树
## 1. 本实验定位
本仓库是一个“最小可运行编译器框架”,当前仅实现 SysY 的极小子集(示例级功能,主要用于演示完整构建流程)。
课程目标不是停留在这个最小子集,而是让同学们在该框架上逐步补全完整 SysY并最终完成完整编译器前端、中端、后端
## 2. Lab1 要求
Lab1 聚焦前端第一步:词法/语法分析。
需要同学完成:
1. 依据 SysY 规范扩展文法 `src/antlr4/SysY.g4`
2. 通过构建流程让 ANTLR 重新生成 Lexer/Parser。
3. 让更多合法 SysY 程序可以被解析通过(不再仅限当前最小样例)。
## 3. Lab1 需要补充的内容
1. 需要修改的文件
- `src/antlr4/SysY.g4`:补全文法规则。
- `src/frontend/AntlrDriver.cpp`:解析入口与错误处理。
- `src/frontend/SyntaxTreePrinter.cpp`:语法树打印逻辑(用于调试验证)。
## 4. 当前示例实现说明
当前仓库仅实现最小子集:
1. 主要覆盖 `int main() { ... }` 这一固定函数形态。
2. 只包含少量声明/返回/表达式能力(用于演示完整流程)。
3. 示例用例位于 `test/test_case/simple_add.sy`
## 5. 构建与生成流程
典型构建命令:
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j "$(nproc)"
```
ANTLR 生成文件统一位于:
- `build/generated/antlr4/`
如需手动触发 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
```
## 6. Lab1 测试建议
按提供的测试输入回归验证:
1. 运行 `./build/bin/compiler --emit-parse-tree <case.sy>` 检查解析是否成功。
2. 出现报错时优先回查 `SysY.g4` 逻辑。
```bash
# 仅输出语法树
./build/bin/compiler --emit-parse-tree test/test_case/simple_add.sy
```