微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析文件时,ANTLR 的访问者系统可以自动访问规则上下文吗?

如何解决解析文件时,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 举报,一经查实,本站将立刻删除。