Init
This commit is contained in:
commit
4a5488dff7
|
@ -0,0 +1 @@
|
||||||
|
/target
|
|
@ -0,0 +1,6 @@
|
||||||
|
[package]
|
||||||
|
name = "micro"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
|
@ -0,0 +1,58 @@
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
mod collector;
|
||||||
|
|
||||||
|
use collector::Collector;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut _collector: Collector = Collector {
|
||||||
|
definitions: vec![(String::from(""), String::from(""))],
|
||||||
|
arguments: vec![(String::from(""), String::from(""))],
|
||||||
|
};
|
||||||
|
|
||||||
|
let test_string: String = String::from("(1 + 2) * 3");
|
||||||
|
|
||||||
|
let echo_string: String = _collector.eval(test_string);
|
||||||
|
|
||||||
|
println!("Result: {}", echo_string);
|
||||||
|
}
|
Loading…
Reference in New Issue