mod interpreter;
pub(crate) mod lexer;
mod r#macro;
pub(crate) mod parser;
pub mod error;
pub(crate) use error::Result;
pub use error::Error;
pub use interpreter::Interpreter;
pub use lexer::{Lexer, OperatorType, Token, TokenType};
pub use parser::{Expression, Parser};
pub fn eval(expr: &str) -> Result<f64> {
let mut lexer = Lexer::new(expr.to_string());
lexer.lex()?;
let mut parser = Parser::new(lexer.tokens());
let result = parser.parse_expression(0)?;
let interpreter = Interpreter::new();
interpreter.evaluate(result)
}