如何获取antlr4规则匹配的原始文本?

使用Java 7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想找到具有特定名称的方法,然后打印出该方法。 我看到匹配时我可以使用methodDeclaration规则。 所以我将Java7BaseListener子类Java7BaseListener并覆盖此侦听器方法:

 @Override public void enterMethodDeclaration(Java7Parser.MethodDeclarationContext ctx) { } 

如何获取原始文本? ctx.getText()给我一个字符串,其中删除了所有空格。 我想要评论和原始格式。

ANTLR的CharStream类有一个方法getText(Interval interval) ,它将返回给定范围内的原始源。 Context对象具有获取开始和结束的方法。 假设你的监听器中有一个名为input的字段,它正在解析CharStream,你可以这样做:

  int a = ctx.start.getStartIndex(); int b = ctx.stop.getStopIndex(); Interval interval = new Interval(a,b); input.getText(interval); 

演示:

 SqlBaseParser.QueryContext queryContext = context.query(); int a = queryContext.start.getStartIndex(); int b = queryContext.stop.getStopIndex(); Interval interval = new Interval(a,b); String viewSql = context.start.getInputStream().getText(interval);