use std::str::FromStr; use std::rc::Rc; use std::cell::RefCell; use sl::Form; grammar; pub Term: Rc
= { NUM => Rc::new(Form::Int(i32::from_str(<>).unwrap())), SYM => Rc::new(Form::Symbol(<>.to_owned(),RefCell::new(None))), "(" ")" => <>.unwrap_or(Rc::new(Form::Nil)), "'" => Rc::new(Form::Pair(Rc::new(Form::Symbol("quote".to_owned(),RefCell::new(None))), Rc::new(Form::Pair(<>, Rc::new(Form::Nil),RefCell::new(None))),RefCell::new(None))), "!" => { h.append(t).unwrap() }, }; ListInside: Rc = { => Rc::new(Form::Pair(<>, Rc::new(Form::Nil),RefCell::new(None))), => Rc::new(Form::Pair(h, t,RefCell::new(None))), "." => Rc::new(Form::Pair(a, d,RefCell::new(None))), } match { "(", ")", ".", "'", "!", r"[0-9]+" => NUM, r"[a-zA-Z+*/_=?%&|^<>-][\w+*/=_?%&|^<>-]*" => SYM, r"(;[^\n]*\n)|\s+" => { } }