consume method

Token consume()

Consume and return the {@linkplain #getCurrentToken current symbol}.

E.g., given the following input with [A] being the current lookahead symbol, this function moves the cursor to [B] and returns [A].

 A B
 ^

If the parser is not in error recovery mode, the consumed symbol is added to the parse tree using {@link ParserRuleContext#addChild}, and {@link ParseTreeListener#visitTerminal} is called on any parse listeners. If the parser is in error recovery mode, the consumed symbol is added to the parse tree using {@link #createErrorNode(ParserRuleContext, Token)} then {@link ParserRuleContext#addErrorNode(ErrorNode)} and {@link ParseTreeListener#visitErrorNode} is called on any parse listeners.

Implementation

Token consume() {
  final o = currentToken;
  if (o.type != IntStream.EOF) {
    inputStream.consume();
  }
  final hasListener = _parseListeners != null && _parseListeners!.isNotEmpty;
  if (buildParseTree || hasListener) {
    if (errorHandler.inErrorRecoveryMode(this)) {
      final node = context!.addErrorNode(createErrorNode(context!, o));
      if (_parseListeners != null) {
        for (var listener in _parseListeners!) {
          listener.visitErrorNode(node);
        }
      }
    } else {
      final node = context!.addChild(createTerminalNode(context!, o));
      if (_parseListeners != null) {
        for (var listener in _parseListeners!) {
          listener.visitTerminal(node);
        }
      }
    }
  }
  return o;
}