1use std::collections::HashMap;
4
5pub mod error;
6mod tokenizer;
7mod parser;
8mod standard;
9mod expression;
10mod matrix;
11
12pub use tokenizer::{
13 Token,
14 TokenClass,
15 Tokenizer,
16};
17
18pub use parser::Parser;
19pub use expression::Expression;
20pub use matrix::Matrix;
21
22
23pub mod parselet_utils {
28 pub use crate::parser::{
29 Parser,
30 InfixParselet,
31 PrefixParselet,
32 };
33 pub use crate::tokenizer::{
34 Token,
35 Tokenizer,
36 TokenClass,
37 };
38 pub use crate::Expression;
39}
40
41
42pub fn interpret(variables: &mut HashMap<String, Expression>, code: String) -> (Expression, bool) {
46 let mut tokenizer = Tokenizer::from(code);
48 let is_silent = tokenizer.chk_silent();
49
50 let parser = Parser::new();
52 let expression = parser.parse(&mut tokenizer, 0);
53
54 (expression.simplify(variables), is_silent)
55}
56
57
58#[test]
59fn interpret_00() {
60 let code = "3.1415".to_string();
61 println!("{}", interpret(code));
62}
63
64#[test]
65fn interpret_01() {
66 let code = "x = 4".to_string();
67 println!("{}", interpret(code));
68}