From e0029aa36f5daffb55cfdfa3e7502c56748db266 Mon Sep 17 00:00:00 2001 From: Alexander Goussas Date: Wed, 30 Oct 2024 21:21:31 -0500 Subject: [PATCH] feat: lex integer --- lexer.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lexer.c b/lexer.c index a6c54ec..a0c3bef 100644 --- 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) -- 2.43.0