elemental/
lib.rs

1//! Main Elemental processing library.
2
3use 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
23/// Allows parselet files to easily access necessary
24/// abstractions without long `use` statements.
25/// 
26/// For internal use only.
27pub 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
42/// Interprets a `String` of code into an `Expression`.
43/// 
44/// Also returns a boolean value indicating whether or not the output should be displayed.
45pub fn interpret(variables: &mut HashMap<String, Expression>, code: String) -> (Expression, bool) {
46    // Create a token stream from the code input.
47    let mut tokenizer = Tokenizer::from(code);
48    let is_silent = tokenizer.chk_silent();
49
50    // Create a parser and parse from the tokenizer.
51    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}