artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs

This commit is contained in:
2026-06-16 15:39:42 +00:00
parent 64bc360fc0
commit bb85aa9f11
728 changed files with 34148 additions and 0 deletions

View File

@ -0,0 +1,74 @@
# REVIEW — phase `parse`
## Verdict
review(D1-D6): PASS — all six gates verified cold at a05812d
---
## D1: PASS @2026-06-15T02:10Z
Precedence correct: `*`/`/` bind tighter than `+`/`-` via two-level grammar (`expr``_term``_unary``_primary`).
```
parse(tokenize('1+2*3')) => BinOp('+', Num(1), BinOp('*', Num(2), Num(3))) ✓
parse(tokenize('2*3+1')) => BinOp('+', BinOp('*', Num(2), Num(3)), Num(1)) ✓
parse(tokenize('9-4/2')) => BinOp('-', Num(9), BinOp('/', Num(4), Num(2))) ✓
```
## D2: PASS @2026-06-15T02:10Z
Left associativity correct: while-loops in `expr()` and `_term()` accumulate left-to-right.
```
parse(tokenize('8-3-2')) => BinOp('-', BinOp('-', Num(8), Num(3)), Num(2)) ✓
parse(tokenize('8/4/2')) => BinOp('/', BinOp('/', Num(8), Num(4)), Num(2)) ✓
parse(tokenize('1+2+3')) => BinOp('+', BinOp('+', Num(1), Num(2)), Num(3)) ✓
```
## D3: PASS @2026-06-15T02:10Z
Parentheses override precedence via `_primary()` grouping.
```
parse(tokenize('(1+2)*3')) => BinOp('*', BinOp('+', Num(1), Num(2)), Num(3)) ✓
parse(tokenize('((2+3))')) => BinOp('+', Num(2), Num(3)) ✓
```
## D4: PASS @2026-06-15T02:10Z
Unary minus handled at `_unary()`, right-recursive, correct for all cases including nested and post-operator.
```
parse(tokenize('-5')) => Unary('-', Num(5)) ✓
parse(tokenize('-(1+2)')) => Unary('-', BinOp('+', Num(1), Num(2))) ✓
parse(tokenize('3 * -2')) => BinOp('*', Num(3), Unary('-', Num(2))) ✓
parse(tokenize('--5')) => Unary('-', Unary('-', Num(5))) ✓
parse(tokenize('---5')) => Unary('-', Unary('-', Unary('-', Num(5)))) ✓
parse(tokenize('-(1+2)*3')) => BinOp('*', Unary('-', BinOp('+', Num(1), Num(2))), Num(3)) ✓
```
## D5: PASS @2026-06-15T02:10Z
All five required error cases raise `ParseError` (not any other exception). Adversarial extras also raise correctly.
```
'1 +' => ParseError ✓
'(1' => ParseError ✓
'1 2' => ParseError ✓
')(' => ParseError ✓
'' => ParseError ✓
# additional probes:
'*5' => ParseError ✓
'()' => ParseError ✓
'+' => ParseError ✓
'1+2)' => ParseError ✓
```
## D6: PASS @2026-06-15T02:10Z
`python -m unittest -q` → 30 tests, 0 failures, 0 errors.
---
Gates to verify: D1 D2 D3 D4 D5 D6 — all PASS.