diff options
author | c+1 | 2023-10-21 09:42:04 -0400 |
---|---|---|
committer | c+1 | 2023-10-21 09:42:04 -0400 |
commit | 5a502944d161f6e3d972e94e244993c730e8a91a (patch) | |
tree | eed819600bdec825159a16a4c931a62f86abd335 /src/lexer.c | |
parent | 6fc8f91e0d96ae4b4ee59ea562574cc04fdf8abf (diff) |
invented numbers.
Diffstat (limited to 'src/lexer.c')
-rw-r--r-- | src/lexer.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lexer.c b/src/lexer.c index 7f36b98..d52029c 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -92,7 +92,14 @@ void lexer_do_reg(lexer_t* lexer) { lexer->state = LEXER_STATE_STR; break; default: - lexer_add_current_char(lexer, TOKEN_UNKNOWN); + if (isdigit(*lexer->src)) { + lexer_add_current_char(lexer, TOKEN_INT); + lexer->state = LEXER_STATE_INT; + } else { + lexer_add_current_char(lexer, TOKEN_UNKNOWN); + lexer->state = LEXER_STATE_REG; + } + } } @@ -121,11 +128,21 @@ void lexer_do_str(lexer_t* lexer) { } } +void lexer_do_int(lexer_t* lexer) { + if (isdigit(*lexer->src)) { + lexer_add_current_char_to_last_token(lexer, TOKEN_INT); + if (! isdigit(*(lexer->src + 1))) { lexer->state = LEXER_STATE_REG; } + } else { + log_err("???"); + } +} + void lexer_run(lexer_t* lexer) { while (*lexer->src) { if (lexer->state == LEXER_STATE_REG) { lexer_do_reg(lexer); } else if (lexer->state == LEXER_STATE_TAG) { lexer_do_tag(lexer); } else if (lexer->state == LEXER_STATE_STR) { lexer_do_str(lexer); } + else if (lexer->state == LEXER_STATE_INT) { lexer_do_int(lexer); } lexer->src ++; } |