use tree_builder_macro::rule; macro_rules! mk_test { ($x:tt) => { rule!{ Test$x => #$x, #$x+, #$x*, #$x? } }; } macro_rules! mk_sqbr_test { ($name:ident, $x:tt) => { rule!{ Test$name => $x+, $x*, $x, $x? } }; } mk_test!{D} mk_test!{d} mk_test!{S} mk_test!{s} mk_test!{W} mk_test!{w} rule!{ TestPoint => .+, .*, .?, . } mk_sqbr_test!{az, [a-z]} mk_sqbr_test!{AZ, [A-Z]} mk_sqbr_test!{AZaz, [a-zA-Z]} mk_sqbr_test!{nonAZaz, [^a-zA-Z]} mk_sqbr_test!{nonabc, [^abc]} fn main(){}