Implement calculating

This commit is contained in:
2026-06-13 03:12:22 +03:00
parent 1e1a6582ff
commit a4ba4bff31
2 changed files with 40 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
use crate::tokenizer::Token;
pub fn eval(tokens: Vec<Token>) -> i32 {
let mut stack = Vec::new();
for t in tokens {
match t {
Token::Number(val) => stack.push(val),
Token::Addition => {
let right = stack.pop().unwrap();
let left = stack.pop().unwrap();
stack.push(left + right);
},
Token::Substruction => {
let right = stack.pop().unwrap();
let left = stack.pop().unwrap();
stack.push(left - right);
},
Token::Multiplication => {
let right = stack.pop().unwrap();
let left = stack.pop().unwrap();
stack.push(left * right);
},
Token::Division => {
let right = stack.pop().unwrap();
let left = stack.pop().unwrap();
stack.push(left / right);
},
_ => {}
}
}
return stack.pop().unwrap();
}
+6
View File
@@ -7,6 +7,9 @@ use tokenizer::tokenizer;
mod rpn;
use rpn::to_rpn;
mod eval;
use eval::eval;
fn main() {
let stdin = io::stdin();
@@ -20,6 +23,9 @@ fn main() {
let tokens = tokenizer(&buffer);
let rpn = to_rpn(tokens);
let res = eval(rpn);
println!("= {}\n", res);
buffer.clear();
}