summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhongheng Liu <z.liu@outlook.com.gr>2025-01-16 00:04:15 +0200
committerZhongheng Liu <z.liu@outlook.com.gr>2025-01-16 00:04:15 +0200
commit717f3c96f5ed041d574346c8ec50dbf5d89dcdbb (patch)
treedd57e801c3418eb70b5684d70b31b99ad36e28c2
parentb66833f6dc447906c31a1eca03bdcdfe26069a8f (diff)
downloadrpn-parse-rs-717f3c96f5ed041d574346c8ec50dbf5d89dcdbb.tar.gz
rpn-parse-rs-717f3c96f5ed041d574346c8ec50dbf5d89dcdbb.tar.bz2
rpn-parse-rs-717f3c96f5ed041d574346c8ec50dbf5d89dcdbb.zip
fix: change pop order to fit y13 cs order
chore(debug): add debug stack prints
-rw-r--r--src/main.rs4
-rw-r--r--src/rpn.rs4
2 files changed, 4 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs
index f7fe16c..5d93b69 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -69,7 +69,7 @@ fn main() {
return;
}
let (k_s, v_s) = vals.unwrap();
- println!("'{}': '{}'", k_s, v_s);
+ println!("Stored: '{}': '{}'", k_s, v_s);
if k_s.chars().count() != 1 {
println!("Identifier must only be one character!");
return;
@@ -80,7 +80,7 @@ fn main() {
}
vars.insert(k.unwrap(), v_s.parse::<f32>().unwrap());
}
- println!("Great! Now put your RPN expression below");
+ println!("Great! Now put your RPN expression below: ");
let mut rpn_str = String::new();
let _ = term.read_line(&mut rpn_str);
let result = rpn::eval(rpn_str.trim().to_string(), vars);
diff --git a/src/rpn.rs b/src/rpn.rs
index 92272ba..afe6a70 100644
--- a/src/rpn.rs
+++ b/src/rpn.rs
@@ -26,7 +26,7 @@ fn rpn_match_op(c: char) -> Option<RpnOperation> {
pub fn eval(rpn_str: String, var_map: HashMap<char, f32>) -> Result<f32, ()> {
let mut stack: Vec<f32> = vec![];
for (_i, ch) in rpn_str.chars().enumerate() {
- println!("Parsing: {}", ch);
+ println!("Parsing: {}, Stack: {:?}", ch, stack);
let res = rpn_match_op(ch);
if res.is_none() {
let num = var_map.get(&ch);
@@ -36,8 +36,8 @@ pub fn eval(rpn_str: String, var_map: HashMap<char, f32>) -> Result<f32, ()> {
stack.push(*num.unwrap());
continue;
}
- let v1 = stack.pop();
let v2 = stack.pop();
+ let v1 = stack.pop();
if v1.is_none() || v2.is_none() {
return Err(());
}