Skip to main content

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}