macro_rules! grammar {
( $( $t:tt )* ) => ({
grammar_rules!(grammar, $($t)*);
});
}
macro_rules! grammar_rules {
($g:expr, token $id:ident => $e:expr ; $( $rest:tt )* ) => (
{
let $id = 1;
grammar_rules!($g, $($rest)*);
}
);
($g:expr, rule $id:ident => EMPTY ; $( $rest:tt )* ) => (
{
grammar_rules!($g , $($rest)*);
}
);
($g:expr, rule $id:ident => $( $rhs:ident ),* ; $( $rest:tt )* ) => (
{
let $id = vec![$( $rhs ),*];
grammar_rules!($g , $($rest)*);
}
);
($g:expr,) => ();
}
fn main() {
grammar!(token asdf => r"herp";
rule derp => asdf, asdf;
rule derp => EMPTY;
);
println!("Hello, world!");
}