added floats, negative numbers
This commit is contained in:
parent
8aee85680a
commit
cef2217c9e
7 changed files with 79 additions and 82 deletions
src
|
@ -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 }));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue