docs(doc): 补充 lab1 ANTLR 生成与构建说明

master
Lane0218 3 months ago
parent 90dc2ff8de
commit 77bee889d7

@ -0,0 +1,86 @@
# Lab1 HandoutANTLR 接入与构建指令
本文档说明如何在本工程中使用 ANTLRC++ 目标)生成解析器代码,并完成编译构建。
## 1. 目录约定(与 doc/目录结构设计.md 一致)
- 文法文件(提交到仓库):
- `src/antlr4/SysY.g4`
- ANTLR 自动生成文件(不提交到仓库):
- 统一输出到构建目录:`<build_dir>/generated/antlr4/`
- 典型文件:`SysYLexer.*`、`SysYParser.*`、`SysYBaseVisitor.*`、`SysYVisitor.*`、`*.tokens`、`*.interp`
- ANTLR4 C++ runtime提交到仓库
- `third_party/antlr4-runtime-4.13.2/`
- 工程通过 CMake 直接构建并链接该 runtime无需系统安装 antlr4-runtime
## 2. 生成代码(启用 -visitor
说明:
- 本实验不提供脚本,请手动执行以下命令。
- 生成时启用 `-visitor`,并关闭 listener`-no-listener`)。
### 2.1 前置依赖
- Java用于运行 `antlr-*.jar`
- ANTLR4 完整 jar本仓库已内置 4.13.2
本仓库内置 jar 路径:
- `third_party/antlr-4.13.2-complete.jar`
### 2.2 生成命令
假设构建目录为 `build/`(可自行替换为 `build-debug/`、`out/` 等):
```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
```
生成完成后,请确认目录 `build/generated/antlr4/` 中出现:
- `SysYLexer.cpp/.h`
- `SysYParser.cpp/.h`
- `SysYBaseVisitor.cpp/.h`、`SysYVisitor.cpp/.h`
## 3. 编译构建CMake
本工程默认使用:
- `third_party/antlr4-runtime-4.13.2` 提供的 C++ runtime无需额外安装
- `build/generated/antlr4/*.cpp` 作为前端解析器实现的编译输入(需要先完成第 2 节的生成)
### 3.1 配置
```bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
```
### 3.2 构建
```bash
cmake --build build -j "$(nproc)"
```
成功后应当生成:
- 可执行文件目标:`compiler`
## 4. 常见问题
### 4.1 找不到 SysYParser.h / SysYLexer.h
原因:没有先生成,或生成目录不匹配。
排查:
- 确认 `build/generated/antlr4/` 下存在生成的 `.h/.cpp`
- 如果你使用的是非 `build/` 的构建目录(例如 `out/`),则生成输出也要改为 `out/generated/antlr4/`
### 4.2 修改 SysY.g4 后编译行为未变化
原因:生成文件未更新。
解决:
- 每次修改 `src/antlr4/SysY.g4` 后都要重新执行第 2 节生成命令。
Loading…
Cancel
Save