|
1 | 1 | package vibes |
2 | 2 |
|
3 | | -import ( |
4 | | - "fmt" |
5 | | - "strings" |
6 | | -) |
7 | | - |
8 | | -type parseError struct { |
9 | | - pos Position |
10 | | - msg string |
11 | | - source string |
12 | | -} |
13 | | - |
14 | | -func (e *parseError) Error() string { |
15 | | - var b strings.Builder |
16 | | - fmt.Fprintf(&b, "parse error at %d:%d: %s", e.pos.Line, e.pos.Column, e.msg) |
17 | | - if frame := formatCodeFrame(e.source, e.pos); frame != "" { |
18 | | - b.WriteString("\n") |
19 | | - b.WriteString(frame) |
20 | | - } |
21 | | - return b.String() |
22 | | -} |
23 | | - |
24 | 3 | type ( |
25 | 4 | prefixParseFn func() Expression |
26 | 5 | infixParseFn func(Expression) Expression |
@@ -137,85 +116,3 @@ func (p *parser) expectPeek(tt TokenType) bool { |
137 | 116 | p.errorExpected(p.peekToken, tokenLabel(tt)) |
138 | 117 | return false |
139 | 118 | } |
140 | | - |
141 | | -func (p *parser) errorExpected(tok Token, expected string) { |
142 | | - p.addParseError(tok.Pos, fmt.Sprintf("expected %s, got %s", expected, tokenLabel(tok.Type))) |
143 | | -} |
144 | | - |
145 | | -func (p *parser) errorUnexpected(tok Token) { |
146 | | - p.addParseError(tok.Pos, fmt.Sprintf("unexpected token %s", tokenLabel(tok.Type))) |
147 | | -} |
148 | | - |
149 | | -func (p *parser) addParseError(pos Position, msg string) { |
150 | | - p.errors = append(p.errors, &parseError{pos: pos, msg: msg, source: p.l.input}) |
151 | | -} |
152 | | - |
153 | | -func tokenLabel(tt TokenType) string { |
154 | | - switch tt { |
155 | | - case tokenIllegal: |
156 | | - return "invalid token" |
157 | | - case tokenEOF: |
158 | | - return "end of input" |
159 | | - case tokenIdent: |
160 | | - return "identifier" |
161 | | - case tokenInt: |
162 | | - return "integer" |
163 | | - case tokenFloat: |
164 | | - return "float" |
165 | | - case tokenString: |
166 | | - return "string" |
167 | | - case tokenSymbol: |
168 | | - return "symbol" |
169 | | - case tokenIvar: |
170 | | - return "instance variable" |
171 | | - case tokenClassVar: |
172 | | - return "class variable" |
173 | | - case tokenDef: |
174 | | - return "'def'" |
175 | | - case tokenClass: |
176 | | - return "'class'" |
177 | | - case tokenExport: |
178 | | - return "'export'" |
179 | | - case tokenSelf: |
180 | | - return "'self'" |
181 | | - case tokenPrivate: |
182 | | - return "'private'" |
183 | | - case tokenProperty: |
184 | | - return "'property'" |
185 | | - case tokenGetter: |
186 | | - return "'getter'" |
187 | | - case tokenSetter: |
188 | | - return "'setter'" |
189 | | - case tokenEnd: |
190 | | - return "'end'" |
191 | | - case tokenRaise: |
192 | | - return "'raise'" |
193 | | - case tokenReturn: |
194 | | - return "'return'" |
195 | | - case tokenYield: |
196 | | - return "'yield'" |
197 | | - case tokenDo: |
198 | | - return "'do'" |
199 | | - case tokenFor: |
200 | | - return "'for'" |
201 | | - case tokenIn: |
202 | | - return "'in'" |
203 | | - case tokenIf: |
204 | | - return "'if'" |
205 | | - case tokenElsif: |
206 | | - return "'elsif'" |
207 | | - case tokenElse: |
208 | | - return "'else'" |
209 | | - case tokenTrue: |
210 | | - return "'true'" |
211 | | - case tokenFalse: |
212 | | - return "'false'" |
213 | | - case tokenNil: |
214 | | - return "'nil'" |
215 | | - default: |
216 | | - if len(tt) == 1 || strings.HasPrefix(string(tt), "<") || strings.HasPrefix(string(tt), ">") { |
217 | | - return fmt.Sprintf("%q", string(tt)) |
218 | | - } |
219 | | - return fmt.Sprintf("%q", strings.ToLower(string(tt))) |
220 | | - } |
221 | | -} |
0 commit comments