grammar_utils/macros.rs
1#[macro_export]
2macro_rules! grammar {
3 (
4 $(
5 $lhs:ident -> $( $rhs:ident )* ;
6 )*
7 ) => {{
8 let mut symbols = ::std::collections::BTreeSet::<String>::new();
9 let mut g = Grammar::new();
10
11 $(
12 symbols.insert(stringify!($lhs).to_string());
13 $(
14 symbols.insert(stringify!($rhs).to_string());
15 )*
16 )*
17
18 for symbol in &symbols {
19 g = g.symbol(symbol.as_str())
20 }
21
22 $(
23 g = g.rule(stringify!($lhs), &[
24 $(stringify!($rhs),)*
25 ]);
26 )*
27 g.build()
28 }};
29}