Да, есть (при условии, что вы используете ParserRuleContext.getText()
. Идея состоит в том, чтобы запросить входной поток символов для диапазона символов. Значения позиций сохраняются в начальных и конечных токенах контекста.
Вот некоторый код (преобразованный из C ++, поэтому он может быть не на 100% правильным):
string sourceTextForContext(ParseTree context) {
Token startToken = (context.start instanceof TerminalNode) ? (TerminalNode)(start).getSymbol() : (ParserRuleContext)(start).start;
Token stopToken = (context.stop instanceof TerminalNode) ? (TerminalNode)(stop).getSymbol() : (ParserRuleContext)(stop).start;
CharStream cs = start.getTokenSource().getInputStream();
int stopIndex = stop != null ? stop.getStopIndex() : -1;
return cs.getText(new Interval(start.getStartIndex(), stopIndex));
}
Поскольку эта поисковая функция использует абсолютные индексы символов, она не учитывается ни в одном из возможных правил пробелов..