cl-embed: Add an example, and a new sample-code (same file)
This commit is contained in:
1
compiler/cl-embed/examples/calculator/expression.cl
Symbolic link
1
compiler/cl-embed/examples/calculator/expression.cl
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../sample-code/calculator.cl
|
||||
25
compiler/cl-embed/examples/conculator.rs
Normal file
25
compiler/cl-embed/examples/conculator.rs
Normal file
@@ -0,0 +1,25 @@
|
||||
use cl_embed::*;
|
||||
use repline::{Response, prebaked};
|
||||
|
||||
fn main() -> Result<(), repline::Error> {
|
||||
prebaked::read_and("", "calc >", " ? >", |line| {
|
||||
calc(line).map_err(Into::into)
|
||||
})
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
@@ -162,10 +162,8 @@ impl Interpret for Enum {
|
||||
let idx = idx.interpret(env)?;
|
||||
env.insert(*name, Some(idx))
|
||||
}
|
||||
(StructKind::Tuple(_), None) => eprintln!("TODO: Enum-tuple variants: {kind}"),
|
||||
(StructKind::Struct(_), None) => {
|
||||
eprintln!("TODO: Enum-struct members: {kind}")
|
||||
}
|
||||
(StructKind::Tuple(_), None) => {}
|
||||
(StructKind::Struct(_), None) => {}
|
||||
_ => eprintln!("Well-formedness error in {self}"),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user