Files
nudt-compiler-cpp/doc/Lab1-ANTLR词法语法分析实验说明.md

114 lines
3.4 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 实现 SysY 词法/语法分析器
## 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/AstBuilder.cpp`:同步扩展 parse tree 到 AST 的构建逻辑。
- `src/ast/AstNodes.h``src/ast/AstNodes.cpp`:按新增语法补充或调整 AST 节点定义。
2. 建议同步修改的文件
- `src/ast/AstPrinter.cpp`:为新增节点补充文本 AST 输出(`--ast-dot` 仅调试辅助,不是必做要求)。
## 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 <case.sy>` 检查解析是否成功。
2. 出现报错时优先回查 `SysY.g4` 与对应 AST 构建逻辑。
可选输出控制命令:
```bash
# 仅输出 AST 文本
./build/bin/compiler --emit-ast test/test_case/simple_add.sy
# 仅输出 IR
./build/bin/compiler --emit-ir test/test_case/simple_add.sy
# 同时输出 AST 与 IR默认行为
./build/bin/compiler --emit-ast --emit-ir test/test_case/simple_add.sy
```
## 7. AST 输出相关说明(辅助)
AST 输出是调试手段,可以根据 AST 结果检查语法/词法实现逻辑问题。
**此功能完善与否不会影响整个流程的功能,可以选择性的实现**
当前仓库中的 AST 文本输出与 `AST -> dot` 导出仅覆盖“已实现的最小语法子集”,并非完整 SysY 通用版本。 后续每新增语法/节点类型时,需要在 `src/ast/AstPrinter.cpp` 中同步补充文本输出与 dot 导出逻辑。
1. 基础文本 AST 输出(默认)
```bash
./build/bin/compiler test/test_case/simple_add.sy
```
2. 图形化 AST 输出(可选)
依赖安装Ubuntu/WSL
```bash
sudo apt update
sudo apt install -y graphviz
```
生成 DOT 与 PNG
```bash
mkdir -p test/test_result/ast
./build/bin/compiler --emit-ast --ast-dot test/test_result/ast/simple_add.ast.dot test/test_case/simple_add.sy
dot -Tpng test/test_result/ast/simple_add.ast.dot -o test/test_result/ast/simple_add.ast.png
```
直接查看图片即可