mini_lang/lib.rs
1//! Mini Language
2//!
3//! This crate provides an interface to use
4//! Mini Language as rust library.
5//!
6//! For the documentation of the language itself, see
7//! [README.md](https://github.com/watcol/mini-lang/blob/main/README.md).
8mod error;
9mod eval;
10mod ir;
11mod parser;
12mod printer;
13
14pub use error::{MiniError, MiniResult};
15pub use eval::{EagerEval, Evaluator, LazyEval};
16pub use ir::{Expr, Operator, Program};
17pub use printer::{Printer, StdPrinter};
18
19/// Execute the code by given evaluator and printer.
20pub fn execute<B: AsRef<str>, E: Evaluator, P: Printer>(
21 buf: B,
22 eval: &E,
23 printer: &mut P,
24) -> MiniResult<()> {
25 let ast = parser::parse(buf)?;
26 let ir = ir::compile(ast)?;
27 eval.evaluate(ir, printer).map_err(MiniError::from_error)
28}