parse method

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

Parses the input and returns a result wrapped in Result if successful, null otherwise.

Implementation

@override
Result<(List<O1>, O2)>? parse(State<I> state) {
  final r1 = end.parse(state);
  if (r1 != null) {
    return Result(([], r1.value));
  }

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

  final list = [r2.value];
  while (true) {
    final r1 = end.parse(state);
    if (r1 != null) {
      return Result((list, r1.value));
    }

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

    list.add(r2.value);
  }
}