Combinator-based parser powered by [winnow], with Pratt-style operator
precedence for expressions.
Tokens produced by the [MaatLexer] are collected into a flat slice, then parsed
via [winnow] stream operations. Statement dispatch uses a two-token
lookahead match; expression parsing uses a manual Pratt loop that delegates
to winnow for individual token consumption.
Example
use MaatLexer;
use MaatParser;
let input = "let x = 5 + 10;";
let lexer = new;
let mut parser = new;
let program = parser.parse;
assert_eq!;
assert_eq!;