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}