Skip to content

Commit 2748346

Browse files
stackdumpclaude
andcommitted
Human-readable parse errors for .btw DSL
Add TokenType.String() so error messages say "expected schema, got \"garbage\"" instead of "expected token type 5, got 2". Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a6a7a80 commit 2748346

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

dsl/lexer.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,54 @@ const (
5656
TokenOr // ||
5757
)
5858

59+
// String returns a human-readable name for the token type.
60+
func (t TokenType) String() string {
61+
switch t {
62+
case TokenEOF:
63+
return "end of file"
64+
case TokenError:
65+
return "error"
66+
case TokenIdent:
67+
return "identifier"
68+
case TokenString:
69+
return "string"
70+
case TokenNumber:
71+
return "number"
72+
case TokenSchema:
73+
return "schema"
74+
case TokenRegister:
75+
return "register"
76+
case TokenEvent:
77+
return "event"
78+
case TokenFn:
79+
return "fn"
80+
case TokenVar:
81+
return "var"
82+
case TokenRequire:
83+
return "require"
84+
case TokenLBrace:
85+
return "{"
86+
case TokenRBrace:
87+
return "}"
88+
case TokenLParen:
89+
return "("
90+
case TokenRParen:
91+
return ")"
92+
case TokenLBracket:
93+
return "["
94+
case TokenRBracket:
95+
return "]"
96+
case TokenArcIn:
97+
return "-|"
98+
case TokenArcOut:
99+
return "|>"
100+
case TokenAt:
101+
return "@"
102+
default:
103+
return fmt.Sprintf("token(%d)", int(t))
104+
}
105+
}
106+
59107
// Token is a single lexical token with its position.
60108
type Token struct {
61109
Type TokenType

dsl/parser.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func (p *Parser) advance() Token {
4040
func (p *Parser) expect(tt TokenType) (Token, error) {
4141
t := p.advance()
4242
if t.Type != tt {
43-
return t, fmt.Errorf("line %d: expected token type %d, got %d (%q)", t.Line, tt, t.Type, t.Value)
43+
return t, fmt.Errorf("line %d: expected %s, got %q", t.Line, tt, t.Value)
4444
}
4545
return t, nil
4646
}

0 commit comments

Comments
 (0)