diff options
| author | hachem <im@hachem.wtf> | 2026-08-31 23:14:26 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-31 23:14:26 +0200 |
| commit | 9dc06d01c2224ee1dbeb11ebee7c8afecfac8b05 (patch) | |
| tree | 110fe30b5b1f228568087a8fe7b0f7e0ca43fbb1 /src/lexer | |
| parent | 5b06b0e4b8effaacd23308d6a6b26c525e7d3af4 (diff) | |
feat: add support for floats through xmm registers
Diffstat (limited to 'src/lexer')
| -rw-r--r-- | src/lexer/lexer.c | 15 | ||||
| -rw-r--r-- | src/lexer/lexer.h | 1 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 22a671c..b4fb7d7 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -191,18 +191,28 @@ struct Token scan_token(struct Lexer* lexer) advance(lexer); while (is_hex_digit(peek(lexer))) advance(lexer); + return make_token(lexer, TOKEN_INTEGER, start); } - else if (character == '0' && (peek(lexer) == 'b' || peek(lexer) == 'B')) + + if (character == '0' && (peek(lexer) == 'b' || peek(lexer) == 'B')) { advance(lexer); while (peek(lexer) == '0' || peek(lexer) == '1') advance(lexer); + return make_token(lexer, TOKEN_INTEGER, start); } - else + + while (is_digit(peek(lexer))) + advance(lexer); + + if (peek(lexer) == '.' && is_digit(lexer->current[1])) { + advance(lexer); while (is_digit(peek(lexer))) advance(lexer); + return make_token(lexer, TOKEN_FLOAT, start); } + return make_token(lexer, TOKEN_INTEGER, start); } @@ -244,6 +254,7 @@ const char* token_type_name(enum TokenType type) case TOKEN_EOF: return "eof"; case TOKEN_IDENTIFIER: return "identifier"; case TOKEN_INTEGER: return "integer"; + case TOKEN_FLOAT: return "float"; case TOKEN_STRING: return "string"; case TOKEN_CHAR: return "char"; case TOKEN_CONST: return "const"; diff --git a/src/lexer/lexer.h b/src/lexer/lexer.h index 3bc215e..5c1e868 100644 --- a/src/lexer/lexer.h +++ b/src/lexer/lexer.h @@ -8,6 +8,7 @@ enum TokenType TOKEN_EOF, TOKEN_IDENTIFIER, TOKEN_INTEGER, + TOKEN_FLOAT, TOKEN_STRING, TOKEN_CHAR, |
