From: Alexander Goussas Date: Thu, 31 Oct 2024 02:21:31 +0000 (-0500) Subject: feat: lex integer X-Git-Url: http://git.frustrated-labs.net/?a=commitdiff_plain;h=e0029aa36f5daffb55cfdfa3e7502c56748db266;p=so-test.git feat: lex integer --- 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)