Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - grammar - vstring placeholder
  • Loading branch information
fglock committed Sep 24, 2013
1 parent 2a9824c commit c55f350
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 54 deletions.
55 changes: 29 additions & 26 deletions html/perlito5.js
Expand Up @@ -10187,47 +10187,50 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
return (p5context([1], p5want));
})()], 0), function () { return p5context([(function () {
var v_m2;
v_m2 = (p5call(v_grammar, "digits_underscore", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
v_m2 = (p5call(v_grammar, "val_int", 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('val_int', (v_m2));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
})()], 0) }), function () { return p5context([(function () {
var v_last_match_null;
v_last_match_null = (0);
var v_m;
v_m = (v_MATCH);
if ( !( (((('.' == p5pkg["Perlito5::Grammar::Number"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 1], 0)) && p5bool((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'))))))) && p5bool((function () {
var v_m2;
v_m2 = (p5call(v_grammar, "digits_underscore", 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')));
return (p5context([1], p5want));
var v_to;
v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
p5while(function () {
if ( (p5num(v_to) == p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'))) ) {
v_last_match_null = ((p5num(v_last_match_null) + 1));
}
else {
return (p5context([0], p5want));
}
})())) && p5bool((function () {
var v_m;
v_last_match_null = (0);
};
v_m = (v_MATCH);
if ( !( ((('.' == p5pkg["Perlito5::Grammar::Number"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 1], 0)) && p5bool((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'))))))) && p5bool((function () {
var v_m2;
v_m2 = (p5call(v_grammar, "digits_underscore", 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')));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
})()))) ) {
v_MATCH = (v_m);
v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
}, function () { return p5and(p5context([p5and(p5context([p5and(('.' == p5pkg["Perlito5::Grammar::Number"].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), function () { return p5context([(function () {
var v_m2;
v_m2 = (p5call(v_grammar, "digits_underscore", 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')));
if ( (v_MATCH)._hash_.hasOwnProperty('digits_underscore') ) {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget_array('digits_underscore')._array_.p5push([v_m2]);
}
else {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('digits_underscore', ((new p5ArrayRef([v_m2]))));
};
return (p5context([1], p5want));
})()))) ) {
v_MATCH = (v_m);
};
}
else {
return (p5context([0], p5want));
}
})()], 0) })], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
v_MATCH = (v_m);
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_to));
return (p5context([1], p5want));
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
Expand Down
55 changes: 30 additions & 25 deletions perlito5.pl
Expand Up @@ -7451,43 +7451,48 @@ sub Perlito5::Grammar::Number::val_version {
};
1
})) && ((do {
my $m2 = $grammar->digits_underscore($str, $MATCH->{'to'});
my $m2 = $grammar->val_int($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
$MATCH->{'val_int'} = $m2;
1
}
else {
0
}
}))) && ((do {
my $last_match_null = 0;
my $m = $MATCH;
if (!((((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
my $m2 = $grammar->digits_underscore($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
1
my $to = $MATCH->{'to'};
for ( ; (((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
my $m2 = $grammar->digits_underscore($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
if (exists($MATCH->{'digits_underscore'})) {
push(@{$MATCH->{'digits_underscore'}}, $m2)
}
else {
0
}
}))) && ((do {
my $m = $MATCH;
if (!(((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
my $m2 = $grammar->digits_underscore($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
1
}
else {
0
}
})))))) {
$MATCH = $m
};
1
})))))) {
$MATCH = $m
$MATCH->{'digits_underscore'} = [$m2]
};
1
}
else {
0
}
})))) && (($last_match_null < 2))); {

} ) {
if (($to == $MATCH->{'to'})) {
$last_match_null = ($last_match_null + 1)
}
else {
$last_match_null = 0
};
$m = $MATCH;
$to = $MATCH->{'to'}
};
$MATCH = $m;
$MATCH->{'to'} = $to;
1
})))));
($tmp ? $MATCH : 0)
Expand Down
19 changes: 17 additions & 2 deletions src5/lib/Perlito5/Grammar/Number.pm
Expand Up @@ -20,6 +20,9 @@ token term_digit {
| <Perlito5::Grammar::Number.val_octal>
# 0123
{ $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.val_octal"}) ] }
# | <Perlito5::Grammar::Number.val_version>
# # 123.456.789
# { print "version\n" }
| <Perlito5::Grammar::Number.val_num>
# 123.456
{ $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.val_num"}) ] }
Expand Down Expand Up @@ -65,7 +68,7 @@ token digits_underscore {
token val_octal {
'0' [ ['x'|'X'] <.Perlito5::Grammar.word>+ # XXX test for hex digits
| ['b'|'B'] [ '_' | '0' | '1' ]+
| [ '_' | \d]+ # XXX test for octal number
| [ '_' | \d]+ # XXX test for octal digits
]
{ $MATCH->{capture} = Perlito5::AST::Val::Int->new( int => oct(lc(Perlito5::Match::flat($MATCH))) ) }
};
Expand All @@ -81,7 +84,19 @@ token val_int {

token val_version {
# TODO - this should return a "VSTRING"
['v']? <.digits_underscore> [ '.' <.digits_underscore> [ '.' <.digits_underscore> ]? ]?
#
# $ perl5.16 -e ' use strict; $a = v100; print ref(\$a) '
# VSTRING
# $ perl5.16 -e ' use strict; sub v100 { 123 } $a = v100; print ref(\$a)
# SCALAR
# $ perl5.16 -e ' use strict; sub v100 { 123 } $a = v100.100; print ref(\$a) '
# VSTRING

['v']? <val_int> [ '.' <digits_underscore> ]*
# {
# print "HERE!\n";
# return;
# }
};

1;
Expand Down
2 changes: 1 addition & 1 deletion t5/01-perlito/030-num.t
Expand Up @@ -43,5 +43,5 @@ say 'ok 8 - undefined var';

$v = eval '013.4e2';
print 'not ' if $v != 11400;
say 'ok 9 - octal integer followed by dot # TODO';
say 'ok 9 - octal integer followed by dot';

0 comments on commit c55f350

Please sign in to comment.