Skip to content

Commit e2e5986

Browse files
committed
Clean up Lexer
1 parent 93a7970 commit e2e5986

File tree

1 file changed

+48
-87
lines changed

1 file changed

+48
-87
lines changed

src/lexer.c

Lines changed: 48 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@ token_T* lexer_parse_html_comment_content(lexer_T* lexer) {
181181
}
182182

183183
lexer_advance(lexer);
184-
185184
lexer->state = STATE_HTML_COMMENT_CLOSE;
186185

187186
return token_init(value, TOKEN_HTML_COMMENT_CONTENT, lexer);
@@ -191,7 +190,7 @@ token_T* lexer_handle_data_state(lexer_T* lexer) {
191190
switch (lexer->current_character) {
192191
case '\n': {
193192
return lexer_advance_current(lexer, TOKEN_NEWLINE);
194-
} break;
193+
}
195194

196195
case '<': {
197196
const char next_character = lexer_peek(lexer, 1);
@@ -202,14 +201,14 @@ token_T* lexer_handle_data_state(lexer_T* lexer) {
202201
lexer_advance(lexer);
203202
lexer_advance(lexer);
204203
return token_init("<%", TOKEN_ERB_START, lexer);
205-
} break;
204+
}
206205

207206
case '/': {
208207
lexer->state = STATE_HTML_TAG_CLOSE;
209208
lexer_advance(lexer);
210209
lexer_advance(lexer);
211210
return token_init("</", TOKEN_HTML_CLOSE_TAG_START, lexer);
212-
} break;
211+
}
213212

214213
case '!': {
215214
if (lexer_peek(lexer, 2) == '-' && lexer_peek(lexer, 3) == '-') {
@@ -224,14 +223,11 @@ token_T* lexer_handle_data_state(lexer_T* lexer) {
224223
// TODO: handle this case
225224
lexer_error(lexer, "Unexpected character in lexer_handle_data_state");
226225
}
227-
228-
default: {
229-
lexer->state = STATE_HTML_TAG_OPEN;
230-
lexer_advance(lexer);
231-
return token_init("<", TOKEN_HTML_TAG_START, lexer);
232-
}
233226
}
234-
} break;
227+
228+
lexer->state = STATE_HTML_TAG_OPEN;
229+
return lexer_advance_current(lexer, TOKEN_HTML_TAG_START);
230+
}
235231

236232
case '%': {
237233
if (lexer_peek(lexer, 1) == '>') {
@@ -243,12 +239,10 @@ token_T* lexer_handle_data_state(lexer_T* lexer) {
243239
}
244240

245241
lexer_error(lexer, "Unexpected character in lexer_handle_html_attributes_state");
246-
} break;
247-
248-
default: {
249-
return lexer_parse_text_content(lexer);
250242
}
251243
}
244+
245+
return lexer_parse_text_content(lexer);
252246
}
253247

254248
token_T* lexer_handle_erb_open_state(lexer_T* lexer) {
@@ -272,12 +266,12 @@ token_T* lexer_handle_html_attributes_state(lexer_T* lexer) {
272266
switch (lexer->current_character) {
273267
case ' ': {
274268
return lexer_advance_current(lexer, TOKEN_WHITESPACE);
275-
} break;
269+
}
276270

277271
case '>': {
278272
lexer->state = STATE_DATA;
279273
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
280-
} break;
274+
}
281275

282276
case '/': {
283277
if (lexer_peek(lexer, 1) == '>') {
@@ -289,35 +283,30 @@ token_T* lexer_handle_html_attributes_state(lexer_T* lexer) {
289283

290284
// TODO: handle this case
291285
lexer_error(lexer, "Unexpected character in lexer_handle_html_attributes_state");
292-
} break;
293-
294-
default: {
295-
lexer->state = STATE_HTML_ATTRIBUTE_NAME;
296-
return lexer_parse_attribute_name(lexer);
297286
}
298287
}
288+
289+
lexer->state = STATE_HTML_ATTRIBUTE_NAME;
290+
return lexer_parse_attribute_name(lexer);
299291
}
300292

301293
// <div class="hello"></div>
302294
// ^
303295
//
304296
token_T* lexer_handle_tag_name_state(lexer_T* lexer) {
305-
306297
switch (lexer->current_character) {
307298
case ' ': {
308299
lexer->state = STATE_HTML_ATTRIBUTES;
309300
return lexer_advance_current(lexer, TOKEN_WHITESPACE);
310-
} break;
301+
}
311302

312303
case '>': {
313304
lexer->state = STATE_DATA;
314305
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
315-
} break;
316-
317-
default: {
318-
lexer_error(lexer, "Unexpected character in lexer_handle_tag_name_state");
319306
}
320307
}
308+
309+
lexer_error(lexer, "Unexpected character in lexer_handle_tag_name_state");
321310
}
322311

323312
// <div class="hello"></div>
@@ -331,12 +320,12 @@ token_T* lexer_handle_html_attribute_name_state(lexer_T* lexer) {
331320
case '=': {
332321
lexer->state = STATE_HTML_ATTRIBUTE_EQUALS;
333322
return lexer_advance_current(lexer, TOKEN_HTML_EQUALS);
334-
} break;
323+
}
335324

336325
case ' ': {
337326
lexer->state = STATE_HTML_ATTRIBUTES;
338327
return lexer_advance_current(lexer, TOKEN_WHITESPACE);
339-
} break;
328+
}
340329

