Я хочу использовать шаблон посетителя, чтобы пройти ParserRuleContext и построить AST, используя предопределенные узлы.
В моей грамматике у меня есть следующее правило:
expr
: loop
| block
Я хотел бысоздайте AST, который имеет следующую структуру:
exprNode
/
loopNode
Сгенерированный Antlr BaseVisitor
имеет следующий метод:
public T visitExpr(MyParser.ExprContext ctx) { return visitChildren(ctx); }
ASTBuilder
переопределяет этот метод и создаетexprNode
.К этому exprNode
я хочу добавить либо loopNode
, либо blockNode
, вызвав мои измененные версии visitLoop
и visitBlock
.У меня проблема в том, что я не знаю личность expr
, поскольку я только получил exprContext
от родителя.Как проверить, какой вызов правила expr
использовался?