fix(frontend): 修复部分实现
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Lab1:语法树构建
|
||||
# Lab1:构建antlr规则生成语法树
|
||||
|
||||
## 1. 本实验定位
|
||||
|
||||
@@ -16,13 +16,10 @@ Lab1 聚焦前端第一步:词法/语法分析。
|
||||
|
||||
## 3. Lab1 需要补充的内容
|
||||
|
||||
1. 必须修改的文件
|
||||
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` 仅调试辅助,不是必做要求)。
|
||||
- `src/frontend/AntlrDriver.cpp`:解析入口与错误处理。
|
||||
- `src/frontend/SyntaxTreePrinter.cpp`:语法树打印逻辑(用于调试验证)。
|
||||
|
||||
|
||||
|
||||
@@ -64,50 +61,11 @@ java -jar third_party/antlr-4.13.2-complete.jar \
|
||||
|
||||
按提供的测试输入回归验证:
|
||||
|
||||
1. 运行 `./build/bin/compiler <case.sy>` 检查解析是否成功。
|
||||
2. 出现报错时优先回查 `SysY.g4` 与对应 AST 构建逻辑。
|
||||
1. 运行 `./build/bin/compiler --emit-parse-tree <case.sy>` 检查解析是否成功。
|
||||
2. 出现报错时优先回查 `SysY.g4` 逻辑。
|
||||
|
||||
可选输出控制命令:
|
||||
|
||||
```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
|
||||
# 仅输出语法树
|
||||
./build/bin/compiler --emit-parse-tree 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
|
||||
```
|
||||
|
||||
直接查看图片即可
|
||||
|
||||
Reference in New Issue
Block a user