pest::impl_rdp! [] [src]

macro_rules! impl_rdp {
    ( @rules $( $name:ident )* ) => { ... };
    ( @filter [  ] [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = { { $( $_primary:tt )* } $( $ts:tt )* } $( $tail:tt )* ]
      [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = @{ { $( $_primary:tt )* } $( $ts:tt )* } $( $tail:tt )* ]
      [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = _{ { $( $_primary:tt )* } $( $ts:tt )* } $( $tail:tt )* ]
      [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = { $( $_ts:tt )* } $( $tail:tt )* ] [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = @{ $( $_ts:tt )* } $( $tail:tt )* ] [ $( $rules:tt )* ] ) => { ... };
    ( @filter [ $name:ident = _{ $( $_ts:tt )* } $( $tail:tt )* ] [ $( $rules:tt )* ] ) => { ... };
    ( @ws ) => { ... };
    ( @ws whitespace = $( $_ts:tt )* ) => { ... };
    ( @ws $_name:ident = { $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( @ws $_name:ident = @{ $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( @ws $_name:ident = _{ $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( @com ) => { ... };
    ( @com comment = $( $_ts:tt )* ) => { ... };
    ( @com $_name:ident = { $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( @com $_name:ident = @{ $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( @com $_name:ident = _{ $( $_ts:tt )* } $( $tail:tt )* ) => { ... };
    ( grammar! { $( $ts:tt )* } $( $mac:ident! { $( $rest:tt )* } )* ) => { ... };
}

A macro useful for implementing the Parser trait as a recursive descent parser. It only accepts grammar! and process! calls that get implemented on self.

Rule

It also implements an enum called Rule that has a value for all non-silent rules, but also for any and eoi. These Rules are used within Tokens to specify the type of rule that matched.

Examples

impl_rdp! {
    grammar! {
        expression = _{ paren ~ expression? }
        paren      =  { ["("] ~ expression? ~ [")"] }
    }
}

let mut parser = Rdp::new(StringInput::new("(())((())())()"));

assert!(parser.expression());
assert!(parser.end());