prule

Macro prule 

Source
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)])]);