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