context.getText() 排除 ANTLR4 中的空格

context.getText() excludes spaces in ANTLR4

getText() returns 完整的语句不包括单词之间的空格。考虑空格的一种方法是将它们包含在语法中。但是,有没有其他方法可以得到考虑空格的完整字符串。

是的,有(假设你在这里使用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));
}

由于此检索函数使用绝对字符索引,因此它不计入任何可能的空白规则。