lalrpop-lambda 0.6.1

A λ-calculus grammar writting with LALRPOP.
#![feature(non_ascii_idents, box_syntax)]

#[macro_use]
extern crate lalrpop_lambda;

use std::collections::HashMap;
use lalrpop_lambda::Strategy;

macro_rules! resolve {
    ($expr:expr, $env:expr) => {
        println!("{} -r> {} -> {}",
                 $expr,
                 $expr.resolve($env),
                 $expr.resolve($env).normalize(&Strategy::Applicative(false)));
    }
}

fn main() {
    let mut env = HashMap::new();
    env.insert(variable!(i), abs!{x.x});
    env.insert(variable!(n), 1.into());
    env.insert(variable!(x), var!(x));
    for (v, e) in &env {
        println!("{} := {}", v, e);
    }
    resolve!(var!(n), &env);
    resolve!(var!(x), &env);
    resolve!(var!(q), &env);
    resolve!(abs!{a.a}, &env);
    resolve!(abs!{a.n}, &env);
    resolve!(app!(a,n), &env);
    resolve!(app!(n,a), &env);
    resolve!(app!(n,n), &env);
    resolve!(app!(i,n), &env);
}