macro_rules! parse {
( $parser:expr, $($rest:tt)* ) => { ... };
( @recurse $parser:expr $(,)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $it_6:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $it_6:tt $it_7:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $it_6:tt $it_7:tt $it_8:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $it_6:tt $it_7:tt $it_8:tt $it_9:tt $(, $($rest:tt)*)? ) => { ... };
( @recurse $parser:expr, $it_0:tt $it_1:tt $it_2:tt $it_3:tt $it_4:tt $it_5:tt $it_6:tt $it_7:tt $it_8:tt $it_9:tt $it_10:tt $(, $($rest:tt)*)? ) => { ... };
( @item $parser:expr, $expect_str:literal ) => { ... };
( @item $parser:expr, $item_name:ident ) => { ... };
( @item $parser:expr, $item_name:ident: $item_type:ty ) => { ... };
( @item $parser:expr, $item_name:ident = $item_parse:ident ) => { ... };
( @item $parser:expr, $name:ident = ($parse:path, $display:path) ) => { ... };
( @item $parser:expr, $item_name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, ($($name:ident),*) = $item_parse:ident ) => { ... };
( @item $parser:expr, ($($name:ident),*) = ($parse:ident, $display:ident) ) => { ... };
( @item $parser:expr, ($($name:ident),*) { $($nest:tt)* } ) => { ... };
( @item $parser:expr, $item_name:ident = $item_range:expr ) => { ... };
( @item $parser:expr, @array $item_name:ident ) => { ... };
( @item $parser:expr, @array_delim $delim:literal $name:ident $($rest:tt)* ) => { ... };
( @item $parser:expr, @char $name:ident = |$arg:ident| { $($valid:tt)* } ) => { ... };
( @item $parser:expr, @collect $name:ident ) => { ... };
( @item $parser:expr, @collect $name:ident: $type:ty ) => { ... };
( @item $parser:expr, @collect $name:ident = $parse:path ) => { ... };
( @item $parser:expr, @collect $name:ident = ($parse:expr, $display:expr) ) => { ... };
( @item $parser:expr, @collect $name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @collect_max $max:literal $name:ident ) => { ... };
( @item $parser:expr, @collect_some $item_name:ident ) => { ... };
( @item $parser:expr, @collect_some $item_name:ident: $item_type:ty ) => { ... };
( @item $parser:expr, @collect_some_max $max:literal $item_name:ident ) => { ... };
( @item $parser:expr, @delim $delim:literal $item_name:ident ) => { ... };
( @item $parser:expr, (@delim $delim:literal $item_name:ident): $item_type:ty ) => { ... };
( @item $parser:expr, @delim $delim:literal $name:ident = $parse:path ) => { ... };
( @item $parser:expr, @delim $delim:literal $name:ident = ($rng_0:literal .. ) ) => { ... };
( @item $parser:expr, @delim $delim:literal $name:ident = ($rng_0:literal .. $rng_1:literal) ) => { ... };
( @item $parser:expr, @delim $delim:literal $name:ident = ($rng_0:literal ..= $rng_1:literal) ) => { ... };
( @item $parser:expr, @delim $delim:literal $name:ident = ($parse:path, $display:path) ) => { ... };
( @item $parser:expr, @delim $delim:literal $item_name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @delim_some $delim:literal $item_name:ident ) => { ... };
( @item $parser:expr, @delim_some $delim:literal $item_name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @display { $($body:tt)* } ) => { ... };
( @item $parser:expr, @lines $item_name:ident ) => { ... };
( @item $parser:expr, @lines $name:ident: $type:ty { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @lines $name:ident = $rng_0:literal ..= $rng_1:literal ) => { ... };
( @item $parser:expr, @lines $name:ident = $parse:path ) => { ... };
( @item $parser:expr, @lines $name:ident = |$arg:ident| { $($body:tt)* } ) => { ... };
( @item $parser:expr, @lines $name:ident = ($parse:path, $display:path) ) => { ... };
( @item $parser:expr, @lines $name:ident = (|$arg:ident| { $($body:tt)* }, $rng_0:literal ..= $rng_1:literal) ) => { ... };
( @item $parser:expr, @lines $item_name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @opt $name:ident { $($nest:tt)* } ) => { ... };
( @item $parser:expr, @str $item_name:ident = (|$fn_arg:ident| { $($fn_body:tt)* }, $len:expr) ) => { ... };
( @item $parser:expr, @str $item_name:ident = ($rng_0:literal ..= $rng_1:literal, $len:expr) ) => { ... };
( @item $parser:expr, @end ) => { ... };
( @item $parser:expr, @confirm ) => { ... };
( @item $parser:expr, @parse { $($body:tt)* } ) => { ... };
( @item $parser:expr, @parse |$arg:ident| { $($body:tt)* } ) => { ... };
( @item $parser:expr, @parse $name:ident { $($body:tt)* } ) => { ... };
( @item $parser:expr, @skip ) => { ... };
( @item $parser:expr, @skip $display:literal ) => { ... };
( @nest input_lifetime = $input_life:lifetime; type = $type:ty; $($rest:tt)* ) => { ... };
( @nest type = $type:ty; $($rest:tt)* ) => { ... };
( @nest input_lifetime = $input_life:lifetime; $($var:tt)* ) => { ... };
( @nest display_type = $display_type:ty; $($var:tt)* ) => { ... };
( @nest $($var:tt)* ) => { ... };
( @nest_var $parser:ident $lit:literal = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $var:ident $( if ($cond:expr) )? = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $enum:ident::$var:ident = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $var:ident: $type:ty = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident ( $($decl:tt)* ) $( if ($cond:expr) )? = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $var:ident ( $($decl:tt)* ) = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $var:ident { $($decl:tt)* } = [ $($parse:tt)* ] $(,$($rest:tt)*)? ) => { ... };
( @nest_var $parser:ident $(,)? ) => { ... };
}