diff options
Diffstat (limited to 'src/lexer.c')
-rw-r--r-- | src/lexer.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lexer.c b/src/lexer.c index 0aa26c1..e5bea2e 100644 --- a/src/lexer.c +++ b/src/lexer.c | |||
@@ -14,6 +14,7 @@ typedef enum TokenKind { | |||
14 | TOK_RCURLY, // } | 14 | TOK_RCURLY, // } |
15 | 15 | ||
16 | // Basic literals. | 16 | // Basic literals. |
17 | TOK_CHAR, | ||
17 | TOK_NUM_INT, | 18 | TOK_NUM_INT, |
18 | TOK_NUM_FLOAT, | 19 | TOK_NUM_FLOAT, |
19 | TOK_SYMBOL, | 20 | TOK_SYMBOL, |
@@ -82,6 +83,7 @@ Str token_str[] = { | |||
82 | [TOK_RCURLY] = cstr("RCURLY"), | 83 | [TOK_RCURLY] = cstr("RCURLY"), |
83 | 84 | ||
84 | // Basic literals. | 85 | // Basic literals. |
86 | [TOK_CHAR] = cstr("CHAR"), | ||
85 | [TOK_NUM_INT] = cstr("INUMBER"), | 87 | [TOK_NUM_INT] = cstr("INUMBER"), |
86 | [TOK_NUM_FLOAT] = cstr("FNUMBER"), | 88 | [TOK_NUM_FLOAT] = cstr("FNUMBER"), |
87 | [TOK_SYMBOL] = cstr("SYMBOL"), | 89 | [TOK_SYMBOL] = cstr("SYMBOL"), |
@@ -237,6 +239,7 @@ scan_is_valid_split(char c) { | |||
237 | case '"': | 239 | case '"': |
238 | case ' ': | 240 | case ' ': |
239 | case ',': | 241 | case ',': |
242 | case '\'': | ||
240 | case '\f': | 243 | case '\f': |
241 | case '\n': | 244 | case '\n': |
242 | case '\r': | 245 | case '\r': |
@@ -489,6 +492,13 @@ scan_token(Scanner *scanner) { | |||
489 | case ':': return emit_token(current, scanner, TOK_COLON); | 492 | case ':': return emit_token(current, scanner, TOK_COLON); |
490 | case '.': return emit_token(current, scanner, TOK_DOT); | 493 | case '.': return emit_token(current, scanner, TOK_DOT); |
491 | case '@': return emit_token(current, scanner, TOK_AT); | 494 | case '@': return emit_token(current, scanner, TOK_AT); |
495 | case '\'': { | ||
496 | c = scan_next(scanner); | ||
497 | if (scan_next(scanner) == '\'') { | ||
498 | return emit_token(current, scanner, TOK_CHAR); | ||
499 | } | ||
500 | return emit_token_err(¤t, cstr("mismatched char quote")); | ||
501 | }; | ||
492 | case '"': { | 502 | case '"': { |
493 | while (scan_has_next(scanner)) { | 503 | while (scan_has_next(scanner)) { |
494 | c = scan_next(scanner); | 504 | c = scan_next(scanner); |