// Generated by rust-peg. Do not edit.
use self :: RuleResult :: { Matched , Failed } ; use translate :: * ; use std::char ; fn escape_default ( s : & str ) -> String {
s . chars ( ) . flat_map ( | c | c . escape_default ( ) ) . collect ( ) }
fn char_range_at ( s : & str , pos : usize ) -> ( char , usize ) {
let c = & s [ pos .. ] . chars ( ) . next ( ) . unwrap ( ) ; let next_pos =
pos + c . len_utf8 ( ) ; ( * c , next_pos ) } # [ derive ( Clone ) ] enum
RuleResult < T > { Matched ( usize , T ) , Failed , } # [
derive ( PartialEq , Eq , Debug , Clone ) ] pub struct ParseError {
pub line : usize , pub column : usize , pub offset : usize , pub expected : ::
std :: collections :: HashSet < & 'static str > , } pub type ParseResult < T >
= Result < T , ParseError > ; impl :: std :: fmt :: Display for ParseError {
fn fmt ( & self , fmt : & mut :: std :: fmt :: Formatter ) -> :: std :: result
:: Result < ( ) , :: std :: fmt :: Error > {
try ! (
write ! ( fmt , "error at {}:{}: expected " , self . line , self . column ) )
; if self . expected . len ( ) == 0 { try ! ( write ! ( fmt , "EOF" ) ) ; }
else if self . expected . len ( ) == 1 {
try ! (
write ! (
fmt , "`{}`" , escape_default (
self . expected . iter ( ) . next ( ) . unwrap ( ) ) ) ) ; } else {
let mut iter = self . expected . iter ( ) ; try ! (
write ! (
fmt , "one of `{}`" , escape_default ( iter . next ( ) . unwrap ( ) ) ) ) ;
for elem in iter {
try ! ( write ! ( fmt , ", `{}`" , escape_default ( elem ) ) ) ; } } Ok ( ( )
) } } impl :: std :: error :: Error for ParseError {
fn description ( & self ) -> & str { "parse error" } } fn slice_eq (
input : & str , state : & mut ParseState , pos : usize , m : & 'static str )
-> RuleResult < ( ) > {
# ! [ inline ] # ! [ allow ( dead_code ) ] let l = m . len ( ) ; if input .
len ( ) >= pos + l && & input . as_bytes ( ) [ pos .. pos + l ] == m .
as_bytes ( ) { Matched ( pos + l , ( ) ) } else {
state . mark_failure ( pos , m ) } } fn slice_eq_case_insensitive (
input : & str , state : & mut ParseState , pos : usize , m : & 'static str )
-> RuleResult < ( ) > {
# ! [ inline ] # ! [ allow ( dead_code ) ] let mut used = 0usize ; let mut
input_iter = input [ pos .. ] . chars ( ) . flat_map (
| x | x . to_uppercase ( ) ) ; for m_char_upper in m . chars ( ) . flat_map
( | x | x . to_uppercase ( ) ) {
used += m_char_upper . len_utf8 ( ) ; let input_char_result = input_iter .
next ( ) ; if input_char_result . is_none ( ) || input_char_result . unwrap
( ) != m_char_upper { return state . mark_failure ( pos , m ) ; } } Matched (
pos + used , ( ) ) } fn any_char (
input : & str , state : & mut ParseState , pos : usize ) -> RuleResult < ( )
> {
# ! [ inline ] # ! [ allow ( dead_code ) ] if input . len ( ) > pos {
let ( _ , next ) = char_range_at ( input , pos ) ; Matched ( next , ( ) ) }
else { state . mark_failure ( pos , "<character>" ) } } fn pos_to_line (
input : & str , pos : usize ) -> ( usize , usize ) {
let mut remaining = pos ; let mut lineno : usize = 1 ; for line in input .
lines ( ) {
let line_length = line . len ( ) + 1 ; if remaining < line_length {
return ( lineno , remaining + 1 ) ; } remaining -= line_length ; lineno += 1 ;
} return ( lineno , remaining + 1 ) ; } impl < 'input > ParseState < 'input >
{
fn mark_failure ( & mut self , pos : usize , expected : & 'static str ) ->
RuleResult < ( ) > {
if pos > self . max_err_pos {
self . max_err_pos = pos ; self . expected . clear ( ) ; } if pos == self .
max_err_pos { self . expected . insert ( expected ) ; } Failed } } struct ParseState < 'input > { max_err_pos : usize , expected : :: std :: collections :: HashSet < & 'static str > , _phantom : :: std :: marker :: PhantomData < & 'input ( ) > , primary_cache : :: std :: collections :: HashMap < usize , RuleResult < Expr >> } impl < 'input > ParseState < 'input > { fn new ( ) -> ParseState < 'input > { ParseState { max_err_pos : 0 , expected : :: std :: collections :: HashSet :: new ( ) , _phantom : :: std :: marker :: PhantomData , primary_cache : :: std :: collections :: HashMap :: new ( ) } } }
fn parse_grammar < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Grammar > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_rust_use ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , imports ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_rule ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , rules ) => { Matched ( __pos , { Grammar{ imports:imports, rules:rules } } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_rule < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Rule > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = parse_exportflag ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , exported ) => { { let seq_res = parse_cacheflag ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , cached ) => { { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , name ) => { { let seq_res = parse_returntype ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , returns ) => { { let seq_res = parse_equals ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_expression ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = match parse_semicolon ( __input , __state , __pos ) { Matched ( __newpos , _ ) => { Matched ( __newpos , ( ) ) } , Failed => { Matched ( __pos , ( ) ) } , } ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
Rule{ name: name, expr: Box::new(expression), ret_type: returns, exported: exported, cached: cached }
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_exportflag < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < bool > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = { let choice_res = slice_eq ( __input , __state , __pos , "#[export]" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => slice_eq ( __input , __state , __pos , "#[pub]" ) } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { true } ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = slice_eq ( __input , __state , __pos , "" ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { false } ) } Failed => Failed , } } } } }
fn parse_cacheflag < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < bool > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "#[cache]" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { true } ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => Matched ( __pos , { false } ) } } }
fn parse_returntype < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = parse_returns ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match parse_rust_type ( __input , __state , __pos ) { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , tp ) => { Matched ( __pos , { tp.trim().to_owned() } ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => Matched ( __pos , { "()".to_string() } ) } } }
fn parse_rust_use < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < RustUse > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "use" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_rust_path ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , p ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "::" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "*" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { RustUseGlob(p.clone()) } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "::" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "{" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let __pos = if repeat_value . len ( ) > 0 { let sep_res = { let seq_res = slice_eq ( __input , __state , __pos , "," ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } ; match sep_res { Matched ( newpos , _ ) => { newpos } , Failed => break , } } else { __pos } ; let step_res = parse_identifier ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , repeat_value ) } else { Failed } } ; match seq_res { Matched ( __pos , names ) => { { let seq_res = slice_eq ( __input , __state , __pos , "}" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { RustUseList(p.clone(), names) } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = slice_eq ( __input , __state , __pos , "" ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { RustUseSimple(p.clone()) } ) } Failed => Failed , } } } } } } ; match seq_res { Matched ( __pos , v ) => { { let seq_res = slice_eq ( __input , __state , __pos , ";" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { v } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_rust_path < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let str_start = __pos ; match { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let __pos = if repeat_value . len ( ) > 0 { let sep_res = { let seq_res = slice_eq ( __input , __state , __pos , "::" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } ; match sep_res { Matched ( newpos , _ ) => { newpos } , Failed => break , } } else { __pos } ; let step_res = parse_identifier ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , ( ) ) } else { Failed } } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , p ) => { Matched ( __pos , { p.to_string() } ) } Failed => Failed , } } }
fn parse_rust_type < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "()" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "[" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_rust_type ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "]" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "&" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match { let seq_res = slice_eq ( __input , __state , __pos , "'" ) ; match seq_res { Matched ( __pos , _ ) => { parse_identifier ( __input , __state , __pos ) } Failed => Failed , } } { Matched ( __newpos , _ ) => { Matched ( __newpos , ( ) ) } , Failed => { Matched ( __pos , ( ) ) } , } ; match seq_res { Matched ( __pos , _ ) => { parse_rust_type ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "<" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let __pos = if repeat_value . len ( ) > 0 { let sep_res = { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "," ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } ; match sep_res { Matched ( newpos , _ ) => { newpos } , Failed => break , } } else { __pos } ; let step_res = { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "'" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "" ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_rust_type ( __input , __state , __pos ) } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , ">" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "::" ) ; match seq_res { Matched ( __pos , _ ) => { parse_rust_type ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "(" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let __pos = if repeat_value . len ( ) > 0 { let sep_res = { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , "," ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } ; match sep_res { Matched ( newpos , _ ) => { newpos } , Failed => break , } } else { __pos } ; let step_res = parse_rust_type ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , ( ) ) } else { Failed } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = slice_eq ( __input , __state , __pos , ")" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "" ) } Failed => Failed , } } } } } } } } } } } } } } }
fn parse_expression < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] parse_choice ( __input , __state , __pos ) }
fn parse_choice < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = parse_sequence ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , head ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = { let seq_res = parse_slash ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_sequence ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , s ) => { Matched ( __pos , { s } ) } Failed => Failed , } } } Failed => Failed , } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , tail ) => { Matched ( __pos , {
if tail.len() > 0 {
let mut list = tail;
list.insert(0, head);
ChoiceExpr(list)
} else {
head
}
} ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_sequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_labeled ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , elements ) => { { let seq_res = parse_action ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , code ) => { Matched ( __pos , {
ActionExpr(elements, code.0, code.1)
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_prefixed ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , elements ) => { Matched ( __pos , {
if elements.len() != 1 {
SequenceExpr(elements)
} else {
elements.into_iter().next().unwrap()
}
} ) } Failed => Failed , } } } } }
fn parse_labeled < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < TaggedExpr > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , label ) => { { let seq_res = parse_colon ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_prefixed ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { Matched ( __pos , {
TaggedExpr{ name: Some(label), expr: Box::new(expression) }
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = parse_prefixed ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expr ) => { Matched ( __pos , {
TaggedExpr{ name: None, expr: Box::new(expr) }
} ) } Failed => Failed , } } } } }
fn parse_prefixed < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = parse_dollar ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_suffixed ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { Matched ( __pos , {
MatchStrExpr(Box::new(expression))
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = parse_and ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_suffixed ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { Matched ( __pos , {
PosAssertExpr(Box::new(expression))
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = parse_not ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_suffixed ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { Matched ( __pos , {
NegAssertExpr(Box::new(expression))
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_suffixed ( __input , __state , __pos ) } } } } } } }
fn parse_suffixed < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_question ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
OptionalExpr(Box::new(expression))
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_starstar ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , sep ) => { Matched ( __pos , {
Repeat(Box::new(expression), 0, None, Some(Box::new(sep)))
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_plusplus ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , sep ) => { Matched ( __pos , {
Repeat(Box::new(expression), 1, None, Some(Box::new(sep)))
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_star ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_lt ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_integer ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , n ) => { { let seq_res = parse_gt ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
Repeat(Box::new(expression), n, Some(n), None)
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_star ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_lt ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match parse_integer ( __input , __state , __pos ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , min ) => { { let seq_res = parse_comma ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match parse_integer ( __input , __state , __pos ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , max ) => { { let seq_res = parse_gt ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
Repeat(Box::new(expression), min.unwrap_or(0), max, None)
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_star ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
Repeat(Box::new(expression), 0, None, None)
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_plus ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
Repeat(Box::new(expression), 1, None, None)
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => __state . primary_cache . get ( & __pos ) . map ( | entry | entry . clone ( ) ) . unwrap_or_else ( || parse_primary ( __input , __state , __pos ) ) } } } } } } } } } } } } } } }
fn parse_primary < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] let rule_result = { let choice_res = { let seq_res = parse_identifier ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , name ) => { { let seq_res = { let __assert_res = { let seq_res = match parse_string ( __input , __state , __pos ) { Matched ( __newpos , _ ) => { Matched ( __newpos , ( ) ) } , Failed => { Matched ( __pos , ( ) ) } , } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_returntype ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { parse_equals ( __input , __state , __pos ) } Failed => Failed , } } } Failed => Failed , } } ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
RuleExpr(name)
} ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_literal ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_class ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = parse_dot ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { AnyCharExpr } ) } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = { let seq_res = slice_eq ( __input , __state , __pos , "#position" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { PositionExpr } ) } Failed => Failed , } } } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let seq_res = parse_lparen ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_expression ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , expression ) => { { let seq_res = parse_rparen ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { expression } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } } } } } } } } } } ; __state . primary_cache . insert ( __pos , rule_result . clone ( ) ) ; rule_result }
fn parse_action < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < (String, /*is conditional match?*/ bool) > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "{" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match slice_eq ( __input , __state , __pos , "?" ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , cond ) => { { let seq_res = { let str_start = __pos ; match { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let choice_res = { let seq_res = parse_braced ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "" ) } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_nonBraceCharacters ( __input , __state , __pos ) } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , literal ) => { { let seq_res = slice_eq ( __input , __state , __pos , "}" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
(format!("{{ {} }}", literal), cond.is_some())
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_braced < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "{" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let choice_res = { let seq_res = parse_braced ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "" ) } Failed => Failed , } } ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_nonBraceCharacters ( __input , __state , __pos ) } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "}" ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_nonBraceCharacters < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_nonBraceCharacter ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , ( ) ) } else { Failed } } }
fn parse_nonBraceCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { '{' | '}' => __state . mark_failure ( __pos , "[^{}]" ) , _ => Matched ( __next , ( ) ) , } } else { __state . mark_failure ( __pos , "[^{}]" ) } }
fn parse_equals < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "=" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_colon < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , ":" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_semicolon < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , ";" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_slash < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "/" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_and < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "&" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_not < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "!" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_dollar < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "$" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_question < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "?" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_star < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "*" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_starstar < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "**" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_plus < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "+" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_plusplus < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "++" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_lparen < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "(" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_rparen < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , ")" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_dot < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "." ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_returns < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "->" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_lbrace < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "{" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_rbrace < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "}" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_comma < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "," ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_lt < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "<" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_gt < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , ">" ) ; match seq_res { Matched ( __pos , _ ) => { parse___ ( __input , __state , __pos ) } Failed => Failed , } } }
fn parse_integer < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < usize > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let str_start = __pos ; match { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { '0' ... '9' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[0-9]" ) , } } else { __state . mark_failure ( __pos , "[0-9]" ) } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , ( ) ) } else { Failed } } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , i ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { i.parse().unwrap() } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_identifier < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let str_start = __pos ; match { let seq_res = { let choice_res = parse_letter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => slice_eq ( __input , __state , __pos , "_" ) } } ; match seq_res { Matched ( __pos , _ ) => { { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let choice_res = parse_letter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_digit ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => slice_eq ( __input , __state , __pos , "_" ) } } } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } } Failed => Failed , } } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , chars ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { chars.to_owned() } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_literal < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let choice_res = parse_doubleQuotedString ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_singleQuotedString ( __input , __state , __pos ) } } ; match seq_res { Matched ( __pos , value ) => { { let seq_res = match slice_eq ( __input , __state , __pos , "i" ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , case_insensitive ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
LiteralExpr(value,case_insensitive.is_some())
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_string < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let choice_res = parse_doubleQuotedString ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_singleQuotedString ( __input , __state , __pos ) } } ; match seq_res { Matched ( __pos , string ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { string } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_doubleQuotedString < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\"" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_doubleQuotedCharacter ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , s ) => { { let seq_res = slice_eq ( __input , __state , __pos , "\"" ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { s.into_iter().collect() } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_doubleQuotedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = parse_simpleDoubleQuotedCharacter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_simpleEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_zeroEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_hex2EscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_unicodeEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolEscapeSequence ( __input , __state , __pos ) } } } } } } } } } } }
fn parse_simpleDoubleQuotedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let __assert_res = { let choice_res = slice_eq ( __input , __state , __pos , "\"" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\\" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolChar ( __input , __state , __pos ) } } } } ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match any_char ( __input , __state , __pos ) { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , c ) => { Matched ( __pos , { c.chars().next().unwrap() } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_singleQuotedString < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < String > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "'" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_singleQuotedCharacter ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , s ) => { { let seq_res = slice_eq ( __input , __state , __pos , "'" ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { s.into_iter().collect() } ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_singleQuotedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = parse_simpleSingleQuotedCharacter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_simpleEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_zeroEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_hex2EscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_unicodeEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolEscapeSequence ( __input , __state , __pos ) } } } } } } } } } } }
fn parse_simpleSingleQuotedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let __assert_res = { let choice_res = slice_eq ( __input , __state , __pos , "'" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\\" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolChar ( __input , __state , __pos ) } } } } ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match any_char ( __input , __state , __pos ) { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , c ) => { Matched ( __pos , { c.chars().next().unwrap() } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_class < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < Expr > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "[" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match slice_eq ( __input , __state , __pos , "^" ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , inverted ) => { { let seq_res = { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = { let choice_res = parse_classCharacterRange ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_classCharacter ( __input , __state , __pos ) } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } Matched ( __repeat_pos , repeat_value ) } ; match seq_res { Matched ( __pos , parts ) => { { let seq_res = slice_eq ( __input , __state , __pos , "]" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = match slice_eq ( __input , __state , __pos , "i" ) { Matched ( newpos , value ) => { Matched ( newpos , Some ( value ) ) } , Failed => { Matched ( __pos , None ) } , } ; match seq_res { Matched ( __pos , flags ) => { { let seq_res = parse___ ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
CharSetExpr(inverted.is_some(), parts)
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_classCharacterRange < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < CharSetCase > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = parse_bracketDelimitedCharacter ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , begin ) => { { let seq_res = slice_eq ( __input , __state , __pos , "-" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_bracketDelimitedCharacter ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , end ) => { Matched ( __pos , {
//TODO: check start > end
CharSetCase{start:begin, end:end}
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_classCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < CharSetCase > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = parse_bracketDelimitedCharacter ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , char_ ) => { Matched ( __pos , {
CharSetCase{start:char_, end:char_}
} ) } Failed => Failed , } } }
fn parse_bracketDelimitedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = parse_simpleBracketDelimitedCharacter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_simpleEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_zeroEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_hex2EscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_unicodeEscapeSequence ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolEscapeSequence ( __input , __state , __pos ) } } } } } } } } } } }
fn parse_simpleBracketDelimitedCharacter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = { let __assert_res = { let choice_res = slice_eq ( __input , __state , __pos , "]" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\\" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolChar ( __input , __state , __pos ) } } } } ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match any_char ( __input , __state , __pos ) { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , c ) => { Matched ( __pos , { c.chars().next().unwrap() } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_simpleEscapeSequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\\" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let __assert_res = { let choice_res = parse_digit ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "x" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "u" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_eolChar ( __input , __state , __pos ) } } } } } } ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match any_char ( __input , __state , __pos ) { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , c ) => { Matched ( __pos , {
match c.chars().next().unwrap() {
//'b' => '\b',
//'f' => '\f',
'n' => '\n',
'r' => '\r',
't' => '\t',
//'v' => '\v',
x => x
}
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_zeroEscapeSequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\\0" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let __assert_res = parse_digit ( __input , __state , __pos ) ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { 0u8 as char } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_hex2EscapeSequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\\x" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match { let seq_res = parse_hexDigit ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { parse_hexDigit ( __input , __state , __pos ) } Failed => Failed , } } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , value ) => { Matched ( __pos , {
char::from_u32(u32::from_str_radix(value, 16).unwrap()).unwrap()
} ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_unicodeEscapeSequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\\u{" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let str_start = __pos ; match { let mut __repeat_pos = __pos ; let mut repeat_value = vec ! ( ) ; loop { let __pos = __repeat_pos ; let step_res = parse_hexDigit ( __input , __state , __pos ) ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; repeat_value . push ( value ) ; } , Failed => { break ; } } } if repeat_value . len ( ) >= 1usize { Matched ( __repeat_pos , ( ) ) } else { Failed } } { Matched ( newpos , _ ) => { Matched ( newpos , & __input [ str_start .. newpos ] ) } , Failed => Failed , } } ; match seq_res { Matched ( __pos , value ) => { { let seq_res = slice_eq ( __input , __state , __pos , "}" ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , {
char::from_u32(u32::from_str_radix(value, 16).unwrap()).unwrap()
} ) } Failed => Failed , } } } Failed => Failed , } } } Failed => Failed , } } }
fn parse_eolEscapeSequence < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < char > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "\\" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = parse_eol ( __input , __state , __pos ) ; match seq_res { Matched ( __pos , _ ) => { Matched ( __pos , { '\n' } ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_digit < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { '0' ... '9' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[0-9]" ) , } } else { __state . mark_failure ( __pos , "[0-9]" ) } }
fn parse_hexDigit < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { '0' ... '9' | 'a' ... 'f' | 'A' ... 'F' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[0-9a-fA-F]" ) , } } else { __state . mark_failure ( __pos , "[0-9a-fA-F]" ) } }
fn parse_letter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = parse_lowerCaseLetter ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_upperCaseLetter ( __input , __state , __pos ) } } }
fn parse_lowerCaseLetter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { 'a' ... 'z' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[a-z]" ) , } } else { __state . mark_failure ( __pos , "[a-z]" ) } }
fn parse_upperCaseLetter < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { 'A' ... 'Z' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[A-Z]" ) , } } else { __state . mark_failure ( __pos , "[A-Z]" ) } }
fn parse___ < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let choice_res = parse_whitespace ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = parse_eol ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_comment ( __input , __state , __pos ) } } } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } }
fn parse_comment < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = parse_singleLineComment ( __input , __state , __pos ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => parse_multiLineComment ( __input , __state , __pos ) } } }
fn parse_singleLineComment < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "//" ) ; match seq_res { Matched ( __pos , _ ) => { { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let seq_res = { let __assert_res = parse_eolChar ( __input , __state , __pos ) ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { any_char ( __input , __state , __pos ) } Failed => Failed , } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } } Failed => Failed , } } }
fn parse_multiLineComment < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let seq_res = slice_eq ( __input , __state , __pos , "/*" ) ; match seq_res { Matched ( __pos , _ ) => { { let seq_res = { let mut __repeat_pos = __pos ; loop { let __pos = __repeat_pos ; let step_res = { let seq_res = { let __assert_res = slice_eq ( __input , __state , __pos , "*/" ) ; match __assert_res { Failed => Matched ( __pos , ( ) ) , Matched ( .. ) => Failed , } } ; match seq_res { Matched ( __pos , _ ) => { any_char ( __input , __state , __pos ) } Failed => Failed , } } ; match step_res { Matched ( newpos , value ) => { __repeat_pos = newpos ; } , Failed => { break ; } } } Matched ( __repeat_pos , ( ) ) } ; match seq_res { Matched ( __pos , _ ) => { slice_eq ( __input , __state , __pos , "*/" ) } Failed => Failed , } } } Failed => Failed , } } }
fn parse_eol < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] { let choice_res = slice_eq ( __input , __state , __pos , "\n" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\r\n" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\r" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => { let choice_res = slice_eq ( __input , __state , __pos , "\u{2028}" ) ; match choice_res { Matched ( __pos , __value ) => Matched ( __pos , __value ) , Failed => slice_eq ( __input , __state , __pos , "\u{2029}" ) } } } } } } } } }
fn parse_eolChar < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { '\n' | '\r' | '\u{2028}' | '\u{2029}' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[\n\r\u{2028}\u{2029}]" ) , } } else { __state . mark_failure ( __pos , "[\n\r\u{2028}\u{2029}]" ) } }
fn parse_whitespace < 'input > ( __input : & 'input str , __state : & mut ParseState < 'input > , __pos : usize ) -> RuleResult < () > { # ! [ allow ( non_snake_case , unused ) ] if __input . len ( ) > __pos { let ( __ch , __next ) = char_range_at ( __input , __pos ) ; match __ch { ' ' | '\t' | '\u{a0}' | '\u{feff}' | '\u{1680}' | '\u{180e}' | '\u{2000}' ... '\u{200a}' | '\u{202f}' | '\u{205f}' | '\u{3000}' => Matched ( __next , ( ) ) , _ => __state . mark_failure ( __pos , "[ \t\u{a0}\u{feff}\u{1680}\u{180e}\u{2000}-\u{200a}\u{202f}\u{205f}\u{3000}]" ) , } } else { __state . mark_failure ( __pos , "[ \t\u{a0}\u{feff}\u{1680}\u{180e}\u{2000}-\u{200a}\u{202f}\u{205f}\u{3000}]" ) } } pub fn grammar < 'input > ( input : & 'input str ) -> ParseResult < Grammar > { # ! [ allow ( non_snake_case , unused ) ] let mut state = ParseState :: new ( ) ; match parse_grammar ( input , & mut state , 0 ) { Matched ( pos , value ) => { if pos == input . len ( ) { return Ok ( value ) } } _ => { } } let ( line , col ) = pos_to_line ( input , state . max_err_pos ) ; Err ( ParseError { line : line , column : col , offset : state . max_err_pos , expected : state . expected , } ) }