calc/lib.rs
1use std::borrow::Cow;
2
3use lexer::tokenize;
4use parser::Parser;
5
6mod lexer;
7mod parser;
8
9type Result<T> = core::result::Result<T, Cow<'static, str>>;
10
11pub fn eval(src: &str) -> Option<Result<f64>> {
12 let tokens = match tokenize(src) {
13 Ok(tok) => tok,
14 Err(err) => return Some(Err(err)),
15 };
16
17 let mut parser = Parser::new(src, &tokens);
18
19 parser.next().map(|n| n.map(|n| n.calc()))
20}