cl-embed: Calculator example update!

This commit is contained in:
2025-07-18 05:26:39 -04:00
parent 148ef34a01
commit e165e029dc
3 changed files with 136 additions and 56 deletions

View File

@@ -1,25 +1,27 @@
//! Demonstrates the cl_embed library
use cl_embed::*;
use repline::{Response, prebaked};
fn main() -> Result<(), repline::Error> {
let mut env = Environment::new();
if let Err(e) = conlang_include!("calculator/expression.cl")(&mut env) {
panic!("{e}")
}
prebaked::read_and("", "calc >", " ? >", |line| {
calc(line).map_err(Into::into)
env.bind("line", line);
let res = conlang! {
let (expr, rest) = parse(line.chars(), Power::None);
execute(expr)
}(&mut env)?;
println!("{res}");
Ok(Response::Accept)
})
}
fn calc(line: &str) -> Result<Response, EvalError> {
let mut env = Environment::new();
env.bind("line", line);
let res = conlang!(
mod expression;
use expression::{eval, parse};
let (expr, rest) = parse(line.chars(), 0);
eval(expr)
)(&mut env)?;
println!("{res}");
Ok(Response::Accept)
}