diff --git a/src/main.rs b/src/main.rs index 1e5fb16..4818ec9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,11 @@ fn main() { println!("Error during parsing: {e}"); process::exit(1); }); + println!("{:?}", equation); + let is_equation = computorv1::maths::evaluator::is_equation(&equation); let evaluated = computorv1::maths::evaluator::evaluate(equation); computorv1::pretty(evaluated); + if is_equation { + computorv1::maths::solver::solve(evaluated); + } } diff --git a/src/maths.rs b/src/maths.rs index 5e3363f..9cd2045 100644 --- a/src/maths.rs +++ b/src/maths.rs @@ -1,6 +1,7 @@ use std::ops; pub mod evaluator; +pub mod solver; //TODO slow ? check Stein's algorithm (binaryGCD) fn gcd(a: i128, b: i128) -> i128 { diff --git a/src/maths/evaluator.rs b/src/maths/evaluator.rs index 1b0ee7d..6c863df 100644 --- a/src/maths/evaluator.rs +++ b/src/maths/evaluator.rs @@ -147,3 +147,10 @@ pub fn evaluate(ast: Node) -> Vec { Node::Leaf(value) => value, } } + +pub fn is_equation(ast: &Node) -> bool { + match ast { + Node::Binary { operator, lhs: _, rhs: _ } => *operator == Token::Equal(), + _ => false, + } +} diff --git a/src/maths/solver.rs b/src/maths/solver.rs new file mode 100644 index 0000000..a1a9c04 --- /dev/null +++ b/src/maths/solver.rs @@ -0,0 +1,5 @@ +use super::*; + +pub fn solve(equation: Vec) -> Vec { + vec![] +}