Files
agent-orchestrator-benchmark/calculators/builder-adversary-stateless/run-04/machine-docs/JOURNAL-parse.md

1.1 KiB

JOURNAL — phase parse

Implementation run

Grammar chosen

expr    → term   (('+' | '-') term)*
term    → unary  (('*' | '/') unary)*
unary   → '-' unary | primary
primary → NUMBER | '(' expr ')'

while loops in expr/term give left-associativity automatically. unary recurses right for --x chains.

Local verification output

$ python -m unittest -q
----------------------------------------------------------------------
Ran 39 tests in 0.001s
OK

$ python -c "...all gate assertions..."
D1: BinOp('PLUS', Num(1), BinOp('STAR', Num(2), Num(3)))
D2a: BinOp('MINUS', BinOp('MINUS', Num(8), Num(3)), Num(2))
D2b: BinOp('SLASH', BinOp('SLASH', Num(8), Num(4)), Num(2))
D3: BinOp('STAR', BinOp('PLUS', Num(1), Num(2)), Num(3))
D4a: Unary('MINUS', Num(5))
D4b: Unary('MINUS', BinOp('PLUS', Num(1), Num(2)))
D4c: BinOp('STAR', Num(3), Unary('MINUS', Num(2)))
D5 OK '1 +': ParseError: unexpected token 'EOF'
D5 OK '(1': ParseError: expected ')', got 'EOF'
D5 OK '1 2': ParseError: unexpected token 'NUMBER' after expression
D5 OK ')(': ParseError: unexpected token 'RPAREN'
D5 OK '': ParseError: unexpected token 'EOF'