664 B
664 B
JOURNAL-parse
Design decisions
- Grammar: classic 3-level recursive descent:
expr → term (('+' | '-') term)*(lowest precedence)term → unary (('*' | '/') unary)*(medium)unary → '-' unary | primary(right-recursive for stacked unary)primary → NUMBER | '(' expr ')'
- Left associativity falls out naturally from the
whileloops in_exprand_term. - Unary is right-recursive (
--5 → nested Unary) as is conventional. - Empty input detected early at
parse()entry before any descent. - Trailing tokens detected after
_expr()returns, before EOF check.