如何获取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);