# Do not edit this file - Generated by MiniPerl6
use v6-alpha;
class MiniPerl6::Grammar { use MiniPerl6::Grammar::Regex; use MiniPerl6::Grammar::Mapping; use MiniPerl6::Grammar::Control; my  $Class_name; sub get_class_name { my $List__ = \@_; do { [] }; $Class_name }; method ident_digit { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { do { my  $pos1 = $MATCH.to(); (do { (do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.word($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || (do { $MATCH.to($pos1); (('_' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); do { my  $m2 = $grammar.digit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } })) } && do { my  $m2 = $grammar.ident_digit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } } }); return($MATCH) }; method ident { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.word($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || do { $MATCH.to($pos1); (('_' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }) } && do { my  $m2 = $grammar.ident_digit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } }); return($MATCH) }; method full_ident { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { ((('::' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) }) } }); return($MATCH) }; method to_line_end { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.not_newline($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method pod_begin { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.newline($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('=end' eq substr($str, $MATCH.to(), 4)) ?? (1 + $MATCH.to((4 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })) } || do { $MATCH.to($pos1); ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $m2 = $grammar.pod_begin($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })) }) }); return($MATCH) }; method pod_other { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.newline($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('=cut' eq substr($str, $MATCH.to(), 4)) ?? (1 + $MATCH.to((4 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })) } || do { $MATCH.to($pos1); ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $m2 = $grammar.pod_other($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })) }) }); return($MATCH) }; method ws { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $pos1 = $MATCH.to(); (do { ((('#' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.to_line_end($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.newline($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { ((('=begin' eq substr($str, $MATCH.to(), 6)) ?? (1 + $MATCH.to((6 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.pod_begin($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || (do { $MATCH.to($pos1); ((('=kwid' eq substr($str, $MATCH.to(), 5)) ?? (1 + $MATCH.to((5 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.pod_other($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || (do { $MATCH.to($pos1); ((('=pod' eq substr($str, $MATCH.to(), 4)) ?? (1 + $MATCH.to((4 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.pod_other($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || (do { $MATCH.to($pos1); ((('=for' eq substr($str, $MATCH.to(), 4)) ?? (1 + $MATCH.to((4 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.pod_other($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || (do { $MATCH.to($pos1); ((('=head1' eq substr($str, $MATCH.to(), 6)) ?? (1 + $MATCH.to((6 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.pod_other($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }))))) }) } || do { $MATCH.to($pos1); do { my  $m2 = $grammar.space($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } })) } && do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }) } }); return($MATCH) }; method opt_ws { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method opt_ws2 { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method opt_ws3 { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method parse { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.comp_unit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'comp_unit'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.parse($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'parse'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'comp_unit'}), @($($MATCH.{'parse'}))]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'comp_unit'})]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }); return($MATCH) }; method comp_unit { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && (do { my  $pos1 = $MATCH.to(); (do { ((('use' eq substr($str, $MATCH.to(), 3)) ?? (1 + $MATCH.to((3 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('v6-' eq substr($str, $MATCH.to(), 3)) ?? (1 + $MATCH.to((3 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })))))) } || do { $MATCH.to($pos1); 1 }) } && (do { my  $pos1 = $MATCH.to(); (do { (('class' eq substr($str, $MATCH.to(), 5)) ?? (1 + $MATCH.to((5 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('grammar' eq substr($str, $MATCH.to(), 7)) ?? (1 + $MATCH.to((7 + $MATCH.to()))) !! 0) }) } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { $Class_name = ~($MATCH.{'full_ident'}) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(CompUnit.new( 'name' => $($MATCH.{'full_ident'}),'attributes' => {  },'methods' => {  },'body' => $($MATCH.{'exp_stmts'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))))))))))))) } }); return($MATCH) }; method infix_op { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (('+' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('-' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('*' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('/' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (('q' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0)) } || (do { $MATCH.to($pos1); ((('n' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0)) } || (do { $MATCH.to($pos1); (('==' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('!=' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('&&' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('||' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('~~' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('~' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }))))))))))) }); return($MATCH) }; method hyper_op { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (('>>' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method prefix_op { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $pos1 = $MATCH.to(); (do { (('$' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('@' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('%' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('?' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('!' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('++' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('--' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('+' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('-' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('~' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }))))))))) } && do { my  $tmp = $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $tmp.to(),'to' => $tmp.to(),'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('$' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }) }); $tmp.bool(?($MATCH)); $MATCH = $tmp; ?($MATCH) }) } }); return($MATCH) }; method declarator { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (('my' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('state' eq substr($str, $MATCH.to(), 5)) ?? (1 + $MATCH.to((5 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('has' eq substr($str, $MATCH.to(), 3)) ?? (1 + $MATCH.to((3 + $MATCH.to()))) !! 0) })) }); return($MATCH) }; method exp2 { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'exp'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } }); return($MATCH) }; method exp_stmts2 { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'exp_stmts'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } }); return($MATCH) }} 
;
class MiniPerl6::Grammar { method exp { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.term_meth($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'term_meth'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('??' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('!!' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp2($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp2'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Apply.new( 'code' => 'ternary:<?? !!>','arguments' => [$($MATCH.{'term_meth'}), $($MATCH.{'exp'}), $($MATCH.{'exp2'})], )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { say('*** Syntax error in ternary operation') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) })) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.infix_op($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'infix_op'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Apply.new( 'code' => ('infix:<' ~ ($MATCH.{'infix_op'} ~ '>')),'arguments' => [$($MATCH.{'term_meth'}), $($MATCH.{'exp'})], )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((':=' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Bind.new( 'parameters' => $($MATCH.{'term_meth'}),'arguments' => $($MATCH.{'exp'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'term_meth'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }))) }) } }); return($MATCH) }; method opt_ident { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'ident'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || do { $MATCH.to($pos1); (1 && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('postcircumfix:<( )>') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) }) }); return($MATCH) }; method term_meth { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); do { ((('.' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.hyper_op($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'hyper_op'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0))))) } || (do { $MATCH.to($pos1); (((':' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Call.new( 'invocant' => Proto.new( 'name' => ~($MATCH.{'full_ident'}), ),'method' => $($MATCH.{'ident'}),'arguments' => (undef),'hyper' => $($MATCH.{'hyper_op'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } })) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Call.new( 'invocant' => Proto.new( 'name' => ~($MATCH.{'full_ident'}), ),'method' => $($MATCH.{'ident'}),'arguments' => $($MATCH.{'exp_seq'}),'hyper' => $($MATCH.{'hyper_op'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } }) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.term($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'term'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { ((('.' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.hyper_op($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'hyper_op'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'opt_ident'} = $m2;1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0))))) } || (do { $MATCH.to($pos1); (((':' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Call.new( 'invocant' => $($MATCH.{'term'}),'method' => $($MATCH.{'opt_ident'}),'arguments' => (undef),'hyper' => $($MATCH.{'hyper_op'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } })) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Call.new( 'invocant' => $($MATCH.{'term'}),'method' => $($MATCH.{'opt_ident'}),'arguments' => $($MATCH.{'exp_seq'}),'hyper' => $($MATCH.{'hyper_op'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || (do { $MATCH.to($pos1); ((('[' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((']' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Index.new( 'obj' => $($MATCH.{'term'}),'index' => $($MATCH.{'exp'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || (do { $MATCH.to($pos1); ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Lookup.new( 'obj' => $($MATCH.{'term'}),'index' => $($MATCH.{'exp'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'term'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }))) }) }) }); return($MATCH) }; method sub_or_method_name { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { ((('.' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) }) } }); return($MATCH) }; method opt_type { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $pos1 = $MATCH.to(); (do { (('::' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); 1 }) } && (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'full_ident'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })) } || do { $MATCH.to($pos1); (1 && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) }) }); return($MATCH) }; method term { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.var($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'var'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'var'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.prefix_op($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'prefix_op'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Apply.new( 'code' => ('prefix:<' ~ ($MATCH.{'prefix_op'} ~ '>')),'arguments' => [$($MATCH.{'exp'})], )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })) } || (do { $MATCH.to($pos1); ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'exp'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || (do { $MATCH.to($pos1); ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_mapping($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_mapping'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Lit::Hash.new( 'hash' => $($MATCH.{'exp_mapping'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || (do { $MATCH.to($pos1); ((('[' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((']' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Lit::Array.new( 'array' => $($MATCH.{'exp_seq'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || (do { $MATCH.to($pos1); ((('$' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('<' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.sub_or_method_name($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'sub_or_method_name'} = $m2;1 } else { 0 } } } && ((('>' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Lookup.new( 'obj' => Var.new( 'sigil' => '$','twigil' => '','name' => '/', ),'index' => Val::Buf.new( 'buf' => $($MATCH.{'sub_or_method_name'}), ), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || (do { $MATCH.to($pos1); ((('d' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('o' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Do.new( 'block' => $($MATCH.{'exp_stmts'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))))) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.declarator($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'declarator'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_type($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'opt_type'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.var($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'var'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Decl.new( 'decl' => $($MATCH.{'declarator'}),'type' => $($MATCH.{'opt_type'}),'var' => $($MATCH.{'var'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } || (do { $MATCH.to($pos1); ((('u' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('s' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { ((('-' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Use.new( 'mod' => $($MATCH.{'full_ident'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.val($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.lit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'lit'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'lit'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.token($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'token'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'token'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.method($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'method'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'method'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.sub($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'sub'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'sub'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.control($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'control'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'control'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.apply($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'apply'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'apply'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) }))))))))))))))) }); return($MATCH) }} 
;
class MiniPerl6::Grammar { method sigil { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (('$' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('%' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('@' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('&' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }))) }); return($MATCH) }; method twigil { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $pos1 = $MATCH.to(); (do { (('.' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('!' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || (do { $MATCH.to($pos1); (('^' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); (('*' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) }))) } } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method var_name { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } } || (do { $MATCH.to($pos1); (('/' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); do { my  $m2 = $grammar.digit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'digit'} = $m2;1 } else { 0 } } } })) }); return($MATCH) }; method var { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.sigil($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'sigil'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.twigil($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'twigil'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.var_name($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'var_name'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Var.new( 'sigil' => ~($MATCH.{'sigil'}),'twigil' => ~($MATCH.{'twigil'}),'name' => ~($MATCH.{'var_name'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method val { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.val_undef($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val_undef'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val_undef'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.val_int($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val_int'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val_int'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.val_bit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val_bit'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val_bit'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || (do { $MATCH.to($pos1); (do { my  $m2 = $grammar.val_num($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val_num'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val_num'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.val_buf($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'val_buf'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'val_buf'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) })))) }); return($MATCH) }; method val_bit { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { ((('T' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('r' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('u' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Bit.new( 'bit' => 1, )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || do { $MATCH.to($pos1); ((('F' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('a' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('l' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('s' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Bit.new( 'bit' => 0, )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) }) }); return($MATCH) }} 
;
class MiniPerl6::Grammar { method val_undef { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('u' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('n' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('d' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('f' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $tmp = $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $tmp.to(),'to' => $tmp.to(),'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (('w' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } }); $tmp.bool(!($MATCH)); $MATCH = $tmp; ?($MATCH) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Undef.new(  )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } }); return($MATCH) }; method val_num { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('TODO: val_num') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method double_quoted { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { ((('\\' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.double_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'double_quoted'} = $m2;1 } else { 0 } } })) } || (do { $MATCH.to($pos1); (do { my  $tmp = $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $tmp.to(),'to' => $tmp.to(),'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (('"' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } }); $tmp.bool(!($MATCH)); $MATCH = $tmp; ?($MATCH) } && ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.double_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'double_quoted'} = $m2;1 } else { 0 } } })) } || do { $MATCH.to($pos1); 1 })) }); return($MATCH) }; method single_quoted { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { ((('\\' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.single_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'single_quoted'} = $m2;1 } else { 0 } } })) } || (do { $MATCH.to($pos1); (do { my  $tmp = $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $tmp.to(),'to' => $tmp.to(),'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (('\'' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } }); $tmp.bool(!($MATCH)); $MATCH = $tmp; ?($MATCH) } && ((('' ne substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.single_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'single_quoted'} = $m2;1 } else { 0 } } })) } || do { $MATCH.to($pos1); 1 })) }); return($MATCH) }; method digits { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.digit($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.digits($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'digits'} = $m2;1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }) } }); return($MATCH) }; method val_buf { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { ((('"' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.double_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'double_quoted'} = $m2;1 } else { 0 } } } && ((('"' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Buf.new( 'buf' => ~($MATCH.{'double_quoted'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } || do { $MATCH.to($pos1); ((('\'' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.single_quoted($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'single_quoted'} = $m2;1 } else { 0 } } } && ((('\'' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Buf.new( 'buf' => ~($MATCH.{'single_quoted'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) }) }); return($MATCH) }; method val_int { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.digits($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'digits'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Val::Int.new( 'int' => ~($MATCH), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } }); return($MATCH) }; method exp_stmts { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'exp'}), @($($MATCH.{'exp_stmts'}))]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((';' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'exp'})]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })) }) }) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }); return($MATCH) }; method exp_seq { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((',' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((',' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'exp'}), @($($MATCH.{'exp_seq'}))]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (((',' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } }) } || do { $MATCH.to($pos1); 1 }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([$($MATCH.{'exp'})]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })) }) }) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return([]) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }); return($MATCH) }} 
;
class MiniPerl6::Grammar { method lit { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.lit_object($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'lit_object'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'lit_object'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } }); return($MATCH) }; method lit_seq { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('TODO: lit_seq') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method lit_array { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('TODO: lit_array') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method lit_hash { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('TODO: lit_hash') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method lit_code { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('X' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return('TODO - Lit::Code') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method lit_object { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('::' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_mapping($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_mapping'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Lit::Object.new( 'class' => $($MATCH.{'full_ident'}),'fields' => $($MATCH.{'exp_mapping'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { say('*** Syntax Error parsing Constructor'); die() }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }))) } }); return($MATCH) }; method bind { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((':=' eq substr($str, $MATCH.to(), 2)) ?? (1 + $MATCH.to((2 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp2($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp2'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Bind.new( 'parameters' => $($MATCH.{'exp'}),'arguments' => $($MATCH.{'exp2'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))) } }); return($MATCH) }; method call { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.exp($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp'} = $m2;1 } else { 0 } } } && ((('.' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } } && ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Call.new( 'invocant' => $($MATCH.{'exp'}),'method' => $($MATCH.{'ident'}),'arguments' => $($MATCH.{'exp_seq'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))))) } }); return($MATCH) }; method apply { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.full_ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'full_ident'} = $m2;1 } else { 0 } } } && do { my  $pos1 = $MATCH.to(); (do { (do { my  $pos1 = $MATCH.to(); (do { ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0))))) } || do { $MATCH.to($pos1); (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } })) }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Apply.new( 'code' => $($MATCH.{'full_ident'}),'arguments' => $($MATCH.{'exp_seq'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Apply.new( 'code' => $($MATCH.{'full_ident'}),'arguments' => [], )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }) } }); return($MATCH) }; method opt_name { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { do { my  $m2 = $grammar.ident($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'ident'} = $m2;1 } else { 0 } } } } || do { $MATCH.to($pos1); 1 }) }); return($MATCH) }; method invocant { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.var($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'var'} = $m2;1 } else { 0 } } } && (((':' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'var'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Var.new( 'sigil' => '$','twigil' => '','name' => 'self', )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }); return($MATCH) }; method sig { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { (do { my  $m2 = $grammar.invocant($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'invocant'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_seq($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_seq'} = $m2;1 } else { 0 } } } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Sig.new( 'invocant' => $($MATCH.{'invocant'}),'positional' => $($MATCH.{'exp_seq'}),'named' => {  }, )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))) } }); return($MATCH) }; method method_sig { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); (do { (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('(' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.sig($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'sig'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (((')' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return($($MATCH.{'sig'})) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Sig.new( 'invocant' => Var.new( 'sigil' => '$','twigil' => '','name' => 'self', ),'positional' => [],'named' => {  }, )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) }); return($MATCH) }; method method { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('m' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('t' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('h' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('o' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('d' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_name($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'opt_name'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.method_sig($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'method_sig'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { say('*** Syntax Error in method \'', get_class_name(), '.', $($MATCH.{'name'}), '\' near pos=', $MATCH.to()); die('error in Block') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Method.new( 'name' => $($MATCH.{'opt_name'}),'sig' => $($MATCH.{'method_sig'}),'block' => $($MATCH.{'exp_stmts'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 })))))))))))))))) } }); return($MATCH) }; method sub { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('s' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('u' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('b' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_name($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'opt_name'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.method_sig($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'method_sig'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.exp_stmts($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'exp_stmts'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $pos1 = $MATCH.to(); (do { (('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) } || do { $MATCH.to($pos1); do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { say('*** Syntax Error in sub \'', $($MATCH.{'name'}), '\''); die('error in Block') }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 } }) } && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { return(Sub.new( 'name' => $($MATCH.{'opt_name'}),'sig' => $($MATCH.{'method_sig'}),'block' => $($MATCH.{'exp_stmts'}), )) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))))))))))) } }); return($MATCH) }} 
;
class MiniPerl6::Grammar { method token { my $str; my $pos; do {  $str = @_.[0];  $pos = @_.[1]; [$str, $pos] }; my  $MATCH; $MATCH = MiniPerl6::Perl5::Match.new( 'str' => $str,'from' => $pos,'to' => $pos,'bool' => 1, ); $MATCH.bool(do { my  $pos1 = $MATCH.to(); do { ((('t' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('o' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('k' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('e' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && ((('n' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = $grammar.ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_name($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'opt_name'} = $m2;1 } else { 0 } } } && (do { my  $m2 = $grammar.opt_ws($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());1 } else { 0 } } } && ((('{' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && (do { my  $m2 = MiniPerl6::Grammar::Regex.rule($str, $MATCH.to()); do { if ($m2) { $MATCH.to($m2.to());$MATCH.{'MiniPerl6::Grammar::Regex.rule'} = $m2;1 } else { 0 } } } && ((('}' eq substr($str, $MATCH.to(), 1)) ?? (1 + $MATCH.to((1 + $MATCH.to()))) !! 0) && do { my  $ret = sub  { my $List__ = \@_; do { [] }; do { my  $source = ('method ' ~ ($MATCH.{'opt_name'} ~ (' ( $grammar: $str, $pos ) { ' ~ ('my $MATCH; $MATCH := ::MiniPerl6::Perl5::Match( \'str\' => $str, \'from\' => $pos, \'to\' => $pos, \'bool\' => 1 ); ' ~ ('$MATCH.bool( ' ~ ($($MATCH.{'MiniPerl6::Grammar::Regex.rule'}).emit() ~ ('); ' ~ 'return $MATCH }'))))))); my  $ast = MiniPerl6::Grammar.term($source); return($($ast)) }; '974^213' }.(); do { if (($ret ne '974^213')) { $MATCH.capture($ret);return($MATCH) } else {  } }; 1 }))))))))))) } }); return($MATCH) }} 
;
