如何解决解析文件时,ANTLR 的访问者系统可以自动访问规则上下文吗?
我已经使用 ANTLR 一个月了,但我仍然不是专家。我想知道 ANTLR 生成的 BaseVisitor
类是否会在实现 visitRuleContext()
并且要解析的文件完成后自动访问特定的规则上下文。
解决方法
是的,如果您查看生成的访问者类,您会看到所有方法都返回 visitChildren(ctx)
。因此,当您在自己的访问者中只覆盖一个 visit...(...)
方法时,您的单个方法将被调用。
快速测试表明:
grammar T;
parse
: something+ EOF
;
something
: ANY+
| number
;
number
: DIGITS
;
DIGITS
: [0-9]+
;
ANY
: .
;
还有一个测试类:
public class Main {
public static void main(String[] args) throws Exception {
TLexer lexer = new TLexer(CharStreams.fromString("mu 123"));
TParser parser = new TParser(new CommonTokenStream(lexer));
ParseTree root = parser.parse();
new TestVisitor().visit(root);
}
}
class TestVisitor extends TBaseVisitor<Object> {
@Override
public Object visitSomething(TParser.SomethingContext ctx) {
System.out.println("visitSomething: " + ctx.getText());
return super.visitChildren(ctx);
}
}
将打印:
visitSomething: mu
visitSomething: 123
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。