parse method
- 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,
);
}