actionIndex method

int actionIndex(
  1. int state,
  2. int symbol
)

Implementation

int actionIndex(int state, int symbol) {
  if (state < 0 || state >= stateCount || symbol < 0) return 0;
  if (state < parseTable.length) {
    final row = parseTable[state];
    return symbol < row.length ? row[symbol] : 0;
  }
  final smallIndex = state - largeStateCount;
  if (smallIndex >= smallParseTableMap.length) return 0;
  var position = smallParseTableMap[smallIndex];
  if (position >= smallParseTable.length) return 0;
  final groupCount = smallParseTable[position++];
  for (var group = 0; group < groupCount; group++) {
    if (position + 1 >= smallParseTable.length) return 0;
    final value = smallParseTable[position++];
    final count = smallParseTable[position++];
    for (var index = 0; index < count; index++) {
      if (position >= smallParseTable.length) return 0;
      if (smallParseTable[position++] == symbol) return value;
    }
  }
  return 0;
}