1use crate::err::TmplResult;
2use crate::expr::common::{Expression, ExpressionIR, ExpressionManager};
3use crate::expr::utils::ExpressCompileIR;
4use crate::expr::ExpressionIR::*;
5
6pub mod common;
7pub mod common_utils;
8pub mod optimization;
9pub mod stack;
10mod template;
11pub mod util_ast;
12pub mod util_link;
13pub mod util_parse;
14pub mod util_reduce;
15pub mod util_tag;
16pub mod utils;
17
18impl ExpressionManager {
20 fn compile(&self, expr_str: &str) -> TmplResult<Expression> {
21 let mut src = self.tagged_symbols(ExpressCompileIR::parse_static_str(expr_str))?;
22 ExpressionIR::parse_groups(&mut src)?; self.link_symbols(&mut src)?; ExpressionIR::compile_primitives(&mut src)?; self.link_static_primitives(&mut src)?; let mut ir = ItemGroup(src);
27 println!("{:?}", ir.to_string());
28 ExpressionIR::flat_depth(&mut ir)?;
29 Ok(Expression::from(ir.to_ast()?))
30 }
31}
32
33#[cfg(test)]
34mod test {
35 use crate::expr::ExpressionManager;
36
37 #[test]
38 fn test() {
39 let manager = ExpressionManager::default();
40 println!(
41 "{:#?}",
42 manager
43 .compile(r#"(1+2)*3/12-31%121 in 212"#)
44 .map_err(|e| e.to_string())
45 .unwrap()
46 .to_string()
47 );
48 }
49}