2013-05-02 79 views
24

使用Java 7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想查找具有特定名称的方法,然后仅打印出该方法。我发现我可以在匹配时使用methodDeclaration规则。于是我继承Java7BaseListener和覆盖这个监听方法:如何获取antlr4规则匹配的原始文本?

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

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

回答

32

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); 
+13

如果您没有访问或不希望保留'CharStream'的轨道,使用'ctx.start.getInputStream()'来检索它。 – Peter 2014-07-03 16:23:12

+0

CharStream input = ctx.start.getInputStream(); input.getText(interval); 给我运行时错误.checkBoundsOffCount(String.java:3101) – 2018-02-02 02:30:50

+0

而且它没有失败它仍然删除空白 – 2018-02-02 02:32:52