# Do not edit this file - Generated by Perlito 7.0
use v5;
use utf8;
use strict;
use warnings;
no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion');
use Perlito::Perl5::Runtime;
use Perlito::Perl5::Prelude;
our $MATCH = Perlito::Match->new();
{
package GLOBAL;
sub new { shift; bless { @_ }, "GLOBAL" }
# use v6
;
{
package Perlito::Grammar;
sub new { shift; bless { @_ }, "Perlito::Grammar" }
sub unless {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::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)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('n' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('l' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('s' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('s' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'unless' . chr(39)))
};
($MATCH->{capture} = (If->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => Lit::Block->new(('stmts' => do {
(my $List_a = bless [], 'ARRAY');
(my $List_v = bless [], 'ARRAY');
$List_a
}))), ('otherwise' => $body))))
}) || 1)))
})
})));
$MATCH
};
sub if {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
(($MATCH)->{bool} = ((do {
((my $pos1) = $MATCH->to());
(do {
((((((('i' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('f' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
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()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
}) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('l' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('s' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->exp2($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp2'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
((my $otherwise) = (${$MATCH->{'exp2'}})->{'exp'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'if' . chr(39)))
};
if (!((defined($otherwise)))) {
die(('Missing code block in ' . chr(39) . 'else' . chr(39)))
};
if (Main::isa($otherwise, 'Lit::Hash')) {
($otherwise = Lit::Block->new(('stmts' => $otherwise->hash1())))
};
($MATCH->{capture} = (If->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => $body), ('otherwise' => $otherwise))))
}) || 1)))
}) || (do {
(($MATCH)->{to} = $pos1);
(((((((do {
((my $m2) = $grammar->opt_ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
}) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('l' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('s' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->if($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'if'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'if' . chr(39)))
};
($MATCH->{capture} = (If->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => $body), ('otherwise' => Lit::Block->new(('stmts' => do {
(my $List_a = bless [], 'ARRAY');
(my $List_v = bless [], 'ARRAY');
push( @{$List_a}, ${$MATCH->{'if'}} );
$List_a
}))))))
}) || 1))))
})) || (do {
(($MATCH)->{to} = $pos1);
((((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'if' . chr(39)))
};
($MATCH->{capture} = (If->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => $body), ('otherwise' => Lit::Block->new(('stmts' => do {
(my $List_a = bless [], 'ARRAY');
(my $List_v = bless [], 'ARRAY');
$List_a
}))))))
}) || 1)))
}))
}))
})
})));
$MATCH
};
sub when {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
(($MATCH)->{bool} = ((do {
((my $pos1) = $MATCH->to());
(do {
((((((((('w' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('h' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('n' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'when' . chr(39)))
};
($MATCH->{capture} = (When->new(('parameters' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => $body))))
}) || 1)))
})
})));
$MATCH
};
sub for {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
(($MATCH)->{bool} = ((do {
((my $pos1) = $MATCH->to());
(do {
(((((((('f' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('o' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('r' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'when' . chr(39)))
};
($MATCH->{capture} = (For->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('topic' => undef()), ('body' => $body))))
}) || 1)))
})
})));
$MATCH
};
sub while {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
(($MATCH)->{bool} = ((do {
((my $pos1) = $MATCH->to());
(do {
(((((((((('w' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('h' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('i' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('l' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('e' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
die(('Missing code block in ' . chr(39) . 'while' . chr(39)))
};
($MATCH->{capture} = (While->new(('cond' => (${$MATCH->{'exp'}})->{'exp'}), ('body' => $body))))
}) || 1)))
})
})));
$MATCH
};
sub loop {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
(my $MATCH);
($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1)));
(($MATCH)->{bool} = ((do {
((my $pos1) = $MATCH->to());
(do {
((((((((('l' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && ((('o' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('o' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && ((('p' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = $grammar->ws($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
1
}
else {
0
}
})) && (do {
((my $m2) = $grammar->exp($str, $MATCH->to()));
if ($m2) {
(($MATCH)->{to} = $m2->to());
($MATCH->{'exp'} = $m2);
1
}
else {
0
}
})) && (((do {
((my $body) = (${$MATCH->{'exp'}})->{'end_block'});
if (!((defined($body)))) {
($body = (${$MATCH->{'exp'}})->{'exp'});
if (Main::isa($body, 'Lit::Block')) {
($MATCH->{capture} = (While->new(('cond' => Val::Bit->new(('bit' => 1))), ('body' => $body))))
}
else {
die(('Missing code block in ' . chr(39) . 'loop' . chr(39)))
}
}
else {
die((chr(39) . 'loop' . chr(39) . ' with parameters is not implemented'))
}
}) || 1)))
})
})));
$MATCH
}
}
}
1;