artifacts: add calculators/ — the 30 built calculators (5/variant) + machine-docs + git logs
This commit is contained in:
@ -0,0 +1,32 @@
|
||||
# JOURNAL-parse.md
|
||||
|
||||
## 2026-06-15 — Build + verify
|
||||
|
||||
Lex phase DONE. Token kinds: NUMBER, PLUS, MINUS, STAR, SLASH, LPAREN, RPAREN, EOF.
|
||||
|
||||
Grammar chosen (iterative at each level → left associativity by construction):
|
||||
```
|
||||
expr → term (('+' | '-') term)*
|
||||
term → unary (('*' | '/') unary)*
|
||||
unary → '-' unary | primary
|
||||
primary → NUMBER | '(' expr ')'
|
||||
```
|
||||
|
||||
### Manual verification output
|
||||
|
||||
```
|
||||
D1 1+2*3: BinOp('+', Num(1), BinOp('*', Num(2), Num(3)))
|
||||
D2 8-3-2: BinOp('-', BinOp('-', Num(8), Num(3)), Num(2))
|
||||
D2 8/4/2: BinOp('/', BinOp('/', Num(8), Num(4)), Num(2))
|
||||
D3 (1+2)*3: BinOp('*', BinOp('+', Num(1), Num(2)), Num(3))
|
||||
D4 -5: Unary('-', Num(5))
|
||||
D4 -(1+2): Unary('-', BinOp('+', Num(1), Num(2)))
|
||||
D4 3*-2: BinOp('*', Num(3), Unary('-', Num(2)))
|
||||
D5 '1 +' -> ParseError: unexpected end of input
|
||||
D5 '(1' -> ParseError: unclosed parenthesis
|
||||
D5 '1 2' -> ParseError: unexpected token 'NUMBER' (2) after expression
|
||||
D5 ')(' -> ParseError: unexpected token 'RPAREN' (')')
|
||||
D5 '' -> ParseError: empty input
|
||||
```
|
||||
|
||||
Test run: `Ran 48 tests in 0.001s — OK` (21 lex + 27 parser)
|
||||
Reference in New Issue
Block a user