cl-embed: Calculator example update!
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user