artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs
This commit is contained in:
@ -0,0 +1,50 @@
|
||||
# REVIEW — parse phase (Adversary)
|
||||
|
||||
## Status
|
||||
All gates verified. Awaiting Builder to write ## DONE to STATUS-parse.md.
|
||||
|
||||
## Gate verdicts
|
||||
|
||||
**D1 (precedence): PASS** @2026-06-15T03:40Z
|
||||
- `parse(tokenize('1+2*3'))` → `BinOp(op='+', left=Num(value=1), right=BinOp(op='*', left=Num(value=2), right=Num(value=3)))` ✓
|
||||
- `parse(tokenize('2*3+1'))` → `BinOp(op='+', left=BinOp(op='*', ...), right=Num(1))` ✓
|
||||
- `parse(tokenize('2+3*4*5'))` → `+` at root, nested `*` tree under right ✓
|
||||
|
||||
**D2 (left assoc): PASS** @2026-06-15T03:40Z
|
||||
- `8-3-2` → `BinOp('-', BinOp('-', Num(8), Num(3)), Num(2))` ✓
|
||||
- `8/4/2` → `BinOp('/', BinOp('/', Num(8), Num(4)), Num(2))` ✓
|
||||
- `12/6*2` → `BinOp('*', BinOp('/', Num(12), Num(6)), Num(2))` ✓ (left-assoc across same-level ops)
|
||||
- `1-2+3` → `BinOp('+', BinOp('-', Num(1), Num(2)), Num(3))` ✓
|
||||
|
||||
**D3 (parentheses): PASS** @2026-06-15T03:40Z
|
||||
- `(1+2)*3` → `BinOp('*', BinOp('+', Num(1), Num(2)), Num(3))` ✓
|
||||
- `((3))` → `Num(3)` ✓
|
||||
|
||||
**D4 (unary minus): PASS** @2026-06-15T03:40Z
|
||||
- `-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)))` ✓ (right-recursive _unary)
|
||||
- `-(-5)` → `Unary('-', Unary('-', Num(5)))` ✓
|
||||
|
||||
**D5 (errors): PASS** @2026-06-15T03:40Z
|
||||
All 5 plan-mandated cases raise `ParseError` (not a Python built-in):
|
||||
- `'1 +'` → ParseError ✓
|
||||
- `'(1'` → ParseError ✓
|
||||
- `'1 2'` → ParseError ✓
|
||||
- `')('` → ParseError ✓
|
||||
- `''` → ParseError ✓
|
||||
Additional probes also raise `ParseError`: `*5`, `()`, `1+2)`, `+-5`, `+` alone.
|
||||
|
||||
**D6 (tests green): PASS** @2026-06-15T03:40Z
|
||||
- `python -m unittest -q` → `Ran 36 tests in 0.001s` / `OK` ✓
|
||||
- Tests assert on tree structure via dataclass equality (not evaluation) ✓
|
||||
- 7 error-case tests, 20 structural tests across D1–D4
|
||||
|
||||
## Adversary findings
|
||||
|
||||
None. No defects found.
|
||||
|
||||
## Implementation notes (post-verdict)
|
||||
Recursive-descent parser is structurally sound: `_expr → _term → _unary → _primary`.
|
||||
`ParseError(Exception)` is a proper subclass. EOF sentinel token prevents index OOB.
|
||||
Reference in New Issue
Block a user