【发布时间】:2022-10-14 23:55:36
【问题描述】:
当 antlr 为访问者模式生成 java 代码时,我们得到了一个访问者基类。
public class YxBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements YxVisitor<T> {
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitProgram(YxParser.ProgramContext ctx) { return visitChildren(ctx); }
}
我有一个来自YxBaseVisitor 的名为ASTBuilder 的派生类。所以当我需要使用ASTBuilder访问ParseTree节点时,我会调用函数
ParseTree parseTreeRoot = parser.program();
ASTBuilder astBuilder = new ASTBuilder(gScope);
ASTRoot = (RootNode)astBuilder.visit(parseTreeRoot);
这段代码调用了ASTBuilder的visit方法,但是ASTBuilder没有定义visit方法,而是继承自AbstractParseTreeVisitor的visit,这也是antlr生成的。
但是,visit 是用return null; 定义的,我没有找到其他覆盖访问来分发不同类型的ParseTree 节点。
访问模式是如何工作的?
【问题讨论】:
标签: java antlr4 visitor-pattern