(** Front door: text to statements. Wraps the generated lexer and parser so callers see one total function from source text to syntax or a positioned message. The REPL, the file runner, and the tests all enter here. *) val parse_string : string -> (Ast.statement list, string) result