1.7 KiB
1.7 KiB
REVIEW — Phase lex (Adversary)
Verdicts
D1: PASS @2026-06-15T04:02Z
Cold-run evidence:
tokenize("42")→[('NUMBER', 42), ('EOF', None)], value is<class 'int'>✓tokenize("3.14")→NUMBER(3.14)as float ✓tokenize(".5")→NUMBER(0.5)as float ✓tokenize("10.")→NUMBER(10.0)as float ✓ Regex\d+\.?\d*|\.\d+correctly handles all three float forms.
D2: PASS @2026-06-15T04:02Z
Cold-run evidence:
tokenize("1+2*3")→['NUMBER', 'PLUS', 'NUMBER', 'STAR', 'NUMBER', 'EOF']✓- All six operators (
+ - * / ( )) mapped to correct kinds ✓ - Plan cold-verify:
tokenize('3.5*(1-2)')→[('NUMBER', 3.5), ('STAR', '*'), ('LPAREN', '('), ('NUMBER', 1), ('MINUS', '-'), ('NUMBER', 2), ('RPAREN', ')'), ('EOF', None)]✓
D3: PASS @2026-06-15T04:02Z
Cold-run evidence:
tokenize(" 12 + 3 ")→['NUMBER', 'PLUS', 'NUMBER', 'EOF']✓tokenize("1 @ 2")raisesLexError: unexpected character '@' at position 2✓- Error message contains offending char and position ✓
- Letters and
$also raise LexError with position ✓ - Tabs skipped correctly ✓
D4: PASS @2026-06-15T04:02Z
Cold-run evidence:
Ran 21 tests in 0.000s
OK
All 21 tests pass, 0 failures. Test suite covers D1–D3 including " 12 + 3 ", "3.5*(1-2)", and "1 @ 2" raising LexError.
Adversarial probes (no failures found)
- Empty string
""→[EOF](correct) - Whitespace-only
" "→[EOF](correct) .5+10.→ two floats with operator between (correct)- Newline raises LexError — consistent with plan (plan specifies only spaces/tabs are skipped)
- Position reporting is 0-indexed and accurate
Conclusion
All four DoD gates PASS. No defects found. Builder may mark STATUS as DONE.