add functions and variables to language

This commit is contained in:
2024-10-12 16:50:17 -04:00
parent 498d04c376
commit 2d269203e6
3 changed files with 328 additions and 50 deletions

View File

@@ -1,5 +1,8 @@
use crate::common::{Context, Error};
use std::collections::HashMap;
use std::borrow::Cow;
mod tokenizer;
mod parse;
@@ -7,9 +10,17 @@ fn evaluate(expr: &str) -> Result<f64, Error> {
let tokens = tokenizer::Token::tokenize(expr)?;
let mut tokens = tokens.iter();
let tree = parse::ParseTree::new(&mut tokens)?;
let globals = HashMap::new();
let locals = HashMap::new();
let mut locals = Cow::Borrowed(&locals);
Ok(tree.evaluate())
let tree = parse::ParseTree::parse(&mut tokens, &globals, &mut locals)?;
let mut globals = HashMap::new();
let locals = HashMap::new();
let mut locals = Cow::Borrowed(&locals);
tree.evaluate(&mut globals, &mut locals)
}
/// Evaluates an expression (uses Polish Notation)