# JOURNAL-parse ## Implementation notes Grammar chose iterative (not recursive) form for expr and term to ensure left-associativity without risk of right-fold bugs. Unary uses right-recursive call to handle `--5` naturally. Empty string: `tokenize("")` returns `[Token('EOF', None)]`. `primary()` sees EOF and raises ParseError — no special-case needed. `"1 2"` error: `parse()` checks that after `expr()` the current token is EOF; NUMBER is not EOF, so ParseError raised cleanly. `")("` error: `primary()` is called, sees RPAREN (not NUMBER or LPAREN), raises ParseError.