# JOURNAL-parse ## Session 1 Built `calc/parser.py` — recursive-descent parser with grammar: - `expr → term (('+' | '-') term)*` - `term → unary (('*' | '/') unary)*` - `unary → '-' unary | primary` - `primary → NUMBER | '(' expr ')'` Left associativity achieved via iterative loops (not recursion) in `expr` and `term`. Unary minus handled in its own `unary` rule, which recurses right. Built `calc/test_parser.py` with 19 tests (35 total including lex tests) covering D1–D5. All DoD gates passed on first run.