341330
case '/': {
342331
if (lexer_peek(lexer, 1) == '>') {
@@ -348,116 +337,88 @@ token_T* lexer_handle_html_attribute_name_state(lexer_T* lexer) {
348337

349338
// TODO: handle this case
350339
lexer_error(lexer, "Unexpected character in lexer_handle_html_attribute_name_state");
351-
} break;
340+
}
352341

353342
case '>': {
354343
lexer->state = STATE_DATA;
355344
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
356-
} break;
357-
358-
default: {
359-
lexer_error(lexer, "Unexpected character in lexer_handle_html_attribute_name_state");
360345
}
361346
}
347+
348+
lexer_error(lexer, "Unexpected character in lexer_handle_html_attribute_name_state");
362349
}
363350

364351
token_T* lexer_handle_html_attribute_equals_state(lexer_T* lexer) {
365352
switch (lexer->current_character) {
366-
case '"': {
367-
return lexer_advance_current(lexer, TOKEN_HTML_QUOTE);
368-
} break;
369-
370-
case '\'': {
371-
return lexer_advance_current(lexer, TOKEN_HTML_QUOTE);
372-
} break;
353+
case '"':
354+
case '\'': return lexer_advance_current(lexer, TOKEN_HTML_QUOTE);
373355

374356
case ' ': {
375357
lexer->state = STATE_HTML_ATTRIBUTES;
376358
return lexer_advance_current(lexer, TOKEN_WHITESPACE);
377-
} break;
359+
}
378360

379361
case '>': {
380362
lexer->state = STATE_DATA;
381363
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
382-
} break;
383-
384-
default: {
385-
return lexer_parse_attribute_value(lexer);
386364
}
387365
}
366+
367+
return lexer_parse_attribute_value(lexer);
388368
}
389369

390370
token_T* lexer_handle_html_attribute_value_state(lexer_T* lexer) {
391371
switch (lexer->current_character) {
392372
case '"': {
393373
lexer->state = STATE_HTML_ATTRIBUTES;
394374
return lexer_advance_current(lexer, TOKEN_HTML_QUOTE);
395-
} break;
375+
}
396376

397377
case '\'': {
398378
lexer->state = STATE_HTML_ATTRIBUTES;
399379
return lexer_advance_current(lexer, TOKEN_HTML_QUOTE);
400-
} break;
380+
}
401381

402382
case ' ': {
403383
lexer->state = STATE_HTML_ATTRIBUTES;
404384
return lexer_advance_current(lexer, TOKEN_WHITESPACE);
405385
}
406-
407-
default: {
408-
lexer_error(lexer, "Unexpected character in lexer_handle_html_attribute_value_state");
409-
}
410386
}
387+
388+
lexer_error(lexer, "Unexpected character in lexer_handle_html_attribute_value_state");
411389
}
412390

413391
token_T* lexer_handle_html_tag_open_state(lexer_T* lexer) {
414-
switch (lexer->current_character) {
415-
case ' ': {
416-
lexer_error(lexer, "Unexpected character in lexer_handle_html_tag_open_state");
417-
} break;
418-
419-
default: {
420-
lexer->state = STATE_HTML_ATTRIBUTES;
421-
return lexer_parse_tag_name(lexer);
422-
}
392+
if (lexer->current_character == ' ') {
393+
lexer_error(lexer, "Unexpected character in lexer_handle_html_tag_open_state");
423394
}
395+
396+
lexer->state = STATE_HTML_ATTRIBUTES;
397+
return lexer_parse_tag_name(lexer);
424398
}
425399

426400
token_T* lexer_handle_html_tag_close_state(lexer_T* lexer) {
427-
switch (lexer->current_character) {
428-
case '>': {
429-
lexer->state = STATE_DATA;
430-
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
431-
}
432-
433-
default: {
434-
return lexer_parse_tag_name(lexer);
435-
}
401+
if (lexer->current_character == '>') {
402+
lexer->state = STATE_DATA;
403+
return lexer_advance_current(lexer, TOKEN_HTML_TAG_END);
436404
}
405+
406+
return lexer_parse_tag_name(lexer);
437407
}
438408

439409
token_T* lexer_handle_html_comment_open_state(lexer_T* lexer) {
440410
return lexer_parse_html_comment_content(lexer);
441411
}
442412

443413
token_T* lexer_handle_html_comment_close_state(lexer_T* lexer) {
444-
switch (lexer->current_character) {
445-
case '-': {
446-
if (lexer_peek(lexer, 1) == '-' && lexer_peek(lexer, 2) == '>') {
447-
lexer_advance(lexer);
448-
lexer_advance(lexer);
449-
lexer_advance(lexer);
450-
return token_init("-->", TOKEN_HTML_COMMENT_END, lexer);
451-
}
452-
453-
// TODO: handle this case
454-
lexer_error(lexer, "Unexpected character in lexer_handle_html_comment_close_state");
455-
}
456-
457-
default: {
458-
lexer_error(lexer, "Unexpected character in lexer_handle_html_comment_close_state");
459-
}
414+
if (lexer->current_character == '-' && lexer_peek(lexer, 1) == '-' && lexer_peek(lexer, 2) == '>') {
415+
lexer_advance(lexer);
416+
lexer_advance(lexer);
417+
lexer_advance(lexer);
418+
return token_init("-->", TOKEN_HTML_COMMENT_END, lexer);
460419
}
420+
421+
lexer_error(lexer, "Unexpected character in lexer_handle_html_comment_close_state");
461422
}
462423

463424
token_T* lexer_next_token(lexer_T* lexer) {

0 commit comments

Comments
 (0)