diff --git a/Chapter09/metaprogramming_ebnf.rs b/Chapter09/metaprogramming_ebnf.rs index 49e38c6..b08bc04 100644 --- a/Chapter09/metaprogramming_ebnf.rs +++ b/Chapter09/metaprogramming_ebnf.rs @@ -15,6 +15,12 @@ macro_rules! abc_or_aaa { (a a a) => { println!("'a a a' is also correct syntax.") }; } +//this is a grammar sequence matching many of one token +macro_rules! many_a { + ( $($a:ident)* ) => {{ $( print!("one {} ", stringify!($a)); )* println!(""); }}; + ( $($a:ident),* ) => {{ $( print!("one {} comma ", stringify!($a)); )* println!(""); }}; +} + fn main() { abc!(a b c); @@ -23,4 +29,7 @@ fn main() { abc_or_aaa!(a b c); abc_or_aaa!(a a a); + + many_a!(a a a); + many_a!(a, a, a); }