59 lines
1.7 KiB
Rust
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;
|
|
}
|
|
}
|