Parser: statement framework, error recovery, full SELECT coverage master
Recursive descent with keyword dispatch and Pratt expressions on the Postgres precedence table (::, subscripts, COLLATE, AT TIME ZONE, BETWEEN [SYMMETRIC], IS [NOT] DISTINCT FROM, custom operators, CASE, ARRAY[...], row constructors, EXISTS/IN/ANY/ALL, CAST, typed literals). SELECT grammar covers WITH [RECURSIVE] with MATERIALIZED and SEARCH/CYCLE, all join forms with LATERAL/USING/NATURAL, DISTINCT [ON], GROUP BY with GROUPING SETS/ROLLUP/CUBE, FILTER/WITHIN GROUP, named windows with full frame specs, set ops, and ORDER/LIMIT/OFFSET/FETCH/ FOR locking tails (LIMIT and OFFSET accepted in either order, as PG does). Statement framework: failed statements roll back into ErrorStatement nodes holding their raw tokens verbatim plus a spanned diagnostic; recovery resumes at top-level semicolons (SQLite trigger BEGIN...END bodies are not split; dollar-quoted bodies are already single tokens). Ambiguous '((SELECT' is resolved by speculative parse + backtrack. corpus-report now tracks statement-level coverage: 410/410 SELECT-ish statements in the corpus parse; parse round-trip is asserted corpus-wide in CI; new parse_roundtrip fuzz target. TREE-95 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>