Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - grammar - allow special variables in "for" loop
  • Loading branch information
fglock committed May 28, 2014
1 parent 616768c commit 234d9e6
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 14 deletions.
16 changes: 12 additions & 4 deletions html/perlito5.js
Expand Up @@ -4962,7 +4962,7 @@ var List__ = [];
})()], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5and(p5and(p5context([(function () {
return (p5context([p5and(p5and(p5and(p5context([(function () {
var v_m2;
v_m2 = (p5call(p5pkg["Perlito5::Grammar::Space"], "opt_ws", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
if ( p5bool(v_m2) ) {
Expand All @@ -4973,19 +4973,27 @@ var List__ = [];
return (p5context([0], p5want));
}
})()], 0), function () { return p5context([(function () {
var v_tmp;
v_tmp = (v_MATCH);
v_MATCH = ((new p5HashRef(p5a_to_h(p5list_to_a('str', v_str, 'from', (v_tmp || (v_tmp = new p5HashRef({})))._hash_.p5hget('to'), 'to', (v_tmp || (v_tmp = new p5HashRef({})))._hash_.p5hget('to'))))));
var v_res;
v_res = (p5context([p5and(('$' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 1], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0));
v_MATCH = (v_tmp);
return (( p5bool(v_res) ? 1 : 0));
})()], 0) }), function () { return p5context([(function () {
var v_m2;
v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "var_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
v_m2 = (p5call(p5pkg["Perlito5::Grammar::Sigil"], "term_sigil", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
if ( p5bool(v_m2) ) {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((v_m2 || (v_m2 = new p5HashRef({})))._hash_.p5hget('to')));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Grammar.var_ident', (v_m2));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Grammar::Sigil.term_sigil', (v_m2));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
})()], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('_tmp', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar.var_ident')), 0)));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('_tmp', ((p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Sigil.term_sigil')), p5want) || (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Sigil.term_sigil')), p5want) = new p5ArrayRef([])))._array_.p5aget(1)));
return (p5context([1], p5want));
})()], p5want) })], p5want));
})()], p5want) }));
Expand Down
12 changes: 9 additions & 3 deletions perlito5.pl
Expand Up @@ -2505,18 +2505,24 @@ sub Perlito5::Grammar::for {
0
}
}) && (do {
my $m2 = Perlito5::Grammar->var_ident($str, $MATCH->{'to'});
my $tmp = $MATCH;
$MATCH = {'str' => $str, 'from' => $tmp->{'to'}, 'to' => $tmp->{'to'}};
my $res = ('$' eq substr($str, $MATCH->{'to'}, 1) && ($MATCH->{'to'} = 1 + $MATCH->{'to'}));
$MATCH = $tmp;
$res ? 1 : 0
}) && (do {
my $m2 = Perlito5::Grammar::Sigil->term_sigil($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
$MATCH->{'Perlito5::Grammar.var_ident'} = $m2;
$MATCH->{'Perlito5::Grammar::Sigil.term_sigil'} = $m2;
1
}
else {
0
}
}) && (do {
$MATCH->{'str'} = $str;
$MATCH->{'_tmp'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.var_ident'});
$MATCH->{'_tmp'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Sigil.term_sigil'})->[1];
1
}))
})
Expand Down
9 changes: 2 additions & 7 deletions src5/lib/Perlito5/Grammar/Control.pm
Expand Up @@ -118,13 +118,8 @@ token for {
[
[ <.Perlito5::Grammar::Space.ws> <Perlito5::Grammar::Expression.term_declarator>
{ $MATCH->{_tmp} = Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Expression.term_declarator"})->[1] }
| <.Perlito5::Grammar::Space.opt_ws> <Perlito5::Grammar.var_ident>
{ $MATCH->{_tmp} = Perlito5::Match::flat($MATCH->{"Perlito5::Grammar.var_ident"}) }

# | <.Perlito5::Grammar::Space.opt_ws> <before '$'> <Perlito5::Grammar::Sigil.term_sigil>
# { $MATCH->{_tmp} = Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Sigil.term_sigil"})->[1] }


| <.Perlito5::Grammar::Space.opt_ws> <before '$'> <Perlito5::Grammar::Sigil.term_sigil>
{ $MATCH->{_tmp} = Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Sigil.term_sigil"})->[1] }
]
<.Perlito5::Grammar::Space.opt_ws>
'(' <Perlito5::Grammar::Expression.paren_parse> ')' <.Perlito5::Grammar::Space.opt_ws>
Expand Down

0 comments on commit 234d9e6

Please sign in to comment.