hex literals

This commit is contained in:
2025-11-11 14:29:55 +01:00
parent 46045af4fa
commit 1e98d9d706
3 changed files with 43 additions and 18 deletions

View File

@@ -232,7 +232,7 @@ impl Tokenizer {
self.advance();
self.add_token(TokenType::String);
}
' ' | '\t' | '\r' => {}
' ' | '\r' => {}
'\n' => {
self.loc.line += 1;
self.loc.column = 1;
@@ -294,29 +294,31 @@ impl Tokenizer {
}
fn scan_number(&mut self) {
while self.peek().is_ascii_digit() {
self.advance();
}
if self.peek() == '.'
&& (self.current + 1 >= self.source.len())
&& self.source[self.current + 1].is_ascii_digit()
{
self.advance();
if self.match_char('x') {
while self.peek().is_ascii_hexdigit() {
self.advance();
}
} else {
while self.peek().is_ascii_digit() {
self.advance();
}
if self.peek() == '.'
&& self.current + 1 < self.source.len()
&& self.source[self.current + 1].is_ascii_digit()
{
self.advance();
while self.peek().is_ascii_digit() {
self.advance();
}
}
}
self.add_token(TokenType::Number);
}
fn scan_identifier(&mut self) {
while self.peek().is_alphanumeric()
|| self.peek() == '_'
|| self.peek() == '.'
|| self.peek() == '!'
{
while self.peek().is_alphanumeric() || self.peek() == '_' || self.peek() == '.' {
self.advance();
}
@@ -343,6 +345,7 @@ impl Tokenizer {
false
} else {
self.current += 1;
self.loc.column += 1;
true
}
}