ANTLR4前端开发专家,专注于词法/语法分析、AST构建、访问者模式。
单一职责: ANTLR4语法设计、词法/语法分析、AST构建、访问者模式
ep20/src/main/antlr4/org/teachfx/antlr4/ep20/parser/Cymbol.g4mvn generate-sources -pl ep20ASTNode.java (位于 ep20/src/main/java/org/teachfx/antlr4/ep20/ast/)accept(ASTVisitor<T>)ExprNode / StmtNode// 新节点标准实现
public class NewStmtNode extends StmtNode {
private final Type field;
public NewStmtNode(Type field) {
this.field = field;
}
@Override
public <T> T accept(ASTVisitor<T> visitor) {
return visitor.visitNewStmt(this);
}
}
→ ep-navigator (识别EP范围) ← compiler-dev (AST → IR转换)
# 1. 编辑 Cymbol.g4
vim ep20/src/main/antlr4/.../parser/Cymbol.g4
# 2. 重新生成解析器
mvn generate-sources -pl ep20
# 3. 创建AST节点
vim ep20/src/main/java/.../ast/NewNode.java
# 4. 更新AST构建器
vim ep20/src/main/java/.../pass/ast/CymbolASTBuilder.java
# 5. 测试
mvn test -pl ep20 -Dtest="*ParserTest"
# 使用TestRig可视化语法树
java -cp "antlr-4.13.2-complete.jar:ep20/target/classes" \
org.antlr.v4.gui.TestRig Cymbol file -gui test.cymbol
# 诊断冲突
mvn generate-sources -pl ep20 -Xantlr4.show-dfa
| 类型 | 规则 | 示例 |
|------|------|------|
| 变量声明 | declaration | int x; |
| 函数定义 | functionDef | int add(int a, int b) { ... } |
| 结构体 | structDef | struct Point { int x; int y; } |
| 数组 | type '[' expr? ']' | int[10] arr; |
| 控制流 | ifStmt / whileStmt | if (x > 0) { ... } |
# 语法相关
mvn generate-sources -pl ep20 # 重新生成解析器
mvn test -pl ep20 -Dtest="*Lexer*" # 测试词法
mvn test -pl ep20 -Dtest="*Parser*" # 测试语法
# AST相关
mvn test -pl ep20 -Dtest="*AST*" # 测试AST构建
mvn test -pl ep20 -Dtest="*Visitor*" # 测试访问者
# 完整前端
mvn compile -pl ep20 && mvn test -pl ep20 # 编译并测试前端
| 问题 | 原因 | 解决方案 |
|------|------|----------|
| 语法冲突 | 左递归/歧义 | 重构规则,使用语义谓词 |
| AST未生成 | 忘记运行generate-sources | mvn generate-sources -pl ep20 |
| 访问者空指针 | 新节点未实现accept() | 添加 accept(ASTVisitor<T>) |
版本: v1.0 | 垂直职责: ANTLR4前端 | 2025-12-23
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer