added floats, negative numbers

This commit is contained in:
afonya 2025-06-16 18:51:34 +02:00
parent 8aee85680a
commit cef2217c9e
Signed by: afonya
GPG key ID: EBB9C4CAFAAFB2DC
7 changed files with 79 additions and 82 deletions

View file

@ -35,7 +35,7 @@ pub struct AstString {
}
#[derive(Debug, Clone, PartialEq)]
pub struct AstNumber {
pub value: i64,
pub value: f64,
pub pos: usize
}
#[derive(Debug, Clone, PartialEq)]
@ -418,7 +418,7 @@ fn read_table(input: &Vec<Token>, pos: &mut usize, ctx: &Context) -> ASTPart {
tbl.push(TableValue { key: keyy, value: value, pos: input[*pos].pos });
} else {
let value = read_exp(pos, input, &ends, &ends, ctx);
tbl.push(TableValue { key: ASTPart::Number(AstNumber { value: key, pos: 0 }), value: value, pos: input[*pos].pos });
tbl.push(TableValue { key: ASTPart::Number(AstNumber { value: key as f64, pos: 0 }), value: value, pos: input[*pos].pos });
key += 1;
}
if input[*pos].typ == TokenType::SEPARATOR && input[*pos].value == "}" {
@ -461,7 +461,25 @@ fn read_exp(pos: &mut usize, input: &Vec<Token>, ends: &Vec<Token>, parse_ends:
if token.typ == TokenType::STRING {
expressions.push(ASTPart::String(AstString { value: token.value.clone(), pos: token.pos }));
} else if token.typ == TokenType::NUMBER {
expressions.push(ASTPart::Number(AstNumber { value: token.value.parse().unwrap(), pos: token.pos }));
if expressions.len() == 1 {
match &expressions[0] {
ASTPart::Operation(op) => {
if op.operator == "+" || op.operator == "-" {
let mut nm = op.operator.clone();
nm.push_str(&token.value);
expressions.push(ASTPart::Number(AstNumber { value: nm.parse().unwrap(), pos: token.pos }));
expressions.remove(0);
} else {
expressions.push(ASTPart::Number(AstNumber { value: token.value.parse().unwrap(), pos: token.pos }));
}
},
_ => {
expressions.push(ASTPart::Number(AstNumber { value: token.value.parse().unwrap(), pos: token.pos }));
}
}
} else {
expressions.push(ASTPart::Number(AstNumber { value: token.value.parse().unwrap(), pos: token.pos }));
}
} else if token.typ == TokenType::KEYWORD {
if token.value == "piszv" {
expressions.push(ASTPart::Boolean(AstBool { value: true, pos: token.pos }));