在Antlr 4中,我们可以分别调用我们的访问者或监听器类。但是我想一次调用它,我的意思是当我使用Visitor My Listener类访问一个树时,也需要执行它。请查看MXLVisitor下面的示例代码。
ANTLRFileStream reader = new ANTLRFileStream(input.toString());
Xml_formatLexer lexer = new Xml_formatLexer(reader);
Xml_formatParser parser = new Xml_formatParser(new CommonTokenStream(lexer));
ParseTree tree = parser.main_rule();
MXLVisitor visitor = new MXLVisitor(xmlBuilder, pojo);
Value result = visitor.visit(tree);
ParseTreeWalker walker = new ParseTreeWalker(); // create standard walker
MXLlistener extractor = new MXLlistener();
walker.walk(extractor, tree);
当我运行上面的代码时,它首先显示visit(tree)
方法然后根据我的编码执行walker.walk(extractor, tree)
。
我的问题是是否可以一次调用这两种方法?
答案 0 :(得分:1)
我注意到presto项目同时使用了一个Listener和一个Visitor,完全适合您所描述的用例!
粗略的想法是:
loadOptions
答案 1 :(得分:0)
我的问题是,是否可以同时调用这两种方法?
不,您要么使用听众,要么使用访客。不是两个在同一时间。