macro_rules! prule {
() => { ... };
($($(#$f:literal,)? $($a:ident $($b:expr)?),*;)+) => { ... };
($($(#$f:literal,)? $($a:ident $($b:expr)?),*);*) => { ... };
($($(#$f:ident,)? $(%($v:expr, $id:expr),)? $($a:ident $($b:expr)?),*;)+) => { ... };
($($(#$f:ident,)? $(%($v:expr, $id:expr),)? $($a:ident $($b:expr)?),*);*) => { ... };
($($(#($f:expr, $o:expr),)? $(%($v:expr, $id:expr),)? $($a:ident $($b:expr)?),*;)+) => { ... };
($($(#($f:expr, $o:expr),)? $(%($v:expr, $id:expr),)? $($a:ident $($b:expr)?),*);*) => { ... };
}Expand description
Generates a production rule. It is made up of alternatives separated by a semicolon.
Example
assert_eq!(prule!(nt 1, t 2, nt 1, t 3; nt 2; e),
vec![Alternative::new(vec![sym!(nt 1), sym!(t 2), sym!(nt 1), sym!(t 3)]),
Alternative::new(vec![sym!(nt 2)]),
Alternative::new(vec![sym!(e)])]);
assert_eq!(prule!(nt 1, t 2, nt 1, t 3; #128, nt 2; e),
vec![Alternative::new(vec![sym!(nt 1), sym!(t 2), sym!(nt 1), sym!(t 3)]),
Alternative::new(vec![sym!(nt 2)]).with_flags(128),
Alternative::new(vec![sym!(e)])]);
assert_eq!(prule!(nt 1, t 2, nt 1, t 3; #L, nt 2; e),
vec![Alternative::new(vec![sym!(nt 1), sym!(t 2), sym!(nt 1), sym!(t 3)]),
Alternative::new(vec![sym!(nt 2)]).with_flags(128),
Alternative::new(vec![sym!(e)])]);