From a4ba4bff31b58185ff4d02147abd92fb5744d5cd Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Sat, 13 Jun 2026 03:12:22 +0300 Subject: [PATCH] Implement calculating --- src/eval.rs | 34 ++++++++++++++++++++++++++++++++++ src/main.rs | 6 ++++++ 2 files changed, 40 insertions(+) create mode 100644 src/eval.rs diff --git a/src/eval.rs b/src/eval.rs new file mode 100644 index 0000000..eedcb4b --- /dev/null +++ b/src/eval.rs @@ -0,0 +1,34 @@ +use crate::tokenizer::Token; + +pub fn eval(tokens: Vec) -> 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(); +} diff --git a/src/main.rs b/src/main.rs index 3491922..2b2f784 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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(); }