From 2bdf585c4cc65755bd3fd619802cc53acbb919e8 Mon Sep 17 00:00:00 2001 From: BHznJNs <441768875@qq.com> Date: Mon, 6 Mar 2023 23:05:55 +0800 Subject: [PATCH] tokenizing optimized & compute optimized --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/compiler/tokenizer.rs | 1 + src/computer/compute.rs | 22 +++++++++++++--------- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cbc9b39..3cc2c8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,4 +4,4 @@ version = 3 [[package]] name = "calculator" -version = "1.0.2" +version = "1.0.3" diff --git a/Cargo.toml b/Cargo.toml index 7d1befa..ac6b2fc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "calculator" -version = "1.0.2" +version = "1.0.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/compiler/tokenizer.rs b/src/compiler/tokenizer.rs index daf5995..02bf49d 100644 --- a/src/compiler/tokenizer.rs +++ b/src/compiler/tokenizer.rs @@ -71,6 +71,7 @@ pub fn tokenizer(source: String) -> Result { } if is_num_minus { + is_num_minus = false; value = Number::Int(0) - value; } diff --git a/src/computer/compute.rs b/src/computer/compute.rs index 51f4512..d6e1acf 100644 --- a/src/computer/compute.rs +++ b/src/computer/compute.rs @@ -140,19 +140,23 @@ pub fn compute( } index += 1; } - for symbol in symbol_stack { - let options_num2 = number_stack.pop(); - let options_num1 = number_stack.pop(); - - if options_num2.is_none() || options_num1.is_none() { + // clear remain elements in number_stack and symbol_stack + while !symbol_stack.is_empty() { + if symbol_stack.len() < 1 { + println!("Computing symbol missing."); + return Err(()) + } + if number_stack.len() < 2 { println!("Computing number missing."); return Err(()) } - number_stack.push(operate( - options_num1.unwrap(), - options_num2.unwrap(), - symbol + let symbol = symbol_stack.remove(0); + let num1 = number_stack.remove(0); + let num2 = number_stack.remove(0); + + number_stack.insert(0, operate( + num1, num2, symbol, )); } return Ok(number_stack[0])