parseOn method
Parses the given context.
Overridden in concrete subclasses to implement the parser-specific logic.
Takes a parse context and returns the resulting context, which is either
a Success or Failure context.
Implementation
@override
Result<SeparatedList<R, S>> parseOn(Context context) {
var current = context;
final elements = <R>[];
final separators = <S>[];
while (elements.length < min) {
if (elements.isNotEmpty) {
final separation = separator.parseOn(current);
if (separation is Failure) return separation;
current = separation;
separators.add(separation.value);
}
final result = delegate.parseOn(current);
if (result is Failure) return result;
current = result;
elements.add(result.value);
}
while (elements.length < max) {
final previous = current;
if (elements.isNotEmpty) {
final separation = separator.parseOn(current);
if (separation is Failure) break;
current = separation;
separators.add(separation.value);
}
final result = delegate.parseOn(current);
if (result is Failure) {
if (elements.isNotEmpty) separators.removeLast();
return previous.success(SeparatedList(elements, separators));
}
current = result;
elements.add(result.value);
}
return current.success(SeparatedList(elements, separators));
}