Feat: new euclidean words and sugar for floating point numbers

This commit is contained in:
2026-02-05 01:30:34 +01:00
parent 53fb3eb759
commit c92a29ab85
9 changed files with 237 additions and 2 deletions

View File

@@ -86,9 +86,25 @@ fn tokenize(input: &str) -> Vec<Token> {
}
let span = SourceSpan { start, end };
if let Ok(i) = word.parse::<i64>() {
// Normalize shorthand float syntax: .25 -> 0.25, -.5 -> -0.5
let word_to_parse = if word.starts_with('.')
&& word.len() > 1
&& word.as_bytes()[1].is_ascii_digit()
{
format!("0{word}")
} else if word.starts_with("-.")
&& word.len() > 2
&& word.as_bytes()[2].is_ascii_digit()
{
format!("-0{}", &word[1..])
} else {
word.clone()
};
if let Ok(i) = word_to_parse.parse::<i64>() {
tokens.push(Token::Int(i, span));
} else if let Ok(f) = word.parse::<f64>() {
} else if let Ok(f) = word_to_parse.parse::<f64>() {
tokens.push(Token::Float(f, span));
} else {
tokens.push(Token::Word(word, span));