# Do not edit this file - Generated by Perlito 7.0
use v5;
use utf8;
use strict;
use warnings;
no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion');
use Perlito::Perl5::Runtime;
use Perlito::Perl5::Prelude;
our $MATCH = Perlito::Match->new();
{
package GLOBAL;
    sub new { shift; bless { @_ }, "GLOBAL" }

    # use v6 
;
    {
    package Perlito::Grammar;
        sub new { shift; bless { @_ }, "Perlito::Grammar" }
        use Perlito::Expression;
        use Perlito::Grammar::Regex;
        use Perlito::Grammar::Control;
        sub is_newline {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((((chr(10) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((chr(13) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((chr(13) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((chr(10) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})))
}))
})));
            $MATCH
        };
        sub not_newline {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $m2 = undef) = $grammar->is_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})
})));
            $MATCH
        };
        sub ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $m2 = undef) = $grammar->word($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((('_' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
}) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    ((my  $m2 = undef) = $grammar->word($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((('_' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
}))
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
})
})));
            $MATCH
        };
        sub full_ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
})
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
})
})));
            $MATCH
        };
        sub namespace_before_ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
})) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}))
})
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
})
})));
            $MATCH
        };
        sub optional_namespace_before_ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((do {
    ((my  $m2 = undef) = $grammar->namespace_before_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'namespace_before_ident'} = $m2);
        1
    }
    else {
        0
    }
}) && ((('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (("" . $MATCH->{'namespace_before_ident'})))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((1 && (((do {
    ($MATCH->{capture} = (''))
}) || 1))))
}))
})));
            $MATCH
        };
        sub pod_begin {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((do {
    ((my  $m2 = undef) = $grammar->is_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (((chr(61) . 'end' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to())))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->not_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->not_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
})) && (do {
    ((my  $m2 = undef) = $grammar->pod_begin($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))
}))
})));
            $MATCH
        };
        sub ws {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    ((((chr(35) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->not_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->is_newline($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    ((((chr(61) . 'begin' eq substr($str, $MATCH->to(), 6)) && ((($MATCH)->{to} = (6 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->pod_begin($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((chr(61) . 'for' eq substr($str, $MATCH->to(), 4)) && ((($MATCH)->{to} = (4 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->pod_begin($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (1)
}))
})))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((do {
    ((my  $m2 = undef) = $grammar->space($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
}))
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
})
})));
            $MATCH
        };
        sub opt_ws {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})
})));
            $MATCH
        };
        sub opt_ws2 {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})
})));
            $MATCH
        };
        sub opt_ws3 {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})
})));
            $MATCH
        };
        sub grammar {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((((((do {
    ((my  $m2 = undef) = $grammar->full_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'full_ident'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})) && (((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})) && (do {
    ((my  $m2 = undef) = $grammar->exp_stmts($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'exp_stmts'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})) && (((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (CompUnit->new(('name' => ${$MATCH->{'full_ident'}}), ('body' => ${$MATCH->{'exp_stmts'}}))))
}) || 1)))
})
})));
            $MATCH
        };
        sub declarator {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    (('my' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((('state' eq substr($str, $MATCH->to(), 5)) && ((($MATCH)->{to} = (5 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((('has' eq substr($str, $MATCH->to(), 3)) && ((($MATCH)->{to} = (3 + $MATCH->to()))))))
}))
})));
            $MATCH
        };
        sub exp_stmts2 {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $m2 = undef) = $grammar->exp_stmts($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'exp_stmts'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'exp_stmts'}}))
}) || 1)))
})
})));
            $MATCH
        };
        sub exp {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $m2 = undef) = Perlito::Expression->exp_parse($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.exp_parse'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'Perlito::Expression.exp_parse'}}))
}) || 1)))
})
})));
            $MATCH
        };
        sub exp2 {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $m2 = undef) = Perlito::Expression->exp_parse($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.exp_parse'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'Perlito::Expression.exp_parse'}}))
}) || 1)))
})
})));
            $MATCH
        };
        sub opt_ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'ident'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'ident'}}))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((1 && (((do {
    ($MATCH->{capture} = ('postcircumfix:' . chr(60) . chr(40) . ' ' . chr(41) . chr(62)))
}) || 1))))
}))
})));
            $MATCH
        };
        sub opt_type {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    (('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
}) && (do {
    ((my  $m2 = undef) = $grammar->full_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'full_ident'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'full_ident'}}))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((1 && (((do {
    ($MATCH->{capture} = (''))
}) || 1))))
}))
})));
            $MATCH
        };
        sub var_sigil {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((((do {
    ((chr(36) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(37) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(64) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(38) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
})));
            $MATCH
        };
        sub var_twigil {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((((do {
    (('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(33) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(94) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((('*' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})
})));
            $MATCH
        };
        sub var_name {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    ((my  $m2 = undef) = $grammar->full_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'full_ident'} = $m2);
        1
    }
    else {
        0
    }
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(47) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'digit'} = $m2);
        1
    }
    else {
        0
    }
}))
}))
})));
            $MATCH
        };
        sub var_ident {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((((do {
    ((my  $m2 = undef) = $grammar->var_sigil($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'var_sigil'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->var_twigil($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'var_twigil'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->optional_namespace_before_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'optional_namespace_before_ident'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->var_name($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'var_name'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (Var->new(('sigil' => ("" . $MATCH->{'var_sigil'})), ('twigil' => ("" . $MATCH->{'var_twigil'})), ('namespace' => ${$MATCH->{'optional_namespace_before_ident'}}), ('name' => ("" . $MATCH->{'var_name'})))))
}) || 1)))
})
})));
            $MATCH
        };
        sub exponent {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((('E' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((do {
    (('+' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((('-' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (1)
}))
})) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
}))
})
})));
            $MATCH
        };
        sub val_num {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
})) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->exponent($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((my  $m2 = undef) = $grammar->exponent($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
})) && (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->exponent($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})))
}))
})))
}))
}) && (((do {
    ($MATCH->{capture} = (Val::Num->new(('num' => ("" . $MATCH)))))
}) || 1)))
})
})));
            $MATCH
        };
        sub char_any {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})
})));
            $MATCH
        };
        sub char_any_single_quote {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((chr(39) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((chr(39) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
})
})));
            $MATCH
        };
        sub single_quoted_unescape {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((((do {
    ((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->single_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'single_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (chr(92) . $MATCH->{'single_quoted_unescape'}))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (((chr(39) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->single_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'single_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (chr(39) . $MATCH->{'single_quoted_unescape'}))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->single_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'single_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (chr(92) . $MATCH->{'single_quoted_unescape'}))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((do {
    ((my  $m2 = undef) = $grammar->char_any_single_quote($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any_single_quote'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->single_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'single_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = ($MATCH->{'char_any_single_quote'} . $MATCH->{'single_quoted_unescape'}))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (1)
}))
})));
            $MATCH
        };
        sub char_any_double_quote {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((((do {
    ((chr(34) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(36) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(64) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(37) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((((((do {
    ((chr(34) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(36) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(64) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(37) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
}))
})
}));
    (($tmp)->{bool} = !Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && ((('' ne substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))))
})
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}))
})
})));
            $MATCH
        };
        sub double_quoted_unescape {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((((((do {
    (((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('n' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (chr(10)))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('t' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (chr(9)))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('c' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((chr(91) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->digits($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'digits'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(93) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (chr($MATCH->{'digits'})))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('c' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->digits($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'digits'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (chr($MATCH->{'digits'})))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    ((((((chr(92) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->char_any($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (("" . $MATCH->{'char_any'})))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->char_any_double_quote($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any_double_quote'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (("" . $MATCH->{'char_any_double_quote'})))
}) || 1))))
}))
})));
            $MATCH
        };
        sub double_quoted_buf {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (((((do {
    ((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((chr(36) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((((chr(36) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->var_twigil($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $m2 = undef) = Perlito::Expression->operator($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.operator'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = ((${$MATCH->{'Perlito::Expression.operator'}})->[1]))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->char_any($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (Val::Buf->new(('buf' => ("" . $MATCH->{'char_any'})))))
}) || 1))))
}))
}))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((chr(64) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((((chr(64) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->var_twigil($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $m2 = undef) = Perlito::Expression->operator($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.operator'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(91) . chr(93) eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = ((${$MATCH->{'Perlito::Expression.operator'}})->[1]))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->char_any($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (Val::Buf->new(('buf' => ("" . $MATCH->{'char_any'})))))
}) || 1))))
}))
})))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((chr(37) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((((do {
    ((my  $tmp = undef) = $MATCH);
    ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $tmp->to()), ('to' => $tmp->to()), ('bool' => 1)));
    (($MATCH)->{bool} = (do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    (((((chr(37) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->var_twigil($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}))
})
}));
    (($tmp)->{bool} = Main::bool($MATCH));
    ($MATCH = $tmp);
    Main::bool($MATCH)
}) && (do {
    ((my  $m2 = undef) = Perlito::Expression->operator($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.operator'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(123) . chr(125) eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = ((${$MATCH->{'Perlito::Expression.operator'}})->[1]))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->char_any($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'char_any'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (Val::Buf->new(('buf' => ("" . $MATCH->{'char_any'})))))
}) || 1))))
}))
})))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((((((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->exp_stmts($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'exp_stmts'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (Do->new(('block' => Lit::Block->new(('stmts' => ${$MATCH->{'exp_stmts'}}))))))
}) || 1))))
})) || (do {
    (($MATCH)->{to} = $pos1);
    (((do {
    ((my  $m2 = undef) = $grammar->double_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'double_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
}) && (((do {
    ($MATCH->{capture} = (Val::Buf->new(('buf' => ${$MATCH->{'double_quoted_unescape'}}))))
}) || 1))))
}))
})));
            $MATCH
        };
        sub val_buf {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((((((chr(34) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->double_quoted_buf($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        if (Main::bool(exists($MATCH->{'double_quoted_buf'}))) {
            push( @{($MATCH->{'double_quoted_buf'})}, $m2 )
        }
        else {
            ($MATCH->{'double_quoted_buf'} = do {
    (my  $List_a = []);
    (my  $List_v = []);
    push( @{$List_a}, $m2 );
    $List_a
})
        };
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
})) && (((chr(34) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ((my  $args = undef) = $MATCH->{'double_quoted_buf'});
    if (Main::bool(!Main::bool($args))) {
        ($MATCH->{capture} = (Val::Buf->new(('buf' => ''))))
    }
    else {
        ($MATCH->{capture} = (Apply->new(('namespace' => ''), ('code' => 'list:' . chr(60) . chr(126) . chr(62)), ('arguments' => [ map { $_->capture() } @{( ($MATCH->{'double_quoted_buf'}) )} ]))))
    }
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    (((((((chr(39) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do {
    ((my  $m2 = undef) = $grammar->single_quoted_unescape($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'single_quoted_unescape'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(39) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (Val::Buf->new(('buf' => ${$MATCH->{'single_quoted_unescape'}}))))
}) || 1))))
}))
})));
            $MATCH
        };
        sub digits {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
})
})));
            $MATCH
        };
        sub val_int {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    ((my  $count = undef) = 0);
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = $grammar->digit($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to());
        ($count = ($count + 1))
    };
    (($MATCH)->{to} = $last_pos);
    ($count > 0)
}) && (((do {
    ($MATCH->{capture} = (Val::Int->new(('int' => ("" . $MATCH)))))
}) || 1)))
})
})));
            $MATCH
        };
        sub exp_stmts {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((do {
    ((my  $last_match_null = undef) = 0);
    ((my  $last_pos = undef) = $MATCH->to());
    for ( ; Main::bool(((do {
    ((my  $m2 = undef) = Perlito::Expression->delimited_statement($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        if (Main::bool(exists($MATCH->{'Perlito::Expression.delimited_statement'}))) {
            push( @{($MATCH->{'Perlito::Expression.delimited_statement'})}, $m2 )
        }
        else {
            ($MATCH->{'Perlito::Expression.delimited_statement'} = do {
    (my  $List_a = []);
    (my  $List_v = []);
    push( @{$List_a}, $m2 );
    $List_a
})
        };
        1
    }
    else {
        0
    }
}) && (($last_match_null < 2))));  ) {
        if (Main::bool(($last_pos == $MATCH->to()))) {
            ($last_match_null = ($last_match_null + 1))
        }
        else {
            ($last_match_null = 0)
        };
        ($last_pos = $MATCH->to())
    };
    (($MATCH)->{to} = $last_pos);
    1
}) && (((do {
    ($MATCH->{capture} = ([ map { $_->capture() } @{( $MATCH->{'Perlito::Expression.delimited_statement'} )} ]))
}) || 1)))
})
})));
            $MATCH
        };
        sub opt_name {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((my  $last_pos = undef) = $MATCH->to());
    if (Main::bool(!Main::bool((do {
    ((my  $m2 = undef) = $grammar->ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        if (Main::bool(exists($MATCH->{'ident'}))) {
            push( @{($MATCH->{'ident'})}, $m2 )
        }
        else {
            ($MATCH->{'ident'} = do {
    (my  $List_a = []);
    (my  $List_v = []);
    push( @{$List_a}, $m2 );
    $List_a
})
        };
        1
    }
    else {
        0
    }
})))) {
        (($MATCH)->{to} = $last_pos)
    };
    1
})
})));
            $MATCH
        };
        sub var_invocant {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((do {
    ((my  $m2 = undef) = $grammar->var_ident($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'var_ident'} = $m2);
        1
    }
    else {
        0
    }
}) && (((':' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'var_ident'}}))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((do {
    ($MATCH->{capture} = (Var->new(('sigil' => chr(36)), ('twigil' => ''), ('name' => 'self'))))
}) || 1)))
}))
})));
            $MATCH
        };
        sub args_sig {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((do {
    ((my  $m2 = undef) = $grammar->var_invocant($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'var_invocant'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = Perlito::Expression->list_parse($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Expression.list_parse'} = $m2);
        1
    }
    else {
        0
    }
})) && (((do {
    ($MATCH->{capture} = (Sig->new(('invocant' => ${$MATCH->{'var_invocant'}}), ('positional' => Perlito::Expression::expand_list((${$MATCH->{'Perlito::Expression.list_parse'}})->{'exp'})), ('named' => do {
    (my  $Hash_a = {});
    $Hash_a
}))))
}) || 1)))
})
})));
            $MATCH
        };
        sub method_sig {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    (((((((do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
}) && (((chr(40) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->args_sig($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'args_sig'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (((chr(41) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ($MATCH->{capture} = (${$MATCH->{'args_sig'}}))
}) || 1)))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((do {
    ($MATCH->{capture} = (Sig->new(('invocant' => Var->new(('sigil' => chr(36)), ('twigil' => ''), ('name' => 'self'))), ('positional' => do {
    (my  $List_a = []);
    (my  $List_v = []);
    $List_a
}), ('named' => do {
    (my  $Hash_a = {});
    $Hash_a
}))))
}) || 1)))
}))
})));
            $MATCH
        };
        sub method_def {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((((((((do {
    ((my  $m2 = undef) = $grammar->opt_name($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'opt_name'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->method_sig($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'method_sig'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->exp_stmts($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'exp_stmts'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((do {
    die('Syntax Error in method ' . chr(39) . '.', ${$MATCH->{'name'}}, chr(39) . ' near pos' . chr(61), $MATCH->to())
}) || 1)))
}))
})) && (((do {
    ($MATCH->{capture} = (Method->new(('name' => ${$MATCH->{'opt_name'}}), ('sig' => ${$MATCH->{'method_sig'}}), ('block' => ${$MATCH->{'exp_stmts'}}))))
}) || 1)))
})
})));
            $MATCH
        };
        sub sub_def {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((((((((do {
    ((my  $m2 = undef) = $grammar->opt_name($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'opt_name'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->method_sig($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'method_sig'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->exp_stmts($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'exp_stmts'} = $m2);
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (do {
    ((my  $pos1 = undef) = $MATCH->to());
    ((do {
    ((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))
}) || (do {
    (($MATCH)->{to} = $pos1);
    ((((do {
    die('Syntax Error in sub ' . chr(39), ${$MATCH->{'name'}}, chr(39))
}) || 1)))
}))
})) && (((do {
    ($MATCH->{capture} = (Sub->new(('name' => ${$MATCH->{'opt_name'}}), ('sig' => ${$MATCH->{'method_sig'}}), ('block' => ${$MATCH->{'exp_stmts'}}))))
}) || 1)))
})
})));
            $MATCH
        };
        sub token {
            my $grammar = $_[0];
            my $str = $_[1];
            my $pos = $_[2];
            (my  $MATCH = undef);
            ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
            (($MATCH)->{bool} = ((do {
    ((my  $pos1 = undef) = $MATCH->to());
    (do {
    ((((((do {
    ((my  $m2 = undef) = $grammar->opt_name($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'opt_name'} = $m2);
        1
    }
    else {
        0
    }
}) && (do {
    ((my  $m2 = undef) = $grammar->opt_ws($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        1
    }
    else {
        0
    }
})) && (((chr(123) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
    ((my  $m2 = undef) = Perlito::Grammar::Regex->rule($str, $MATCH->to()));
    if (Main::bool($m2)) {
        (($MATCH)->{to} = $m2->to());
        ($MATCH->{'Perlito::Grammar::Regex.rule'} = $m2);
        1
    }
    else {
        0
    }
})) && (((chr(125) eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (((do {
    ((my  $source = undef) = $MATCH->{'opt_name'} . ' ' . chr(40) . ' ' . chr(36) . 'grammar: ' . chr(36) . 'str, ' . chr(36) . 'pos ' . chr(41) . ' ' . chr(123) . ' ' . 'my ' . chr(36) . 'MATCH' . chr(59) . ' ' . chr(36) . 'MATCH ' . chr(61) . ' Perlito::Match.new' . chr(40) . ' str ' . chr(61) . chr(62) . ' ' . chr(36) . 'str, from ' . chr(61) . chr(62) . ' ' . chr(36) . 'pos, to ' . chr(61) . chr(62) . ' ' . chr(36) . 'pos, bool ' . chr(61) . chr(62) . ' 1 ' . chr(41) . chr(59) . ' ' . chr(36) . 'MATCH.bool ' . chr(61) . ' ' . chr(40) . ' ' . (${$MATCH->{'Perlito::Grammar::Regex.rule'}})->emit_perl6() . chr(41) . chr(59) . ' ' . chr(36) . 'MATCH ' . chr(125));
    ((my  $ast = undef) = Perlito::Grammar->method_def($source, 0));
    ($MATCH->{capture} = (${$ast}))
}) || 1)))
})
})));
            $MATCH
        }
    }


}

1;
