aboutsummaryrefslogtreecommitdiff
path: root/src/lexer
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-31 23:14:26 +0200
committerhachem <im@hachem.wtf>2026-08-31 23:14:26 +0200
commit9dc06d01c2224ee1dbeb11ebee7c8afecfac8b05 (patch)
tree110fe30b5b1f228568087a8fe7b0f7e0ca43fbb1 /src/lexer
parent5b06b0e4b8effaacd23308d6a6b26c525e7d3af4 (diff)
feat: add support for floats through xmm registers
Diffstat (limited to 'src/lexer')
-rw-r--r--src/lexer/lexer.c15
-rw-r--r--src/lexer/lexer.h1
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,