From d7ff69fe4296b7366ee8ebeaec68910632470e7b Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Fri, 13 Sep 2013 15:54:20 +0200 Subject: [PATCH] Perlito5 - grammar - new module Perlito5::Grammar::Number --- html/perlito5.js | 1975 ++++++++++++----------- perlito5.pl | 1883 ++++++++++----------- src5/lib/Perlito5/Grammar.pm | 52 +- src5/lib/Perlito5/Grammar/Expression.pm | 16 - src5/lib/Perlito5/Grammar/Number.pm | 107 ++ src5/lib/Perlito5/Grammar/Regex.pm | 8 +- src5/lib/Perlito5/Grammar/Space.pm | 4 +- src5/lib/Perlito5/Grammar/Use.pm | 2 +- 8 files changed, 2061 insertions(+), 1986 deletions(-) create mode 100644 src5/lib/Perlito5/Grammar/Number.pm 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