micro/src/collector.rs

59 lines
1.7 KiB
Rust

// 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;
}
}