Macro syn::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 ...
Example
#[macro_use] extern crate syn; extern crate proc_macro2; use proc_macro2::{Ident, Span}; // Parse any identifier token, or the `!` token in which case the // identifier is treated as `"BANG"`. named!(ident_or_bang -> Ident, alt!( syn!(Ident) | punct!(!) => { |_| Ident::new("BANG", Span::call_site()) } ));
The alt!
macro is most commonly seen when parsing a syntax tree enum such
as the Item
enum.
impl Synom for Item { named!(parse -> Self, alt!( syn!(ItemExternCrate) => { Item::ExternCrate } | syn!(ItemUse) => { Item::Use } | syn!(ItemStatic) => { Item::Static } | syn!(ItemConst) => { Item::Const } | /* ... */ )); }
This macro is available if Syn is built with the "parsing"
feature.