Подтвердить что ты не робот

Как получить исходный текст, который соответствует правилу antlr4?

Использование грамматики Java 7 https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4 Я хочу найти методы с определенным именем, а затем просто распечатать этот метод. Я вижу, что я могу использовать правило methodDeclaration, когда я совпадаю. Итак, я подклассом Java7BaseListener и переопределяю этот метод слушателя:

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

Как получить исходный текст? ctx.getText() дает мне строку со всеми выделенными пробелами. Мне нужны комментарии и оригинальное форматирование.

4b9b3361

Ответ 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);