Changeset 14977
- Timestamp:
- 01/02/07 11:22:07 (23 months ago)
- Location:
- v6/v6-MiniPerl6
- Files:
-
- 10 modified
-
lib/MiniPerl6/Perl5/Emitter.pm (modified) (3 diffs)
-
lib5/MiniPerl6/Emitter/Token.pm (modified) (1 diff)
-
lib5/MiniPerl6/Grammar.pm (modified) (1 diff)
-
lib5/MiniPerl6/Grammar/Control.pm (modified) (1 diff)
-
lib5/MiniPerl6/Grammar/Mapping.pm (modified) (1 diff)
-
lib5/MiniPerl6/Grammar/Regex.pm (modified) (1 diff)
-
lib5/MiniPerl6/Parrot/Emitter.pm (modified) (1 diff)
-
lib5/MiniPerl6/Perl5/Emitter.pm (modified) (1 diff)
-
lib5/MiniPerl6/Perl5MO/Emitter.pm (modified) (2 diffs)
-
util/build-perl5.sh (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
v6/v6-MiniPerl6/lib/MiniPerl6/Perl5/Emitter.pm
r14886 r14977 316 316 has $.result; 317 317 method emit { 318 return 319 #'do { print Main::perl(caller(),' ~ $.result.emit ~ '); return(' ~ $.result.emit ~ ') }'; 318 320 'return(' ~ $.result.emit ~ ')'; 319 321 } … … 388 390 389 391 my $pos := $sig.positional; 390 my $str := 'my $List__ = \@_; no strict "vars"; '; 392 my $str := 'my $List__ = \@_; '; # no strict "vars"; '; 393 394 # TODO - follow recursively 395 my $pos := $sig.positional; 396 for @$pos -> $field { 397 $str := $str ~ 'my ' ~ $field.emit ~ '; '; 398 }; 399 391 400 my $bind := ::Bind( 392 401 'parameters' => ::Lit::Array( array => $sig.positional ), … … 422 431 # say $invocant.emit; 423 432 my $pos := $sig.positional; 424 my $str := 'my $List__ = \@_; no strict "vars"; '; 433 my $str := 'my $List__ = \@_; '; # no strict "vars"; '; 434 435 # TODO - follow recursively 436 my $pos := $sig.positional; 437 for @$pos -> $field { 438 $str := $str ~ 'my ' ~ $field.emit ~ '; '; 439 }; 425 440 426 441 my $bind := ::Bind( -
v6/v6-MiniPerl6/lib5/MiniPerl6/Emitter/Token.pm
r14790 r14977 4 4 use MiniPerl6::Perl5::Runtime; 5 5 use MiniPerl6::Perl5::Match; 6 package Rul; sub new { shift; bless { @_ }, "Rul" } sub constant { my $ str = $_[0]; my $len = Main::chars($str, ); do { if (($str eq '\\')) { $str = '\\\\' } else { } }; do { if (($str eq '\'')) { $str = '\\\'' } else { } }; do { if ($len) { ('( ( \'' . ($str . ('\' eq substr( $str, $MATCH.to, ' . ($len . (')) ' . (' ?? (1 + $MATCH.to( ' . ($len . (' + $MATCH.to ))' . (' !! (0) ' . ')'))))))))) } else { return('1') } } }6 package Rul; sub new { shift; bless { @_ }, "Rul" } sub constant { my $List__ = \@_; my $str; do { $str = $List__->[0]; [$str] }; my $len = Main::chars($str, ); do { if (($str eq '\\')) { $str = '\\\\' } else { } }; do { if (($str eq '\'')) { $str = '\\\'' } else { } }; do { if ($len) { ('( ( \'' . ($str . ('\' eq substr( $str, $MATCH.to, ' . ($len . (')) ' . (' ?? (1 + $MATCH.to( ' . ($len . (' + $MATCH.to ))' . (' !! (0) ' . ')'))))))))) } else { return('1') } } } 7 7 ; 8 package Rul::Quantifier; sub new { shift; bless { @_ }, "Rul::Quantifier" } sub term { @_ == 1 ? ( $_[0]->{term} ) : ( $_[0]->{term} = $_[1] ) }; sub quant { @_ == 1 ? ( $_[0]->{quant} ) : ( $_[0]->{quant} = $_[1] ) }; sub greedy { @_ == 1 ? ( $_[0]->{greedy} ) : ( $_[0]->{greedy} = $_[1] ) }; sub ws1 { @_ == 1 ? ( $_[0]->{ws1} ) : ( $_[0]->{ws1} = $_[1] ) }; sub ws2 { @_ == 1 ? ( $_[0]->{ws2} ) : ( $_[0]->{ws2} = $_[1] ) }; sub ws3 { @_ == 1 ? ( $_[0]->{ws3} ) : ( $_[0]->{ws3} = $_[1] ) }; sub emit { my $self = $_[0]; $_[0]->{term}->emit() }8 package Rul::Quantifier; sub new { shift; bless { @_ }, "Rul::Quantifier" } sub term { @_ == 1 ? ( $_[0]->{term} ) : ( $_[0]->{term} = $_[1] ) }; sub quant { @_ == 1 ? ( $_[0]->{quant} ) : ( $_[0]->{quant} = $_[1] ) }; sub greedy { @_ == 1 ? ( $_[0]->{greedy} ) : ( $_[0]->{greedy} = $_[1] ) }; sub ws1 { @_ == 1 ? ( $_[0]->{ws1} ) : ( $_[0]->{ws1} = $_[1] ) }; sub ws2 { @_ == 1 ? ( $_[0]->{ws2} ) : ( $_[0]->{ws2} = $_[1] ) }; sub ws3 { @_ == 1 ? ( $_[0]->{ws3} ) : ( $_[0]->{ws3} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; $self->{term}->emit() } 9 9 ; 10 package Rul::Or; sub new { shift; bless { @_ }, "Rul::Or" } sub or { @_ == 1 ? ( $_[0]->{or} ) : ( $_[0]->{or} = $_[1] ) }; sub emit { my $self = $_[0]; ('do { ' . ('my $pos1 := $MATCH.to(); do{ ' . (Main::join([ map { $_->emit() } @{ $_[0]->{or} } ], '} || do { $MATCH.to( $pos1 ); ') . '} }'))) }10 package Rul::Or; sub new { shift; bless { @_ }, "Rul::Or" } sub or { @_ == 1 ? ( $_[0]->{or} ) : ( $_[0]->{or} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('do { ' . ('my $pos1 := $MATCH.to(); do{ ' . (Main::join([ map { $_->emit() } @{ $self->{or} } ], '} || do { $MATCH.to( $pos1 ); ') . '} }'))) } 11 11 ; 12 package Rul::Concat; sub new { shift; bless { @_ }, "Rul::Concat" } sub concat { @_ == 1 ? ( $_[0]->{concat} ) : ( $_[0]->{concat} = $_[1] ) }; sub emit { my $self = $_[0]; ('(' . (Main::join([ map { $_->emit() } @{ $_[0]->{concat} } ], ' && ') . ')')) }12 package Rul::Concat; sub new { shift; bless { @_ }, "Rul::Concat" } sub concat { @_ == 1 ? ( $_[0]->{concat} ) : ( $_[0]->{concat} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('(' . (Main::join([ map { $_->emit() } @{ $self->{concat} } ], ' && ') . ')')) } 13 13 ; 14 package Rul::Subrule; sub new { shift; bless { @_ }, "Rul::Subrule" } sub metasyntax { @_ == 1 ? ( $_[0]->{metasyntax} ) : ( $_[0]->{metasyntax} = $_[1] ) }; sub emit { my $self = $_[0]; my $meth = ((1 + index($_[0]->{metasyntax}, '.')) ? $_[0]->{metasyntax} : ('$grammar.' . $_[0]->{metasyntax})); ('do { ' . ('my $m2 := ' . ($meth . ('($str, $MATCH.to); ' . ('if $m2 { $MATCH.to( $m2.to ); $MATCH{\'' . ($_[0]->{metasyntax} . ('\'} := $m2; 1 } else { 0 } ' . '}'))))))) }14 package Rul::Subrule; sub new { shift; bless { @_ }, "Rul::Subrule" } sub metasyntax { @_ == 1 ? ( $_[0]->{metasyntax} ) : ( $_[0]->{metasyntax} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; my $meth = ((1 + index($self->{metasyntax}, '.')) ? $self->{metasyntax} : ('$grammar.' . $self->{metasyntax})); ('do { ' . ('my $m2 := ' . ($meth . ('($str, $MATCH.to); ' . ('if $m2 { $MATCH.to( $m2.to ); $MATCH{\'' . ($self->{metasyntax} . ('\'} := $m2; 1 } else { 0 } ' . '}'))))))) } 15 15 ; 16 package Rul::SubruleNoCapture; sub new { shift; bless { @_ }, "Rul::SubruleNoCapture" } sub metasyntax { @_ == 1 ? ( $_[0]->{metasyntax} ) : ( $_[0]->{metasyntax} = $_[1] ) }; sub emit { my $self = $_[0]; my $meth = ((1 + index($_[0]->{metasyntax}, '.')) ? $_[0]->{metasyntax} : ('$grammar.' . $_[0]->{metasyntax})); ('do { ' . ('my $m2 := ' . ($meth . ('($str, $MATCH.to); ' . ('if $m2 { $MATCH.to( $m2.to ); 1 } else { 0 } ' . '}'))))) }16 package Rul::SubruleNoCapture; sub new { shift; bless { @_ }, "Rul::SubruleNoCapture" } sub metasyntax { @_ == 1 ? ( $_[0]->{metasyntax} ) : ( $_[0]->{metasyntax} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; my $meth = ((1 + index($self->{metasyntax}, '.')) ? $self->{metasyntax} : ('$grammar.' . $self->{metasyntax})); ('do { ' . ('my $m2 := ' . ($meth . ('($str, $MATCH.to); ' . ('if $m2 { $MATCH.to( $m2.to ); 1 } else { 0 } ' . '}'))))) } 17 17 ; 18 package Rul::Var; sub new { shift; bless { @_ }, "Rul::Var" } sub sigil { @_ == 1 ? ( $_[0]->{sigil} ) : ( $_[0]->{sigil} = $_[1] ) }; sub twigil { @_ == 1 ? ( $_[0]->{twigil} ) : ( $_[0]->{twigil} = $_[1] ) }; sub name { @_ == 1 ? ( $_[0]->{name} ) : ( $_[0]->{name} = $_[1] ) }; sub emit { my $self = $_[0]; my $table = { '$' => '$','@' => '$List_','%' => '$Hash_','&' => '$Code_', }; ($table->{$_[0]->{sigil}} . $_[0]->{name}) }18 package Rul::Var; sub new { shift; bless { @_ }, "Rul::Var" } sub sigil { @_ == 1 ? ( $_[0]->{sigil} ) : ( $_[0]->{sigil} = $_[1] ) }; sub twigil { @_ == 1 ? ( $_[0]->{twigil} ) : ( $_[0]->{twigil} = $_[1] ) }; sub name { @_ == 1 ? ( $_[0]->{name} ) : ( $_[0]->{name} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; my $table = { '$' => '$','@' => '$List_','%' => '$Hash_','&' => '$Code_', }; ($table->{$self->{sigil}} . $self->{name}) } 19 19 ; 20 package Rul::Constant; sub new { shift; bless { @_ }, "Rul::Constant" } sub constant { @_ == 1 ? ( $_[0]->{constant} ) : ( $_[0]->{constant} = $_[1] ) }; sub emit { my $self = $_[0]; my $str = $_[0]->{constant}; Rul::constant($str) }20 package Rul::Constant; sub new { shift; bless { @_ }, "Rul::Constant" } sub constant { @_ == 1 ? ( $_[0]->{constant} ) : ( $_[0]->{constant} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; my $str = $self->{constant}; Rul::constant($str) } 21 21 ; 22 package Rul::Dot; sub new { shift; bless { @_ }, "Rul::Dot" } sub emit { my $self = $_[0]; ('( (\'\' ne substr( $str, $MATCH.to, 1 )) ' . (' ?? (1 + $MATCH.to( 1 + $MATCH.to ))' . (' !! (0) ' . ')'))) }22 package Rul::Dot; sub new { shift; bless { @_ }, "Rul::Dot" } sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('( (\'\' ne substr( $str, $MATCH.to, 1 )) ' . (' ?? (1 + $MATCH.to( 1 + $MATCH.to ))' . (' !! (0) ' . ')'))) } 23 23 ; 24 package Rul::SpecialChar; sub new { shift; bless { @_ }, "Rul::SpecialChar" } sub char { @_ == 1 ? ( $_[0]->{char} ) : ( $_[0]->{char} = $_[1] ) }; sub emit { my $self = $_[0]; my $char = $_[0]->{char}; do { if (($char eq 'n')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'newline', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 'N')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'not_newline', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 'd')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'digit', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 's')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'space', );$rul = $rul->emit();return($rul) } else { } }; return(Rul::constant($char)) }24 package Rul::SpecialChar; sub new { shift; bless { @_ }, "Rul::SpecialChar" } sub char { @_ == 1 ? ( $_[0]->{char} ) : ( $_[0]->{char} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; my $char = $self->{char}; do { if (($char eq 'n')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'newline', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 'N')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'not_newline', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 'd')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'digit', );$rul = $rul->emit();return($rul) } else { } }; do { if (($char eq 's')) { my $rul = Rul::SubruleNoCapture->new( 'metasyntax' => 'space', );$rul = $rul->emit();return($rul) } else { } }; return(Rul::constant($char)) } 25 25 ; 26 package Rul::Block; sub new { shift; bless { @_ }, "Rul::Block" } sub closure { @_ == 1 ? ( $_[0]->{closure} ) : ( $_[0]->{closure} = $_[1] ) }; sub emit { my $self = $_[0]; ('do { ' . ('my $ret := ( sub {' . ('do {' . ($_[0]->{closure} . ('}; ' . ('\'974^213\' } ).();' . ('if $ret ne \'974^213\' {' . ('$MATCH.capture( $ret ); ' . ('return $MATCH;' . ('};' . ('1' . '}'))))))))))) }26 package Rul::Block; sub new { shift; bless { @_ }, "Rul::Block" } sub closure { @_ == 1 ? ( $_[0]->{closure} ) : ( $_[0]->{closure} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('do { ' . ('my $ret := ( sub {' . ('do {' . ($self->{closure} . ('}; ' . ('\'974^213\' } ).();' . ('if $ret ne \'974^213\' {' . ('$MATCH.capture( $ret ); ' . ('return $MATCH;' . ('};' . ('1' . '}'))))))))))) } 27 27 ; 28 package Rul::InterpolateVar; sub new { shift; bless { @_ }, "Rul::InterpolateVar" } sub var { @_ == 1 ? ( $_[0]->{var} ) : ( $_[0]->{var} = $_[1] ) }; sub emit { my $self = $_[0]; Main::say(('# TODO: interpolate var ' . ($_[0]->{var}->emit() . ''))); die() }28 package Rul::InterpolateVar; sub new { shift; bless { @_ }, "Rul::InterpolateVar" } sub var { @_ == 1 ? ( $_[0]->{var} ) : ( $_[0]->{var} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; Main::say(('# TODO: interpolate var ' . ($self->{var}->emit() . ''))); die() } 29 29 ; 30 package Rul::NamedCapture; sub new { shift; bless { @_ }, "Rul::NamedCapture" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub ident { @_ == 1 ? ( $_[0]->{ident} ) : ( $_[0]->{ident} = $_[1] ) }; sub emit { my $self = $_[0]; Main::say(('# TODO: named capture ' . ($_[0]->{ident} . (' := ' . ($_[0]->{rule}->emit() . ''))))); die() }30 package Rul::NamedCapture; sub new { shift; bless { @_ }, "Rul::NamedCapture" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub ident { @_ == 1 ? ( $_[0]->{ident} ) : ( $_[0]->{ident} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; Main::say(('# TODO: named capture ' . ($self->{ident} . (' := ' . ($self->{rule}->emit() . ''))))); die() } 31 31 ; 32 package Rul::Before; sub new { shift; bless { @_ }, "Rul::Before" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = $_[0]; ('do { ' . ('my $tmp := $MATCH; ' . ('$MATCH := ::MiniPerl6::Perl5::Match( \'str\' => $str, \'from\' => $tmp.to, \'to\' => $tmp.to, \'bool\' => 1 ); ' . ('$MATCH.bool( ' . ($_[0]->{rule}->emit() . ('); ' . ('$tmp.bool( ?$MATCH ); ' . ('$MATCH := $tmp; ' . ('?$MATCH; ' . '}'))))))))) }32 package Rul::Before; sub new { shift; bless { @_ }, "Rul::Before" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('do { ' . ('my $tmp := $MATCH; ' . ('$MATCH := ::MiniPerl6::Perl5::Match( \'str\' => $str, \'from\' => $tmp.to, \'to\' => $tmp.to, \'bool\' => 1 ); ' . ('$MATCH.bool( ' . ($self->{rule}->emit() . ('); ' . ('$tmp.bool( ?$MATCH ); ' . ('$MATCH := $tmp; ' . ('?$MATCH; ' . '}'))))))))) } 33 33 ; 34 package Rul::NotBefore; sub new { shift; bless { @_ }, "Rul::NotBefore" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = $_[0]; ('do { ' . ('my $tmp := $MATCH; ' . ('$MATCH := ::MiniPerl6::Perl5::Match( \'str\' => $str, \'from\' => $tmp.to, \'to\' => $tmp.to, \'bool\' => 1 ); ' . ('$MATCH.bool( ' . ($_[0]->{rule}->emit() . ('); ' . ('$tmp.bool( !$MATCH ); ' . ('$MATCH := $tmp; ' . ('?$MATCH; ' . '}'))))))))) }34 package Rul::NotBefore; sub new { shift; bless { @_ }, "Rul::NotBefore" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; ('do { ' . ('my $tmp := $MATCH; ' . ('$MATCH := ::MiniPerl6::Perl5::Match( \'str\' => $str, \'from\' => $tmp.to, \'to\' => $tmp.to, \'bool\' => 1 ); ' . ('$MATCH.bool( ' . ($self->{rule}->emit() . ('); ' . ('$tmp.bool( !$MATCH ); ' . ('$MATCH := $tmp; ' . ('?$MATCH; ' . '}'))))))))) } 35 35 ; 36 package Rul::NegateCharClass; sub new { shift; bless { @_ }, "Rul::NegateCharClass" } sub chars { @_ == 1 ? ( $_[0]->{chars} ) : ( $_[0]->{chars} = $_[1] ) }; sub emit { my $self = $_[0]; Main::say('TODO NegateCharClass'); die() }36 package Rul::NegateCharClass; sub new { shift; bless { @_ }, "Rul::NegateCharClass" } sub chars { @_ == 1 ? ( $_[0]->{chars} ) : ( $_[0]->{chars} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; Main::say('TODO NegateCharClass'); die() } 37 37 ; 38 package Rul::CharClass; sub new { shift; bless { @_ }, "Rul::CharClass" } sub chars { @_ == 1 ? ( $_[0]->{chars} ) : ( $_[0]->{chars} = $_[1] ) }; sub emit { my $self = $_[0]; Main::say('TODO CharClass'); die() }38 package Rul::CharClass; sub new { shift; bless { @_ }, "Rul::CharClass" } sub chars { @_ == 1 ? ( $_[0]->{chars} ) : ( $_[0]->{chars} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; Main::say('TODO CharClass'); die() } 39 39 ; 40 package Rul::Capture; sub new { shift; bless { @_ }, "Rul::Capture" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = $_[0]; Main::say('TODO RulCapture'); die() }40 package Rul::Capture; sub new { shift; bless { @_ }, "Rul::Capture" } sub rule { @_ == 1 ? ( $_[0]->{rule} ) : ( $_[0]->{rule} = $_[1] ) }; sub emit { my $self = shift; my $List__ = \@_; do { [] }; Main::say('TODO RulCapture'); die() } 41 41 ; 42 42 1; -
v6/v6-MiniPerl6/lib5/MiniPerl6/Grammar.pm
r14828 r14977 4 4 use MiniPerl6::Perl5::Runtime; 5 5 use MiniPerl6::Perl5::Match; 6 package MiniPerl6::Grammar; sub new { shift; bless { @_ }, "MiniPerl6::Grammar" } use MiniPerl6::Grammar::Regex; use MiniPerl6::Grammar::Mapping; use MiniPerl6::Grammar::Control; my $Class_name; sub get_class_name { $Class_name }; sub ident_digit { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub ident { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub full_ident { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub to_line_end { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub pod_begin { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub pod_other { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub ws { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub opt_ws { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub opt_ws2 { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub opt_ws3 { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub parse { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { 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 { do { return([]) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 } }) }); return($MATCH) }; sub comp_unit { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { 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) }; sub infix_op { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub hyper_op { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub prefix_op { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 ? 1 : 0)); $MATCH = $tmp; ($MATCH ? 1 : 0) }) } }); return($MATCH) }; sub declarator { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub exp2 { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { do { return(${$MATCH->{'exp'}}) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 }) } }); return($MATCH) }; sub exp_stmts2 { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 {do { return(${$MATCH->{'exp_stmts'}}) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 }) } }); return($MATCH) }6 package MiniPerl6::Grammar; sub new { shift; bless { @_ }, "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 }; sub ident_digit { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub ident { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub full_ident { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub to_line_end { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub pod_begin { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub pod_other { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub ws { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub opt_ws { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub opt_ws2 { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub opt_ws3 { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub parse { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub comp_unit { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub infix_op { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub hyper_op { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub prefix_op { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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 ? 1 : 0)); $MATCH = $tmp; ($MATCH ? 1 : 0) }) } }); return($MATCH) }; sub declarator { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub exp2 { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub exp_stmts2 { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) } 7 7 ; 8 package MiniPerl6::Grammar; sub new { shift; bless { @_ }, "MiniPerl6::Grammar" } sub exp { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { do { Main::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 { 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 { 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 { do { return(${$MATCH->{'term_meth'}}) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 } }))) }) } }); return($MATCH) }; sub opt_ident { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { do { return('postcircumfix:<( )>') }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 }) }) }); return($MATCH) }; sub term_meth { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { 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 { 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 { 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 { 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 { 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 { do { return(${$MATCH->{'term'}}) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 } }))) }) }) }); return($MATCH) }; sub sub_or_method_name { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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) }; sub opt_type { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { do { return('') }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 }) }) }); return($MATCH) }; sub term { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 {do { return(${$MATCH->{'control'}}) }; '974^213' }->(); do { if (($ret ne '974^213')) { $MATCH->capture($ret);return($MATCH) } else { } }; 1 }) })))))))))))))) }); return($MATCH) }8 package MiniPerl6::Grammar; sub new { shift; bless { @_ }, "MiniPerl6::Grammar" } sub exp { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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 { Main::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) }; sub opt_ident { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub term_meth { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub sub_or_method_name { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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) }; sub opt_type { my $grammar = shift; my $List__ = \@_; my $str; my $pos; do { $str = $List__->[0]; $pos = $List__->[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_
