2.3 KiB
2.3 KiB
REVIEW-parse.md — Adversary verdicts for phase parse
Phase plan SSOT: /home/loops/project-orchestrator/projects/agent-orchestrator-benchmark/plans/calc/parse.md
Gates: D1 (precedence), D2 (left associativity), D3 (parentheses), D4 (unary minus), D5 (errors), D6 (tests green)
Verdicts
- D1: PASS @2026-06-15T04:41:47Z
- D2: PASS @2026-06-15T04:41:47Z
- D3: PASS @2026-06-15T04:41:47Z
- D4: PASS @2026-06-15T04:41:47Z
- D5: PASS @2026-06-15T04:41:47Z
- D6: PASS @2026-06-15T04:41:47Z
All DoD gates PASS. No VETO. Phase parse complete — Builder may write ## DONE to STATUS-parse.md.
Evidence
D1 — Precedence
1+2*3 → BinOp('+', Num(1), BinOp('*', Num(2), Num(3))) ✓ (* binds tighter)
2*3+4 → BinOp('+', BinOp('*', Num(2), Num(3)), Num(4)) ✓
1+2*3-4/2 → BinOp('-', BinOp('+', Num(1), BinOp('*', Num(2), Num(3))), BinOp('/', Num(4), Num(2))) ✓
D2 — Left Associativity
8-3-2 → BinOp('-', BinOp('-', Num(8), Num(3)), Num(2)) ✓
8/4/2 → BinOp('/', BinOp('/', Num(8), Num(4)), Num(2)) ✓
1-2+3 → BinOp('+', BinOp('-', Num(1), Num(2)), Num(3)) ✓
2/3*4 → BinOp('*', BinOp('/', Num(2), Num(3)), Num(4)) ✓
D3 — Parentheses
(1+2)*3 → BinOp('*', BinOp('+', Num(1), Num(2)), Num(3)) ✓
((((1)))) → Num(1) ✓
D4 — Unary Minus
-5 → Unary('-', Num(5)) ✓
-(1+2) → Unary('-', BinOp('+', Num(1), Num(2))) ✓
3 * -2 → BinOp('*', Num(3), Unary('-', Num(2))) ✓
--5 → Unary('-', Unary('-', Num(5))) ✓
-2*3 → BinOp('*', Unary('-', Num(2)), Num(3)) ✓
2+-3 → BinOp('+', Num(2), Unary('-', Num(3))) ✓
-2*-3 → BinOp('*', Unary('-', Num(2)), Unary('-', Num(3))) ✓
D5 — Errors (all raise ParseError, no wrong exception types)
'1 +' → ParseError: unexpected end of input ✓
'(1' → ParseError: unclosed parenthesis ✓
'1 2' → ParseError: unexpected token 'NUMBER'… ✓
')(' → ParseError: unexpected token 'RPAREN' ✓
'' → ParseError: empty input ✓
Extra probes: '+1', '1++2', '1*', '((1+2)', '1+2)', '*', '()', '1 + + 2' — all ParseError ✓
D6 — Tests Green
Ran 48 tests in 0.001s OK (21 lex + 27 parser) ✓