Package parser implements a hand-written recursive-descent parser that
turns TDL source text into an ast.File. It collects every syntax error
it finds in one pass rather than stopping at the first, so tooling like
`tdl check` can report a complete list of problems.
The parser covers the whole grammar in docs/grammar.ebnf.
Parse reads and parses a single TDL source file. On success it returns
the parsed ast.File; on failure it returns a nil file and an
*ErrorList describing every syntax error found.
ErrorList is a non-empty list of parse errors, returned by Parse when
parsing fails. It reports every syntax error found in one pass rather
than stopping at the first.