emitError method

void emitError(
  1. int msg_code,
  2. int name_index,
  3. int left_token,
  4. int right_token, [
  5. int scope_name_index = 0,
])

Implementation

void emitError(int msg_code, int name_index, int left_token, int right_token,
    [int scope_name_index = 0]) {
  var token_name =
      (name_index >= 0 && !(name(name_index).toUpperCase() == ('ERROR'))
          ? '\"' + name(name_index) + '\"'
          : '');

  if (msg_code == INVALID_CODE) {
    msg_code = token_name.isEmpty ? INVALID_CODE : INVALID_TOKEN_CODE;
  }

  if (msg_code == SCOPE_CODE) {
    token_name = '\"';
    for (var i = scopeSuffix(-name_index); scopeRhs(i) != 0; i++) {
      if (!isNullable(scopeRhs(i))) {
        var symbol_index = (scopeRhs(i) > NT_OFFSET
            ? nonterminalIndex(scopeRhs(i) - NT_OFFSET)
            : terminalIndex(scopeRhs(i)));
        if (name(symbol_index).isNotEmpty) {
          if (token_name.length > 1) {
            token_name += ' ';
          } // add a space separator
          token_name += name(symbol_index);
        }
      }
    }
    token_name += '\"';
  }

  tokStream.reportError(msg_code, left_token, right_token, token_name);

  return;
}