use std::borrow::Cow;
use lexer::tokenize;
use parser::Parser;
mod lexer;
mod parser;
type Result<T> = core::result::Result<T, Cow<'static, str>>;
pub fn eval(src: &str) -> Option<Result<f64>> {
let tokens = match tokenize(src) {
Ok(tok) => tok,
Err(err) => return Some(Err(err)),
};
let mut parser = Parser::new(src, &tokens);
parser.next().map(|n| n.map(|n| n.calc()))
}