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

时间:2018-05-21 07:14:21

标签: java antlr antlr4

getText()返回完整的语句,不包括单词之间的空格。考虑空间的一种方法是将它们包括在语法中。但是,有没有其他方法可以获得考虑了空格的完整String。

1 个答案:

答案 0 :(得分:4)

是的,有(假设你在使用ParserRuleContext.getText()。想法是向输入字符串流询问一系列字符。位置值存储在上下文的开始和停止标记中。 / p>

这里有一些代码(从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));
}

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