pub mod ast;
pub mod interpreter;
pub mod lexer;
pub mod parser;
pub mod token;
pub mod utils;
use interpreter::Interpreter;
use lexer::Lexer;
use parser::Parser;
pub fn resolve(input_string: String) -> Result<f64, String> {
log::debug!("[expr-resolve] input_string={}", &input_string);
let mut lexer = Lexer::new(&input_string);
lexer.scan();
if lexer.has_errors {
log::debug!(
"[expr-resolve] Found lexical errors in expression : {}",
&input_string
);
return Err("Found lexical error(s) in the expression.".to_string());
}
let mut parser = Parser::new(&mut lexer);
let ast = parser.parse();
match ast {
Ok(ast) => {
Interpreter::walk_ast(&ast)
}
Err(err) => Err(err),
}
}