#
# This parser was generated with
# Parse::RecDescent version 1.967015
#

{
# GENERATE RECURSIVE DESCENT PARSER OBJECTS FROM A GRAMMAR

use 5.006;
use strict;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime;

use Text::Balanced qw ( extract_codeblock extract_bracketed extract_quotelike extract_delimited );

use vars qw ( $skip );

   *defskip  = \ '\s*'; # DEFAULT SEPARATOR IS OPTIONAL WHITESPACE
   $skip  = '\s*';      # UNIVERSAL SEPARATOR IS OPTIONAL WHITESPACE
my $MAXREP  = 100_000_000;  # REPETITIONS MATCH AT MOST 100,000,000 TIMES



package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::LineCounter;


sub TIESCALAR   # ($classname, \$text, $thisparser, $prevflag)
{
    bless {
        text    => $_[1],
        parser  => $_[2],
        prev    => $_[3]?1:0,
          }, $_[0];
}

sub FETCH
{
    my $parser = $_[0]->{parser};
    my $cache = $parser->{linecounter_cache};
    my $from = $parser->{fulltextlen}-length(${$_[0]->{text}})-$_[0]->{prev}
;

    unless (exists $cache->{$from})
    {
        $parser->{lastlinenum} = $parser->{offsetlinenum}
          - XML::XSH2::Parser::_Runtime::_linecount(substr($parser->{fulltext},$from))
          + 1;
        $cache->{$from} = $parser->{lastlinenum};
    }
    return $cache->{$from};
}

sub STORE
{
    my $parser = $_[0]->{parser};
    $parser->{offsetlinenum} -= $parser->{lastlinenum} - $_[1];
    return undef;
}

sub resync   # ($linecounter)
{
    my $self = tied($_[0]);
    die "Tried to alter something other than a LineCounter\n"
        unless $self =~ /XML::XSH2::Parser::_Runtime::LineCounter/;

    my $parser = $self->{parser};
    my $apparently = $parser->{offsetlinenum}
             - XML::XSH2::Parser::_Runtime::_linecount(${$self->{text}})
             + 1;

    $parser->{offsetlinenum} += $parser->{lastlinenum} - $apparently;
    return 1;
}

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::ColCounter;

sub TIESCALAR   # ($classname, \$text, $thisparser, $prevflag)
{
    bless {
        text    => $_[1],
        parser  => $_[2],
        prev    => $_[3]?1:0,
          }, $_[0];
}

sub FETCH
{
    my $parser = $_[0]->{parser};
    my $missing = $parser->{fulltextlen}-length(${$_[0]->{text}})-$_[0]->{prev}+1;
    substr($parser->{fulltext},0,$missing) =~ m/^(.*)\Z/m;
    return length($1);
}

sub STORE
{
    die "Can't set column number via \$thiscolumn\n";
}


package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::OffsetCounter;

sub TIESCALAR   # ($classname, \$text, $thisparser, $prev)
{
    bless {
        text    => $_[1],
        parser  => $_[2],
        prev    => $_[3]?-1:0,
          }, $_[0];
}

sub FETCH
{
    my $parser = $_[0]->{parser};
    return $parser->{fulltextlen}-length(${$_[0]->{text}})+$_[0]->{prev};
}

sub STORE
{
    die "Can't set current offset via \$thisoffset or \$prevoffset\n";
}



package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Rule;

sub new ($$$$$)
{
    my $class = ref($_[0]) || $_[0];
    my $name  = $_[1];
    my $owner = $_[2];
    my $line  = $_[3];
    my $replace = $_[4];

    if (defined $owner->{"rules"}{$name})
    {
        my $self = $owner->{"rules"}{$name};
        if ($replace && !$self->{"changed"})
        {
            $self->reset;
        }
        return $self;
    }
    else
    {
        return $owner->{"rules"}{$name} =
            bless
            {
                "name"     => $name,
                "prods"    => [],
                "calls"    => [],
                "changed"  => 0,
                "line"     => $line,
                "impcount" => 0,
                "opcount"  => 0,
                "vars"     => "",
            }, $class;
    }
}

sub reset($)
{
    @{$_[0]->{"prods"}} = ();
    @{$_[0]->{"calls"}} = ();
    $_[0]->{"changed"}  = 0;
    $_[0]->{"impcount"}  = 0;
    $_[0]->{"opcount"}  = 0;
    $_[0]->{"vars"}  = "";
}

sub DESTROY {}

sub hasleftmost($$)
{
    my ($self, $ref) = @_;

    my $prod;
    foreach $prod ( @{$self->{"prods"}} )
    {
        return 1 if $prod->hasleftmost($ref);
    }

    return 0;
}

sub leftmostsubrules($)
{
    my $self = shift;
    my @subrules = ();

    my $prod;
    foreach $prod ( @{$self->{"prods"}} )
    {
        push @subrules, $prod->leftmostsubrule();
    }

    return @subrules;
}

sub expected($)
{
    my $self = shift;
    my @expected = ();

    my $prod;
    foreach $prod ( @{$self->{"prods"}} )
    {
        my $next = $prod->expected();
        unless (! $next or _contains($next,@expected) )
        {
            push @expected, $next;
        }
    }

    return join ', or ', @expected;
}

sub _contains($@)
{
    my $target = shift;
    my $item;
    foreach $item ( @_ ) { return 1 if $target eq $item; }
    return 0;
}

sub addcall($$)
{
    my ( $self, $subrule ) = @_;
    unless ( _contains($subrule, @{$self->{"calls"}}) )
    {
        push @{$self->{"calls"}}, $subrule;
    }
}

sub addprod($$)
{
    my ( $self, $prod ) = @_;
    push @{$self->{"prods"}}, $prod;
    $self->{"changed"} = 1;
    $self->{"impcount"} = 0;
    $self->{"opcount"} = 0;
    $prod->{"number"} = $#{$self->{"prods"}};
    return $prod;
}

sub addvar
{
    my ( $self, $var, $parser ) = @_;
    if ($var =~ /\A\s*local\s+([%@\$]\w+)/)
    {
        $parser->{localvars} .= " $1";
        $self->{"vars"} .= "$var;\n" }
    else
        { $self->{"vars"} .= "my $var;\n" }
    $self->{"changed"} = 1;
    return 1;
}

sub addautoscore
{
    my ( $self, $code ) = @_;
    $self->{"autoscore"} = $code;
    $self->{"changed"} = 1;
    return 1;
}

sub nextoperator($)
{
    my $self = shift;
    my $prodcount = scalar @{$self->{"prods"}};
    my $opcount = ++$self->{"opcount"};
    return "_operator_${opcount}_of_production_${prodcount}_of_rule_$self->{name}";
}

sub nextimplicit($)
{
    my $self = shift;
    my $prodcount = scalar @{$self->{"prods"}};
    my $impcount = ++$self->{"impcount"};
    return "_alternation_${impcount}_of_production_${prodcount}_of_rule_$self->{name}";
}


sub code
{
    my ($self, $namespace, $parser, $check) = @_;

eval 'undef &' . $namespace . '::' . $self->{"name"} unless $parser->{saving};

    my $code =
'
# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub ' . $namespace . '::' . $self->{"name"} .  '
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"' . $self->{"name"} . '"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [' . $self->{"name"} . ']},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{' . $self->{"name"} . '},
                  $tracelevel)
                    if defined $::RD_TRACE;

    ' . ($parser->{deferrable}
        ? 'my $def_at = @{$thisparser->{deferred}};'
        : '') .
    '
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{' . $self->expected() . '});
    $expectation->at($_[1]);
    '. ($parser->{_check}{thisoffset}?'
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    ':'') . ($parser->{_check}{prevoffset}?'
    my $prevoffset;
    tie $prevoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser, 1;
    ':'') . ($parser->{_check}{thiscolumn}?'
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    ':'') . ($parser->{_check}{prevcolumn}?'
    my $prevcolumn;
    tie $prevcolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser, 1;
    ':'') . ($parser->{_check}{prevline}?'
    my $prevline;
    tie $prevline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser, 1;
    ':'') . '
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    '. $self->{vars} .'
';

    my $prod;
    foreach $prod ( @{$self->{"prods"}} )
    {
        $prod->addscore($self->{autoscore},0,0) if $self->{autoscore};
        next unless $prod->checkleftmost();
        $code .= $prod->code($namespace,$self,$parser);

        $code .= $parser->{deferrable}
                ? '     splice
                @{$thisparser->{deferred}}, $def_at unless $_matched;
                  '
                : '';
    }

    $code .=
'
    unless ( $_matched || defined($score) )
    {
        ' .($parser->{deferrable}
            ? '     splice @{$thisparser->{deferred}}, $def_at;
              '
            : '') . '

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{' . $self->{"name"} .'},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{' . $self->{"name"} .'},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' rule<< (return value: [} .
                      $return . q{])}, "",
                      q{' . $self->{"name"} .'},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{' . $self->{"name"} .'},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}
';

    return $code;
}

my @left;
sub isleftrec($$)
{
    my ($self, $rules) = @_;
    my $root = $self->{"name"};
    @left = $self->leftmostsubrules();
    my $next;
    foreach $next ( @left )
    {
        next unless defined $rules->{$next}; # SKIP NON-EXISTENT RULES
        return 1 if $next eq $root;
        my $child;
        foreach $child ( $rules->{$next}->leftmostsubrules() )
        {
            push(@left, $child)
            if ! _contains($child, @left) ;
        }
    }
    return 0;
}

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Production;

sub describe ($;$)
{
    return join ' ', map { $_->describe($_[1]) or () } @{$_[0]->{items}};
}

sub new ($$;$$)
{
    my ($self, $line, $uncommit, $error) = @_;
    my $class = ref($self) || $self;

    bless
    {
        "items"    => [],
        "uncommit" => $uncommit,
        "error"    => $error,
        "line"     => $line,
        strcount   => 0,
        patcount   => 0,
        dircount   => 0,
        actcount   => 0,
    }, $class;
}

sub expected ($)
{
    my $itemcount = scalar @{$_[0]->{"items"}};
    return ($itemcount) ? $_[0]->{"items"}[0]->describe(1) : '';
}

sub hasleftmost ($$)
{
    my ($self, $ref) = @_;
    return ${$self->{"items"}}[0] eq $ref  if scalar @{$self->{"items"}};
    return 0;
}

sub isempty($)
{
    my $self = shift;
    return 0 == @{$self->{"items"}};
}

