1mod eval;
11pub(crate) mod lexer;
12mod r#macro;
13pub(crate) mod parser;
14
15pub mod error;
16pub(crate) use error::Result;
17
18pub use error::Error;
19pub use eval::Context;
20pub use lexer::{Lexer, OperatorType, Token, TokenType};
21pub use parser::{Expression, Parser};
22
23pub fn eval(expr: &str) -> Result<f64> {
24 let mut lexer = Lexer::new(expr.to_string());
25 lexer.lex()?;
26
27 let mut parser = Parser::new(lexer.tokens());
28 let result = parser.parse_expression(0)?;
29 let mut ctx = Context::new();
30 ctx.init();
31 ctx.eval(result)
32}