#[macro_use] extern crate lalrpop_util; lalrpop_mod!(pub grammar); use std::rc::Rc; mod ast; use crate::ast::Form; #[test] fn parse_test() { assert!(grammar::TermParser::new().parse("22").is_ok()); assert!(grammar::TermParser::new().parse("(22)").is_ok()); assert!(grammar::TermParser::new().parse("(((22)))").is_ok()); assert!(grammar::TermParser::new().parse("((22)").is_err()); assert!(grammar::TermParser::new().parse("22").is_ok()); assert!(grammar::TermParser::new().parse("(22)").is_ok()); assert!(grammar::TermParser::new().parse("(22 )").is_ok()); assert!(grammar::TermParser::new().parse("()").is_ok()); assert!(grammar::TermParser::new().parse("( )").is_ok()); assert!(grammar::TermParser::new().parse("( 44)").is_ok()); assert!(grammar::TermParser::new().parse("(44 )").is_ok()); assert!(grammar::TermParser::new().parse("(22 44 (1) 33 (4 5 (6) 6))").is_ok()); assert!(grammar::TermParser::new().parse("hello").is_ok()); assert!(grammar::TermParser::new().parse("-").is_ok()); assert!(grammar::TermParser::new().parse("+").is_ok()); assert!(grammar::TermParser::new().parse("(+ 1 ;hi 3)").is_ok()); assert!(grammar::TermParser::new().parse("'13").is_ok()); assert!(grammar::TermParser::new().parse("hello-world").is_ok()); assert!(grammar::TermParser::new().parse("_").is_ok()); } fn eval(e: Rc