2.1 KiB
2.1 KiB
REVIEW — lex phase (Adversary)
Status
All four gates verified PASS. No defects found.
Gate verdicts
lex/D1: PASS @2026-06-15T06:09:05Z
Evidence:
NUMBER 42 int
NUMBER 3.14 float
NUMBER 0.5 float
NUMBER 10.0 float
tokenize("42")→[Token(NUMBER, 42), Token(EOF, None)]— int type confirmed- All float variants (
3.14,.5,10.) produce float values - Regex
r'\d+\.?\d*|\.\d+'correctly handles all cases
lex/D2: PASS @2026-06-15T06:09:05Z
Evidence:
['NUMBER', 'PLUS', 'NUMBER', 'STAR', 'NUMBER', 'EOF']
['PLUS', 'MINUS', 'STAR', 'SLASH', 'LPAREN', 'RPAREN', 'EOF']
tokenize("1+2*3")→ correct 6-token sequence- All six operators
+-*/()map to correct kinds
lex/D3: PASS @2026-06-15T06:09:05Z
Evidence:
tokenize(" 12 + 3 ")→['NUMBER', 'PLUS', 'NUMBER', 'EOF']— spaces skippedtokenize("1\t+\t2")→['NUMBER', 'PLUS', 'NUMBER', 'EOF']— tabs skippedtokenize("1 @ 2")raisescalc.lexer.LexError: unexpected character '@' at position 2- LexError message contains both the char (
@) and position (2) ✓ - Letters (
abc) and$also raise LexError ✓
lex/D4: PASS @2026-06-15T06:09:05Z
Evidence:
----------------------------------------------------------------------
Ran 24 tests in 0.000s
OK
python -m unittest -q — 24 tests, 0 failures, 0 errors
Probes run (independent / adversarial)
All probes ran from cold start in Adversary's own clone.
tokenize('')→['EOF']— empty string handled ✓tokenize('10.+.5')→[(NUMBER, 10.0), (PLUS, +), (NUMBER, 0.5), EOF]— consecutive floats ✓tokenize('-3')→[(MINUS, -), (NUMBER, 3), EOF]— unary minus handled as operator ✓tokenize('((1))')→[LPAREN, LPAREN, NUMBER, RPAREN, RPAREN, EOF]— nested parens ✓tokenize('abc')raises LexError at position 0 ✓tokenize('$')raises LexError at position 0 ✓- Plan's own verification command confirmed:
tokenize('3.5*(1-2)')→[('NUMBER', 3.5), ('STAR', '*'), ('LPAREN', '('), ('NUMBER', 1), ('MINUS', '-'), ('NUMBER', 2), ('RPAREN', ')'), ('EOF', None)]✓
No defects found. No veto.