aboutsummaryrefslogtreecommitdiffstats
path: root/src/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c39
1 files changed, 13 insertions, 26 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 6a5621c..404082b 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -406,18 +406,12 @@ scan_token(Scanner *scanner) {
406 Scanner current = *scanner; 406 Scanner current = *scanner;
407 char c = scan_next(scanner); 407 char c = scan_next(scanner);
408 switch (c) { 408 switch (c) {
409 case '(': 409 case '(': return emit_token(current, scanner, TOK_LPAREN);
410 return emit_token(current, scanner, TOK_LPAREN); 410 case ')': return emit_token(current, scanner, TOK_RPAREN);
411 case ')': 411 case '[': return emit_token(current, scanner, TOK_LSQUARE);
412 return emit_token(current, scanner, TOK_RPAREN); 412 case ']': return emit_token(current, scanner, TOK_RSQUARE);
413 case '[': 413 case '{': return emit_token(current, scanner, TOK_LCURLY);
414 return emit_token(current, scanner, TOK_LSQUARE); 414 case '}': return emit_token(current, scanner, TOK_RCURLY);
415 case ']':
416 return emit_token(current, scanner, TOK_RSQUARE);
417 case '{':
418 return emit_token(current, scanner, TOK_LCURLY);
419 case '}':
420 return emit_token(current, scanner, TOK_RCURLY);
421 case '+': { 415 case '+': {
422 char p = scan_peek(scanner); 416 char p = scan_peek(scanner);
423 if (p >= '0' && p <= '9') { 417 if (p >= '0' && p <= '9') {
@@ -434,12 +428,9 @@ scan_token(Scanner *scanner) {
434 } 428 }
435 return emit_token(current, scanner, TOK_SUB); 429 return emit_token(current, scanner, TOK_SUB);
436 }; 430 };
437 case '*': 431 case '*': return emit_token(current, scanner, TOK_MUL);
438 return emit_token(current, scanner, TOK_MUL); 432 case '/': return emit_token(current, scanner, TOK_DIV);
439 case '/': 433 case '%': return emit_token(current, scanner, TOK_MOD);
440 return emit_token(current, scanner, TOK_DIV);
441 case '%':
442 return emit_token(current, scanner, TOK_MOD);
443 case '!': { 434 case '!': {
444 if (scan_peek(scanner) == '=') { 435 if (scan_peek(scanner) == '=') {
445 scan_next(scanner); 436 scan_next(scanner);
@@ -478,8 +469,7 @@ scan_token(Scanner *scanner) {
478 } 469 }
479 return emit_token(current, scanner, TOK_GT); 470 return emit_token(current, scanner, TOK_GT);
480 }; 471 };
481 case '~': 472 case '~': return emit_token(current, scanner, TOK_BITNOT);
482 return emit_token(current, scanner, TOK_BITNOT);
483 case '&': { 473 case '&': {
484 if (scan_peek(scanner) == '&') { 474 if (scan_peek(scanner) == '&') {
485 scan_next(scanner); 475 scan_next(scanner);
@@ -494,12 +484,9 @@ scan_token(Scanner *scanner) {
494 } 484 }
495 return emit_token(current, scanner, TOK_BITOR); 485 return emit_token(current, scanner, TOK_BITOR);
496 }; 486 };
497 case ':': 487 case ':': return emit_token(current, scanner, TOK_COLON);
498 return emit_token(current, scanner, TOK_COLON); 488 case '.': return emit_token(current, scanner, TOK_DOT);
499 case '.': 489 case '@': return emit_token(current, scanner, TOK_AT);
500 return emit_token(current, scanner, TOK_DOT);
501 case '@':
502 return emit_token(current, scanner, TOK_AT);
503 case '"': { 490 case '"': {
504 while (scan_has_next(scanner)) { 491 while (scan_has_next(scanner)) {
505 c = scan_next(scanner); 492 c = scan_next(scanner);