Macro synom::alt
[−]
[src]
macro_rules! alt { ($i:expr, $e:ident | $($rest:tt)*) => { ... }; ($i:expr, $subrule:ident!( $($args:tt)*) | $($rest:tt)*) => { ... }; ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => { ... }; ($i:expr, $e:ident => { $gen:expr } | $($rest:tt)*) => { ... }; ($i:expr, $e:ident => { $gen:expr }) => { ... }; ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => { ... }; ($i:expr, $e:ident) => { ... }; ($i:expr, $subrule:ident!( $($args:tt)*)) => { ... }; }
Run a series of parsers, returning the result of the first one which succeeds.
Optionally allows for the result to be transformed.
- Syntax:
alt!(THING1 | THING2 => { FUNC } | ...)
- Output:
T
, the return type ofTHING1
andFUNC(THING2)
and ...
extern crate syn; #[macro_use] extern crate synom; use syn::Ident; use syn::parse::ident; named!(ident_or_bang -> Ident, alt!( ident | punct!("!") => { |_| "BANG".into() } ) ); fn main() { let input = "foo"; let parsed = ident_or_bang(input).expect("identifier or `!`"); assert_eq!(parsed, "foo"); let input = "!"; let parsed = ident_or_bang(input).expect("identifier or `!`"); assert_eq!(parsed, "BANG"); }