Feat: new euclidean words and sugar for floating point numbers
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user