Skip to main content

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}