// Collector // Collector that stores a complete set of data structures. pub struct Collector { pub definitions: Vec<(String, String)>, pub arguments: Vec<(String, String)>, } // Implementation of Collector // Functions to read data into the collector. impl Collector { // @name eval // @brief Evaluate a given term // @param &mut self, term: &str pub fn eval(&mut self, term: String) -> String { let editing_string: String = term.clone(); // Turn into words // Rule 0: Replace definitions // Rule 1: Solve brackets let mut collect_bracket: bool = false; let mut bracket_term: String = String::from(""); let mut resolved_bracket_term: String = String::from(""); for character in editing_string.chars() { if character == '(' { collect_bracket = true; continue; } if character == ')' { if !collect_bracket { panic!("Closing bracket without matching opening bracket!"); } else { resolved_bracket_term += self.eval(bracket_term).as_str(); bracket_term = String::from(""); collect_bracket = false; } continue; } if collect_bracket { bracket_term += character.to_string().as_str(); } else { resolved_bracket_term += character.to_string().as_str(); } } // Rule 2: Mul/Div // Rule 3: Add/Sub // Rule 4: Clean up from left to right println!("{}", resolved_bracket_term); return resolved_bracket_term; } }