Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - grammar - #line
  • Loading branch information
fglock committed Aug 10, 2013
1 parent abcb270 commit b1779df
Show file tree
Hide file tree
Showing 4 changed files with 266 additions and 12 deletions.
130 changes: 127 additions & 3 deletions html/perlito5.js
Expand Up @@ -8727,7 +8727,7 @@ return r;
})()], 0), function () { return p5context([(function () {
var v_pos1;
(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
return (p5or(p5context([(function () {
return (p5or(p5or(p5context([(function () {
return (p5and(p5context([p5and(('=' == p5pkg["Perlito5::Grammar::Space"].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_pos1;
(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
Expand Down Expand Up @@ -8789,6 +8789,126 @@ return r;
})()], p5want) }));
})()], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5and(p5and(p5and(p5and(p5and(p5and(p5and(p5context([p5and(('#' == p5pkg["Perlito5::Grammar::Space"].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_last_match_null;
(v_last_match_null = (0));
var v_m;
(v_m = (v_MATCH));
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 {
(v_last_match_null = (0));
};
(v_m = (v_MATCH));
(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
}, function () { return p5and(p5context([(function () {
var v_pos1;
(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
return (p5or(p5context([(function () {
return (p5and((' ' == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5context([p5and((String.fromCharCode(9) == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) })], p5want)], p5want));
})()], p5want) }));
})()], 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) }), function () { return p5context([p5and(('line' == p5pkg["Perlito5::Grammar::Space"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 4], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((4 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0) }), function () { return p5context([(function () {
var v_last_match_null;
(v_last_match_null = (0));
var v_m;
(v_m = (v_MATCH));
var v_to;
(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
var v_count;
(v_count = (0));
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 {
(v_last_match_null = (0));
};
(v_m = (v_MATCH));
(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
(v_count = ((p5num(v_count) + 1)));
}, function () { return p5and(p5context([(function () {
var v_pos1;
(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
return (p5or(p5context([(function () {
return (p5and((' ' == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5context([p5and((String.fromCharCode(9) == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) })], p5want)], p5want));
})()], p5want) }));
})()], 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([(p5num(v_count) > 0)], p5want));
})()], 0) }), function () { return p5context([(function () {
var v_m2;
(v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "digits", 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.digits', (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));
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 {
(v_last_match_null = (0));
};
(v_m = (v_MATCH));
(v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
}, function () { return p5and(p5context([(function () {
var v_pos1;
(v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')));
return (p5or(p5context([(function () {
return (p5and((' ' == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5context([p5and((String.fromCharCode(9) == p5pkg["Perlito5::Grammar::Space"].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')))))], p5want) })], p5want)], p5want));
})()], p5want) }));
})()], 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) }), function () { return p5context([(function () {
var v_m2;
(v_m2 = (p5call(v_grammar, "to_eol", 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));
}
})()], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
(p5make_package("Perlito5")["v_LINE_NUMBER"] = ((0 + p5num(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar.digits')), 0)))));
return (p5context([1], p5want));
})()], p5want) })], p5want));
})()], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([1], p5want));
})()], p5want) }));
Expand Down Expand Up @@ -11600,10 +11720,14 @@ return r;
(p5pkg["Perlito5"]["v_BYTES"] = (0));
// our p5pkg["Perlito5"]["v_CALLER"]
(p5pkg["Perlito5"]["v_CALLER"] = ((new p5ArrayRef([]))));
// our p5pkg["Perlito5"]["v_PKG_NAME"]
(p5pkg["Perlito5"]["v_PKG_NAME"] = (''));
// our p5pkg["Perlito5"]["Hash_DATA_SECTION"]
(p5pkg["Perlito5"]["Hash_DATA_SECTION"] = {});
// our p5pkg["Perlito5"]["v_PKG_NAME"]
(p5pkg["Perlito5"]["v_PKG_NAME"] = (''));
// our p5pkg["Perlito5"]["v_LINE_NUMBER"]
(p5pkg["Perlito5"]["v_LINE_NUMBER"] = (0));
// our p5pkg["Perlito5"]["v_FILE_NAME"]
(p5pkg["Perlito5"]["v_FILE_NAME"] = (''));
// our p5pkg["Perlito5"]["v_PACKAGES"]
(p5pkg["Perlito5"]["v_PACKAGES"] = ((new p5HashRef({'STDERR' : 1, 'STDOUT' : 1, 'STDIN' : 1, 'main' : 1, 'strict' : 1, 'warnings' : 1, 'utf8' : 1, 'bytes' : 1, 'encoding' : 1, 'UNIVERSAL' : 1, 'CORE' : 1, 'CORE::GLOBAL' : 1, 'Perlito5::IO' : 1}))));
p5for(p5make_package("Perlito5"), "v__", function () {
Expand Down
116 changes: 114 additions & 2 deletions perlito5.pl
Expand Up @@ -6476,7 +6476,7 @@ sub Perlito5::Grammar::Space::start_of_line {
}
})) && ((do {
((my $pos1) = $MATCH->{'to'});
(((do {
((((do {
(((('=' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))) && ((do {
((my $pos1) = $MATCH->{'to'});
(((((do {
Expand Down Expand Up @@ -6529,6 +6529,116 @@ sub Perlito5::Grammar::Space::start_of_line {
})))
})))
})) || ((do {
($MATCH->{'to'} = $pos1);
((((((((((('#' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))) && ((do {
((my $last_match_null) = 0);
((my $m) = $MATCH);
((my $to) = $MATCH->{'to'});
for ( ; (((do {
((my $pos1) = $MATCH->{'to'});
(((do {
((' ' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
})) || ((do {
($MATCH->{'to'} = $pos1);
((((chr(9) eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))))
})))
})) && (($last_match_null < 2))); do {{

}} ) {
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
}))) && ((('line' eq substr($str, $MATCH->{'to'}, 4)) && (($MATCH->{'to'} = (4 + $MATCH->{'to'})))))) && ((do {
((my $last_match_null) = 0);
((my $m) = $MATCH);
((my $to) = $MATCH->{'to'});
((my $count) = 0);
for ( ; (((do {
((my $pos1) = $MATCH->{'to'});
(((do {
((' ' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
})) || ((do {
($MATCH->{'to'} = $pos1);
((((chr(9) eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))))
})))
})) && (($last_match_null < 2))); do {{

}} ) {
if (($to == $MATCH->{'to'})) {
($last_match_null = ($last_match_null + 1))
}
else {
($last_match_null = 0)
};
($m = $MATCH);
($to = $MATCH->{'to'});
($count = ($count + 1))
};
($MATCH = $m);
($MATCH->{'to'} = $to);
($count > 0)
}))) && ((do {
((my $m2) = Perlito5::Grammar->digits($str, $MATCH->{'to'}));
if ($m2) {
($MATCH->{'to'} = $m2->{'to'});
($MATCH->{'Perlito5::Grammar.digits'} = $m2);
1
}
else {
0
}
}))) && ((do {
((my $last_match_null) = 0);
((my $m) = $MATCH);
((my $to) = $MATCH->{'to'});
for ( ; (((do {
((my $pos1) = $MATCH->{'to'});
(((do {
((' ' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
})) || ((do {
($MATCH->{'to'} = $pos1);
((((chr(9) eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'}))))))
})))
})) && (($last_match_null < 2))); do {{

}} ) {
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
}))) && ((do {
((my $m2) = $grammar->to_eol($str, $MATCH->{'to'}));
if ($m2) {
($MATCH->{'to'} = $m2->{'to'});
1
}
else {
0
}
}))) && ((do {
($MATCH->{'str'} = $str);
($Perlito5::LINE_NUMBER = (0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'})));
;
1
}))))
}))) || ((do {
($MATCH->{'to'} = $pos1);
(1)
})))
Expand Down Expand Up @@ -13222,8 +13332,10 @@ package Perlito5;
((our $UTF8) = 0);
((our $BYTES) = 0);
((our $CALLER) = []);
((our $PKG_NAME) = '');
((our %DATA_SECTION) = ());
((our $PKG_NAME) = '');
((our $LINE_NUMBER) = 0);
((our $FILE_NAME) = '');
((our $PACKAGES) = {'STDERR', 1, 'STDOUT', 1, 'STDIN', 1, 'main', 1, 'strict', 1, 'warnings', 1, 'utf8', 1, 'bytes', 1, 'encoding', 1, 'UNIVERSAL', 1, 'CORE', 1, 'CORE::GLOBAL', 1, 'Perlito5::IO', 1});
for (split(':', (($ENV{'PERL5LIB'} || '')))) {
push(@INC, $_ )
Expand Down
16 changes: 16 additions & 0 deletions src5/lib/Perlito5/Grammar/Space.pm
Expand Up @@ -101,6 +101,22 @@ token start_of_line {
| 'begin' <.pod_begin>
| 'for' <.pod_begin> # TODO - fixme: recognize a single paragraph (double-newline)
]
| '#'
[ ' ' | \t ]*
'line'
[ ' ' | \t ]+
<Perlito5::Grammar.digits>
[ ' ' | \t ]*

# TODO: optional filename (specified with or without quotes)

<.to_eol>
{
$Perlito5::LINE_NUMBER = 0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'});

# TODO: filename
# $Perlito5::FILE_NAME = ...;
}
| ''
]
};
Expand Down
16 changes: 9 additions & 7 deletions src5/lib/Perlito5/Runtime.pm
Expand Up @@ -17,14 +17,16 @@ $^V = bless( { 'original' => 'v5.14.1',
}, 'version' )
unless defined $^V;

our $EXPAND_USE = 1;
our $STRICT = 0;
our $WARNINGS = 0;
our $UTF8 = 0;
our $BYTES = 0;
our $CALLER = [];
our $PKG_NAME = ''; # current package being parsed
our $EXPAND_USE = 1;
our $STRICT = 0;
our $WARNINGS = 0;
our $UTF8 = 0;
our $BYTES = 0;
our $CALLER = [];
our %DATA_SECTION = (); # contents of the __DATA__ sections per package
our $PKG_NAME = ''; # current package being compiled
our $LINE_NUMBER = 0; # current line number being compiled
our $FILE_NAME = ''; # current file name being compiled

# list of packages that "exist" - this is used by the indirect-object parser
our $PACKAGES = {
Expand Down

0 comments on commit b1779df

Please sign in to comment.