The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Generated file - do not edit!
##################((( 32-bit Checksum Validator )))##################
BEGIN { use 5.006; local (*F, $/); ($F = __FILE__) =~ s!c$!!; open(F)
or die "Cannot open $F: $!"; binmode(F, ':crlf'); unpack('%32N*',<F>)
== 0x1D6399E1 or die "Checksum failed for outdated .pmc file: ${F}c"}
#####################################################################
package Pugs::Grammar::Rule;
use base 'Pugs::Grammar::Base';
*{'Pugs::Grammar::Rule::ws'} = sub {
    my $grammar = shift;
    #warn "rule argument is undefined" unless defined $_[0];
    $_[0] = "" unless defined $_[0];
    my $bool = $_[0] =~ /^((?:\s|\#(?-s:.)*)+)(.*)$/sx;
    return {
        bool  => $bool,
        match => $1,
        tail  => $2,
        #capture => $1,
    }
};
*{'Pugs::Grammar::Rule::variable'} = sub {
    my $grammar = shift;
    #warn "rule argument is undefined" unless defined $_[0];
    $_[0] = "" unless defined $_[0];
    my $bool = $_[0] =~ /^([\$\%\@](?:(?:\:\:)?[_[:alnum:]]+)+)(.*)$/sx;
    return {
        bool  => $bool,
        match => $1,
        tail  => $2,
        #capture => $1,
    }
};
*{'Pugs::Grammar::Rule::positional_variable'} = sub {
    my $grammar = shift;
    #warn "rule argument is undefined" unless defined $_[0];
    $_[0] = "" unless defined $_[0];
    my $bool = $_[0] =~ /^([\$\%\@]\^(?:[_[:alnum:]]+))(.*)$/sx;
    return {
        bool  => $bool,
        match => $1,
        tail  => $2,
        #capture => $1,
    }
};
*{'Pugs::Grammar::Rule::ident'} = sub {
    my $grammar = shift;
    #warn "rule argument is undefined" unless defined $_[0];
    $_[0] = "" unless defined $_[0];
    my $bool = $_[0] =~ /^((?:(?:\:\:)?[_[:alnum:]]+)+)(.*)$/sx;
    return {
        bool  => $bool,
        match => $1,
        tail  => $2,
        #capture => $1,
    }
};
*{'Pugs::Grammar::Rule::num_variable'} = sub {
    my $grammar = shift;
    #warn "rule argument is undefined" unless defined $_[0];
    $_[0] = "" unless defined $_[0];
    my $bool = $_[0] =~ /^(?:\$[[:digit:]]+)(.*)$/sx;
    return {
        bool  => $bool,
        match => $1,
        tail  => $2,
        #capture => $1,
    }
};
*{'Pugs::Grammar::Rule::dot'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\." )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { 'dot' => 1 ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'dot';
*{'Pugs::Grammar::Rule::plain_text'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          alternation( [
                capture( 'alnum', sub{ $grammar->alnum(@_) } )
              ,
                constant( "\," )
              ,
                constant( "\;" )
              ,
                constant( "_" )
              ,
                constant( "\/" )
              ,
                constant( "\~" )
              ,
                constant( "\"" )
              ,
                constant( "\'" )
              ,
                constant( "\=" )
              ,
          ] )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { 'constant' =>  $_[0]->()  ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'plain_text';
*{'Pugs::Grammar::Rule::special_char'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\\" )
        ,
          sub{ $grammar->any(@_) }
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { special_char =>  $_[0]->() , } } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'special_char';
*{'Pugs::Grammar::Rule::non_capturing_group'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\[" )
        ,
          capture( 'rule', sub{ $grammar->rule(@_) } )
        ,
          constant( "\]" )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return $_[0]{rule}() } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    push @Pugs::Grammar::Rule::rule_terms, 'non_capturing_group';
*{'Pugs::Grammar::Rule::closure_rule'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'code', sub{ $grammar->code(@_) } )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { closure => $_[0]{code}() ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'closure_rule';
*{'Pugs::Grammar::Rule::variable_rule'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          alternation( [
                capture( 'variable', sub{ $grammar->variable(@_) } )
              ,
                capture( 'positional_variable', sub{ $grammar->positional_variable(@_) } )
              ,
          ] )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { variable =>  $_[0]->()  ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'variable_rule';
*{'Pugs::Grammar::Rule::match_variable'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'num_variable', sub{ $grammar->num_variable(@_) } )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { match_variable => $_[0]{num_variable}() ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'match_variable';
*{'Pugs::Grammar::Rule::named_capture_body'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
          alternation( [
              concat(
                constant( "\(" )
              ,
                capture( 'rule', sub{ $grammar->rule(@_) } )
              ,
                constant( "\)" )
              ,
                Pugs::Runtime::Rule::abort(
                    sub {
                        return { bool => 1, tail => $_[0], return => sub { return { rule => $_[0]{rule}(), } } };
                    }
                )
              ,
              ),
              concat(
                constant( "\[" )
              ,
                capture( 'rule', sub{ $grammar->rule(@_) } )
              ,
                constant( "\]" )
              ,
                Pugs::Runtime::Rule::abort(
                    sub {
                        return { bool => 1, tail => $_[0], return => sub { return { rule => $_[0]{rule}(), } } };
                    }
                )
              ,
              ),
              concat(
                capture( 'metasyntax', sub{ $grammar->metasyntax(@_) } )
              ,
                Pugs::Runtime::Rule::abort(
                    sub {
                        return { bool => 1, tail => $_[0], return => sub { return { rule => $_[0]{metasyntax}(), } } };
                    }
                )
              ,
              ),
          ] )
        ,
        )->( @_ )
    )
};
*{'Pugs::Grammar::Rule::named_capture'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\$" )
        ,
          constant( "\<" )
        ,
          capture( 'ident', sub{ $grammar->ident(@_) } )
        ,
          constant( "\>" )
        ,
          optional(
              sub{ $grammar->ws(@_) }
            ,
          )
        ,
          constant( "\:" )
        ,
          constant( "\=" )
        ,
          optional(
              sub{ $grammar->ws(@_) }
            ,
          )
        ,
          capture( 'named_capture_body', sub{ $grammar->named_capture_body(@_) } )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { my $body = $_[0]{named_capture_body}();
          $body->{ident} = $_[0]{ident}();
          return { named_capture => $body, } 
        } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'named_capture';
*{'Pugs::Grammar::Rule::before'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\<" )
        ,
          constant( "before" )
        ,
          sub{ $grammar->ws(@_) }
        ,
          capture( 'rule', sub{ $grammar->rule(@_) } )
        ,
          constant( "\>" )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { before => {
                rule  => $_[0]{rule}(),
            }, } 
        } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'before';
*{'Pugs::Grammar::Rule::after'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\<" )
        ,
          constant( "after" )
        ,
          sub{ $grammar->ws(@_) }
        ,
          capture( 'rule', sub{ $grammar->rule(@_) } )
        ,
          constant( "\>" )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { after => {
                rule  => $_[0]{rule}(),
            }, } 
        } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'after';
*{'Pugs::Grammar::Rule::capturing_group'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          constant( "\(" )
        ,
          capture( 'rule', sub{ $grammar->rule(@_) } )
        ,
          constant( "\)" )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { capturing_group => $_[0]{rule}() ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    unshift @Pugs::Grammar::Rule::rule_terms, 'capturing_group';
*{'Pugs::Grammar::Rule::colon'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'capturing_group',
              alternation( [
                  concat(
                    constant( "\:" )
                  ,
                    constant( "\:" )
                  ,
                    constant( "\:" )
                  ,
                  ),
                  concat(
                    constant( "\:" )
                  ,
                    constant( "\?" )
                  ,
                  ),
                  concat(
                    constant( "\:" )
                  ,
                    constant( "\+" )
                  ,
                  ),
                  concat(
                    constant( "\:" )
                  ,
                    constant( "\:" )
                  ,
                  ),
                    constant( "\:" )
                  ,
                  concat(
                    constant( "\$" )
                  ,
                    constant( "\$" )
                  ,
                  ),
                    constant( "\$" )
                  ,
                  concat(
                    constant( "\^" )
                  ,
                    constant( "\^" )
                  ,
                  ),
                    constant( "\^" )
                  ,
              ] )
            ,
          )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { colon => $_[0]->() ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
    push @Pugs::Grammar::Rule::rule_terms, 'colon';
*{'Pugs::Grammar::Rule::quantifier'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'ws1', 
              optional(
                  sub{ $grammar->ws(@_) }
                ,
              )
            ,
          )
        ,
          capture( 'term', 
              alternation( \@Pugs::Grammar::Rule::rule_terms )
            ,
          )
        ,
          capture( 'ws2', 
              optional(
                  sub{ $grammar->ws(@_) }
                ,
              )
            ,
          )
        ,
          capture( 'quant', 
              optional(
                  alternation( [
                      concat(
                        constant( "\?" )
                      ,
                        constant( "\?" )
                      ,
                      ),
                      concat(
                        constant( "\*" )
                      ,
                        constant( "\?" )
                      ,
                      ),
                      concat(
                        constant( "\+" )
                      ,
                        constant( "\?" )
                      ,
                      ),
                        constant( "\?" )
                      ,
                        constant( "\*" )
                      ,
                        constant( "\+" )
                      ,
                  ] )
                ,
              )
            ,
          )
        ,
          capture( 'ws3', 
              optional(
                  sub{ $grammar->ws(@_) }
                ,
              )
            ,
          )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return {  
            term  => $_[0]{term}(),
            quant => $_[0]{quant}(),
            ws1   => $_[0]{ws1}(),
            ws2   => $_[0]{ws2}(),
            ws3   => $_[0]{ws3}(),
        } 
    } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
*{'Pugs::Grammar::Rule::concat'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'q1', 
              capture( 'quantifier', sub{ $grammar->quantifier(@_) } )
            ,
          )
        ,
          optional(
            concat(
              capture( 'q2', 
                  capture( 'concat', sub{ $grammar->concat(@_) } )
                ,
              )
            ,
              Pugs::Runtime::Rule::abort(
                  sub {
                      return { bool => 1, tail => $_[0], return => sub { return { concat => [ 
                { quant => $_[0]{q1}() ,}, 
                $_[0]{q2}(),
            ] ,} 
        } };
                  }
              )
            ,
            ),
          )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return { quant => $_[0]{q1}() ,} } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};
*{'Pugs::Grammar::Rule::rule'} = 
sub {
    my $grammar = shift;
    $_[0] = '' unless defined $_[0];
    package Pugs::Runtime::Rule;
    rule_wrapper( $_[0], (
        concat(
          capture( 'q1', 
              capture( 'concat', sub{ $grammar->concat(@_) } )
            ,
          )
        ,
          optional(
            concat(
              constant( "\|" )
            ,
              capture( 'q2', 
                  capture( 'rule', sub{ $grammar->rule(@_) } )
                ,
              )
            ,
              Pugs::Runtime::Rule::abort(
                  sub {
                      return { bool => 1, tail => $_[0], return => sub { return { alt => [ 
                $_[0]{q1}(), 
                $_[0]{q2}(),
            ] ,} 
        } };
                  }
              )
            ,
            ),
          )
        ,
          Pugs::Runtime::Rule::abort(
              sub {
                  return { bool => 1, tail => $_[0], return => sub { return $_[0]{q1}() } };
              }
          )
        ,
        ),
        )->( @_ )
    )
};