commit 4a5488dff712d422beb1b8e7056bf8206fd72d3d Author: yannickreiss Date: Mon Jul 28 18:16:13 2025 +0200 Init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8aa2b9b --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "micro" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/collector.rs b/src/collector.rs new file mode 100644 index 0000000..7035ade --- /dev/null +++ b/src/collector.rs @@ -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; + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..685a566 --- /dev/null +++ b/src/main.rs @@ -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); +}