Recursive-descent parser for Lex. Pratt-style precedence climbing for binary operators; everything else is straightforward LL(1)-with-lookahead.