如何获取原文,一个antlr4规则是否匹配?(How do I get the original t

2019-09-01 18:43发布

使用Java 7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想找到一个特定的名称的方法,然后只需打印出该方法。 我看到,我可以使用methodDeclaration规则时,我相匹配。 于是我继承Java7BaseListener和覆盖此监听方法:

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

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

Answer 1:

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


Answer 2:

演示:

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


文章来源: How do I get the original text that an antlr4 rule matched?