diff --git a/html/perlito5.js b/html/perlito5.js
index bf506bcf1..c36db8391 100644
--- a/html/perlito5.js
+++ b/html/perlito5.js
@@ -3043,39 +3043,6 @@ var p5100 = p5pkg['main'];
;
// use Perlito5::Grammar::Statement
;
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['.', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['0', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['1', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['2', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['3', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['4', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['5', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['6', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['7', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['8', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
- p5pkg["Perlito5::Grammar::Precedence"].add_term(['9', function (List__, p5want) {
- return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
-}], null);
p5pkg["Perlito5::Grammar::Precedence"].add_term(['my', function (List__, p5want) {
return (p5call(p5pkg["Perlito5::Grammar::Expression"], "term_declarator", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
}], null);
@@ -3585,58 +3552,6 @@ var p5100 = p5pkg['main'];
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar::Expression", "term_digit", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
- v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
- var v_tmp;
- v_tmp = (p5context([p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- return (p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "val_num", 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.val_num', (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('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar.val_num')), 1))))));
- return (p5context([1], p5want));
- })()], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(p5pkg["Perlito5::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('Perlito5::Grammar.val_int', (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('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar.val_int')), 1))))));
- return (p5context([1], p5want));
- })()], p5want) })], p5want));
- })()], p5want) }));
- })()], 0)], 0));
- return (( p5bool(v_tmp) ? v_MATCH : 0));
- });
p5typeglob_set("Perlito5::Grammar::Expression", "term_ternary", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
@@ -7259,10 +7174,10 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
return (p5or(p5context([(function () {
return (p5and(p5context([(function () {
var v_m2;
- v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "val_version", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Number"], "val_version", 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.val_version', (v_m2));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Grammar::Number.val_version', (v_m2));
return (p5context([1], p5want));
}
else {
@@ -8701,10 +8616,10 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
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));
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Number"], "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));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Grammar::Number.digits', (v_m2));
return (p5context([1], p5want));
}
else {
@@ -8751,7 +8666,7 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
}
})()], 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))));
+ 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::Number.digits')), 0))));
return (p5context([1], p5want));
})()], p5want) })], p5want));
})()], 0) }), function () { return p5context([(function () {
@@ -9603,86 +9518,100 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
})()
;
(function () {
- p5make_package("Perlito5::Grammar");
- // use Perlito5::Grammar::Expression
-;
- // use Perlito5::Grammar::Control
-;
- // use Perlito5::Grammar::String
-;
- // use Perlito5::Grammar::Sigil
-;
- // use Perlito5::Grammar::Use
-;
- // use Perlito5::Grammar::Block
-;
- // use Perlito5::Grammar::Space
-;
- // use Perlito5::Grammar::Print
-;
- // use Perlito5::Grammar::Map
+ p5make_package("Perlito5::Grammar::Number");
+ // use strict
;
- // use Perlito5::Grammar::Attribute
+ // use Perlito5::Grammar::Precedence
;
- p5typeglob_set("Perlito5::Grammar", "word", function (List__, p5want) {
- return (( p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\w/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))) : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "digit", function (List__, p5want) {
- return (( p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\d/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))) : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "ident", function (List__, p5want) {
- try {
- if ( (p5bool(!((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\w/) ? 1 : 0))) || p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\d/) ? 1 : 0))) ) {
- throw(p5context([], p5want))
- };
- var v_m;
- v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))));
- p5while(function () {
- (v_m || (v_m = new p5HashRef({})))._hash_.p5postincr('to');
- }, function () { return (p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), (v_m || (v_m = new p5HashRef({})))._hash_.p5hget('to'), 1], p5want)).match(/\w/) ? 1 : 0) }, false, "");
- return (p5context([v_m], p5want));
- }
- catch(err) {
- if ( err instanceof Error ) {
- throw(err);
- }
- else {
- return(err);
- }
- }
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['.', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['0', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['1', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['2', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['3', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['4', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['5', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['6', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['7', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['8', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5pkg["Perlito5::Grammar::Precedence"].add_term(['9', function (List__, p5want) {
+ return (p5call(p5pkg["Perlito5::Grammar::Number"], "term_digit", p5list_to_a(List__.p5aget(0), List__.p5aget(1)), p5want));
+}], null);
+ p5typeglob_set("Perlito5::Grammar::Number", "term_digit", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
+ v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
+ var v_tmp;
+ v_tmp = (p5context([p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ return (p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Number"], "val_num", 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::Number.val_num', (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('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Number.val_num')), 1))))));
+ return (p5context([1], p5want));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Number"], "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('Perlito5::Grammar::Number.val_int', (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('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Number.val_int')), 1))))));
+ return (p5context([1], p5want));
+ })()], p5want) })], p5want));
+ })()], p5want) }));
+ })()], 0)], 0));
+ return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "caret_char", function (List__, p5want) {
- try {
- var v_c;
- v_c = (p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], 0));
- var v_pos;
- v_pos = (List__.p5aget(2));
- if ( (p5str(v_c) == '^') ) {
- (function (_tmp) { v_pos = p5incr_(_tmp); return _tmp })(v_pos);
- v_c = (p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), v_pos, 1], 0));
- if ( ((p5str(v_c) < 'A') || (p5str(v_c) > 'Z')) ) {
- throw(p5context([0], p5want))
- };
- v_c = (p5pkg["Perlito5::Grammar"].chr([((p5pkg["Perlito5::Grammar"].ord([v_c], 0) - p5pkg["Perlito5::Grammar"].ord(['A'], 0)) + 1)], 0));
- }
- else if ( p5bool(p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(List__.p5aget(1), v_pos), 0)) ) {
- throw(p5context([0], p5want));
- };
- if ( ((p5str(v_c) < String.fromCharCode(1)) || (p5str(v_c) > String.fromCharCode(26))) ) {
- throw(p5context([0], p5want))
- };
- return ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(v_pos) + 1), 'capture', v_c)))));
- }
- catch(err) {
- if ( err instanceof Error ) {
- throw(err);
- }
- else {
- return(err);
- }
- }
+ p5typeglob_set("Perlito5::Grammar::Number", "digit", function (List__, p5want) {
+ return (( p5bool((p5str(p5pkg["Perlito5::Grammar::Number"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\d/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))) : 0));
});
- p5typeglob_set("Perlito5::Grammar", "full_ident", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar::Number", "exponent", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -9692,23 +9621,36 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "ident", 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_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ return (p5and(('e' == 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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(('E' == 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')))))], p5want) })], p5want));
+ })()], p5want) }));
})()], 0), function () { return p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5or(p5context([(function () {
+ return (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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (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')))))], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([1], p5want));
+ })()], 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'));
+ 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));
@@ -9718,91 +9660,34 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
};
v_m = (v_MATCH);
v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- }, function () { return p5and(p5context([p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "ident", 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) })], 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));
- });
- p5typeglob_set("Perlito5::Grammar", "namespace_before_ident", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
- v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
- var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "ident", 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 () {
- 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'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0));
- return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 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([p5and(p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "ident", 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 () {
- 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'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0));
- return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
- })()], 0) })], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
+ 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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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));
+ return (p5context([(p5num(v_count) > 0)], p5want));
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "optional_namespace_before_ident", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar::Number", "val_num", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -9812,22 +9697,21 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([(function () {
+ v_tmp = (p5context([p5context([p5and(p5context([(function () {
var v_pos1;
v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5or(p5context([(function () {
- return (p5and(p5and(p5context([(function () {
+ return (p5or(p5context([(function () {
+ return (p5and(p5and(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, "namespace_before_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "digit", 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('namespace_before_ident', (v_m2));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
- })()], 0), function () { return p5context([(function () {
+ })()], 0) }), function () { return p5context([(function () {
var v_last_match_null;
v_last_match_null = (0);
var v_m;
@@ -9843,134 +9727,727 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
};
v_m = (v_MATCH);
v_to = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- }, function () { return p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(p5num(v_last_match_null) < 2)], 0) }) }, false, "");
+ }, 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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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 () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('namespace_before_ident')), 0)));
+ var v_m;
+ v_m = (v_MATCH);
+ if ( !( p5bool((function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "exponent", 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);
+ };
return (p5context([1], p5want));
})()], p5want) }));
})()], 0), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
+ return (p5context([p5and(p5and(p5context([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "optional_namespace_before_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "digit", 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('optional_namespace_before_ident', (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));
- var v_name;
- v_name = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('optional_namespace_before_ident')), 0));
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ('main'));
- if ( (p5str(v_name) != '') ) {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((p5str((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('capture')) + ('::' + p5str(v_name)))))
- };
- return (p5context([1], p5want));
- })()], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(1, function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (''));
+ })()], 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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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));
- })()], p5want) })], p5want));
- })()], p5want) }));
- })()], 0)], 0));
- return (( p5bool(v_tmp) ? v_MATCH : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "exp_stmts2", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
- v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
- var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "exp_stmts", 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('exp_stmts', (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('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('exp_stmts')), 0)));
- return (p5context([1], p5want));
- })()], 0) })], 0)], 0));
- return (( p5bool(v_tmp) ? v_MATCH : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "exp", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
- v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
- var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(p5pkg["Perlito5::Grammar::Expression"], "exp_parse", 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::Expression.exp_parse', (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('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Expression.exp_parse')), 0)));
- return (p5context([1], p5want));
- })()], 0) })], 0)], 0));
- return (( p5bool(v_tmp) ? v_MATCH : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "exp2", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
+ })()], 0) }), function () { return p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "exponent", 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('to', (v_pos1));
+ return (p5context([p5and(p5and(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_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::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));
+ return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
+ })()], 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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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_m;
+ v_m = (v_MATCH);
+ if ( !( p5bool((function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "exponent", 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);
+ };
+ return (p5context([1], p5want));
+ })()], p5want) })], p5want));
+ })()], p5want) }));
+ })()], p5want) })], p5want));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
+ var v_s;
+ v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0));
+ v_s = p5str(v_s).replace(/_/g, '');
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5call(p5pkg["Perlito5::AST::Val::Num"], "new", ['num', v_s], 0)));
+ return (p5context([1], p5want));
+ })()], 0) })], 0)], 0));
+ return (( p5bool(v_tmp) ? v_MATCH : 0));
+ });
+ p5typeglob_set("Perlito5::Grammar::Number", "digits", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
+ v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
+ var v_tmp;
+ v_tmp = (p5context([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_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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([(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)], 0));
+ return (( p5bool(v_tmp) ? v_MATCH : 0));
+ });
+ p5typeglob_set("Perlito5::Grammar::Number", "val_int", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
+ v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
+ var v_tmp;
+ v_tmp = (p5context([p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ return (p5and(p5context([(function () {
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5or(p5context([(function () {
+ return (p5and(p5and(p5context([p5and(('0' == 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_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ return (p5and(('x' == 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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(('X' == 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')))))], p5want) })], p5want));
+ })()], 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'));
+ 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_m2;
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar"], "word", 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([(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));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(p5and(p5context([p5and(('0' == 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_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5context([(function () {
+ return (p5and(('b' == 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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(('B' == 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')))))], p5want) })], p5want));
+ })()], 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'));
+ 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(p5or(p5context([(function () {
+ return (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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(('0' == 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')))))], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(('1' == 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')))))], 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));
+ })()], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(p5context([p5and(('0' == 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_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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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));
+ })()], p5want) })], p5want));
+ })()], 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('capture', (p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', p5pkg["Perlito5::Grammar::Number"].oct([p5pkg["Perlito5::Grammar::Number"].lc([p5pkg["Perlito5::Match"].flat([v_MATCH], 0)], 0)], 1)], 0)));
+ return (p5context([1], p5want));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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 () {
+ 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::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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "digit", 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));
+ }
+ })()], 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 () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
+ var v_s;
+ v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0));
+ v_s = p5str(v_s).replace(/_/g, '');
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_s], 0)));
+ return (p5context([1], p5want));
+ })()], p5want) })], p5want));
+ })()], p5want) }));
+ })()], 0)], 0));
+ return (( p5bool(v_tmp) ? v_MATCH : 0));
+ });
+ p5typeglob_set("Perlito5::Grammar::Number", "val_version", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
+ v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
+ var v_tmp;
+ v_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
+ var v_m;
+ v_m = (v_MATCH);
+ if ( !( (('v' == 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')))))))) ) {
+ v_MATCH = (v_m);
+ };
+ return (p5context([1], p5want));
+ })()], 0), function () { return p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_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')));
+ return (p5context([1], p5want));
+ }
+ else {
+ return (p5context([0], p5want));
+ }
+ })()], 0) }), function () { return p5context([(function () {
+ 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", 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));
+ }
+ })())) && p5bool((function () {
+ 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", 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);
+ };
+ return (p5context([1], p5want));
+ })()))) ) {
+ v_MATCH = (v_m);
+ };
+ return (p5context([1], p5want));
+ })()], 0) })], 0)], 0));
+ return (( p5bool(v_tmp) ? v_MATCH : 0));
+ });
+ 1;
+ })()
+;
+ (function () {
+ p5make_package("Perlito5::Grammar");
+ // use Perlito5::Grammar::Expression
+;
+ // use Perlito5::Grammar::Statement
+;
+ // use Perlito5::Grammar::Control
+;
+ // use Perlito5::Grammar::String
+;
+ // use Perlito5::Grammar::Sigil
+;
+ // use Perlito5::Grammar::Use
+;
+ // use Perlito5::Grammar::Block
+;
+ // use Perlito5::Grammar::Space
+;
+ // use Perlito5::Grammar::Print
+;
+ // use Perlito5::Grammar::Map
+;
+ // use Perlito5::Grammar::Attribute
+;
+ // use Perlito5::Grammar::Number
+;
+ p5typeglob_set("Perlito5::Grammar", "word", function (List__, p5want) {
+ return (( p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\w/) ? 1 : 0)) ? (new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))) : 0));
+ });
+ p5typeglob_set("Perlito5::Grammar", "ident", function (List__, p5want) {
+ try {
+ if ( (p5bool(!((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\w/) ? 1 : 0))) || p5bool((p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], p5want)).match(/\d/) ? 1 : 0))) ) {
+ throw(p5context([], p5want))
+ };
+ var v_m;
+ v_m = ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(List__.p5aget(2)) + 1))))));
+ p5while(function () {
+ (v_m || (v_m = new p5HashRef({})))._hash_.p5postincr('to');
+ }, function () { return (p5str(p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), (v_m || (v_m = new p5HashRef({})))._hash_.p5hget('to'), 1], p5want)).match(/\w/) ? 1 : 0) }, false, "");
+ return (p5context([v_m], p5want));
+ }
+ catch(err) {
+ if ( err instanceof Error ) {
+ throw(err);
+ }
+ else {
+ return(err);
+ }
+ }
+ });
+ p5typeglob_set("Perlito5::Grammar", "caret_char", function (List__, p5want) {
+ try {
+ var v_c;
+ v_c = (p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), List__.p5aget(2), 1], 0));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ if ( (p5str(v_c) == '^') ) {
+ (function (_tmp) { v_pos = p5incr_(_tmp); return _tmp })(v_pos);
+ v_c = (p5pkg["Perlito5::Grammar"].substr([List__.p5aget(1), v_pos, 1], 0));
+ if ( ((p5str(v_c) < 'A') || (p5str(v_c) > 'Z')) ) {
+ throw(p5context([0], p5want))
+ };
+ v_c = (p5pkg["Perlito5::Grammar"].chr([((p5pkg["Perlito5::Grammar"].ord([v_c], 0) - p5pkg["Perlito5::Grammar"].ord(['A'], 0)) + 1)], 0));
+ }
+ else if ( p5bool(p5call(p5pkg["Perlito5::Grammar::Space"], "ws", p5list_to_a(List__.p5aget(1), v_pos), 0)) ) {
+ throw(p5context([0], p5want));
+ };
+ if ( ((p5str(v_c) < String.fromCharCode(1)) || (p5str(v_c) > String.fromCharCode(26))) ) {
+ throw(p5context([0], p5want))
+ };
+ return ((new p5HashRef(p5a_to_h(p5list_to_a('str', List__.p5aget(1), 'from', List__.p5aget(2), 'to', (p5num(v_pos) + 1), 'capture', v_c)))));
+ }
+ catch(err) {
+ if ( err instanceof Error ) {
+ throw(err);
+ }
+ else {
+ return(err);
+ }
+ }
+ });
+ p5typeglob_set("Perlito5::Grammar", "full_ident", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
v_tmp = (p5context([p5context([p5and(p5context([(function () {
var v_m2;
- v_m2 = (p5call(p5pkg["Perlito5::Grammar::Expression"], "exp_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "ident", 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::Expression.exp_parse', (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('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Expression.exp_parse')), 0)));
+ 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([p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "ident", 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) })], 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));
+ });
+ p5typeglob_set("Perlito5::Grammar", "namespace_before_ident", function (List__, p5want) {
+ var v_grammar;
+ v_grammar = (List__.p5aget(0));
+ var v_str;
+ v_str = (List__.p5aget(1));
+ var v_pos;
+ v_pos = (List__.p5aget(2));
+ var v_MATCH;
+ v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
+ var v_tmp;
+ v_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "ident", 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 () {
+ 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'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0));
+ return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 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([p5and(p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "ident", 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 () {
+ 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'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0));
+ return ((v_MATCH = (( p5bool(v_res) ? v_tmp : 0))));
+ })()], 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));
});
- p5typeglob_set("Perlito5::Grammar", "opt_type", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "optional_namespace_before_ident", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -9983,20 +10460,51 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
v_tmp = (p5context([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(p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "namespace_before_ident", 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('namespace_before_ident', (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"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)) && p5bool((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))))) ) {
- v_MATCH = (v_m);
- };
+ 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([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 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), function () { return p5context([(function () {
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('namespace_before_ident')), 0)));
+ return (p5context([1], p5want));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(p5and(p5context([p5and(('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0), function () { return p5context([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "full_ident", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "optional_namespace_before_ident", 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('full_ident', (v_m2));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('optional_namespace_before_ident', (v_m2));
return (p5context([1], p5want));
}
else {
@@ -10004,10 +10512,15 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
}
})()], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('full_ident')), 0)));
+ var v_name;
+ v_name = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('optional_namespace_before_ident')), 0));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ('main'));
+ if ( (p5str(v_name) != '') ) {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((p5str((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('capture')) + ('::' + p5str(v_name)))))
+ };
return (p5context([1], p5want));
- })()], p5want) }));
- })()], 0), function () { return p5context([(function () {
+ })()], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
return (p5context([p5and(1, function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
@@ -10018,38 +10531,7 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
})()], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "var_sigil", function (List__, p5want) {
- var v_grammar;
- v_grammar = (List__.p5aget(0));
- var v_str;
- v_str = (List__.p5aget(1));
- var v_pos;
- v_pos = (List__.p5aget(2));
- var v_MATCH;
- v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
- var v_tmp;
- v_tmp = (p5context([p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5or(p5or(p5or(p5context([(function () {
- return (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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (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')))))], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (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')))))], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (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')))))], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (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')))))], p5want) })], p5want));
- })()], p5want) }));
- })()], 0)], 0));
- return (( p5bool(v_tmp) ? v_MATCH : 0));
- });
- p5typeglob_set("Perlito5::Grammar", "var_name", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "exp_stmts2", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10059,39 +10541,25 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "full_ident", 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('full_ident', (v_m2));
- return (p5context([1], p5want));
- }
- else {
- return (p5context([0], p5want));
- }
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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('digit', (v_m2));
- return (p5context([1], p5want));
- }
- else {
- return (p5context([0], p5want));
- }
- })()], p5want));
- })()], p5want) }));
- })()], 0)], 0));
+ v_tmp = (p5context([p5context([p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "exp_stmts", 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('exp_stmts', (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('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('exp_stmts')), 0)));
+ return (p5context([1], p5want));
+ })()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "var_ident", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "exp", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10101,47 +10569,25 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5and(p5and(p5context([(function () {
+ v_tmp = (p5context([p5context([p5and(p5context([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "var_sigil", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Expression"], "exp_parse", 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('var_sigil', (v_m2));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Grammar::Expression.exp_parse', (v_m2));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
})()], 0), function () { return p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "optional_namespace_before_ident", 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('optional_namespace_before_ident', (v_m2));
- return (p5context([1], p5want));
- }
- else {
- return (p5context([0], p5want));
- }
- })()], 0) }), function () { return p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "var_name", 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('var_name', (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('capture', (p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('var_sigil')), 1), 'namespace', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('optional_namespace_before_ident')), 1), 'name', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('var_name')), 1)), 0)));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Expression.exp_parse')), 0)));
return (p5context([1], p5want));
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "exponent", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "exp2", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10151,73 +10597,25 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- return (p5and(('e' == 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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(('E' == 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')))))], p5want) })], p5want));
- })()], p5want) }));
- })()], 0), function () { return p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5or(p5context([(function () {
- return (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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (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')))))], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ v_tmp = (p5context([p5context([p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Expression"], "exp_parse", 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::Expression.exp_parse', (v_m2));
return (p5context([1], p5want));
- })()], 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'));
- 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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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));
+ }
+ 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('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Grammar::Expression.exp_parse')), 0)));
+ return (p5context([1], p5want));
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "val_num", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "opt_type", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10227,221 +10625,45 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5context([(function () {
+ v_tmp = (p5context([p5context([(function () {
var v_pos1;
v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
return (p5or(p5context([(function () {
- return (p5and(p5and(p5and(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), function () { return p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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 () {
- 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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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 () {
+ return (p5and(p5and(p5context([(function () {
var v_m;
v_m = (v_MATCH);
- if ( !( p5bool((function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "exponent", 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));
- }
- })())) ) {
+ if ( !( (('::' == p5pkg["Perlito5::Grammar"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 2], 0)) && p5bool((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((2 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))))) ) {
v_MATCH = (v_m);
};
return (p5context([1], p5want));
- })()], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(p5and(p5context([(function () {
+ })()], 0), function () { return p5context([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "full_ident", 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('full_ident', (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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "exponent", 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('to', (v_pos1));
- return (p5context([p5and(p5and(p5and(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), 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));
- return ((v_MATCH = (( p5bool(v_res) ? 0 : v_tmp))));
- })()], 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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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_m;
- v_m = (v_MATCH);
- if ( !( p5bool((function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "exponent", 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);
- };
- return (p5context([1], p5want));
- })()], p5want) })], p5want));
- })()], p5want) }));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('full_ident')), 0)));
+ return (p5context([1], p5want));
+ })()], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (p5context([p5and(1, function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (''));
+ return (p5context([1], p5want));
})()], p5want) })], p5want));
})()], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
- var v_s;
- v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0));
- v_s = p5str(v_s).replace(/_/g, '');
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5call(p5pkg["Perlito5::AST::Val::Num"], "new", ['num', v_s], 0)));
- return (p5context([1], p5want));
- })()], 0) })], 0)], 0));
+ })()], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "digits", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "var_sigil", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10452,42 +10674,27 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
v_tmp = (p5context([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_m2;
- v_m2 = (p5call(v_grammar, "digit", 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([(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));
+ var v_pos1;
+ v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
+ return (p5or(p5or(p5or(p5or(p5context([(function () {
+ return (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')))))], p5want) }));
+ })()], 0), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (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')))))], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (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')))))], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (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')))))], p5want) })], p5want));
+ })()], 0) }), function () { return p5context([(function () {
+ (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
+ return (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')))))], p5want) })], p5want));
+ })()], p5want) }));
})()], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "val_int", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "var_name", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10501,215 +10708,35 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_pos1;
v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
return (p5or(p5context([(function () {
- return (p5and(p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5or(p5context([(function () {
- return (p5and(p5and(p5context([p5and(('0' == 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), function () { return p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- return (p5and(('x' == 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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(('X' == 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')))))], p5want) })], p5want));
- })()], 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'));
- 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_m2;
- v_m2 = (p5call(v_grammar, "word", 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([(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));
- })()], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(p5and(p5context([p5and(('0' == 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), function () { return p5context([(function () {
- var v_pos1;
- v_pos1 = ((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'));
- return (p5or(p5context([(function () {
- return (p5and(('b' == 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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(('B' == 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')))))], p5want) })], p5want));
- })()], 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'));
- 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(p5or(p5context([(function () {
- return (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')))))], p5want) }));
- })()], 0), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(('0' == 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')))))], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(('1' == 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')))))], 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));
- })()], p5want) })], p5want));
- })()], 0) }), function () { return p5context([(function () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', (v_pos1));
- return (p5context([p5and(p5context([p5and(('0' == 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), 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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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));
- })()], p5want) })], p5want));
- })()], 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('capture', (p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', p5pkg["Perlito5::Grammar"].oct([p5pkg["Perlito5::Grammar"].lc([p5pkg["Perlito5::Match"].flat([v_MATCH], 0)], 0)], 1)], 0)));
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "full_ident", 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('full_ident', (v_m2));
return (p5context([1], p5want));
- })()], p5want) }));
+ }
+ else {
+ return (p5context([0], 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([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "digit", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(p5pkg["Perlito5::Grammar::Number"], "digit", 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::Number.digit', (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"].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([(function () {
- var v_m2;
- v_m2 = (p5call(v_grammar, "digit", 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));
- }
- })()], 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 () {
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
- var v_s;
- v_s = (p5pkg["Perlito5::Match"].flat([v_MATCH], 0));
- v_s = p5str(v_s).replace(/_/g, '');
- (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', (p5call(p5pkg["Perlito5::AST::Val::Int"], "new", ['int', v_s], 0)));
- return (p5context([1], p5want));
- })()], p5want) })], p5want));
+ })()], p5want));
})()], p5want) }));
})()], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
});
- p5typeglob_set("Perlito5::Grammar", "val_version", function (List__, p5want) {
+ p5typeglob_set("Perlito5::Grammar", "var_ident", function (List__, p5want) {
var v_grammar;
v_grammar = (List__.p5aget(0));
var v_str;
@@ -10719,56 +10746,42 @@ return (p5call(p5pkg["Perlito5::AST::Val::Buf"], "new", ['buf', p5pkg["Perlito5:
var v_MATCH;
v_MATCH = ((new p5HashRef({'str' : v_str, 'from' : v_pos, 'to' : v_pos})));
var v_tmp;
- v_tmp = (p5context([p5context([p5and(p5and(p5context([(function () {
- var v_m;
- v_m = (v_MATCH);
- if ( !( (('v' == p5pkg["Perlito5::Grammar"].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')))))))) ) {
- v_MATCH = (v_m);
- };
- return (p5context([1], p5want));
+ v_tmp = (p5context([p5context([p5and(p5and(p5and(p5context([(function () {
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "var_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('var_sigil', (v_m2));
+ return (p5context([1], p5want));
+ }
+ else {
+ return (p5context([0], p5want));
+ }
})()], 0), function () { return p5context([(function () {
var v_m2;
- v_m2 = (p5call(v_grammar, "digits", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0));
+ v_m2 = (p5call(v_grammar, "optional_namespace_before_ident", 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('optional_namespace_before_ident', (v_m2));
return (p5context([1], p5want));
}
else {
return (p5context([0], p5want));
}
})()], 0) }), function () { return p5context([(function () {
- var v_m;
- v_m = (v_MATCH);
- if ( !( (((('.' == p5pkg["Perlito5::Grammar"].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", 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));
- }
- })())) && p5bool((function () {
- var v_m;
- v_m = (v_MATCH);
- if ( !( ((('.' == p5pkg["Perlito5::Grammar"].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", 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);
- };
- return (p5context([1], p5want));
- })()))) ) {
- v_MATCH = (v_m);
- };
+ var v_m2;
+ v_m2 = (p5call(v_grammar, "var_name", 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('var_name', (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('capture', (p5call(p5pkg["Perlito5::AST::Var"], "new", p5list_to_a('sigil', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('var_sigil')), 1), 'namespace', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('optional_namespace_before_ident')), 1), 'name', p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('var_name')), 1)), 0)));
return (p5context([1], p5want));
})()], 0) })], 0)], 0));
return (( p5bool(v_tmp) ? v_MATCH : 0));
diff --git a/perlito5.pl b/perlito5.pl
index 7687d9ab3..d3936a89c 100644
--- a/perlito5.pl
+++ b/perlito5.pl
@@ -1135,39 +1135,6 @@ package Perlito5::Grammar::Expression;
# use Perlito5::Grammar::Statement
;
-Perlito5::Grammar::Precedence::add_term('.', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('0', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('1', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('2', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('3', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('4', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('5', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('6', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('7', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('8', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
-Perlito5::Grammar::Precedence::add_term('9', sub {
- Perlito5::Grammar::Expression->term_digit($_[0], $_[1])
- });
Perlito5::Grammar::Precedence::add_term('my', sub {
Perlito5::Grammar::Expression->term_declarator($_[0], $_[1])
});
@@ -1576,50 +1543,6 @@ sub Perlito5::Grammar::Expression::term_arrow {
})))));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::Expression::term_digit {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- (((do {
- my $m2 = Perlito5::Grammar->val_num($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.val_num'} = $m2;
- 1
- }
- else {
- 0
- }
- })) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = ['term', Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.val_num'})];
- 1
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((((do {
- my $m2 = Perlito5::Grammar->val_int($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.val_int'} = $m2;
- 1
- }
- else {
- 0
- }
- })) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = ['term', Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.val_int'})];
- 1
- }))))
- })))
- })));
- ($tmp ? $MATCH : 0)
-};
sub Perlito5::Grammar::Expression::term_ternary {
my $grammar = $_[0];
my $str = $_[1];
@@ -3457,10 +3380,10 @@ sub Perlito5::Grammar::Regex::rule_term {
my $pos1 = $MATCH->{'to'};
((((do {
((((((('c' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((('[' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))) && ((do {
- my $m2 = Perlito5::Grammar->digits($str, $MATCH->{'to'});
+ my $m2 = Perlito5::Grammar::Number->digits($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.digits'} = $m2;
+ $MATCH->{'Perlito5::Grammar::Number.digits'} = $m2;
1
}
else {
@@ -3468,16 +3391,16 @@ sub Perlito5::Grammar::Regex::rule_term {
}
}))) && (((']' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))) && ((do {
$MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Rul::Constant->new('constant', chr(Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'})));
+ $MATCH->{'capture'} = Perlito5::Rul::Constant->new('constant', chr(Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.digits'})));
1
})))
})) || ((do {
$MATCH->{'to'} = $pos1;
(((((('c' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $m2 = Perlito5::Grammar->digits($str, $MATCH->{'to'});
+ my $m2 = Perlito5::Grammar::Number->digits($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.digits'} = $m2;
+ $MATCH->{'Perlito5::Grammar::Number.digits'} = $m2;
1
}
else {
@@ -3485,7 +3408,7 @@ sub Perlito5::Grammar::Regex::rule_term {
}
}))) && ((do {
$MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Rul::Constant->new('constant', chr(Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'})));
+ $MATCH->{'capture'} = Perlito5::Rul::Constant->new('constant', chr(Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.digits'})));
1
}))))
}))) || ((do {
@@ -5183,10 +5106,10 @@ sub Perlito5::Grammar::Use::term_use {
my $pos1 = $MATCH->{'to'};
(((do {
(((do {
- my $m2 = Perlito5::Grammar->val_version($str, $MATCH->{'to'});
+ my $m2 = Perlito5::Grammar::Number->val_version($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.val_version'} = $m2;
+ $MATCH->{'Perlito5::Grammar::Number.val_version'} = $m2;
1
}
else {
@@ -6275,10 +6198,10 @@ sub Perlito5::Grammar::Space::start_of_line {
$MATCH->{'to'} = $to;
($count > 0)
}))) && ((do {
- my $m2 = Perlito5::Grammar->digits($str, $MATCH->{'to'});
+ my $m2 = Perlito5::Grammar::Number->digits($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar.digits'} = $m2;
+ $MATCH->{'Perlito5::Grammar::Number.digits'} = $m2;
1
}
else {
@@ -6322,7 +6245,7 @@ sub Perlito5::Grammar::Space::start_of_line {
}
}))) && ((do {
$MATCH->{'str'} = $str;
- $Perlito5::LINE_NUMBER = (0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'}));
+ $Perlito5::LINE_NUMBER = (0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.digits'}));
1
}))))
}))) || ((do {
@@ -6973,94 +6896,140 @@ sub Perlito5::Grammar::Map::term_sort {
;
package main;
-package Perlito5::Grammar;
-
-# use Perlito5::Grammar::Expression
-;
-
-# use Perlito5::Grammar::Control
-;
-
-# use Perlito5::Grammar::String
-;
-
-# use Perlito5::Grammar::Sigil
-;
-
-# use Perlito5::Grammar::Use
-;
-
-# use Perlito5::Grammar::Block
-;
-
-# use Perlito5::Grammar::Space
-;
-
-# use Perlito5::Grammar::Print
-;
+package Perlito5::Grammar::Number;
-# use Perlito5::Grammar::Map
+# use strict
;
-# use Perlito5::Grammar::Attribute
+# use Perlito5::Grammar::Precedence
;
-sub Perlito5::Grammar::word {
- ((substr($_[1], $_[2], 1) =~ m!\w!) ? {'str', $_[1], 'from', $_[2], 'to', ($_[2] + 1)} : 0)
+Perlito5::Grammar::Precedence::add_term('.', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('0', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('1', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('2', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('3', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('4', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('5', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('6', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('7', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('8', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+Perlito5::Grammar::Precedence::add_term('9', sub {
+ Perlito5::Grammar::Number->term_digit($_[0], $_[1])
+ });
+sub Perlito5::Grammar::Number::term_digit {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (((do {
+ my $m2 = Perlito5::Grammar::Number->val_num($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'Perlito5::Grammar::Number.val_num'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = ['term', Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.val_num'})];
+ 1
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((((do {
+ my $m2 = Perlito5::Grammar::Number->val_int($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'Perlito5::Grammar::Number.val_int'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = ['term', Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.val_int'})];
+ 1
+ }))))
+ })))
+ })));
+ ($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::digit {
+sub Perlito5::Grammar::Number::digit {
((substr($_[1], $_[2], 1) =~ m!\d!) ? {'str', $_[1], 'from', $_[2], 'to', ($_[2] + 1)} : 0)
};
-sub Perlito5::Grammar::ident {
- return if ((substr($_[1], $_[2], 1) !~ m!\w!) || (substr($_[1], $_[2], 1) =~ m!\d!));
- my $m = {'str', $_[1], 'from', $_[2], 'to', ($_[2] + 1)};
- ($m->{'to'})++ while (substr($_[1], $m->{'to'}, 1) =~ m!\w!);
- $m
-};
-sub Perlito5::Grammar::caret_char {
- my $c = substr($_[1], $_[2], 1);
- my $pos = $_[2];
- if (($c eq '^')) {
- ($pos)++;
- $c = substr($_[1], $pos, 1);
- return 0 if (($c lt 'A') || ($c gt 'Z'));
- $c = chr(((ord($c) - ord('A')) + 1))
- }
- else {
- if (Perlito5::Grammar::Space->ws($_[1], $pos)) {
- return 0
- }
- };
- return 0 if (($c lt chr(1)) || ($c gt chr(26)));
- return {'str', $_[1], 'from', $_[2], 'to', ($pos + 1), 'capture', $c}
-};
-sub Perlito5::Grammar::full_ident {
+sub Perlito5::Grammar::Number::exponent {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((((do {
- my $m2 = $grammar->ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })) && ((do {
+ my $tmp = ((((((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (('e' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('E' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ })))
+ })) && ((do {
+ my $pos1 = $MATCH->{'to'};
+ ((((do {
+ (('+' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('-' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ 1
+ })))
+ }))) && ((do {
my $last_match_null = 0;
my $m = $MATCH;
my $to = $MATCH->{'to'};
- for ( ; (((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })))) && (($last_match_null < 2))); {
+ 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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ }))
+ })))
+ })) && (($last_match_null < 2))); {
} ) {
if (($to == $MATCH->{'to'})) {
@@ -7070,795 +7039,682 @@ sub Perlito5::Grammar::full_ident {
$last_match_null = 0
};
$m = $MATCH;
- $to = $MATCH->{'to'}
+ $to = $MATCH->{'to'};
+ $count = ($count + 1)
};
$MATCH = $m;
$MATCH->{'to'} = $to;
- 1
+ ($count > 0)
})))));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::namespace_before_ident {
+sub Perlito5::Grammar::Number::val_num {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = ((((((do {
- my $m2 = $grammar->ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })) && ((do {
- my $tmp = $MATCH;
- $MATCH = {'str', $str, 'from', $tmp->{'to'}, 'to', $tmp->{'to'}};
- my $res = ((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'}))));
- $MATCH = ($res ? $tmp : 0)
- }))) && ((do {
- my $last_match_null = 0;
- my $m = $MATCH;
- my $to = $MATCH->{'to'};
- for ( ; ((((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
+ my $tmp = (((((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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
}))) && ((do {
- my $tmp = $MATCH;
- $MATCH = {'str', $str, 'from', $tmp->{'to'}, 'to', $tmp->{'to'}};
- my $res = ((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'}))));
- $MATCH = ($res ? $tmp : 0)
- })))) && (($last_match_null < 2))); {
+ my $m = $MATCH;
+ if (!(((do {
+ my $m2 = $grammar->exponent($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ })))) {
+ $MATCH = $m
+ };
+ 1
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ (((((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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;
+ } ) {
+ 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 $pos1 = $MATCH->{'to'};
+ (((do {
+ my $m2 = $grammar->exponent($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ 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 = ($res ? 0 : $tmp)
+ }))) && ((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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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
+ }))) && ((do {
+ my $m = $MATCH;
+ if (!(((do {
+ my $m2 = $grammar->exponent($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ })))) {
+ $MATCH = $m
+ };
+ 1
+ }))))
+ })))
+ }))))
+ })))
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ my $s = Perlito5::Match::flat($MATCH);
+ ($s =~ s!_!!g);
+ $MATCH->{'capture'} = Perlito5::AST::Val::Num->new('num', $s);
1
})))));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::optional_namespace_before_ident {
+sub Perlito5::Grammar::Number::digits {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
my $tmp = (((do {
- my $pos1 = $MATCH->{'to'};
- ((((do {
- ((((do {
- my $m2 = $grammar->namespace_before_ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'namespace_before_ident'} = $m2;
- 1
- }
- else {
- 0
- }
- })) && ((do {
- my $last_match_null = 0;
- my $m = $MATCH;
- my $to = $MATCH->{'to'};
- for ( ; (((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && (($last_match_null < 2))); {
+ my $last_match_null = 0;
+ my $m = $MATCH;
+ my $to = $MATCH->{'to'};
+ my $count = 0;
+ for ( ; (((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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
- }))) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'namespace_before_ident'});
- 1
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- (((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->optional_namespace_before_ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'optional_namespace_before_ident'} = $m2;
- 1
+ } ) {
+ 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)
+ })));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::Number::val_int {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (((do {
+ my $pos1 = $MATCH->{'to'};
+ ((((do {
+ ((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (('x' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('X' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ })))
+ }))) && ((do {
+ my $last_match_null = 0;
+ my $m = $MATCH;
+ my $to = $MATCH->{'to'};
+ my $count = 0;
+ for ( ; (((do {
+ my $m2 = Perlito5::Grammar->word($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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'};
+ $count = ($count + 1)
+ };
+ $MATCH = $m;
+ $MATCH->{'to'} = $to;
+ ($count > 0)
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ (((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ (('b' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('B' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $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;
+ ((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('1' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ })))
+ })) && (($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'};
+ $count = ($count + 1)
+ };
+ $MATCH = $m;
+ $MATCH->{'to'} = $to;
+ ($count > 0)
+ }))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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'};
+ $count = ($count + 1)
+ };
+ $MATCH = $m;
+ $MATCH->{'to'} = $to;
+ ($count > 0)
+ }))))
+ })))
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::AST::Val::Int->new('int', oct(lc(Perlito5::Match::flat($MATCH))));
+ 1
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ (((((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 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;
+ ((do {
+ my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ }))
+ })))
+ })) && (($last_match_null < 2))); {
+
+ } ) {
+ if (($to == $MATCH->{'to'})) {
+ $last_match_null = ($last_match_null + 1)
}
else {
- 0
- }
- }))) && ((do {
- $MATCH->{'str'} = $str;
- my $name = Perlito5::Match::flat($MATCH->{'optional_namespace_before_ident'});
- $MATCH->{'capture'} = 'main';
- $MATCH->{'capture'} = ($MATCH->{'capture'} . ('::' . $name)) if ($name ne '');
+ $last_match_null = 0
+ };
+ $m = $MATCH;
+ $to = $MATCH->{'to'}
+ };
+ $MATCH = $m;
+ $MATCH->{'to'} = $to;
1
- }))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((1 && ((do {
+ }))) && ((do {
$MATCH->{'str'} = $str;
- $MATCH->{'capture'} = '';
+ my $s = Perlito5::Match::flat($MATCH);
+ ($s =~ s!_!!g);
+ $MATCH->{'capture'} = Perlito5::AST::Val::Int->new('int', $s);
1
}))))
})))
})));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::exp_stmts2 {
+sub Perlito5::Grammar::Number::val_version {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((((do {
- my $m2 = $grammar->exp_stmts($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'exp_stmts'} = $m2;
+ my $tmp = ((((((do {
+ my $m = $MATCH;
+ if (!(((('v' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))))) {
+ $MATCH = $m
+ };
1
- }
- else {
- 0
- }
- })) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'exp_stmts'});
- 1
- })))));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::exp {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((((do {
- my $m2 = Perlito5::Grammar::Expression->exp_parse($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar::Expression.exp_parse'} = $m2;
- 1
- }
- else {
- 0
- }
- })) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Expression.exp_parse'});
+ })) && ((do {
+ my $m2 = $grammar->digits($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ my $m = $MATCH;
+ if (!((((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->digits($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ my $m = $MATCH;
+ if (!(((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->digits($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ })))))) {
+ $MATCH = $m
+ };
+ 1
+ })))))) {
+ $MATCH = $m
+ };
1
})))));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::exp2 {
+1;
+
+;
+package main;
+package Perlito5::Grammar;
+
+# use Perlito5::Grammar::Expression
+;
+
+# use Perlito5::Grammar::Statement
+;
+
+# use Perlito5::Grammar::Control
+;
+
+# use Perlito5::Grammar::String
+;
+
+# use Perlito5::Grammar::Sigil
+;
+
+# use Perlito5::Grammar::Use
+;
+
+# use Perlito5::Grammar::Block
+;
+
+# use Perlito5::Grammar::Space
+;
+
+# use Perlito5::Grammar::Print
+;
+
+# use Perlito5::Grammar::Map
+;
+
+# use Perlito5::Grammar::Attribute
+;
+
+# use Perlito5::Grammar::Number
+;
+sub Perlito5::Grammar::word {
+ ((substr($_[1], $_[2], 1) =~ m!\w!) ? {'str', $_[1], 'from', $_[2], 'to', ($_[2] + 1)} : 0)
+};
+sub Perlito5::Grammar::ident {
+ return if ((substr($_[1], $_[2], 1) !~ m!\w!) || (substr($_[1], $_[2], 1) =~ m!\d!));
+ my $m = {'str', $_[1], 'from', $_[2], 'to', ($_[2] + 1)};
+ ($m->{'to'})++ while (substr($_[1], $m->{'to'}, 1) =~ m!\w!);
+ $m
+};
+sub Perlito5::Grammar::caret_char {
+ my $c = substr($_[1], $_[2], 1);
+ my $pos = $_[2];
+ if (($c eq '^')) {
+ ($pos)++;
+ $c = substr($_[1], $pos, 1);
+ return 0 if (($c lt 'A') || ($c gt 'Z'));
+ $c = chr(((ord($c) - ord('A')) + 1))
+ }
+ else {
+ if (Perlito5::Grammar::Space->ws($_[1], $pos)) {
+ return 0
+ }
+ };
+ return 0 if (($c lt chr(1)) || ($c gt chr(26)));
+ return {'str', $_[1], 'from', $_[2], 'to', ($pos + 1), 'capture', $c}
+};
+sub Perlito5::Grammar::full_ident {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
my $tmp = (((((do {
- my $m2 = Perlito5::Grammar::Expression->exp_parse($str, $MATCH->{'to'});
+ my $m2 = $grammar->ident($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'Perlito5::Grammar::Expression.exp_parse'} = $m2;
1
}
else {
0
}
})) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Expression.exp_parse'});
- 1
- })))));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::opt_type {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- ((((do {
- my $m = $MATCH;
- if (!(((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))))) {
- $MATCH = $m
- };
- 1
- })) && ((do {
- my $m2 = $grammar->full_ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'full_ident'} = $m2;
- 1
- }
- else {
- 0
- }
- }))) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'full_ident'});
- 1
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((1 && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = '';
- 1
- }))))
- })))
- })));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::var_sigil {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((do {
- my $pos1 = $MATCH->{'to'};
- ((((((do {
- (('$' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('%' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('@' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('&' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('*' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- })))
- })));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::var_name {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- my $m2 = $grammar->full_ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'full_ident'} = $m2;
- 1
- }
- else {
- 0
- }
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'digit'} = $m2;
- 1
- }
- else {
- 0
- }
- }))
- })))
- })));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::var_ident {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((((((do {
- my $m2 = $grammar->var_sigil($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'var_sigil'} = $m2;
- 1
- }
- else {
- 0
- }
- })) && ((do {
- my $m2 = $grammar->optional_namespace_before_ident($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'optional_namespace_before_ident'} = $m2;
- 1
- }
- else {
- 0
- }
- }))) && ((do {
- my $m2 = $grammar->var_name($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- $MATCH->{'var_name'} = $m2;
- 1
- }
- else {
- 0
- }
- }))) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::AST::Var->new('sigil', Perlito5::Match::flat($MATCH->{'var_sigil'}), 'namespace', Perlito5::Match::flat($MATCH->{'optional_namespace_before_ident'}), 'name', Perlito5::Match::flat($MATCH->{'var_name'}));
- 1
- })))));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::exponent {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = ((((((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- (('e' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('E' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- })))
- })) && ((do {
- my $pos1 = $MATCH->{'to'};
- ((((do {
- (('+' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('-' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- 1
- })))
- }))) && ((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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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'};
- $count = ($count + 1)
- };
- $MATCH = $m;
- $MATCH->{'to'} = $to;
- ($count > 0)
- })))));
- ($tmp ? $MATCH : 0)
-};
-sub Perlito5::Grammar::val_num {
- my $grammar = $_[0];
- my $str = $_[1];
- my $pos = $_[2];
- my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- (((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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;
+ for ( ; (((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
1
- }))) && ((do {
- my $m = $MATCH;
- if (!(((do {
- my $m2 = $grammar->exponent($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })))) {
- $MATCH = $m
- };
- 1
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- (((((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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
- }))) && ((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- my $m2 = $grammar->exponent($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- 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 = ($res ? 0 : $tmp)
- }))) && ((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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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
- }))) && ((do {
- my $m = $MATCH;
- if (!(((do {
- my $m2 = $grammar->exponent($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })))) {
- $MATCH = $m
- };
- 1
- }))))
- })))
- }))))
- })))
- })) && ((do {
- $MATCH->{'str'} = $str;
- my $s = Perlito5::Match::flat($MATCH);
- ($s =~ s!_!!g);
- $MATCH->{'capture'} = Perlito5::AST::Val::Num->new('num', $s);
+ }
+ 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)
};
-sub Perlito5::Grammar::digits {
+sub Perlito5::Grammar::namespace_before_ident {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = (((do {
- my $last_match_null = 0;
- my $m = $MATCH;
- my $to = $MATCH->{'to'};
- my $count = 0;
- for ( ; (((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })) && (($last_match_null < 2))); {
+ my $tmp = ((((((do {
+ my $m2 = $grammar->ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ my $tmp = $MATCH;
+ $MATCH = {'str', $str, 'from', $tmp->{'to'}, 'to', $tmp->{'to'}};
+ my $res = ((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'}))));
+ $MATCH = ($res ? $tmp : 0)
+ }))) && ((do {
+ my $last_match_null = 0;
+ my $m = $MATCH;
+ my $to = $MATCH->{'to'};
+ for ( ; ((((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ my $tmp = $MATCH;
+ $MATCH = {'str', $str, 'from', $tmp->{'to'}, 'to', $tmp->{'to'}};
+ my $res = ((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'}))));
+ $MATCH = ($res ? $tmp : 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'};
- $count = ($count + 1)
- };
- $MATCH = $m;
- $MATCH->{'to'} = $to;
- ($count > 0)
- })));
+ } ) {
+ 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)
};
-sub Perlito5::Grammar::val_int {
+sub Perlito5::Grammar::optional_namespace_before_ident {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
my $tmp = (((do {
my $pos1 = $MATCH->{'to'};
- (((do {
- (((do {
- my $pos1 = $MATCH->{'to'};
- ((((do {
- ((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- (('x' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('X' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- })))
- }))) && ((do {
- my $last_match_null = 0;
- my $m = $MATCH;
- my $to = $MATCH->{'to'};
- my $count = 0;
- for ( ; (((do {
- my $m2 = $grammar->word($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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'};
- $count = ($count + 1)
- };
- $MATCH = $m;
- $MATCH->{'to'} = $to;
- ($count > 0)
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- (((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $pos1 = $MATCH->{'to'};
- (((do {
- (('b' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('B' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $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;
- ((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((('1' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
- })))
- })) && (($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'};
- $count = ($count + 1)
- };
- $MATCH = $m;
- $MATCH->{'to'} = $to;
- ($count > 0)
- }))))
- }))) || ((do {
- $MATCH->{'to'} = $pos1;
- ((((('0' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 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'};
- $count = ($count + 1)
- };
- $MATCH = $m;
- $MATCH->{'to'} = $to;
- ($count > 0)
- }))))
- })))
- })) && ((do {
- $MATCH->{'str'} = $str;
- $MATCH->{'capture'} = Perlito5::AST::Val::Int->new('int', oct(lc(Perlito5::Match::flat($MATCH))));
- 1
- })))
- })) || ((do {
- $MATCH->{'to'} = $pos1;
- (((((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
+ ((((do {
+ ((((do {
+ my $m2 = $grammar->namespace_before_ident($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'namespace_before_ident'} = $m2;
1
}
else {
@@ -7866,26 +7722,9 @@ sub Perlito5::Grammar::val_int {
}
})) && ((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;
- ((do {
- my $m2 = $grammar->digit($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- }))
- })))
- })) && (($last_match_null < 2))); {
+ my $m = $MATCH;
+ my $to = $MATCH->{'to'};
+ for ( ; (((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && (($last_match_null < 2))); {
} ) {
if (($to == $MATCH->{'to'})) {
@@ -7902,64 +7741,242 @@ sub Perlito5::Grammar::val_int {
1
}))) && ((do {
$MATCH->{'str'} = $str;
- my $s = Perlito5::Match::flat($MATCH);
- ($s =~ s!_!!g);
- $MATCH->{'capture'} = Perlito5::AST::Val::Int->new('int', $s);
+ $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'namespace_before_ident'});
+ 1
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ (((((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))) && ((do {
+ my $m2 = $grammar->optional_namespace_before_ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'optional_namespace_before_ident'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ $MATCH->{'str'} = $str;
+ my $name = Perlito5::Match::flat($MATCH->{'optional_namespace_before_ident'});
+ $MATCH->{'capture'} = 'main';
+ $MATCH->{'capture'} = ($MATCH->{'capture'} . ('::' . $name)) if ($name ne '');
+ 1
+ }))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((1 && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = '';
1
}))))
})))
})));
($tmp ? $MATCH : 0)
};
-sub Perlito5::Grammar::val_version {
+sub Perlito5::Grammar::exp_stmts2 {
my $grammar = $_[0];
my $str = $_[1];
my $pos = $_[2];
my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
- my $tmp = ((((((do {
- my $m = $MATCH;
- if (!(((('v' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))))) {
- $MATCH = $m
- };
+ my $tmp = (((((do {
+ my $m2 = $grammar->exp_stmts($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'exp_stmts'} = $m2;
1
- })) && ((do {
- my $m2 = $grammar->digits($str, $MATCH->{'to'});
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'exp_stmts'});
+ 1
+ })))));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::exp {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((((do {
+ my $m2 = Perlito5::Grammar::Expression->exp_parse($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'Perlito5::Grammar::Expression.exp_parse'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Expression.exp_parse'});
+ 1
+ })))));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::exp2 {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((((do {
+ my $m2 = Perlito5::Grammar::Expression->exp_parse($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'Perlito5::Grammar::Expression.exp_parse'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Expression.exp_parse'});
+ 1
+ })))));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::opt_type {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ ((((do {
+ my $m = $MATCH;
+ if (!(((('::' eq substr($str, $MATCH->{'to'}, 2)) && ($MATCH->{'to'} = (2 + $MATCH->{'to'})))))) {
+ $MATCH = $m
+ };
+ 1
+ })) && ((do {
+ my $m2 = $grammar->full_ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'full_ident'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::Match::flat($MATCH->{'full_ident'});
+ 1
+ })))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((1 && ((do {
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = '';
+ 1
+ }))))
+ })))
+ })));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::var_sigil {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((do {
+ my $pos1 = $MATCH->{'to'};
+ ((((((do {
+ (('$' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('%' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('@' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('&' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ }))) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((('*' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'}))))
+ })))
+ })));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::var_name {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((do {
+ my $pos1 = $MATCH->{'to'};
+ (((do {
+ my $m2 = $grammar->full_ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'full_ident'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) || ((do {
+ $MATCH->{'to'} = $pos1;
+ ((do {
+ my $m2 = Perlito5::Grammar::Number->digit($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'Perlito5::Grammar::Number.digit'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ }))
+ })))
+ })));
+ ($tmp ? $MATCH : 0)
+};
+sub Perlito5::Grammar::var_ident {
+ my $grammar = $_[0];
+ my $str = $_[1];
+ my $pos = $_[2];
+ my $MATCH = {'str', $str, 'from', $pos, 'to', $pos};
+ my $tmp = (((((((do {
+ my $m2 = $grammar->var_sigil($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'var_sigil'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ })) && ((do {
+ my $m2 = $grammar->optional_namespace_before_ident($str, $MATCH->{'to'});
+ if ($m2) {
+ $MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'optional_namespace_before_ident'} = $m2;
+ 1
+ }
+ else {
+ 0
+ }
+ }))) && ((do {
+ my $m2 = $grammar->var_name($str, $MATCH->{'to'});
if ($m2) {
$MATCH->{'to'} = $m2->{'to'};
+ $MATCH->{'var_name'} = $m2;
1
}
else {
0
}
}))) && ((do {
- my $m = $MATCH;
- if (!((((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->digits($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- }))) && ((do {
- my $m = $MATCH;
- if (!(((((('.' eq substr($str, $MATCH->{'to'}, 1)) && ($MATCH->{'to'} = (1 + $MATCH->{'to'})))) && ((do {
- my $m2 = $grammar->digits($str, $MATCH->{'to'});
- if ($m2) {
- $MATCH->{'to'} = $m2->{'to'};
- 1
- }
- else {
- 0
- }
- })))))) {
- $MATCH = $m
- };
- 1
- })))))) {
- $MATCH = $m
- };
+ $MATCH->{'str'} = $str;
+ $MATCH->{'capture'} = Perlito5::AST::Var->new('sigil', Perlito5::Match::flat($MATCH->{'var_sigil'}), 'namespace', Perlito5::Match::flat($MATCH->{'optional_namespace_before_ident'}), 'name', Perlito5::Match::flat($MATCH->{'var_name'}));
1
})))));
($tmp ? $MATCH : 0)
diff --git a/src5/lib/Perlito5/Grammar.pm b/src5/lib/Perlito5/Grammar.pm
index 3571bb68a..2cda44bae 100644
--- a/src5/lib/Perlito5/Grammar.pm
+++ b/src5/lib/Perlito5/Grammar.pm
@@ -1,6 +1,7 @@
package Perlito5::Grammar;
use Perlito5::Grammar::Expression;
+use Perlito5::Grammar::Statement;
use Perlito5::Grammar::Control;
use Perlito5::Grammar::String;
use Perlito5::Grammar::Sigil;
@@ -10,6 +11,7 @@ use Perlito5::Grammar::Space;
use Perlito5::Grammar::Print;
use Perlito5::Grammar::Map;
use Perlito5::Grammar::Attribute;
+use Perlito5::Grammar::Number;
sub word {
substr( $_[1], $_[2], 1 ) =~ m/\w/
@@ -21,16 +23,6 @@ sub word {
: 0;
}
-sub digit {
- substr( $_[1], $_[2], 1 ) =~ m/\d/
- ? {
- str => $_[1],
- from => $_[2],
- to => $_[2] + 1,
- }
- : 0;
-}
-
sub ident {
return
if substr( $_[1], $_[2], 1 ) !~ m/\w/
@@ -105,7 +97,7 @@ token opt_type {
token var_sigil { \$ |\% |\@ |\& | \* };
-token var_name { | };
+token var_name { | };
token var_ident {
@@ -118,44 +110,6 @@ token var_ident {
}
};
-token exponent {
- [ 'e' | 'E' ] [ '+' | '-' | '' ] [ '_' | \d ]+
-};
-
-token val_num {
- [
- | \. \d [ '_' | \d]* <.exponent>? # .10 .10e10
- | \d [ '_' | \d]* [ <.exponent> | \. [ '_' | \d]* <.exponent>? ]
- ]
- {
- my $s = Perlito5::Match::flat($MATCH);
- $s =~ s/_//g;
- $MATCH->{capture} = Perlito5::AST::Val::Num->new( num => $s )
- }
-};
-
-token digits {
- \d+
-};
-
-token val_int {
- [ '0' ['x'|'X'] <.word>+ # XXX test for hex number
- | '0' ['b'|'B'] [ '_' | '0' | '1' ]+
- | '0' [ '_' | \d]+ # XXX test for octal number
- ]
- { $MATCH->{capture} = Perlito5::AST::Val::Int->new( int => oct(lc(Perlito5::Match::flat($MATCH))) ) }
- | \d [ '_' | \d]*
- {
- my $s = Perlito5::Match::flat($MATCH);
- $s =~ s/_//g;
- $MATCH->{capture} = Perlito5::AST::Val::Int->new( int => $s )
- }
-};
-
-token val_version {
- ['v']? <.digits> [ '.' <.digits> [ '.' <.digits> ]? ]?
-};
-
my @PKG;
sub exp_stmts {
my $self = $_[0];
diff --git a/src5/lib/Perlito5/Grammar/Expression.pm b/src5/lib/Perlito5/Grammar/Expression.pm
index 02eaa5ff5..f1612b545 100644
--- a/src5/lib/Perlito5/Grammar/Expression.pm
+++ b/src5/lib/Perlito5/Grammar/Expression.pm
@@ -5,17 +5,6 @@ use Perlito5::Grammar::Bareword;
use Perlito5::Grammar::Attribute;
use Perlito5::Grammar::Statement;
-Perlito5::Grammar::Precedence::add_term( '.' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '0' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '1' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '2' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '3' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '4' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '5' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '6' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '7' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '8' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
-Perlito5::Grammar::Precedence::add_term( '9' => sub { Perlito5::Grammar::Expression->term_digit( $_[0], $_[1] ) } );
Perlito5::Grammar::Precedence::add_term( 'my' => sub { Perlito5::Grammar::Expression->term_declarator( $_[0], $_[1] ) } );
Perlito5::Grammar::Precedence::add_term( 'our' => sub { Perlito5::Grammar::Expression->term_declarator( $_[0], $_[1] ) } );
Perlito5::Grammar::Precedence::add_term( 'eval' => sub { Perlito5::Grammar::Expression->term_eval( $_[0], $_[1] ) } );
@@ -384,11 +373,6 @@ token term_arrow {
]
};
-token term_digit {
- { $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar.val_num"}) ] } # 123.456
- | { $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar.val_int"}) ] } # 123
-};
-
token term_ternary {
'?' ':'
{ $MATCH->{capture} = [ 'op', '? :', Perlito5::Match::flat($MATCH->{ternary5_parse}) ] }
diff --git a/src5/lib/Perlito5/Grammar/Number.pm b/src5/lib/Perlito5/Grammar/Number.pm
new file mode 100644
index 000000000..93b931eab
--- /dev/null
+++ b/src5/lib/Perlito5/Grammar/Number.pm
@@ -0,0 +1,107 @@
+
+package Perlito5::Grammar::Number;
+use strict;
+use Perlito5::Grammar::Precedence;
+
+Perlito5::Grammar::Precedence::add_term( '.' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '0' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '1' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '2' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '3' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '4' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '5' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '6' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '7' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '8' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+Perlito5::Grammar::Precedence::add_term( '9' => sub { Perlito5::Grammar::Number->term_digit( $_[0], $_[1] ) } );
+
+
+token term_digit {
+
+ # 123.456
+ { $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.val_num"}) ] }
+ |
+ # 123
+ { $MATCH->{capture} = [ 'term', Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.val_int"}) ] }
+};
+
+sub digit {
+ substr( $_[1], $_[2], 1 ) =~ m/\d/
+ ? {
+ str => $_[1],
+ from => $_[2],
+ to => $_[2] + 1,
+ }
+ : 0;
+}
+
+token exponent {
+ [ 'e' | 'E' ] [ '+' | '-' | '' ] [ '_' | \d ]+
+};
+
+token val_num {
+ [
+ | \. \d [ '_' | \d]* <.exponent>? # .10 .10e10
+ | \d [ '_' | \d]* [ <.exponent> | \. [ '_' | \d]* <.exponent>? ]
+ ]
+ {
+ my $s = Perlito5::Match::flat($MATCH);
+ $s =~ s/_//g;
+ $MATCH->{capture} = Perlito5::AST::Val::Num->new( num => $s )
+ }
+};
+
+token digits {
+ \d+
+};
+
+token val_int {
+ [ '0' ['x'|'X'] <.Perlito5::Grammar.word>+ # XXX test for hex number
+ | '0' ['b'|'B'] [ '_' | '0' | '1' ]+
+ | '0' [ '_' | \d]+ # XXX test for octal number
+ ]
+ { $MATCH->{capture} = Perlito5::AST::Val::Int->new( int => oct(lc(Perlito5::Match::flat($MATCH))) ) }
+ | \d [ '_' | \d]*
+ {
+ my $s = Perlito5::Match::flat($MATCH);
+ $s =~ s/_//g;
+ $MATCH->{capture} = Perlito5::AST::Val::Int->new( int => $s )
+ }
+};
+
+token val_version {
+ ['v']? <.digits> [ '.' <.digits> [ '.' <.digits> ]? ]?
+};
+
+1;
+
+=begin
+
+=head1 NAME
+
+Perlito5::Grammar::Number - Parser and AST generator for Perlito
+
+=head1 SYNOPSIS
+
+ term_print($str)
+
+=head1 DESCRIPTION
+
+This module parses source code for Perl 5 statements and generates Perlito5 AST.
+
+=head1 AUTHORS
+
+Flavio Soibelmann Glock .
+The Pugs Team Eperl6-compiler@perl.orgE.
+
+=head1 COPYRIGHT
+
+Copyright 2013 by Flavio Soibelmann Glock and others.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+See L
+
+=end
+
diff --git a/src5/lib/Perlito5/Grammar/Regex.pm b/src5/lib/Perlito5/Grammar/Regex.pm
index 3245fcc5a..03bd83afc 100644
--- a/src5/lib/Perlito5/Grammar/Regex.pm
+++ b/src5/lib/Perlito5/Grammar/Regex.pm
@@ -110,10 +110,10 @@ token rule_term {
{ $MATCH->{capture} = Perlito5::Rul::Block->new( closure => Perlito5::Match::flat($MATCH->{parsed_code}) ) }
| \\
[
- | 'c' \[ \]
- { $MATCH->{capture} = Perlito5::Rul::Constant->new( constant => chr( Perlito5::Match::flat($MATCH->{"Perlito5::Grammar.digits"}) ) ) }
- | 'c'
- { $MATCH->{capture} = Perlito5::Rul::Constant->new( constant => chr( Perlito5::Match::flat($MATCH->{"Perlito5::Grammar.digits"}) ) ) }
+ | 'c' \[ \]
+ { $MATCH->{capture} = Perlito5::Rul::Constant->new( constant => chr( Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.digits"}) ) ) }
+ | 'c'
+ { $MATCH->{capture} = Perlito5::Rul::Constant->new( constant => chr( Perlito5::Match::flat($MATCH->{"Perlito5::Grammar::Number.digits"}) ) ) }
|
# \e \E
{ $MATCH->{capture} = Perlito5::Rul::SpecialChar->new( char => Perlito5::Match::flat($MATCH->{any}) ) }
diff --git a/src5/lib/Perlito5/Grammar/Space.pm b/src5/lib/Perlito5/Grammar/Space.pm
index dd0c09a91..82eb869de 100644
--- a/src5/lib/Perlito5/Grammar/Space.pm
+++ b/src5/lib/Perlito5/Grammar/Space.pm
@@ -105,14 +105,14 @@ token start_of_line {
[ ' ' | \t ]*
'line'
[ ' ' | \t ]+
-
+
[ ' ' | \t ]*
# TODO: optional filename (specified with or without quotes)
<.to_eol>
{
- $Perlito5::LINE_NUMBER = 0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar.digits'});
+ $Perlito5::LINE_NUMBER = 0 + Perlito5::Match::flat($MATCH->{'Perlito5::Grammar::Number.digits'});
# TODO: filename
# $Perlito5::FILE_NAME = ...;
diff --git a/src5/lib/Perlito5/Grammar/Use.pm b/src5/lib/Perlito5/Grammar/Use.pm
index 2c520ad5c..d77ccd608 100644
--- a/src5/lib/Perlito5/Grammar/Use.pm
+++ b/src5/lib/Perlito5/Grammar/Use.pm
@@ -24,7 +24,7 @@ token use_decl { 'use' | 'no' };
token term_use {
<.Perlito5::Grammar::Space.ws>
[
-
+
{
# TODO - check version