diff options
Diffstat (limited to 'src/lex.c')
-rw-r--r-- | src/lex.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -208,6 +208,21 @@ lex_number(struct lexer *lexer, struct token *out) return out->token; } +static enum lexical_token +lex_string(struct lexer *lexer, struct token *out, uint32_t delim) +{ + uint32_t c; + while ((c = next(lexer)) != C_EOF && c != delim) { + push(lexer, c); + } + + out->info.str = strdup(lexer->buf); + + clear(lexer); + out->token = T_STRING; + return out->token; +} + enum lexical_token lex(struct lexer *lexer, struct token *out) { @@ -349,6 +364,9 @@ lex(struct lexer *lexer, struct token *out) case '_': out->token = T_UNDERSCORE; break; + case '"': + case '`': + return lex_string(lexer, out, c); } } |