aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-09-12 12:32:39 +0200
committerHimbeer <himbeer@disroot.org>2024-09-12 12:34:27 +0200
commit3642954f1715e43fa33f404315d18a8061c29050 (patch)
tree1ecc8f26a7c5e04a04b34c9ed390ef602b92b271 /src
parent122f416c3f5d6f8081c548659d81e0938a055de1 (diff)
Include strings in lexical analysis
Diffstat (limited to 'src')
-rw-r--r--src/lex.c18
-rw-r--r--src/main.c3
2 files changed, 20 insertions, 1 deletions
diff --git a/src/lex.c b/src/lex.c
index 4d75968..9d85d84 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -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);
}
}
diff --git a/src/main.c b/src/main.c
index 5e72619..a41a62c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,7 +43,8 @@ main(int argc, char *argv[])
struct token token;
while (lex(&lexer, &token) != T_EOF) {
printf("%d", token.token);
- if (token.token == T_IDENT || token.token == T_NAME) {
+ if (token.token == T_IDENT || token.token == T_NAME
+ || token.token == T_STRING) {
printf(" %s", token.info.str);
} else if (token.token == T_NUMBER
&& token.info.num.isfloat) {