]> git.frustrated-labs.net Git - so-test.git/commitdiff
feat: lex integer
authorAlexander Goussas <[email protected]>
Thu, 31 Oct 2024 02:21:31 +0000 (21:21 -0500)
committerAlexander Goussas <[email protected]>
Thu, 31 Oct 2024 02:21:31 +0000 (21:21 -0500)
lexer.c

diff --git a/lexer.c b/lexer.c
index a6c54ecf95ba51979cdae85cde991ab8296c3d6d..a0c3befc47fa225fe1a04c08106a53a855839f99 100644 (file)
--- a/lexer.c
+++ b/lexer.c
@@ -51,13 +51,13 @@ void so_lexer_deinit(so_lexer *l)
 
 so_token so_lexer_next_token(so_lexer *l)
 {
+    l->start = l->current;
+
     char c = so_lexer_advance(l);
 
     if (c == '\0')
         return (so_token){.lexeme = strdup("eof"), .type = SO_TT_EOF};
 
-    l->start = l->current;
-
     switch (c)
     {
     case '"':
@@ -92,8 +92,8 @@ so_token so_lexer_string(so_lexer *l)
     }
 
     char *lexeme = strndup(
-        &l->source[l->start],
-        l->current - l->start);
+        &l->source[l->start + 1],
+        l->current - l->start - 1);
 
     so_lexer_advance(l);
 
@@ -102,6 +102,14 @@ so_token so_lexer_string(so_lexer *l)
 
 so_token so_lexer_integer(so_lexer *l)
 {
+    while (!so_lexer_eof(l) && so_lexer_peek(l) >= '0' && so_lexer_peek(l) <= '9')
+        so_lexer_advance(l);
+
+    char *lexeme = strndup(
+        &l->source[l->start],
+        l->current - l->start);
+
+    return (so_token){.lexeme = lexeme, .type = SO_TT_INTEGER};
 }
 
 so_token so_lexer_bareword(so_lexer *l)