macro_rules! parsers {
( @NAMES ) => { ... };
( @NAMES $name:ident : $kind:ty = { $($rule:tt)* } $($tail:tt)* ) => { ... };
( @NAMES $name:ident = { $($rule:tt)* } $($tail:tt)* ) => { ... };
( @NAMES $($tail:tt)* ) => { ... };
( @DEFINITIONS ) => { ... };
( @DEFINITIONS $name:ident : $kind:ty = { $($rule:tt)* } $($tail:tt)* ) => { ... };
( @DEFINITIONS $name:ident = { $($rule:tt)* } $($tail:tt)* ) => { ... };
( @DEFINITIONS $($tail:tt)* ) => { ... };
( $($tail:tt)* ) => { ... };
}
A macro to define recursive parsers.
Parsers defined by this macro may be arbitrarily self-referential, unlike rule!
.
#![cfg(feature = "macros")]
#![feature(proc_macro_hygiene)]
use parze::prelude::*;
parsers! {
foo = {
'!' | bar
}
bar: Parser<_, _> = {
'(' -& foo &- ')'
}
}