sub leftmostsubrule($)
{
    my $self = shift;

    if ( $#{$self->{"items"}} >= 0 )
    {
        my $subrule = $self->{"items"}[0]->issubrule();
        return $subrule if defined $subrule;
    }

    return ();
}

sub checkleftmost($)
{
    my @items = @{$_[0]->{"items"}};
    if (@items==1 && ref($items[0]) =~ /\AXML::XSH2::Parser::_Runtime::Error/
        && $items[0]->{commitonly} )
    {
        XML::XSH2::Parser::_Runtime::_warn(2,"Lone <error?> in production treated
                        as <error?> <reject>");
        XML::XSH2::Parser::_Runtime::_hint("A production consisting of a single
                      conditional <error?> directive would
                      normally succeed (with the value zero) if the
                      rule is not 'commited' when it is
                      tried. Since you almost certainly wanted
                      '<error?> <reject>' XML::XSH2::Parser::_Runtime
                      supplied it for you.");
        push @{$_[0]->{items}},
            XML::XSH2::Parser::_Runtime::UncondReject->new(0,0,'<reject>');
    }
    elsif (@items==1 && ($items[0]->describe||"") =~ /<rulevar|<autoscore/)
    {
        # Do nothing
    }
    elsif (@items &&
        ( ref($items[0]) =~ /\AXML::XSH2::Parser::_Runtime::UncondReject/
        || ($items[0]->describe||"") =~ /<autoscore/
        ))
    {
        XML::XSH2::Parser::_Runtime::_warn(1,"Optimizing away production: [". $_[0]->describe ."]");
        my $what = $items[0]->describe =~ /<rulevar/
                ? "a <rulevar> (which acts like an unconditional <reject> during parsing)"
             : $items[0]->describe =~ /<autoscore/
                ? "an <autoscore> (which acts like an unconditional <reject> during parsing)"
                : "an unconditional <reject>";
        my $caveat = $items[0]->describe =~ /<rulevar/
                ? " after the specified variable was set up"
                : "";
        my $advice = @items > 1
                ? "However, there were also other (useless) items after the leading "
                  . $items[0]->describe
                  . ", so you may have been expecting some other behaviour."
                : "You can safely ignore this message.";
        XML::XSH2::Parser::_Runtime::_hint("The production starts with $what. That means that the
                      production can never successfully match, so it was
                      optimized out of the final parser$caveat. $advice");
        return 0;
    }
    return 1;
}

sub changesskip($)
{
    my $item;
    foreach $item (@{$_[0]->{"items"}})
    {
        if (ref($item) =~ /XML::XSH2::Parser::_Runtime::(Action|Directive)/)
        {
            return 1 if $item->{code} =~ /\$skip\s*=/;
        }
    }
    return 0;
}

sub adddirective
{
    my ( $self, $whichop, $line, $name ) = @_;
    push @{$self->{op}},
        { type=>$whichop, line=>$line, name=>$name,
          offset=> scalar(@{$self->{items}}) };
}

sub addscore
{
    my ( $self, $code, $lookahead, $line ) = @_;
    $self->additem(XML::XSH2::Parser::_Runtime::Directive->new(
                  "local \$^W;
                   my \$thisscore = do { $code } + 0;
                   if (!defined(\$score) || \$thisscore>\$score)
                    { \$score=\$thisscore; \$score_return=\$item[-1]; }
                   undef;", $lookahead, $line,"<score: $code>") )
        unless $self->{items}[-1]->describe =~ /<score/;
    return 1;
}

sub check_pending
{
    my ( $self, $line ) = @_;
    if ($self->{op})
    {
        while (my $next = pop @{$self->{op}})
        {
        XML::XSH2::Parser::_Runtime::_error("Incomplete <$next->{type}op:...>.", $line);
        XML::XSH2::Parser::_Runtime::_hint(
            "The current production ended without completing the
             <$next->{type}op:...> directive that started near line
             $next->{line}. Did you forget the closing '>'?");
        }
    }
    return 1;
}

sub enddirective
{
    my ( $self, $line, $minrep, $maxrep ) = @_;
    unless ($self->{op})
    {
        XML::XSH2::Parser::_Runtime::_error("Unmatched > found.", $line);
        XML::XSH2::Parser::_Runtime::_hint(
            "A '>' angle bracket was encountered, which typically
             indicates the end of a directive. However no suitable
             preceding directive was encountered. Typically this
             indicates either a extra '>' in the grammar, or a
             problem inside the previous directive.");
        return;
    }
    my $op = pop @{$self->{op}};
    my $span = @{$self->{items}} - $op->{offset};
    if ($op->{type} =~ /left|right/)
    {
        if ($span != 3)
        {
        XML::XSH2::Parser::_Runtime::_error(
            "Incorrect <$op->{type}op:...> specification:
             expected 3 args, but found $span instead", $line);
        XML::XSH2::Parser::_Runtime::_hint(
            "The <$op->{type}op:...> directive requires a
             sequence of exactly three elements. For example:
             <$op->{type}op:leftarg /op/ rightarg>");
        }
        else
        {
        push @{$self->{items}},
            XML::XSH2::Parser::_Runtime::Operator->new(
                $op->{type}, $minrep, $maxrep, splice(@{$self->{"items"}}, -3));
        $self->{items}[-1]->sethashname($self);
        $self->{items}[-1]{name} = $op->{name};
        }
    }
}

sub prevwasreturn
{
    my ( $self, $line ) = @_;
    unless (@{$self->{items}})
    {
        XML::XSH2::Parser::_Runtime::_error(
            "Incorrect <return:...> specification:
            expected item missing", $line);
        XML::XSH2::Parser::_Runtime::_hint(
            "The <return:...> directive requires a
            sequence of at least one item. For example:
            <return: list>");
        return;
    }
    push @{$self->{items}},
        XML::XSH2::Parser::_Runtime::Result->new();
}

sub additem
{
    my ( $self, $item ) = @_;
    $item->sethashname($self);
    push @{$self->{"items"}}, $item;
    return $item;
}

sub _duplicate_itempos
{
    my ($src) = @_;
    my $dst = {};

    foreach (keys %$src)
    {
        %{$dst->{$_}} = %{$src->{$_}};
    }
    $dst;
}

sub _update_itempos
{
    my ($dst, $src, $typekeys, $poskeys) = @_;

    my @typekeys = 'ARRAY' eq ref $typekeys ?
      @$typekeys :
      keys %$src;

    foreach my $k (keys %$src)
    {
        if ('ARRAY' eq ref $poskeys)
        {
            @{$dst->{$k}}{@$poskeys} = @{$src->{$k}}{@$poskeys};
        }
        else
        {
            %{$dst->{$k}} = %{$src->{$k}};
        }
    }
}

sub preitempos
{
    return q
    {
        push @itempos, {'offset' => {'from'=>$thisoffset, 'to'=>undef},
                        'line'   => {'from'=>$thisline,   'to'=>undef},
                        'column' => {'from'=>$thiscolumn, 'to'=>undef} };
    }
}

sub incitempos
{
    return q
    {
        $itempos[$#itempos]{'offset'}{'from'} += length($lastsep);
        $itempos[$#itempos]{'line'}{'from'}   = $thisline;
        $itempos[$#itempos]{'column'}{'from'} = $thiscolumn;
    }
}

sub unincitempos
{
    # the next incitempos will properly set these two fields, but
    # {'offset'}{'from'} needs to be decreased by length($lastsep)
    # $itempos[$#itempos]{'line'}{'from'}
    # $itempos[$#itempos]{'column'}{'from'}
    return q
    {
        $itempos[$#itempos]{'offset'}{'from'} -= length($lastsep) if defined $lastsep;
    }
}

sub postitempos
{
    return q
    {
        $itempos[$#itempos]{'offset'}{'to'} = $prevoffset;
        $itempos[$#itempos]{'line'}{'to'}   = $prevline;
        $itempos[$#itempos]{'column'}{'to'} = $prevcolumn;
    }
}

sub code($$$$)
{
    my ($self,$namespace,$rule,$parser) = @_;
    my $code =
'
    while (!$_matched'
    . (defined $self->{"uncommit"} ? '' : ' && !$commit')
    . ')
    {
        ' .
        ($self->changesskip()
            ? 'local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;'
            : '') .'
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['
                      . $self->describe . ']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{' . $rule ->{name}. '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[' . $self->{"number"} . '];
        ' . (defined $self->{"error"} ? '' : '$text = $_[1];' ) . '
        my $_savetext;
        @item = (q{' . $rule->{"name"} . '});
        %item = (__RULE__ => q{' . $rule->{"name"} . '});
        my $repcount = 0;

';
    $code .=
'        my @itempos = ({});
'           if $parser->{_check}{itempos};

    my $item;
    my $i;

    for ($i = 0; $i < @{$self->{"items"}}; $i++)
    {
        $item = ${$self->{items}}[$i];

        $code .= preitempos() if $parser->{_check}{itempos};

        $code .= $item->code($namespace,$rule,$parser->{_check});

        $code .= postitempos() if $parser->{_check}{itempos};

    }

    if ($parser->{_AUTOACTION} && defined($item) && !$item->isa("XML::XSH2::Parser::_Runtime::Action"))
    {
        $code .= $parser->{_AUTOACTION}->code($namespace,$rule);
        XML::XSH2::Parser::_Runtime::_warn(1,"Autogenerating action in rule
                       \"$rule->{name}\":
                        $parser->{_AUTOACTION}{code}")
        and
        XML::XSH2::Parser::_Runtime::_hint("The \$::RD_AUTOACTION was defined,
                      so any production not ending in an
                      explicit action has the specified
                      \"auto-action\" automatically
                      appended.");
    }
    elsif ($parser->{_AUTOTREE} && defined($item) && !$item->isa("XML::XSH2::Parser::_Runtime::Action"))
    {
        if ($i==1 && $item->isterminal)
        {
            $code .= $parser->{_AUTOTREE}{TERMINAL}->code($namespace,$rule);
        }
        else
        {
            $code .= $parser->{_AUTOTREE}{NODE}->code($namespace,$rule);
        }
        XML::XSH2::Parser::_Runtime::_warn(1,"Autogenerating tree-building action in rule
                       \"$rule->{name}\"")
        and
        XML::XSH2::Parser::_Runtime::_hint("The directive <autotree> was specified,
                      so any production not ending
                      in an explicit action has
                      some parse-tree building code
                      automatically appended.");
    }

    $code .=
'
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' production: ['
                      . $self->describe . ']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;

' . ( $parser->{_check}{itempos} ? '
        if ( defined($_itempos) )
        {
            XML::XSH2::Parser::_Runtime::Production::_update_itempos($_itempos, $itempos[ 1], undef, [qw(from)]);
            XML::XSH2::Parser::_Runtime::Production::_update_itempos($_itempos, $itempos[-1], undef, [qw(to)]);
        }
' : '' ) . '

        $_matched = 1;
        last;
    }

';
    return $code;
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Action;

sub describe { undef }

sub sethashname { $_[0]->{hashname} = '__ACTION' . ++$_[1]->{actcount} .'__'; }

sub new
{
    my $class = ref($_[0]) || $_[0];
    bless
    {
        "code"      => $_[1],
        "lookahead" => $_[2],
        "line"      => $_[3],
    }, $class;
}

sub issubrule { undef }
sub isterminal { 0 }

sub code($$$$)
{
    my ($self, $namespace, $rule) = @_;

'
        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .'

        $_tok = ($_noactions) ? 0 : do ' . $self->{"code"} . ';
        ' . ($self->{"lookahead"}<0?'if':'unless') . ' (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        ' . ($self->{line}>=0 ? '$item{'. $self->{hashname} .'}=$_tok;' : '' ) .'
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
'
}


1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Directive;

sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} .  '__'; }

sub issubrule { undef }
sub isterminal { 0 }
sub describe { $_[1] ? '' : $_[0]->{name} }

sub new ($$$$$)
{
    my $class = ref($_[0]) || $_[0];
    bless
    {
        "code"      => $_[1],
        "lookahead" => $_[2],
        "line"      => $_[3],
        "name"      => $_[4],
    }, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule) = @_;

'
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .'

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: ['
                    . $self->describe . ']},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE; ' .'
        $_tok = do { ' . $self->{"code"} . ' };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        ' . ($self->{"lookahead"} ? '$text = $_savetext and ' : '' ) .'
        last '
        . ($self->{"lookahead"}<0?'if':'unless') . ' defined $_tok;
        push @item, $item{'.$self->{hashname}.'}=$_tok;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
'
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::UncondReject;

sub issubrule { undef }
sub isterminal { 0 }
sub describe { $_[1] ? '' : $_[0]->{name} }
sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} .  '__'; }

sub new ($$$;$)
{
    my $class = ref($_[0]) || $_[0];
    bless
    {
        "lookahead" => $_[1],
        "line"      => $_[2],
        "name"      => $_[3],
    }, $class;
}

# MARK, YOU MAY WANT TO OPTIMIZE THIS.


sub code($$$$)
{
    my ($self, $namespace, $rule) = @_;

'
        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found '
                     . $self->describe . ')},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .'

        $_tok = undef;
        ' . ($self->{"lookahead"} ? '$text = $_savetext and ' : '' ) .'
        last '
        . ($self->{"lookahead"}<0?'if':'unless') . ' defined $_tok;
'
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Error;

sub issubrule { undef }
sub isterminal { 0 }
sub describe { $_[1] ? '' : $_[0]->{commitonly} ? '<error?:...>' : '<error...>' }
sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} .  '__'; }

sub new ($$$$$)
{
    my $class = ref($_[0]) || $_[0];
    bless
    {
        "msg"        => $_[1],
        "lookahead"  => $_[2],
        "commitonly" => $_[3],
        "line"       => $_[4],
    }, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule) = @_;

    my $action = '';

    if ($self->{"msg"})  # ERROR MESSAGE SUPPLIED
    {
        #WAS: $action .= "XML::XSH2::Parser::_Runtime::_error(qq{$self->{msg}}" .  ',$thisline);';
        $action .= 'push @{$thisparser->{errors}}, [qq{'.$self->{msg}.'},$thisline];';

    }
    else      # GENERATE ERROR MESSAGE DURING PARSE
    {
        $action .= '
        my $rule = $item[0];
           $rule =~ s/_/ /g;
        #WAS: XML::XSH2::Parser::_Runtime::_error("Invalid $rule: " . $expectation->message() ,$thisline);
        push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline];
        ';
    }

    my $dir =
          new XML::XSH2::Parser::_Runtime::Directive('if (' .
        ($self->{"commitonly"} ? '$commit' : '1') .
        ") { do {$action} unless ".' $_noactions; undef } else {0}',
                    $self->{"lookahead"},0,$self->describe);
    $dir->{hashname} = $self->{hashname};
    return $dir->code($namespace, $rule, 0);
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Token;

sub sethashname { $_[0]->{hashname} = '__PATTERN' . ++$_[1]->{patcount} . '__'; }

sub issubrule { undef }
sub isterminal { 1 }
sub describe ($) { shift->{'description'}}


# ARGS ARE: $self, $pattern, $left_delim, $modifiers, $lookahead, $linenum
sub new ($$$$$$)
{
    my $class = ref($_[0]) || $_[0];
    my $pattern = $_[1];
    my $pat = $_[1];
    my $ldel = $_[2];
    my $rdel = $ldel;
    $rdel =~ tr/{[(</}])>/;

    my $mod = $_[3];

    my $desc;

    if ($ldel eq '/') { $desc = "$ldel$pattern$rdel$mod" }
    else          { $desc = "m$ldel$pattern$rdel$mod" }
    $desc =~ s/\\/\\\\/g;
    $desc =~ s/\$$/\\\$/g;
    $desc =~ s/}/\\}/g;
    $desc =~ s/{/\\{/g;

    if (!eval "no strict;
           local \$SIG{__WARN__} = sub {0};
           '' =~ m$ldel$pattern$rdel$mod" and $@)
    {
        XML::XSH2::Parser::_Runtime::_warn(3, "Token pattern \"m$ldel$pattern$rdel$mod\"
                         may not be a valid regular expression",
                       $_[5]);
        $@ =~ s/ at \(eval.*/./;
        XML::XSH2::Parser::_Runtime::_hint($@);
    }

    # QUIETLY PREVENT (WELL-INTENTIONED) CALAMITY
    $mod =~ s/[gc]//g;
    $pattern =~ s/(\A|[^\\])\\G/$1/g;

    bless
    {
        "pattern"   => $pattern,
        "ldelim"      => $ldel,
        "rdelim"      => $rdel,
        "mod"         => $mod,
        "lookahead"   => $_[4],
        "line"        => $_[5],
        "description" => $desc,
    }, $class;
}


sub code($$$$$)
{
    my ($self, $namespace, $rule, $check) = @_;
    my $ldel = $self->{"ldelim"};
    my $rdel = $self->{"rdelim"};
    my $sdel = $ldel;
    my $mod  = $self->{"mod"};

    $sdel =~ s/[[{(<]/{}/;

my $code = '
        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [' . $self->describe
                      . ']}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{' . ($rule->hasleftmost($self) ? ''
                : $self->describe ) . '})->at($text);
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '

        ' . ($self->{"lookahead"}<0?'if':'unless')
        . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '
        . ($check->{itempos}? 'do {'.XML::XSH2::Parser::_Runtime::Production::incitempos().' 1} and ' : '')
        . '  $text =~ m' . $ldel . '\A(?:' . $self->{"pattern"} . ')' . $rdel . $mod . ')
        {
            '.($self->{"lookahead"} ? '$text = $_savetext;' : '$text = $lastsep . $text if defined $lastsep;') .
            ($check->{itempos} ? XML::XSH2::Parser::_Runtime::Production::unincitempos() : '') . '
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn\'t match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{'.$self->{hashname}.'}=$current_match;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
';

    return $code;
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Literal;

sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; }

sub issubrule { undef }
sub isterminal { 1 }
sub describe ($) { shift->{'description'} }

sub new ($$$$)
{
    my $class = ref($_[0]) || $_[0];

    my $pattern = $_[1];

    my $desc = $pattern;
    $desc=~s/\\/\\\\/g;
    $desc=~s/}/\\}/g;
    $desc=~s/{/\\{/g;

    bless
    {
        "pattern"     => $pattern,
        "lookahead"   => $_[2],
        "line"        => $_[3],
        "description" => "'$desc'",
    }, $class;
}


sub code($$$$)
{
    my ($self, $namespace, $rule, $check) = @_;

my $code = '
        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [' . $self->describe
                      . ']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{' . ($rule->hasleftmost($self) ? ''
                : $self->describe ) . '})->at($text);
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '

        ' . ($self->{"lookahead"}<0?'if':'unless')
        . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '
        . ($check->{itempos}? 'do {'.XML::XSH2::Parser::_Runtime::Production::incitempos().' 1} and ' : '')
        . '  $text =~ m/\A' . quotemeta($self->{"pattern"}) . '/)
        {
            '.($self->{"lookahead"} ? '$text = $_savetext;' : '$text = $lastsep . $text if defined $lastsep;').'
            '. ($check->{itempos} ? XML::XSH2::Parser::_Runtime::Production::unincitempos() : '') . '
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn\'t match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{'.$self->{hashname}.'}=$current_match;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
';

    return $code;
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::InterpLit;

sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; }

sub issubrule { undef }
sub isterminal { 1 }
sub describe ($) { shift->{'description'} }

sub new ($$$$)
{
    my $class = ref($_[0]) || $_[0];

    my $pattern = $_[1];
    $pattern =~ s#/#\\/#g;

    my $desc = $pattern;
    $desc=~s/\\/\\\\/g;
    $desc=~s/}/\\}/g;
    $desc=~s/{/\\{/g;

    bless
    {
        "pattern"   => $pattern,
        "lookahead" => $_[2],
        "line"      => $_[3],
        "description" => "'$desc'",
    }, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule, $check) = @_;

my $code = '
        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [' . $self->describe
                      . ']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{name} . '},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{' . ($rule->hasleftmost($self) ? ''
                : $self->describe ) . '})->at($text);
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '

        ' . ($self->{"lookahead"}<0?'if':'unless')
        . ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '
        . ($check->{itempos}? 'do {'.XML::XSH2::Parser::_Runtime::Production::incitempos().' 1} and ' : '')
        . '  do { $_tok = "' . $self->{"pattern"} . '"; 1 } and
             substr($text,0,length($_tok)) eq $_tok and
             do { substr($text,0,length($_tok)) = ""; 1; }
        )
        {
            '.($self->{"lookahead"} ? '$text = $_savetext;' : '$text = $lastsep . $text if defined $lastsep;').'
            '. ($check->{itempos} ? XML::XSH2::Parser::_Runtime::Production::unincitempos() : '') . '
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn\'t match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $_tok . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{'.$self->{hashname}.'}=$_tok;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
';

    return $code;
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Subrule;

sub issubrule ($) { return $_[0]->{"subrule"} }
sub isterminal { 0 }
sub sethashname {}

sub describe ($)
{
    my $desc = $_[0]->{"implicit"} || $_[0]->{"subrule"};
    $desc = "<matchrule:$desc>" if $_[0]->{"matchrule"};
    return $desc;
}

sub callsyntax($$)
{
    if ($_[0]->{"matchrule"})
    {
        return "&{'$_[1]'.qq{$_[0]->{subrule}}}";
    }
    else
    {
        return $_[1].$_[0]->{"subrule"};
    }
}

sub new ($$$$;$$$)
{
    my $class = ref($_[0]) || $_[0];
    bless
    {
        "subrule"   => $_[1],
        "lookahead" => $_[2],
        "line"      => $_[3],
        "implicit"  => $_[4] || undef,
        "matchrule" => $_[5],
        "argcode"   => $_[6] || undef,
    }, $class;
}


sub code($$$$)
{
    my ($self, $namespace, $rule, $check) = @_;

'
        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [' . $self->{"subrule"} . ']},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{' . $rule->{"name"} . '},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}'
                # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text);
                : 'q{'.$self->describe.'}' ) . ')->at($text);
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' )
        . ($self->{"lookahead"}<0?'if':'unless')
        . ' (defined ($_tok = '
        . $self->callsyntax($namespace.'::')
        . '($thisparser,$text,$repeating,'
        . ($self->{"lookahead"}?'1':'$_noactions')
        . ($self->{argcode} ? ",sub { return $self->{argcode} }"
                   : ',sub { \\@arg }')
        . ($check->{"itempos"}?',$itempos[$#itempos]':',undef')
        . ')))
        {
            '.($self->{"lookahead"} ? '$text = $_savetext;' : '').'
            XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' subrule: ['
            . $self->{subrule} . ']>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{' . $rule->{"name"} .'},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' subrule: ['
                    . $self->{subrule} . ']<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{"name"} .'},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{' . $self->{subrule} . '}} = $_tok;
        push @item, $_tok;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'
        }
'
}

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Repetition;

sub issubrule ($) { return $_[0]->{"subrule"} }
sub isterminal { 0 }
sub sethashname {  }

sub describe ($)
{
    my $desc = $_[0]->{"expected"} || $_[0]->{"subrule"};
    $desc = "<matchrule:$desc>" if $_[0]->{"matchrule"};
    return $desc;
}

sub callsyntax($$)
{
    if ($_[0]->{matchrule})
        { return "sub { goto &{''.qq{$_[1]$_[0]->{subrule}}} }"; }
    else
        { return "\\&$_[1]$_[0]->{subrule}"; }
}

sub new ($$$$$$$$$$)
{
    my ($self, $subrule, $repspec, $min, $max, $lookahead, $line, $parser, $matchrule, $argcode) = @_;
    my $class = ref($self) || $self;
    ($max, $min) = ( $min, $max) if ($max<$min);

    my $desc;
    if ($subrule=~/\A_alternation_\d+_of_production_\d+_of_rule/)
        { $desc = $parser->{"rules"}{$subrule}->expected }

    if ($lookahead)
    {
        if ($min>0)
        {
           return new XML::XSH2::Parser::_Runtime::Subrule($subrule,$lookahead,$line,$desc,$matchrule,$argcode);
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_error("Not symbol (\"!\") before
                        \"$subrule\" doesn't make
                        sense.",$line);
            XML::XSH2::Parser::_Runtime::_hint("Lookahead for negated optional
                       repetitions (such as
                       \"!$subrule($repspec)\" can never
                       succeed, since optional items always
                       match (zero times at worst).
                       Did you mean a single \"!$subrule\",
                       instead?");
        }
    }
    bless
    {
        "subrule"   => $subrule,
        "repspec"   => $repspec,
        "min"       => $min,
        "max"       => $max,
        "lookahead" => $lookahead,
        "line"      => $line,
        "expected"  => $desc,
        "argcode"   => $argcode || undef,
        "matchrule" => $matchrule,
    }, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule, $check) = @_;

    my ($subrule, $repspec, $min, $max, $lookahead) =
        @{$self}{ qw{subrule repspec min max lookahead} };

'
        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [' . $self->describe . ']},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{' . $rule->{"name"} . '},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}'
                # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text);
                : 'q{'.$self->describe.'}' ) . ')->at($text);
        ' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .'
        unless (defined ($_tok = $thisparser->_parserepeat($text, '
        . $self->callsyntax($namespace.'::')
        . ', ' . $min . ', ' . $max . ', '
        . ($self->{"lookahead"}?'1':'$_noactions')
        . ',$expectation,'
        . ($self->{argcode} ? "sub { return $self->{argcode} }"
                        : 'sub { \\@arg }')
        . ($check->{"itempos"}?',$itempos[$#itempos]':',undef')
        . ')))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' repeated subrule: ['
            . $self->describe . ']>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{' . $rule->{"name"} .'},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' repeated subrule: ['
                    . $self->{subrule} . ']<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{"name"} .'},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{' . "$self->{subrule}($self->{repspec})" . '}} = $_tok;
        push @item, $_tok;
        ' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'

'
}

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Result;

sub issubrule { 0 }
sub isterminal { 0 }
sub describe { '' }

sub new
{
    my ($class, $pos) = @_;

    bless {}, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule) = @_;

    '
        $return = $item[-1];
    ';
}

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Operator;

my @opertype = ( " non-optional", "n optional" );

sub issubrule { 0 }
sub isterminal { 0 }

sub describe { $_[0]->{"expected"} }
sub sethashname { $_[0]->{hashname} = '__DIRECTIVE' . ++$_[1]->{dircount} .  '__'; }


sub new
{
    my ($class, $type, $minrep, $maxrep, $leftarg, $op, $rightarg) = @_;

    bless
    {
        "type"      => "${type}op",
        "leftarg"   => $leftarg,
        "op"        => $op,
        "min"       => $minrep,
        "max"       => $maxrep,
        "rightarg"  => $rightarg,
        "expected"  => "<${type}op: ".$leftarg->describe." ".$op->describe." ".$rightarg->describe.">",
    }, $class;
}

sub code($$$$)
{
    my ($self, $namespace, $rule, $check) = @_;

    my @codeargs = @_[1..$#_];

    my ($leftarg, $op, $rightarg) =
        @{$self}{ qw{leftarg op rightarg} };

    my $code = '
        XML::XSH2::Parser::_Runtime::_trace(q{Trying operator: [' . $self->describe . ']},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{' . $rule->{"name"} . '},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(' . ($rule->hasleftmost($self) ? 'q{}'
                # WAS : 'qq{'.$self->describe.'}' ) . ')->at($text);
                : 'q{'.$self->describe.'}' ) . ')->at($text);

        $_tok = undef;
        OPLOOP: while (1)
        {
          $repcount = 0;
          my @item;
          my %item;
';

    $code .= '
          my  $_itempos = $itempos[-1];
          my  $itemposfirst;
' if $check->{itempos};

    if ($self->{type} eq "leftop" )
    {
        $code .= '
          # MATCH LEFTARG
          ' . $leftarg->code(@codeargs) . '

';

        $code .= '
          if (defined($_itempos) and !defined($itemposfirst))
          {
              $itemposfirst = XML::XSH2::Parser::_Runtime::Production::_duplicate_itempos($_itempos);
          }
' if $check->{itempos};

        $code .= '
          $repcount++;

          my $savetext = $text;
          my $backtrack;

          # MATCH (OP RIGHTARG)(s)
          while ($repcount < ' . $self->{max} . ')
          {
            $backtrack = 0;
            ' . $op->code(@codeargs) . '
            ' . ($op->isterminal() ? 'pop @item;' : '$backtrack=1;' ) . '
            ' . (ref($op) eq 'XML::XSH2::Parser::_Runtime::Token'
                ? 'if (defined $1) {push @item, $item{'.($self->{name}||$self->{hashname}).'}=$1; $backtrack=1;}'
                : "" ) . '
            ' . $rightarg->code(@codeargs) . '
            $savetext = $text;
            $repcount++;
          }
          $text = $savetext;
          pop @item if $backtrack;

          ';
    }
    else
    {
        $code .= '
          my $savetext = $text;
          my $backtrack;
          # MATCH (LEFTARG OP)(s)
          while ($repcount < ' . $self->{max} . ')
          {
            $backtrack = 0;
            ' . $leftarg->code(@codeargs) . '
';
        $code .= '
            if (defined($_itempos) and !defined($itemposfirst))
            {
                $itemposfirst = XML::XSH2::Parser::_Runtime::Production::_duplicate_itempos($_itempos);
            }
' if $check->{itempos};

        $code .= '
            $repcount++;
            $backtrack = 1;
            ' . $op->code(@codeargs) . '
            $savetext = $text;
            ' . ($op->isterminal() ? 'pop @item;' : "" ) . '
            ' . (ref($op) eq 'XML::XSH2::Parser::_Runtime::Token' ? 'do { push @item, $item{'.($self->{name}||$self->{hashname}).'}=$1; } if defined $1;' : "" ) . '
          }
          $text = $savetext;
          pop @item if $backtrack;

          # MATCH RIGHTARG
          ' . $rightarg->code(@codeargs) . '
          $repcount++;
          ';
    }

    $code .= 'unless (@item) { undef $_tok; last }' unless $self->{min}==0;

    $code .= '
          $_tok = [ @item ];
';


    $code .= '
          if (defined $itemposfirst)
          {
              XML::XSH2::Parser::_Runtime::Production::_update_itempos(
                  $_itempos, $itemposfirst, undef, [qw(from)]);
          }
' if $check->{itempos};

    $code .= '
          last;
        } # end of OPLOOP
';

    $code .= '
        unless ($repcount>='.$self->{min}.')
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self,1).' operator: ['
                          . $self->describe
                          . ']>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{' . $rule->{"name"} .'},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>'.XML::XSH2::Parser::_Runtime::_matchtracemessage($self).' operator: ['
                      . $self->describe
                      . ']<< (return value: [}
                      . qq{@{$_tok||[]}} . q{]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{' . $rule->{"name"} .'},
                      $tracelevel)
                        if defined $::RD_TRACE;

        push @item, $item{'.($self->{name}||$self->{hashname}).'}=$_tok||[];
';

    return $code;
}


package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime::Expectation;

sub new ($)
{
    bless {
        "failed"      => 0,
        "expected"    => "",
        "unexpected"      => "",
        "lastexpected"    => "",
        "lastunexpected"  => "",
        "defexpected"     => $_[1],
          };
}

sub is ($$)
{
    $_[0]->{lastexpected} = $_[1]; return $_[0];
}

sub at ($$)
{
    $_[0]->{lastunexpected} = $_[1]; return $_[0];
}

sub failed ($)
{
    return unless $_[0]->{lastexpected};
    $_[0]->{expected}   = $_[0]->{lastexpected}   unless $_[0]->{failed};
    $_[0]->{unexpected} = $_[0]->{lastunexpected} unless $_[0]->{failed};
    $_[0]->{failed} = 1;
}

sub message ($)
{
    my ($self) = @_;
    $self->{expected} = $self->{defexpected} unless $self->{expected};
    $self->{expected} =~ s/_/ /g;
    if (!$self->{unexpected} || $self->{unexpected} =~ /\A\s*\Z/s)
    {
        return "Was expecting $self->{expected}";
    }
    else
    {
        $self->{unexpected} =~ /\s*(.*)/;
        return "Was expecting $self->{expected} but found \"$1\" instead";
    }
}

1;

package # this should not be indexed by CPAN
XML::XSH2::Parser::_Runtime;

use Carp;
use vars qw ( $AUTOLOAD $VERSION $_FILENAME);

my $ERRORS = 0;

our $VERSION = # Hide from PAUSE
     '1.967015';
$VERSION = eval $VERSION;
$_FILENAME=__FILE__;

# BUILDING A PARSER

my $nextnamespace = "namespace000001";

sub _nextnamespace()
{
    return "XML::XSH2::Parser::_Runtime::" . $nextnamespace++;
}

# ARGS ARE: $class, $grammar, $compiling, $namespace
sub new ($$$$)
{
    my $class = ref($_[0]) || $_[0];
    local $XML::XSH2::Parser::_Runtime::compiling = $_[2];
    my $name_space_name = defined $_[3]
        ? "XML::XSH2::Parser::_Runtime::".$_[3]
        : _nextnamespace();
    my $self =
    {
        "rules"     => {},
        "namespace" => $name_space_name,
        "startcode" => '',
        "localvars" => '',
        "_AUTOACTION" => undef,
        "_AUTOTREE"   => undef,

        # Precompiled parsers used to set _precompiled, but that
        # wasn't present in some versions of XML::XSH2::Parser::_Runtime used to
        # build precompiled parsers.  Instead, set a new
        # _not_precompiled flag, which is remove from future
        # Precompiled parsers at build time.
        "_not_precompiled" => 1,
    };


    if ($::RD_AUTOACTION) {
        my $sourcecode = $::RD_AUTOACTION;
        $sourcecode = "{ $sourcecode }"
            unless $sourcecode =~ /\A\s*\{.*\}\s*\Z/;
        $self->{_check}{itempos} =
            $sourcecode =~ /\@itempos\b|\$itempos\s*\[/;
        $self->{_AUTOACTION}
            = new XML::XSH2::Parser::_Runtime::Action($sourcecode,0,-1)
    }

    bless $self, $class;
    return $self->Replace($_[1])
}

sub Compile($$$$) {
    die "Compilation of XML::XSH2::Parser::_Runtime grammars not yet implemented\n";
}

sub DESTROY {
    my ($self) = @_;
    my $namespace = $self->{namespace};
    $namespace =~ s/XML::XSH2::Parser::_Runtime:://;
    if ($self->{_not_precompiled}) {
        # BEGIN WORKAROUND
        # Perl has a bug that creates a circular reference between
        # @ISA and that variable's stash:
        #   https://rt.perl.org/rt3/Ticket/Display.html?id=92708
        # Emptying the array before deleting the stash seems to
        # prevent the leak.  Once the ticket above has been resolved,
        # these two lines can be removed.
        no strict 'refs';
        @{$self->{namespace} . '::ISA'} = ();
        # END WORKAROUND

        # Some grammars may contain circular references between rules,
        # such as:
        #   a: 'ID' | b
        #   b: '(' a ')'
        # Unless these references are broken, the subs stay around on
        # stash deletion below.  Iterate through the stash entries and
        # for each defined code reference, set it to reference sub {}
        # instead.
        {
            local $^W; # avoid 'sub redefined' warnings.
            my $blank_sub = sub {};
            while (my ($name, $glob) = each %{"XML::XSH2::Parser::_Runtime::$namespace\::"}) {
                *$glob = $blank_sub if defined &$glob;
            }
        }

        # Delete the namespace's stash
        delete $XML::XSH2::Parser::_Runtime::{$namespace.'::'};
    }
}

# BUILDING A GRAMMAR....

# ARGS ARE: $self, $grammar, $isimplicit, $isleftop
sub Replace ($$)
{
    # set $replace = 1 for _generate
    splice(@_, 2, 0, 1);

    return _generate(@_);
}

# ARGS ARE: $self, $grammar, $isimplicit, $isleftop
sub Extend ($$)
{
    # set $replace = 0 for _generate
    splice(@_, 2, 0, 0);

    return _generate(@_);
}

sub _no_rule ($$;$)
{
    _error("Ruleless $_[0] at start of grammar.",$_[1]);
    my $desc = $_[2] ? "\"$_[2]\"" : "";
    _hint("You need to define a rule for the $_[0] $desc
           to be part of.");
}

my $NEGLOOKAHEAD    =  '\G(\s*\.\.\.\!)';
my $POSLOOKAHEAD    =  '\G(\s*\.\.\.)';
my $RULE            =  '\G\s*(\w+)[ \t]*:';
my $PROD            =  '\G\s*([|])';
my $TOKEN           = q{\G\s*/((\\\\/|\\\\\\\\|[^/])*)/([cgimsox]*)};
my $MTOKEN          = q{\G\s*(m\s*[^\w\s])};
my $LITERAL         = q{\G\s*'((\\\\['\\\\]|[^'])*)'};
my $INTERPLIT       = q{\G\s*"((\\\\["\\\\]|[^"])*)"};
my $SUBRULE         =  '\G\s*(\w+)';
my $MATCHRULE       =  '\G(\s*<matchrule:)';
my $SIMPLEPAT       =  '((\\s+/[^/\\\\]*(?:\\\\.[^/\\\\]*)*/)?)';
my $OPTIONAL        =  '\G\((\?)'.$SIMPLEPAT.'\)';
my $ANY             =  '\G\((s\?)'.$SIMPLEPAT.'\)';
my $MANY            =  '\G\((s|\.\.)'.$SIMPLEPAT.'\)';
my $EXACTLY         =  '\G\(([1-9]\d*)'.$SIMPLEPAT.'\)';
my $BETWEEN         =  '\G\((\d+)\.\.([1-9]\d*)'.$SIMPLEPAT.'\)';
my $ATLEAST         =  '\G\((\d+)\.\.'.$SIMPLEPAT.'\)';
my $ATMOST          =  '\G\(\.\.([1-9]\d*)'.$SIMPLEPAT.'\)';
my $BADREP          =  '\G\((-?\d+)?\.\.(-?\d+)?'.$SIMPLEPAT.'\)';
my $ACTION          =  '\G\s*\{';
my $IMPLICITSUBRULE =  '\G\s*\(';
my $COMMENT         =  '\G\s*(#.*)';
my $COMMITMK        =  '\G\s*<commit>';
my $UNCOMMITMK      =  '\G\s*<uncommit>';
my $QUOTELIKEMK     =  '\G\s*<perl_quotelike>';
my $CODEBLOCKMK     =  '\G\s*<perl_codeblock(?:\s+([][()<>{}]+))?>';
my $VARIABLEMK      =  '\G\s*<perl_variable>';
my $NOCHECKMK       =  '\G\s*<nocheck>';
my $AUTOACTIONPATMK =  '\G\s*<autoaction:';
my $AUTOTREEMK      =  '\G\s*<autotree(?::\s*([\w:]+)\s*)?>';
my $AUTOSTUBMK      =  '\G\s*<autostub>';
my $AUTORULEMK      =  '\G\s*<autorule:(.*?)>';
my $REJECTMK        =  '\G\s*<reject>';
my $CONDREJECTMK    =  '\G\s*<reject:';
my $SCOREMK         =  '\G\s*<score:';
my $AUTOSCOREMK     =  '\G\s*<autoscore:';
my $SKIPMK          =  '\G\s*<skip:';
my $OPMK            =  '\G\s*<(left|right)op(?:=(\'.*?\'))?:';
my $ENDDIRECTIVEMK  =  '\G\s*>';
my $RESYNCMK        =  '\G\s*<resync>';
my $RESYNCPATMK     =  '\G\s*<resync:';
my $RULEVARPATMK    =  '\G\s*<rulevar:';
my $DEFERPATMK      =  '\G\s*<defer:';
my $TOKENPATMK      =  '\G\s*<token:';
my $AUTOERRORMK     =  '\G\s*<error(\??)>';
my $MSGERRORMK      =  '\G\s*<error(\??):';
my $NOCHECK         =  '\G\s*<nocheck>';
my $WARNMK          =  '\G\s*<warn((?::\s*(\d+)\s*)?)>';
my $HINTMK          =  '\G\s*<hint>';
my $TRACEBUILDMK    =  '\G\s*<trace_build((?::\s*(\d+)\s*)?)>';
my $TRACEPARSEMK    =  '\G\s*<trace_parse((?::\s*(\d+)\s*)?)>';
my $UNCOMMITPROD    = $PROD.'\s*<uncommit';
my $ERRORPROD       = $PROD.'\s*<error';
my $LONECOLON       =  '\G\s*:';
my $OTHER           =  '\G\s*([^\s]+)';

my @lines = 0;

sub _generate
{
    my ($self, $grammar, $replace, $isimplicit, $isleftop) = (@_, 0);

    my $aftererror = 0;
    my $lookahead = 0;
    my $lookaheadspec = "";
    my $must_pop_lines;
    if (! $lines[-1]) {
        push @lines, _linecount($grammar) ;
        $must_pop_lines = 1;
    }
    $self->{_check}{itempos} = ($grammar =~ /\@itempos\b|\$itempos\s*\[/)
        unless $self->{_check}{itempos};
    for (qw(thisoffset thiscolumn prevline prevoffset prevcolumn))
    {
        $self->{_check}{$_} =
            ($grammar =~ /\$$_/) || $self->{_check}{itempos}
                unless $self->{_check}{$_};
    }
    my $line;

    my $rule = undef;
    my $prod = undef;
    my $item = undef;
    my $lastgreedy = '';
    pos $grammar = 0;
    study $grammar;

    local $::RD_HINT  = $::RD_HINT;
    local $::RD_WARN  = $::RD_WARN;
    local $::RD_TRACE = $::RD_TRACE;
    local $::RD_CHECK = $::RD_CHECK;

    while (pos $grammar < length $grammar)
    {
        $line = $lines[-1] - _linecount($grammar) + 1;
        my $commitonly;
        my $code = "";
        my @components = ();
        if ($grammar =~ m/$COMMENT/gco)
        {
            _parse("a comment",0,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
            next;
        }
        elsif ($grammar =~ m/$NEGLOOKAHEAD/gco)
        {
            _parse("a negative lookahead",$aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
            $lookahead = $lookahead ? -$lookahead : -1;
            $lookaheadspec .= $1;
            next;   # SKIP LOOKAHEAD RESET AT END OF while LOOP
        }
        elsif ($grammar =~ m/$POSLOOKAHEAD/gco)
        {
            _parse("a positive lookahead",$aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
            $lookahead = $lookahead ? $lookahead : 1;
            $lookaheadspec .= $1;
            next;   # SKIP LOOKAHEAD RESET AT END OF while LOOP
        }
        elsif ($grammar =~ m/(?=$ACTION)/gco
            and do { ($code) = extract_codeblock($grammar); $code })
        {
            _parse("an action", $aftererror, $line, $code);
            $item = new XML::XSH2::Parser::_Runtime::Action($code,$lookahead,$line);
            $prod and $prod->additem($item)
                  or  $self->_addstartcode($code);
        }
        elsif ($grammar =~ m/(?=$IMPLICITSUBRULE)/gco
            and do { ($code) = extract_codeblock($grammar,'{([',undef,'(',1);
                $code })
        {
            $code =~ s/\A\s*\(|\)\Z//g;
            _parse("an implicit subrule", $aftererror, $line,
                "( $code )");
            my $implicit = $rule->nextimplicit;
            return undef
                if !$self->_generate("$implicit : $code",$replace,1);
            my $pos = pos $grammar;
            substr($grammar,$pos,0,$implicit);
            pos $grammar = $pos;;
        }
        elsif ($grammar =~ m/$ENDDIRECTIVEMK/gco)
        {

        # EXTRACT TRAILING REPETITION SPECIFIER (IF ANY)

            my ($minrep,$maxrep) = (1,$MAXREP);
            if ($grammar =~ m/\G[(]/gc)
            {
                pos($grammar)--;

                if ($grammar =~ m/$OPTIONAL/gco)
                    { ($minrep, $maxrep) = (0,1) }
                elsif ($grammar =~ m/$ANY/gco)
                    { $minrep = 0 }
                elsif ($grammar =~ m/$EXACTLY/gco)
                    { ($minrep, $maxrep) = ($1,$1) }
                elsif ($grammar =~ m/$BETWEEN/gco)
                    { ($minrep, $maxrep) = ($1,$2) }
                elsif ($grammar =~ m/$ATLEAST/gco)
                    { $minrep = $1 }
                elsif ($grammar =~ m/$ATMOST/gco)
                    { $maxrep = $1 }
                elsif ($grammar =~ m/$MANY/gco)
                    { }
                elsif ($grammar =~ m/$BADREP/gco)
                {
                    _parse("an invalid repetition specifier", 0,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                    _error("Incorrect specification of a repeated directive",
                           $line);
                    _hint("Repeated directives cannot have
                           a maximum repetition of zero, nor can they have
                           negative components in their ranges.");
                }
            }

            $prod && $prod->enddirective($line,$minrep,$maxrep);
        }
        elsif ($grammar =~ m/\G\s*<[^m]/gc)
        {
            pos($grammar)-=2;

            if ($grammar =~ m/$OPMK/gco)
            {
                # $DB::single=1;
                _parse("a $1-associative operator directive", $aftererror, $line, "<$1op:...>");
                $prod->adddirective($1, $line,$2||'');
            }
            elsif ($grammar =~ m/$UNCOMMITMK/gco)
            {
                _parse("an uncommit marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive('$commit=0;1',
                                  $lookahead,$line,"<uncommit>");
                $prod and $prod->additem($item)
                      or  _no_rule("<uncommit>",$line);
            }
            elsif ($grammar =~ m/$QUOTELIKEMK/gco)
            {
                _parse("an perl quotelike marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                    'my ($match,@res);
                     ($match,$text,undef,@res) =
                          Text::Balanced::extract_quotelike($text,$skip);
                      $match ? \@res : undef;
                    ', $lookahead,$line,"<perl_quotelike>");
                $prod and $prod->additem($item)
                      or  _no_rule("<perl_quotelike>",$line);
            }
            elsif ($grammar =~ m/$CODEBLOCKMK/gco)
            {
                my $outer = $1||"{}";
                _parse("an perl codeblock marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                    'Text::Balanced::extract_codeblock($text,undef,$skip,\''.$outer.'\');
                    ', $lookahead,$line,"<perl_codeblock>");
                $prod and $prod->additem($item)
                      or  _no_rule("<perl_codeblock>",$line);
            }
            elsif ($grammar =~ m/$VARIABLEMK/gco)
            {
                _parse("an perl variable marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                    'Text::Balanced::extract_variable($text,$skip);
                    ', $lookahead,$line,"<perl_variable>");
                $prod and $prod->additem($item)
                      or  _no_rule("<perl_variable>",$line);
            }
            elsif ($grammar =~ m/$NOCHECKMK/gco)
            {
                _parse("a disable checking marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                if ($rule)
                {
                    _error("<nocheck> directive not at start of grammar", $line);
                    _hint("The <nocheck> directive can only
                           be specified at the start of a
                           grammar (before the first rule
                           is defined.");
                }
                else
                {
                    local $::RD_CHECK = 1;
                }
            }
            elsif ($grammar =~ m/$AUTOSTUBMK/gco)
            {
                _parse("an autostub marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $::RD_AUTOSTUB = "";
            }
            elsif ($grammar =~ m/$AUTORULEMK/gco)
            {
                _parse("an autorule marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $::RD_AUTOSTUB = $1;
            }
            elsif ($grammar =~ m/$AUTOTREEMK/gco)
            {
                my $base = defined($1) ? $1 : "";
                my $current_match = substr($grammar, $-[0], $+[0] - $-[0]);
                $base .= "::" if $base && $base !~ /::$/;
                _parse("an autotree marker", $aftererror,$line, $current_match);
                if ($rule)
                {
                    _error("<autotree> directive not at start of grammar", $line);
                    _hint("The <autotree> directive can only
                           be specified at the start of a
                           grammar (before the first rule
                           is defined.");
                }
                else
                {
                    undef $self->{_AUTOACTION};
                    $self->{_AUTOTREE}{NODE}
                        = new XML::XSH2::Parser::_Runtime::Action(q({bless \%item, ').$base.q('.$item[0]}),0,-1);
                    $self->{_AUTOTREE}{TERMINAL}
                        = new XML::XSH2::Parser::_Runtime::Action(q({bless {__VALUE__=>$item[1]}, ').$base.q('.$item[0]}),0,-1);
                }
            }

            elsif ($grammar =~ m/$REJECTMK/gco)
            {
                _parse("an reject marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::UncondReject($lookahead,$line,"<reject>");
                $prod and $prod->additem($item)
                      or  _no_rule("<reject>",$line);
            }
            elsif ($grammar =~ m/(?=$CONDREJECTMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                      $code })
            {
                _parse("a (conditional) reject marker", $aftererror,$line, $code );
                $code =~ /\A\s*<reject:(.*)>\Z/s;
                my $cond = $1;
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                          "($1) ? undef : 1", $lookahead,$line,"<reject:$cond>");
                $prod and $prod->additem($item)
                      or  _no_rule("<reject:$cond>",$line);
            }
            elsif ($grammar =~ m/(?=$SCOREMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                      $code })
            {
                _parse("a score marker", $aftererror,$line, $code );
                $code =~ /\A\s*<score:(.*)>\Z/s;
                $prod and $prod->addscore($1, $lookahead, $line)
                      or  _no_rule($code,$line);
            }
            elsif ($grammar =~ m/(?=$AUTOSCOREMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                     $code;
                       } )
            {
                _parse("an autoscore specifier", $aftererror,$line,$code);
                $code =~ /\A\s*<autoscore:(.*)>\Z/s;

                $rule and $rule->addautoscore($1,$self)
                      or  _no_rule($code,$line);

                $item = new XML::XSH2::Parser::_Runtime::UncondReject($lookahead,$line,$code);
                $prod and $prod->additem($item)
                      or  _no_rule($code,$line);
            }
            elsif ($grammar =~ m/$RESYNCMK/gco)
            {
                _parse("a resync to newline marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                          'if ($text =~ s/(\A[^\n]*\n)//) { $return = 0; $1; } else { undef }',
                          $lookahead,$line,"<resync>");
                $prod and $prod->additem($item)
                      or  _no_rule("<resync>",$line);
            }
            elsif ($grammar =~ m/(?=$RESYNCPATMK)/gco
                and do { ($code) = extract_bracketed($grammar,'<');
                      $code })
            {
                _parse("a resync with pattern marker", $aftererror,$line, $code );
                $code =~ /\A\s*<resync:(.*)>\Z/s;
                $item = new XML::XSH2::Parser::_Runtime::Directive(
                          'if ($text =~ s/(\A'.$1.')//) { $return = 0; $1; } else { undef }',
                          $lookahead,$line,$code);
                $prod and $prod->additem($item)
                      or  _no_rule($code,$line);
            }
            elsif ($grammar =~ m/(?=$SKIPMK)/gco
                and do { ($code) = extract_codeblock($grammar,'<');
                      $code })
            {
                _parse("a skip marker", $aftererror,$line, $code );
                $code =~ /\A\s*<skip:(.*)>\Z/s;
                if ($rule) {
                    $item = new XML::XSH2::Parser::_Runtime::Directive(
                        'my $oldskip = $skip; $skip='.$1.'; $oldskip',
                        $lookahead,$line,$code);
                    $prod and $prod->additem($item)
                      or  _no_rule($code,$line);
                } else {
                    #global <skip> directive
                    $self->{skip} = $1;
                }
            }
            elsif ($grammar =~ m/(?=$RULEVARPATMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                     $code;
                       } )
            {
                _parse("a rule variable specifier", $aftererror,$line,$code);
                $code =~ /\A\s*<rulevar:(.*)>\Z/s;

                $rule and $rule->addvar($1,$self)
                      or  _no_rule($code,$line);

                $item = new XML::XSH2::Parser::_Runtime::UncondReject($lookahead,$line,$code);
                $prod and $prod->additem($item)
                      or  _no_rule($code,$line);
            }
            elsif ($grammar =~ m/(?=$AUTOACTIONPATMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                     $code;
                       } )
            {
                _parse("an autoaction specifier", $aftererror,$line,$code);
                $code =~ s/\A\s*<autoaction:(.*)>\Z/$1/s;
                if ($code =~ /\A\s*[^{]|[^}]\s*\Z/) {
                    $code = "{ $code }"
                }
        $self->{_check}{itempos} =
            $code =~ /\@itempos\b|\$itempos\s*\[/;
        $self->{_AUTOACTION}
            = new XML::XSH2::Parser::_Runtime::Action($code,0,-$line)
            }
            elsif ($grammar =~ m/(?=$DEFERPATMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                     $code;
                       } )
            {
                _parse("a deferred action specifier", $aftererror,$line,$code);
                $code =~ s/\A\s*<defer:(.*)>\Z/$1/s;
                if ($code =~ /\A\s*[^{]|[^}]\s*\Z/)
                {
                    $code = "{ $code }"
                }

                $item = new XML::XSH2::Parser::_Runtime::Directive(
                          "push \@{\$thisparser->{deferred}}, sub $code;",
                          $lookahead,$line,"<defer:$code>");
                $prod and $prod->additem($item)
                      or  _no_rule("<defer:$code>",$line);

                $self->{deferrable} = 1;
            }
            elsif ($grammar =~ m/(?=$TOKENPATMK)/gco
                and do { ($code) = extract_codeblock($grammar,'{',undef,'<');
                     $code;
                       } )
            {
                _parse("a token constructor", $aftererror,$line,$code);
                $code =~ s/\A\s*<token:(.*)>\Z/$1/s;

                my $types = eval 'no strict; local $SIG{__WARN__} = sub {0}; my @arr=('.$code.'); @arr' || ();
                if (!$types)
                {
                    _error("Incorrect token specification: \"$@\"", $line);
                    _hint("The <token:...> directive requires a list
                           of one or more strings representing possible
                           types of the specified token. For example:
                           <token:NOUN,VERB>");
                }
                else
                {
                    $item = new XML::XSH2::Parser::_Runtime::Directive(
                              'no strict;
                               $return = { text => $item[-1] };
                               @{$return->{type}}{'.$code.'} = (1..'.$types.');',
                              $lookahead,$line,"<token:$code>");
                    $prod and $prod->additem($item)
                          or  _no_rule("<token:$code>",$line);
                }
            }
            elsif ($grammar =~ m/$COMMITMK/gco)
            {
                _parse("an commit marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Directive('$commit = 1',
                                  $lookahead,$line,"<commit>");
                $prod and $prod->additem($item)
                      or  _no_rule("<commit>",$line);
            }
            elsif ($grammar =~ m/$NOCHECKMK/gco) {
                _parse("an hint request", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
        $::RD_CHECK = 0;
        }
            elsif ($grammar =~ m/$HINTMK/gco) {
                _parse("an hint request", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
        $::RD_HINT = $self->{__HINT__} = 1;
        }
            elsif ($grammar =~ m/$WARNMK/gco) {
                _parse("an warning request", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
        $::RD_WARN = $self->{__WARN__} = $1 ? $2+0 : 1;
        }
            elsif ($grammar =~ m/$TRACEBUILDMK/gco) {
                _parse("an grammar build trace request", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
        $::RD_TRACE = $1 ? $2+0 : 1;
        }
            elsif ($grammar =~ m/$TRACEPARSEMK/gco) {
                _parse("an parse trace request", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
        $self->{__TRACE__} = $1 ? $2+0 : 1;
        }
            elsif ($grammar =~ m/$AUTOERRORMK/gco)
            {
                $commitonly = $1;
                _parse("an error marker", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
                $item = new XML::XSH2::Parser::_Runtime::Error('',$lookahead,$1,$line);
                $prod and $prod->additem($item)
                      or  _no_rule("<error>",$line);
                $aftererror = !$commitonly;
            }
            elsif ($grammar =~ m/(?=$MSGERRORMK)/gco
                and do { $commitonly = $1;
                     ($code) = extract_bracketed($grammar,'<');
                    $code })
            {
                _parse("an error marker", $aftererror,$line,$code);
                $code =~ /\A\s*<error\??:(.*)>\Z/s;
                $item = new XML::XSH2::Parser::_Runtime::Error($1,$lookahead,$commitonly,$line);
                $prod and $prod->additem($item)
                      or  _no_rule("$code",$line);
                $aftererror = !$commitonly;
            }
            elsif (do { $commitonly = $1;
                     ($code) = extract_bracketed($grammar,'<');
                    $code })
            {
                if ($code =~ /^<[A-Z_]+>$/)
                {
                    _error("Token items are not yet
                    supported: \"$code\"",
                           $line);
                    _hint("Items like $code that consist of angle
                    brackets enclosing a sequence of
                    uppercase characters will eventually
                    be used to specify pre-lexed tokens
                    in a grammar. That functionality is not
                    yet implemented. Or did you misspell
                    \"$code\"?");
                }
                else
                {
                    _error("Untranslatable item encountered: \"$code\"",
                           $line);
                    _hint("Did you misspell \"$code\"
                           or forget to comment it out?");
                }
            }
        }
        elsif ($grammar =~ m/$RULE/gco)
        {
            _parseunneg("a rule declaration", 0,
                    $lookahead,$line, substr($grammar, $-[0], $+[0] - $-[0]) ) or next;
            my $rulename = $1;
            if ($rulename =~ /Replace|Extend|Precompile|PrecompiledRuntime|Save/ )
            {
                _warn(2,"Rule \"$rulename\" hidden by method
                       XML::XSH2::Parser::_Runtime::$rulename",$line)
                and
                _hint("The rule named \"$rulename\" cannot be directly
                       called through the XML::XSH2::Parser::_Runtime object
                       for this grammar (although it may still
                       be used as a subrule of other rules).
                       It can't be directly called because
                       XML::XSH2::Parser::_Runtime::$rulename is already defined (it
                       is the standard method of all
                       parsers).");
            }
            $rule = new XML::XSH2::Parser::_Runtime::Rule($rulename,$self,$line,$replace);
            $prod->check_pending($line) if $prod;
            $prod = $rule->addprod( new XML::XSH2::Parser::_Runtime::Production );
            $aftererror = 0;
        }
        elsif ($grammar =~ m/$UNCOMMITPROD/gco)
        {
            pos($grammar)-=9;
            _parseunneg("a new (uncommitted) production",
                    0, $lookahead, $line, substr($grammar, $-[0], $+[0] - $-[0]) ) or next;

            $prod->check_pending($line) if $prod;
            $prod = new XML::XSH2::Parser::_Runtime::Production($line,1);
            $rule and $rule->addprod($prod)
                  or  _no_rule("<uncommit>",$line);
            $aftererror = 0;
        }
        elsif ($grammar =~ m/$ERRORPROD/gco)
        {
            pos($grammar)-=6;
            _parseunneg("a new (error) production", $aftererror,
                    $lookahead,$line, substr($grammar, $-[0], $+[0] - $-[0]) ) or next;
            $prod->check_pending($line) if $prod;
            $prod = new XML::XSH2::Parser::_Runtime::Production($line,0,1);
            $rule and $rule->addprod($prod)
                  or  _no_rule("<error>",$line);
            $aftererror = 0;
        }
        elsif ($grammar =~ m/$PROD/gco)
        {
            _parseunneg("a new production", 0,
                    $lookahead,$line, substr($grammar, $-[0], $+[0] - $-[0]) ) or next;
            $rule
              and (!$prod || $prod->check_pending($line))
              and $prod = $rule->addprod(new XML::XSH2::Parser::_Runtime::Production($line))
            or  _no_rule("production",$line);
            $aftererror = 0;
        }
        elsif ($grammar =~ m/$LITERAL/gco)
        {
            my $literal = $1;
            ($code = $literal) =~ s/\\\\/\\/g;
            _parse("a literal terminal", $aftererror,$line,$literal);
            $item = new XML::XSH2::Parser::_Runtime::Literal($code,$lookahead,$line);
            $prod and $prod->additem($item)
                  or  _no_rule("literal terminal",$line,"'$literal'");
        }
        elsif ($grammar =~ m/$INTERPLIT/gco)
        {
            _parse("an interpolated literal terminal", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
            $item = new XML::XSH2::Parser::_Runtime::InterpLit($1,$lookahead,$line);
            $prod and $prod->additem($item)
                  or  _no_rule("interpolated literal terminal",$line,"'$1'");
        }
        elsif ($grammar =~ m/$TOKEN/gco)
        {
            _parse("a /../ pattern terminal", $aftererror,$line, substr($grammar, $-[0], $+[0] - $-[0]) );
            $item = new XML::XSH2::Parser::_Runtime::Token($1,'/',$3?$3:'',$lookahead,$line);
            $prod and $prod->additem($item)
                  or  _no_rule("pattern terminal",$line,"/$1/");
        }
        elsif ($grammar =~ m/(?=$MTOKEN)/gco
            and do { ($code, undef, @components)
                    = extract_quotelike($grammar);
                 $code }
              )

        {
            _parse("an m/../ pattern terminal", $aftererror,$line,$code);
            $item = new XML::XSH2::Parser::_Runtime::Token(@components[3,2,8],
                                 $lookahead,$line);
            $prod and $prod->additem($item)
                  or  _no_rule("pattern terminal",$line,$code);
        }
        elsif ($grammar =~ m/(?=$MATCHRULE)/gco
                and do { ($code) = extract_bracketed($grammar,'<');
                     $code
                       }
               or $grammar =~ m/$SUBRULE/gco
                and $code = $1)
        {
            my $name = $code;
            my $matchrule = 0;
            if (substr($name,0,1) eq '<')
            {
                $name =~ s/$MATCHRULE\s*//;
                $name =~ s/\s*>\Z//;
                $matchrule = 1;
            }

        # EXTRACT TRAILING ARG LIST (IF ANY)

            my ($argcode) = extract_codeblock($grammar, "[]",'') || '';

        # EXTRACT TRAILING REPETITION SPECIFIER (IF ANY)

            if ($grammar =~ m/\G[(]/gc)
            {
                pos($grammar)--;

                if ($grammar =~ m/$OPTIONAL/gco)
                {
                    _parse("an zero-or-one subrule match", $aftererror,$line,"$code$argcode($1)");
                    $item = new XML::XSH2::Parser::_Runtime::Repetition($name,$1,0,1,
                                       $lookahead,$line,
                                       $self,
                                       $matchrule,
                                       $argcode);
                    $prod and $prod->additem($item)
                          or  _no_rule("repetition",$line,"$code$argcode($1)");

                    !$matchrule and $rule and $rule->addcall($name);
                }
                elsif ($grammar =~ m/$ANY/gco)
                {
                    _parse("a zero-or-more subrule match", $aftererror,$line,"$code$argcode($1)");
                    if ($2)
                    {
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name(s?)': $name $2 $name>(s?) ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,$1,0,$MAXREP,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);
                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode($1)");

                        !$matchrule and $rule and $rule->addcall($name);

                        _check_insatiable($name,$1,$grammar,$line) if $::RD_CHECK;
                    }
                }
                elsif ($grammar =~ m/$MANY/gco)
                {
                    _parse("a one-or-more subrule match", $aftererror,$line,"$code$argcode($1)");
                    if ($2)
                    {
                        # $DB::single=1;
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name(s)': $name $2 $name> ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,$1,1,$MAXREP,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);

                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode($1)");

                        !$matchrule and $rule and $rule->addcall($name);

                        _check_insatiable($name,$1,$grammar,$line) if $::RD_CHECK;
                    }
                }
                elsif ($grammar =~ m/$EXACTLY/gco)
                {
                    _parse("an exactly-$1-times subrule match", $aftererror,$line,"$code$argcode($1)");
                    if ($2)
                    {
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name($1)': $name $2 $name>($1) ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,$1,$1,$1,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);
                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode($1)");

                        !$matchrule and $rule and $rule->addcall($name);
                    }
                }
                elsif ($grammar =~ m/$BETWEEN/gco)
                {
                    _parse("a $1-to-$2 subrule match", $aftererror,$line,"$code$argcode($1..$2)");
                    if ($3)
                    {
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name($1..$2)': $name $3 $name>($1..$2) ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,"$1..$2",$1,$2,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);
                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode($1..$2)");

                        !$matchrule and $rule and $rule->addcall($name);
                    }
                }
                elsif ($grammar =~ m/$ATLEAST/gco)
                {
                    _parse("a $1-or-more subrule match", $aftererror,$line,"$code$argcode($1..)");
                    if ($2)
                    {
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name($1..)': $name $2 $name>($1..) ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,"$1..",$1,$MAXREP,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);
                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode($1..)");

                        !$matchrule and $rule and $rule->addcall($name);
                        _check_insatiable($name,"$1..",$grammar,$line) if $::RD_CHECK;
                    }
                }
                elsif ($grammar =~ m/$ATMOST/gco)
                {
                    _parse("a one-to-$1 subrule match", $aftererror,$line,"$code$argcode(..$1)");
                    if ($2)
                    {
                        my $pos = pos $grammar;
                        substr($grammar,$pos,0,
                               "<leftop='$name(..$1)': $name $2 $name>(..$1) ");

                        pos $grammar = $pos;
                    }
                    else
                    {
                        $item = new XML::XSH2::Parser::_Runtime::Repetition($name,"..$1",1,$1,
                                           $lookahead,$line,
                                           $self,
                                           $matchrule,
                                           $argcode);
                        $prod and $prod->additem($item)
                              or  _no_rule("repetition",$line,"$code$argcode(..$1)");

                        !$matchrule and $rule and $rule->addcall($name);
                    }
                }
                elsif ($grammar =~ m/$BADREP/gco)
                {
                    my $current_match = substr($grammar, $-[0], $+[0] - $-[0]);
                    _parse("an subrule match with invalid repetition specifier", 0,$line, $current_match);
                    _error("Incorrect specification of a repeated subrule",
                           $line);
                    _hint("Repeated subrules like \"$code$argcode$current_match\" cannot have
                           a maximum repetition of zero, nor can they have
                           negative components in their ranges.");
                }
            }
            else
            {
                _parse("a subrule match", $aftererror,$line,$code);
                my $desc;
                if ($name=~/\A_alternation_\d+_of_production_\d+_of_rule/)
                    { $desc = $self->{"rules"}{$name}->expected }
                $item = new XML::XSH2::Parser::_Runtime::Subrule($name,
                                       $lookahead,
                                       $line,
                                       $desc,
                                       $matchrule,
                                       $argcode);

                $prod and $prod->additem($item)
                      or  _no_rule("(sub)rule",$line,$name);

                !$matchrule and $rule and $rule->addcall($name);
            }
        }
        elsif ($grammar =~ m/$LONECOLON/gco   )
        {
            _error("Unexpected colon encountered", $line);
            _hint("Did you mean \"|\" (to start a new production)?
                   Or perhaps you forgot that the colon
                   in a rule definition must be
                   on the same line as the rule name?");
        }
        elsif ($grammar =~ m/$ACTION/gco   ) # BAD ACTION, ALREADY FAILED
        {
            _error("Malformed action encountered",
                   $line);
            _hint("Did you forget the closing curly bracket
                   or is there a syntax error in the action?");
        }
        elsif ($grammar =~ m/$OTHER/gco   )
        {
            _error("Untranslatable item encountered: \"$1\"",
                   $line);
            _hint("Did you misspell \"$1\"
                   or forget to comment it out?");
        }

        if ($lookaheadspec =~ tr /././ > 3)
        {
            $lookaheadspec =~ s/\A\s+//;
            $lookahead = $lookahead<0
                    ? 'a negative lookahead ("...!")'
                    : 'a positive lookahead ("...")' ;
            _warn(1,"Found two or more lookahead specifiers in a
                   row.",$line)
            and
            _hint("Multiple positive and/or negative lookaheads
                   are simply multiplied together to produce a
                   single positive or negative lookahead
                   specification. In this case the sequence
                   \"$lookaheadspec\" was reduced to $lookahead.
                   Was this your intention?");
        }
        $lookahead = 0;
        $lookaheadspec = "";

        $grammar =~ m/\G\s+/gc;
    }

    if ($must_pop_lines) {
        pop @lines;
    }

    unless ($ERRORS or $isimplicit or !$::RD_CHECK)
    {
        $self->_check_grammar();
    }

    unless ($ERRORS or $isimplicit or $XML::XSH2::Parser::_Runtime::compiling)
    {
        my $code = $self->_code();
        if (defined $::RD_TRACE)
        {
            my $mode = ($nextnamespace eq "namespace000002") ? '>' : '>>';
            print STDERR "printing code (", length($code),") to RD_TRACE\n";
            local *TRACE_FILE;
            open TRACE_FILE, $mode, "RD_TRACE"
            and print TRACE_FILE "my \$ERRORS;\n$code"
            and close TRACE_FILE;
        }

        unless ( eval "$code 1" )
        {
            _error("Internal error in generated parser code!");
            $@ =~ s/at grammar/in grammar at/;
            _hint($@);
        }
    }

    if ($ERRORS and !_verbosity("HINT"))
    {
        local $::RD_HINT = defined $::RD_HINT ? $::RD_HINT : 1;
        _hint('Set $::RD_HINT (or -RD_HINT if you\'re using "perl -s")
               for hints on fixing these problems.  Use $::RD_HINT = 0
               to disable this message.');
    }
    if ($ERRORS) { $ERRORS=0; return }
    return $self;
}


sub _addstartcode($$)
{
    my ($self, $code) = @_;
    $code =~ s/\A\s*\{(.*)\}\Z/$1/s;

    $self->{"startcode"} .= "$code;\n";
}

# CHECK FOR GRAMMAR PROBLEMS....

sub _check_insatiable($$$$)
{
    my ($subrule,$repspec,$grammar,$line) = @_;
    pos($grammar)=pos($_[2]);
    return if $grammar =~ m/$OPTIONAL/gco || $grammar =~ m/$ANY/gco;
    my $min = 1;
    if ( $grammar =~ m/$MANY/gco
      || $grammar =~ m/$EXACTLY/gco
      || $grammar =~ m/$ATMOST/gco
      || $grammar =~ m/$BETWEEN/gco && do { $min=$2; 1 }
      || $grammar =~ m/$ATLEAST/gco && do { $min=$2; 1 }
      || $grammar =~ m/$SUBRULE(?!\s*:)/gco
       )
    {
        return unless $1 eq $subrule && $min > 0;
        my $current_match = substr($grammar, $-[0], $+[0] - $-[0]);
        _warn(3,"Subrule sequence \"$subrule($repspec) $current_match\" will
               (almost certainly) fail.",$line)
        and
        _hint("Unless subrule \"$subrule\" performs some cunning
               lookahead, the repetition \"$subrule($repspec)\" will
               insatiably consume as many matches of \"$subrule\" as it
               can, leaving none to match the \"$current_match\" that follows.");
    }
}

sub _check_grammar ($)
{
    my $self = shift;
    my $rules = $self->{"rules"};
    my $rule;
    foreach $rule ( values %$rules )
    {
        next if ! $rule->{"changed"};

    # CHECK FOR UNDEFINED RULES

        my $call;
        foreach $call ( @{$rule->{"calls"}} )
        {
            if (!defined ${$rules}{$call}
              &&!defined &{"XML::XSH2::Parser::_Runtime::$call"})
            {
                if (!defined $::RD_AUTOSTUB)
                {
                    _warn(3,"Undefined (sub)rule \"$call\"
                          used in a production.")
                    and
                    _hint("Will you be providing this rule
                           later, or did you perhaps
                           misspell \"$call\"? Otherwise
                           it will be treated as an
                           immediate <reject>.");
                    eval "sub $self->{namespace}::$call {undef}";
                }
                else    # EXPERIMENTAL
                {
                    my $rule = qq{'$call'};
                    if ($::RD_AUTOSTUB and $::RD_AUTOSTUB ne "1") {
                        $rule = $::RD_AUTOSTUB;
                    }
                    _warn(1,"Autogenerating rule: $call")
                    and
                    _hint("A call was made to a subrule
                           named \"$call\", but no such
                           rule was specified. However,
                           since \$::RD_AUTOSTUB
                           was defined, a rule stub
                           ($call : $rule) was
                           automatically created.");

                    $self->_generate("$call: $rule",0,1);
                }
            }
        }

    # CHECK FOR LEFT RECURSION

        if ($rule->isleftrec($rules))
        {
            _error("Rule \"$rule->{name}\" is left-recursive.");
            _hint("Redesign the grammar so it's not left-recursive.
                   That will probably mean you need to re-implement
                   repetitions using the '(s)' notation.
                   For example: \"$rule->{name}(s)\".");
            next;
        }

    # CHECK FOR PRODUCTIONS FOLLOWING EMPTY PRODUCTIONS
      {
          my $hasempty;
          my $prod;
          foreach $prod ( @{$rule->{"prods"}} ) {
              if ($hasempty) {
                  _error("Production " . $prod->describe . " for \"$rule->{name}\"
                         will never be reached (preceding empty production will
                         always match first).");
                  _hint("Reorder the grammar so that the empty production
                         is last in the list or productions.");
                  last;
              }
              $hasempty ||= $prod->isempty();
          }
      }
    }
}

# GENERATE ACTUAL PARSER CODE

sub _code($)
{
    my $self = shift;
    my $initial_skip = defined($self->{skip}) ?
      '$skip = ' . $self->{skip} . ';' :
      $self->_dump([$skip],[qw(skip)]);

    my $code = qq!
package # this should not be indexed by CPAN
$self->{namespace};
use strict;
use vars qw(\$skip \$AUTOLOAD $self->{localvars} );
\@$self->{namespace}\::ISA = ();
$initial_skip
$self->{startcode}

{
local \$SIG{__WARN__} = sub {0};
# PRETEND TO BE IN XML::XSH2::Parser::_Runtime NAMESPACE
*$self->{namespace}::AUTOLOAD   = sub
{
    no strict 'refs';
!
# This generated code uses ${"AUTOLOAD"} rather than $AUTOLOAD in
# order to avoid the circular reference documented here:
#    https://rt.perl.org/rt3/Public/Bug/Display.html?id=110248
# As a result of the investigation of
#    https://rt.cpan.org/Ticket/Display.html?id=53710
. qq!
    \${"AUTOLOAD"} =~ s/^$self->{namespace}/XML::XSH2::Parser::_Runtime/;
    goto &{\${"AUTOLOAD"}};
}
}

!;
    $code .= "push \@$self->{namespace}\::ISA, 'XML::XSH2::Parser::_Runtime';";
    $self->{"startcode"} = '';

    my $rule;
    # sort the rules to ensure the output is reproducible
    foreach $rule ( sort { $a->{name} cmp $b->{name} }
                    values %{$self->{"rules"}} )
    {
        if ($rule->{"changed"})
        {
            $code .= $rule->code($self->{"namespace"},$self);
            $rule->{"changed"} = 0;
        }
    }

    return $code;
}

# A wrapper for Data::Dumper->Dump, which localizes some variables to
# keep the output in a form suitable for XML::XSH2::Parser::_Runtime.
#
# List of variables and their defaults taken from
# $Data::Dumper::VERSION == 2.158

sub _dump {
	require Data::Dumper;

	#
	# Allow the user's settings to persist for some features in case
	# RD_TRACE is set.  These shouldn't affect the eval()-ability of
	# the resulting parser.
	#

	#local $Data::Dumper::Indent = 2;
	#local $Data::Dumper::Useqq      = 0;
	#local $Data::Dumper::Quotekeys  = 1;
	#local $Data::Dumper::Useperl = 0;

	#
	# These may affect whether the output is valid perl code for
	# eval(), and must be controlled. Set them to their default
	# values.
	#

	local $Data::Dumper::Purity     = 0;
	local $Data::Dumper::Pad        = "";
	local $Data::Dumper::Varname    = "VAR";
	local $Data::Dumper::Terse      = 0;
	local $Data::Dumper::Freezer    = "";
	local $Data::Dumper::Toaster    = "";
	local $Data::Dumper::Deepcopy   = 0;
	local $Data::Dumper::Bless      = "bless";
	local $Data::Dumper::Maxdepth   = 0;
	local $Data::Dumper::Pair       = ' => ';
	local $Data::Dumper::Deparse    = 0;
	local $Data::Dumper::Sparseseen = 0;

	#
	# Modify the below options from their defaults.
	#

	# Sort the keys to ensure the output is reproducible
	local $Data::Dumper::Sortkeys   = 1;

	# Don't stop recursing
	local $Data::Dumper::Maxrecurse = 0;

	return Data::Dumper->Dump(@_[1..$#_]);
}

# EXECUTING A PARSE....

sub AUTOLOAD    # ($parser, $text; $linenum, @args)
{
    croak "Could not find method: $AUTOLOAD\n" unless ref $_[0];
    my $class = ref($_[0]) || $_[0];
    my $text = ref($_[1]) eq 'SCALAR' ? ${$_[1]} : "$_[1]";
    $_[0]->{lastlinenum} = _linecount($text);
    $_[0]->{lastlinenum} += ($_[2]||0) if @_ > 2;
    $_[0]->{offsetlinenum} = $_[0]->{lastlinenum};
    $_[0]->{fulltext} = $text;
    $_[0]->{fulltextlen} = length $text;
    $_[0]->{linecounter_cache} = {};
    $_[0]->{deferred} = [];
    $_[0]->{errors} = [];
    my @args = @_[3..$#_];
    my $args = sub { [ @args ] };

    $AUTOLOAD =~ s/$class/$_[0]->{namespace}/;
    no strict "refs";

    local $::RD_WARN  = $::RD_WARN  || $_[0]->{__WARN__};
    local $::RD_HINT  = $::RD_HINT  || $_[0]->{__HINT__};
    local $::RD_TRACE = $::RD_TRACE || $_[0]->{__TRACE__};

    croak "Unknown starting rule ($AUTOLOAD) called\n"
        unless defined &$AUTOLOAD;
    my $retval = &{$AUTOLOAD}(
        $_[0], # $parser
        $text, # $text
        undef, # $repeating
        undef, # $_noactions
        $args, # \@args
        undef, # $_itempos
    );


    if (defined $retval)
    {
        foreach ( @{$_[0]->{deferred}} ) { &$_; }
    }
    else
    {
        foreach ( @{$_[0]->{errors}} ) { _error(@$_); }
    }

    if (ref $_[1] eq 'SCALAR') { ${$_[1]} = $text }

    $ERRORS = 0;
    return $retval;
}

sub _parserepeat($$$$$$$$$)    # RETURNS A REF TO AN ARRAY OF MATCHES
{
    my ($parser, $text, $prod, $min, $max, $_noactions, $expectation, $argcode, $_itempos) = @_;
    my @tokens = ();

    my $itemposfirst;
    my $reps;
    for ($reps=0; $reps<$max;)
    {
        $expectation->at($text);
        my $_savetext = $text;
        my $prevtextlen = length $text;
        my $_tok;
        if (! defined ($_tok = &$prod($parser,$text,1,$_noactions,$argcode,$_itempos)))
        {
            $text = $_savetext;
            last;
        }

        if (defined($_itempos) and !defined($itemposfirst))
        {
            $itemposfirst = XML::XSH2::Parser::_Runtime::Production::_duplicate_itempos($_itempos);
        }

        push @tokens, $_tok if defined $_tok;
        last if ++$reps >= $min and $prevtextlen == length $text;
    }

    do { $expectation->failed(); return undef} if $reps<$min;

    if (defined $itemposfirst)
    {
        XML::XSH2::Parser::_Runtime::Production::_update_itempos($_itempos, $itemposfirst, undef, [qw(from)]);
    }

    $_[1] = $text;
    return [@tokens];
}

sub set_autoflush {
    my $orig_selected = select $_[0];
    $| = 1;
    select $orig_selected;
    return;
}

# ERROR REPORTING....

sub _write_ERROR {
    my ($errorprefix, $errortext) = @_;
    return if $errortext !~ /\S/;
    $errorprefix =~ s/\s+\Z//;
    local $^A = q{};

    formline(<<'END_FORMAT', $errorprefix, $errortext);
@>>>>>>>>>>>>>>>>>>>>: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
END_FORMAT
    formline(<<'END_FORMAT', $errortext);
~~                     ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
END_FORMAT
    print {*STDERR} $^A;
}

# TRACING

my $TRACE_FORMAT = <<'END_FORMAT';
@>|@|||||||||@^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<|
  | ~~       |^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<|
END_FORMAT

my $TRACECONTEXT_FORMAT = <<'END_FORMAT';
@>|@|||||||||@                                      |^<<<<<<<<<<<<<<<<<<<<<<<<<<<
  | ~~       |                                      |^<<<<<<<<<<<<<<<<<<<<<<<<<<<
END_FORMAT

sub _write_TRACE {
    my ($tracelevel, $tracerulename, $tracemsg) = @_;
    return if $tracemsg !~ /\S/;
    $tracemsg =~ s/\s*\Z//;
    local $^A = q{};
    my $bar = '|';
    formline($TRACE_FORMAT, $tracelevel, $tracerulename, $bar, $tracemsg, $tracemsg);
    print {*STDERR} $^A;
}

sub _write_TRACECONTEXT {
    my ($tracelevel, $tracerulename, $tracecontext) = @_;
    return if $tracecontext !~ /\S/;
    $tracecontext =~ s/\s*\Z//;
    local $^A = q{};
    my $bar = '|';
    formline($TRACECONTEXT_FORMAT, $tracelevel, $tracerulename, $bar, $tracecontext, $tracecontext);
    print {*STDERR} $^A;
}

sub _verbosity($)
{
       defined $::RD_TRACE
    or defined $::RD_HINT    and  $::RD_HINT   and $_[0] =~ /ERRORS|WARN|HINT/
    or defined $::RD_WARN    and  $::RD_WARN   and $_[0] =~ /ERRORS|WARN/
    or defined $::RD_ERRORS  and  $::RD_ERRORS and $_[0] =~ /ERRORS/
}

sub _error($;$)
{
    $ERRORS++;
    return 0 if ! _verbosity("ERRORS");
    my $errortext   = $_[0];
    my $errorprefix = "ERROR" .  ($_[1] ? " (line $_[1])" : "");
    $errortext =~ s/\s+/ /g;
    print {*STDERR} "\n" if _verbosity("WARN");
    _write_ERROR($errorprefix, $errortext);
    return 1;
}

sub _warn($$;$)
{
    return 0 unless _verbosity("WARN") && ($::RD_HINT || $_[0] >= ($::RD_WARN||1));
    my $errortext   = $_[1];
    my $errorprefix = "Warning" .  ($_[2] ? " (line $_[2])" : "");
    print {*STDERR} "\n" if _verbosity("HINT");
    $errortext =~ s/\s+/ /g;
    _write_ERROR($errorprefix, $errortext);
    return 1;
}

sub _hint($)
{
    return 0 unless $::RD_HINT;
    my $errortext = $_[0];
    my $errorprefix = "Hint" .  ($_[1] ? " (line $_[1])" : "");
    $errortext =~ s/\s+/ /g;
    _write_ERROR($errorprefix, $errortext);
    return 1;
}

sub _tracemax($)
{
    if (defined $::RD_TRACE
        && $::RD_TRACE =~ /\d+/
        && $::RD_TRACE>1
        && $::RD_TRACE+10<length($_[0]))
    {
        my $count = length($_[0]) - $::RD_TRACE;
        return substr($_[0],0,$::RD_TRACE/2)
            . "...<$count>..."
            . substr($_[0],-$::RD_TRACE/2);
    }
    else
    {
        return substr($_[0],0,500);
    }
}

sub _tracefirst($)
{
    if (defined $::RD_TRACE
        && $::RD_TRACE =~ /\d+/
        && $::RD_TRACE>1
        && $::RD_TRACE+10<length($_[0]))
    {
        my $count = length($_[0]) - $::RD_TRACE;
        return substr($_[0],0,$::RD_TRACE) . "...<+$count>";
    }
    else
    {
        return substr($_[0],0,500);
    }
}

my $lastcontext = '';
my $lastrulename = '';
my $lastlevel = '';

sub _trace($;$$$)
{
    my $tracemsg      = $_[0];
    my $tracecontext  = $_[1]||$lastcontext;
    my $tracerulename = $_[2]||$lastrulename;
    my $tracelevel    = $_[3]||$lastlevel;
    if ($tracerulename) { $lastrulename = $tracerulename }
    if ($tracelevel)    { $lastlevel = $tracelevel }

    $tracecontext =~ s/\n/\\n/g;
    $tracecontext =~ s/\s+/ /g;
    $tracerulename = qq{$tracerulename};
    _write_TRACE($tracelevel, $tracerulename, $tracemsg);
    if ($tracecontext ne $lastcontext)
    {
        if ($tracecontext)
        {
            $lastcontext = _tracefirst($tracecontext);
            $tracecontext = qq{"$tracecontext"};
        }
        else
        {
            $tracecontext = qq{<NO TEXT LEFT>};
        }
        _write_TRACECONTEXT($tracelevel, $tracerulename, $tracecontext);
    }
}

sub _matchtracemessage
{
    my ($self, $reject) = @_;

    my $prefix = '';
    my $postfix = '';
    my $matched = not $reject;
    my @t = ("Matched", "Didn't match");
    if (exists $self->{lookahead} and $self->{lookahead})
    {
        $postfix = $reject ? "(reject)" : "(keep)";
        $prefix = "...";
        if ($self->{lookahead} < 0)
        {
            $prefix .= '!';
            $matched = not $matched;
        }
    }
    $prefix . ($matched ? $t[0] : $t[1]) . $postfix;
}

sub _parseunneg($$$$$)
{
    _parse($_[0],$_[1],$_[3],$_[4]);
    if ($_[2]<0)
    {
        _error("Can't negate \"$_[4]\".",$_[3]);
        _hint("You can't negate $_[0]. Remove the \"...!\" before
               \"$_[4]\".");
        return 0;
    }
    return 1;
}

sub _parse($$$$)
{
    my $what = $_[3];
       $what =~ s/^\s+//;
    if ($_[1])
    {
        _warn(3,"Found $_[0] ($what) after an unconditional <error>",$_[2])
        and
        _hint("An unconditional <error> always causes the
               production containing it to immediately fail.
               \u$_[0] that follows an <error>
               will never be reached.  Did you mean to use
               <error?> instead?");
    }

    return if ! _verbosity("TRACE");
    my $errortext = "Treating \"$what\" as $_[0]";
    my $errorprefix = "XML::XSH2::Parser::_Runtime";
    $errortext =~ s/\s+/ /g;
    _write_ERROR($errorprefix, $errortext);
}

sub _linecount($) {
    scalar substr($_[0], pos $_[0]||0) =~ tr/\n//
}


package # this should not be indexed by CPAN
main;

use vars qw ( $RD_ERRORS $RD_WARN $RD_HINT $RD_TRACE $RD_CHECK );
$::RD_CHECK = 1;
$::RD_ERRORS = 1;
$::RD_WARN = 3;

1;

}
package XML::XSH2::Parser;
{ my $ERRORS;


package XML::XSH2::Parser::_Runtime::XML::XSH2::Parser;
use strict;
use vars qw($skip $AUTOLOAD  );
@XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::ISA = ();
$skip = '(\\s|\\n|#[^\\n]*)*';



{
local $SIG{__WARN__} = sub {0};
# PRETEND TO BE IN XML::XSH2::Parser::_Runtime NAMESPACE
*XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::AUTOLOAD   = sub
{
    no strict 'refs';

    ${"AUTOLOAD"} =~ s/^XML::XSH2::Parser::_Runtime::XML::XSH2::Parser/XML::XSH2::Parser::_Runtime/;
    goto &{${"AUTOLOAD"}};
}
}

push @XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::ISA, 'XML::XSH2::Parser::_Runtime';
# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::ID
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"ID"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [ID]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{ID},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/[a-zA-Z_][a-zA-Z0-9_]*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/[a-zA-Z_][a-zA-Z0-9_]*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{ID},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{ID});
        %item = (__RULE__ => q{ID});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/[a-zA-Z_][a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{ID},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:[a-zA-Z_][a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/[a-zA-Z_][a-zA-Z0-9_]*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{ID},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{ID},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{ID},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{ID},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{ID},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_10_of_rule_command
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_10_of_rule_command"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_10_of_rule_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command, 0, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command(s?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ map { @$_ } @{$item[1]} ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_10_of_rule_command},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--input-file|:f/ filename]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--input-file|:f/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--input-file|:f)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [filename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{filename})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::filename($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [filename]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [filename]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{filename}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'string/input-file' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--input-file|:f/ filename]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--input-pipe|:p/ filename]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--input-pipe|:p/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--input-pipe|:p)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [filename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{filename})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::filename($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [filename]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [filename]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{filename}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'string/input-pipe' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--input-pipe|:p/ filename]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--input-string|:s/ exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--input-string|:s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--input-string|:s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'exp/input-string' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--input-string|:s/ exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--output-file|:F/ filename]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--output-file|:F/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--output-file|:F)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [filename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{filename})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::filename($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [filename]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [filename]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{filename}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'string/output-file' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--output-file|:F/ filename]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--output-encoding|:E/ enc_string]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[4];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--output-encoding|:E/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--output-encoding|:E)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [enc_string]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{enc_string})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::enc_string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [enc_string]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [enc_string]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{enc_string}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'string/output-encoding' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--output-encoding|:E/ enc_string]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--output-pipe|:P/ filename]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[5];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--output-pipe|:P/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--output-pipe|:P)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [filename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{filename})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::filename($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [filename]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [filename]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{filename}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'string/output-pipe' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--output-pipe|:P/ filename]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--output-string|:S/ exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[6];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--output-string|:S/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--output-string|:S)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ 'varname/output-string' => $item[2] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--output-string|:S/ exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/--no-output|:N/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[7];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/--no-output|:N/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:--no-output|:N)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ '/no-output' => 1 ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/--no-output|:N/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_local_var
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_local_var"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_local_var]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_1_of_rule_local_var},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(local|my)\\s/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(local|my)\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule_local_var});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_local_var});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(local|my)\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(local|my)\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(local|my)\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_1_of_rule_local_var},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_1_of_rule_local_var},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_xpcont
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_xpcont"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_xpcont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_1_of_rule_xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xpfilters, or xpbrackets});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpfilters]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule_xpcont});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_xpcont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpfilters]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule_xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilters($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpfilters]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule_xpcont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpfilters]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpfilters}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpfilters]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpbrackets]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule_xpcont});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_xpcont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpbrackets]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule_xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbrackets($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpbrackets]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule_xpcont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpbrackets]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpbrackets}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpbrackets]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_1_of_rule_xpcont},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_1_of_rule_xpcont},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_xpintercont
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_1_of_rule_xpintercont"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_1_of_rule_xpintercont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_1_of_rule_xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xpfilters, or xpbrackets});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpfilters]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule_xpintercont});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_xpintercont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpfilters]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule_xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilters($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpfilters]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule_xpintercont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpfilters]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpfilters}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpfilters]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpbrackets]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_1_of_rule_xpintercont});
        %item = (__RULE__ => q{_alternation_1_of_production_1_of_rule_xpintercont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpbrackets]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_1_of_rule_xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbrackets($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpbrackets]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_1_of_rule_xpintercont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpbrackets]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpbrackets}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpbrackets]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_1_of_rule_xpintercont},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_1_of_rule_xpintercont},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_2_of_rule_command
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"_alternation_1_of_production_2_of_rule_command"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [_alternation_1_of_production_2_of_rule_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{_alternation_1_of_production_2_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/, or /\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/ <commit> loose_exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_2_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_2_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?:[\-\+\*\/%x.]|\|\||\&\&)?=)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [loose_exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_2_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{loose_exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::loose_exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [loose_exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_2_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [loose_exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{loose_exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { ['xpath_assign',$item[3],$item[1]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/ <commit> loose_exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/ command]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{_alternation_1_of_production_2_of_rule_command});
        %item = (__RULE__ => q{_alternation_1_of_production_2_of_rule_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\s*(?:[\-\+\*\/%x.]|\|\||\&\&)?:=)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{_alternation_1_of_production_2_of_rule_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{command})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{_alternation_1_of_production_2_of_rule_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { ['command_assign',$item[2],$item[1]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/ command]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{_alternation_1_of_production_2_of_rule_command},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{_alternation_1_of_production_2_of_rule_command},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"block"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{block},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{'\{'});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['\{' <commit> complex_command '\}']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{block});
        %item = (__RULE__ => q{block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['\{']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\{/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [complex_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{block},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{complex_command})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::complex_command, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [complex_command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{block},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [complex_command]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{complex_command(s)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['\}']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{'\}'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\}/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [grep ref,@{$item[3]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['\{' <commit> complex_command '\}']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{block},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{block},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{block},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"command"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\s*[\}\{;]|\\s*\\Z)/, or /assign\\b|(?:local\\b|my\\b)?(?=\\s*\\$[a-zA-Z_][a-zA-Z0-9_]*\\s*\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:?=)/, or /(my)\\b/, or /(local)\\b/, or /(do)\\b/, or /(if)\\b/, or /(unless)\\b/, or /(while)\\b/, or /(foreach|for)\\b/, or /(stream)\\b/, or /(undef|undefine)\\b/, or /(use)\\b/, or /(test-mode|test_mode)/, or /(run-mode|run_mode)/, or /(?!(?:iterate|try|def|define)\\b)/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\s*[\}\{;]|\\s*\\Z)/ <commit> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\s*[\}\{;]|\\s*\\Z)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\s*[}{;]|\s*\Z))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\s*[\}\{;]|\\s*\\Z)/ <commit> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/assign\\b|(?:local\\b|my\\b)?(?=\\s*\\$[a-zA-Z_][a-zA-Z0-9_]*\\s*\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:?=)/ <commit> variable /(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/, or /\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/assign\\b|(?:local\\b|my\\b)?(?=\\s*\\$[a-zA-Z_][a-zA-Z0-9_]*\\s*\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:?=)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:assign\b|(?:local\b|my\b)?(?=\s*\$[a-zA-Z_][a-zA-Z0-9_]*\s*\s*(?:[\-\+\*\/%x.]|\|\||\&\&)?:?=))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{variable})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [variable]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [_alternation_1_of_production_2_of_rule_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{/(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/, or /\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_2_of_rule_command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [_alternation_1_of_production_2_of_rule_command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [_alternation_1_of_production_2_of_rule_command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_2_of_rule_command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,@{$item[4]},$item[1],$item[3]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/assign\\b|(?:local\\b|my\\b)?(?=\\s*\\$[a-zA-Z_][a-zA-Z0-9_]*\\s*\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:?=)/ <commit> variable /(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=/, or /\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(my)\\b/ variable]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(my)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(my)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{variable})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [variable]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable(s)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'store_lex_variables',0,@{$item[2]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(my)\\b/ variable]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(local)\\b/ variable]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(local)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(local)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{variable})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [variable]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable(s)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'make_local',@{$item[2]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(local)\\b/ variable]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(do)\\b/ <commit> block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[4];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(do)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(do)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'run_commands',$item[3],0] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(do)\\b/ <commit> block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(if)\\b/ <commit> exp command]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[5];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(if)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(if)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{command})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'if_statement',[$item[3],[$item[4]]]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(if)\\b/ <commit> exp command]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(unless)\\b/ <commit> exp command]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[6];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(unless)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(unless)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{command})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'unless_statement',$item[3],[$item[4]]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(unless)\\b/ <commit> exp command]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(while)\\b/ <commit> exp command]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[7];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(while)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(while)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{command})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'while_statement',$item[3],[$item[4]]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(while)\\b/ <commit> exp command]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(foreach|for)\\b/ <commit> local_var_in exp command]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[8];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(foreach|for)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(foreach|for)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [local_var_in]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{local_var_in})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var_in, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [local_var_in]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [local_var_in]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{local_var_in(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{command})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'foreach_statement',$item[4],[$item[5]],@{$item[3]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(foreach|for)\\b/ <commit> local_var_in exp command]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(stream)\\b/ <commit> /--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/ stream_select]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[9];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(stream)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(stream)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [_alternation_1_of_production_10_of_rule_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_10_of_rule_command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [_alternation_1_of_production_10_of_rule_command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [_alternation_1_of_production_10_of_rule_command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_10_of_rule_command}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [stream_select]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{stream_select})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::stream_select, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [stream_select]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [stream_select]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{stream_select(s)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'stream_process',$item[3],$item[4]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(stream)\\b/ <commit> /--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/ stream_select]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(undef|undefine)\\b/ <commit> /\\$?[a-zA-Z_][a-zA-Z0-9_]*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[10];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(undef|undefine)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(undef|undefine)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\$?[a-zA-Z_][a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/\\$?[a-zA-Z_][a-zA-Z0-9_]*/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\$?[a-zA-Z_][a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'undefine',$item[3]];
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(undef|undefine)\\b/ <commit> /\\$?[a-zA-Z_][a-zA-Z0-9_]*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(use)\\b/ <commit> /XML::XSH2::(?:Inline|Compile)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[11];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(use)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(use)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/XML::XSH2::(?:Inline|Compile)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/XML::XSH2::(?:Inline|Compile)/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:XML::XSH2::(?:Inline|Compile))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 1 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(use)\\b/ <commit> /XML::XSH2::(?:Inline|Compile)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(test-mode|test_mode)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[12];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(test-mode|test_mode)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(test-mode|test_mode))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,"test-mode"] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(test-mode|test_mode)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(run-mode|run_mode)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[13];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(run-mode|run_mode)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(run-mode|run_mode))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,"run-mode"] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(run-mode|run_mode)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?!(?:iterate|try|def|define)\\b)/ /\\.|[a-zA-Z_][-a-zA-Z0-9_]*/ exp_or_opt]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[14];
        $text = $_[1];
        my $_savetext;
        @item = (q{command});
        %item = (__RULE__ => q{command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?!(?:iterate|try|def|define)\\b)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?!(?:iterate|try|def|define)\b))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\.|[a-zA-Z_][-a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/\\.|[a-zA-Z_][-a-zA-Z0-9_]*/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\.|[a-zA-Z_][-a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [exp_or_opt]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{exp_or_opt})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp_or_opt, 0, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [exp_or_opt]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [exp_or_opt]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp_or_opt(s?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  bless
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,$item[2],@{$item[3]}],
	  'XML::XSH2::Command'
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?!(?:iterate|try|def|define)\\b)/ /\\.|[a-zA-Z_][-a-zA-Z0-9_]*/ exp_or_opt]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{command},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{command},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{command},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::complex_command
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"complex_command"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [complex_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{complex_command},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\s*[\{\}]|\\s*\\Z)/, or /\\s*;/, or /(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\b)/, or command});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\s*[\{\}]|\\s*\\Z)/ <commit> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{complex_command});
        %item = (__RULE__ => q{complex_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\s*[\{\}]|\\s*\\Z)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\s*[{}]|\s*\Z))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\s*[\{\}]|\\s*\\Z)/ <commit> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/\\s*;/ <commit>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{complex_command});
        %item = (__RULE__ => q{complex_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\s*;/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\s*;)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/\\s*;/ <commit>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\b)/ statement <commit> trail]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{complex_command});
        %item = (__RULE__ => q{complex_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\b)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\b))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [statement]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{complex_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{statement})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::statement($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [statement]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{complex_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [statement]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{statement}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [trail]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{complex_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{trail})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::trail, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [trail]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{complex_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [trail]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{trail(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  if (scalar(@{$item[4]})) {
	    if ($item[4][0][0] eq 'pipe') {
  	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'pipe_command',[$item[2]],$item[4][0][1]]
	    } else {
   	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'string_pipe_command',[$item[2]],$item[4][0][1]]
	    }
          } else {
            $return=$item[2]
          }
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\b)/ statement <commit> trail]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [command <commit> trail /\\s*;|(?=\\s*\}|\\s*\\Z)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{complex_command});
        %item = (__RULE__ => q{complex_command});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{complex_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::command($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{complex_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [command]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{command}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [trail]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{complex_command},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{trail})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::trail, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [trail]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{complex_command},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [trail]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{trail(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\s*;|(?=\\s*\}|\\s*\\Z)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/\\s*;|(?=\\s*\}|\\s*\\Z)/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\s*;|(?=\s*}|\s*\Z))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  if (scalar(@{$item[3]})) {
	    if ($item[3][0][0] eq 'pipe') {
  	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'pipe_command',[$item[1]],$item[3][0][1]]
	    } else {
   	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'string_pipe_command',[$item[1]],$item[3][0][1]]
	    }
          } else {
            $return=$item[1]
          }
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [command <commit> trail /\\s*;|(?=\\s*\}|\\s*\\Z)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<error...>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[4];
        
        my $_savetext;
        @item = (q{complex_command});
        %item = (__RULE__ => q{complex_command});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<error...>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { if (1) { do {push @{$thisparser->{errors}}, [qq{Parse error near: "}.substr($text,0,40).qq{ ..."},$thisline];} unless  $_noactions; undef } else {0} };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<error...>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{complex_command},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{complex_command},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{complex_command},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{complex_command},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::else_block
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"else_block"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [else_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{else_block},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(else)\\b/, or /(?!else)/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(else)\\b/ <commit> block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{else_block});
        %item = (__RULE__ => q{else_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(else)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(else)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{else_block},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{else_block},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [[undef,$item[3]]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(else)\\b/ <commit> block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?!else)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{else_block});
        %item = (__RULE__ => q{else_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?!else)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?!else))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?!else)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<uncommit> <error...>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{else_block});
        %item = (__RULE__ => q{else_block});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<uncommit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit=0;1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<error...>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { if (1) { do {push @{$thisparser->{errors}}, [qq{Parse error near keyword else: "}.substr($text,0,40).qq{ ..."},$thisline];} unless  $_noactions; undef } else {0} };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE2__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<uncommit> <error...>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{else_block},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{else_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{else_block},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{else_block},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::elsif_block
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"elsif_block"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [elsif_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{elsif_block},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(elsif)\\b/, or /(?!elsif)/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(elsif)\\b/ <commit> exp block elsif_block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{elsif_block});
        %item = (__RULE__ => q{elsif_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(elsif)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(elsif)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{elsif_block},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{elsif_block},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{elsif_block},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{elsif_block},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [elsif_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{elsif_block},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{elsif_block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::elsif_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [elsif_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{elsif_block},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [elsif_block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{elsif_block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [[$item[3],$item[4]],@{$item[5]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(elsif)\\b/ <commit> exp block elsif_block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?!elsif)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{elsif_block});
        %item = (__RULE__ => q{elsif_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?!elsif)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?!elsif))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?!elsif)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<uncommit> <error...>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{elsif_block});
        %item = (__RULE__ => q{elsif_block});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<uncommit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit=0;1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<error...>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { if (1) { do {push @{$thisparser->{errors}}, [qq{Parse error near keyword elsif: "}.substr($text,0,40).qq{ ..."},$thisline];} unless  $_noactions; undef } else {0} };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE2__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<uncommit> <error...>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{elsif_block},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{elsif_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{elsif_block},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{elsif_block},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::enc_string
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"enc_string"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [enc_string]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{enc_string},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{exp});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{enc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{enc_string});
        %item = (__RULE__ => q{enc_string});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{enc_string},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{enc_string},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{enc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{enc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{enc_string},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{enc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{enc_string},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{enc_string},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::eof
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"eof"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [eof]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{eof},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/\\Z/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/\\Z/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{eof},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{eof});
        %item = (__RULE__ => q{eof});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\Z/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{eof},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\Z)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{eof},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 1; };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/\\Z/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{eof},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{eof},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{eof},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{eof},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{eof},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"exp"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{exp},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/^(?=\{)/, or '&', or /^(?=<<)/, or xpath});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/^(?=\{)/ perl_block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp});
        %item = (__RULE__ => q{exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/^(?=\{)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:^(?={))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [perl_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{perl_block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::perl_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [perl_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [perl_block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{perl_block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/^(?=\{)/ perl_block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['&' block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp});
        %item = (__RULE__ => q{exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['&']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\&/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['&' block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/^(?=<<)/ inline_doc]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp});
        %item = (__RULE__ => q{exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/^(?=<<)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:^(?=<<))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [inline_doc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{inline_doc})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::inline_doc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [inline_doc]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [inline_doc]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{inline_doc}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/^(?=<<)/ inline_doc]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpath]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp});
        %item = (__RULE__ => q{exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpath]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpath($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpath]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpath]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpath}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpath]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{exp},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{exp},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{exp},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp_or_opt
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"exp_or_opt"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [exp_or_opt]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{exp_or_opt},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\s*[\};]|\\s*\\Z)/, or option, or exp});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\s*[\};]|\\s*\\Z)/ <commit> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp_or_opt});
        %item = (__RULE__ => q{exp_or_opt});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\s*[\};]|\\s*\\Z)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\s*[};]|\s*\Z))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\s*[\};]|\\s*\\Z)/ <commit> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [option]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp_or_opt});
        %item = (__RULE__ => q{exp_or_opt});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [option]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp_or_opt},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::option($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [option]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp_or_opt},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [option]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{option}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [option]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{exp_or_opt});
        %item = (__RULE__ => q{exp_or_opt});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{exp_or_opt},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{exp_or_opt},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{exp_or_opt},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{exp_or_opt},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{exp_or_opt},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{exp_or_opt},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::filename
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"filename"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [filename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{filename},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{exp});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{filename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{filename});
        %item = (__RULE__ => q{filename});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{filename},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{filename},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{filename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{filename},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{filename},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{filename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{filename},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{filename},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::inline_doc
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"inline_doc"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [inline_doc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{inline_doc},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/<</});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/<</ inline_doc_string <skip:""> /.*\\n/ /(.|\\n)*?\\n$item[2][1]\\s*(\\n|$)/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{inline_doc});
        %item = (__RULE__ => q{inline_doc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/<</]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:<<)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [inline_doc_string]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{inline_doc},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{inline_doc_string})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::inline_doc_string($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [inline_doc_string]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{inline_doc},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [inline_doc_string]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{inline_doc_string}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/.*\\n/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/.*\\n/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:.*\n)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(.|\\n)*?\\n$item[2][1]\\s*(\\n|$)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/(.|\\n)*?\\n$item[2][1]\\s*(\\n|$)/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(.|\n)*?\n$item[2][1]\s*(\n|$))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN3__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  $text=$item[4].$text;
	  local $_=$item[5]; s/\n$item[2][1]\s*$//;
	  my $paren = $item[2][0];
	  $paren = '"' if $paren eq "";
	  if ($paren eq "'") {
	      $paren = '"';
	      s{(\\)(.|\n)|(\$)}{ (defined($3) and $3 eq '$') ? "\\\$"
	        : ((defined($2) and $2 eq "\\")
	        ? "\\\\" : ((defined($2) and $2 eq "'") ? "'" : (
	        (defined($2) and $2 eq '$') ? "\\\\\\$2" :
	        "\\\\$2"))) }eg;
	  } "<<".$paren.$_;
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/<</ inline_doc_string <skip:""> /.*\\n/ /(.|\\n)*?\\n$item[2][1]\\s*(\\n|$)/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{inline_doc},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{inline_doc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{inline_doc},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{inline_doc},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::inline_doc_string
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"inline_doc_string"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [inline_doc_string]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{inline_doc_string},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/'[a-zA-Z_][a-zA-Z0-9_]*'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\([a-zA-Z_][a-zA-Z0-9_]*\\)|\\\{[a-zA-Z_][a-zA-Z0-9_]*\\\}|[a-zA-Z_][a-zA-Z0-9_]*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/'[a-zA-Z_][a-zA-Z0-9_]*'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\([a-zA-Z_][a-zA-Z0-9_]*\\)|\\\{[a-zA-Z_][a-zA-Z0-9_]*\\\}|[a-zA-Z_][a-zA-Z0-9_]*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{inline_doc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{inline_doc_string});
        %item = (__RULE__ => q{inline_doc_string});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/'[a-zA-Z_][a-zA-Z0-9_]*'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\([a-zA-Z_][a-zA-Z0-9_]*\\)|\\\{[a-zA-Z_][a-zA-Z0-9_]*\\\}|[a-zA-Z_][a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:'[a-zA-Z_][a-zA-Z0-9_]*'|"[a-zA-Z_][a-zA-Z0-9_]*"|\([a-zA-Z_][a-zA-Z0-9_]*\)|\{[a-zA-Z_][a-zA-Z0-9_]*\}|[a-zA-Z_][a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [($item[1]=~/^(['"({])?(.*?)(['")}])?$/)] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/'[a-zA-Z_][a-zA-Z0-9_]*'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\([a-zA-Z_][a-zA-Z0-9_]*\\)|\\\{[a-zA-Z_][a-zA-Z0-9_]*\\\}|[a-zA-Z_][a-zA-Z0-9_]*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{inline_doc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{inline_doc_string},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{inline_doc_string},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{inline_doc_string},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{inline_doc_string},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::loc
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"loc"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [loc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{loc},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/after\\s/, or /before\\s/, or /(in)?to\\s/, or /(append(ing)?|as\\s+(a\\s+)child(\\s+of)?)\\s/, or /(prepend(ing)?|(as\\s+)(the\\s+)first(\\s+child(\\s+of)?)?)\\s/, or /(replace|instead( of)?)\\s/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/after\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/after\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:after\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "after" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/after\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/before\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/before\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:before\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "before" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/before\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(in)?to\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(in)?to\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(in)?to\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "into" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(in)?to\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(append(ing)?|as\\s+(a\\s+)child(\\s+of)?)\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(append(ing)?|as\\s+(a\\s+)child(\\s+of)?)\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(append(ing)?|as\s+(a\s+)child(\s+of)?)\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "append" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(append(ing)?|as\\s+(a\\s+)child(\\s+of)?)\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(prepend(ing)?|(as\\s+)(the\\s+)first(\\s+child(\\s+of)?)?)\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[4];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(prepend(ing)?|(as\\s+)(the\\s+)first(\\s+child(\\s+of)?)?)\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(prepend(ing)?|(as\s+)(the\s+)first(\s+child(\s+of)?)?)\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "prepend" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(prepend(ing)?|(as\\s+)(the\\s+)first(\\s+child(\\s+of)?)?)\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(replace|instead( of)?)\\s/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[5];
        $text = $_[1];
        my $_savetext;
        @item = (q{loc});
        %item = (__RULE__ => q{loc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(replace|instead( of)?)\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(replace|instead( of)?)\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "replace" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(replace|instead( of)?)\\s/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{loc},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{loc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{loc},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{loc},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"local_var"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [local_var]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{local_var},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(local|my)\\s/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(local|my)\\s/ variable]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{local_var});
        %item = (__RULE__ => q{local_var});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [/(local|my)\\s/]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{local_var},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_local_var, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [/(local|my)\\s/]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{local_var},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [_alternation_1_of_production_1_of_rule_local_var]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_1_of_rule_local_var(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{local_var},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{variable})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{local_var},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [variable]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$item[2],@{$item[1]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(local|my)\\s/ variable]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{local_var},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{local_var},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{local_var},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{local_var},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var_in
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"local_var_in"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [local_var_in]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{local_var_in},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{local_var});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [local_var 'in']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{local_var_in});
        %item = (__RULE__ => q{local_var_in});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [local_var]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{local_var_in},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [local_var]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{local_var_in},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [local_var]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{local_var}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['in']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{'in'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\Ain/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [local_var 'in']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{local_var_in},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{local_var_in},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{local_var_in},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{local_var_in},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::loose_exp
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"loose_exp"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [loose_exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{loose_exp},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/^(?=\{)/, or '&', or /^(?=<<)/, or xpinter});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/^(?=\{)/ perl_block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{loose_exp});
        %item = (__RULE__ => q{loose_exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/^(?=\{)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:^(?={))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [perl_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{loose_exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{perl_block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::perl_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [perl_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{loose_exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [perl_block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{perl_block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/^(?=\{)/ perl_block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['&' block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{loose_exp});
        %item = (__RULE__ => q{loose_exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['&']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\&/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{loose_exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{loose_exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['&' block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/^(?=<<)/ inline_doc]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{loose_exp});
        %item = (__RULE__ => q{loose_exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/^(?=<<)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:^(?=<<))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [inline_doc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{loose_exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{inline_doc})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::inline_doc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [inline_doc]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{loose_exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [inline_doc]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{inline_doc}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[2] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/^(?=<<)/ inline_doc]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpinter]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{loose_exp});
        %item = (__RULE__ => q{loose_exp});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpinter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{loose_exp},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpinter($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpinter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{loose_exp},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpinter]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpinter}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpinter]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{loose_exp},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{loose_exp},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{loose_exp},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{loose_exp},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::nodename
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"nodename"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [nodename]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{nodename},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{exp});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{nodename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{nodename});
        %item = (__RULE__ => q{nodename});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{nodename},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{nodename},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{nodename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{nodename},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{nodename},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{nodename},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{nodename},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{nodename},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::nodetype
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"nodetype"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [nodetype]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{nodetype},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{nodetype},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{nodetype});
        %item = (__RULE__ => q{nodetype});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{nodetype},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{nodetype},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{nodetype},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{nodetype},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{nodetype},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{nodetype},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::option
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"option"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [option]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{option},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/:[[:alnum:]]|--[-_[:alnum:]]+/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/:[[:alnum:]]|--[-_[:alnum:]]+/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{option},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{option});
        %item = (__RULE__ => q{option});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/:[[:alnum:]]|--[-_[:alnum:]]+/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{option},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?::[[:alnum:]]|--[-_[:alnum:]]+)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/:[[:alnum:]]|--[-_[:alnum:]]+/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{option},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{option},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{option},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{option},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{option},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::param
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"param"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [param]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{param},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/[^=\\s]+/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/[^=\\s]+/ '=' exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{param});
        %item = (__RULE__ => q{param});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/[^=\\s]+/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:[^=\s]+)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['=']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{'='})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\=/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{param},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{param},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$item[1],$item[3]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/[^=\\s]+/ '=' exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{param},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{param},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{param},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{param},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::perl_block
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"perl_block"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [perl_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{perl_block},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{perl_block});
        %item = (__RULE__ => q{perl_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $main::myline = $thisline; };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{perl_block});
        %item = (__RULE__ => q{perl_block});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $main::myline = $thisline; };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<perl_codeblock>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{perl_block});
        %item = (__RULE__ => q{perl_block});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<perl_codeblock>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { Text::Balanced::extract_codeblock($text,undef,$skip,'{}');
                     };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { {
	  $return=$item[1];
	  {
  	    local $^W = 0; # don't warn about undefined contants
	    my $pos="# line $main::myline \"$XML::XSH2::Functions::SCRIPT\"\n";
	    $return=~s/^\{/\{\n$pos/;
          }
	  } };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<perl_codeblock>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{perl_block},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{perl_block},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{perl_block},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{perl_block},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::perl_expression
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"perl_expression"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [perl_expression]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{perl_expression},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{exp});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{perl_expression});
        %item = (__RULE__ => q{perl_expression});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $main::myline = $thisline; };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [exp]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{perl_expression});
        %item = (__RULE__ => q{perl_expression});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{perl_expression},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{perl_expression},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { {local $^W=0; "\n# line $main::myline \"$XML::XSH2::Functions::SCRIPT\"\n".$item[1]} };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [exp]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{perl_expression},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{perl_expression},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{perl_expression},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{perl_expression},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shell
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"shell"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [shell]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{shell},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/!\\s*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/!\\s*/ <commit> /.*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{shell});
        %item = (__RULE__ => q{shell});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/!\\s*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:!\s*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/.*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/.*/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:.*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'sh_noev',$item[3]]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/!\\s*/ <commit> /.*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<error?:...> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        
        my $_savetext;
        @item = (q{shell});
        %item = (__RULE__ => q{shell});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<error?:...>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { if ($commit) { do {push @{$thisparser->{errors}}, [qq{Parse error near: "! }.substr($text,0,40).qq{ ..."},$thisline];} unless  $_noactions; undef } else {0} };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<error?:...> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{shell},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{shell},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{shell},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{shell},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"shline"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [shline]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{shline},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{shline_nosc});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [shline_nosc shline_bracket shline_nosc]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{shline});
        %item = (__RULE__ => q{shline});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shline_nosc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_nosc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shline_nosc]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shline_nosc]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_nosc}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [shline_bracket]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{shline_bracket})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_bracket, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [shline_bracket]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [shline_bracket]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_bracket(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shline_nosc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{shline_nosc})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_nosc($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shline_nosc]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shline_nosc]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_nosc}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join("",$item[1],@{$item[2]},$item[3]) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [shline_nosc shline_bracket shline_nosc]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{shline},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{shline},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{shline},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{shline},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_bracket
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"shline_bracket"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [shline_bracket]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{shline_bracket},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{'('});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['(' shline_inter shline_bracket shline_inter ')']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{shline_bracket});
        %item = (__RULE__ => q{shline_bracket});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['(']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\(/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shline_inter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline_bracket},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{shline_inter})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_inter($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shline_inter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline_bracket},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shline_inter]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_inter}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [shline_bracket]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline_bracket},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{shline_bracket})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_bracket, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [shline_bracket]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline_bracket},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [shline_bracket]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_bracket(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shline_inter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{shline_bracket},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{shline_inter})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_inter($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shline_inter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{shline_bracket},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shline_inter]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline_inter}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [')']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{')'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join("",'(',$item[2],@{$item[3]},$item[4],')') };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['(' shline_inter shline_bracket shline_inter ')']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{shline_bracket},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{shline_bracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{shline_bracket},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{shline_bracket},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_inter
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"shline_inter"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [shline_inter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{shline_inter},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/([^()\\\\"']|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/([^()\\\\"']|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shline_inter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{shline_inter});
        %item = (__RULE__ => q{shline_inter});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/([^()\\\\"']|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_inter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:([^()\\"']|\\.|\"([^\"\\]|\\.)*\"|\'([^\'\\]|\\\'|\\\\|\\[^\'\\])*\')*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/([^()\\\\"']|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_inter},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{shline_inter},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{shline_inter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{shline_inter},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{shline_inter},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline_nosc
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"shline_nosc"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [shline_nosc]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{shline_nosc},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/([^;()\\\\"'\\|]|\\|[^>]|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/([^;()\\\\"'\\|]|\\|[^>]|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{shline_nosc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{shline_nosc});
        %item = (__RULE__ => q{shline_nosc});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/([^;()\\\\"'\\|]|\\|[^>]|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_nosc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:([^;()\\"'\|]|\|[^>]|\\.|\"([^\"\\]|\\.)*\"|\'([^\'\\]|\\\'|\\\\|\\[^\'\\])*\')*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/([^;()\\\\"'\\|]|\\|[^>]|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\'([^\\'\\\\]|\\\\\\'|\\\\\\\\|\\\\[^\\'\\\\])*\\')*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{shline_nosc},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{shline_nosc},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{shline_nosc},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{shline_nosc},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{shline_nosc},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::startrule
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"startrule"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [startrule]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{startrule},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{shell, or complex_command});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [shell <commit> eof]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{startrule});
        %item = (__RULE__ => q{startrule});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shell]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{startrule},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shell($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shell]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{startrule},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shell]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shell}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [eof]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{startrule},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{eof})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::eof($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [eof]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{startrule},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [eof]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{eof}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [shell <commit> eof]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [complex_command <commit> eof]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{startrule});
        %item = (__RULE__ => q{startrule});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [complex_command]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{startrule},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::complex_command, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [complex_command]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{startrule},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [complex_command]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{complex_command(s)}} = $_tok;
        push @item, $_tok;
        


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [eof]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{startrule},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{eof})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::eof($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [eof]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{startrule},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [eof]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{eof}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [complex_command <commit> eof]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{startrule},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{startrule},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{startrule},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{startrule},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::statement
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"statement"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [statement]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\s*[\}\{;])/, or /(if)\\b/, or /(unless)\\b/, or /(while)\\b/, or /(foreach|for)\\b/, or /(try)\\b/, or /(iterate)\\b/, or /(def|define)\\b/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\s*[\}\{;])/ <commit> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\s*[\}\{;])/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\s*[}{;]))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\s*[\}\{;])/ <commit> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(if)\\b/ <commit> exp block elsif_block else_block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(if)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(if)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [elsif_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{elsif_block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::elsif_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [elsif_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [elsif_block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{elsif_block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [else_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{else_block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::else_block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [else_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [else_block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{else_block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'if_statement',[$item[3],$item[4]],@{$item[5]},@{$item[6]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(if)\\b/ <commit> exp block elsif_block else_block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(unless)\\b/ <commit> exp block else_block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(unless)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(unless)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [else_block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{else_block})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::else_block, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [else_block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [else_block]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{else_block(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'unless_statement',$item[3],$item[4],@{$item[5]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(unless)\\b/ <commit> exp block else_block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(while)\\b/ <commit> exp block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[3];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(while)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(while)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'while_statement',$item[3],$item[4]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(while)\\b/ <commit> exp block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(foreach|for)\\b/ <commit> local_var_in exp block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[4];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(foreach|for)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(foreach|for)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [local_var_in]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{local_var_in})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var_in, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [local_var_in]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [local_var_in]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{local_var_in(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [exp]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{exp})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::exp($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [exp]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [exp]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{exp}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'foreach_statement',@item[4,5],@{$item[3]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(foreach|for)\\b/ <commit> local_var_in exp block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(try)\\b/ <commit> block 'catch' local_var block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[5];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(try)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(try)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['catch']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{'catch'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\Acatch/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [local_var]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{local_var})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::local_var, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [local_var]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [local_var]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{local_var(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'try_catch',$item[3],$item[6],@{$item[5]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(try)\\b/ <commit> block 'catch' local_var block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(iterate)\\b/ <commit> xpstep block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[6];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(iterate)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(iterate)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpstep]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpstep})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpstep($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpstep]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpstep]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpstep}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'iterate',$item[4],@{$item[3]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(iterate)\\b/ <commit> xpstep block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(def|define)\\b/ <commit> ID variable block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[7];
        $text = $_[1];
        my $_savetext;
        @item = (q{statement});
        %item = (__RULE__ => q{statement});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(def|define)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(def|define)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [ID]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{ID})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::ID($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [ID]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [ID]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{ID}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { XML::XSH2::Functions::is_command($item[3])?undef:1 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{variable})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable, 0, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [variable]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable(s?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{statement},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{statement},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'def',$item[3],$item[6],$item[5]]
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION2__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(def|define)\\b/ <commit> ID variable block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{statement},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{statement},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{statement},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{statement},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::stream_select
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"stream_select"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [stream_select]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{stream_select},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/select\\s/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/select\\s/ xpath block]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{stream_select});
        %item = (__RULE__ => q{stream_select});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/select\\s/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:select\s)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpath]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{stream_select},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpath})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpath($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpath]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{stream_select},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpath]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpath}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [block]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{stream_select},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{block})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::block($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [block]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{stream_select},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [block]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{block}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [$item[2],$item[3]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/select\\s/ xpath block]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{stream_select},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{stream_select},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{stream_select},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{stream_select},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::trail
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"trail"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [trail]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{trail},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\s*[\};]|\\s*\\Z)/, or '|>', or '|'});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\s*[\};]|\\s*\\Z)/ <commit> <reject>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{trail});
        %item = (__RULE__ => q{trail});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\s*[\};]|\\s*\\Z)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\s*[};]|\s*\Z))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Rejecting production<< (found <reject>)},
                     XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $return;
        

        $_tok = undef;
        
        last unless defined $_tok;

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\s*[\};]|\\s*\\Z)/ <commit> <reject>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['|>' <commit> variable]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{trail});
        %item = (__RULE__ => q{trail});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['|>']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\|\>/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{trail},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{variable})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [variable]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{trail},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [variable]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{variable}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { ['var',$item[3]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['|>' <commit> variable]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['|' <commit> shline]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        $text = $_[1];
        my $_savetext;
        @item = (q{trail});
        %item = (__RULE__ => q{trail});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['|']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\|/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [shline]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{trail},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{shline})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::shline($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [shline]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{trail},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [shline]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{shline}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { ['pipe',$item[3]] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['|' <commit> shline]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{trail},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{trail},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{trail},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{trail},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::undef
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"undef"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [undef]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{undef},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(undef|undefine)\\b/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(undef|undefine)\\b/ <commit> /\\$?[a-zA-Z_][a-zA-Z0-9_]*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{undef});
        %item = (__RULE__ => q{undef});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(undef|undefine)\\b/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(undef|undefine)\b)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\$?[a-zA-Z_][a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{/\\$?[a-zA-Z_][a-zA-Z0-9_]*/})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\$?[a-zA-Z_][a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,'undefine',$item[3]];
	 };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(undef|undefine)\\b/ <commit> /\\$?[a-zA-Z_][a-zA-Z0-9_]*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{undef},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{undef},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{undef},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{undef},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::variable
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"variable"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [variable]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{variable},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/\\$[a-zA-Z_][a-zA-Z0-9_]*/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/\\$[a-zA-Z_][a-zA-Z0-9_]*/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{variable},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{variable});
        %item = (__RULE__ => q{variable});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/\\$[a-zA-Z_][a-zA-Z0-9_]*/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{variable},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:\$[a-zA-Z_][a-zA-Z0-9_]*)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/\\$[a-zA-Z_][a-zA-Z0-9_]*/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{variable},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{variable},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{variable},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{variable},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{variable},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpath
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpath"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpath]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpath},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=['"])/, or xpsimple});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=['"])/ <commit> xpstring]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpath});
        %item = (__RULE__ => q{xpath});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=['"])/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=['"]))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<commit>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { $commit = 1 };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpstring]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpath},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpstring})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpstring($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpstring]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpath},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpstring]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpstring}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[3] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=['"])/ <commit> xpstring]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpsimple <skip:""> xpcont]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpath});
        %item = (__RULE__ => q{xpath});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpsimple]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpath},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpsimple($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpsimple]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpath},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpsimple]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpsimple}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpcont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpath},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpcont})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpcont, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpcont]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpath},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpcont]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpcont(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1].join("",@{$item[3]}) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpsimple <skip:""> xpcont]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [<error...>]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[2];
        
        my $_savetext;
        @item = (q{xpath});
        %item = (__RULE__ => q{xpath});
        my $repcount = 0;


        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<error...>]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { if (1) { do {push @{$thisparser->{errors}}, [qq{expected XPath, but got "}.substr($text,0,40).qq{ ..."},$thisline];} unless  $_noactions; undef } else {0} };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [<error...>]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpath},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpath},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpath},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpath},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpaxis
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpaxis"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpaxis]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpaxis},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/[-a-z]+::/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/[-a-z]+::/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpaxis},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpaxis});
        %item = (__RULE__ => q{xpaxis});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/[-a-z]+::/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpaxis},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:[-a-z]+::)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/[-a-z]+::/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpaxis},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpaxis},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpaxis},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpaxis},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpaxis},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbracket
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpbracket"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpbracket]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpbracket},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{'('});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['(' <skip:""> xpinter ')']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpbracket});
        %item = (__RULE__ => q{xpbracket});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['(']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\(/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpinter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpbracket},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpinter})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpinter($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpinter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpbracket},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpinter]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpinter}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [')']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{')'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "($item[3])" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['(' <skip:""> xpinter ')']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpbracket},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpbracket},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpbracket},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpbracket},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbrackets
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpbrackets"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpbrackets]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpbrackets},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\()/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\()/ xpbracket <skip:""> xpfilters]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpbrackets});
        %item = (__RULE__ => q{xpbrackets});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\()/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\())/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpbracket]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpbrackets},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpbracket})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbracket($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpbracket]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpbrackets},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpbracket]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpbracket}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpfilters]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpbrackets},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpfilters})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilters, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpfilters]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpbrackets},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpfilters]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpfilters(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join "",$item[2],@{$item[4]} };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\()/ xpbracket <skip:""> xpfilters]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpbrackets},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpbrackets},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpbrackets},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpbrackets},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpcont
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpcont"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpcont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xpfilters, or xpbrackets, or xpath});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpfilters, or xpbrackets <skip:""> xpath]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpcont});
        %item = (__RULE__ => q{xpcont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_xpcont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_xpcont($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [_alternation_1_of_production_1_of_rule_xpcont]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpcont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_xpcont]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_1_of_rule_xpcont}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpath]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpath})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpath, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpath]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpcont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpath]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpath(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1].join("",@{$item[3]}) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpfilters, or xpbrackets <skip:""> xpath]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpath]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpcont});
        %item = (__RULE__ => q{xpcont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpath]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpcont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpath($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpath]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpcont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpath]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpath}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { $item[1] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpath]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpcont},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpcont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpcont},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpcont},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilter
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpfilter"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpfilter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpfilter},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{'['});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: ['[' xpinter ']']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpfilter});
        %item = (__RULE__ => q{xpfilter});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: ['[']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\[/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpinter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpfilter},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpinter})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpinter($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpinter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpfilter},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpinter]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpinter}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [']']},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{']'})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A\]/)
        {
            $text = $lastsep . $text if defined $lastsep;
            
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(qq{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        push @item, $item{__STRING2__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { "[$item[2]]" };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: ['[' xpinter ']']<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpfilter},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpfilter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpfilter},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpfilter},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilters
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpfilters"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpfilters]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpfilters},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?=\\[)/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?=\\[)/ xpfilter]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpfilters});
        %item = (__RULE__ => q{xpfilters});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?=\\[)/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?=\[))/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpfilter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpfilters},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpfilter})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilter, 1, 100000000, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpfilter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpfilters},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpfilter]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpfilter(s)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join("",@{$item[2]}) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?=\\[)/ xpfilter]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpfilters},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpfilters},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpfilters},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpfilters},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpinter
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpinter"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpinter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpinter},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xps});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xps <skip:""> xpintercont]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpinter});
        %item = (__RULE__ => q{xpinter});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xps]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpinter},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xps($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xps]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpinter},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xps]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xps}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpintercont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpinter},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpintercont})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpintercont, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpintercont]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpinter},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpintercont]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpintercont(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join("",$item[1],@{$item[3]}) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xps <skip:""> xpintercont]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpinter},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpinter},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpinter},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpinter},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpintercont
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpintercont"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpintercont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xpfilters, or xpbrackets});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpfilters, or xpbrackets <skip:""> xpinter]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpintercont});
        %item = (__RULE__ => q{xpintercont});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [_alternation_1_of_production_1_of_rule_xpintercont]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::_alternation_1_of_production_1_of_rule_xpintercont($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [_alternation_1_of_production_1_of_rule_xpintercont]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpintercont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [_alternation_1_of_production_1_of_rule_xpintercont]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{_alternation_1_of_production_1_of_rule_xpintercont}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpinter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpintercont},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpinter})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpinter, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpinter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpintercont},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpinter]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpinter(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { join("",$item[1],@{$item[3]}) };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpfilters, or xpbrackets <skip:""> xpinter]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpintercont},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpintercont},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpintercont},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpintercont},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xplocationstep
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xplocationstep"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xplocationstep]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xplocationstep},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xpaxis});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpaxis xpnodetest]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xplocationstep});
        %item = (__RULE__ => q{xplocationstep});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpaxis]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xplocationstep},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpaxis, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpaxis]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xplocationstep},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpaxis]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpaxis(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpnodetest]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xplocationstep},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{xpnodetest})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpnodetest($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpnodetest]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xplocationstep},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpnodetest]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpnodetest}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ (@{$item[1]} ? $item[1][0] : 'child::'),$item[3] ] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpaxis xpnodetest]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xplocationstep},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xplocationstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xplocationstep},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xplocationstep},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpnodetest
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpnodetest"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpnodetest]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpnodetest},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/node\\(\\)|text\\(\\)|comment\\(\\)|processing-instruction\\(\\s*(?:"[^"]*"\\s*|'[^'*]'\\s*)?\\)|[^\\(\\[\\/\\"\\'\\&\\;\\s]+/});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/node\\(\\)|text\\(\\)|comment\\(\\)|processing-instruction\\(\\s*(?:"[^"]*"\\s*|'[^'*]'\\s*)?\\)|[^\\(\\[\\/\\"\\'\\&\\;\\s]+/]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpnodetest},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpnodetest});
        %item = (__RULE__ => q{xpnodetest});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/node\\(\\)|text\\(\\)|comment\\(\\)|processing-instruction\\(\\s*(?:"[^"]*"\\s*|'[^'*]'\\s*)?\\)|[^\\(\\[\\/\\"\\'\\&\\;\\s]+/]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpnodetest},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:node\(\)|text\(\)|comment\(\)|processing-instruction\(\s*(?:"[^"]*"\s*|'[^'*]'\s*)?\)|[^\(\[\/\"\'\&\;\s]+)/)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/node\\(\\)|text\\(\\)|comment\\(\\)|processing-instruction\\(\\s*(?:"[^"]*"\\s*|'[^'*]'\\s*)?\\)|[^\\(\\[\\/\\"\\'\\&\\;\\s]+/]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpnodetest},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpnodetest},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpnodetest},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpnodetest},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpnodetest},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xps
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xps"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xps]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xps},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?: [^\\$\\[\\]()'"\};]+ |
              \\$(?!\\\{) |
              \\$\\\{ (?:\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\\{.*?\\\} |
                       \\(.+?\\)
                   )
               \\\} |
              '(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} | 
                  \\$(?!\\\{) | [^\\$'] | \\\\\\$
               )*' |
              "(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} |
                  \\$(?!\\\{) | [^\\$"] | \\\\\\$
               )*"
          )*/x});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?: [^\\$\\[\\]()'"\};]+ |
              \\$(?!\\\{) |
              \\$\\\{ (?:\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\\{.*?\\\} |
                       \\(.+?\\)
                   )
               \\\} |
              '(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} | 
                  \\$(?!\\\{) | [^\\$'] | \\\\\\$
               )*' |
              "(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} |
                  \\$(?!\\\{) | [^\\$"] | \\\\\\$
               )*"
          )*/x]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xps},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xps});
        %item = (__RULE__ => q{xps});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?: [^\\$\\[\\]()'"\};]+ |
              \\$(?!\\\{) |
              \\$\\\{ (?:\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\\{.*?\\\} |
                       \\(.+?\\)
                   )
               \\\} |
              '(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} | 
                  \\$(?!\\\{) | [^\\$'] | \\\\\\$
               )*' |
              "(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} |
                  \\$(?!\\\{) | [^\\$"] | \\\\\\$
               )*"
          )*/x]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xps},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?: [^\$\[\]()'"};]+ |
              \$(?!\{) |
              \$\{ (?:\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \{.*?\} |
                       \(.+?\)
                   )
               \} |
              '(?:\$\{ (?: \$?[a-zA-Z_][a-zA-Z0-9_]* | \{.*?\} | \(.+?\)) \} | 
                  \$(?!\{) | [^\$'] | \\\$
               )*' |
              "(?:\$\{ (?: \$?[a-zA-Z_][a-zA-Z0-9_]* | \{.*?\} | \(.+?\)) \} |
                  \$(?!\{) | [^\$"] | \\\$
               )*"
          )*)/x)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?: [^\\$\\[\\]()'"\};]+ |
              \\$(?!\\\{) |
              \\$\\\{ (?:\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\\{.*?\\\} |
                       \\(.+?\\)
                   )
               \\\} |
              '(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} | 
                  \\$(?!\\\{) | [^\\$'] | \\\\\\$
               )*' |
              "(?:\\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\)) \\\} |
                  \\$(?!\\\{) | [^\\$"] | \\\\\\$
               )*"
          )*/x]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xps},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xps},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xps},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xps},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xps},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpsimple
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpsimple"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpsimple]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpsimple},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/(?: 
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^-:\\$\\[\\]\{\}|"'\\ \\s();] |
              -[^-\\[\\]\{\}|"'\\ \\s();]
          )
          (?:
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^\\[\\]\\$\{\}|"'\\ \\s();]
          )*/x, or xpbrackets});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/(?: 
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^-:\\$\\[\\]\{\}|"'\\ \\s();] |
              -[^-\\[\\]\{\}|"'\\ \\s();]
          )
          (?:
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^\\[\\]\\$\{\}|"'\\ \\s();]
          )*/x]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpsimple});
        %item = (__RULE__ => q{xpsimple});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/(?: 
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^-:\\$\\[\\]\{\}|"'\\ \\s();] |
              -[^-\\[\\]\{\}|"'\\ \\s();]
          )
          (?:
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^\\[\\]\\$\{\}|"'\\ \\s();]
          )*/x]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:(?: 
              \$\{ (?: \$?[a-zA-Z_][a-zA-Z0-9_]* | \{.*?\} | \(.+?\) ) \} |
              \$(?!\{) |
              [^-:\$\[\]{}|"'\ \s();] |
              -[^-\[\]{}|"'\ \s();]
          )
          (?:
              \$\{ (?: \$?[a-zA-Z_][a-zA-Z0-9_]* | \{.*?\} | \(.+?\) ) \} |
              \$(?!\{) |
              [^\[\]\${}|"'\ \s();]
          )*)/x)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/(?: 
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^-:\\$\\[\\]\{\}|"'\\ \\s();] |
              -[^-\\[\\]\{\}|"'\\ \\s();]
          )
          (?:
              \\$\\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\{.*?\\\} | \\(.+?\\) ) \\\} |
              \\$(?!\\\{) |
              [^\\[\\]\\$\{\}|"'\\ \\s();]
          )*/x]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xpbrackets]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[1];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpsimple});
        %item = (__RULE__ => q{xpsimple});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xpbrackets]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpsimple},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpbrackets($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xpbrackets]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpsimple},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xpbrackets]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpbrackets}} = $_tok;
        push @item, $_tok;
        
        }

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xpbrackets]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpsimple},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpsimple},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpsimple},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpsimple},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpstep
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpstep"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpstep]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpstep},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{xplocationstep});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        local $skip = defined($skip) ? $skip : $XML::XSH2::Parser::_Runtime::skip;
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [xplocationstep <skip:""> xpfilter]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpstep});
        %item = (__RULE__ => q{xpstep});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying subrule: [xplocationstep]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpstep},
                  $tracelevel)
                    if defined $::RD_TRACE;
        if (1) { no strict qw{refs};
        $expectation->is(q{})->at($text);
        unless (defined ($_tok = XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xplocationstep($thisparser,$text,$repeating,$_noactions,sub { \@arg },undef)))
        {
            
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match subrule: [xplocationstep]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpstep},
                          $tracelevel)
                            if defined $::RD_TRACE;
            $expectation->failed();
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched subrule: [xplocationstep]<< (return value: [}
                    . $_tok . q{]},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xplocationstep}} = $_tok;
        push @item, $_tok;
        
        }

        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying directive: [<skip:"">]},
                    XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE; 
        $_tok = do { my $oldskip = $skip; $skip=""; $oldskip };
        if (defined($_tok))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{>>Matched directive<< (return value: [}
                        . $_tok . q{])},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        else
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match directive>>},
                        XML::XSH2::Parser::_Runtime::_tracefirst($text))
                            if defined $::RD_TRACE;
        }
        
        last unless defined $_tok;
        push @item, $item{__DIRECTIVE1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{Trying repeated subrule: [xpfilter]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($text),
                  q{xpstep},
                  $tracelevel)
                    if defined $::RD_TRACE;
        $expectation->is(q{xpfilter})->at($text);
        
        unless (defined ($_tok = $thisparser->_parserepeat($text, \&XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpfilter, 0, 1, $_noactions,$expectation,sub { \@arg },undef)))
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match repeated subrule: [xpfilter]>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text),
                          q{xpstep},
                          $tracelevel)
                            if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched repeated subrule: [xpfilter]<< (}
                    . @$_tok . q{ times)},

                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $item{q{xpfilter(?)}} = $_tok;
        push @item, $_tok;
        


        XML::XSH2::Parser::_Runtime::_trace(q{Trying action},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        

        $_tok = ($_noactions) ? 0 : do { [ @{$item[1]}, @{$item[3]}] };
        unless (defined $_tok)
        {
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match action>> (return value: [undef])})
                    if defined $::RD_TRACE;
            last;
        }
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched action<< (return value: [}
                      . $_tok . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text))
                        if defined $::RD_TRACE;
        push @item, $_tok;
        $item{__ACTION1__}=$_tok;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [xplocationstep <skip:""> xpfilter]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpstep},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpstep},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpstep},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpstep},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}

# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args, $_itempos)
sub XML::XSH2::Parser::_Runtime::XML::XSH2::Parser::xpstring
{
	my $thisparser = $_[0];
	use vars q{$tracelevel};
	local $tracelevel = ($tracelevel||0)+1;
	$ERRORS = 0;
    my $thisrule = $thisparser->{"rules"}{"xpstring"};

    XML::XSH2::Parser::_Runtime::_trace(q{Trying rule: [xpstring]},
                  XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                  q{xpstring},
                  $tracelevel)
                    if defined $::RD_TRACE;

    
    my $err_at = @{$thisparser->{errors}};

    my $score;
    my $score_return;
    my $_tok;
    my $return = undef;
    my $_matched=0;
    my $commit=0;
    my @item = ();
    my %item = ();
    my $repeating =  $_[2];
    my $_noactions = $_[3];
    my @arg =    defined $_[4] ? @{ &{$_[4]} } : ();
    my $_itempos = $_[5];
    my %arg =    ($#arg & 01) ? @arg : (@arg, undef);
    my $text;
    my $lastsep;
    my $current_match;
    my $expectation = new XML::XSH2::Parser::_Runtime::Expectation(q{/'(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$']|\\\\\\$)*' |
              "(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$"]|\\\\\\$)*"/x});
    $expectation->at($_[1]);
    
    my $thisoffset;
    tie $thisoffset, q{XML::XSH2::Parser::_Runtime::OffsetCounter}, \$text, $thisparser;
    
    my $thiscolumn;
    tie $thiscolumn, q{XML::XSH2::Parser::_Runtime::ColCounter}, \$text, $thisparser;
    
    my $thisline;
    tie $thisline, q{XML::XSH2::Parser::_Runtime::LineCounter}, \$text, $thisparser;

    

    while (!$_matched && !$commit)
    {
        
        XML::XSH2::Parser::_Runtime::_trace(q{Trying production: [/'(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$']|\\\\\\$)*' |
              "(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$"]|\\\\\\$)*"/x]},
                      XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                      q{xpstring},
                      $tracelevel)
                        if defined $::RD_TRACE;
        my $thisprod = $thisrule->{"prods"}[0];
        $text = $_[1];
        my $_savetext;
        @item = (q{xpstring});
        %item = (__RULE__ => q{xpstring});
        my $repcount = 0;


        XML::XSH2::Parser::_Runtime::_trace(q{Trying terminal: [/'(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$']|\\\\\\$)*' |
              "(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$"]|\\\\\\$)*"/x]}, XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstring},
                      $tracelevel)
                        if defined $::RD_TRACE;
        undef $lastsep;
        $expectation->is(q{})->at($text);
        

        unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and   $text =~ m/\A(?:'(?:\$\{(?:\$?[a-zA-Z_][a-zA-Z0-9_]*|\{.*?\}|\(.+?\))\}|\$(?!\{)|[^\$']|\\\$)*' |
              "(?:\$\{(?:\$?[a-zA-Z_][a-zA-Z0-9_]*|\{.*?\}|\(.+?\))\}|\$(?!\{)|[^\$"]|\\\$)*")/x)
        {
            $text = $lastsep . $text if defined $lastsep;
            $expectation->failed();
            XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match terminal>>},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;

            last;
        }
        $current_match = substr($text, $-[0], $+[0] - $-[0]);
        substr($text,0,length($current_match),q{});
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched terminal<< (return value: [}
                        . $current_match . q{])},
                          XML::XSH2::Parser::_Runtime::_tracefirst($text))
                    if defined $::RD_TRACE;
        push @item, $item{__PATTERN1__}=$current_match;
        

        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched production: [/'(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$']|\\\\\\$)*' |
              "(?:\\$\\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\{.*?\\\}|\\(.+?\\))\\\}|\\$(?!\\\{)|[^\\$"]|\\\\\\$)*"/x]<<},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      q{xpstring},
                      $tracelevel)
                        if defined $::RD_TRACE;



        $_matched = 1;
        last;
    }


    unless ( $_matched || defined($score) )
    {
        

        $_[1] = $text;  # NOT SURE THIS IS NEEDED
        XML::XSH2::Parser::_Runtime::_trace(q{<<Didn't match rule>>},
                     XML::XSH2::Parser::_Runtime::_tracefirst($_[1]),
                     q{xpstring},
                     $tracelevel)
                    if defined $::RD_TRACE;
        return undef;
    }
    if (!defined($return) && defined($score))
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Accepted scored production<<}, "",
                      q{xpstring},
                      $tracelevel)
                        if defined $::RD_TRACE;
        $return = $score_return;
    }
    splice @{$thisparser->{errors}}, $err_at;
    $return = $item[$#item] unless defined $return;
    if (defined $::RD_TRACE)
    {
        XML::XSH2::Parser::_Runtime::_trace(q{>>Matched rule<< (return value: [} .
                      $return . q{])}, "",
                      q{xpstring},
                      $tracelevel);
        XML::XSH2::Parser::_Runtime::_trace(q{(consumed: [} .
                      XML::XSH2::Parser::_Runtime::_tracemax(substr($_[1],0,-length($text))) . q{])},
                      XML::XSH2::Parser::_Runtime::_tracefirst($text),
                      , q{xpstring},
                      $tracelevel)
    }
    $_[1] = $text;
    return $return;
}
}
package XML::XSH2::Parser; sub new { my $self = bless( {
                 '_AUTOACTION' => undef,
                 '_AUTOTREE' => undef,
                 '_check' => {
                               'itempos' => '',
                               'prevcolumn' => '',
                               'prevline' => '',
                               'prevoffset' => '',
                               'thiscolumn' => 1,
                               'thisoffset' => 1
                             },
                 'localvars' => '',
                 'namespace' => 'XML::XSH2::Parser::_Runtime::XML::XSH2::Parser',
                 'rules' => {
                              'ID' => bless( {
                                               'calls' => [],
                                               'changed' => 0,
                                               'impcount' => 0,
                                               'line' => 170,
                                               'name' => 'ID',
                                               'opcount' => 0,
                                               'prods' => [
                                                            bless( {
                                                                     'actcount' => 0,
                                                                     'dircount' => 0,
                                                                     'error' => undef,
                                                                     'items' => [
                                                                                  bless( {
                                                                                           'description' => '/[a-zA-Z_][a-zA-Z0-9_]*/',
                                                                                           'hashname' => '__PATTERN1__',
                                                                                           'ldelim' => '/',
                                                                                           'line' => 171,
                                                                                           'lookahead' => 0,
                                                                                           'mod' => '',
                                                                                           'pattern' => '[a-zA-Z_][a-zA-Z0-9_]*',
                                                                                           'rdelim' => '/'
                                                                                         }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                ],
                                                                     'line' => undef,
                                                                     'number' => 0,
                                                                     'patcount' => 1,
                                                                     'strcount' => 0,
                                                                     'uncommit' => undef
                                                                   }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                          ],
                                               'vars' => ''
                                             }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_10_of_rule_command' => bless( {
                                                                                            'calls' => [
                                                                                                         '_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command'
                                                                                                       ],
                                                                                            'changed' => 0,
                                                                                            'impcount' => 1,
                                                                                            'line' => 439,
                                                                                            'name' => '_alternation_1_of_production_10_of_rule_command',
                                                                                            'opcount' => 0,
                                                                                            'prods' => [
                                                                                                         bless( {
                                                                                                                  'actcount' => 1,
                                                                                                                  'dircount' => 0,
                                                                                                                  'error' => undef,
                                                                                                                  'items' => [
                                                                                                                               bless( {
                                                                                                                                        'argcode' => undef,
                                                                                                                                        'expected' => '/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/',
                                                                                                                                        'line' => 447,
                                                                                                                                        'lookahead' => 0,
                                                                                                                                        'matchrule' => 0,
                                                                                                                                        'max' => 100000000,
                                                                                                                                        'min' => 0,
                                                                                                                                        'repspec' => 's?',
                                                                                                                                        'subrule' => '_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command'
                                                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                                                               bless( {
                                                                                                                                        'code' => '{ [ map { @$_ } @{$item[1]} ] }',
                                                                                                                                        'hashname' => '__ACTION1__',
                                                                                                                                        'line' => 447,
                                                                                                                                        'lookahead' => 0
                                                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                             ],
                                                                                                                  'line' => undef,
                                                                                                                  'number' => 0,
                                                                                                                  'patcount' => 0,
                                                                                                                  'strcount' => 0,
                                                                                                                  'uncommit' => undef
                                                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                       ],
                                                                                            'vars' => ''
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command' => bless( {
                                                                                                                                   'calls' => [
                                                                                                                                                'filename',
                                                                                                                                                'exp',
                                                                                                                                                'enc_string'
                                                                                                                                              ],
                                                                                                                                   'changed' => 0,
                                                                                                                                   'impcount' => 0,
                                                                                                                                   'line' => 440,
                                                                                                                                   'name' => '_alternation_1_of_production_1_of_rule__alternation_1_of_production_10_of_rule_command',
                                                                                                                                   'opcount' => 0,
                                                                                                                                   'prods' => [
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--input-file|:f/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 440,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--input-file|:f',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 440,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'filename'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'string/input-file\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 440,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => undef,
                                                                                                                                                         'number' => 0,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--input-pipe|:p/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 441,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--input-pipe|:p',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 441,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'filename'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'string/input-pipe\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 441,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 441,
                                                                                                                                                         'number' => 1,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--input-string|:s/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 442,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--input-string|:s',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 442,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'exp'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'exp/input-string\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 442,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 442,
                                                                                                                                                         'number' => 2,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--output-file|:F/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 443,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--output-file|:F',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 443,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'filename'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'string/output-file\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 443,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 443,
                                                                                                                                                         'number' => 3,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--output-encoding|:E/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 444,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--output-encoding|:E',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 444,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'enc_string'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'string/output-encoding\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 444,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 444,
                                                                                                                                                         'number' => 4,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--output-pipe|:P/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 445,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--output-pipe|:P',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 445,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'filename'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'string/output-pipe\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 445,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 445,
                                                                                                                                                         'number' => 5,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--output-string|:S/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 446,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--output-string|:S',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'argcode' => undef,
                                                                                                                                                                               'implicit' => undef,
                                                                                                                                                                               'line' => 446,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'matchrule' => 0,
                                                                                                                                                                               'subrule' => 'exp'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'varname/output-string\' => $item[2] ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 446,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 446,
                                                                                                                                                         'number' => 6,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                                                                bless( {
                                                                                                                                                         'actcount' => 1,
                                                                                                                                                         'dircount' => 0,
                                                                                                                                                         'error' => undef,
                                                                                                                                                         'items' => [
                                                                                                                                                                      bless( {
                                                                                                                                                                               'description' => '/--no-output|:N/',
                                                                                                                                                                               'hashname' => '__PATTERN1__',
                                                                                                                                                                               'ldelim' => '/',
                                                                                                                                                                               'line' => 447,
                                                                                                                                                                               'lookahead' => 0,
                                                                                                                                                                               'mod' => '',
                                                                                                                                                                               'pattern' => '--no-output|:N',
                                                                                                                                                                               'rdelim' => '/'
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                                                                      bless( {
                                                                                                                                                                               'code' => '{ [ \'/no-output\' => 1 ] }',
                                                                                                                                                                               'hashname' => '__ACTION1__',
                                                                                                                                                                               'line' => 447,
                                                                                                                                                                               'lookahead' => 0
                                                                                                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                                                                    ],
                                                                                                                                                         'line' => 447,
                                                                                                                                                         'number' => 7,
                                                                                                                                                         'patcount' => 1,
                                                                                                                                                         'strcount' => 0,
                                                                                                                                                         'uncommit' => undef
                                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                                                              ],
                                                                                                                                   'vars' => ''
                                                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_1_of_rule_local_var' => bless( {
                                                                                             'calls' => [],
                                                                                             'changed' => 0,
                                                                                             'impcount' => 0,
                                                                                             'line' => 447,
                                                                                             'name' => '_alternation_1_of_production_1_of_rule_local_var',
                                                                                             'opcount' => 0,
                                                                                             'prods' => [
                                                                                                          bless( {
                                                                                                                   'actcount' => 0,
                                                                                                                   'dircount' => 0,
                                                                                                                   'error' => undef,
                                                                                                                   'items' => [
                                                                                                                                bless( {
                                                                                                                                         'description' => '/(local|my)\\\\s/',
                                                                                                                                         'hashname' => '__PATTERN1__',
                                                                                                                                         'ldelim' => '/',
                                                                                                                                         'line' => 447,
                                                                                                                                         'lookahead' => 0,
                                                                                                                                         'mod' => '',
                                                                                                                                         'pattern' => '(local|my)\\s',
                                                                                                                                         'rdelim' => '/'
                                                                                                                                       }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                                                              ],
                                                                                                                   'line' => undef,
                                                                                                                   'number' => 0,
                                                                                                                   'patcount' => 1,
                                                                                                                   'strcount' => 0,
                                                                                                                   'uncommit' => undef
                                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                        ],
                                                                                             'vars' => ''
                                                                                           }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_1_of_rule_xpcont' => bless( {
                                                                                          'calls' => [
                                                                                                       'xpfilters',
                                                                                                       'xpbrackets'
                                                                                                     ],
                                                                                          'changed' => 0,
                                                                                          'impcount' => 0,
                                                                                          'line' => 446,
                                                                                          'name' => '_alternation_1_of_production_1_of_rule_xpcont',
                                                                                          'opcount' => 0,
                                                                                          'prods' => [
                                                                                                       bless( {
                                                                                                                'actcount' => 0,
                                                                                                                'dircount' => 0,
                                                                                                                'error' => undef,
                                                                                                                'items' => [
                                                                                                                             bless( {
                                                                                                                                      'argcode' => undef,
                                                                                                                                      'implicit' => undef,
                                                                                                                                      'line' => 446,
                                                                                                                                      'lookahead' => 0,
                                                                                                                                      'matchrule' => 0,
                                                                                                                                      'subrule' => 'xpfilters'
                                                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                                                           ],
                                                                                                                'line' => undef,
                                                                                                                'number' => 0,
                                                                                                                'patcount' => 0,
                                                                                                                'strcount' => 0,
                                                                                                                'uncommit' => undef
                                                                                                              }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                       bless( {
                                                                                                                'actcount' => 0,
                                                                                                                'dircount' => 0,
                                                                                                                'error' => undef,
                                                                                                                'items' => [
                                                                                                                             bless( {
                                                                                                                                      'argcode' => undef,
                                                                                                                                      'implicit' => undef,
                                                                                                                                      'line' => 447,
                                                                                                                                      'lookahead' => 0,
                                                                                                                                      'matchrule' => 0,
                                                                                                                                      'subrule' => 'xpbrackets'
                                                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                                                           ],
                                                                                                                'line' => 447,
                                                                                                                'number' => 1,
                                                                                                                'patcount' => 0,
                                                                                                                'strcount' => 0,
                                                                                                                'uncommit' => undef
                                                                                                              }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                     ],
                                                                                          'vars' => ''
                                                                                        }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_1_of_rule_xpintercont' => bless( {
                                                                                               'calls' => [
                                                                                                            'xpfilters',
                                                                                                            'xpbrackets'
                                                                                                          ],
                                                                                               'changed' => 0,
                                                                                               'impcount' => 0,
                                                                                               'line' => 446,
                                                                                               'name' => '_alternation_1_of_production_1_of_rule_xpintercont',
                                                                                               'opcount' => 0,
                                                                                               'prods' => [
                                                                                                            bless( {
                                                                                                                     'actcount' => 0,
                                                                                                                     'dircount' => 0,
                                                                                                                     'error' => undef,
                                                                                                                     'items' => [
                                                                                                                                  bless( {
                                                                                                                                           'argcode' => undef,
                                                                                                                                           'implicit' => undef,
                                                                                                                                           'line' => 446,
                                                                                                                                           'lookahead' => 0,
                                                                                                                                           'matchrule' => 0,
                                                                                                                                           'subrule' => 'xpfilters'
                                                                                                                                         }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                                                                ],
                                                                                                                     'line' => undef,
                                                                                                                     'number' => 0,
                                                                                                                     'patcount' => 0,
                                                                                                                     'strcount' => 0,
                                                                                                                     'uncommit' => undef
                                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                            bless( {
                                                                                                                     'actcount' => 0,
                                                                                                                     'dircount' => 0,
                                                                                                                     'error' => undef,
                                                                                                                     'items' => [
                                                                                                                                  bless( {
                                                                                                                                           'argcode' => undef,
                                                                                                                                           'implicit' => undef,
                                                                                                                                           'line' => 447,
                                                                                                                                           'lookahead' => 0,
                                                                                                                                           'matchrule' => 0,
                                                                                                                                           'subrule' => 'xpbrackets'
                                                                                                                                         }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                                                                ],
                                                                                                                     'line' => 447,
                                                                                                                     'number' => 1,
                                                                                                                     'patcount' => 0,
                                                                                                                     'strcount' => 0,
                                                                                                                     'uncommit' => undef
                                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                          ],
                                                                                               'vars' => ''
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              '_alternation_1_of_production_2_of_rule_command' => bless( {
                                                                                           'calls' => [
                                                                                                        'loose_exp',
                                                                                                        'command'
                                                                                                      ],
                                                                                           'changed' => 0,
                                                                                           'impcount' => 0,
                                                                                           'line' => 442,
                                                                                           'name' => '_alternation_1_of_production_2_of_rule_command',
                                                                                           'opcount' => 0,
                                                                                           'prods' => [
                                                                                                        bless( {
                                                                                                                 'actcount' => 1,
                                                                                                                 'dircount' => 1,
                                                                                                                 'error' => undef,
                                                                                                                 'items' => [
                                                                                                                              bless( {
                                                                                                                                       'description' => '/(?:[\\\\-\\\\+\\\\*\\\\/%x.]|\\\\|\\\\||\\\\&\\\\&)?=/',
                                                                                                                                       'hashname' => '__PATTERN1__',
                                                                                                                                       'ldelim' => '/',
                                                                                                                                       'line' => 442,
                                                                                                                                       'lookahead' => 0,
                                                                                                                                       'mod' => '',
                                                                                                                                       'pattern' => '(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?=',
                                                                                                                                       'rdelim' => '/'
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                              bless( {
                                                                                                                                       'code' => '$commit = 1',
                                                                                                                                       'hashname' => '__DIRECTIVE1__',
                                                                                                                                       'line' => 442,
                                                                                                                                       'lookahead' => 0,
                                                                                                                                       'name' => '<commit>'
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                                                              bless( {
                                                                                                                                       'argcode' => undef,
                                                                                                                                       'implicit' => undef,
                                                                                                                                       'line' => 442,
                                                                                                                                       'lookahead' => 0,
                                                                                                                                       'matchrule' => 0,
                                                                                                                                       'subrule' => 'loose_exp'
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                              bless( {
                                                                                                                                       'code' => '{ [\'xpath_assign\',$item[3],$item[1]] }',
                                                                                                                                       'hashname' => '__ACTION1__',
                                                                                                                                       'line' => 443,
                                                                                                                                       'lookahead' => 0
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                            ],
                                                                                                                 'line' => undef,
                                                                                                                 'number' => 0,
                                                                                                                 'patcount' => 1,
                                                                                                                 'strcount' => 0,
                                                                                                                 'uncommit' => undef
                                                                                                               }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                                                        bless( {
                                                                                                                 'actcount' => 1,
                                                                                                                 'dircount' => 0,
                                                                                                                 'error' => undef,
                                                                                                                 'items' => [
                                                                                                                              bless( {
                                                                                                                                       'description' => '/\\\\s*(?:[\\\\-\\\\+\\\\*\\\\/%x.]|\\\\|\\\\||\\\\&\\\\&)?:=/',
                                                                                                                                       'hashname' => '__PATTERN1__',
                                                                                                                                       'ldelim' => '/',
                                                                                                                                       'line' => 445,
                                                                                                                                       'lookahead' => 0,
                                                                                                                                       'mod' => '',
                                                                                                                                       'pattern' => '\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:=',
                                                                                                                                       'rdelim' => '/'
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                                              bless( {
                                                                                                                                       'argcode' => undef,
                                                                                                                                       'implicit' => undef,
                                                                                                                                       'line' => 445,
                                                                                                                                       'lookahead' => 0,
                                                                                                                                       'matchrule' => 0,
                                                                                                                                       'subrule' => 'command'
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                                                              bless( {
                                                                                                                                       'code' => '{ [\'command_assign\',$item[2],$item[1]] }',
                                                                                                                                       'hashname' => '__ACTION1__',
                                                                                                                                       'line' => 446,
                                                                                                                                       'lookahead' => 0
                                                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                                                            ],
                                                                                                                 'line' => 445,
                                                                                                                 'number' => 1,
                                                                                                                 'patcount' => 1,
                                                                                                                 'strcount' => 0,
                                                                                                                 'uncommit' => undef
                                                                                                               }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                                                      ],
                                                                                           'vars' => ''
                                                                                         }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'block' => bless( {
                                                  'calls' => [
                                                               'complex_command'
                                                             ],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 131,
                                                  'name' => 'block',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '\'\\{\'',
                                                                                              'hashname' => '__STRING1__',
                                                                                              'line' => 132,
                                                                                              'lookahead' => 0,
                                                                                              'pattern' => '{'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 132,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'expected' => undef,
                                                                                              'line' => 132,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'max' => 100000000,
                                                                                              'min' => 1,
                                                                                              'repspec' => 's',
                                                                                              'subrule' => 'complex_command'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                     bless( {
                                                                                              'description' => '\'\\}\'',
                                                                                              'hashname' => '__STRING2__',
                                                                                              'line' => 132,
                                                                                              'lookahead' => 0,
                                                                                              'pattern' => '}'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                     bless( {
                                                                                              'code' => '{ [grep ref,@{$item[3]}] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 133,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 0,
                                                                        'strcount' => 2,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'command' => bless( {
                                                    'calls' => [
                                                                 'variable',
                                                                 '_alternation_1_of_production_2_of_rule_command',
                                                                 'block',
                                                                 'exp',
                                                                 'command',
                                                                 'local_var_in',
                                                                 '_alternation_1_of_production_10_of_rule_command',
                                                                 'stream_select',
                                                                 'exp_or_opt'
                                                               ],
                                                    'changed' => 0,
                                                    'impcount' => 0,
                                                    'line' => 1,
                                                    'name' => 'command',
                                                    'opcount' => 0,
                                                    'prods' => [
                                                                 bless( {
                                                                          'actcount' => 0,
                                                                          'dircount' => 2,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(?=\\\\s*[\\}\\{;]|\\\\s*\\\\Z)/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 4,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(?=\\s*[}{;]|\\s*\\Z)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 4,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'hashname' => '__DIRECTIVE2__',
                                                                                                'line' => 4,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<reject>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                     ],
                                                                          'line' => undef,
                                                                          'number' => 0,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/assign\\\\b|(?:local\\\\b|my\\\\b)?(?=\\\\s*\\\\$[a-zA-Z_][a-zA-Z0-9_]*\\\\s*\\\\s*(?:[\\\\-\\\\+\\\\*\\\\/%x.]|\\\\|\\\\||\\\\&\\\\&)?:?=)/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 5,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => 'assign\\b|(?:local\\b|my\\b)?(?=\\s*\\$[a-zA-Z_][a-zA-Z0-9_]*\\s*\\s*(?:[\\-\\+\\*\\/%x.]|\\|\\||\\&\\&)?:?=)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 5,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 5,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'variable'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => '/(?:[\\\\-\\\\+\\\\*\\\\/%x.]|\\\\|\\\\||\\\\&\\\\&)?=/, or /\\\\s*(?:[\\\\-\\\\+\\\\*\\\\/%x.]|\\\\|\\\\||\\\\&\\\\&)?:=/',
                                                                                                'line' => 12,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => '_alternation_1_of_production_2_of_rule_command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,@{$item[4]},$item[1],$item[3]] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 13,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 5,
                                                                          'number' => 1,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 0,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(my)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 15,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(my)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 15,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 100000000,
                                                                                                'min' => 1,
                                                                                                'repspec' => 's',
                                                                                                'subrule' => 'variable'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'store_lex_variables\',0,@{$item[2]}] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 16,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 15,
                                                                          'number' => 2,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 0,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(local)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 18,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(local)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 18,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 100000000,
                                                                                                'min' => 1,
                                                                                                'repspec' => 's',
                                                                                                'subrule' => 'variable'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'make_local\',@{$item[2]}] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 19,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 18,
                                                                          'number' => 3,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(do)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 21,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(do)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 21,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 21,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'block'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'run_commands\',$item[3],0] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 22,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 21,
                                                                          'number' => 4,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(if)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 24,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(if)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 24,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 24,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'exp'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 24,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'if_statement\',[$item[3],[$item[4]]]] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 25,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 24,
                                                                          'number' => 5,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(unless)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 27,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(unless)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 27,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 27,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'exp'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 27,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'unless_statement\',$item[3],[$item[4]]] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 28,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 27,
                                                                          'number' => 6,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(while)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 30,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(while)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 30,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 30,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'exp'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 30,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'while_statement\',$item[3],[$item[4]]] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 31,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 30,
                                                                          'number' => 7,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(foreach|for)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 33,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(foreach|for)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 33,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 33,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 1,
                                                                                                'min' => 0,
                                                                                                'repspec' => '?',
                                                                                                'subrule' => 'local_var_in'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 33,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'exp'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 33,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'foreach_statement\',$item[4],[$item[5]],@{$item[3]}] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 34,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 33,
                                                                          'number' => 8,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(stream)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 36,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(stream)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 36,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => '/--input-file|:f/, or /--input-pipe|:p/, or /--input-string|:s/, or /--output-file|:F/, or /--output-encoding|:E/, or /--output-pipe|:P/, or /--output-string|:S/, or /--no-output|:N/',
                                                                                                'line' => 46,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => '_alternation_1_of_production_10_of_rule_command'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 47,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 100000000,
                                                                                                'min' => 1,
                                                                                                'repspec' => 's',
                                                                                                'subrule' => 'stream_select'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'stream_process\',$item[3],$item[4]] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 48,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 36,
                                                                          'number' => 9,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(undef|undefine)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 50,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(undef|undefine)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 50,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'description' => '/\\\\$?[a-zA-Z_][a-zA-Z0-9_]*/',
                                                                                                'hashname' => '__PATTERN2__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 50,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '\\$?[a-zA-Z_][a-zA-Z0-9_]*',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '{ 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'undefine\',$item[3]];
	 }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 51,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 50,
                                                                          'number' => 10,
                                                                          'patcount' => 2,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(use)\\\\b/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 55,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(use)\\b',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '$commit = 1',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 55,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<commit>'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'description' => '/XML::XSH2::(?:Inline|Compile)/',
                                                                                                'hashname' => '__PATTERN2__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 55,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => 'XML::XSH2::(?:Inline|Compile)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '{ 1 }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 56,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 55,
                                                                          'number' => 11,
                                                                          'patcount' => 2,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 0,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(test-mode|test_mode)/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 58,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(test-mode|test_mode)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,"test-mode"] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 59,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 58,
                                                                          'number' => 12,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 0,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(run-mode|run_mode)/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 61,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(run-mode|run_mode)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,"run-mode"] }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 62,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 61,
                                                                          'number' => 13,
                                                                          'patcount' => 1,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 0,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'description' => '/(?!(?:iterate|try|def|define)\\\\b)/',
                                                                                                'hashname' => '__PATTERN1__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 64,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '(?!(?:iterate|try|def|define)\\b)',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'description' => '/\\\\.|[a-zA-Z_][-a-zA-Z0-9_]*/',
                                                                                                'hashname' => '__PATTERN2__',
                                                                                                'ldelim' => '/',
                                                                                                'line' => 64,
                                                                                                'lookahead' => 0,
                                                                                                'mod' => '',
                                                                                                'pattern' => '\\.|[a-zA-Z_][-a-zA-Z0-9_]*',
                                                                                                'rdelim' => '/'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 64,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 100000000,
                                                                                                'min' => 0,
                                                                                                'repspec' => 's?',
                                                                                                'subrule' => 'exp_or_opt'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'code' => '{ 
	  bless
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,$item[2],@{$item[3]}],
	  \'XML::XSH2::Command\'
	 }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 65,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => 64,
                                                                          'number' => 14,
                                                                          'patcount' => 2,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                               ],
                                                    'vars' => ''
                                                  }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'complex_command' => bless( {
                                                            'calls' => [
                                                                         'statement',
                                                                         'trail',
                                                                         'command'
                                                                       ],
                                                            'changed' => 0,
                                                            'impcount' => 0,
                                                            'line' => 100,
                                                            'name' => 'complex_command',
                                                            'opcount' => 0,
                                                            'prods' => [
                                                                         bless( {
                                                                                  'actcount' => 0,
                                                                                  'dircount' => 2,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'description' => '/(?=\\\\s*[\\{\\}]|\\\\s*\\\\Z)/',
                                                                                                        'hashname' => '__PATTERN1__',
                                                                                                        'ldelim' => '/',
                                                                                                        'line' => 101,
                                                                                                        'lookahead' => 0,
                                                                                                        'mod' => '',
                                                                                                        'pattern' => '(?=\\s*[{}]|\\s*\\Z)',
                                                                                                        'rdelim' => '/'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                               bless( {
                                                                                                        'code' => '$commit = 1',
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 101,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<commit>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                               bless( {
                                                                                                        'hashname' => '__DIRECTIVE2__',
                                                                                                        'line' => 101,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<reject>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                             ],
                                                                                  'line' => undef,
                                                                                  'number' => 0,
                                                                                  'patcount' => 1,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                         bless( {
                                                                                  'actcount' => 0,
                                                                                  'dircount' => 1,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'description' => '/\\\\s*;/',
                                                                                                        'hashname' => '__PATTERN1__',
                                                                                                        'ldelim' => '/',
                                                                                                        'line' => 102,
                                                                                                        'lookahead' => 0,
                                                                                                        'mod' => '',
                                                                                                        'pattern' => '\\s*;',
                                                                                                        'rdelim' => '/'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                               bless( {
                                                                                                        'code' => '$commit = 1',
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 102,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<commit>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Directive' )
                                                                                             ],
                                                                                  'line' => 102,
                                                                                  'number' => 1,
                                                                                  'patcount' => 1,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                         bless( {
                                                                                  'actcount' => 1,
                                                                                  'dircount' => 1,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'description' => '/(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\\\b)/',
                                                                                                        'hashname' => '__PATTERN1__',
                                                                                                        'ldelim' => '/',
                                                                                                        'line' => 103,
                                                                                                        'lookahead' => 0,
                                                                                                        'mod' => '',
                                                                                                        'pattern' => '(?=(?:foreach|for|if|unless|iterate|while|try|def|define)\\b)',
                                                                                                        'rdelim' => '/'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                               bless( {
                                                                                                        'argcode' => undef,
                                                                                                        'implicit' => undef,
                                                                                                        'line' => 103,
                                                                                                        'lookahead' => 0,
                                                                                                        'matchrule' => 0,
                                                                                                        'subrule' => 'statement'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                               bless( {
                                                                                                        'code' => '$commit = 1',
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 103,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<commit>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                               bless( {
                                                                                                        'argcode' => undef,
                                                                                                        'expected' => undef,
                                                                                                        'line' => 103,
                                                                                                        'lookahead' => 0,
                                                                                                        'matchrule' => 0,
                                                                                                        'max' => 1,
                                                                                                        'min' => 0,
                                                                                                        'repspec' => '?',
                                                                                                        'subrule' => 'trail'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                               bless( {
                                                                                                        'code' => '{ 
	  if (scalar(@{$item[4]})) {
	    if ($item[4][0][0] eq \'pipe\') {
  	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'pipe_command\',[$item[2]],$item[4][0][1]]
	    } else {
   	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'string_pipe_command\',[$item[2]],$item[4][0][1]]
	    }
          } else {
            $return=$item[2]
          }
	 }',
                                                                                                        'hashname' => '__ACTION1__',
                                                                                                        'line' => 104,
                                                                                                        'lookahead' => 0
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                             ],
                                                                                  'line' => 103,
                                                                                  'number' => 2,
                                                                                  'patcount' => 1,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                         bless( {
                                                                                  'actcount' => 1,
                                                                                  'dircount' => 1,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'argcode' => undef,
                                                                                                        'implicit' => undef,
                                                                                                        'line' => 116,
                                                                                                        'lookahead' => 0,
                                                                                                        'matchrule' => 0,
                                                                                                        'subrule' => 'command'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                               bless( {
                                                                                                        'code' => '$commit = 1',
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 116,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<commit>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                               bless( {
                                                                                                        'argcode' => undef,
                                                                                                        'expected' => undef,
                                                                                                        'line' => 116,
                                                                                                        'lookahead' => 0,
                                                                                                        'matchrule' => 0,
                                                                                                        'max' => 1,
                                                                                                        'min' => 0,
                                                                                                        'repspec' => '?',
                                                                                                        'subrule' => 'trail'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                               bless( {
                                                                                                        'description' => '/\\\\s*;|(?=\\\\s*\\}|\\\\s*\\\\Z)/',
                                                                                                        'hashname' => '__PATTERN1__',
                                                                                                        'ldelim' => '/',
                                                                                                        'line' => 116,
                                                                                                        'lookahead' => 0,
                                                                                                        'mod' => '',
                                                                                                        'pattern' => '\\s*;|(?=\\s*}|\\s*\\Z)',
                                                                                                        'rdelim' => '/'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                               bless( {
                                                                                                        'code' => '{ 
	  if (scalar(@{$item[3]})) {
	    if ($item[3][0][0] eq \'pipe\') {
  	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'pipe_command\',[$item[1]],$item[3][0][1]]
	    } else {
   	      $return=[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'string_pipe_command\',[$item[1]],$item[3][0][1]]
	    }
          } else {
            $return=$item[1]
          }
	 }',
                                                                                                        'hashname' => '__ACTION1__',
                                                                                                        'line' => 117,
                                                                                                        'lookahead' => 0
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                             ],
                                                                                  'line' => 116,
                                                                                  'number' => 3,
                                                                                  'patcount' => 1,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                         bless( {
                                                                                  'actcount' => 0,
                                                                                  'dircount' => 1,
                                                                                  'error' => 1,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'commitonly' => '',
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 129,
                                                                                                        'lookahead' => 0,
                                                                                                        'msg' => 'Parse error near: "}.substr($text,0,40).qq{ ..."'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Error' )
                                                                                             ],
                                                                                  'line' => 129,
                                                                                  'number' => 4,
                                                                                  'patcount' => 0,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => 0
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                       ],
                                                            'vars' => ''
                                                          }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'else_block' => bless( {
                                                       'calls' => [
                                                                    'block'
                                                                  ],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 370,
                                                       'name' => 'else_block',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/(else)\\\\b/',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 371,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '(else)\\b',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'code' => '$commit = 1',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 371,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<commit>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 371,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'block'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                          bless( {
                                                                                                   'code' => '{ [[undef,$item[3]]] }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 372,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 1,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 0,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/(?!else)/',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 374,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '(?!else)',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'code' => '{ [] }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 375,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                        ],
                                                                             'line' => 374,
                                                                             'number' => 1,
                                                                             'patcount' => 1,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 2,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'code' => '$commit=0;1',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 377,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<uncommit>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'commitonly' => '',
                                                                                                   'hashname' => '__DIRECTIVE2__',
                                                                                                   'line' => 377,
                                                                                                   'lookahead' => 0,
                                                                                                   'msg' => 'Parse error near keyword else: "}.substr($text,0,40).qq{ ..."'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Error' )
                                                                                        ],
                                                                             'line' => 377,
                                                                             'number' => 2,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => 1
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'elsif_block' => bless( {
                                                        'calls' => [
                                                                     'exp',
                                                                     'block',
                                                                     'elsif_block'
                                                                   ],
                                                        'changed' => 0,
                                                        'impcount' => 0,
                                                        'line' => 361,
                                                        'name' => 'elsif_block',
                                                        'opcount' => 0,
                                                        'prods' => [
                                                                     bless( {
                                                                              'actcount' => 1,
                                                                              'dircount' => 1,
                                                                              'error' => undef,
                                                                              'items' => [
                                                                                           bless( {
                                                                                                    'description' => '/(elsif)\\\\b/',
                                                                                                    'hashname' => '__PATTERN1__',
                                                                                                    'ldelim' => '/',
                                                                                                    'line' => 362,
                                                                                                    'lookahead' => 0,
                                                                                                    'mod' => '',
                                                                                                    'pattern' => '(elsif)\\b',
                                                                                                    'rdelim' => '/'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                           bless( {
                                                                                                    'code' => '$commit = 1',
                                                                                                    'hashname' => '__DIRECTIVE1__',
                                                                                                    'line' => 362,
                                                                                                    'lookahead' => 0,
                                                                                                    'name' => '<commit>'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                           bless( {
                                                                                                    'argcode' => undef,
                                                                                                    'implicit' => undef,
                                                                                                    'line' => 362,
                                                                                                    'lookahead' => 0,
                                                                                                    'matchrule' => 0,
                                                                                                    'subrule' => 'exp'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                           bless( {
                                                                                                    'argcode' => undef,
                                                                                                    'implicit' => undef,
                                                                                                    'line' => 362,
                                                                                                    'lookahead' => 0,
                                                                                                    'matchrule' => 0,
                                                                                                    'subrule' => 'block'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                           bless( {
                                                                                                    'argcode' => undef,
                                                                                                    'implicit' => undef,
                                                                                                    'line' => 362,
                                                                                                    'lookahead' => 0,
                                                                                                    'matchrule' => 0,
                                                                                                    'subrule' => 'elsif_block'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                           bless( {
                                                                                                    'code' => '{ [[$item[3],$item[4]],@{$item[5]}] }',
                                                                                                    'hashname' => '__ACTION1__',
                                                                                                    'line' => 363,
                                                                                                    'lookahead' => 0
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                         ],
                                                                              'line' => undef,
                                                                              'number' => 0,
                                                                              'patcount' => 1,
                                                                              'strcount' => 0,
                                                                              'uncommit' => undef
                                                                            }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                     bless( {
                                                                              'actcount' => 1,
                                                                              'dircount' => 0,
                                                                              'error' => undef,
                                                                              'items' => [
                                                                                           bless( {
                                                                                                    'description' => '/(?!elsif)/',
                                                                                                    'hashname' => '__PATTERN1__',
                                                                                                    'ldelim' => '/',
                                                                                                    'line' => 365,
                                                                                                    'lookahead' => 0,
                                                                                                    'mod' => '',
                                                                                                    'pattern' => '(?!elsif)',
                                                                                                    'rdelim' => '/'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                           bless( {
                                                                                                    'code' => '{ [] }',
                                                                                                    'hashname' => '__ACTION1__',
                                                                                                    'line' => 366,
                                                                                                    'lookahead' => 0
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                         ],
                                                                              'line' => 365,
                                                                              'number' => 1,
                                                                              'patcount' => 1,
                                                                              'strcount' => 0,
                                                                              'uncommit' => undef
                                                                            }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                     bless( {
                                                                              'actcount' => 0,
                                                                              'dircount' => 2,
                                                                              'error' => undef,
                                                                              'items' => [
                                                                                           bless( {
                                                                                                    'code' => '$commit=0;1',
                                                                                                    'hashname' => '__DIRECTIVE1__',
                                                                                                    'line' => 368,
                                                                                                    'lookahead' => 0,
                                                                                                    'name' => '<uncommit>'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                           bless( {
                                                                                                    'commitonly' => '',
                                                                                                    'hashname' => '__DIRECTIVE2__',
                                                                                                    'line' => 368,
                                                                                                    'lookahead' => 0,
                                                                                                    'msg' => 'Parse error near keyword elsif: "}.substr($text,0,40).qq{ ..."'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Error' )
                                                                                         ],
                                                                              'line' => 368,
                                                                              'number' => 2,
                                                                              'patcount' => 0,
                                                                              'strcount' => 0,
                                                                              'uncommit' => 1
                                                                            }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                   ],
                                                        'vars' => ''
                                                      }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'enc_string' => bless( {
                                                       'calls' => [
                                                                    'exp'
                                                                  ],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 167,
                                                       'name' => 'enc_string',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 0,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 168,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'exp'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'eof' => bless( {
                                                'calls' => [],
                                                'changed' => 0,
                                                'impcount' => 0,
                                                'line' => 317,
                                                'name' => 'eof',
                                                'opcount' => 0,
                                                'prods' => [
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/\\\\Z/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 318,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '\\Z',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ 1; }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 319,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => undef,
                                                                      'number' => 0,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                           ],
                                                'vars' => ''
                                              }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'exp' => bless( {
                                                'calls' => [
                                                             'perl_block',
                                                             'block',
                                                             'inline_doc',
                                                             'xpath'
                                                           ],
                                                'changed' => 0,
                                                'impcount' => 0,
                                                'line' => 302,
                                                'name' => 'exp',
                                                'opcount' => 0,
                                                'prods' => [
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/^(?=\\{)/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 303,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '^(?={)',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'argcode' => undef,
                                                                                            'implicit' => undef,
                                                                                            'line' => 303,
                                                                                            'lookahead' => 0,
                                                                                            'matchrule' => 0,
                                                                                            'subrule' => 'perl_block'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                   bless( {
                                                                                            'code' => '{ $item[2] }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 304,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => undef,
                                                                      'number' => 0,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '\'&\'',
                                                                                            'hashname' => '__STRING1__',
                                                                                            'line' => 306,
                                                                                            'lookahead' => 0,
                                                                                            'pattern' => '&'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                   bless( {
                                                                                            'argcode' => undef,
                                                                                            'implicit' => undef,
                                                                                            'line' => 306,
                                                                                            'lookahead' => 0,
                                                                                            'matchrule' => 0,
                                                                                            'subrule' => 'block'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                   bless( {
                                                                                            'code' => '{ $item[2] }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 307,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 306,
                                                                      'number' => 1,
                                                                      'patcount' => 0,
                                                                      'strcount' => 1,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/^(?=<<)/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 309,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '^(?=<<)',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'argcode' => undef,
                                                                                            'implicit' => undef,
                                                                                            'line' => 309,
                                                                                            'lookahead' => 0,
                                                                                            'matchrule' => 0,
                                                                                            'subrule' => 'inline_doc'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                   bless( {
                                                                                            'code' => '{ $item[2] }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 310,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 309,
                                                                      'number' => 2,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 0,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'argcode' => undef,
                                                                                            'implicit' => undef,
                                                                                            'line' => 312,
                                                                                            'lookahead' => 0,
                                                                                            'matchrule' => 0,
                                                                                            'subrule' => 'xpath'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                 ],
                                                                      'line' => 312,
                                                                      'number' => 3,
                                                                      'patcount' => 0,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                           ],
                                                'vars' => ''
                                              }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'exp_or_opt' => bless( {
                                                       'calls' => [
                                                                    'option',
                                                                    'exp'
                                                                  ],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 136,
                                                       'name' => 'exp_or_opt',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 2,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/(?=\\\\s*[\\};]|\\\\s*\\\\Z)/',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 137,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '(?=\\s*[};]|\\s*\\Z)',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'code' => '$commit = 1',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 137,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<commit>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'hashname' => '__DIRECTIVE2__',
                                                                                                   'line' => 137,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<reject>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 1,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 0,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 138,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'option'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                        ],
                                                                             'line' => 138,
                                                                             'number' => 1,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 0,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 139,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'exp'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                        ],
                                                                             'line' => 139,
                                                                             'number' => 2,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'filename' => bless( {
                                                     'calls' => [
                                                                  'exp'
                                                                ],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 173,
                                                     'name' => 'filename',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'argcode' => undef,
                                                                                                 'implicit' => undef,
                                                                                                 'line' => 174,
                                                                                                 'lookahead' => 0,
                                                                                                 'matchrule' => 0,
                                                                                                 'subrule' => 'exp'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 0,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'inline_doc' => bless( {
                                                       'calls' => [
                                                                    'inline_doc_string'
                                                                  ],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 149,
                                                       'name' => 'inline_doc',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/<</',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 150,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '<<',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 150,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'inline_doc_string'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                          bless( {
                                                                                                   'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 150,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<skip:"">'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'description' => '/.*\\\\n/',
                                                                                                   'hashname' => '__PATTERN2__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 150,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '.*\\n',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'description' => '/(.|\\\\n)*?\\\\n$item[2][1]\\\\s*(\\\\n|$)/',
                                                                                                   'hashname' => '__PATTERN3__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 150,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '(.|\\n)*?\\n$item[2][1]\\s*(\\n|$)',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'code' => '{ 
	  $text=$item[4].$text;
	  local $_=$item[5]; s/\\n$item[2][1]\\s*$//;
	  my $paren = $item[2][0];
	  $paren = \'"\' if $paren eq "";
	  if ($paren eq "\'") {
	      $paren = \'"\';
	      s{(\\\\)(.|\\n)|(\\$)}{ (defined($3) and $3 eq \'$\') ? "\\\\\\$"
	        : ((defined($2) and $2 eq "\\\\")
	        ? "\\\\\\\\" : ((defined($2) and $2 eq "\'") ? "\'" : (
	        (defined($2) and $2 eq \'$\') ? "\\\\\\\\\\\\$2" :
	        "\\\\\\\\$2"))) }eg;
	  } "<<".$paren.$_;
	 }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 151,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 3,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'inline_doc_string' => bless( {
                                                              'calls' => [],
                                                              'changed' => 0,
                                                              'impcount' => 0,
                                                              'line' => 144,
                                                              'name' => 'inline_doc_string',
                                                              'opcount' => 0,
                                                              'prods' => [
                                                                           bless( {
                                                                                    'actcount' => 1,
                                                                                    'dircount' => 0,
                                                                                    'error' => undef,
                                                                                    'items' => [
                                                                                                 bless( {
                                                                                                          'description' => '/\'[a-zA-Z_][a-zA-Z0-9_]*\'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\\\([a-zA-Z_][a-zA-Z0-9_]*\\\\)|\\\\\\{[a-zA-Z_][a-zA-Z0-9_]*\\\\\\}|[a-zA-Z_][a-zA-Z0-9_]*/',
                                                                                                          'hashname' => '__PATTERN1__',
                                                                                                          'ldelim' => '/',
                                                                                                          'line' => 145,
                                                                                                          'lookahead' => 0,
                                                                                                          'mod' => '',
                                                                                                          'pattern' => '\'[a-zA-Z_][a-zA-Z0-9_]*\'|"[a-zA-Z_][a-zA-Z0-9_]*"|\\([a-zA-Z_][a-zA-Z0-9_]*\\)|\\{[a-zA-Z_][a-zA-Z0-9_]*\\}|[a-zA-Z_][a-zA-Z0-9_]*',
                                                                                                          'rdelim' => '/'
                                                                                                        }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                                 bless( {
                                                                                                          'code' => '{ [($item[1]=~/^([\'"({])?(.*?)([\'")}])?$/)] }',
                                                                                                          'hashname' => '__ACTION1__',
                                                                                                          'line' => 146,
                                                                                                          'lookahead' => 0
                                                                                                        }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                               ],
                                                                                    'line' => undef,
                                                                                    'number' => 0,
                                                                                    'patcount' => 1,
                                                                                    'strcount' => 0,
                                                                                    'uncommit' => undef
                                                                                  }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                         ],
                                                              'vars' => ''
                                                            }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'loc' => bless( {
                                                'calls' => [],
                                                'changed' => 0,
                                                'impcount' => 0,
                                                'line' => 405,
                                                'name' => 'loc',
                                                'opcount' => 0,
                                                'prods' => [
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/after\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 406,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => 'after\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "after" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 407,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => undef,
                                                                      'number' => 0,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/before\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 409,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => 'before\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "before" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 410,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 409,
                                                                      'number' => 1,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/(in)?to\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 412,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '(in)?to\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "into" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 413,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 412,
                                                                      'number' => 2,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/(append(ing)?|as\\\\s+(a\\\\s+)child(\\\\s+of)?)\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 415,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '(append(ing)?|as\\s+(a\\s+)child(\\s+of)?)\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "append" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 416,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 415,
                                                                      'number' => 3,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/(prepend(ing)?|(as\\\\s+)(the\\\\s+)first(\\\\s+child(\\\\s+of)?)?)\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 418,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '(prepend(ing)?|(as\\s+)(the\\s+)first(\\s+child(\\s+of)?)?)\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "prepend" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 419,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 418,
                                                                      'number' => 4,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                             bless( {
                                                                      'actcount' => 1,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/(replace|instead( of)?)\\\\s/',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 421,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => '',
                                                                                            'pattern' => '(replace|instead( of)?)\\s',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                   bless( {
                                                                                            'code' => '{ "replace" }',
                                                                                            'hashname' => '__ACTION1__',
                                                                                            'line' => 422,
                                                                                            'lookahead' => 0
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                 ],
                                                                      'line' => 421,
                                                                      'number' => 5,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                           ],
                                                'vars' => ''
                                              }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'local_var' => bless( {
                                                      'calls' => [
                                                                   '_alternation_1_of_production_1_of_rule_local_var',
                                                                   'variable'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 1,
                                                      'line' => 379,
                                                      'name' => 'local_var',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => '/(local|my)\\\\s/',
                                                                                                  'line' => 381,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 1,
                                                                                                  'min' => 0,
                                                                                                  'repspec' => '?',
                                                                                                  'subrule' => '_alternation_1_of_production_1_of_rule_local_var'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 381,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'variable'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$item[2],@{$item[1]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 382,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 0,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'local_var_in' => bless( {
                                                         'calls' => [
                                                                      'local_var'
                                                                    ],
                                                         'changed' => 0,
                                                         'impcount' => 0,
                                                         'line' => 385,
                                                         'name' => 'local_var_in',
                                                         'opcount' => 0,
                                                         'prods' => [
                                                                      bless( {
                                                                               'actcount' => 1,
                                                                               'dircount' => 0,
                                                                               'error' => undef,
                                                                               'items' => [
                                                                                            bless( {
                                                                                                     'argcode' => undef,
                                                                                                     'implicit' => undef,
                                                                                                     'line' => 386,
                                                                                                     'lookahead' => 0,
                                                                                                     'matchrule' => 0,
                                                                                                     'subrule' => 'local_var'
                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                            bless( {
                                                                                                     'description' => '\'in\'',
                                                                                                     'hashname' => '__STRING1__',
                                                                                                     'line' => 386,
                                                                                                     'lookahead' => 0,
                                                                                                     'pattern' => 'in'
                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                            bless( {
                                                                                                     'code' => '{ $item[1] }',
                                                                                                     'hashname' => '__ACTION1__',
                                                                                                     'line' => 387,
                                                                                                     'lookahead' => 0
                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                          ],
                                                                               'line' => undef,
                                                                               'number' => 0,
                                                                               'patcount' => 0,
                                                                               'strcount' => 1,
                                                                               'uncommit' => undef
                                                                             }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                    ],
                                                         'vars' => ''
                                                       }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'loose_exp' => bless( {
                                                      'calls' => [
                                                                   'perl_block',
                                                                   'block',
                                                                   'inline_doc',
                                                                   'xpinter'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 0,
                                                      'line' => 290,
                                                      'name' => 'loose_exp',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/^(?=\\{)/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 291,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '^(?={)',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 291,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'perl_block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ $item[2] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 292,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '\'&\'',
                                                                                                  'hashname' => '__STRING1__',
                                                                                                  'line' => 294,
                                                                                                  'lookahead' => 0,
                                                                                                  'pattern' => '&'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 294,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ $item[2] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 295,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 294,
                                                                            'number' => 1,
                                                                            'patcount' => 0,
                                                                            'strcount' => 1,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/^(?=<<)/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 297,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '^(?=<<)',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 297,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'inline_doc'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ $item[2] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 298,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 297,
                                                                            'number' => 2,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 0,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 300,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'xpinter'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                       ],
                                                                            'line' => 300,
                                                                            'number' => 3,
                                                                            'patcount' => 0,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'nodename' => bless( {
                                                     'calls' => [
                                                                  'exp'
                                                                ],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 176,
                                                     'name' => 'nodename',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'argcode' => undef,
                                                                                                 'implicit' => undef,
                                                                                                 'line' => 177,
                                                                                                 'lookahead' => 0,
                                                                                                 'matchrule' => 0,
                                                                                                 'subrule' => 'exp'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 0,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'nodetype' => bless( {
                                                     'calls' => [],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 402,
                                                     'name' => 'nodetype',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'description' => '/element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference/',
                                                                                                 'hashname' => '__PATTERN1__',
                                                                                                 'ldelim' => '/',
                                                                                                 'line' => 403,
                                                                                                 'lookahead' => 0,
                                                                                                 'mod' => '',
                                                                                                 'pattern' => 'element|attribute|attributes|text|cdata|pi|comment|chunk|entity_reference',
                                                                                                 'rdelim' => '/'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 1,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'option' => bless( {
                                                   'calls' => [],
                                                   'changed' => 0,
                                                   'impcount' => 0,
                                                   'line' => 141,
                                                   'name' => 'option',
                                                   'opcount' => 0,
                                                   'prods' => [
                                                                bless( {
                                                                         'actcount' => 0,
                                                                         'dircount' => 0,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'description' => '/:[[:alnum:]]|--[-_[:alnum:]]+/',
                                                                                               'hashname' => '__PATTERN1__',
                                                                                               'ldelim' => '/',
                                                                                               'line' => 142,
                                                                                               'lookahead' => 0,
                                                                                               'mod' => '',
                                                                                               'pattern' => ':[[:alnum:]]|--[-_[:alnum:]]+',
                                                                                               'rdelim' => '/'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                    ],
                                                                         'line' => undef,
                                                                         'number' => 0,
                                                                         'patcount' => 1,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                              ],
                                                   'vars' => ''
                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'param' => bless( {
                                                  'calls' => [
                                                               'exp'
                                                             ],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 397,
                                                  'name' => 'param',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 0,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '/[^=\\\\s]+/',
                                                                                              'hashname' => '__PATTERN1__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 398,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '[^=\\s]+',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'description' => '\'=\'',
                                                                                              'hashname' => '__STRING1__',
                                                                                              'line' => 398,
                                                                                              'lookahead' => 0,
                                                                                              'pattern' => '='
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'implicit' => undef,
                                                                                              'line' => 398,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'subrule' => 'exp'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                     bless( {
                                                                                              'code' => '{ [$item[1],$item[3]] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 399,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 1,
                                                                        'strcount' => 1,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'perl_block' => bless( {
                                                       'calls' => [],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 272,
                                                       'name' => 'perl_block',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'code' => '{ $main::myline = $thisline; }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 274,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' ),
                                                                                          bless( {
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 275,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<reject>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'code' => '{ $main::myline = $thisline; }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 277,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' ),
                                                                                          bless( {
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 278,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<reject>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                        ],
                                                                             'line' => 276,
                                                                             'number' => 1,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'code' => 'Text::Balanced::extract_codeblock($text,undef,$skip,\'{}\');
                    ',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 279,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<perl_codeblock>'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'code' => '{ {
	  $return=$item[1];
	  {
  	    local $^W = 0; # don\'t warn about undefined contants
	    my $pos="# line $main::myline \\"$XML::XSH2::Functions::SCRIPT\\"\\n";
	    $return=~s/^\\{/\\{\\n$pos/;
          }
	  } }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 280,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                        ],
                                                                             'line' => 279,
                                                                             'number' => 2,
                                                                             'patcount' => 0,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'perl_expression' => bless( {
                                                            'calls' => [
                                                                         'exp'
                                                                       ],
                                                            'changed' => 0,
                                                            'impcount' => 0,
                                                            'line' => 264,
                                                            'name' => 'perl_expression',
                                                            'opcount' => 0,
                                                            'prods' => [
                                                                         bless( {
                                                                                  'actcount' => 1,
                                                                                  'dircount' => 1,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'code' => '{ $main::myline = $thisline; }',
                                                                                                        'hashname' => '__ACTION1__',
                                                                                                        'line' => 266,
                                                                                                        'lookahead' => 0
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Action' ),
                                                                                               bless( {
                                                                                                        'hashname' => '__DIRECTIVE1__',
                                                                                                        'line' => 267,
                                                                                                        'lookahead' => 0,
                                                                                                        'name' => '<reject>'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                             ],
                                                                                  'line' => undef,
                                                                                  'number' => 0,
                                                                                  'patcount' => 0,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                         bless( {
                                                                                  'actcount' => 1,
                                                                                  'dircount' => 0,
                                                                                  'error' => undef,
                                                                                  'items' => [
                                                                                               bless( {
                                                                                                        'argcode' => undef,
                                                                                                        'implicit' => undef,
                                                                                                        'line' => 268,
                                                                                                        'lookahead' => 0,
                                                                                                        'matchrule' => 0,
                                                                                                        'subrule' => 'exp'
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                               bless( {
                                                                                                        'code' => '{ {local $^W=0; "\\n# line $main::myline \\"$XML::XSH2::Functions::SCRIPT\\"\\n".$item[1]} }',
                                                                                                        'hashname' => '__ACTION1__',
                                                                                                        'line' => 269,
                                                                                                        'lookahead' => 0
                                                                                                      }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                             ],
                                                                                  'line' => 268,
                                                                                  'number' => 1,
                                                                                  'patcount' => 0,
                                                                                  'strcount' => 0,
                                                                                  'uncommit' => undef
                                                                                }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                       ],
                                                            'vars' => ''
                                                          }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'shell' => bless( {
                                                  'calls' => [],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 355,
                                                  'name' => 'shell',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '/!\\\\s*/',
                                                                                              'hashname' => '__PATTERN1__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 356,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '!\\s*',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 356,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'description' => '/.*/',
                                                                                              'hashname' => '__PATTERN2__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 356,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '.*',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '{ [[$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'sh_noev\',$item[3]]] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 357,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 2,
                                                                        'strcount' => 0,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                               bless( {
                                                                        'actcount' => 0,
                                                                        'dircount' => 2,
                                                                        'error' => 1,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'commitonly' => '?',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 359,
                                                                                              'lookahead' => 0,
                                                                                              'msg' => 'Parse error near: "! }.substr($text,0,40).qq{ ..."'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Error' ),
                                                                                     bless( {
                                                                                              'hashname' => '__DIRECTIVE2__',
                                                                                              'line' => 359,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<reject>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                   ],
                                                                        'line' => 359,
                                                                        'number' => 1,
                                                                        'patcount' => 0,
                                                                        'strcount' => 0,
                                                                        'uncommit' => 0
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'shline' => bless( {
                                                   'calls' => [
                                                                'shline_nosc',
                                                                'shline_bracket'
                                                              ],
                                                   'changed' => 0,
                                                   'impcount' => 0,
                                                   'line' => 350,
                                                   'name' => 'shline',
                                                   'opcount' => 0,
                                                   'prods' => [
                                                                bless( {
                                                                         'actcount' => 1,
                                                                         'dircount' => 0,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'implicit' => undef,
                                                                                               'line' => 351,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'subrule' => 'shline_nosc'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'expected' => undef,
                                                                                               'line' => 351,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'max' => 1,
                                                                                               'min' => 0,
                                                                                               'repspec' => '?',
                                                                                               'subrule' => 'shline_bracket'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'implicit' => undef,
                                                                                               'line' => 351,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'subrule' => 'shline_nosc'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                      bless( {
                                                                                               'code' => '{ join("",$item[1],@{$item[2]},$item[3]) }',
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'line' => 352,
                                                                                               'lookahead' => 0
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                    ],
                                                                         'line' => undef,
                                                                         'number' => 0,
                                                                         'patcount' => 0,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                              ],
                                                   'vars' => ''
                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'shline_bracket' => bless( {
                                                           'calls' => [
                                                                        'shline_inter',
                                                                        'shline_bracket'
                                                                      ],
                                                           'changed' => 0,
                                                           'impcount' => 0,
                                                           'line' => 345,
                                                           'name' => 'shline_bracket',
                                                           'opcount' => 0,
                                                           'prods' => [
                                                                        bless( {
                                                                                 'actcount' => 1,
                                                                                 'dircount' => 0,
                                                                                 'error' => undef,
                                                                                 'items' => [
                                                                                              bless( {
                                                                                                       'description' => '\'(\'',
                                                                                                       'hashname' => '__STRING1__',
                                                                                                       'line' => 346,
                                                                                                       'lookahead' => 0,
                                                                                                       'pattern' => '('
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                              bless( {
                                                                                                       'argcode' => undef,
                                                                                                       'implicit' => undef,
                                                                                                       'line' => 346,
                                                                                                       'lookahead' => 0,
                                                                                                       'matchrule' => 0,
                                                                                                       'subrule' => 'shline_inter'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                              bless( {
                                                                                                       'argcode' => undef,
                                                                                                       'expected' => undef,
                                                                                                       'line' => 346,
                                                                                                       'lookahead' => 0,
                                                                                                       'matchrule' => 0,
                                                                                                       'max' => 1,
                                                                                                       'min' => 0,
                                                                                                       'repspec' => '?',
                                                                                                       'subrule' => 'shline_bracket'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                              bless( {
                                                                                                       'argcode' => undef,
                                                                                                       'implicit' => undef,
                                                                                                       'line' => 346,
                                                                                                       'lookahead' => 0,
                                                                                                       'matchrule' => 0,
                                                                                                       'subrule' => 'shline_inter'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                              bless( {
                                                                                                       'description' => '\')\'',
                                                                                                       'hashname' => '__STRING2__',
                                                                                                       'line' => 346,
                                                                                                       'lookahead' => 0,
                                                                                                       'pattern' => ')'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                              bless( {
                                                                                                       'code' => '{ join("",\'(\',$item[2],@{$item[3]},$item[4],\')\') }',
                                                                                                       'hashname' => '__ACTION1__',
                                                                                                       'line' => 347,
                                                                                                       'lookahead' => 0
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                            ],
                                                                                 'line' => undef,
                                                                                 'number' => 0,
                                                                                 'patcount' => 0,
                                                                                 'strcount' => 2,
                                                                                 'uncommit' => undef
                                                                               }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                      ],
                                                           'vars' => ''
                                                         }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'shline_inter' => bless( {
                                                         'calls' => [],
                                                         'changed' => 0,
                                                         'impcount' => 0,
                                                         'line' => 342,
                                                         'name' => 'shline_inter',
                                                         'opcount' => 0,
                                                         'prods' => [
                                                                      bless( {
                                                                               'actcount' => 0,
                                                                               'dircount' => 0,
                                                                               'error' => undef,
                                                                               'items' => [
                                                                                            bless( {
                                                                                                     'description' => '/([^()\\\\\\\\"\']|\\\\\\\\.|\\\\"([^\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\"|\\\\\'([^\\\\\'\\\\\\\\]|\\\\\\\\\\\\\'|\\\\\\\\\\\\\\\\|\\\\\\\\[^\\\\\'\\\\\\\\])*\\\\\')*/',
                                                                                                     'hashname' => '__PATTERN1__',
                                                                                                     'ldelim' => '/',
                                                                                                     'line' => 343,
                                                                                                     'lookahead' => 0,
                                                                                                     'mod' => '',
                                                                                                     'pattern' => '([^()\\\\"\']|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\\'([^\\\'\\\\]|\\\\\\\'|\\\\\\\\|\\\\[^\\\'\\\\])*\\\')*',
                                                                                                     'rdelim' => '/'
                                                                                                   }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                          ],
                                                                               'line' => undef,
                                                                               'number' => 0,
                                                                               'patcount' => 1,
                                                                               'strcount' => 0,
                                                                               'uncommit' => undef
                                                                             }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                    ],
                                                         'vars' => ''
                                                       }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'shline_nosc' => bless( {
                                                        'calls' => [],
                                                        'changed' => 0,
                                                        'impcount' => 0,
                                                        'line' => 339,
                                                        'name' => 'shline_nosc',
                                                        'opcount' => 0,
                                                        'prods' => [
                                                                     bless( {
                                                                              'actcount' => 0,
                                                                              'dircount' => 0,
                                                                              'error' => undef,
                                                                              'items' => [
                                                                                           bless( {
                                                                                                    'description' => '/([^;()\\\\\\\\"\'\\\\|]|\\\\|[^>]|\\\\\\\\.|\\\\"([^\\\\"\\\\\\\\]|\\\\\\\\.)*\\\\"|\\\\\'([^\\\\\'\\\\\\\\]|\\\\\\\\\\\\\'|\\\\\\\\\\\\\\\\|\\\\\\\\[^\\\\\'\\\\\\\\])*\\\\\')*/',
                                                                                                    'hashname' => '__PATTERN1__',
                                                                                                    'ldelim' => '/',
                                                                                                    'line' => 340,
                                                                                                    'lookahead' => 0,
                                                                                                    'mod' => '',
                                                                                                    'pattern' => '([^;()\\\\"\'\\|]|\\|[^>]|\\\\.|\\"([^\\"\\\\]|\\\\.)*\\"|\\\'([^\\\'\\\\]|\\\\\\\'|\\\\\\\\|\\\\[^\\\'\\\\])*\\\')*',
                                                                                                    'rdelim' => '/'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                         ],
                                                                              'line' => undef,
                                                                              'number' => 0,
                                                                              'patcount' => 1,
                                                                              'strcount' => 0,
                                                                              'uncommit' => undef
                                                                            }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                   ],
                                                        'vars' => ''
                                                      }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'startrule' => bless( {
                                                      'calls' => [
                                                                   'shell',
                                                                   'eof',
                                                                   'complex_command'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 0,
                                                      'line' => 322,
                                                      'name' => 'startrule',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 323,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'shell'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 323,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 323,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'eof'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ $item[1] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 324,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 0,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 326,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 100000000,
                                                                                                  'min' => 1,
                                                                                                  'repspec' => 's',
                                                                                                  'subrule' => 'complex_command'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 326,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 326,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'eof'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ $item[1] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 327,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 326,
                                                                            'number' => 1,
                                                                            'patcount' => 0,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'statement' => bless( {
                                                      'calls' => [
                                                                   'exp',
                                                                   'block',
                                                                   'elsif_block',
                                                                   'else_block',
                                                                   'local_var_in',
                                                                   'local_var',
                                                                   'xpstep',
                                                                   'ID',
                                                                   'variable'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 0,
                                                      'line' => 72,
                                                      'name' => 'statement',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 0,
                                                                            'dircount' => 2,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(?=\\\\s*[\\}\\{;])/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 73,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(?=\\s*[}{;])',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 73,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'hashname' => '__DIRECTIVE2__',
                                                                                                  'line' => 73,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<reject>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(if)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(if)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'exp'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'elsif_block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 74,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'else_block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'if_statement\',[$item[3],$item[4]],@{$item[5]},@{$item[6]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 75,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 74,
                                                                            'number' => 1,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(unless)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 77,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(unless)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 77,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 77,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'exp'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 77,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 77,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 1,
                                                                                                  'min' => 0,
                                                                                                  'repspec' => '?',
                                                                                                  'subrule' => 'else_block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'unless_statement\',$item[3],$item[4],@{$item[5]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 78,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 77,
                                                                            'number' => 2,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(while)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 80,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(while)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 80,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 80,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'exp'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 80,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'while_statement\',$item[3],$item[4]] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 81,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 80,
                                                                            'number' => 3,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(foreach|for)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 83,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(foreach|for)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 83,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 83,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 1,
                                                                                                  'min' => 0,
                                                                                                  'repspec' => '?',
                                                                                                  'subrule' => 'local_var_in'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 83,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'exp'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 83,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'foreach_statement\',@item[4,5],@{$item[3]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 84,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 83,
                                                                            'number' => 4,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(try)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(try)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'description' => '\'catch\'',
                                                                                                  'hashname' => '__STRING1__',
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'pattern' => 'catch'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 1,
                                                                                                  'min' => 0,
                                                                                                  'repspec' => '?',
                                                                                                  'subrule' => 'local_var'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 86,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'try_catch\',$item[3],$item[6],@{$item[5]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 87,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 86,
                                                                            'number' => 5,
                                                                            'patcount' => 1,
                                                                            'strcount' => 1,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(iterate)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 89,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(iterate)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 89,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 89,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'xpstep'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 89,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'iterate\',$item[4],@{$item[3]}] }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 90,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 89,
                                                                            'number' => 6,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                   bless( {
                                                                            'actcount' => 2,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(def|define)\\\\b/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 92,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(def|define)\\b',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'code' => '$commit = 1',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 92,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<commit>'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 92,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'ID'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ XML::XSH2::Functions::is_command($item[3])?undef:1 }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 93,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 94,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 100000000,
                                                                                                  'min' => 0,
                                                                                                  'repspec' => 's?',
                                                                                                  'subrule' => 'variable'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 94,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'block'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'code' => '{ 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'def\',$item[3],$item[6],$item[5]]
	 }',
                                                                                                  'hashname' => '__ACTION2__',
                                                                                                  'line' => 95,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => 92,
                                                                            'number' => 7,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'stream_select' => bless( {
                                                          'calls' => [
                                                                       'xpath',
                                                                       'block'
                                                                     ],
                                                          'changed' => 0,
                                                          'impcount' => 0,
                                                          'line' => 441,
                                                          'name' => 'stream_select',
                                                          'opcount' => 0,
                                                          'prods' => [
                                                                       bless( {
                                                                                'actcount' => 1,
                                                                                'dircount' => 0,
                                                                                'error' => undef,
                                                                                'items' => [
                                                                                             bless( {
                                                                                                      'description' => '/select\\\\s/',
                                                                                                      'hashname' => '__PATTERN1__',
                                                                                                      'ldelim' => '/',
                                                                                                      'line' => 442,
                                                                                                      'lookahead' => 0,
                                                                                                      'mod' => '',
                                                                                                      'pattern' => 'select\\s',
                                                                                                      'rdelim' => '/'
                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                             bless( {
                                                                                                      'argcode' => undef,
                                                                                                      'implicit' => undef,
                                                                                                      'line' => 442,
                                                                                                      'lookahead' => 0,
                                                                                                      'matchrule' => 0,
                                                                                                      'subrule' => 'xpath'
                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                             bless( {
                                                                                                      'argcode' => undef,
                                                                                                      'implicit' => undef,
                                                                                                      'line' => 442,
                                                                                                      'lookahead' => 0,
                                                                                                      'matchrule' => 0,
                                                                                                      'subrule' => 'block'
                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                             bless( {
                                                                                                      'code' => '{ [$item[2],$item[3]] }',
                                                                                                      'hashname' => '__ACTION1__',
                                                                                                      'line' => 443,
                                                                                                      'lookahead' => 0
                                                                                                    }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                           ],
                                                                                'line' => undef,
                                                                                'number' => 0,
                                                                                'patcount' => 1,
                                                                                'strcount' => 0,
                                                                                'uncommit' => undef
                                                                              }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                     ],
                                                          'vars' => ''
                                                        }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'trail' => bless( {
                                                  'calls' => [
                                                               'variable',
                                                               'shline'
                                                             ],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 330,
                                                  'name' => 'trail',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 0,
                                                                        'dircount' => 2,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '/(?=\\\\s*[\\};]|\\\\s*\\\\Z)/',
                                                                                              'hashname' => '__PATTERN1__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 331,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '(?=\\s*[};]|\\s*\\Z)',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 331,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'hashname' => '__DIRECTIVE2__',
                                                                                              'line' => 331,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<reject>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::UncondReject' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 1,
                                                                        'strcount' => 0,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '\'|>\'',
                                                                                              'hashname' => '__STRING1__',
                                                                                              'line' => 332,
                                                                                              'lookahead' => 0,
                                                                                              'pattern' => '|>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 332,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'implicit' => undef,
                                                                                              'line' => 332,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'subrule' => 'variable'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                     bless( {
                                                                                              'code' => '{ [\'var\',$item[3]] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 333,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => 332,
                                                                        'number' => 1,
                                                                        'patcount' => 0,
                                                                        'strcount' => 1,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '\'|\'',
                                                                                              'hashname' => '__STRING1__',
                                                                                              'line' => 335,
                                                                                              'lookahead' => 0,
                                                                                              'pattern' => '|'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 335,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'implicit' => undef,
                                                                                              'line' => 335,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'subrule' => 'shline'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                     bless( {
                                                                                              'code' => '{ [\'pipe\',$item[3]] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 336,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => 335,
                                                                        'number' => 2,
                                                                        'patcount' => 0,
                                                                        'strcount' => 1,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'undef' => bless( {
                                                  'calls' => [],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 390,
                                                  'name' => 'undef',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '/(undef|undefine)\\\\b/',
                                                                                              'hashname' => '__PATTERN1__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 391,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '(undef|undefine)\\b',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 391,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'description' => '/\\\\$?[a-zA-Z_][a-zA-Z0-9_]*/',
                                                                                              'hashname' => '__PATTERN2__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 391,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '\\$?[a-zA-Z_][a-zA-Z0-9_]*',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '{ 
	  [$thisline,$thiscolumn,$thisoffset,$XML::XSH2::Functions::SCRIPT,\'undefine\',$item[3]];
	 }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 392,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 2,
                                                                        'strcount' => 0,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'variable' => bless( {
                                                     'calls' => [],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 314,
                                                     'name' => 'variable',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'description' => '/\\\\$[a-zA-Z_][a-zA-Z0-9_]*/',
                                                                                                 'hashname' => '__PATTERN1__',
                                                                                                 'ldelim' => '/',
                                                                                                 'line' => 315,
                                                                                                 'lookahead' => 0,
                                                                                                 'mod' => '',
                                                                                                 'pattern' => '\\$[a-zA-Z_][a-zA-Z0-9_]*',
                                                                                                 'rdelim' => '/'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 1,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpath' => bless( {
                                                  'calls' => [
                                                               'xpstring',
                                                               'xpsimple',
                                                               'xpcont'
                                                             ],
                                                  'changed' => 0,
                                                  'impcount' => 0,
                                                  'line' => 179,
                                                  'name' => 'xpath',
                                                  'opcount' => 0,
                                                  'prods' => [
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'description' => '/(?=[\'"])/',
                                                                                              'hashname' => '__PATTERN1__',
                                                                                              'ldelim' => '/',
                                                                                              'line' => 180,
                                                                                              'lookahead' => 0,
                                                                                              'mod' => '',
                                                                                              'pattern' => '(?=[\'"])',
                                                                                              'rdelim' => '/'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                     bless( {
                                                                                              'code' => '$commit = 1',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 180,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<commit>'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'implicit' => undef,
                                                                                              'line' => 180,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'subrule' => 'xpstring'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                     bless( {
                                                                                              'code' => '{ $item[3] }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 181,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => undef,
                                                                        'number' => 0,
                                                                        'patcount' => 1,
                                                                        'strcount' => 0,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                               bless( {
                                                                        'actcount' => 1,
                                                                        'dircount' => 1,
                                                                        'error' => undef,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'implicit' => undef,
                                                                                              'line' => 183,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'subrule' => 'xpsimple'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                     bless( {
                                                                                              'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 183,
                                                                                              'lookahead' => 0,
                                                                                              'name' => '<skip:"">'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                     bless( {
                                                                                              'argcode' => undef,
                                                                                              'expected' => undef,
                                                                                              'line' => 183,
                                                                                              'lookahead' => 0,
                                                                                              'matchrule' => 0,
                                                                                              'max' => 1,
                                                                                              'min' => 0,
                                                                                              'repspec' => '?',
                                                                                              'subrule' => 'xpcont'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                     bless( {
                                                                                              'code' => '{ $item[1].join("",@{$item[3]}) }',
                                                                                              'hashname' => '__ACTION1__',
                                                                                              'line' => 184,
                                                                                              'lookahead' => 0
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                   ],
                                                                        'line' => 183,
                                                                        'number' => 1,
                                                                        'patcount' => 0,
                                                                        'strcount' => 0,
                                                                        'uncommit' => undef
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                               bless( {
                                                                        'actcount' => 0,
                                                                        'dircount' => 1,
                                                                        'error' => 1,
                                                                        'items' => [
                                                                                     bless( {
                                                                                              'commitonly' => '',
                                                                                              'hashname' => '__DIRECTIVE1__',
                                                                                              'line' => 186,
                                                                                              'lookahead' => 0,
                                                                                              'msg' => 'expected XPath, but got "}.substr($text,0,40).qq{ ..."'
                                                                                            }, 'XML::XSH2::Parser::_Runtime::Error' )
                                                                                   ],
                                                                        'line' => 186,
                                                                        'number' => 2,
                                                                        'patcount' => 0,
                                                                        'strcount' => 0,
                                                                        'uncommit' => 0
                                                                      }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                             ],
                                                  'vars' => ''
                                                }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpaxis' => bless( {
                                                   'calls' => [],
                                                   'changed' => 0,
                                                   'impcount' => 0,
                                                   'line' => 425,
                                                   'name' => 'xpaxis',
                                                   'opcount' => 0,
                                                   'prods' => [
                                                                bless( {
                                                                         'actcount' => 0,
                                                                         'dircount' => 0,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'description' => '/[-a-z]+::/',
                                                                                               'hashname' => '__PATTERN1__',
                                                                                               'ldelim' => '/',
                                                                                               'line' => 426,
                                                                                               'lookahead' => 0,
                                                                                               'mod' => '',
                                                                                               'pattern' => '[-a-z]+::',
                                                                                               'rdelim' => '/'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                    ],
                                                                         'line' => undef,
                                                                         'number' => 0,
                                                                         'patcount' => 1,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                              ],
                                                   'vars' => ''
                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpbracket' => bless( {
                                                      'calls' => [
                                                                   'xpinter'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 0,
                                                      'line' => 222,
                                                      'name' => 'xpbracket',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 1,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '\'(\'',
                                                                                                  'hashname' => '__STRING1__',
                                                                                                  'line' => 223,
                                                                                                  'lookahead' => 0,
                                                                                                  'pattern' => '('
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                         bless( {
                                                                                                  'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                                  'hashname' => '__DIRECTIVE1__',
                                                                                                  'line' => 223,
                                                                                                  'lookahead' => 0,
                                                                                                  'name' => '<skip:"">'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'implicit' => undef,
                                                                                                  'line' => 223,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'subrule' => 'xpinter'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                         bless( {
                                                                                                  'description' => '\')\'',
                                                                                                  'hashname' => '__STRING2__',
                                                                                                  'line' => 223,
                                                                                                  'lookahead' => 0,
                                                                                                  'pattern' => ')'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                         bless( {
                                                                                                  'code' => '{ "($item[3])" }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 224,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 0,
                                                                            'strcount' => 2,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpbrackets' => bless( {
                                                       'calls' => [
                                                                    'xpbracket',
                                                                    'xpfilters'
                                                                  ],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 227,
                                                       'name' => 'xpbrackets',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 1,
                                                                             'dircount' => 1,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/(?=\\\\()/',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 228,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => '(?=\\()',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'implicit' => undef,
                                                                                                   'line' => 228,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'subrule' => 'xpbracket'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                          bless( {
                                                                                                   'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                                   'hashname' => '__DIRECTIVE1__',
                                                                                                   'line' => 228,
                                                                                                   'lookahead' => 0,
                                                                                                   'name' => '<skip:"">'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                          bless( {
                                                                                                   'argcode' => undef,
                                                                                                   'expected' => undef,
                                                                                                   'line' => 228,
                                                                                                   'lookahead' => 0,
                                                                                                   'matchrule' => 0,
                                                                                                   'max' => 1,
                                                                                                   'min' => 0,
                                                                                                   'repspec' => '?',
                                                                                                   'subrule' => 'xpfilters'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                          bless( {
                                                                                                   'code' => '{ join "",$item[2],@{$item[4]} }',
                                                                                                   'hashname' => '__ACTION1__',
                                                                                                   'line' => 229,
                                                                                                   'lookahead' => 0
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 1,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpcont' => bless( {
                                                   'calls' => [
                                                                '_alternation_1_of_production_1_of_rule_xpcont',
                                                                'xpath'
                                                              ],
                                                   'changed' => 0,
                                                   'impcount' => 0,
                                                   'line' => 202,
                                                   'name' => 'xpcont',
                                                   'opcount' => 0,
                                                   'prods' => [
                                                                bless( {
                                                                         'actcount' => 1,
                                                                         'dircount' => 1,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'implicit' => 'xpfilters, or xpbrackets',
                                                                                               'line' => 205,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'subrule' => '_alternation_1_of_production_1_of_rule_xpcont'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                      bless( {
                                                                                               'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                               'hashname' => '__DIRECTIVE1__',
                                                                                               'line' => 205,
                                                                                               'lookahead' => 0,
                                                                                               'name' => '<skip:"">'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'expected' => undef,
                                                                                               'line' => 205,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'max' => 1,
                                                                                               'min' => 0,
                                                                                               'repspec' => '?',
                                                                                               'subrule' => 'xpath'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                      bless( {
                                                                                               'code' => '{ $item[1].join("",@{$item[3]}) }',
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'line' => 206,
                                                                                               'lookahead' => 0
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                    ],
                                                                         'line' => undef,
                                                                         'number' => 0,
                                                                         'patcount' => 0,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                bless( {
                                                                         'actcount' => 1,
                                                                         'dircount' => 0,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'implicit' => undef,
                                                                                               'line' => 208,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'subrule' => 'xpath'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                      bless( {
                                                                                               'code' => '{ $item[1] }',
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'line' => 209,
                                                                                               'lookahead' => 0
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                    ],
                                                                         'line' => 208,
                                                                         'number' => 1,
                                                                         'patcount' => 0,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                              ],
                                                   'vars' => ''
                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpfilter' => bless( {
                                                     'calls' => [
                                                                  'xpinter'
                                                                ],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 217,
                                                     'name' => 'xpfilter',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 1,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'description' => '\'[\'',
                                                                                                 'hashname' => '__STRING1__',
                                                                                                 'line' => 218,
                                                                                                 'lookahead' => 0,
                                                                                                 'pattern' => '['
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                        bless( {
                                                                                                 'argcode' => undef,
                                                                                                 'implicit' => undef,
                                                                                                 'line' => 218,
                                                                                                 'lookahead' => 0,
                                                                                                 'matchrule' => 0,
                                                                                                 'subrule' => 'xpinter'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                        bless( {
                                                                                                 'description' => '\']\'',
                                                                                                 'hashname' => '__STRING2__',
                                                                                                 'line' => 218,
                                                                                                 'lookahead' => 0,
                                                                                                 'pattern' => ']'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Literal' ),
                                                                                        bless( {
                                                                                                 'code' => '{ "[$item[2]]" }',
                                                                                                 'hashname' => '__ACTION1__',
                                                                                                 'line' => 219,
                                                                                                 'lookahead' => 0
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 0,
                                                                           'strcount' => 2,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpfilters' => bless( {
                                                      'calls' => [
                                                                   'xpfilter'
                                                                 ],
                                                      'changed' => 0,
                                                      'impcount' => 0,
                                                      'line' => 212,
                                                      'name' => 'xpfilters',
                                                      'opcount' => 0,
                                                      'prods' => [
                                                                   bless( {
                                                                            'actcount' => 1,
                                                                            'dircount' => 0,
                                                                            'error' => undef,
                                                                            'items' => [
                                                                                         bless( {
                                                                                                  'description' => '/(?=\\\\[)/',
                                                                                                  'hashname' => '__PATTERN1__',
                                                                                                  'ldelim' => '/',
                                                                                                  'line' => 213,
                                                                                                  'lookahead' => 0,
                                                                                                  'mod' => '',
                                                                                                  'pattern' => '(?=\\[)',
                                                                                                  'rdelim' => '/'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Token' ),
                                                                                         bless( {
                                                                                                  'argcode' => undef,
                                                                                                  'expected' => undef,
                                                                                                  'line' => 213,
                                                                                                  'lookahead' => 0,
                                                                                                  'matchrule' => 0,
                                                                                                  'max' => 100000000,
                                                                                                  'min' => 1,
                                                                                                  'repspec' => 's',
                                                                                                  'subrule' => 'xpfilter'
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                         bless( {
                                                                                                  'code' => '{ join("",@{$item[2]}) }',
                                                                                                  'hashname' => '__ACTION1__',
                                                                                                  'line' => 214,
                                                                                                  'lookahead' => 0
                                                                                                }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                       ],
                                                                            'line' => undef,
                                                                            'number' => 0,
                                                                            'patcount' => 1,
                                                                            'strcount' => 0,
                                                                            'uncommit' => undef
                                                                          }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                 ],
                                                      'vars' => ''
                                                    }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpinter' => bless( {
                                                    'calls' => [
                                                                 'xps',
                                                                 'xpintercont'
                                                               ],
                                                    'changed' => 0,
                                                    'impcount' => 0,
                                                    'line' => 232,
                                                    'name' => 'xpinter',
                                                    'opcount' => 0,
                                                    'prods' => [
                                                                 bless( {
                                                                          'actcount' => 1,
                                                                          'dircount' => 1,
                                                                          'error' => undef,
                                                                          'items' => [
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'implicit' => undef,
                                                                                                'line' => 233,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'subrule' => 'xps'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                       bless( {
                                                                                                'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                                'hashname' => '__DIRECTIVE1__',
                                                                                                'line' => 233,
                                                                                                'lookahead' => 0,
                                                                                                'name' => '<skip:"">'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                       bless( {
                                                                                                'argcode' => undef,
                                                                                                'expected' => undef,
                                                                                                'line' => 233,
                                                                                                'lookahead' => 0,
                                                                                                'matchrule' => 0,
                                                                                                'max' => 1,
                                                                                                'min' => 0,
                                                                                                'repspec' => '?',
                                                                                                'subrule' => 'xpintercont'
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                       bless( {
                                                                                                'code' => '{ join("",$item[1],@{$item[3]}) }',
                                                                                                'hashname' => '__ACTION1__',
                                                                                                'line' => 234,
                                                                                                'lookahead' => 0
                                                                                              }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                     ],
                                                                          'line' => undef,
                                                                          'number' => 0,
                                                                          'patcount' => 0,
                                                                          'strcount' => 0,
                                                                          'uncommit' => undef
                                                                        }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                               ],
                                                    'vars' => ''
                                                  }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpintercont' => bless( {
                                                        'calls' => [
                                                                     '_alternation_1_of_production_1_of_rule_xpintercont',
                                                                     'xpinter'
                                                                   ],
                                                        'changed' => 0,
                                                        'impcount' => 1,
                                                        'line' => 237,
                                                        'name' => 'xpintercont',
                                                        'opcount' => 0,
                                                        'prods' => [
                                                                     bless( {
                                                                              'actcount' => 1,
                                                                              'dircount' => 1,
                                                                              'error' => undef,
                                                                              'items' => [
                                                                                           bless( {
                                                                                                    'argcode' => undef,
                                                                                                    'implicit' => 'xpfilters, or xpbrackets',
                                                                                                    'line' => 240,
                                                                                                    'lookahead' => 0,
                                                                                                    'matchrule' => 0,
                                                                                                    'subrule' => '_alternation_1_of_production_1_of_rule_xpintercont'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                           bless( {
                                                                                                    'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                                    'hashname' => '__DIRECTIVE1__',
                                                                                                    'line' => 240,
                                                                                                    'lookahead' => 0,
                                                                                                    'name' => '<skip:"">'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                           bless( {
                                                                                                    'argcode' => undef,
                                                                                                    'expected' => undef,
                                                                                                    'line' => 240,
                                                                                                    'lookahead' => 0,
                                                                                                    'matchrule' => 0,
                                                                                                    'max' => 1,
                                                                                                    'min' => 0,
                                                                                                    'repspec' => '?',
                                                                                                    'subrule' => 'xpinter'
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                           bless( {
                                                                                                    'code' => '{ join("",$item[1],@{$item[3]}) }',
                                                                                                    'hashname' => '__ACTION1__',
                                                                                                    'line' => 241,
                                                                                                    'lookahead' => 0
                                                                                                  }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                         ],
                                                                              'line' => undef,
                                                                              'number' => 0,
                                                                              'patcount' => 0,
                                                                              'strcount' => 0,
                                                                              'uncommit' => undef
                                                                            }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                   ],
                                                        'vars' => ''
                                                      }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xplocationstep' => bless( {
                                                           'calls' => [
                                                                        'xpaxis',
                                                                        'xpnodetest'
                                                                      ],
                                                           'changed' => 0,
                                                           'impcount' => 0,
                                                           'line' => 431,
                                                           'name' => 'xplocationstep',
                                                           'opcount' => 0,
                                                           'prods' => [
                                                                        bless( {
                                                                                 'actcount' => 1,
                                                                                 'dircount' => 0,
                                                                                 'error' => undef,
                                                                                 'items' => [
                                                                                              bless( {
                                                                                                       'argcode' => undef,
                                                                                                       'expected' => undef,
                                                                                                       'line' => 432,
                                                                                                       'lookahead' => 0,
                                                                                                       'matchrule' => 0,
                                                                                                       'max' => 1,
                                                                                                       'min' => 0,
                                                                                                       'repspec' => '?',
                                                                                                       'subrule' => 'xpaxis'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                              bless( {
                                                                                                       'argcode' => undef,
                                                                                                       'implicit' => undef,
                                                                                                       'line' => 432,
                                                                                                       'lookahead' => 0,
                                                                                                       'matchrule' => 0,
                                                                                                       'subrule' => 'xpnodetest'
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                              bless( {
                                                                                                       'code' => '{ [ (@{$item[1]} ? $item[1][0] : \'child::\'),$item[3] ] }',
                                                                                                       'hashname' => '__ACTION1__',
                                                                                                       'line' => 433,
                                                                                                       'lookahead' => 0
                                                                                                     }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                            ],
                                                                                 'line' => undef,
                                                                                 'number' => 0,
                                                                                 'patcount' => 0,
                                                                                 'strcount' => 0,
                                                                                 'uncommit' => undef
                                                                               }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                      ],
                                                           'vars' => ''
                                                         }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpnodetest' => bless( {
                                                       'calls' => [],
                                                       'changed' => 0,
                                                       'impcount' => 0,
                                                       'line' => 428,
                                                       'name' => 'xpnodetest',
                                                       'opcount' => 0,
                                                       'prods' => [
                                                                    bless( {
                                                                             'actcount' => 0,
                                                                             'dircount' => 0,
                                                                             'error' => undef,
                                                                             'items' => [
                                                                                          bless( {
                                                                                                   'description' => '/node\\\\(\\\\)|text\\\\(\\\\)|comment\\\\(\\\\)|processing-instruction\\\\(\\\\s*(?:"[^"]*"\\\\s*|\'[^\'*]\'\\\\s*)?\\\\)|[^\\\\(\\\\[\\\\/\\\\"\\\\\'\\\\&\\\\;\\\\s]+/',
                                                                                                   'hashname' => '__PATTERN1__',
                                                                                                   'ldelim' => '/',
                                                                                                   'line' => 429,
                                                                                                   'lookahead' => 0,
                                                                                                   'mod' => '',
                                                                                                   'pattern' => 'node\\(\\)|text\\(\\)|comment\\(\\)|processing-instruction\\(\\s*(?:"[^"]*"\\s*|\'[^\'*]\'\\s*)?\\)|[^\\(\\[\\/\\"\\\'\\&\\;\\s]+',
                                                                                                   'rdelim' => '/'
                                                                                                 }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                        ],
                                                                             'line' => undef,
                                                                             'number' => 0,
                                                                             'patcount' => 1,
                                                                             'strcount' => 0,
                                                                             'uncommit' => undef
                                                                           }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                  ],
                                                       'vars' => ''
                                                     }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xps' => bless( {
                                                'calls' => [],
                                                'changed' => 0,
                                                'impcount' => 0,
                                                'line' => 244,
                                                'name' => 'xps',
                                                'opcount' => 0,
                                                'prods' => [
                                                             bless( {
                                                                      'actcount' => 0,
                                                                      'dircount' => 0,
                                                                      'error' => undef,
                                                                      'items' => [
                                                                                   bless( {
                                                                                            'description' => '/(?: [^\\\\$\\\\[\\\\]()\'"\\};]+ |
              \\\\$(?!\\\\\\{) |
              \\\\$\\\\\\{ (?:\\\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\\\\\{.*?\\\\\\} |
                       \\\\(.+?\\\\)
                   )
               \\\\\\} |
              \'(?:\\\\$\\\\\\{ (?: \\\\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\\\\{.*?\\\\\\} | \\\\(.+?\\\\)) \\\\\\} | 
                  \\\\$(?!\\\\\\{) | [^\\\\$\'] | \\\\\\\\\\\\$
               )*\' |
              "(?:\\\\$\\\\\\{ (?: \\\\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\\\\{.*?\\\\\\} | \\\\(.+?\\\\)) \\\\\\} |
                  \\\\$(?!\\\\\\{) | [^\\\\$"] | \\\\\\\\\\\\$
               )*"
          )*/x',
                                                                                            'hashname' => '__PATTERN1__',
                                                                                            'ldelim' => '/',
                                                                                            'line' => 245,
                                                                                            'lookahead' => 0,
                                                                                            'mod' => 'x',
                                                                                            'pattern' => '(?: [^\\$\\[\\]()\'"};]+ |
              \\$(?!\\{) |
              \\$\\{ (?:\\$?[a-zA-Z_][a-zA-Z0-9_]* |
                       \\{.*?\\} |
                       \\(.+?\\)
                   )
               \\} |
              \'(?:\\$\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\{.*?\\} | \\(.+?\\)) \\} | 
                  \\$(?!\\{) | [^\\$\'] | \\\\\\$
               )*\' |
              "(?:\\$\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\{.*?\\} | \\(.+?\\)) \\} |
                  \\$(?!\\{) | [^\\$"] | \\\\\\$
               )*"
          )*',
                                                                                            'rdelim' => '/'
                                                                                          }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                 ],
                                                                      'line' => undef,
                                                                      'number' => 0,
                                                                      'patcount' => 1,
                                                                      'strcount' => 0,
                                                                      'uncommit' => undef
                                                                    }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                           ],
                                                'vars' => ''
                                              }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpsimple' => bless( {
                                                     'calls' => [
                                                                  'xpbrackets'
                                                                ],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 188,
                                                     'name' => 'xpsimple',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'description' => '/(?: 
              \\\\$\\\\\\{ (?: \\\\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\\\\{.*?\\\\\\} | \\\\(.+?\\\\) ) \\\\\\} |
              \\\\$(?!\\\\\\{) |
              [^-:\\\\$\\\\[\\\\]\\{\\}|"\'\\\\ \\\\s();] |
              -[^-\\\\[\\\\]\\{\\}|"\'\\\\ \\\\s();]
          )
          (?:
              \\\\$\\\\\\{ (?: \\\\$?[a-zA-Z_][a-zA-Z0-9_]* | \\\\\\{.*?\\\\\\} | \\\\(.+?\\\\) ) \\\\\\} |
              \\\\$(?!\\\\\\{) |
              [^\\\\[\\\\]\\\\$\\{\\}|"\'\\\\ \\\\s();]
          )*/x',
                                                                                                 'hashname' => '__PATTERN1__',
                                                                                                 'ldelim' => '/',
                                                                                                 'line' => 189,
                                                                                                 'lookahead' => 0,
                                                                                                 'mod' => 'x',
                                                                                                 'pattern' => '(?: 
              \\$\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\{.*?\\} | \\(.+?\\) ) \\} |
              \\$(?!\\{) |
              [^-:\\$\\[\\]{}|"\'\\ \\s();] |
              -[^-\\[\\]{}|"\'\\ \\s();]
          )
          (?:
              \\$\\{ (?: \\$?[a-zA-Z_][a-zA-Z0-9_]* | \\{.*?\\} | \\(.+?\\) ) \\} |
              \\$(?!\\{) |
              [^\\[\\]\\${}|"\'\\ \\s();]
          )*',
                                                                                                 'rdelim' => '/'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 1,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' ),
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'argcode' => undef,
                                                                                                 'implicit' => undef,
                                                                                                 'line' => 200,
                                                                                                 'lookahead' => 0,
                                                                                                 'matchrule' => 0,
                                                                                                 'subrule' => 'xpbrackets'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Subrule' )
                                                                                      ],
                                                                           'line' => 200,
                                                                           'number' => 1,
                                                                           'patcount' => 0,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpstep' => bless( {
                                                   'calls' => [
                                                                'xplocationstep',
                                                                'xpfilter'
                                                              ],
                                                   'changed' => 0,
                                                   'impcount' => 0,
                                                   'line' => 436,
                                                   'name' => 'xpstep',
                                                   'opcount' => 0,
                                                   'prods' => [
                                                                bless( {
                                                                         'actcount' => 1,
                                                                         'dircount' => 1,
                                                                         'error' => undef,
                                                                         'items' => [
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'implicit' => undef,
                                                                                               'line' => 437,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'subrule' => 'xplocationstep'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Subrule' ),
                                                                                      bless( {
                                                                                               'code' => 'my $oldskip = $skip; $skip=""; $oldskip',
                                                                                               'hashname' => '__DIRECTIVE1__',
                                                                                               'line' => 437,
                                                                                               'lookahead' => 0,
                                                                                               'name' => '<skip:"">'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Directive' ),
                                                                                      bless( {
                                                                                               'argcode' => undef,
                                                                                               'expected' => undef,
                                                                                               'line' => 437,
                                                                                               'lookahead' => 0,
                                                                                               'matchrule' => 0,
                                                                                               'max' => 1,
                                                                                               'min' => 0,
                                                                                               'repspec' => '?',
                                                                                               'subrule' => 'xpfilter'
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Repetition' ),
                                                                                      bless( {
                                                                                               'code' => '{ [ @{$item[1]}, @{$item[3]}] }',
                                                                                               'hashname' => '__ACTION1__',
                                                                                               'line' => 438,
                                                                                               'lookahead' => 0
                                                                                             }, 'XML::XSH2::Parser::_Runtime::Action' )
                                                                                    ],
                                                                         'line' => undef,
                                                                         'number' => 0,
                                                                         'patcount' => 0,
                                                                         'strcount' => 0,
                                                                         'uncommit' => undef
                                                                       }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                              ],
                                                   'vars' => ''
                                                 }, 'XML::XSH2::Parser::_Runtime::Rule' ),
                              'xpstring' => bless( {
                                                     'calls' => [],
                                                     'changed' => 0,
                                                     'impcount' => 0,
                                                     'line' => 260,
                                                     'name' => 'xpstring',
                                                     'opcount' => 0,
                                                     'prods' => [
                                                                  bless( {
                                                                           'actcount' => 0,
                                                                           'dircount' => 0,
                                                                           'error' => undef,
                                                                           'items' => [
                                                                                        bless( {
                                                                                                 'description' => '/\'(?:\\\\$\\\\\\{(?:\\\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\\\\{.*?\\\\\\}|\\\\(.+?\\\\))\\\\\\}|\\\\$(?!\\\\\\{)|[^\\\\$\']|\\\\\\\\\\\\$)*\' |
              "(?:\\\\$\\\\\\{(?:\\\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\\\\\{.*?\\\\\\}|\\\\(.+?\\\\))\\\\\\}|\\\\$(?!\\\\\\{)|[^\\\\$"]|\\\\\\\\\\\\$)*"/x',
                                                                                                 'hashname' => '__PATTERN1__',
                                                                                                 'ldelim' => '/',
                                                                                                 'line' => 261,
                                                                                                 'lookahead' => 0,
                                                                                                 'mod' => 'x',
                                                                                                 'pattern' => '\'(?:\\$\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\{.*?\\}|\\(.+?\\))\\}|\\$(?!\\{)|[^\\$\']|\\\\\\$)*\' |
              "(?:\\$\\{(?:\\$?[a-zA-Z_][a-zA-Z0-9_]*|\\{.*?\\}|\\(.+?\\))\\}|\\$(?!\\{)|[^\\$"]|\\\\\\$)*"',
                                                                                                 'rdelim' => '/'
                                                                                               }, 'XML::XSH2::Parser::_Runtime::Token' )
                                                                                      ],
                                                                           'line' => undef,
                                                                           'number' => 0,
                                                                           'patcount' => 1,
                                                                           'strcount' => 0,
                                                                           'uncommit' => undef
                                                                         }, 'XML::XSH2::Parser::_Runtime::Production' )
                                                                ],
                                                     'vars' => ''
                                                   }, 'XML::XSH2::Parser::_Runtime::Rule' )
                            },
                 'startcode' => ''
               }, 'XML::XSH2::Parser::_Runtime' );
}