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

2022-09-01 01:32:03

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

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

如何获取原始文本? 给我一个字符串,上面去掉了所有的空格。我想要注释和原始格式。ctx.getText()


答案 1

ANTLR的类有一个方法,它将返回给定范围内的原始源代码。该对象具有获取开始和结束的方法。假设您的侦听器中有一个名为 CharStream 的字段正在解析,您可以执行以下操作:CharStreamgetText(Interval interval)Contextinput

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

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

推荐