parse method

  1. @override
ParseResult parse(
  1. String source
)
override

Attempts to parse the source string matching this element.

Returns a ParseResult containing the parsed lexeme and remaining string on success. On failure, returns a failed ParseResult.

Implementation

@override
ParseResult parse(String source) {
  final results = Stack<ParseResult>();
  var remaining = source;

  for (final element in elements) {
    final result = element.parse(remaining);
    results.push(result);

    if (!result.success) {
      // Backtrack: One part of the sequence failed, so the whole sequence fails.
      // We return the source as 'remaining' to allow the caller to retry other
      // paths if this sequence was part of an Alternatives.
      return ParseResult(
        false,
        remaining, // Original remaining before failure
        lexeme: source.substring(0, source.length - remaining.length),
        element: toString(),
        stack: results,
      );
    }
    remaining = result.remaining;
  }
  return ParseResult(
    true,
    remaining,
    lexeme: source.substring(0, source.length - remaining.length),
    element: toString(),
    stack: results,
  );
}