use crate::err::TmplResult;
use crate::expr::common::{Expression, ExpressionIR, ExpressionManager};
use crate::expr::utils::ExpressCompileIR;
use crate::expr::ExpressionIR::*;
pub mod common;
pub mod common_utils;
pub mod optimization;
pub mod stack;
mod template;
pub mod util_ast;
pub mod util_link;
pub mod util_parse;
pub mod util_reduce;
pub mod util_tag;
pub mod utils;
impl ExpressionManager {
fn compile(&self, expr_str: &str) -> TmplResult<Expression> {
let mut src = self.tagged_symbols(ExpressCompileIR::parse_static_str(expr_str))?;
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);
println!("{:?}", ir.to_string());
ExpressionIR::flat_depth(&mut ir)?;
Ok(Expression::from(ir.to_ast()?))
}
}
#[cfg(test)]
mod test {
use crate::expr::ExpressionManager;
#[test]
fn test() {
let manager = ExpressionManager::default();
println!(
"{:#?}",
manager
.compile(r#"(1+2)*3/12-31%121 in 212"#)
.map_err(|e| e.to_string())
.unwrap()
.to_string()
);
}
}