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())), "(" ")" => <>.unwrap_or(Rc::new(Form::Nil)), "'" => Rc::new(Form::Pair(Rc::new(Form::Symbol("quote".to_owned())), Rc::new(Form::Pair(<>, Rc::new(Form::Nil))))), "!" => { h.append(t).unwrap() }, }; ListInside: Rc = { => Rc::new(Form::Pair(<>, Rc::new(Form::Nil))), => Rc::new(Form::Pair(h, t)), "." => Rc::new(Form::Pair(a, d)), } match { "(", ")", ".", "'", "!", r"[0-9]+" => NUM, r"[a-zA-Z+*/_=?%&|^<>-][\w+*/=_?%&|^<>-]*" => SYM, r"(;[^\n]*\n)|\s+" => { } }