parser/
parser.rs

1use lamcalc::{parser, Error, lambda};
2
3fn main() -> Result<(), Error> {
4    // parse single expression
5    let (tt, _) = parser::parse_exp(r"\x. \y. x")?;
6
7    // parse definition statement
8    let (ident, ff, _) = parser::parse_def(r"ff = \x. \y. y")?;
9    assert_eq!(ident, "ff");
10
11    println!("ff = {}", ff);
12
13    // parse multiple definitions
14    let (map, _) = parser::parse_file(r##"
15        // and
16        and = \x. \y. x y x
17
18        // or
19        or = \x. \y. x x y
20    "##)?;
21
22    let and_t_f = lambda!({map["and"]} {tt} {ff}).simplify()?.to_owned();
23    assert_eq!(and_t_f, ff);
24
25    let or_t_f = lambda!({map["or"]} {tt} {ff}).simplify()?.to_owned();
26    assert_eq!(or_t_f, tt);
27
28    Ok(())
29}