parse method

  1. @override
Result<List<O1>>? parse(
  1. State<I> state
)
override

Implementation

@override
Result<List<O1>>? parse(State<I> state) {
  if (m > n) {
    throw RangeError.range(m, 0, n, 'm');
  }

  final r1 = p.parse(state);
  if (r1 == null) {
    return m == 0 ? Result([]) : null;
  }

  final list = [r1.value];
  while (list.length < n) {
    final r2 = sep.fastParse(state);
    if (!r2) {
      break;
    }

    final r3 = p.parse(state);
    if (r3 == null) {
      return null;
    }

    list.add(r3.value);
  }

  if (list.length >= m) {
    return Result(list);
  }

  return null;
}