From 5c4164f02193cdb3560b430c020676684c007fbf Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Thu, 31 Oct 2013 18:24:46 -0400 Subject: [PATCH 01/35] Buffer was overflowing, switched to spawn for more stability --- ports/php/php.js | 206 ++++++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 101 deletions(-) diff --git a/ports/php/php.js b/ports/php/php.js index 5e9f84254..4f0a5c81b 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -1,105 +1,96 @@ var fs = require('fs'), util = require('util'), exec = require('child_process').exec, + spawn = require('child_process').spawn, path = require('path'); GLOBAL.convertToSyntax = function (types, body) { - if (types['php'] || types['PHP']) { - return body; - } - return ''; + if (types['php'] || types['PHP']) { + return body; + } + return ''; }; -function puts(error, stdout, stderr) { - util.puts(stdout); -} -console.log("Executing: " + "jison " + process.argv[2]); +function createPHPFile(jisonFileName) { + String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; + + var fileName = jisonFileName.replace('.jison', ''), + comments = require(path.resolve(__dirname, '../comments.js')), + requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; + + console.log("Opening newly created jison js file: " + fileName + '.js'); + + var Parser = require(requirePath), + symbols = Parser.parser.symbols_, + terminals = Parser.parser.terminals_, + productions = Parser.parser.productions_, + table = Parser.parser.table, + defaultActions = Parser.parser.defaultActions, + //turn regex into string + rules = []; + + for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { + rules.push(Parser.parser.lexer.rules[i].toString()); + } + + var conditions = Parser.parser.lexer.conditions, + options = Parser.parser.lexer.options, + parserPerformAction = Parser.parser.performAction.toString(), + lexerPerformAction = Parser.parser.lexer.performAction.toString(); + + function jsFnBody(str) { + str = str.split('{'); + str.shift(); + str = str.join('{'); + + str = str.split('}'); + str.pop(); + str = str.join('}'); + + return str; + } + + function jsPerformActionToPhp(str) { + str = jsFnBody(str); + str = str.replace("var $0 = $$.length - 1;", ''); + str = str.replace("var YYSTATE=YY_START", ''); + str = str.replace(new RegExp('[$]0', 'g'), '$o'); + str = str.replace(new RegExp('[$][$]', 'g'), '$s'); + str = str.replace(new RegExp('default[:][;]', 'g'), ''); + str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); + str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); + str = str.replace(new RegExp('yystate', 'g'), '$yystate'); + //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); + str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); + str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); + str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); + str = str.replace(new RegExp('[$]end', 'g'), 'end'); + str = str.replace(new RegExp('console[.]log'), ''); + str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); -exec("jison " + process.argv[2], function (error) { - if (error) { - console.log(error); - return; - } - - String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; - - var fileName = process.argv[2].replace('.jison', ''), - comments = require(path.resolve(__dirname, '../comments.js')), - requirePath = path.resolve(process.argv[2]).replace('.jison', '') + '.js'; - - console.log("Opening newly created jison js file: " + fileName + '.js'); - - var Parser = require(requirePath), - symbols = Parser.parser.symbols_, - terminals = Parser.parser.terminals_, - productions = Parser.parser.productions_, - table = Parser.parser.table, - defaultActions = Parser.parser.defaultActions, - //turn regex into string - rules = []; - - for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { - rules.push(Parser.parser.lexer.rules[i].toString()); - } - - var conditions = Parser.parser.lexer.conditions, - options = Parser.parser.lexer.options, - parserPerformAction = Parser.parser.performAction.toString(), - lexerPerformAction = Parser.parser.lexer.performAction.toString(); - - function jsFnBody(str) { - str = str.split('{'); - str.shift(); - str = str.join('{'); - - str = str.split('}'); - str.pop(); - str = str.join('}'); - - return str; - } - - function jsPerformActionToPhp(str) { - str = jsFnBody(str); - str = str.replace("var $0 = $$.length - 1;", ''); - str = str.replace("var YYSTATE=YY_START", ''); - str = str.replace(new RegExp('[$]0', 'g'), '$o'); - str = str.replace(new RegExp('[$][$]', 'g'), '$s'); - str = str.replace(new RegExp('default[:][;]', 'g'), ''); - str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); - str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); - str = str.replace(new RegExp('yystate', 'g'), '$yystate'); - //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); - str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); - str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); - str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); - str = str.replace(new RegExp('[$]end', 'g'), 'end'); - str = str.replace(new RegExp('console[.]log'), ''); - str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); - str = comments.parse(str); str = str.replace(/(\d)\n/g, function () { - return arguments[1] + ';\n'; - }); + return arguments[1] + ';\n'; + }); - return str; + return str; } - - + + var option = { - 'namespace': 'Jison', - 'class': fileName, - 'fileName': fileName + '.php', - 'extends': '', - 'use': '', - 'parserValue': '' + 'namespace': 'Jison', + 'class': fileName, + 'fileName': fileName + '.php', + 'extends': '', + 'use': '', + 'parserValue': '' }; - + var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); parserDefinition = parserDefinition.split(/\n/g); for(var i = 0; i < parserDefinition.length; i++) { @@ -109,9 +100,7 @@ exec("jison " + process.argv[2], function (error) { option[parserDefinition[i][0]] = parserDefinition[i][1]; } } - - console.log(option); - + var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); function parserInject() { @@ -140,8 +129,6 @@ exec("jison " + process.argv[2], function (error) { }; } - console.log(this.symbolsByIndex); - for (var i in this.symbolsByIndex) { var symbol = this.symbolsByIndex[i]; result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; @@ -236,26 +223,26 @@ exec("jison " + process.argv[2], function (error) { } parserRaw = parserRaw - .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) + .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) - .replace('/**use**/', (option.use ? 'use ' + option.use : '')) - .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) + .replace('/**use**/', (option.use ? 'use ' + option.use : '')) + .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) .replace('//@@PARSER_INJECT@@', - parserInject() - ) + parserInject() + ) .replace('//@@LEXER_INJECT@@', - lexerInject() - ) + lexerInject() + ) .replace('//@@ParserPerformActionInjection@@', - jsPerformActionToPhp(parserPerformAction) - ) + jsPerformActionToPhp(parserPerformAction) + ) .replace('//@@LexerPerformActionInjection@@', - jsPerformActionToPhp(lexerPerformAction, true) - ); + jsPerformActionToPhp(lexerPerformAction, true) + ); fs.writeFile(option.fileName, parserRaw, function(err) { if (err) { @@ -265,4 +252,21 @@ exec("jison " + process.argv[2], function (error) { console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); } }); +} + + +console.log("Executing: " + "jison " + process.argv[2]); + +var spawnedJison = spawn("jison", [process.argv[2]]); + +spawnedJison.stdout.on('data', function (data) { + console.log(data.toString()); +}); + +spawnedJison.on('exit', function(code) { + if (code != 0) { + console.log('Failed: ' + code); + } else { + createPHPFile(process.argv[2]); + } }); \ No newline at end of file From d7df0c839cb4b8f38594954fd2de076404d1cafa Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Thu, 31 Oct 2013 18:35:55 -0400 Subject: [PATCH 02/35] Cleanup --- ports/php/php.js | 427 +++++++++++++++++++++++------------------------ 1 file changed, 211 insertions(+), 216 deletions(-) diff --git a/ports/php/php.js b/ports/php/php.js index 4f0a5c81b..08b1d37b1 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -1,266 +1,261 @@ -var fs = require('fs'), - util = require('util'), - exec = require('child_process').exec, - spawn = require('child_process').spawn, - path = require('path'); - -GLOBAL.convertToSyntax = function (types, body) { +GLOBAL.convertToSyntax = function (types, body) { if (types['php'] || types['PHP']) { return body; } return ''; }; +var fs = require('fs'), + spawn = require('child_process').spawn, + path = require('path'), + createPHPFile = function (jisonFileName) { + String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; + + var fileName = jisonFileName.replace('.jison', ''), + comments = require(path.resolve(__dirname, '../comments.js')), + requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; + + console.log("\n\n\nOpening newly created jison js file: " + fileName + '.js'); + + var Parser = require(requirePath), + symbols = Parser.parser.symbols_, + terminals = Parser.parser.terminals_, + productions = Parser.parser.productions_, + table = Parser.parser.table, + defaultActions = Parser.parser.defaultActions, + //turn regex into string + rules = []; + + for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { + rules.push(Parser.parser.lexer.rules[i].toString()); + } -function createPHPFile(jisonFileName) { - String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; - - var fileName = jisonFileName.replace('.jison', ''), - comments = require(path.resolve(__dirname, '../comments.js')), - requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; - - console.log("Opening newly created jison js file: " + fileName + '.js'); - - var Parser = require(requirePath), - symbols = Parser.parser.symbols_, - terminals = Parser.parser.terminals_, - productions = Parser.parser.productions_, - table = Parser.parser.table, - defaultActions = Parser.parser.defaultActions, - //turn regex into string - rules = []; - - for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { - rules.push(Parser.parser.lexer.rules[i].toString()); - } - - var conditions = Parser.parser.lexer.conditions, - options = Parser.parser.lexer.options, - parserPerformAction = Parser.parser.performAction.toString(), - lexerPerformAction = Parser.parser.lexer.performAction.toString(); - - function jsFnBody(str) { - str = str.split('{'); - str.shift(); - str = str.join('{'); + var conditions = Parser.parser.lexer.conditions, + options = Parser.parser.lexer.options, + parserPerformAction = Parser.parser.performAction.toString(), + lexerPerformAction = Parser.parser.lexer.performAction.toString(); - str = str.split('}'); - str.pop(); - str = str.join('}'); + function jsFnBody(str) { + str = str.split('{'); + str.shift(); + str = str.join('{'); - return str; - } + str = str.split('}'); + str.pop(); + str = str.join('}'); - function jsPerformActionToPhp(str) { - str = jsFnBody(str); - str = str.replace("var $0 = $$.length - 1;", ''); - str = str.replace("var YYSTATE=YY_START", ''); - str = str.replace(new RegExp('[$]0', 'g'), '$o'); - str = str.replace(new RegExp('[$][$]', 'g'), '$s'); - str = str.replace(new RegExp('default[:][;]', 'g'), ''); - str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); - str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); - str = str.replace(new RegExp('yystate', 'g'), '$yystate'); - //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); - str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); - str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); - str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); - str = str.replace(new RegExp('[$]end', 'g'), 'end'); - str = str.replace(new RegExp('console[.]log'), ''); - str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); - - str = comments.parse(str); - - str = str.replace(/(\d)\n/g, function () { - return arguments[1] + ';\n'; - }); + return str; + } - return str; - } + function jsPerformActionToPhp(str) { + str = jsFnBody(str); + str = str.replace("var $0 = $$.length - 1;", ''); + str = str.replace("var YYSTATE=YY_START", ''); + str = str.replace(new RegExp('[$]0', 'g'), '$o'); + str = str.replace(new RegExp('[$][$]', 'g'), '$s'); + str = str.replace(new RegExp('default[:][;]', 'g'), ''); + str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); + str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); + str = str.replace(new RegExp('yystate', 'g'), '$yystate'); + //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); + str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); + str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); + str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); + str = str.replace(new RegExp('[$]end', 'g'), 'end'); + str = str.replace(new RegExp('console[.]log'), ''); + str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); + + str = comments.parse(str); + + str = str.replace(/(\d)\n/g, function () { + return arguments[1] + ';\n'; + }); + + return str; + } - var option = { - 'namespace': 'Jison', - 'class': fileName, - 'fileName': fileName + '.php', - 'extends': '', - 'use': '', - 'parserValue': '' - }; - - var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); - parserDefinition = parserDefinition.split(/\n/g); - for(var i = 0; i < parserDefinition.length; i++) { - if (parserDefinition[i].match('//option')) { - parserDefinition[i] = parserDefinition[i].replace('//option ', ''); - parserDefinition[i] = parserDefinition[i].split(':'); - option[parserDefinition[i][0]] = parserDefinition[i][1]; + var option = { + 'namespace': 'Jison', + 'class': fileName, + 'fileName': fileName + '.php', + 'extends': '', + 'use': '', + 'parserValue': '' + }; + + var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); + parserDefinition = parserDefinition.split(/\n/g); + for(var i = 0; i < parserDefinition.length; i++) { + if (parserDefinition[i].match('//option')) { + parserDefinition[i] = parserDefinition[i].replace('//option ', ''); + parserDefinition[i] = parserDefinition[i].split(':'); + option[parserDefinition[i][0]] = parserDefinition[i][1]; + } } - } - var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); - - function parserInject() { - var result = '\n'; - this.symbols = []; - this.symbolsByIndex = []; - this.tableInstantiation = []; - this.tableDefinition = []; - this.tableSetActions = []; - this.table = []; - this.terminals = []; - this.defaultActions = []; - this.productions = []; - - var actions = [ - 'none', - 'shift', - 'reduce', - 'accept' - ]; - - for (var i in symbols) { - this.symbolsByIndex[symbols[i] * 1] = { - name: i.replace('$', ''), - index: symbols[i] - }; - } + var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); + + function parserInject() { + var result = '\n'; + this.symbols = []; + this.symbolsByIndex = []; + this.tableInstantiation = []; + this.tableDefinition = []; + this.tableSetActions = []; + this.table = []; + this.terminals = []; + this.defaultActions = []; + this.productions = []; + + var actions = [ + 'none', + 'shift', + 'reduce', + 'accept' + ]; + + for (var i in symbols) { + this.symbolsByIndex[symbols[i] * 1] = { + name: i.replace('$', ''), + index: symbols[i] + }; + } - for (var i in this.symbolsByIndex) { - var symbol = this.symbolsByIndex[i]; - result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; - this.symbols.push('\t\t\t$this->symbols[' + symbol.index + '] = $symbol' + symbol.index + ''); - this.symbols.push('\t\t\t$this->symbols["' + symbol.name + '"] = $symbol' + symbol.index + ''); + for (var i in this.symbolsByIndex) { + var symbol = this.symbolsByIndex[i]; + result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; + this.symbols.push('\t\t\t$this->symbols[' + symbol.index + '] = $symbol' + symbol.index + ''); + this.symbols.push('\t\t\t$this->symbols["' + symbol.name + '"] = $symbol' + symbol.index + ''); - } + } - result += this.symbols.join(';\n') + ';\n\n'; + result += this.symbols.join(';\n') + ';\n\n'; - for (var i in terminals) { - this.terminals.push('\t\t\t\t\t' + i + '=>&$symbol' + i + ''); - } + for (var i in terminals) { + this.terminals.push('\t\t\t\t\t' + i + '=>&$symbol' + i + ''); + } - result += '\t\t\t$this->terminals = array(\n' + this.terminals.join(',\n') + '\n\t\t\t\t);\n\n'; - - for (var i in table) { - var items = []; - for (var j in table[i]) { - var item = table[i][j], - action = 0, - state = 0; - if (item.join) { //is array - if (item.length == 1) { - action = item[0]; - items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ')'); + result += '\t\t\t$this->terminals = array(\n' + this.terminals.join(',\n') + '\n\t\t\t\t);\n\n'; + + for (var i in table) { + var items = []; + for (var j in table[i]) { + var item = table[i][j], + action = 0, + state = 0; + if (item.join) { //is array + if (item.length == 1) { + action = item[0]; + items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ')'); + } else { + action = item[0]; + state = item[1]; + items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); + } } else { - action = item[0]; - state = item[1]; + state = item; items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); } - } else { - state = item; - items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); } - } - this.tableInstantiation.push('\t\t\t$table' + i + ' = new ParserState(' + i + ')'); - this.tableDefinition.push('\t\t\t$tableDefinition' + i + ' = array(\n\t\t\t\t\n' + items.join(',\n') + '\n\t\t\t\t)'); - this.tableSetActions.push('\t\t\t$table' + i + '->setActions($tableDefinition' + i + ')'); - this.table.push('\t\t\t\t\t' + i + '=>$table' + i + ''); - } + this.tableInstantiation.push('\t\t\t$table' + i + ' = new ParserState(' + i + ')'); + this.tableDefinition.push('\t\t\t$tableDefinition' + i + ' = array(\n\t\t\t\t\n' + items.join(',\n') + '\n\t\t\t\t)'); + this.tableSetActions.push('\t\t\t$table' + i + '->setActions($tableDefinition' + i + ')'); + this.table.push('\t\t\t\t\t' + i + '=>$table' + i + ''); + } - result += this.tableInstantiation.join(';\n') + ';\n\n'; - result += this.tableDefinition.join(';\n\n') + ';\n\n'; - result += this.tableSetActions.join(';\n') + ';\n\n'; - result += '\t\t\t$this->table = array(\n\t\t\t\t\n' + this.table.join(',\n') + '\n\t\t\t\t);\n\n'; + result += this.tableInstantiation.join(';\n') + ';\n\n'; + result += this.tableDefinition.join(';\n\n') + ';\n\n'; + result += this.tableSetActions.join(';\n') + ';\n\n'; + result += '\t\t\t$this->table = array(\n\t\t\t\t\n' + this.table.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in defaultActions) { - var action = defaultActions[i][0]; - var state = defaultActions[i][1]; - this.defaultActions.push('\t\t\t\t\t' + i + '=>new ParserAction($this->' + actions[action] +', $table' + state + ')'); - } + for (var i in defaultActions) { + var action = defaultActions[i][0]; + var state = defaultActions[i][1]; + this.defaultActions.push('\t\t\t\t\t' + i + '=>new ParserAction($this->' + actions[action] +', $table' + state + ')'); + } - result += '\t\t\t$this->defaultActions = array(\n\t\t\t\t\n' + this.defaultActions.join(',\n') + '\n\t\t\t\t);\n\n'; + result += '\t\t\t$this->defaultActions = array(\n\t\t\t\t\n' + this.defaultActions.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in productions) { - var production = productions[i]; - if (production.join) { - var symbol = production[0], - len = production[1]; - this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')'); - } else { - var symbol = production; - this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ')'); + for (var i in productions) { + var production = productions[i]; + if (production.join) { + var symbol = production[0], + len = production[1]; + this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')'); + } else { + var symbol = production; + this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ')'); + } } + + result += '\t\t\t$this->productions = array(\n\t\t\t\t\n' + this.productions.join(',\n') + '\n\t\t\t\t);\n\n\n'; + + return result; } - result += '\t\t\t$this->productions = array(\n\t\t\t\t\n' + this.productions.join(',\n') + '\n\t\t\t\t);\n\n\n'; + function lexerInject() { + var result = '\n'; + this.rules = [], + this.conditions = []; - return result; - } + for (var i in rules) { + this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); + } - function lexerInject() { - var result = '\n'; - this.rules = [], - this.conditions = []; + result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in rules) { - this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); - } + for (var i in conditions) { + this.conditions.push('\t\t\t\t\t"' + i + '"=>new LexerConditions(array( ' + conditions[i].rules.join(',') + '), ' + conditions[i].inclusive + ')'); + } - result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; + result += '\t\t\t$this->conditions = array(\n\t\t\t\t\n' + this.conditions.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in conditions) { - this.conditions.push('\t\t\t\t\t"' + i + '"=>new LexerConditions(array( ' + conditions[i].rules.join(',') + '), ' + conditions[i].inclusive + ')'); + return result; } - result += '\t\t\t$this->conditions = array(\n\t\t\t\t\n' + this.conditions.join(',\n') + '\n\t\t\t\t);\n\n'; + parserRaw = parserRaw + .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) + .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) + .replace('/**use**/', (option.use ? 'use ' + option.use : '')) + .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) - return result; - } + .replace('//@@PARSER_INJECT@@', + parserInject() + ) - parserRaw = parserRaw - .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) - .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) - .replace('/**use**/', (option.use ? 'use ' + option.use : '')) - .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) - - .replace('//@@PARSER_INJECT@@', - parserInject() - ) - - .replace('//@@LEXER_INJECT@@', - lexerInject() - ) - - .replace('//@@ParserPerformActionInjection@@', - jsPerformActionToPhp(parserPerformAction) - ) - - .replace('//@@LexerPerformActionInjection@@', - jsPerformActionToPhp(lexerPerformAction, true) - ); - - fs.writeFile(option.fileName, parserRaw, function(err) { - if (err) { - console.log("Something went bad"); - } else { - console.log("Success writing new parser files " + fileName + ".js" + " & " + option.fileName); - console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); - } - }); -} + .replace('//@@LEXER_INJECT@@', + lexerInject() + ) + .replace('//@@ParserPerformActionInjection@@', + jsPerformActionToPhp(parserPerformAction) + ) -console.log("Executing: " + "jison " + process.argv[2]); + .replace('//@@LexerPerformActionInjection@@', + jsPerformActionToPhp(lexerPerformAction, true) + ); -var spawnedJison = spawn("jison", [process.argv[2]]); + fs.writeFile(option.fileName, parserRaw, function(err) { + if (err) { + console.log("Something went bad"); + } else { + console.log("**************SUCCESS**************"); + console.log("Success writing new parser files " + fileName + ".js" + " & " + option.fileName); + console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); + } + }); + }, + msg = (console.log("Executing: " + "jison " + process.argv[2])), + spawnedJison = spawn("jison", [process.argv[2]]); spawnedJison.stdout.on('data', function (data) { console.log(data.toString()); + console.log("**************Possible Issue**************"); }); spawnedJison.on('exit', function(code) { From c5c86f61d71cf4ca21e98fc48ea36b27aa9029c9 Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Wed, 19 Feb 2014 11:03:17 -0500 Subject: [PATCH 03/35] Creation on InputReader, making reading of inputs using offsets Use \G and InputReader where possible in php and c# so that new strings are not made each time using substring etc. --- ports/csharp/Jison/Jison/Template.cs | 88 +++++++++++++++++++++------- ports/csharp/Jison/Jison/csharp.js | 4 +- ports/php/php.js | 2 +- ports/php/template.php | 81 +++++++++++++++++++------ 4 files changed, 136 insertions(+), 39 deletions(-) diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 40e224b7e..5ac73bdb0 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -4,7 +4,7 @@ using System.Linq; //@@USING_INJECT@@ -/**/namespace Jison/**/ +/**/namespace Jison/**//**extends**/ { public /**/class Parser/**/ { @@ -218,24 +218,22 @@ public void LexerError(string error, LexerError hash = null) public ParserSymbol Eof = new ParserSymbol("Eof", 1); public /**/ParserValue/**/ Yy = new /**/ParserValue/**/(); public string Match = ""; - public string Matched = ""; public Stack ConditionStack; public Dictionary Rules; public Dictionary Conditions; public bool Done = false; public bool Less; public bool _More; - public string _Input; + public InputReader _Input; public int Offset; public DictionaryRanges; public bool Flex = false; public void SetInput(string input) { - _Input = input; + _Input = new InputReader(input); _More = Less = Done = false; Yy.LineNo = Yy.Leng = 0; - Matched = Match = ""; ConditionStack = new Stack(); ConditionStack.Push("INITIAL"); @@ -251,12 +249,11 @@ public void SetInput(string input) public string Input() { - string ch = _Input[0].ToString(); + string ch = _Input.Ch(); Yy.Text += ch; Yy.Leng++; Offset++; Match += ch; - Matched += ch; Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); if (lines.Success) { Yy.LineNo++; @@ -270,7 +267,6 @@ public string Input() Yy.Loc.Range.Y++; } - _Input = _Input.Substring(1); return ch; } @@ -279,12 +275,12 @@ public void Unput(string ch) int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - _Input = ch + _Input; + //TODO: not really compatible?? + _Input.unCh(ch.Length); Yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - Matched = Matched.Substring(0, Matched.Length - 1); if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; var r = Yy.Loc.Range; @@ -316,8 +312,8 @@ public void More() public string PastInput() { - var past = Matched.Substring(0, Matched.Length - Match.Length); - return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(-20), "/\n/", "") : ""); + var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); + return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); } public string UpcomingInput() @@ -325,7 +321,7 @@ public string UpcomingInput() var next = Match; if (next.Length < 20) { - next += _Input.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); + next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); } return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); } @@ -350,7 +346,7 @@ public ParserSymbol Next() return Eof; } - if (String.IsNullOrEmpty(_Input)) + if (_Input.Done) { Done = true; } @@ -369,8 +365,8 @@ public ParserSymbol Next() for (int i = 0; i < rules.Count; i++) { rule = Rules[rules[i]]; - var tempMatch = rule.Match(_Input); - if (tempMatch.Success == true && (match != null || tempMatch.Length > match.Length)) { + var tempMatch = _Input.Match(rule); + if (tempMatch.Success && tempMatch.Length > match.Length) { match = tempMatch.Value; matched = true; index = i; @@ -391,7 +387,6 @@ public ParserSymbol Next() Yy.Text += match; Match += match; - Matched += match; Yy.Leng = Yy.Text.Length; if (Ranges != null) @@ -399,13 +394,13 @@ public ParserSymbol Next() Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); } _More = false; - _Input = _Input.Substring(match.Length); + _Input.AddMatch(match); var ruleIndex = rules[index]; var nextCondition = ConditionStack.Peek(); dynamic action = LexerPerformAction(ruleIndex, nextCondition); ParserSymbol token = Symbols[action]; - if (Done == true && String.IsNullOrEmpty(_Input) == false) + if (Done == true || _Input.Done) { Done = false; } @@ -417,7 +412,7 @@ public ParserSymbol Next() } } - if (String.IsNullOrEmpty(_Input)) { + if (_Input.Done) { return Symbols["EOF"]; } else { @@ -747,4 +742,57 @@ public void Pop() } } } + + + public class InputReader + { + + public bool Done = false; + public string Input; + public int Length; + public JList Matches = new JList(); + public int Position = 0; + + public InputReader(string input) + { + Input = input; + Length = input.Length; + } + + public void AddMatch (string match) { + Matches.Push(match); + Position += match.Length; + Done = (Position >= Length); + } + + public string Ch() + { + var ch = Input[Position].ToString(); + AddMatch(ch); + return ch; + } + + public void unCh(int chLength) + { + Position -= chLength; + Position = Math.Max(0, Position); + Done = (Position >= Length); + } + + public string Substring(int start, int end) { + start = (start != 0 ? Position + start : Position); + end = (end != 0 ? start + end : Length); + return Input.Substring(start, end); + } + + public Match Match(Regex rule) { + var match = rule.Match(Input, Position); + return match; + } + + public new string ToString() + { + return String.Join("", Matches.ToArray()); + } + } } \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 14b8ae1b7..bf2c0c8e2 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -99,6 +99,7 @@ exec("jison " + process.argv[2], function (error) { 'namespace': 'Jison', 'class': FileName, 'fileName': FileName + '.cs', + 'extends': '', 'parserValue': '' }; @@ -234,11 +235,12 @@ exec("jison " + process.argv[2], function (error) { return result; } - + parserRaw = parserRaw .replace(new RegExp('//@@USING_INJECT@@', 'g'),(option.using ? 'using ' + option.using.split(',').join(';\nusing ') + ';' : '')) .replace(new RegExp('[/][*][*][/]namespace Jison[/][*][*][/]', 'g'), 'namespace ' + option.namespace) .replace(new RegExp('[/][*][*][/]class Parser[/][*][*][/]', 'g'), 'class ' + option.class) + .replace(new RegExp('[/][*][*]extends[*][*][/]', 'g'), (option.extends ? ' : ' + option.extends : '')) .replace(new RegExp('[/][*][*][/]public Parser[/][*][*][/]', 'g'), 'public ' + option.class) .replace(new RegExp('[/][*][*][/]ParserValue[/][*][*][/]', 'g'), (option.parserValue || 'ParserValue')) .replace('new Parser(', 'new ' + option.class + '(') diff --git a/ports/php/php.js b/ports/php/php.js index 08b1d37b1..d44ca6ebd 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -204,7 +204,7 @@ var fs = require('fs'), this.conditions = []; for (var i in rules) { - this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); + this.rules.push('\t\t\t\t\t' + i + '=>"/\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); } result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; diff --git a/ports/php/template.php b/ports/php/template.php index 436b679f4..4e1163bae 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -203,7 +203,6 @@ function parse($input) public $eof; public $yy = null; public $match = ""; - public $matched = ""; public $conditionStack = array(); public $conditionStackCount = 0; public $rules = array(); @@ -211,14 +210,14 @@ function parse($input) public $done = false; public $less; public $more; - public $input; + public $input; public $offset; public $ranges; public $flex = false; function setInput($input) { - $this->input = $input; + $this->input = new InputReader($input); $this->more = $this->less = $this->done = false; $this->yy = new /**/ParserValue/**/(); $this->conditionStack = array('INITIAL'); @@ -235,12 +234,11 @@ function setInput($input) function input() { - $ch = $this->input[0]; + $ch = $this->input->ch(); $this->yy->text .= $ch; $this->yy->leng++; $this->offset++; $this->match .= $ch; - $this->matched .= $ch; $lines = preg_match("/(?:\r\n?|\n).*/", $ch); if (count($lines) > 0) { $this->yy->lineNo++; @@ -252,7 +250,6 @@ function input() $this->yy->loc->range->y++; } - $this->input = array_slice($this->input, 1); return $ch; } @@ -262,14 +259,13 @@ function unput($ch) $lines = explode("/(?:\r\n?|\n)/", $ch); $linesCount = count($lines); - $this->input = $ch . $this->input; + $this->input->unCh($len); $this->yy->text = substr($this->yy->text, 0, $len - 1); //$this->yylen -= $len; $this->offset -= $len; $oldLines = explode("/(?:\r\n?|\n)/", $this->match); $oldLinesCount = count($oldLines); $this->match = substr($this->match, 0, strlen($this->match) - 1); - $this->matched = substr($this->matched, 0, strlen($this->matched) - 1); if (($linesCount - 1) > 0) $this->yy->lineNo -= $linesCount - 1; $r = $this->yy->loc->range; @@ -297,7 +293,8 @@ function more() function pastInput() { - $past = substr($this->matched, 0, strlen($this->matched) - strlen($this->match)); + $matched = $this->input->toString(); + $past = substr($matched, 0, strlen($matched) - strlen($this->match)); return (strlen($past) > 20 ? '...' : '') . preg_replace("/\n/", "", substr($past, -20)); } @@ -305,7 +302,7 @@ function upcomingInput() { $next = $this->match; if (strlen($next) < 20) { - $next .= substr($this->input, 0, 20 - strlen($next)); + $next .= substr($this->input->toString(), 0, 20 - strlen($next)); } return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); } @@ -328,7 +325,7 @@ function next() return $this->eof; } - if (empty($this->input)) { + if ($this->input->done) { $this->done = true; } @@ -339,7 +336,7 @@ function next() $rules = $this->currentRules(); for ($i = 0, $j = count($rules); $i < $j; $i++) { - preg_match($this->rules[$rules[$i]], $this->input, $tempMatch); + $tempMatch = $this->input->match($this->rules[$rules[$i]]); if ($tempMatch && (empty($match) || count($tempMatch[0]) > count($match[0]))) { $match = $tempMatch; $index = $i; @@ -368,33 +365,32 @@ function next() $this->yy->text .= $match[0]; $this->match .= $match[0]; $this->matches = $match; - $this->matched .= $match[0]; $this->yy->leng = strlen($this->yy->text); if (isset($this->ranges)) { $this->yy->loc->range = new ParserRange($this->offset, $this->offset += $this->yy->leng); } $this->more = false; - $this->input = substr($this->input, $matchCount, strlen($this->input)); + $this->input->addMatch($match[0]); $ruleIndex = $rules[$index]; $nextCondition = $this->conditionStack[$this->conditionStackCount - 1]; $token = $this->lexerPerformAction($ruleIndex, $nextCondition); - if ($this->done == true && empty($this->input) == false) { + if ($this->done == true || $this->input->done) { $this->done = false; } if (empty($token) == false) { return $this->symbols[ - $token + $token ]; } else { return null; } } - if (empty($this->input)) { + if ($this->input->done) { return $this->eof; } else { $this->lexerError("Lexical error on line " . ($this->yy->lineNo + 1) . ". Unrecognized text.\n" . $this->showPosition(), new LexerError("", -1, $this->yy->lineNo)); @@ -612,4 +608,55 @@ function __construct($x, $y) $this->x = $x; $this->y = $y; } +} + +class InputReader +{ + public $done = false; + public $input; + public $length; + public $matches = array(); + public $position = 0; + + public function __construct($input) + { + $this->input = $input; + $this->length = strlen($input); + } + + public function addMatch($match) { + $this->matches[] = $match; + $this->position += strlen($match); + $this->done = ($this->position >= $this->length); + } + + public function ch() + { + $ch = $this->input{$this->position}; + $this->addMatch($ch); + return $ch; + } + + public function unCh($chLength) + { + $this->position -= $chLength; + $this->position = max(0, $this->position); + $this->done = ($this->position >= $this->length); + } + + public function substring($start, $end) { + $start = ($start != 0 ? $this->position + $start : $this->position); + $end = ($end != 0 ? $start + $end : $this->length); + return substr($this->input, $start, $end); + } + + public function match($rule) { + preg_match($rule, $this->input, $match, null, $this->position); + return $match; + } + + public function toString() + { + return implode('', $this->matches); + } } \ No newline at end of file From 70489d1a75a1811177a26c5425756cf5bff4bf6f Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 19 Feb 2014 11:49:54 -0500 Subject: [PATCH 04/35] extends in wrong place --- ports/csharp/Jison/Jison/Template.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 5ac73bdb0..ae96dbac9 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -4,9 +4,9 @@ using System.Linq; //@@USING_INJECT@@ -/**/namespace Jison/**//**extends**/ +/**/namespace Jison/**/ { - public /**/class Parser/**/ + public /**/class Parser/**//**extends**/ { public ParserSymbols Symbols; public Dictionary Terminals; From e68a4c5333dde5f1c7d5f1b603e4bebe5d894723 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 19 Feb 2014 11:54:27 -0500 Subject: [PATCH 05/35] \G in c# for regex --- ports/csharp/Jison/Jison/csharp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index bf2c0c8e2..b2a6abd77 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -222,7 +222,7 @@ exec("jison " + process.argv[2], function (error) { this.conditions = []; for (var i in rules) { - this.rules.push('\t\t\t\t\t{' + i + ', new Regex(@"' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '""') + '")}'); + this.rules.push('\t\t\t\t\t{' + i + ', new Regex(@"\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '""') + '")}'); } result += '\t\t\tRules = new Dictionary\n\t\t\t\t{\n' + this.rules.join(',\n') + '\n\t\t\t\t};\n\n'; From 0094e4d8e9bb9040455c69af7e232f667c2583b7 Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Fri, 21 Feb 2014 21:43:10 -0500 Subject: [PATCH 06/35] logic fixes --- ports/php/template.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 4e1163bae..13f72856f 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -377,7 +377,7 @@ function next() $token = $this->lexerPerformAction($ruleIndex, $nextCondition); - if ($this->done == true || $this->input->done) { + if ($this->done == true && !$this->input->done) { $this->done = false; } @@ -651,8 +651,10 @@ public function substring($start, $end) { } public function match($rule) { - preg_match($rule, $this->input, $match, null, $this->position); - return $match; + if (preg_match($rule, $this->input, $match, null, $this->position)) { + return $match; + } + return null; } public function toString() From 29c899c1530e673db443459b116696088d9a52f9 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 2 Apr 2014 16:54:35 -0400 Subject: [PATCH 07/35] Add extends --- ports/csharp/Jison/Jison/Template.cs | 4 ++-- ports/csharp/Jison/Jison/csharp.js | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 40e224b7e..a1b65a52c 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -6,7 +6,7 @@ /**/namespace Jison/**/ { - public /**/class Parser/**/ + public /**/class Parser/**//**extends**/ { public ParserSymbols Symbols; public Dictionary Terminals; @@ -747,4 +747,4 @@ public void Pop() } } } -} \ No newline at end of file +} diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 14b8ae1b7..4bdb15212 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -99,6 +99,7 @@ exec("jison " + process.argv[2], function (error) { 'namespace': 'Jison', 'class': FileName, 'fileName': FileName + '.cs', + 'extends': '', 'parserValue': '' }; @@ -240,6 +241,7 @@ exec("jison " + process.argv[2], function (error) { .replace(new RegExp('[/][*][*][/]namespace Jison[/][*][*][/]', 'g'), 'namespace ' + option.namespace) .replace(new RegExp('[/][*][*][/]class Parser[/][*][*][/]', 'g'), 'class ' + option.class) .replace(new RegExp('[/][*][*][/]public Parser[/][*][*][/]', 'g'), 'public ' + option.class) + .replace(new RegExp('[/][*][*]extends[*][*][/]', 'g'), ' : ' + option.extends) .replace(new RegExp('[/][*][*][/]ParserValue[/][*][*][/]', 'g'), (option.parserValue || 'ParserValue')) .replace('new Parser(', 'new ' + option.class + '(') @@ -268,4 +270,4 @@ exec("jison " + process.argv[2], function (error) { console.log("Please Note: The csharp version of the jison parser is only an ATTEMPTED conversion"); } }); -}); \ No newline at end of file +}); From 62cbbb5b48c0efa36777512a1b749e07e1854dbe Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 30 Apr 2014 14:10:47 -0400 Subject: [PATCH 08/35] When EOF, and there is an error, handle correctly. --- ports/php/template.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 13f72856f..c3cc5cacd 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -300,11 +300,15 @@ function pastInput() function upcomingInput() { - $next = $this->match; - if (strlen($next) < 20) { - $next .= substr($this->input->toString(), 0, 20 - strlen($next)); + if (!$this->done) { + $next = $this->match; + if (strlen($next) < 20) { + $next .= substr($this->input->toString(), 0, 20 - strlen($next)); + } + return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); + } else { + return ""; } - return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); } function showPosition() From 3bf0e9903ce915e12ac137f77f13e7a9f09f9984 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 10 Jun 2014 14:25:37 -0400 Subject: [PATCH 09/35] Cleanup of __clone methods. --- ports/php/template.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index c3cc5cacd..422a2e530 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -460,7 +460,9 @@ public function Range($range) public function __clone() { - return new ParserLocation($this->firstLine, $this->lastLine, $this->firstColumn, $this->lastColumn); + if (isset($this->range)) { + $this->range = clone $this->range; + } } } @@ -472,14 +474,9 @@ class ParserValue public $text; function __clone() { - $clone = new ParserValue(); - $clone->leng = $this->leng; if (isset($this->loc)) { - $clone->loc = clone $this->loc; + $this->loc = clone $this->loc; } - $clone->lineNo = $this->lineNo; - $clone->text = $this->text; - return $clone; } } From 77377c1c90ca77c4e8ae3aa54fdfdfd5f311d52b Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 25 Jun 2014 14:25:57 -0400 Subject: [PATCH 10/35] Fix the ability to use unput --- ports/php/template.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 422a2e530..516e12a72 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -17,6 +17,7 @@ public $shift = 1; public $reduce = 2; public $accept = 3; + public $unputStack = array(); function trace() { @@ -255,23 +256,27 @@ function input() function unput($ch) { + $yy = new /**/ParserValue/**/(); + $len = strlen($ch); $lines = explode("/(?:\r\n?|\n)/", $ch); $linesCount = count($lines); $this->input->unCh($len); - $this->yy->text = substr($this->yy->text, 0, $len - 1); + $yy->text = substr($this->yy->text, 0, $len - 1); //$this->yylen -= $len; $this->offset -= $len; $oldLines = explode("/(?:\r\n?|\n)/", $this->match); $oldLinesCount = count($oldLines); $this->match = substr($this->match, 0, strlen($this->match) - 1); - if (($linesCount - 1) > 0) $this->yy->lineNo -= $linesCount - 1; + if (($linesCount - 1) > 0) { + $yy->lineNo = $this->yy->lineNo - $linesCount - 1; + } $r = $this->yy->loc->range; $oldLinesLength = (isset($oldLines[$oldLinesCount - $linesCount]) ? strlen($oldLines[$oldLinesCount - $linesCount]) : 0); - $this->yy->loc = new ParserLocation( + $yy->loc = new ParserLocation( $this->yy->loc->firstLine, $this->yy->lineNo, $this->yy->loc->firstColumn, @@ -282,8 +287,10 @@ function unput($ch) ); if (isset($this->ranges)) { - $this->yy->loc->range = array($r[0], $r[0] + $this->yy->leng - $len); + $yy->loc->range = array($r[0], $r[0] + $this->yy->leng - $len); } + + $this->unputStack[] = $yy; } function more() @@ -325,6 +332,9 @@ function showPosition() function next() { + if ($yy = array_pop($this->unputStack)) { + $this->yy = $yy; + } if ($this->done == true) { return $this->eof; } From aff3102f07d523f740220cb2f770e4f21ab14047 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 8 Jul 2014 15:31:09 -0400 Subject: [PATCH 11/35] Working well with jQuery.sheet formula parser in C# --- ports/csharp/Jison/Jison.v12.suo | Bin 0 -> 5632 bytes ports/csharp/Jison/Jison/Jison.csproj | 7 +- ports/csharp/Jison/Jison/Template.cs | 40 +- ports/csharp/Jison/Jison/Test.cs | 3 +- ports/csharp/Jison/Jison/Test/Cell.cs | 39 +- ports/csharp/Jison/Jison/Test/Expression.cs | 77 +- ports/csharp/Jison/Jison/Test/Formula.cs | 213 ++- ports/csharp/Jison/Jison/Test/Functions.cs | 2 +- ports/csharp/Jison/Jison/bin/Debug/Jison.exe | Bin 49664 -> 64000 bytes ports/csharp/Jison/Jison/bin/Debug/Jison.pdb | Bin 87552 -> 132608 bytes .../Jison/Jison/bin/Debug/Jison.vshost.exe | Bin 22984 -> 24216 bytes .../Jison/bin/Debug/Jison.vshost.exe.manifest | 11 + ports/csharp/Jison/Jison/build.bat | 1 + ports/csharp/Jison/Jison/csharp.js | 10 +- ports/csharp/Jison/Jison/formula.js | 1305 +++++++++++++++++ ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6824 bytes .../Jison.Properties.Resources.resources | Bin 0 -> 180 bytes .../Debug/Jison.csproj.FileListAbsolute.txt | 8 + .../Debug/Jison.csproj.GenerateResource.Cache | Bin 0 -> 919 bytes ...Jison.csprojResolveAssemblyReference.cache | Bin 0 -> 1755 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.exe | Bin 0 -> 64000 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.pdb | Bin 0 -> 132608 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4096 bytes 23 files changed, 1583 insertions(+), 133 deletions(-) create mode 100644 ports/csharp/Jison/Jison.v12.suo create mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest create mode 100644 ports/csharp/Jison/Jison/build.bat create mode 100644 ports/csharp/Jison/Jison/formula.js create mode 100644 ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csprojResolveAssemblyReference.cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.exe create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.pdb create mode 100644 ports/csharp/Jison/Jison/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..cfb792f2841f191bfd113ed5782759705c292ee3 GIT binary patch literal 5632 zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*3Bx6O1pwz`z1zgT(&*|NkE(%nZap<|r6K zArQon4}>KQ3Jk6cc|f{|p%N68L<2DfR(PDl(*_RR2V$mQyEyASBRf#u0jf9vXk$J@ z7K10y_B0^Nm7xNMZtTKhz!Zrb+}Ks2igEzCz~l=C{tTr+U*|An0__LkbcSFcKM{yi z!EP~TFoCMXPN^|4F@o{{EbU`gg(>;~Dn!_RQ%ucBB0&2|_CF}!UV)kc%DaD&0}#pv ziG#ukM2~{u8v^vq{~Mk(3O$D9e^7=20xINxM&#Imn2Mj|0ZI>}{15g&C{KgJ0l&{7 zvdH-#7Iv&aDNs28%I~l|&j~dX#)qjLrH4-lz}j@6>_Sy5oPB0$PMZYE%IGmfD0{DC9K8N_1BYEM zFjRAZ{)YHjl!>`+YSB+V&X$t%F&uxi$?-FCm^gOMYmw49`+sh_u*Cm)9%aaKqwL`y y0viT#`u72*|77r33?%PEa)8W(m~$&Ndil+z9Yd;@{QdxnBT{ocB3?&&`Ue23uitwB literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/Jison.csproj b/ports/csharp/Jison/Jison/Jison.csproj index 59df70a60..f218632e2 100644 --- a/ports/csharp/Jison/Jison/Jison.csproj +++ b/ports/csharp/Jison/Jison/Jison.csproj @@ -71,8 +71,9 @@ True Resources.resx - + + @@ -122,7 +123,5 @@ - - - + \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index ae96dbac9..4060c4161 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -489,6 +489,18 @@ public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColu LastColumn = lastColumn; Range = range; } + + public ParserLocation Clone() + { + var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); + + if (Range != null) + { + parserLocation.Range = Range.Clone(); + } + + return parserLocation; + } } public class LexerConditions @@ -651,6 +663,12 @@ public ParserRange(int x, int y) X = x; Y = y; } + + public ParserRange Clone() + { + var parserRange = new ParserRange(X, Y); + return parserRange; + } } public class ParserSymbols @@ -703,18 +721,22 @@ public class ParserValue public ParserValue() { } - - public ParserValue(ParserValue parserValue) - { - Text = parserValue.Text; - Leng = parserValue.Leng; - Loc = parserValue.Loc; - LineNo = parserValue.LineNo; - } + + public ParserValue(string text, ParserLocation loc, int leng, int lineNo) + { + Text = text; + Loc = loc; + Leng = leng; + LineNo = lineNo; + } public ParserValue Clone() { - return new ParserValue(this); + var parserValue = new ParserValue(); + parserValue.Text = this.Text; + + + return parserValue; } } diff --git a/ports/csharp/Jison/Jison/Test.cs b/ports/csharp/Jison/Jison/Test.cs index 1dd965950..c56b08731 100644 --- a/ports/csharp/Jison/Jison/Test.cs +++ b/ports/csharp/Jison/Jison/Test.cs @@ -34,7 +34,8 @@ public static void Main() var parsedCell = Spreadsheet.Spreadsheets[0][0][2]; var value = parsedCell.UpdateValue(); - value = value; + Console.Write(value.ToDouble()); + Console.Read(); } } } diff --git a/ports/csharp/Jison/Jison/Test/Cell.cs b/ports/csharp/Jison/Jison/Test/Cell.cs index c24a9d242..897a2bc1b 100644 --- a/ports/csharp/Jison/Jison/Test/Cell.cs +++ b/ports/csharp/Jison/Jison/Test/Cell.cs @@ -5,10 +5,6 @@ namespace jQuerySheet { public class Cell { - public Cell () - { - } - public int Row; public int Col; public int Spreadsheet; @@ -16,12 +12,14 @@ public Cell () public Boolean HasFormula; public string Formula; public Expression Exp; - public DateTime CalcLast = new DateTime(); public int CalcCount = 0; - public Stack State = new Stack(); - + + public Cell() + { + } + public Cell(int spreadsheet, int row, int col) { Spreadsheet = spreadsheet; @@ -41,23 +39,24 @@ public Expression UpdateValue() if (HasFormula && State.Count < 1) { State.Push ("Parsing"); CalcCount++; - var formula = new Formula (); + var formula = new Formula(); var value = formula.Parse (Formula); State.Pop (); return value; - } else { - var exp = new Expression(); - double num; - if (double.TryParse(Value, out num)) - { - exp.Set(num); - } - else - { - exp.Set(Value); - } - return exp; } + + var exp = new Expression(); + double num; + if (double.TryParse(Value, out num)) + { + exp.Set(num); + } + else + { + exp.Set(Value); + } + return exp; + } } } diff --git a/ports/csharp/Jison/Jison/Test/Expression.cs b/ports/csharp/Jison/Jison/Test/Expression.cs index 769d100f2..e88a8a353 100644 --- a/ports/csharp/Jison/Jison/Test/Expression.cs +++ b/ports/csharp/Jison/Jison/Test/Expression.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Jison; namespace jQuerySheet { @@ -7,23 +8,46 @@ public class Expression : ParserValue { public bool ValueSet = false; public string Type; + public bool BoolValue; + public double DoubleValue; + public List Children; + + public Expression() + { + } - public Expression(){} - public Expression(Expression value) - { - Text = value.Text; - Leng = value.Leng; - Loc = value.Loc; - LineNo = value.LineNo; - ValueSet = value.ValueSet; - BoolValue = value.BoolValue; - Children = value.Children; - DoubleValue = value.DoubleValue; - } - - public Expression Clone() + public new Expression Clone() { - return new Expression(this); + var expression = new Expression(); + expression.Text = Text; + if (Loc != null) + { + expression.Loc = Loc.Clone(); + } + expression.Leng = Leng; + expression.LineNo = LineNo; + + expression.ValueSet = ValueSet; + expression.Type = Type; + expression.ValueSet = ValueSet; + expression.BoolValue = BoolValue; + + if (Children != null) + { + expression.Children = new JList(); + + foreach (var child in Children) + { + if (this != child) + { + expression.Children.Add(child.Clone()); + } + } + } + + expression.DoubleValue = DoubleValue; + + return expression; } public Expression(string value) @@ -31,12 +55,12 @@ public Expression(string value) Text = value; } - public bool BoolValue; public bool ToBool() { ValueSet = true; BoolValue = Convert.ToBoolean (Text); Type = "bool"; + Text = BoolValue.ToString(); return BoolValue; } public void Set(bool value) { @@ -45,11 +69,14 @@ public void Set(bool value) { Type = "bool"; } - - public double DoubleValue; public double ToDouble() { - ValueSet = true; + if (Type == "double") + { + return DoubleValue; + } + + ValueSet = true; if (!String.IsNullOrEmpty (Text) || DoubleValue != 0) { double num; if (double.TryParse(Text, out num)) { @@ -87,35 +114,33 @@ public void Add(Expression value) value.ToDouble(); DoubleValue += value.DoubleValue; Type = "double"; + Text = DoubleValue.ToString(); } public void Set(double value) { DoubleValue = value; + Text = value.ToString(); ValueSet = true; Type = "double"; } - public string ToString() { ValueSet = true; - Type = "string"; return Text; } + public void Set(string value) { Text = value; ValueSet = true; Type = "string"; } + public void Concat(Expression value) { Text += value.Text; Type = "string"; } - - - - - public List Children; + public void Push(Expression value) { if (Children == null) { diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index bc1ec4011..656314c29 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -1729,42 +1729,42 @@ public Formula() Rules = new Dictionary { - {0, new Regex(@"^(?:\s+)")}, - {1, new Regex(@"^(?:""(\\[""]|[^""])*"")")}, - {2, new Regex(@"^(?:'(\\[']|[^'])*')")}, - {3, new Regex(@"^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))")}, - {4, new Regex(@"^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))")}, - {5, new Regex(@"^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)")}, - {6, new Regex(@"^(?:SHEET[0-9]+)")}, - {7, new Regex(@"^(?:\$[A-Za-z]+\$[0-9]+)")}, - {8, new Regex(@"^(?:[A-Za-z]+[0-9]+)")}, - {9, new Regex(@"^(?:[A-Za-z]+(?=[(]))")}, - {10, new Regex(@"^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)")}, - {11, new Regex(@"^(?:[A-Za-z_]+)")}, - {12, new Regex(@"^(?:[0-9]+)")}, - {13, new Regex(@"^(?:\\s)")}, - {14, new Regex(@"^(?:[.])")}, - {15, new Regex(@"^(?::)")}, - {16, new Regex(@"^(?:;)")}, - {17, new Regex(@"^(?:,)")}, - {18, new Regex(@"^(?:\*)")}, - {19, new Regex(@"^(?:\/)")}, - {20, new Regex(@"^(?:-)")}, - {21, new Regex(@"^(?:\+)")}, - {22, new Regex(@"^(?:\^)")}, - {23, new Regex(@"^(?:\()")}, - {24, new Regex(@"^(?:\))")}, - {25, new Regex(@"^(?:>)")}, - {26, new Regex(@"^(?:<)")}, - {27, new Regex(@"^(?:NOT\b)")}, - {28, new Regex(@"^(?:E\b)")}, - {29, new Regex(@"^(?:"")")}, - {30, new Regex(@"^(?:')")}, - {31, new Regex(@"^(?:!)")}, - {32, new Regex(@"^(?:=)")}, - {33, new Regex(@"^(?:%)")}, - {34, new Regex(@"^(?:[#])")}, - {35, new Regex(@"^(?:$)")} + {0, new Regex(@"\G(?:\s+)")}, + {1, new Regex(@"\G(?:""(\\[""]|[^""])*"")")}, + {2, new Regex(@"\G(?:'(\\[']|[^'])*')")}, + {3, new Regex(@"\G(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))")}, + {4, new Regex(@"\G(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))")}, + {5, new Regex(@"\G(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)")}, + {6, new Regex(@"\G(?:SHEET[0-9]+)")}, + {7, new Regex(@"\G(?:\$[A-Za-z]+\$[0-9]+)")}, + {8, new Regex(@"\G(?:[A-Za-z]+[0-9]+)")}, + {9, new Regex(@"\G(?:[A-Za-z]+(?=[(]))")}, + {10, new Regex(@"\G(?:[A-Za-z]{1,}[A-Za-z_0-9]+)")}, + {11, new Regex(@"\G(?:[A-Za-z_]+)")}, + {12, new Regex(@"\G(?:[0-9]+)")}, + {13, new Regex(@"\G(?:\\s)")}, + {14, new Regex(@"\G(?:[.])")}, + {15, new Regex(@"\G(?::)")}, + {16, new Regex(@"\G(?:;)")}, + {17, new Regex(@"\G(?:,)")}, + {18, new Regex(@"\G(?:\*)")}, + {19, new Regex(@"\G(?:\/)")}, + {20, new Regex(@"\G(?:-)")}, + {21, new Regex(@"\G(?:\+)")}, + {22, new Regex(@"\G(?:\^)")}, + {23, new Regex(@"\G(?:\()")}, + {24, new Regex(@"\G(?:\))")}, + {25, new Regex(@"\G(?:>)")}, + {26, new Regex(@"\G(?:<)")}, + {27, new Regex(@"\G(?:NOT\b)")}, + {28, new Regex(@"\G(?:E\b)")}, + {29, new Regex(@"\G(?:"")")}, + {30, new Regex(@"\G(?:')")}, + {31, new Regex(@"\G(?:!)")}, + {32, new Regex(@"\G(?:=)")}, + {33, new Regex(@"\G(?:%)")}, + {34, new Regex(@"\G(?:[#])")}, + {35, new Regex(@"\G(?:$)")} }; Conditions = new Dictionary @@ -1793,10 +1793,12 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 3: - + // + break; case 4: - + // + break; case 5: @@ -1842,7 +1844,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 9: - + // + break; case 10: @@ -1863,7 +1866,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 12: - + // + ss[so-3].Set(ss[so-3].Text != ss[so].Text); thisS = ss[so-3]; @@ -1871,7 +1875,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 13: - + // + ss[so-2].Set(ss[so-2].Text != ss[so].Text); thisS = ss[so-2]; @@ -2281,24 +2286,22 @@ public Expression Parse(string input) public ParserSymbol Eof = new ParserSymbol("Eof", 1); public Expression Yy = new Expression(); public string Match = ""; - public string Matched = ""; public Stack ConditionStack; public Dictionary Rules; public Dictionary Conditions; public bool Done = false; public bool Less; public bool _More; - public string _Input; + public InputReader _Input; public int Offset; public DictionaryRanges; public bool Flex = false; public void SetInput(string input) { - _Input = input; + _Input = new InputReader(input); _More = Less = Done = false; Yy.LineNo = Yy.Leng = 0; - Matched = Match = ""; ConditionStack = new Stack(); ConditionStack.Push("INITIAL"); @@ -2314,12 +2317,11 @@ public void SetInput(string input) public string Input() { - string ch = _Input[0].ToString(); + string ch = _Input.Ch(); Yy.Text += ch; Yy.Leng++; Offset++; Match += ch; - Matched += ch; Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); if (lines.Success) { Yy.LineNo++; @@ -2333,7 +2335,6 @@ public string Input() Yy.Loc.Range.Y++; } - _Input = _Input.Substring(1); return ch; } @@ -2342,12 +2343,12 @@ public void Unput(string ch) int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - _Input = ch + _Input; + //TODO: not really compatible?? + _Input.unCh(ch.Length); Yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - Matched = Matched.Substring(0, Matched.Length - 1); if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; var r = Yy.Loc.Range; @@ -2379,8 +2380,8 @@ public void More() public string PastInput() { - var past = Matched.Substring(0, Matched.Length - Match.Length); - return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(-20), "/\n/", "") : ""); + var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); + return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); } public string UpcomingInput() @@ -2388,7 +2389,7 @@ public string UpcomingInput() var next = Match; if (next.Length < 20) { - next += _Input.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); + next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); } return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); } @@ -2413,7 +2414,7 @@ public ParserSymbol Next() return Eof; } - if (String.IsNullOrEmpty(_Input)) + if (_Input.Done) { Done = true; } @@ -2432,8 +2433,8 @@ public ParserSymbol Next() for (int i = 0; i < rules.Count; i++) { rule = Rules[rules[i]]; - var tempMatch = rule.Match(_Input); - if (tempMatch.Success == true && (match != null || tempMatch.Length > match.Length)) { + var tempMatch = _Input.Match(rule); + if (tempMatch.Success && tempMatch.Length > match.Length) { match = tempMatch.Value; matched = true; index = i; @@ -2454,7 +2455,6 @@ public ParserSymbol Next() Yy.Text += match; Match += match; - Matched += match; Yy.Leng = Yy.Text.Length; if (Ranges != null) @@ -2462,13 +2462,13 @@ public ParserSymbol Next() Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); } _More = false; - _Input = _Input.Substring(match.Length); + _Input.AddMatch(match); var ruleIndex = rules[index]; var nextCondition = ConditionStack.Peek(); dynamic action = LexerPerformAction(ruleIndex, nextCondition); ParserSymbol token = Symbols[action]; - if (Done == true && String.IsNullOrEmpty(_Input) == false) + if (Done == true || _Input.Done) { Done = false; } @@ -2480,7 +2480,7 @@ public ParserSymbol Next() } } - if (String.IsNullOrEmpty(_Input)) { + if (_Input.Done) { return Symbols["EOF"]; } else { @@ -2655,6 +2655,18 @@ public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColu LastColumn = lastColumn; Range = range; } + + public ParserLocation Clone() + { + var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); + + if (Range != null) + { + parserLocation.Range = Range.Clone(); + } + + return parserLocation; + } } public class LexerConditions @@ -2817,6 +2829,12 @@ public ParserRange(int x, int y) X = x; Y = y; } + + public ParserRange Clone() + { + var parserRange = new ParserRange(X, Y); + return parserRange; + } } public class ParserSymbols @@ -2869,18 +2887,22 @@ public class ParserValue public ParserValue() { } - - public ParserValue(ParserValue parserValue) - { - Text = parserValue.Text; - Leng = parserValue.Leng; - Loc = parserValue.Loc; - LineNo = parserValue.LineNo; - } + + public ParserValue(string text, ParserLocation loc, int leng, int lineNo) + { + Text = text; + Loc = loc; + Leng = leng; + LineNo = lineNo; + } public ParserValue Clone() { - return new ParserValue(this); + var parserValue = new ParserValue(); + parserValue.Text = this.Text; + + + return parserValue; } } @@ -2908,4 +2930,57 @@ public void Pop() } } } + + + public class InputReader + { + + public bool Done = false; + public string Input; + public int Length; + public JList Matches = new JList(); + public int Position = 0; + + public InputReader(string input) + { + Input = input; + Length = input.Length; + } + + public void AddMatch (string match) { + Matches.Push(match); + Position += match.Length; + Done = (Position >= Length); + } + + public string Ch() + { + var ch = Input[Position].ToString(); + AddMatch(ch); + return ch; + } + + public void unCh(int chLength) + { + Position -= chLength; + Position = Math.Max(0, Position); + Done = (Position >= Length); + } + + public string Substring(int start, int end) { + start = (start != 0 ? Position + start : Position); + end = (end != 0 ? start + end : Length); + return Input.Substring(start, end); + } + + public Match Match(Regex rule) { + var match = rule.Match(Input, Position); + return match; + } + + public new string ToString() + { + return String.Join("", Matches.ToArray()); + } + } } \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/Test/Functions.cs b/ports/csharp/Jison/Jison/Test/Functions.cs index 4edce4b0a..eff5cb715 100644 --- a/ports/csharp/Jison/Jison/Test/Functions.cs +++ b/ports/csharp/Jison/Jison/Test/Functions.cs @@ -39,7 +39,7 @@ public static Expression Sum(Expression value) return firstChild; } - value.ToDouble (); + value.ToDouble(); return value; } } diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.exe b/ports/csharp/Jison/Jison/bin/Debug/Jison.exe index 2d64ad580d4c6809d2d4367893213e0f71737619..fda9a7134ea9a5f6f16ff727aa6776e766020731 100755 GIT binary patch literal 64000 zcmeEvd7MKPuQ6{(G>L$TNle0yZ%i;I8U)cS`aS1Vb@%P6$@cr+f4<-E zL%aH%r`Ge-sZ(`tch6mP(Jdk*to7Uu-yv&&Adja6XG%)vXQA}q`hVpb)B zqQooy(by~z7F(V}r}Km$^egD?*&mdB0?!LmMyME8fwTS zk(qoiP+K*2nD78?dJ#rjnH1oBBa%XYB(cagDlO~OWJQ$P3J7=vnT58HhGJO}X&xr5 zZKO2E&|h#uP@JbmXnCii@m|movXZ@Vdh=!jNfk1%sy9JE;S>_smcg$=a=l?9Sb%56t}F=yCsc_S(FoiT?eu`m5Ly9iZa=%<*jnK&M+1eyRHrZmsq5HI zQkF~R(*O!1(Rg7fl6(_XVLLI>Vywy}|XCVoJ;$x^d&DoCqbx!iVBp4i+A4|D=MY`rDbRKY1b}H#@1k?B0DKJRh z*n>qAO094koyN>KltxaYcc(1UKONhS76QNqSQ&U@1k%7VILQ07EI8Qv1_Zk%GhVhZ z#Cu$3q^s@7*r@j$v@AL#JBsX*3Hb>$J~Wz+c`wTvnTdehD$B02dT5E*F+1WLX;se| z1lAN#J(8(LLNv$5#ERr+14-!uaG$qev>j!}-2Qg|RO?)I+?MB%MC_;? zDZoo3v`}IqD*MaB7b5vdguqAb>hk1{9fA2H^0-K?f0oBa>~N~p4U25Gu&c?nt3}Hi zbYk^jupx|wTv$5oWHjA_ZbNQ78s+tE$6ND=6S26}gV00^k!N&)>W*#KiZa#%2MYDH zAckG=K$6Y^0aU2+IjNmKw!Xv~-+62Cf@%6LzB59oBHdZD{#6ILanL0g8bX zvK2XTSQp0|9Gk~>z|Tv)h{`3;tch%$h*tY({JSI!$3WaVW1-jE^>V${$py*l&5qc% zUFVywY{U+^4d^T7_G{Vom-pXiRoD&90XUE)ZV1fyVF0s5F*Phchj;i4VqLH>jc7@s zZ_BchBV!zkBY4NA5{mR<_Xx>pmT7WiP49GI(Oz0I7O&)9n+s9u?STW!^uY2 z+$EDd3k3xFNH6)Y$T}*EwjqUKL%_xqf^)mrUw)6VVsa=h(A%LBYUVZX!Hh+)|0BjqK6JPW#A#PnrMD1-Vmzd)nmu2ag9{5LE0;$ z1&w@U54I3$mfl2mfGW;TH?n7l%%eACC^tr{X@40#Tjf+;|#Q4woB1Is!&P-=xgb1)Dz zmz>a`qmkC^WaL!c+%Ybg%+~AKq6#_4Z~YXHeMK}Wg;r5OhtjR&G?4pXhIv0CQzrT+ zq?)6LOjQ@;Nh>0)zTnY3N?0jg7c@^Hu?GH$s8;gNS?CZ%(ggL)LE__7PDm`mgG@I} zkQ;t>sF%jfM$!#5l`-!mD0~vg%z(K9z3&C-*)}{z-6}(b- zB&E)(q?D~rH%O^fuzzp|F^u`2mMj%e;|}w<1vj9Lx-{OP$YZ=Xg@B(7#v6&TX*J1O zto*1qo?M!iZ;hx*t*BLFd@tnE+#DDvH|#L>7HqoVl$Ak@A*r#n{f7HTp%3sTp&_k;oN0MIPi>VfG`^c zqU<2-qak^Ec~0)tfPnkr@T)Xf&A zA?lq`J9@~Q4R7SjGPgF{ zF027^x#Pf-^v>b+Twi%U-;U!w&f)cq-d362zjz?8=Y`L!v7eeba>_y$q-PK2-|Nh0gJdBVWMpzCb5#n+1JpfDI&-veI&q{=gBc;6+ zp^WY(5sxzRP!O_uWFVo4z}q{RO+&`X9owHv+aIa<@t9fJn4HTs#ajztqlwxH^}-KA zqInHGdKdwURODj~hO2ze>eq|O#ew{Mcvmmn9^z6Gv1CeyiRNGYOXWboXsQ8Mz=bcM7OmjxwDTiH^I1D0q+d)VHoJt|Tc$XtZn{KZIk4O1E9 z`^yB&xv~w+us~qIIX}rqxSA+pYyqBtuvDi;!?!xP#VggcQg>>yX}rpAc4gYK;J6h3 zigeJ#C*}56nSq(6?GZfjb{>{xFi%ulG}HKrGwcYq;EUQARu|RaYLYYJKeLiqnI|kO za|y&$Yi1QA(nbtX;Cd1^%Ixt@FnMx9$~d9mf7)MQd0aTwd;JFDu1!@eOSix-EmAqe z%B+Um{A(C8gN9sagW8KoM#kb`R5BJe;aC;23h#d3}JE#QqT*LvT9 z+@IyR_cG)GEW7d~F;FUD?+?fsB$bF)XNgUNr4sdqLm48KDsK{$bhXr~y_uxNq!#ne zC9OtkHQrLvYNb}|T}WD7YH{yk(h^cjc$bn^C$&0nEot>qtM}HEW=qZHE1$F@HOI?S zo+~xiE0ES8wFbVlN%xalKktK-CwX#{UJq%KDL3WaM4IHvZS+1(nqi}_dU`SWrMxlq$$pZcrTHbmSahKFO$|JwI**5X+xzp)cXTz!=yIM z`x|M)r8eBF2|^nowGmz&X(OdJ(kgi5GC1>MpQkjE?*f2@M@rPMRQZ)^zk&-ZUnN|6 z`L&7$ae?8_t7y`$Y%^9-vZg|-t>YzKgGwA?R~5xHJ{>8^HFix&uC;4RGOk!kGH(2qWL!;^WL%4sWZZEr$@u)IB;zBV zlH6c7lw^DiQIeB(vLxg4hmt(N9#E18+5=1SAbU_r9&8UT$wTZRB{^-UOLCLlRFa3< zLrd~7dss;xZVxZXBkU0+d89qEDEBVFB1;xNfEDMCO3C+=8s&SYzkDA(K)yE*l<(O= z@_o!;`95}td>@C{$_Z;7N#I(vT!QG zB?~Qxlq{TvAj!g1#77oRM`&bW8loZ#XCNT5Fdeawg)n=~Ja}NxDS}tJ0@Q;nMU}DXdPPE`_%AG%2h}pCN^{>FH8vPoF7;TzZBS z)}?1kVSRd*6gH%1OQ9n@M+zTE&y~Vu>3LG_zgIaj5uy|DzDv^;XXKDrFZkA;K!2Ut1KOM)5RR6%eLgqYY zKQ}PtobIpnT)HOZOshn|&l#0SUCNnWiPWc@Gb<50<;SkMr#pdnyEL%@QDfCUW!3mO6zGz2VY z2w2b%uuzG(TcyoEvVR1dE0+F`$Yu?J%^CumH3T+m2yE66*sLM2Swmp6hQMYGfz28M zn>7SBS0e6}(&iuAKZeZ}(e1}%vxdNC4S~%X0-H4iHfsoM))3gNA+T9PV6%q6W(|SO z8UmX&WJJoD=lAv>yFHSH7wi|nLPbP>fmqNGu%IDeK|{cThJXbP0Sg)e7BmDbXb4!) z5U`*jU_nE`LM7r}C2ihm@6=a=Y8!t#i8@+|KuNyIbdWx6bWuo!i|8x4R8)cN^U9Hn`nw zaJ$>!cDKRpZiCz12DiHnZg(5p?l!pHZE(BW;C8qBA<6BF_KS#v73Z`UDGq7~;-H2g z4r&PEpoSn0Y6#+>h9C}V2;!iIAP#B>;-H2g4r&PEU?t*ilQ#dv{s~Ru0>A(K#Jxsl z{?z^{2&p)N{*(yO5D=mvAVfnzh=za=4FMq<0zxzdglGr|(GU=#As|FUKu9IxUMp>W z$$kk7>>NKIFM))LQ};_mf`)(u4FL%n0unR?Bxndo&=8QIAs|6RK!S#V1PuWR8UhkD z1aW_1h3Up>dCC2-By!_n$Ie4ka`#JHVA>c(rz>9`}7YzX~8UkK41iWYn zc+n8>q9Nc#L%@rMfENwH71Uxs3qMbf(95_Vk-YrE{snlcxHA0(@uDH%MMJ=ghJY6h z0WTT?UNi)}Xb5=G5b&ZQ;6+1lb$_nk=3k`2lvV~zRU+>7l7*M;m%&2CwfD=!f`)(v z4FL-p0v0p`ENBQ=&=9boAz(p6z=DQ=1q}fUOZ+UnOe|<+z(OVB{)c4Ym-a8yID(w# zZ{U~iM`h-(>|fD7e!f5RSMCim^VjyTQ;n7Pw0`a0DD(E%d-Su>9-NJq`WxD#pN;nD zXQMs(*=Ub(HrivHjrJI4qdmsiXpeC=+GCuJ_84cQJ;vE+k8w8IW1Nll7-yqB#@T3( zaW>jxMEgDN$0WCV?Y%m;d%^88Keu~zZujck?$x>7YjC^Q;C8RU?Ouc1y#}{?4Q}@u z-0n5F-D_~W*Wh-q!R=my+r0+2dkt>)y4xkU`|N!>xBI~Dg??`L>D=zqx!tF8yU*Zu zpTX@ux-+@Fq9cRteFoe6(zr8uL1iuddUc<{|2~8NeFp#g4F2~S{O>dP-)Hc@&)|Qb z!T&z@CdvPPd%w>Ae(>MwH*mks|9+kS{W|~q4gU8V{O>3JS5$Ol@W0>Sf4|}F`wh1D z8*J}4*xqljz29Jazrpr?gYEqW+xrc+_q#Vswh!0`bhZzG?Th>*9MIW5ptF5IXZwJ` z_5p+K0|vJT3~mn?+#WEvJz#Kqz~J_P!R-Nq+XDu-2Mlfx7~CE(xIN&0TylHRKB#kh z5Zqqu=k}n^?LnQ}gF3ed4Q>w_+#WQzJ!o)y(BSr@P;P#Ng?IDBPL+-7T+r#!@o!i6U_7Xq0hjnfb>)amJxjk%f zd)VOiu)*zNgWJOfw}%aG4;$PbHn=@(aC_L`_OQY2VT0Sl2DgU|ZV$V+Np4@UU(vaJ z1>COkbNhG!MYM9Nw1r}5Ra{(1PTbn2|QY4>Vc|2+Iv@}`QV`7K?YYwchX zD-rijY4h*w-@)e7{j>2qvROl5vxdNC4S~%X0-H4iHfsoM))3w1-x)Ul&anA+WV6-| zY_3GyyQIxW>?3-VJc1~>)=$C_JxU(YqvR1iN**zywP5hHFMNyExDmF?)C86Ghr=@BE69x)>65hIcwF(T;^Ba$9*@0R?(X1@lXt5~_O zkhnfXWik2Hhp{F#4rKPNNau-~A` zT<_0(!~ML>eA9lDGB@}$-*oShnSZkXMEC4E{F#4pzaTS@+D9>cWBqwYY5Fuo5Bo>c zm_DtH9`=tKVgINR_KzB2|ELl6j~XH4s1Y)bQpnK8gXyb8+rS!)M2S0e5grOn6eV|ti8hA{a7 z|HL2D!{jkNOdiw2m9y7w^F(XVKGs5ICBPbp-g5ohFC>}EolgEq@c+3ca$BYno z%m{(Uj1YLt2!Y4k`y{u=?c+MP$HDDoer}KJ+#c7tJ+5K_+v5he#|>_e z8{8f@xIJ!gd)(mmxWVmlgWKZ53HVc|-=9wC z{&Yh3rxUtAoiP0AgyByo41YRd_|pl)pH3M5bi(kb6NW#XF#PF+;ZG+Fe>!3K(+R_$ zP8j}l!u_)3_8t2j_*2Dqt=}Pk(h%LB-XVX|%D|sA1pcHU@Fxw?{plUUpWZS2=^ewL z-XVX|T82MWBJKmy=6CIPVROY-uiqt`HAJ`hU9wp#qwn$W8hiY^Y1pjQ(rtd%u=!oX z=64O7-zA&1mSJ-x;(kTi{Ac^mu({$(;eRHZH3WOShQMYG!8~gS=2=5vvxZ=g*ARV= z|FdE9pADP;Og3xnz~)NC{i?M2FZN$xbHx|x|3Wrv2yE66*sLM2Swmp6hQMYGfz29% zqqv6PD6S#;CH!B=W~~ftu0-4irOkh}{|cKcelqY^vROl5vxdNC4S~%X0-H4iHfsoM z))3gNA+T9PbesQ5Hfv>Ib0y+FByIki{WsWL@uP^pk7SBYY1%C5ZJ6CuvtT3 zvxdNC4S~%Xf=ez9fz28Mn=29bVQKSw_It3o;ww(?k7SBYY1%C5ZJ6CuvtT3 zvxdNC4S~%X0-H4iHfsoM))0JYsSSkMr#P>Hx-XPe(kh`@WbA^^MnHy#Nh%MA>+8yKuNFxYQk zV8Fn@fq{Vq0|O5R1||#)To@SGFfj0;W9}o0kpLJ81nADvMxQG%mQFccI@XkO@*3uT zLp5cgDGN+i{>+In?L5F3nDl=eoH6Z8z?gQ!moe>@FJs!tfH7^KWK6s9%a|5J83U8X z_`sx&x!+Xg2Vs6NK(|LWRWK9`xZhGmLMRd<_gh?1BE;@zU~oSJ18D{Z_cJiKpMk;s z3=HmPU~oSJgZmj6+|R&3nt_2d1H(rJI_5sASPFxsFtOzSy&6HZNDT}u85meHFtB7` zV9CJ1l7WFG0|QG229^vAEEyPBGBB{DWA1+{Mj~J&LX7x-sYVbnVqjpzz`%%sfe`}( zBL)UW3=E7I7#J}yFk)a}#K6Fafq@Ynb01TTM8Qau81es_i6COcz`%%sfe`}(BL)UW z3=E7I7#J}yFk)a}#K6Faf#JKAmsdmy*anu2a$rfv+{YD5RbZ)#Sn_{MlOSTrz`&A$ zfh7Y2O9lp(3=Aw87+5keuw-Ch$-uypfq@YN10x1Dv=3~giMdZG=BmM5H8D4#Vh*aA zIRi7cH5hMOz zViQEZWMBp(C{x2KG0pCmJ;{r;3O?H8zw!Ce0(J7f6#(|>E5G3|G#jA_3_CCvRVH46#MLc*Md z1kFOBVipqSEF{cXNSL#b=wlXu8M6S)m<3?QEC4fR0hlohz>HY{X3PRGV-|oJvjEJP z1z^T305fI*m@x~9fcuP^g*wba9Yu%pDk!hx=wM)o4hDwkU|@(228QThV2BO|hUj2m zhzZNrqlgVA^^0#{ z#?Au_O!|K=%yo^6Zm<25iWEdv8128N|&U|3oPhNWd-SXu^#rDb4PS_X!tWnf^$z`%%(x!C&L@;K*STFu^PEpA=`80CC7tcu zsigVNT}oQu+^wW@oKGofq4Q}aEpk4iq{Yr>m2|H2IVCM|KCh(noO_gXzVihoEp_fy z(lY0ZN?PvRr=$y<`;~N|^Ccy%aK5ahR_6gFUF3X4Nf$d`Rnki5K_y+{Jfx&m&cjN& z)cKl{Ry$u;Qk(OLlGZriP|{lGn@VbTzNMs`^Qe;6Isd7o_0D5T+Tc8{qz>l^C4Ino zQc0INPbsO>`L>caI!`O9%lR)Q<(+4gw8{C7k}h|iRg&j?S4jouzm?SOd{0VNp%Z@$ z?7c(-0!2e0X^+Zpq(2TuO3FT|tTfu0veMrkT~-Fz&1Gevoh>Va>@j6!usyb{46(eC#%#izOUX+EvN zp6b*3*{A!oq&>~2rR+0&TBAMPr}ekb^l1a^89r^GJ=3QRvS<0U!S-yQHpHIe)6(`_ zpVnm0^JzovvwYex`)r>!+@9~#M%W8{+DQ8xpEk-~=+jQJ7x}b|z1XLXw$Jrx&Gr(X zmbK6GX=Cj3ecD)isZSecFY{^R?d3jgf_;Hcn`mF?(@wTm__RrOt52J3U*ywHu`l*% zQ|y&K?Ns{`pVnfp@@c2pm-@7+_G+JYy4~i}rrB$J+8Op*pEliY_i1O^IiEJeUgy(h z+UtGVEPI1bn{9Xav^n+%eA-<5GM_fj?(}JA*&BV@*>;ytn{VfR+5&r%PdmrH+@~$H zJ)gG7F8H*?c6V9pT}XegRvkk6A-43xd8YEG*@X2j;$rxVvj{;+6iWt@kpli+b|jyd zVJI0$RW}y!r?Y)Xqa8|VP=6B|U_t{;XpjjFwnP23=7*RNqLxt%e`Pf^K&zUr=>x0n z1B>_3UZM}It`Drf56tcZbNayCKClKmq?4ZR*9Vp~*-NMTXb&@H@Y2VWrTdt(G$zd$ z%OE_qP3L*A-Cv)!^pHNvrTZw?)CV@y?mtlPW0>7&^gG;cH2NLU2R71<7=u&~C=i+Zp7cK{s$Df;~{XZ2* zc_*1*qqo!q`+FZU!2#Y*6CCJuhm4K}d4Dv)!JZQ~N)GYnnP9rw^ZGzz-aUPwHQvEK z&|1%m7@ei#-k?6vgg2oNw9cE;2U_nf>jSmD_C8R@>+S<}z3clx8@#*vK>K+Q^noV5 zr}{us-V1%8jo$t~(Ei?=eV_w8JcUm8ne;%fz7KSehsOyTWe0oH`ap+x3;RIR-pW4E zCa<#(bf|Y#ALuY|dmrd8nHqe1N1v-G^T{?;yJ_gc03er9f(moQ>J{HnG8q$6q(!PG1eDYAAJj^E#FUzR{9;y(@Um@qJ zG0=+#v*7U;c)o*+b$lxxD2V5I$Y<$(5M}Tz-SC3iDm)Z4iy~pX@R$ohk0c=-4{H&4 zu!F#XMLdevynqmRFcUwT5RYFFgDoNOj05o{ypG_N4GOUludm~E9IxRaA(r5^9Iwmq zdLB=GD!%T5{y1L0$18@8r{lE|ukYgZ6TJS0*XW24r{R^u>pHxCj+cWra(K0T4+$O# zOpiI-f+lKO9s>|0g!S`U?xj+nrQ|MElr!?Tf}m0Uf?F%HKdEP5q_P`jN7RE7d#(n# zr5;(!Y{gjex1bF<7FF`RmWIk!^0%P~o_m64LQZ2dR6#j9UmvCB^Peyp71^m3b$RH0 z*1glL+j1?~Z0SWpHTsv0QzDO~+&i)M9v)E>@ENB{p4W2fztsw!2i#{Xf5MdaJ(j+R zzOs_&(pVl;t^8}#rL|I;uH4^kr7vDAA1S3KhW%Sjg!*dY02YTfpMF27oSoME?Zzy( zeD>dI;iA4;xcJ{`;o`np=>PAukm;d$?Zc9n5Ku}6mjs@ToUgoE{P+L;(q`c;DBMy& z!cjpnESK~Bp!B?!3yXQm%S!&Jf=}j4Tnta#@kJonz-N$?xsJ2#Vs=FjRG?&zug*uf z&OU_Ia;%cspDH)`OfkEnNh+W<$#rCtH}+LWEB@(n7kI#p9Kiq?B1*PbbV(Jc4ZRRg zha5JyDTfd(wy9?81U3_@t(q(iCVv;2t(cYbT7LX*l>I!)mf1V6<>UWG-L8dn(Y4%m{=icH*p$wE!-tTSawY-H5mZ~b3@`+q}cu&LE&N_7Eb!Yk) zsVaM3%VVmtk3j$Q_!=uspKoSpi1|AVsi(<6SiU#={t&@Gok#4(FH#iEhQi1-iRk4`STG`@C;XxU5UrS`pmniM4n}sMP~DLQZYwKd2a<>J!R;l%&f@!of3! zV_q_I0~JRBjiP%v)QdkWk ze7_Ela)OSfMsXD_9Vd{Pi(D6vbSid-HJor8TD}dAvPnHYEEOb0hO0Ks$xgdGH*%3Ths?IlE z*@zu-8_-wE?bovFFYmw4s<0cH1NGot+z^=Y!$2L3;pg#v4)5?8Jex3B0AZ2dR`hLI zR&r#FpR*Ui`-Olay(=h#r&*@Sku|;BfJJ++p&VYxy-T?erF;)SF2~aB;Q^}y)!ZeM zJPQT18tEk;7I>n!Y`B2_6o#k#U4*=58f#Ge9%GI2SbJ!cd2BopJiV1XPi~+Q`BZ1x zE{iaYFtvgQif1ZPW6GG5Ej!l8o>j70 zdK1|Js<_HqE%WFN8On`u-In$jV}~8tL(Yle(VK|ifx}huIpnuuy^Z@`Y9g!ifB>_t)c*;q+7{p$bTG^_)MATpO9*f z9x_#3kSDE(wEBWa^C)@*GOY`mr;u19gsArUCu&4MBu!8cb}v|4;#5vZEW(3KH%yQl zes-vr#>__24f!)MIPWAV{N&5b45;kfLLGSMS(^8vznJWg8ZNcQj~~Tan?esWrrz^B zl2T_?Qp#4R8>G}K*gv>~7{>fhOO^_#aff-_f*a6AT^est zALS=na{U@nm0D4&#)v1;lbanFC^u|8p+1RCH=MFE=b{Bjjiv23+&>C^06*{&0&kr0 ztf-c2s0RB0PHprI)(gN0RyIFOJOO|`-8NR_Us zQYKH`Y+)Lr-l-HqPNOlX{avnMJP?ukU7@dH|2m^M*Xvup7<%PO?xhmG8a}aSHC3jS z>H}4$$qD^^AeWT(ugF%bBB@rN-W+fRH#&ysmh9xZi3^co$$p0>{8?zaw?;Fgzt!mRP!w3ud_W>U}D)}O&%*v#Y|Dscr=p+}*+=65qmC6b(+;b}cmae{^>P}0RYc$@} zf~VWNc=}{A)j*dEICs{ik|i;74z+k2wMcc*BE9u|f?6a=ULN7Om$-Kl%i~sH%*Eb9 zOJyu#Ecs}US`~bvB$vXWTh{r!ez?ljB`kUcm{Q%BK z+um$=BVU%ewb^!I4Uo$n2cD#dTgEt3*H@m;`9b$U8@;VEyMOUOUe61kS7SdlbF{q_ zaH$l@oJ~`M@nnTvOL4&xLou)cGA3a`2oQKSE$E5$tbr(lB(--YR_72ZAFPSa9f8VW zyb$E+LCk{miFjc%7obgGdc<11HsRHa*Nu4Hi5GlEd@tTGg-JxHC*F|`>i>EO6W*}$U6o;7i*!(Dk7_Rn7pv5+`N2$`Mdnj>5?F zFopb)lz~b)L`qsIKO?0{DYz&TX;&#vkgiat|rBO2P6G>3&MV7BA9qsbsH8 zCzRx+>y@-2U8kf~Xhvl^K;Dp`=0SkxFuu zY1wKu5PIJBr?6>pgigv>oRT3oDTAka%)MxS>|ZH{C!)8(XGC)l>jj$w|N9p!@)$yL z3}HD2JRW{EHz%k)gr)zT_N+u$4U^AebJ1#At~(wBpV6%zx$&$<|9l+8N+i>8rHA8^ zOUETr>6mXDhGltqiP{;Q#9X;s7Xx*d4mYj9a-FD>Y=8Ce8VP~znh@u{l%Wp0?vul z0-{>T3in=4Z*Urq-^0BHevkBa<6Sgg?W?z$azedV&|A3ogPiZl?^X3~C9q7+7S3$O zRqqnc!c3MkucWdec^TFWKcao2Ki-?9KXEo+tMM5iCVhk~?M20+rI--16xXOFOFzYy z%J#77)80epQ7Tdw$XtZn{HKw`XaQ57I1c#B1k1UyjZw%SMs47OH9D`>M6o9q;DFf1 z>eOiX))=>VrJ7diPE9tASJ}<3yp8mvJo@=2KH1wx2Ih&5Q{ah@e_>e$^K=bR!Q&^+ zhST`y%K^9@Yw_hMSCgC({~4TKG5_;~Wo58Z@tJaF6(iEd)6qshwozt}cY?{26H%D#hahIAy#HJe{tq(ERLR3F{|E#D@1)D zL?{h28w`d3;Buda6%6qOAo~gN9;7o79Xa4zvV?3a59f+0hnMpM!exJa;*w0|*P&Df z(Mz3#2I5@vJj#ur_Qcg6MThy%AvgbdByOk$;}K3Ma}QMj5&17r-o2C;&Yt6hGhc*Q zgKL)jeS}4_DJPP-A7U-0oIX2?(Ot>NC;|A(R3d6e$L_^l-^hE(DZabD0!=+o%zps+ z;rEiKROE*;I5lzosh#h?|2~R@-b+sM72&b-MP(p^11)yL%w?hu!-qUxto&F}cEzW^ zCS~FhvnxhQAGjH|kHKdVI5>pzUqxpr_7}Rg!#$zJa5c*D9>oVi>fYJN9vs@~t`NOh zSKolN_f{l@IciOP97=vZ6r9(&SvrD_iq>YUt)5$uSGH}ysptsaE45ZAVPK22g@O|UN^5{r|l4Zazw zYSv`Wg|$?%Hakv4-({R#a8XPsHi&Hew5vksk(%D%2Hr2xpySFRm&9(26K!79{CiMqWjNT{xJ6`Sx#=M znQx+7X_2=B!Gn#qtgFbz%(p0yH|rkKIm&m@X2%SucFNVTZw19J^pll7M*MlZ&?tX9 z2{Vtgavc1S88t2BjK#6={+@Xh-BFCA{Nc#ue{!Ej&E=>`V{t^$kpP0$2-706SsVl^ zt4^vZwUSj73Rzh7E3%-YR7Pd-h$Rhjq*)OKadfW2!BXJLmDW$CZDX<5R*u?I2Mmm{ zURdQeQ#IM~eb|vIQBhGel&qoN590`au1 zR+ZS)zo>i=;b1^fi6CcSQHenrR8$gB1{W0v%8;Uxgo3Xgt6m3?7AtB)NUJGo!$_+w zYNJSt7qw>65=CtsX>~>IWYX%3+7#04qBfN@r>IRQ%`IxPNNXr+^GNGg)E1Cd;%YHz zC9=*Zt;E&^q!sDfMxO6o1c-nBu#MJ;ypL*Qjwi}Bio;NZj^)K=#p@A!i8z_^8)8=e zJD8%{sxggK-qmP|x0SJ0wmL}1cdo_ZlFtYqM!iYgZgHpP4}{k7jaB5)Wc#=3aMr~! zUvAZrD2Lk>F*^CvzRXn*%9Fo;XO;~l^Uw0QBJw~}70=dKDqhRak>p-IT8vmE_v+^I zQIXGO-^XYs(^v}+!;Woqol|&-EaJm0K2`fJjkfSrKsAwMH2>eEChM-9-q`*{cmO8AGvf!OtVXYEYx#VN(G#Fgu%XZD%&(!s_=jNxE*yMsb#)z-KaZS5 zHxa1!*?7@fx*soinZTwaz%GwzAl~7BrH>41Ak*-uUP!%@dGsQkW=C2S!M8%L4MfDl zf!mNi%IQx7--R5s{uqdf6c&U46VUNATjYuoLEgHuH|Ww zb0fX3UNqoyp)lr){;S6sWeT()BlTh$YXfnYlJd@BtqJ8xyO_0MxEoGdCu<{cUy-yA zu{H|9l(g-vjmEV)X?L?WRy4DAKWmfVdzAMGYg2HFChcj~T5zT!?RnOw;^!Zv{erb= z;uO{nLxb0d7S>+lycrlhm3&*g2W#fS!%3UQ+9l#b*3MyVjabRr#jLf9OIYhDqpS^twnf|y&Z*5&oOd@kzXqGk zc-HR08mGL|l=c8?)1k%0J>sjZErgbU_8@C(pgH(f$iw2pXeEF!Mc)zm8f&ZJePMhs z_%&=#hXZ4f)>#w81>0J!^O3INw4Kw-kVb@Obs)Xc+KBWz>k6c|SRX=qhxJjU_gl9j zeb~Ak>F=x^NME;}NBRcif3seIJTdqZ(o=(bk( z{CA8T<@7I{MnhD_2~}g2Obj+79TK9}GK`N2QSXyNX9F+FRDNpcq7pJAM5CR{TNj7?ZVR zJ3sZ+l{{2D3rO0N&SJ+y=Zj7k5JbXLE56%JelC)cd5+50H)tNmC(m!!YfBPr6 z%=<{Eh^olG;1rPz{01dgN2uS9$mmc~Os+Yv(4J@QdhspPv&0Kh<5ny&W~jiw>&27Soyc3L zw4K(27|XRvd)ayf+Q*c3zj$0!iQAQS*m?#rYuhNdF(#VxG8uC&jwwt)^t80Uk*2T^hxF5^jigtdp2 z_9S|Ui)WSg9n?#RgGzfo_!nsP6J))g2ZPx0Gg4zFY;kT$iwA76t)#gDN4!|l1_qLX zzJ)@)H-<(A28yjxLn{-Z-B!|04-6I$mb96HA>zj+ZDF8E>?>*K2ZoBbOWLZya8ZTJ zDfECg*9Jz2VI}Rdz$kHgN%QbQ#qyFi8M}FJN!uQ17T=PZSRXnayTaa5-W`Flq5&6P zvWG7RCW*-%bXey40BY>Ee|WZU)-WJ7xfm1$CXBFY=L-MYHZ&EvE?q=%9GY&Yk_F| zg4A|e>#W6MvC>|)E`xTV((cC|y+o{5+F@%e_U(nZ?545M8e1yfQ5vnWW#Ua-TvHyc zv1Q_>uSkv7*m7}~(rAq>7ge~}qms17mWwBpMr&-jnEas3doZ}pS}qoTU22c8wpD4g z#+HliN~1M)fp|!1w8kzFdzD6O>;iGpH@OvNqE##|Y4=&J;;NG71}+jWl(er}tHg+J z$=(}7k6LTRW~rf-iGj7^=92cLl@nhsY2UHdiRVh%kE{*iS0(L5oOzCxv{ix2MCj4t z$o5*DVn|8*AFE58TGD=RZ4&2|w8_E~TT9yZfG55#HLS5Gt#0wlQeJg%v#9^iVh>*q z^oR*1ZB^iEu}ErIV*`R85-Uo1PX)G#Zk5*<8Wp@&+^w`{(ZjW3ht%NZlY<`?zbk1| zgV%|w$GAV_%?N%(OqCilf4yj}(7ckiB6z)cKx$ZHZNVGGPNmTryHWg7X|%>ZCSI2s zud$DbNw|RuU*aCNi_=TmQJj3~S25&gw8m}{4=Ih-*v;aQ(rAs{ECxLxOVS$qxM)`z zt+89hcBRo8yG=Z*w9~_0@HX)X?#>Evhd4ic6|@$*ScbMH{E^@%L}y96Ie3S7q@>*$ zyi=Tx8?ePu-z_Gwc5CB9@sXjs#q5f_&XV@U;N9Y(lJ?agZfE0uF4^~q@Hd0^h;K=a znYc$huksp0ly?w!FlB#7ahm_D)Wi$n9luS4Jq^hSU<*BMpihkcPyqjNcxqueZdf4Eghn$n<`eA3!Sq1;iVWEfI-Q z%XOUgLu!dM(xAYf2|@dl{{bFWwa(;PbGhWXrPLA^uuOlVARs8Ugv|9LZN6N;EK9EE zTKK~vXu;#On-MA*bdkKj9xTGv2S^WwlU+44*q?UMw<^SgN|IgR|Tl4iC&)N$-kH173 z6!>fszCoT45C<7Q!m?RLM?z}N%9Z=Cq;GP|Z*ebD{zpha^qp&oceQqc3c*Datf15? zjjdJCwOkw0qqtW^>E)bm<@6d(Z{YM+PVeUQ3!Huh>GQ#Fu>2&a-{tg&NXLbKg>+Tm z5Yoxw2-0_ge`5JvPODYw#Wsfmf!kv}NWUJtE;JPQjiLU5wDtKAZfe&&78(utsF=v< zWUe($>2CK6u8Wma zaJR~(6GpqZw`NDMHSl;1c)<5gPKe6`KdG4?t`<^$Exar|Sy0J^oL_wZG2Y!d~pC;a_`Dys_0G%$bV~a?B9VOqb`BQj1w{ttU z`2{Zjg}_}kCvbit+gFO#+8L3r1Rkqh9QllRrnU>|_iKA1-wixd`yt>bYHx_#$M}7W zKZK9wpN`-N7=J0U5~G?Cd74}9W*&BM`U1Eb7yTKh%NY3ybKA|x4o*9mhaFtE7KpHF zc|5gZNPHD;{gLgpT=#!eO8i_NI4SN$e-)S#?~M`;a!hZt)uZ35{$Ed!@eYs=lqqe{ww>;v;g_c9L&hH z@G-`x1;|^*1jybIoYtb>mqTL$y6%lPR7<_JH2z#KJj z-EJPkRcy<3oOY{}THY?LmOY9u#9v6<9>~`mPJ9Mqn-(6#$bF1F#7F~={81kH(>(G= zdCU)S`Wa4F@@$S^iw1Gp!0Dd?PsKOa4MJ<%>vo`p8Ic`aK45(>{%BpbC0E4HA^(Xz zWDt*y=K9xl^Tk{7gLSsGBlK$B3v5@wdM|#g?()F9HSYtVnSFunx;zj`oDhR}zDDrO z4wCcBX@4u3m|WlA8k9J#zJcd@5T_$JtrE3#4T(F~7a?uHefcWUDB6XC-`_1qI+Al6 z0#v3E*K}3rhsrbssLUC_9WfW_Xz`NxQfQoT#q#=b_ZlVo_Rr)qqz=i%>E za?4VbZ7l6>>&~en=eKpOFUqoRvFi)kIydLUf`uK0?$r~;{H{%#yX6P-VqV_cxVf`U zeBivzIdALI4Y^#mSh~r>r}hPwXXiRQ#oR4G3iPSHDA_n~a~BW1AeQCuM*`2!e{fC* z18v?`e+zx11s`1eYJiZR>x*;Od?2^B8+W(V=lrwtot*%P$#G}px^iB}TA?f{x3c== zV)62v6{SUOU2W?zSFnM++?-3KQejc7y-*x$aB# zW(g~nD){6gwm9FF6H7OAtOH9qctB3fT)Q^62|V-s5`o^vj;^*&%vQ-ofVQpa%!xU< zb#3^5g!GGoP+y(^yk_%yvCL~jYtj*x&ufr>JFYKV9qAwO0f}3sL2nPqKM7f@3 zcamB2yViDYE_7T$29o#i%2Z^_eiyfGq+;zD(R|G>sc>P|RxUBKy}06uT{v=AZgHNL z6|FM3d9GdX*IwWxGI)TiqPRk|7M(_ZDW#~*@9Gw4nB8+ezKA0@!ARGOC7bb+Fpxvz zUf;bz&O61gBAKWsePQ+nvAGM$(#>lM{FN6BM0G<0xFY9|3qBb>(AK$D%t0VphHv4p zMl6cuo7#a<1d;KlEFoIJaXN*>&u%Le!w@*&`m^)+N{?zl7UC3Kh-F(h<;1LfUNt%= zk8ca*R0kV6I@>Y%7&sLmH-jiki1~%Zn>TXsfU_e|V@Xo5n_rmMu?3{hFPxv-m`5y~ z*|}*$+ZyEXx>6v^vY-$40c6|!c3FoTh5}kJhRqwnIUE!=OYe|m5(S{1-mc*2+`XZr zuvBc_ivJ57)Ul3o9P~G|VG28VjbO>HE$%DDRXUs2TJbwk@|#fO@K^LVb#&&ur8)14 z4tyU=%-P!2wy|UF%x=u=n$0k??TUOyJC+wYB}Lc{3hxC(hD+hjUbpagGg((!ES<&0 z!jM`a1S-+vXwXqwCIz`fIx!ngRbV^})P%S((Zr_qlaypAs_*h1|w9om-c6ba&>;1&i>U zTw$%(v5D5VnF;S)*Rg)H$6Hcg*&8>tb!{~>)ZSrc%+7Dx>UFH&&~0X618L7~Z1Wpa z9HZL3%5{oXDi1@*$>B6qaxi$@1@IxP#d4LiHg~j_wPMSPQZr*7Jl4om-OlM~Ti=y0 zba$+UFVp6?p0>ww8xq4b;Sk5W68S$T@=l z!UHHui%Ib510k)Qa>|X#zH=Tn`sFwiR%RAgVySMq-ubz8IYg_qxw)5brrlo+iUQo( zZC&kf=Cg9$q|L)42ozEzkwbk+DGhkzCTvz+-9!S8Z8(4Cy;)cQg-Wut3@i%-1U|-a z*qz^nh}6-3E{?j)+uSX5T%prnSyDY>`?_4r?V`ZS$CdeI8K(-~1>n!!h<^oqpR-t! zPEs&Ul_d?C9Kx5hb$B?+@mSei}F|GcMOs z2GOB+^`sIarcK`@i%*hSlgkJ`sBYUt-)j|1a=FXIqK>s*zK~znJ#O|=jB%3zj8n5e zi(;cE)LXIdqRMrpGOx1@UrNO|ufP?Fn2jSlCQ-&HA^Vu=t;fW4;XH-&tO>~mFc0d` z(uF5Pl@6SX5WjMs-&Z$+{h8fzYG6TuP7-vS*n%x~rsuV775PnTOxY=?`Q$cvIH0Xb9{$UYP{3iFPvdH5U*>J)O<8UGIUMh4`=@u>^gBDx z_2zEegki8VXe}~^({^4u(6apUP4Ii-wSXqXg&t-eF4ER+Tms@`T>Q3k@yen=7oVpr zz#ZNKuDQGLUCJf+9667jE{FGS;5p=s6X)}LUTg-6T@RS3nE-q;UMJ%>vU5>q9bF7Z zb7-Xb(hNI`B?;A~+R4!Jdn) zl*Y1_$I^x0$si{@hSEAp*P~uH-tpbhy2bdj-^;|=xT~^QoQ3*?kvt#hd@&PuW5vMn z_yyyce2*c9_p5M6VKgjg#`ju9s;@lY(Qzm-4)5bp8hUW72n1Kbe$rK4*ncj*p&`aD z#8|h$hPAM=6XW`a7UBn}O}H!71^dauJgn(L-7BHBBL`;$wAGD1aNi}~h7!a)aVl!c z?TQqY+Qe-Xz-tFHiTUZ*7cPcg!TfiWW@IVayd3jN^G59pm)Kf_Z=YNW&KAKRaHprP zjGc@*7x6CC*oZl$aftX*FnoTA_cOo|z7iG0m#c#K5>;>-Uem#!oF5TvhE6=r#cvko z!T!a#Cr0g`3rWP~sL4Mr$DcK$5#c0+QO!e%6&TeVl%9*Z#B5fVq?)Ce_qq6Q8QL9+ z*XekTLHifL1{&E+F$*=&W8EC2vw2nh{=`lteyNy%{L_%1vEBvIp3`|stA<~Ey9>P(a)H@OOf-pDD*Gg&6rxeBgHIQ9>uOCXOXqqp`w z%A#TAQPN1R!dT^)Cqeta88dnwUhcWnm&efyIg)H7J`n9*XoRg9;m3pOR@r4Wweqp5b{0$Sf^|HG}2S$vB{9N5`hl5 z&+fVK0LFZF^TPM(ytsY(P_3^sG<~Gj$HlnOt#dnq$^@|))fKl<+Ah~46s|$o&r_g` zx8r?tal4Hduw8h(siIU(0Y5^>;XiC4!I^l?!fQ5ObMV6U6{KwwxA%kd@mhe_Id~yR z2C)SM5uAhP;DO~#~R_`*E~EM612RA5c$)zQyB@%p^4{OpIz zUYl~^m7?nLD_367fAYZ_BK@4|fGeu{IdQAX+4j+*@R_1;PcY)xc=Zc5i2&}(P-wZMNzV>g$^#uyO+0bznSf ziZtO%&Q(=4Xb%8!h~Cg#6%B22(NMGyK*yXWIIRk27@;)5a#a<~OE~qi>NFa&E0AL5 zk&l$@oDo2E3mrz#;7DgM#?)OTaCK2wRunpm!pan;ZQJ(x;)`bPssJ<^*|R%~$-@;A{KolT|b*hH-@WRTl*Rug9{8Cc2euXI)e=~PU2 zO5%$ukDrKFLV^n~l$3V@brv$^KCV|%kDH1kT#cSkhf`*GHM0x^EU#vkS1XnmN|v_} zr&k3MWZHdUw6*QNV8k9>C5QrAY9dGs;GaTn!3TSsb&Ip@7MgoxDYrzAsK4Ec#A!U$ z)B>E@B2Tj*#KEg%JP?RSQ6i3M1Q~-P)buThC^dXbf~Gg1Qj47ntByNQ;FCqPnZT0UG;fh-15BMnFtbcL&NBNXu|NRv3p1^L*EO+!n(=&YE@^>eOxy3fBPq*qQ4bv&#FWhAy?giW-Mhbc_ns*o(+X>o^gc6G7&LjwDi={v zqf18{7Kxp+avBm&t5#ZD>>3_c;R5D^jXoVh;b_Y?^|$i5bz%1gsooLB%WjG0C8u%B&(k zm$)Domuzp+K&q?nW%e##)hJPoy0}6>hLdyUx(w(9i+wz_! zygw2%FdH@f2Hf${=8p_r|0KA%Ltc-zqtj{o6 zr<`VFKs}R==&F}||aX&|ysA0YXK?rJ&ETP^U2%|Vch1rf*^bY=^52Zy?Yzic!^&7i5h zvhbI8F8r(M^v>11ykmI=N_%-mWZRlt-hC;iJp82?`bgTKj4oN1f@PNro>0_9i28Dg zY+6k&vSlu^kS6Zy);bnVsMl1|EbkAo_Q%8%B(fz{w--J%>Aiq}y{$0)ix|WwVB+Z> zQ|}PQhVbqT>cocX8$zJG2RXKa2d2uLT8|#JF34uWGt{9wGSZ`W;lThk=vM5cpah%HARCKkw}QUrp0wlbSdCU@6m)NnOl7_GdMua2HPnXlG{3!|q_ zjg2iV)baimSX_qWdudPsLWbhsx)Ej4XvT2>$I^7Ttzu|_8Xkz z(DxtjkOAyDUTpsSnWB6!Gc_~vusC=5^W6DQH)~&h_2k|}5;*hY4z0$n(^`SWZMDA% zHzb%-ovD?1VZC#m^NXt&)~e18x+OZzmDZ~3%)2xqI->gieWiNC5te8f?{C(sWaG8C z#t!Uef90=?6{u(?#c>UF<*r&zQ>v7ZI6D+Fi9Yr{% zC|)Pu>~#tb`*(+5-v!S69&a6&l<_8DTega~PqY&U-&U31WU>HmYOqQvv&sytR`$60UgM2TVT7KwiTD}r^9hXm}eGwXmf4j4&mUQ_FMVKGUC8zt!Q;@A*B6s8uul{ z75v|L+d@nW9bp&XrL4k+22Tuu{T}4eguR!XUBf{$4w+$T+X=Jr6A?B(!zg=5!DNSb z?y&4Dem)*(v+O`VjQukYCxmRI&ANtTZ`z65TyN)_b)-x>ad%2)r(DKFo->dgEt0f& zHiSj{-|{{C`rG2<`clJ&uY-7bSQfK%)`suQ3VqlnvLBYt<;Su%e8HA$6*_EAWN+2o z?Bu(Nc(LL;W7#0E>`r9YTFc`uJg=83ZXPai(k&xDzp^x5ahLjU4rT47%JSj@yqbe` zNt6aswjC0?Sc78)TpKz#;>wY=>ESk!y?pCT6YeF_BfP)TY-R@}h1J#?U0fGd_Q=n0 zR^&t3Zhd|Y?g+R1I3O)}Sb)!Z?fur`O?XdTtGj!oIucN|akc4SN}XS$tIwtS&3eOb z@IH~PxNr%Ab4V*|uPxGf*@YMv;IdTrDh5VL`-;(@7wq?sUHa6I@G`0njM)XL= zM#yn^B!N6OgoHp6vOpl4CwY+vEFsyD5RxM~!tQOdx7l5i%|31~x$JJ(T(ZZ){lBle zd-@wIU~<_Xw|5@9s=x1FRbSQjRn=G3)vcKwSH4q)l~NIemtR)uOSsZ!1IMo%okMa} z=CLaENc=mqzZB~J&g{J>2MgIzCx61}8_xFkjf~{Svd3~+XM7|(IFjw$)tep859C@Z zD-(^b=$G*W4Y5~;Mb7Bk;b}0 zpWr8})X^5F;PeCJwmlDm6nz{a@Yw)^v^cq;JTmIGx;FS~AQMRB+awY6`Ml~ZaR0L* ztH~?fD{(tPlRi^_j&$UmuG6_4eS;%vxX_<>a=Dg)p&{i-(s~=JOw~N7RMT>$&^m>t zng>2~o+?vU@jF6i8BM4<(VT3Js+Eul#yX2AQqu&>C)%^X9Pp#hf;F1L!16G6qELn? zVVhkSwMG(bk{7_V^hprAV^A z45pJ2=Uy=NnkjQ00@I)w)A=TtnVN|@e-37rW@65N2a}0wF7EuAxP;~sPBa9rTyy14 zIdK)5t8k_fSE;#5CrMnD=Bk`Danm$6&8a7@T65J-hB!-emNTC?TXVLvkhrAglFp^X z)o8B9Sw>u~=4zc)#A!PvQ_f|?Y11du&JNy>PlGB|Wajv~)IA@4+4OZ_= z66ad1!Fe-ruE}OPcM|8?Y?kw0;xf7|8Rz}PWi^*|exJD6nw#x>hPXMJo8$ZuadR~{ z*ZI%HHEOQW`D5bdX>OiTXrZwarExJqv6;UVfTp7XIu@Yg0osZLnX(`g6lDcvSwUfz zkd_DvC=W6fL8dauR0Wx7L8dy$SV6`PGRYuQ6J%ysoM^;!B9$9HsdSsPV<&o2@X&zZ^RePjmSsrOywnrwdq(|0RH6B@O)p}&gN_k}3 zN_*rCYlcVGTlF5*6Zt{27O&TQ(s$V>FcF%j4Y@XK9Pwf zaEDARg(qZU8Jr*!%i;f+SOM3^#7cNQCRV}WG0_HJ$3#2a922YI;h4A#&W(vR@M}!0 zg-c^%9lRM6>*2_l*Z?2K#74L;CN{xyG0_31#Y89k6%$=>RZMJ#mttZI9265<;hUJ) z2Dik-c6cNvE{8K>qC0bmCU#`zYhq`nNfWy=3pCM_Y1YK<%tB4<$t==DZ)UM3_GVf% zu`hF}CiZ7qHE~5|i6#zYmTKZ)W|=0g%q-W$q09FTN8!M4o!?@c4}h0fFYbnUTy&%Xpr0nJ(KQnDF4Dz$m_M#x4iKpzv0!XCo76DYG?Ii-J zOxu?Vz)st(0!XFpr2%uCys z1%c!#->~WFg*ipDCQthb^=W%euuP^rZLbvo46;rD)6({O0aT~$4Fa&z_C^7~WSaz# zOxqm-s7c$M0;o;fT|ppurr72>ISMl6r9ed~P*n;{D+Q`c0jm_SOMzr5P*V!jmI9el zAX^H|N!y!+-ZupG7Nec?mH_mY0Q8ms^p*hhmH_mY0Q8ms^p*hhmH_mY0Q8ms^cFyJ zBB-XA#H6MKpr!<%rUam-1fZq_pr!<%rUam-1fZq_pr!<%rUam-0FpNb)s(&oYDxfV zN&sp~0BTAAYDxfVN&sp~0BTAAYDxfVN&sp~0BTC0F>P-Vqj)l?w{*eKTLREq0?=Cm z&|3n~TLREq0?=Cm&|3n~TLREq0?=Cm&|3h>v%Z?8OBt4~twD=iT)G15eCE8R>kY4D z$ZZ!5srN^jSKkAidnH3|zi7w{Hsl+9L)O=oY?0u>O7={p06dt?0S_htcrXdTgGm4$ zOaky=5`YJj06drk;K3vS4<>-*O}?5L?0hc|4v^%{ei}?5w|p>x1mMIa024?6CXfJ3 zAOV;_0x*FDU;+ui1QLJ=Bmfgg045MX@)loBIPvbF1)#Rv*g|ayKy3*?Z3#ea2|#TL zKy3*?Z3#ea2|#TLKy3*?Z3#ea3E&1}M^M@Go${@|VPFVh7}}#r0EUnN3?Ts+LIN;^ z1YigWzz`CEAtV4pNC1YA01P1k7(xPbN&&1+JA;-VT_o*}hBmli70KFvuy(Iv> zB>=r80KFvuy(Iv>B>=r80KIpY>Me6XZviB4^YzZ)Y-LZdbn^CM8eB=QNPDZFmadaW zI?1>BNmFc@_Xee0+%mu7mig_kWXOFN4SB&ky?4BlArJgJ8xrSl`-4?vUj0B4=Wkbt zBL8ttD1YyjOnqfgsegyb4^tluR&fEQ{*PnXcfOKk4+Yi!cd+cMkJmI40-sX zAurgizU!3?dDTTjUa%qWd?iC(ebJB?Y{+-Nk|B>=G~@*v@;$yGGuZkc4O%XFm!F11 z19_i?TO|qLR!IW5RgwU1l_Y>$B?;hGNdmZ4k^pX%B!F8b3E);q0=OfT0Pc(=fLmh$ zB;V`neF4u@tI~E~&}y02=^^XgexuP@;$bq~*Gd4LB>{An1khO$Kxat+oh1QumIPk= zlj00IOUgiJ2_Sh-P|cF(-*qJq#G$6l0W~E6H6;KwB>*)g05v7>+o>sKKurN8-{-42 z#jW)~aJ;=Pdq52OW5Gsbev3^Z6zdlI$FDC(bISF9mNB|>B0Lc&dYSQVjI4w-xTTH_ukPG%o@`J@RJhD12 z(tf{~hSy?Fh_w5PX?R2Cq)5A8qz#I+2a0Jpr@BU@eaKHkSG5F_$j3?Gyq90lRWirx z1Qn0OMv#FGFf zo&+%FgxAjeb`wtu#l#ap@*}>QQ%tuQvy&^ z0#H)|*zZaJ`&|i?zEVt^D47Fl3LyE(pqlapZKx>$s3`%cDFLV{0jMbfs3`%cDFLV{ z0jMc~snnD?pr!zl4+qthubo3p2|!H=KurliO$k6v2|!H=KurliO$k6v3E=KU0_aT% zKurN8KNVC{zUu-tB>*)g05v55H6;KwB>*)g05v55H6;KwB>*)g05v55H6?)eR|Js! zbWrcs;L=Phj0B*!1faJBptl5|w*;WK1faJBptl5|w*;WK1faJBptk^$p9!id|7HPd zN&sp~0BTAAYDxfVN&sp~0BTAAYDxfVN&sp~0BTAAY6>9vSzpZzPEbZfcV^OdUI5v& zJsJd(pDUJr^*{B1QN+8puhX$4IcnJs7)1cdM~Z6UhW|RD^5^|DY_N6(lW6!$0OLXe zFo6UxE+l|)ApwjF31D1E0OLXe7#9-2xR3x$AOV;_0yu#dK=KPgz2#rmKyL{^ZwWwe z2|#ZNKyL{^ZwWwe2|#ZNKyL{^ZwWwe2|#ZFB)=F`Q~d1=b*}`VrUam-1fZq_pr!<% zrUam-1fZq_pr!<%rUam-1fZq>l3xm{DgL;E)RX|!lmOI}0MwKK)RX|!lmOI}0MwKK z)RX|!lmK2ibHoIM-ZBUD7C`dRpx*L*HRvq?=q&;0Edl5)0q89O=q&;0Edl5)0q89O z=q&-LDFLV{f!U?Nyb>V!SkMqlgcV^32~2eZC3Cvd1fZq>lHaiA+o$r2@O2GVlYLqf3+ywRXtr^Ev+seO|smf1IJV!3^bCRW(DYGS4R zCQYoe->iu?`z@Miw{O$LYWsFgTxP#j6Km|ZX=1JYc1^6a-=T^1_U~z8gZ)lTY_#vt z#3uV)n&`0a)I_KKZcTLA@6p6&`z}pvvEQqSt@hoT*k<3OiS73LG;z88eob`SAJD`O z`(91#v_GhcUH0#5qQ|~Z6T9vEHL=HjKoh<8hcvO*eozzp?1wb5-~O;BuCV_=69?>% zXyTy#QB7QFe@qjH?2l{Wu>A>5TxEY!6Ia_0YvPFgDNP);Kdp&A`!kw2W`9-_{r2ZH zF>hZ{CYqv)(wDx%9BCFRU7h8Khvc=lxk(XNgJ+jrh!XuYh z2Rw4Ab8mr$U z*IEM}xz5UYnT1*OML_rl$AtCGbiA&RDYA7|Bpu|Zm+&)6`1%sQp@g4lMWzSk%_`wBdu0ZE z(_3UlutcW36sRZ#DobTll>*aBf$CDgDh2FPAXy63SP@~nOl>KUDzQc;T`B|imfDsY zJX31%3`{PoZLp?`KFiFsrVFEIW|ij1l;+5m0<*2@^`aZ*Saq_NxmKO5rLh#4XPL6d zC6+0R%(vn)N0SwoITl!QfM%LwGQ+}{FyJI^k1*KrZKR3h)7H}|=ll4Q$pXHSG?B-5 zktVFC)6Rb@LF$~OA@fXk)|MbMoZCu}dZ#5UOEowjEI z*4b1FrJOybP}(_G3e`DIDKy==sT7*wyt5RlcRpAOH8_uyLNlGGN}*ZKpOiuw=f|Z` z*7?U$XtwiGDKy8aFiT80*O^rUO(uE7;_Gn}$!}TTau!j#P29JwZ>RD|O<3PfyVpAR zI^Dg_aIf|5wZXm4bg#4AYbNdy36CiEhzgIW^oS~tnC21H9$|Te?GZ_jsPTwekMLTb z@tU9U+Mn?h$aorLJQXsY4jE60jITw;lbrR4*&Z>+Bj&n9x-gU0wHmVDw($L--Sf zUm(m!<@*snhVU4|-yl@uOH#84mm^$*@P`Qh6QLV&+CG5@YMAMR`4lv14im%V?zVSQ zhPP7mCN~!+vSDdgG)}Vgti?ZD8Da-CYuk0z9ukAWSlz)0rEtlkW6ze8? zy%bKp6e_CaX58I|>G~Rklua$<@6gLrw`3{<*9imrEqTBda$&tBh4{U6)o&Csl}(JI zL3|1IuSr5=3JHIPc~H`iuJkF|a4^5~yxzV0wFtO!3ISKV76FH*5RiH;0-B~%hn}y- z_uxDHLFf}~gIqDYJJ%ol&6&^3dm4G$3W$O;R8QU`Fy`*IE4(y!aQUOq^)gLIIa{lj zjoY9F;2Ye{ruCd`dC6|?6*KtC6rrXKT;?y}KZ~A8Cm$?|e8Ni>A}K?ONG_vA-ab{C zlI&L&t2pFkpP}6Xw}G;YDyaa0rI`YjV41oJQBS7ZS^pEOMnI(Bm^^+hqQuKRbKzO< zN7kb4cDLPe;YE+TS-E{Y!o>QpMM|2-HgVQqr{XtVchwAx89^)d(18C3JciL?t9>i2xT;U}wqX~NxGhw!4j9`PJzwn-a2qC|O zfLY-}1H|3nUF%y9s!kMyo3)II1caN!&p9_lfdoN~fmsxW7*n8X>EI zI?X(yL^M&DjZ0;mf3YDy2XwrG>10G-%JjudC8IUTSWPm{zv7Tg)FjJmk`+d{3Fir> zNx$H*aAF=BG0}u5iEm_YZ$)d23A8C$c)rxP)q{)VA;%L>6Ju z`T3Mu)rPZnWmh#pheUFkh1_UI#Gcl)fHERaB#&-OOdyKn(Ut`AqDW%((=WgL@?TVO z;g?c4QK`=_2K>WJ`P)%-XkN-WfL?iEUfP(zEofw71ETbSWVK!0)Pj5u%&X%cWO!iS z^i1My7zUvS=FKpgu=zJ1m{;#Z4bDw0Wu|jCu2yB!rCfHF^FfAjh7xPX5P@~6)tqj{H^vmI1)fvdULy zQAF3yDairw2dn+r%_nm)&;4?1X>h9_2{pN9%9QOY+^3hq#cX#p5C&x z|4x<}6Bsm+c2w%t!pfCoV{8H~iA=O3iqVg!EDV6F0T$4?<|O4Y>@wSHz>PG&L#H7u`UdIpj)+Ax4r3_pb6 zo98zviU}1-)|@x{@M8sf!qn&q!xJNAS}Cih*avOgJhQoN{flUX*}M@$hg=U$mQA?c zjw_95`jDUc2(IW0%Lq?m&loWbBQ-CI{FREiB>Krfn;G%nl7aJr@f+=>SA z+cKad_#K=oRRJB)9q^CTLyLpM zblyZpC(^|=4e|xE@Ti?PK_e7G=wfKa)A_Ze9ofKyT^iKKVV4-}63(OEL?Z0`CAAhB zC(4bmE~5=XMYKV5%!^!#)@ZcdwU;)Ic~BdNZBvw2fhLfNun5tG>+?#p=?pdoBfdMdwYRVhtZGwIAybpG`J)n@eV$zzFhqDx5wLOq>M-wWQV|s{#>w z$KVDW1qi!Ro;H|FrD8}%ri1U}mL7wZd@+}upfI!rd@{1TmQ zW`4?p!g&b{Ps=7u`ULm7UMR2}kLtQ+s{8%AsLya0LnT0(1K^6Oh8~F1C#&l{8Zm&eiv zDq^~l^*@0xu6LJfEW2r=33dfh=dZuhqga;t*O>IW*^GYJuD%ODTF(7IKWW8_qcH&+ zM6iV;!!&iEEgDYiU%i?jH@O-^!yRPYJl-w4Kas@~gU(NiO;1&(l4Whzav3@(G_gE% zLU6td5f(}eaH=f7nOM^@wa;0B{L$64{s7s6q$m%Bb>ujJV0}rHrz@;7Od2#NqL*}t zS5_IeCuLTdncs#y>)!&~#M(!(JVYHc>N>V$R1a1?CGl%LRKa;pEjTGqZDcYq8)=Ii#9YR&_sim4tE7{ah~1tk}>v}*cbV;9BUVi4cBe! zCI@_XoVz?3*DEERnDE{$ZY7$~`DU{GESy4QHFgCm^(=gY{*||9F+erdggKpP!hu`j z9A)I(6Fa~%b@pm1Oj9~lEK>J&m>e6}bWPJvWW>Bkxm43G64pb)s34b~*iFKS)weJB ziKab3^1X;~voOIkME8zAHCAJRR_+hNVPC!wg=^RG-lU?rM$94DAC^US{c~^nw#b;_ zZLw_(%+f9P+c221nXYp-aN=}#Q_b66o_4ivmu!I40^En$1ixX@%~`UwOwk;TU}PCh zkYgrz1M1Rd`!6slaFD!G_ePlaEGW0s?VY{Q87%LeU_;ke(-wz24%?3!&}M!g@=eSJ z$#piWFJhs=J(U$sm|fJ9w3kjG&@7&TFb81)LMsA|wG9ZE$O=874j>#wIEgTfFpe;Z za4W*w5#EDvFTz6zpG5dP!j}=gf$$xK|AO!r2!Dg{GlX9t{2C#IHpLMvgf{%(oocH> z1jk6`ZT7Ee&Ck@AS#GM!W@fm2gL`#zXJ)&+cb%*GwvVIY%p5nd-o0krYu3Fc-D{0| zwcTrld#!b^mF~65y;i%|Y3|i>uPOIBhi}80`7WuMe*>>MQ|_iUy4QL7>Nd@-3H@!T zxoA3luw=8lOYxQt90mgY_#rzX{?)@~^|4page`ZL2S~Ct!u@?=vQdm{kLcRVbnR6U zt{(fqi2s|N7u1B`EX$}W(+%9Of65UR&n879lNhWtuJ=P{*u?#%MJHK%L3RGZBPz_-|X$a>r zui2M8=j+v?MPVlyG0G<43nB(Ob_rk0CYSQnoLq)0+0pUK!M#%xR?wwv68EH>eq6sc zG6{cD?4wmW@e(84!wC>nv|l^rjPOkc@Kdf;E+bUiYK<=n=~7op@^pnahptr4)AdSM z*PR-krtjAB2MLC+<*b^+Q?PIfhmZPjhmOoxG9S@2^O&QB7DH@STOtuMz#BfKcqJXD91q-Myv%9Z8)#_O!qxs9m5xxRHa|6Fb* zT=UsYK=MbCGv9|O(RLH0*{bOnnDQw7dTt^=fT*HvJ0%!RIWU#+{Bc~8kv81GD?8G3 zg19oftO-jsxB|rzkto}=^clwMg@=_}6pK(FbHI)1@KiPOG1wZE=fuRN0QnKSG ztCv#seloYZd1E&eM+4R&U?wOC^v@m$r}geA!fgn&)uRvL)d+VZd<4P6lda{v_JPN} z(N-9x9esk0!w#~~5ZaPnLl)40GlY$SK5m#dfmYBalrF~E4#bm}BcdP3#ks68u?-Bp zYh{+Z!f1)VB#Lndc|4D(Z{hhA?m%^a82Mr33Fk);NAh{Z3A1S}iHJ5MALXZYyqJHY zmnxw`#stJixTG<$k4RZO*;=X4TVw-^&yL&@LL|w3qhM~WTPlL%2H!2ko%aQ zH}K6+n5$a%E%a72eV{xV=2ooxBzWv~Xl;WhrKjSSVXK#F;m1QJTM5&Q?WWIj$kwiV zq;&=wzm_s^mAH=~|AGNXehTx|wQq#y?rW%jN?GJ9VI^1QG~OFw4tnFIhYc7QFK_~{ zGG1PFkZ>1a3ryA8;iggaaC-&B#^U@~u8nD(%#S5vG(J|tsyoR9P4MJw|1yQ4#2=CL zTAdd1lUyx4JOPCxlN15pLo`L8cN0w!8bfP%u`MtwI+bwvK6IAZO#2v4H`sqRT?Y-d zOy@?-vB_N|l51*K*Pu98=N2jEpfOga9)yP2T3Vh+EfF&^(O!cjgBvzi+d-+zusi~z z_Q2ctmNiUndRq&nmKMP@cEz;CLHe?|h+AzNrlm4Uk{rB3;VHwGq4vVp>-J8NmYjuO ze^@<5Ydb1QYEeuY{v+6QF5=n6uPoi1g00^d*3aZ{J4tox4mzOQT$HHoOBp=-1=EiE z;Jb^OxP3|eLge{bs9z$!nNUAv(<^1*2HNpO>V8}VRiO{&6%8nDje>)2ggfPjO{N}c zoE&BZd$YbEPF)S1SD0x2lER3k9~d^8k7}l^+9RIv)m| zcIl6Su5;;!K~Hz-Rd_XWhD(1Ic)d%10d#{)KL&cHOFsd6mP>yPG+r~)l|4mF!ezcq zOu5T^mzWBdd5)M$m-$m-s$Ay35;M(Z{*st#m-#U(?lE-2){~t4x3V5L*N53R!!RX6);+PY~j3? zZWWlu9y(n>XA_fbO)Kol6gFJeSrQQDLpvO*V)vS8=cVQ>)nn$z0i^S%5c5%8{(4Z8 zJR5XcT`{fcH03?0r_5Q}9P%VWeP_c?GaAgN9r-iJRUN|6rR+M#QiGSKrlW3KX-;5# zt2EkIlQ8l(AZK~B9gDjj)sOaQKkIV&Mr+c0*HQaMZ14(D$~dOKvOcsuq_ zir2Sr6LzLJMggzwQr~Lx8AYA%BifO}cQdpJBFB-Rq&Bo!NW#OLvsAMgV^4S>0pJY) zR{yoXzYM*Ug3orhpISgFe-3#n<0h}Q@n*wyqvQj;=U%fx&qu(H(cepY`|V_FQhgdY zRJRHz(D-wk(5wP>&}M=+S2)jpBWfrN04X<9(fm!|Qg~p6d?w7a4rbyVM=F(OtTGKLPATxT=oq@5<-8K0!xYcv(h-wbKdbX;HYt~e9AV%{sJctcmm8#+3+=Ee*(%KP+e?4wW6t2n33yYy$(dDZECy^}uiCpnsjnwMZyL%ULt5Q(eNQrX%f4;c zy80h9Cv?Tk2jX$sQPiPw697oecs|pk{R4&--}l^&E0W1S(0HTwQ<;zAN_!D17jdsd zQ_$*GMu?`|3GB8_)xz;Ij;~NhfxJQe9^(6O_Lor4sOLcc6KGSFhbaFdj@NL!pW~yU zPhu|I5V|##P!E8vS06(arg{>zseZ|M@bUoY>4+0*iSZobRUF@dxJtd*xC=K5-!%RV z@vjh9sc85v!&G+ILh5wTwrUMiY6oId4FETl6Q;UugX(W}YkZLLPjdV+*Y(ZtbFhbQ z&wI-5FEiEC3DWVeIDV1i`f@^+bG(D&lN{e%{@!v^eSzbzGxDSIyNrZ-84rnIw~EUV zUtK}SnTmH*B-De5P4(r9Kdq=zzXWcoXysA1b%eSCeL$A4R?8#lNEve>aO)yX;KCSF z#BFA-0ewo`KIUetnat&wo2zCqcZ#`rD$Cq$%+1HSFO|ECxn{hNOx%ZsGi&1t==SG_S*t)??~C7#4l+Fa%iVcjFH3EWw{A2Pt)N^lOi9CO{^ zj${2fp>Bqhek>hj;7(!;pDFt;`u*0j=ZyX5{;}-Wi2sG-|HZLk{u;d!H(x|-nJR3m zdNYoAzG)*~Y}O-QV>Tl0H0LAUZZ;#{X|^CXI+_rCUo)$%UzRUCv;y;GWpTz$Lae0EI1?5`_k~tmmN;M}@ z6<>*gk&0XDM$o2ufb)MmaeF+a9#6aj@z)af#($cnxp{LPIoyzXfw? zGcNb%<`dxl#N|E}`35$OKXkc&GM_OMYU`VIxqmZ{;@RsH@ zXKvSAZ8W4R)el^5269%a&bR8cM&@2{xuwhHN`2bp3em&h#@@wJ*e;fO(C4m+TIyM!8;#nk;Z85->1axg`rK{N zdi55cyE8gd-RE=nL}#h5`rL!jta{exJ{Fy={@&*-+>`&x=e`haRMqeH>U$!3iE8q> zZ$z8a2A>PTGoJLhAK?V<1DeBnerI%%de%?-@6p97_8w2>i_vAO$>%I%rRvn2dMXx< ztx`RH+O$}kI_YyEc+I!CIiFT{MpvuHH5W5NvtpO2XML_QwnjbgbIq}}>P5}5t=FlV zyS%n+img*8HK(fMTVw0hsGk?e9YcaJRVJTpHu*-OT-M+z8zQ?%6=Ojp_%? zS#=%p!?BI(dAHp5_)%~#yq9XfOYMr^4sMh-DBuR-cgHrV`+V*XVqNNoKKF2Jv+B8r za_V`sRo&uqUyp57&-&bdie0W6-^V%CqwznE?NVRW9P7SIJ?nEnLt6LyJ()-G#B)G% zu*4t7cB>(m`&rx$?N)cY+zatvAng&C`&Il`u{~HtZXfojXI<`T^)saX%H>{& zt9Y-fxmV|`Hd3Lzs@3IQh#ysZRkzEn2>mR!Pu=Kpe-CcIdPH-q!xidzpF66qP}vW9 zI?RY4P(wbKjbEug;&Ye8533iL)4g&;oxG3A-KGA?Tp2&2MqTc*#2U2bMwi=?SQ$U2 z-r{n5kk+r>&D@(*KlVg96}eyG^Cp!CcU(0xcb9s5Vr%?_TJCc@<0sX9E_Y9&KYoqc z@Bo)%jjmN&nY&Bfn>ZZ1Rz*G(Osf!FgXYxd6Cri2>K19VbNVsX_>lTCw!DUV5^-2P zg*c+Vi#VkI)~v2J)KAZ&>F=IG{MSz*g$MtjdufBrpOC__8Km9IIF1vL`a?!=OaS>m zM;uZA>lN@arAt-ENKOiINGb$K}>aiUWk>)MZK8nK~n zKpa+Q8KHVZ>L$kD%E$=Q!91l%#O+PprxzYCOi*1dh+#>lDK^yd5 zT`Y%U!*5}nZ^Yu*b5~(^*@bgTOF6jfSO7eWm6vu673yhqDN=~8VY-3o2BsUCZe)59 z)9r|l;t3X&TF%HCH-1_bfDqoPex=T+Zbe>r8_qNCKs*caZnY%zUeGH-_j3H8I>^%c zINr;08c^zU>M-OKAc0!d$@F#Vj?f>Wg?EMi95Lk?;M5xR`Ox2~A@yA7pVgT9%TO8i z7dn;JhavT|5Y=yBb+|{7heJz@8KJmKuLw25=TXjXjvKkGu4}KNHKm*5ZEC)8Y3P2x z)bda}_SCCGpHXWK8#1>U8xi*!XH>ho+StsmF^0Tz!f!ylAbfY|pFn>A_@VHFp|>&qHpbtrt_?pK z`T*kp8X7=rkB64C{0G@SpWq&OgyRQYocic-PJNtfe4JbLINSMgbuMff&!~ICDdSII z+h*g3ux(lBCye}*krxx8wWcf<o;Jp{D&M5u>5DZ-k)&%BF76tkA!b9 zmV~|>J{0QI{TSjA7^1d)RDD1E7Nb36gx+D)ApRW2&5y(HHnzc%_aOdxk>rw{S8r6S$3cB_1=f>T{8^i3RH8k?}-}x-9Z=yhU|H9z}dP$GsdMV!S`{72wx0 zQs8(Z@_isTM?xt3)<{*NL){r!jQIVLuNWP;m;MT@N0OfmJsEj4@%7Lj0tp*LcZ4Z* zV>!h?H1>u+Wj<;?XVyn&N1LKcqbs9pqQ|1S*d4L^Vqc6s5&J>x#aLNKb6aJ(aCz)OWuCIatI6veH0kKIs9 z@D>?XAKWt-m?4!ouUv&)-WI&~mBTadNp-vWgnCTFV zDHJuTj5)?iW4*D}=rIl&$Bb(X$9SXhStD|eyl?RHQdplcc^I8w(1#B@TyPisWhwR@ zHNqK#`K}Fp0h;O$CCmO74m`}CzkL4Y; zCwDyOT$ijuS|AA~$x#PxcNEcl3?)oya-G?Cy!C>Kx=!ea@MqOTE;N{E#cG(6S{rl5+<8 z)y9DVwDv^qw3lgb?(`U{JuyDi=X9MOb#etd|AbQ=EQ}pp!ma4YLldU9;TTov(?*pa zJ;K@!j-4TT+enUdCvHdI*h$rc=K&r0k^a6hwQb}S5(ajS=A1rKt?P7uZj^N_Qro&l z#)px9Y$%6X-80mVypvPK1P|^W9Jx+)_Z7ydg0a5AkpfO*(X77yYf;wCPu&802RLNf z-#0X#>**VGU?j3{$GC%T)4Fk*>KQMbR6FvgaywxcwXJioFq$t=t6*UwbI@jN*;2JP z@0y|GWS^t9=Lbii@u(IGq(DaKKdH7j`EiZ*j`!o_xuAN-j}`d1mh*P!Moz$3y`wN3 z`ek&euOBrOc8(7X?Q*(?M`6v5zEL`WRz11gwP1#ZdI!gHn+8X4aP1ky9ce8c`Qg#Q zp`6p3b50GSHnn50-^my9$H!VadeN#;r7ybl=Aph5=Vxhgg}F7j7a00f&Vj+*`eEnI z<0Jh?m-&e5aB_WPIkmUXfo0u_HaaKJt0QCEMvmvFfOHGcOWUB$X)SR%4HulOlkEdT zdQWZ`ow9LEaW@r5Hd~Rgg6c&5dvVgPI`cTAM^l_LJ?IJ$`Azx!P_A!8_eV)-?jy|E zyw|h)Mln*UG+L%d#rDAhX5^Y3`GN7F+&aZ&HyP3f#FlGljN7H-yMoxINF6&k8YU|GZUU-APfdcE&ksBIPMgO3D9cUQn z*6+<>M()X9U+g!GYhS|DXdwWvp((en|HzTfGb4S&gZ(tlTNNA9$ zx?GpB1&=!5Y;Mp7raA8Qg6BF3^8^$E^eOTUo=CMbKax|uCkKyHH=;XoY9r?FDEWOd zHik>i86F%VXJ70upxRaBj`!iQk?y2|a-S)w&fKx_6RInJTpeU5Nxe!gOm{!~FDx2E z7)3saK}`+mCeLwX2f0Hy+R^bbwd?qCG+uF6Vtfr@`s{VcdFU?g$vMX{=Gphvjz9(Pcp{>}P@}Q&|H|0*iU-o;Nljqdq)Ah&N2%KFi(swF9IDi^<_6_G~77yyR z>fo6pC=d6vdC)10VR?YX&?+VvLf-LV%r}58spo*hGvT;jYRD_akeii2m)theKQvw# zJe5-p_tT)y!;!l~LlyLN90KCnzfVtHt)uP%(g2>0+@3q4Hl1M%Lq7+zQv%j%SHLKS z8_yCb*sizQEf}vkti}HRXUq8DKryqY;-c#Z=xtW5f=0 z?eP(H*S74#hSaYI^>;APX2n{ zhH4+;?~jK^F%3t?urbMDd6rp=GJ3~Hd1Jo=%Lr~C0tx!Xh(J@I0~Ex%cBU|h#YeBi z#R8prW!r(9mYh?B^@gap4Z;nD_o{`req(LqyQ~%4)gaD?@_19U1!v?As8QS>IyeCu z#I*o)4`1_m_r_6hXuwo?EAZtAOYuj3T_|&$ZVD^=kWM*9QCdZFkU4<7B#q=ccoQfG z=Qaw8q!dsC)eCvGQ{g0em)eZ4)H+wYCFs!?f-iTk|A#;#&82=989f7OVjksRT)B-&3nj><~_jAtoa}q^4 z=TpwhJ(-8lmc{By^v_~-19D8LB{-RzgzO-G1m_ZqaT0MAT12f|i}WUz2U+Jn1%0*WA6p5zNzbS12%giFzdgP;lawD2N%rVg$nWn*W zBL*qqqfGaJUO)<8KUEt&rHXB&cHD@T>J~2p_kYr2)H~a&w>V6+Y;8>BSmNb4tQt{o z(ClPxje0GW1LFMLC9)TKvd_Ejc)7BeZN0#nUK0 zfih#b&IhmUuobP)ZW~zrrR+>rH1e-Y;E6XOUI26~D%*&xxmawHWaF2rpm4o` zVr77mRBy~A-tGpFWM%^~XhKyL;>yZOybV@`PZVEJNgrfKjs_FiQ9u`ND6bBMW~o|x z1!BMUNCNpF)<`PUxi(al$f{avBiLk!$u1_NgvIPEG$oa+E@IFy1EC7%^;K0Q7mW#3 z&1@i<-B2eSL*uA5%CPrURRO8Odr!tpKxJ8@Di(89Umj5*{CRCQgj`gCihX+hkvCZX zC9yi8!gimPv*UI=p+dFxFtoAzDv7AIuM6Ab4K`k`O44%!`;0YNg(na?Kefg_Gfiha z_r{1lZnrfwB(mXTm^4co<+ZjC$FfF}wT$~h-F|3{A=|Cgotmh!8`+pih5XcEv2vKp zK6jgIB<}j7gjwg_&KQ-u4FZnF7y{uceb`F@L78LrVK-%~YizobowvefMpbnsYMu_O zm0_@*yO*qWFb2cL*p^jQPy!WJCqr?r{eD;q<;4(z#9x}`ra<|bKwo2*lmGwB1er;P>n-e4dTE zF_GOh!1eyISPXfPW@pQyVIx*$M#EKMdtW>niOsB9sG#d$_j#xZf##ehe`4eQ0V`XK+;Eb#q z95hO18OYMoYiHR9wGthxwp&T@nC-ERafs56-KC%<)+9J9h^em5npnzPA=HL7p}Cn2 zBMHtv6aqkA5LH27%yVfd3?qj*=9R25R@TG_#Z^r6a&E7oK3M|*%N*(&z_%Qoy8|9M zMEF2s)b!Q~`>3}r*oSL*_1)^P2k1R43sJ+au<^y%Ve}MQ0(L8$uA;=A7*<4F>>l(A zC6`4*sE71GR@bz&*xKFbFA`&SR~lv|s`oY;v~WOQTH!0vGuY&WLY1*7n;x|yBdtbI zVI~`nmZ1>5KUoUhO!;`VLUVd}2hf8Z07l}zGHM`pDrjGo-Ccp&yRmtoyx1I2+mRTl zbeAq-tD{l-sC^j9>3`j*^Du330-Jzpm-W|lyogt(pSP*95Uqb{yhG=o6lTBn(QI~U z>yl+SVF;F%lOP8-$wW_V{`0*V6kS3&} zOY|S~;0ZsyZoSt?UE%bN;(X431ikkpow0>Bgw!(cRM9`g+KcnzLJQ8u^CKsQ&d@Xb z0q=xs(>M-|b57L#gCV>P2WwmBeuOvHY01W4NrzNz@j0yfJfjcq3S>GqE@@k`Wc5aR zsId=E%JH;*pvM_JMJMAph2t-^iSY3|{t)}vv;WZAzrO23Z@BBgFaB-WAG7F-(f>mh zpuat#KfhAvq*63o`TLa4!zmwb%G819mHM7&}OdT~0rpU>%faRW;yhDZ2D zb~9-Dd^z&-m-M?eJkJ=T$ordP+IU+;igr z+``gL{C>27ZvDMlvdGuS`8v=lIxe8LoPqvy_=b6fPZnVj-gqjN70gpSsU|zy$V<2C zCm;pSsvvn3GU>MY1a4GulR5>K#rtqs{9B5)FH!JWZk=Q?x>a{@C27T4gLN+F_IbAH zME(Nwr5fn~#M733^}#z)R|@Z7qMcfA(v|8dpx!J(E8b!Y`Mp+ZHJs_;*nrO2b)dih z!>t>}iq?^i2dJ%Hdx+E4EY{zG8c!pTp45(_z4V9}K-w_MIe4dvTBX~?#Q%>`R{xEs NK?D2Z=l?qk{BMmg-wFT# diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb b/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb index 3c2fef7fb05d4b8d7d8d0176a7306d3bc2b3e5e1..8d05e19f78b2d29b0182abd4690192c31d950f0f 100644 GIT binary patch literal 132608 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 + + + + + + + + + + diff --git a/ports/csharp/Jison/Jison/build.bat b/ports/csharp/Jison/Jison/build.bat new file mode 100644 index 000000000..a25546ea3 --- /dev/null +++ b/ports/csharp/Jison/Jison/build.bat @@ -0,0 +1 @@ +node csharp.js Test\formula.jison \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 0a59642af..fc685a974 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -85,26 +85,30 @@ exec("jison " + process.argv[2], function (error) { } str = comments.parse(str); - str = str.replace(/(\d)\n/g, function () { + str = str.replace(/(\d)(\n|\r\n)/g, function () { return arguments[1] + ';\n'; }); return str; } + function capitaliseFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + } + var FileName = fileName.charAt(0).toUpperCase() + fileName.slice(1); var option = { 'using': '', 'namespace': 'Jison', - 'class': FileName, + 'class': capitaliseFirstLetter(FileName.split(/[/\\]/g).pop()), 'fileName': FileName + '.cs', 'extends': '', 'parserValue': '' }; var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); - parserDefinition = parserDefinition.split(/\n/g); + parserDefinition = parserDefinition.split(/(\n|\r\n)/g); for (var i = 0; i < parserDefinition.length; i++) { if (parserDefinition[i].match('//option')) { parserDefinition[i] = parserDefinition[i].replace('//option ', '').trim(); diff --git a/ports/csharp/Jison/Jison/formula.js b/ports/csharp/Jison/Jison/formula.js new file mode 100644 index 000000000..e4068a9b4 --- /dev/null +++ b/ports/csharp/Jison/Jison/formula.js @@ -0,0 +1,1305 @@ +/* parser generated by jison 0.4.13 */ +/* + Returns a Parser object of the following structure: + + Parser: { + yy: {} + } + + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), + + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, + + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } + + + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } + + + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var formula = (function(){ +var parser = {trace: function trace() { }, +yy: {}, +symbols_: {"error":2,"expressions":3,"expression":4,"EOF":5,"variableSequence":6,"TIME_AMPM":7,"TIME_24":8,"number":9,"STRING":10,"=":11,"+":12,"(":13,")":14,"<":15,">":16,"NOT":17,"-":18,"*":19,"/":20,"^":21,"E":22,"FUNCTION":23,"expseq":24,"cell":25,"FIXEDCELL":26,":":27,"CELL":28,"SHEET":29,"!":30,";":31,",":32,"VARIABLE":33,"DECIMAL":34,"NUMBER":35,"%":36,"#":37,"$accept":0,"$end":1}, +terminals_: {5:"EOF",7:"TIME_AMPM",8:"TIME_24",10:"STRING",11:"=",12:"+",13:"(",14:")",15:"<",16:">",17:"NOT",18:"-",19:"*",20:"/",21:"^",22:"E",23:"FUNCTION",26:"FIXEDCELL",27:":",28:"CELL",29:"SHEET",30:"!",31:";",32:",",33:"VARIABLE",34:"DECIMAL",35:"NUMBER",36:"%",37:"#"}, +productions_: [0,[3,2],[4,1],[4,1],[4,1],[4,1],[4,1],[4,3],[4,3],[4,3],[4,4],[4,4],[4,4],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,2],[4,2],[4,1],[4,3],[4,4],[4,1],[4,1],[4,2],[25,1],[25,3],[25,1],[25,3],[25,3],[25,5],[24,1],[24,3],[24,3],[6,1],[6,3],[9,1],[9,3],[9,2],[2,3],[2,4]], +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { +/* this == yyval */ + +var $0 = $$.length - 1; +switch (yystate) { +case 1:return $$[$0-1]; +break; +case 2: + //js + this.$ = yy.handler.variable.apply(yy.obj, $$[$0]); + + //php this.$ = $this->variable($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 3: + //js + this.$ = yy.handler.time.apply(yy.obj, [$$[$0], true]); + // + +break; +case 4: + //js + this.$ = yy.handler.time.apply(yy.obj, [$$[$0]]); + // + +break; +case 5: + //js + this.$ = yy.handler.number.apply(yy.obj, [$$[$0]]); + + //php this.$ = $$[$0] * 1; + + /*cs + $$[$0].ToDouble(); + this.$ = $$[$0]; + */ + +break; +case 6: + //js + this.$ = $$[$0].substring(1, $$[$0].length - 1); + + //php this.$ = substr($$[$0], 1, -1); + + /*cs + $$[$0].ToString(); + this.$ = $$[$0]; + */ + +break; +case 7: + //js + yy.obj.html.pop(); + this.$ = yy.handler.callFunction.apply(yy.obj, ['EQUAL', [$$[$0-2], $$[$0]]]); + + //php this.$ = $$[$0-2] == $$[$0]; + + /*cs + $$[$0-2].Set($$[$0-2].Text == $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 8: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['+', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + /*php + if (is_numeric($$[$0-2]) && is_numeric($$[$0])) { + this.$ = $$[$0-2] + $$[$0]; + } else { + this.$ = $$[$0-2] . $$[$0]; + } + */ + + /*cs + if ($$[$0-2].IsNumeric()) { + $$[$0-2].ToDouble(); + $$[$0-2].Add($$[$0]); + this.$ = $$[$0-2]; + } else { + $$[$0-2].ToString(); + $$[$0-2].Concat($$[$0]); + this.$ = $$[$0-2]; + } + */ + +break; +case 9: + //js + this.$ = yy.handler.number.apply(yy.obj, [$$[$0-1]]); + // + +break; +case 10: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['LESS_EQUAL', [$$[$0-3], $$[$0-1]]]); + + //php this.$ = ($$[$0-3] * 1) <= ($$[$0] * 1); + + /*cs + $$[$0-3].Set($$[$0-3].ToDouble() <= $$[$0].ToDouble()); + this.$ = $$[$0-3]; + */ + +break; +case 11: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['GREATER_EQUAL', [$$[$0-3], $$[$0-1]]]); + + //php this.$ = ($$[$0-3] * 1) >= ($$[$0] * 1); + + /*cs + $$[$0-3].Set($$[$0-3].ToDouble() >= $$[$0].ToDouble()); + this.$ = $$[$0-3]; + */ + +break; +case 12: + //js|php + this.$ = ($$[$0-3] * 1) != ($$[$0] * 1); + + //js + if (isNaN(this.$)) this.$ = 0; + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + // + + /*cs + $$[$0-3].Set($$[$0-3].Text != $$[$0].Text); + this.$ = $$[$0-3]; + */ + +break; +case 13: + //js|php + this.$ = $$[$0-2] != $$[$0]; + + //js + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + // + + /*cs + $$[$0-2].Set($$[$0-2].Text != $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 14: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['GREATER', [$$[$0-2], $$[$0]]]); + + //php this.$ = ($$[$0-2] * 1) > ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() > $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 15: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['LESS', [$$[$0-2], $$[$0]]]); + + //php this.$ = ($$[$0-2] * 1) < ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() < $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 16: + //js|php + this.$ = ($$[$0-2] * 1) - ($$[$0] * 1); + + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['-', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() - $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 17: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['*', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = ($$[$0-2] * 1) * ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() * $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 18: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['/', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = ($$[$0-2] * 1) / ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() / $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 19: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0-2]]), + n2 = yy.handler.number.apply(yy.obj, [$$[$0]]); + + this.$ = yy.handler.performMath.apply(yy.obj, ['^', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = pow(($$[$0-2] * 1), ($$[$0] * 1)); + + /*cs + $$[$0-2].Set(Math.Pow($$[$0-2].ToDouble(), $$[$0].ToDouble())); + this.$ = $$[$0-2]; + */ + +break; +case 20: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0]]); + this.$ = n1 * -1; + if (isNaN(this.$)) this.$ = 0; + + //php this.$ = $$[$0-1] * 1; + + /*cs + $$[$0].Set(-$$[$0].ToDouble()); + this.$ = $$[$0]; + */ + +break; +case 21: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0]]); + this.$ = n1 * 1; + if (isNaN(this.$)) this.$ = 0; + + //php this.$ = $$[$0-1] * 1; + + /*cs + $$[$0].Set($$[$0].ToDouble()); + this.$ = $$[$0]; + */ + +break; +case 22:/*this.$ = Math.E;*/; +break; +case 23: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, [$$[$0-2], '']); + + //php this.$ = $this->callFunction($$[$0-2]); + + /*cs + this.$ = Functions.Call($$[$0-2].Text); + */ + +break; +case 24: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, [$$[$0-3], $$[$0-1]]); + + //php this.$ = $this->callFunction($$[$0-3], $$[$0-1]); + + /*cs + this.$ = Functions.Call($$[$0-3].Text, $$[$0-1]); + */ + +break; +case 28: + //js + this.$ = yy.handler.fixedCellValue.apply(yy.obj, [$$[$0]]); + + //php this.$ = $this->fixedCellValue($$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseFixed($$[$0].Text)); + */ + +break; +case 29: + //js + this.$ = yy.handler.fixedCellRangeValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->fixedCellRangeValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseFixed($$[$0-2].Text), Location.ParseFixed($$[$0].Text)); + */ + +break; +case 30: + //js + this.$ = yy.handler.cellValue.apply(yy.obj, [$$[$0]]); + + //php this.$ = $this->cellValue($$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.Parse($$[$0].Text)); + */ + +break; +case 31: + //js + this.$ = yy.handler.cellRangeValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->cellRangeValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.Parse($$[$0-2].Text), Location.Parse($$[$0].Text)); + */ + +break; +case 32: + //js + this.$ = yy.handler.remoteCellValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->remoteCellValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseRemote($$[$0-2].Text, $$[$0].Text)); + */ + +break; +case 33: + //js + this.$ = yy.handler.remoteCellRangeValue.apply(yy.obj, [$$[$0-4], $$[$0-2], $$[$0]]); + + //php this.$ = $this->remoteCellRangeValue($$[$0-4], $$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseRemote($$[$0-4].Text, $$[$0-2].Text), Location.ParseRemote($$[$0-4].Text, $$[$0].Text)); + */ + +break; +case 34: + //js + this.$ = [$$[$0]]; + + //php this.$ = array($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 35: + //js + $$[$0-2].push($$[$0]); + this.$ = $$[$0-2]; + + /*php + $$[$0-2][] = $$[$0]; + this.$ = $$[$0-2]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 36: + //js + $$[$0-2].push($$[$0]); + this.$ = $$[$0-2]; + + /*php + $$[$0-2][] = $$[$0]; + this.$ = $$[$0-2]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 37: + //js + this.$ = [$$[$0]]; + + //php this.$ = array($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 38: + //js + this.$ = ($.isArray($$[$0-2]) ? $$[$0-2] : [$$[$0-2]]); + this.$.push($$[$0]); + + /*php + this.$ = (is_array($$[$0-2]) ? $$[$0-2] : array()); + this.$[] = $$[$0]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 39: + //js|php + this.$ = $$[$0] * 1; + + /*cs + $$[$0].ToDouble(); + this.$ = $$[$0]; + */ + +break; +case 40: + //js + this.$ =($$[$0-2] + '.' + $$[$0]) * 1; + + //php this.$ = $$[$0-2] . '.' . $$[$0]; + + /*cs + $$[$0-2].Text += "." + $$[$0].Text; + $$[$0-2].ToDouble(); + this.$ = $$[$0-2]; + */ + +break; +case 41: + //js + yy.obj.html.push($$[$0-1] + $$[$0]); + + //js|php + this.$ = $$[$0-1] * 0.01; + + /*cs + $$[$0-1].Set($$[$0-1].ToDouble() * 0.01); + this.$ = $$[$0-1]; + */ + +break; +case 42: + //js + this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; + + //php this.$ = $$[$0-2] . $$[$0-1] . $$[$0]; + + /*cs + $$[$0-2].Set($$[$0-2].Text + $$[$0-1].Text + $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 43: + //js + this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; + + //php this.$ = $$[$0-2] . $$[$0-1] . $$[$0]; + + /*cs + $$[$0-3].Set($$[$0-3].Text + $$[$0-2].Text + $$[$0-1].Text + $$[$0].Text); + this.$ = $$[$0-3]; + */ + +break; +} +}, +table: [{2:14,3:1,4:2,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{1:[3]},{5:[1,21],11:[1,22],12:[1,23],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30]},{5:[2,2],11:[2,2],12:[2,2],14:[2,2],15:[2,2],16:[2,2],17:[2,2],18:[2,2],19:[2,2],20:[2,2],21:[2,2],31:[2,2],32:[2,2],34:[1,31]},{5:[2,3],11:[2,3],12:[2,3],14:[2,3],15:[2,3],16:[2,3],17:[2,3],18:[2,3],19:[2,3],20:[2,3],21:[2,3],31:[2,3],32:[2,3]},{5:[2,4],11:[2,4],12:[2,4],14:[2,4],15:[2,4],16:[2,4],17:[2,4],18:[2,4],19:[2,4],20:[2,4],21:[2,4],31:[2,4],32:[2,4]},{5:[2,5],11:[2,5],12:[2,5],14:[2,5],15:[2,5],16:[2,5],17:[2,5],18:[2,5],19:[2,5],20:[2,5],21:[2,5],31:[2,5],32:[2,5],36:[1,32]},{5:[2,6],11:[2,6],12:[2,6],14:[2,6],15:[2,6],16:[2,6],17:[2,6],18:[2,6],19:[2,6],20:[2,6],21:[2,6],31:[2,6],32:[2,6]},{2:14,4:33,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:34,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:35,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,22],11:[2,22],12:[2,22],14:[2,22],15:[2,22],16:[2,22],17:[2,22],18:[2,22],19:[2,22],20:[2,22],21:[2,22],31:[2,22],32:[2,22]},{13:[1,36]},{5:[2,25],11:[2,25],12:[2,25],14:[2,25],15:[2,25],16:[2,25],17:[2,25],18:[2,25],19:[2,25],20:[2,25],21:[2,25],31:[2,25],32:[2,25]},{2:37,5:[2,26],11:[2,26],12:[2,26],14:[2,26],15:[2,26],16:[2,26],17:[2,26],18:[2,26],19:[2,26],20:[2,26],21:[2,26],31:[2,26],32:[2,26],33:[1,38],37:[1,20]},{5:[2,37],11:[2,37],12:[2,37],14:[2,37],15:[2,37],16:[2,37],17:[2,37],18:[2,37],19:[2,37],20:[2,37],21:[2,37],31:[2,37],32:[2,37],34:[2,37],37:[1,39]},{5:[2,39],11:[2,39],12:[2,39],14:[2,39],15:[2,39],16:[2,39],17:[2,39],18:[2,39],19:[2,39],20:[2,39],21:[2,39],31:[2,39],32:[2,39],34:[1,40],36:[2,39]},{5:[2,28],11:[2,28],12:[2,28],14:[2,28],15:[2,28],16:[2,28],17:[2,28],18:[2,28],19:[2,28],20:[2,28],21:[2,28],27:[1,41],31:[2,28],32:[2,28]},{5:[2,30],11:[2,30],12:[2,30],14:[2,30],15:[2,30],16:[2,30],17:[2,30],18:[2,30],19:[2,30],20:[2,30],21:[2,30],27:[1,42],31:[2,30],32:[2,30]},{30:[1,43]},{33:[1,44]},{1:[2,1]},{2:14,4:45,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:46,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:49,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],11:[1,47],12:[1,10],13:[1,8],16:[1,48],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:51,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],11:[1,50],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:52,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:53,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:54,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:55,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:56,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{33:[1,57]},{5:[2,41],11:[2,41],12:[2,41],14:[2,41],15:[2,41],16:[2,41],17:[2,41],18:[2,41],19:[2,41],20:[2,41],21:[2,41],31:[2,41],32:[2,41],36:[2,41]},{11:[1,22],12:[1,23],14:[1,58],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30]},{5:[2,20],11:[2,20],12:[2,20],14:[2,20],15:[2,20],16:[2,20],17:[2,20],18:[2,20],19:[1,28],20:[1,29],21:[1,30],31:[2,20],32:[2,20]},{5:[2,21],11:[2,21],12:[2,21],14:[2,21],15:[2,21],16:[2,21],17:[2,21],18:[2,21],19:[1,28],20:[1,29],21:[1,30],31:[2,21],32:[2,21]},{2:14,4:61,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],14:[1,59],18:[1,9],22:[1,11],23:[1,12],24:60,25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,27],11:[2,27],12:[2,27],14:[2,27],15:[2,27],16:[2,27],17:[2,27],18:[2,27],19:[2,27],20:[2,27],21:[2,27],31:[2,27],32:[2,27]},{37:[1,39]},{33:[1,62]},{35:[1,63]},{26:[1,64]},{28:[1,65]},{28:[1,66]},{30:[1,67]},{5:[2,7],11:[2,7],12:[1,23],14:[2,7],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,7],32:[2,7]},{5:[2,8],11:[2,8],12:[2,8],14:[2,8],15:[2,8],16:[2,8],17:[2,8],18:[2,8],19:[1,28],20:[1,29],21:[1,30],31:[2,8],32:[2,8]},{2:14,4:68,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:69,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,15],11:[2,15],12:[1,23],14:[2,15],15:[2,15],16:[2,15],17:[2,15],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,15],32:[2,15]},{2:14,4:70,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,14],11:[2,14],12:[1,23],14:[2,14],15:[2,14],16:[2,14],17:[2,14],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,14],32:[2,14]},{5:[2,13],11:[2,13],12:[1,23],14:[2,13],15:[1,24],16:[1,25],17:[2,13],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,13],32:[2,13]},{5:[2,16],11:[2,16],12:[2,16],14:[2,16],15:[2,16],16:[2,16],17:[2,16],18:[2,16],19:[1,28],20:[1,29],21:[1,30],31:[2,16],32:[2,16]},{5:[2,17],11:[2,17],12:[2,17],14:[2,17],15:[2,17],16:[2,17],17:[2,17],18:[2,17],19:[2,17],20:[2,17],21:[1,30],31:[2,17],32:[2,17]},{5:[2,18],11:[2,18],12:[2,18],14:[2,18],15:[2,18],16:[2,18],17:[2,18],18:[2,18],19:[2,18],20:[2,18],21:[1,30],31:[2,18],32:[2,18]},{5:[2,19],11:[2,19],12:[2,19],14:[2,19],15:[2,19],16:[2,19],17:[2,19],18:[2,19],19:[2,19],20:[2,19],21:[2,19],31:[2,19],32:[2,19]},{5:[2,38],11:[2,38],12:[2,38],14:[2,38],15:[2,38],16:[2,38],17:[2,38],18:[2,38],19:[2,38],20:[2,38],21:[2,38],31:[2,38],32:[2,38],34:[2,38]},{5:[2,9],11:[2,9],12:[2,9],14:[2,9],15:[2,9],16:[2,9],17:[2,9],18:[2,9],19:[2,9],20:[2,9],21:[2,9],31:[2,9],32:[2,9]},{5:[2,23],11:[2,23],12:[2,23],14:[2,23],15:[2,23],16:[2,23],17:[2,23],18:[2,23],19:[2,23],20:[2,23],21:[2,23],31:[2,23],32:[2,23]},{14:[1,71],31:[1,72],32:[1,73]},{11:[1,22],12:[1,23],14:[2,34],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,34],32:[2,34]},{30:[1,74]},{5:[2,40],11:[2,40],12:[2,40],14:[2,40],15:[2,40],16:[2,40],17:[2,40],18:[2,40],19:[2,40],20:[2,40],21:[2,40],31:[2,40],32:[2,40],36:[2,40]},{5:[2,29],11:[2,29],12:[2,29],14:[2,29],15:[2,29],16:[2,29],17:[2,29],18:[2,29],19:[2,29],20:[2,29],21:[2,29],31:[2,29],32:[2,29]},{5:[2,31],11:[2,31],12:[2,31],14:[2,31],15:[2,31],16:[2,31],17:[2,31],18:[2,31],19:[2,31],20:[2,31],21:[2,31],31:[2,31],32:[2,31]},{5:[2,32],11:[2,32],12:[2,32],14:[2,32],15:[2,32],16:[2,32],17:[2,32],18:[2,32],19:[2,32],20:[2,32],21:[2,32],27:[1,75],31:[2,32],32:[2,32]},{5:[2,42],11:[2,42],12:[2,42],14:[2,42],15:[2,42],16:[2,42],17:[2,42],18:[2,42],19:[2,42],20:[2,42],21:[2,42],31:[2,42],32:[2,42],33:[2,42],37:[2,42]},{5:[2,10],11:[2,10],12:[1,23],14:[2,10],15:[2,10],16:[2,10],17:[2,10],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,10],32:[2,10]},{5:[2,12],11:[2,12],12:[1,23],14:[2,12],15:[2,12],16:[2,12],17:[2,12],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,12],32:[2,12]},{5:[2,11],11:[2,11],12:[1,23],14:[2,11],15:[2,11],16:[2,11],17:[2,11],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,11],32:[2,11]},{5:[2,24],11:[2,24],12:[2,24],14:[2,24],15:[2,24],16:[2,24],17:[2,24],18:[2,24],19:[2,24],20:[2,24],21:[2,24],31:[2,24],32:[2,24]},{2:14,4:76,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:77,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,43],11:[2,43],12:[2,43],14:[2,43],15:[2,43],16:[2,43],17:[2,43],18:[2,43],19:[2,43],20:[2,43],21:[2,43],31:[2,43],32:[2,43],33:[2,43],37:[2,43]},{28:[1,78]},{11:[1,22],12:[1,23],14:[2,35],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,35],32:[2,35]},{11:[1,22],12:[1,23],14:[2,36],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,36],32:[2,36]},{5:[2,33],11:[2,33],12:[2,33],14:[2,33],15:[2,33],16:[2,33],17:[2,33],18:[2,33],19:[2,33],20:[2,33],21:[2,33],31:[2,33],32:[2,33]}], +defaultActions: {21:[2,1]}, +parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + throw new Error(str); + } +}, +parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], // semantic value stack + lstack = [], // location stack + table = this.table, + yytext = '', + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + + var args = lstack.slice.call(arguments, 1); + + //this.reductionCount = this.shiftCount = 0; + + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == 'undefined') { + this.lexer.yylloc = {}; + } + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + + var ranges = this.lexer.options && this.lexer.options.ranges; + + if (typeof this.yy.parseError === 'function') { + this.parseError = this.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + + function popStack (n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + + function lex() { + var token; + token = self.lexer.lex() || EOF; // $end = 1 + // if token isn't its numeric value, convert + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + } + + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; + while (true) { + // retreive state number from top of stack + state = stack[stack.length - 1]; + + // use default actions if available + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + // read action for current state and first input + action = table[state] && table[state][symbol]; + } + +_handle_error: + // handle parse error + if (typeof action === 'undefined' || !action.length || !action[0]) { + var error_rule_depth; + var errStr = ''; + + // Return the rule stack depth where the nearest error rule can be found. + // Return FALSE when no error recovery rule was found. + function locateNearestErrorRecoveryRule(state) { + var stack_probe = stack.length - 1; + var depth = 0; + + // try to recover from error + for(;;) { + // check for error recovery rule in this state + if ((TERROR.toString()) in table[state]) { + return depth; + } + if (state === 0 || stack_probe < 2) { + return false; // No suitable error recovery rule available. + } + stack_probe -= 2; // popStack(1): [symbol, action] + state = stack[stack_probe]; + ++depth; + } + } + + if (!recovering) { + // first see if there's any chance at hitting an error recovery rule: + error_rule_depth = locateNearestErrorRecoveryRule(state); + + // Report error + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'"+this.terminals_[p]+"'"); + } + } + if (this.lexer.showPosition) { + errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + (this.terminals_[symbol] || symbol)+ "'"; + } else { + errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " + + (symbol == EOF ? "end of input" : + ("'"+(this.terminals_[symbol] || symbol)+"'")); + } + this.parseError(errStr, { + text: this.lexer.match, + token: this.terminals_[symbol] || symbol, + line: this.lexer.yylineno, + loc: yyloc, + expected: expected, + recoverable: (error_rule_depth !== false) + }); + } else if (preErrorSymbol !== EOF) { + error_rule_depth = locateNearestErrorRecoveryRule(state); + } + + // just recovered from another error + if (recovering == 3) { + if (symbol === EOF || preErrorSymbol === EOF) { + throw new Error(errStr || 'Parsing halted while starting to recover from another error.'); + } + + // discard current lookahead and grab another + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + symbol = lex(); + } + + // try to recover from error + if (error_rule_depth === false) { + throw new Error(errStr || 'Parsing halted. No suitable error recovery rule available.'); + } + popStack(error_rule_depth); + + preErrorSymbol = (symbol == TERROR ? null : symbol); // save the lookahead token + symbol = TERROR; // insert generic error symbol as new lookahead + state = stack[stack.length-1]; + action = table[state] && table[state][TERROR]; + recovering = 3; // allow 3 real symbols to be shifted before reporting a new error + } + + // this shouldn't happen, unless resolve defaults are off + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol); + } + + switch (action[0]) { + case 1: // shift + //this.shiftCount++; + + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); // push state + symbol = null; + if (!preErrorSymbol) { // normal execution/no error + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) { + recovering--; + } + } else { + // error just occurred, resume old lookahead f/ before error + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + + case 2: + // reduce + //this.reductionCount++; + + len = this.productions_[action[1]][1]; + + // perform semantic action + yyval.$ = vstack[vstack.length-len]; // default to $$ = $1 + // default location, uses first token for firsts, last for lasts + yyval._$ = { + first_line: lstack[lstack.length-(len||1)].first_line, + last_line: lstack[lstack.length-1].last_line, + first_column: lstack[lstack.length-(len||1)].first_column, + last_column: lstack[lstack.length-1].last_column + }; + if (ranges) { + yyval._$.range = [lstack[lstack.length-(len||1)].range[0], lstack[lstack.length-1].range[1]]; + } + r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack].concat(args)); + + if (typeof r !== 'undefined') { + return r; + } + + // pop off stack + if (len) { + stack = stack.slice(0,-1*len*2); + vstack = vstack.slice(0, -1*len); + lstack = lstack.slice(0, -1*len); + } + + stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce) + vstack.push(yyval.$); + lstack.push(yyval._$); + // goto new state = table[STATE][NONTERMINAL] + newState = table[stack[stack.length-2]][stack[stack.length-1]]; + stack.push(newState); + break; + + case 3: + // accept + return true; + } + + } + + return true; +}}; + +if (typeof(window) !== 'undefined') { + window.Formula = function(handler) { + var formulaLexer = function () {}; + formulaLexer.prototype = formula.lexer; + + var formulaParser = function () { + this.lexer = new formulaLexer(); + this.yy = {}; + }; + + formulaParser.prototype = formula; + var newParser = new formulaParser; + newParser.setObj = function(obj) { + newParser.yy.obj = obj; + }; + newParser.yy.handler = handler; + return newParser; + }; +}/* generated by jison-lex 0.2.1 */ +var lexer = (function(){ +var lexer = { + +EOF:1, + +parseError:function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + +// resets the lexer, sets new input +setInput:function (input) { + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0,0]; + } + this.offset = 0; + return this; + }, + +// consumes and returns one char from the input +input:function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + + this._input = this._input.slice(1); + return ch; + }, + +// unshifts one char (or a string) into the input +unput:function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? + (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length : + this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + +// When called from action, caches matched text and appends it on next action +more:function () { + this._more = true; + return this; + }, + +// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +reject:function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + + } + return this; + }, + +// retain first n characters of the match +less:function (n) { + this.unput(this.match.slice(n)); + }, + +// displays already matched input, i.e. for error messages +pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + +// displays upcoming input, i.e. for error messages +upcomingInput:function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20-next.length); + } + return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + +// displays the character position where the lexing error occurred, i.e. for error messages +showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + +// test the lexed token: return FALSE when not a match, otherwise return token +test_match:function (match, indexed_rule) { + var token, + lines, + backup; + + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? + lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : + this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + +// return next match in input +next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + + var token, + match, + tempMatch, + index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + +// return next match that has a token +lex:function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +begin:function begin(condition) { + this.conditionStack.push(condition); + }, + +// pop the previously active lexer condition state off the condition stack +popState:function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state +_currentRules:function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +topState:function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + +// alias for begin(condition) +pushState:function pushState(condition) { + this.begin(condition); + }, + +// return the number of states currently on the stack +stateStackSize:function stateStackSize() { + return this.conditionStack.length; + }, +options: {}, +performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { + +var YYSTATE=YY_START; +switch($avoiding_name_collisions) { +case 0:/* skip whitespace */ +break; +case 1:return 10; +break; +case 2:return 10; +break; +case 3:return 23; +break; +case 4:return 7; +break; +case 5:return 8; +break; +case 6: + //js + if (yy.obj.type == 'cell') return 29; + return 33; + + /*php + if ($this->type == 'cell') return 29; + return 33; + */ + + /*cs + return 29; + //return 33; + */ + +break; +case 7: + //js + if (yy.obj.type == 'cell') return 26; + return 33; + + /*php + if ($this->type == 'cell') return 26; + return 33; + */ + + /*cs + return 26; + //return 33; + */ + +break; +case 8: + //js + if (yy.obj.type == 'cell') return 28; + return 33; + + /*php + if ($this->type == 'cell') return 28; + return 33; + */ + + /*cs + return 28; + //return 33; + */ + +break; +case 9:return 23; +break; +case 10:return 33; +break; +case 11:return 33; +break; +case 12:return 35; +break; +case 13:/* skip whitespace */ +break; +case 14:return 34; +break; +case 15:return 27; +break; +case 16:return 31; +break; +case 17:return 32; +break; +case 18:return 19; +break; +case 19:return 20; +break; +case 20:return 18; +break; +case 21:return 12; +break; +case 22:return 21; +break; +case 23:return 13; +break; +case 24:return 14; +break; +case 25:return 16; +break; +case 26:return 15; +break; +case 27:return 17; +break; +case 28:return 22; +break; +case 29:return '"'; +break; +case 30:return "'"; +break; +case 31:return "!"; +break; +case 32:return 11; +break; +case 33:return 36; +break; +case 34:return 37; +break; +case 35:return 5; +break; +} +}, +rules: [/^(?:\s+)/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))/,/^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))/,/^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)/,/^(?:SHEET[0-9]+)/,/^(?:\$[A-Za-z]+\$[0-9]+)/,/^(?:[A-Za-z]+[0-9]+)/,/^(?:[A-Za-z]+(?=[(]))/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/,/^(?:[A-Za-z_]+)/,/^(?:[0-9]+)/,/^(?:\\s)/,/^(?:[.])/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\/)/,/^(?:-)/,/^(?:\+)/,/^(?:\^)/,/^(?:\()/,/^(?:\))/,/^(?:>)/,/^(?:<)/,/^(?:NOT\b)/,/^(?:E\b)/,/^(?:")/,/^(?:')/,/^(?:!)/,/^(?:=)/,/^(?:%)/,/^(?:[#])/,/^(?:$)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"inclusive":true}} +}; +return lexer; +})(); +parser.lexer = lexer; +function Parser () { + this.yy = {}; +} +Parser.prototype = parser;parser.Parser = Parser; +return new Parser; +})(); + + +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { +exports.parser = formula; +exports.Parser = formula.Parser; +exports.parse = function () { return formula.parse.apply(formula, arguments); }; +exports.main = function commonjsMain(args) { + if (!args[1]) { + console.log('Usage: '+args[0]+' FILE'); + process.exit(1); + } + var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); + return exports.parser.parse(source); +}; +if (typeof module !== 'undefined' && require.main === module) { + exports.main(process.argv.slice(1)); +} +} \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..e9350f2fce01b536726f0d04548a1998d0bfbde3 GIT binary patch literal 6824 zcmeHMZByGu5VpZwFoYJ1+-poqBfy zTo1pczo65f*zU?NyoUCJG{XnWXMEINyGbe@hNxx6>yikgHmfKo8(#*$MsR`&^5`Kd>*SX84ZR$JRp_=u2qE^i|Lf2iF)MJN2?)RE% z)PlBKXWG_<>%e;Nqq0V2lj;7jYG^5@-+>YJh&O#9S(!B`xMIUs8s>L0yN=-}S9j`| z>vX-%FE?@Tg8uZVybJ48`rI_jTryh=$(foA98G1FQEBgPQoXAto97hcffNn!5Uy%U zvL;trwoV3QVPTq~3unO4X=j{5nLgL_R``6M$%mJ#%UlI6Z6VY z7#Xja&m^~vH{gQz#qI4Yx z<9cz{k=$m7L5yWHcsqguxIij<0|fkxqR65cLop6wjNAm7A`>89wkusa^t=k}_>f9w z_8F{cyj!dFiDBUYUhst;tL!q!wWDM55!h*$o|``_pp>Q*7L(ct+|cuwG|R#cJ?3j= zzT*0IXqkIl3EvEa1eL9JsSL~?B2`BUYtJk*D{O*PKrL%Pe=1A~_n^;pE3CmJ^MN)Q zHnn$I_G4VlB#4=_6Yf!ZoH)rr`y{sK`zy*XkSWk+qV`Yl&Qshax8QCJb;kVMd~qfF zDg2#7ALExyqc9G+?>PiHd&Y2Fm)wc&*b&R&HlTmWT@XLT<(7`8j6FqW;xubTS&2n8 znFX`I#WmX+@O85xq!+r>h&G&j2KFm)*?$oPh8<-?{8ML2oD z(aGVIsip>sD$^%|#G??Ao8QzJWy|G`Fg4mt%qX!$$Sf7V^Bd<@DOSi1aR1ty8O zk9+fDPV%8gnjSpJf?Qn## literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources b/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt new file mode 100644 index 000000000..e068f4738 --- /dev/null +++ b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe.config +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.pdb +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csprojResolveAssemblyReference.cache +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.Properties.Resources.resources +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csproj.GenerateResource.Cache +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.exe +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.pdb diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..6d2fbfad1909441196a5718ce02f5bdf4b889eb3 GIT binary patch literal 919 zcma)4%}N|W5T4PQb!T>k@eo9k!xB6QF2k-O$z=(+Vj@xS56K}AdZuegv%S+xSC6`tt{4vG z&OmI7kl8kxNlpPjLb(SsC?%A+0$e0;WC6eID-F0ZGuDYr!=cKouyntg38Ygw0m+Cx zWg&OQ&V#^z+syH}I_rHQjGSCEa=VI934#4vC*2|N?YNYo{la6VhYHP}K951WVJ`Jio5s2(!@ z@g4mzQMmdrFms-;&4OGhrttbnTnltZMyf)AeD&lGt`s_Kk*H%MO<8QS| zmy}TL@p6&Dg^&;pB$0ruY7kOLSA~t)E8Ag|f+tl7!rmp~Op*}=47*xTP(=7Ibwv@( zeMbB~@g(Cb^L#1}izb8vZ{Vg5^WliIY3Kv5;DbT<1BxmmQ9dR#0bv-0f>A2fD$BI? zF86w}B<8(;_W%89`>lylnKuKsRM7}>^8z0!W{)A3v=d@f(dZfC5oIp)t_yQXQD@2aJVhPJ!yZs)a`!+bE{>!f=+3G>xS n_jMB1Lnl4ZNmwtP^iU^ZJ$2H$PQrTYqz#>f=b@7xX{6d;TgCng literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.exe b/ports/csharp/Jison/Jison/obj/Debug/Jison.exe new file mode 100644 index 0000000000000000000000000000000000000000..fda9a7134ea9a5f6f16ff727aa6776e766020731 GIT binary patch literal 64000 zcmeEvd7MKPuQ6{(G>L$TNle0yZ%i;I8U)cS`aS1Vb@%P6$@cr+f4<-E zL%aH%r`Ge-sZ(`tch6mP(Jdk*to7Uu-yv&&Adja6XG%)vXQA}q`hVpb)B zqQooy(by~z7F(V}r}Km$^egD?*&mdB0?!LmMyME8fwTS zk(qoiP+K*2nD78?dJ#rjnH1oBBa%XYB(cagDlO~OWJQ$P3J7=vnT58HhGJO}X&xr5 zZKO2E&|h#uP@JbmXnCii@m|movXZ@Vdh=!jNfk1%sy9JE;S>_smcg$=a=l?9Sb%56t}F=yCsc_S(FoiT?eu`m5Ly9iZa=%<*jnK&M+1eyRHrZmsq5HI zQkF~R(*O!1(Rg7fl6(_XVLLI>Vywy}|XCVoJ;$x^d&DoCqbx!iVBp4i+A4|D=MY`rDbRKY1b}H#@1k?B0DKJRh z*n>qAO094koyN>KltxaYcc(1UKONhS76QNqSQ&U@1k%7VILQ07EI8Qv1_Zk%GhVhZ z#Cu$3q^s@7*r@j$v@AL#JBsX*3Hb>$J~Wz+c`wTvnTdehD$B02dT5E*F+1WLX;se| z1lAN#J(8(LLNv$5#ERr+14-!uaG$qev>j!}-2Qg|RO?)I+?MB%MC_;? zDZoo3v`}IqD*MaB7b5vdguqAb>hk1{9fA2H^0-K?f0oBa>~N~p4U25Gu&c?nt3}Hi zbYk^jupx|wTv$5oWHjA_ZbNQ78s+tE$6ND=6S26}gV00^k!N&)>W*#KiZa#%2MYDH zAckG=K$6Y^0aU2+IjNmKw!Xv~-+62Cf@%6LzB59oBHdZD{#6ILanL0g8bX zvK2XTSQp0|9Gk~>z|Tv)h{`3;tch%$h*tY({JSI!$3WaVW1-jE^>V${$py*l&5qc% zUFVywY{U+^4d^T7_G{Vom-pXiRoD&90XUE)ZV1fyVF0s5F*Phchj;i4VqLH>jc7@s zZ_BchBV!zkBY4NA5{mR<_Xx>pmT7WiP49GI(Oz0I7O&)9n+s9u?STW!^uY2 z+$EDd3k3xFNH6)Y$T}*EwjqUKL%_xqf^)mrUw)6VVsa=h(A%LBYUVZX!Hh+)|0BjqK6JPW#A#PnrMD1-Vmzd)nmu2ag9{5LE0;$ z1&w@U54I3$mfl2mfGW;TH?n7l%%eACC^tr{X@40#Tjf+;|#Q4woB1Is!&P-=xgb1)Dz zmz>a`qmkC^WaL!c+%Ybg%+~AKq6#_4Z~YXHeMK}Wg;r5OhtjR&G?4pXhIv0CQzrT+ zq?)6LOjQ@;Nh>0)zTnY3N?0jg7c@^Hu?GH$s8;gNS?CZ%(ggL)LE__7PDm`mgG@I} zkQ;t>sF%jfM$!#5l`-!mD0~vg%z(K9z3&C-*)}{z-6}(b- zB&E)(q?D~rH%O^fuzzp|F^u`2mMj%e;|}w<1vj9Lx-{OP$YZ=Xg@B(7#v6&TX*J1O zto*1qo?M!iZ;hx*t*BLFd@tnE+#DDvH|#L>7HqoVl$Ak@A*r#n{f7HTp%3sTp&_k;oN0MIPi>VfG`^c zqU<2-qak^Ec~0)tfPnkr@T)Xf&A zA?lq`J9@~Q4R7SjGPgF{ zF027^x#Pf-^v>b+Twi%U-;U!w&f)cq-d362zjz?8=Y`L!v7eeba>_y$q-PK2-|Nh0gJdBVWMpzCb5#n+1JpfDI&-veI&q{=gBc;6+ zp^WY(5sxzRP!O_uWFVo4z}q{RO+&`X9owHv+aIa<@t9fJn4HTs#ajztqlwxH^}-KA zqInHGdKdwURODj~hO2ze>eq|O#ew{Mcvmmn9^z6Gv1CeyiRNGYOXWboXsQ8Mz=bcM7OmjxwDTiH^I1D0q+d)VHoJt|Tc$XtZn{KZIk4O1E9 z`^yB&xv~w+us~qIIX}rqxSA+pYyqBtuvDi;!?!xP#VggcQg>>yX}rpAc4gYK;J6h3 zigeJ#C*}56nSq(6?GZfjb{>{xFi%ulG}HKrGwcYq;EUQARu|RaYLYYJKeLiqnI|kO za|y&$Yi1QA(nbtX;Cd1^%Ixt@FnMx9$~d9mf7)MQd0aTwd;JFDu1!@eOSix-EmAqe z%B+Um{A(C8gN9sagW8KoM#kb`R5BJe;aC;23h#d3}JE#QqT*LvT9 z+@IyR_cG)GEW7d~F;FUD?+?fsB$bF)XNgUNr4sdqLm48KDsK{$bhXr~y_uxNq!#ne zC9OtkHQrLvYNb}|T}WD7YH{yk(h^cjc$bn^C$&0nEot>qtM}HEW=qZHE1$F@HOI?S zo+~xiE0ES8wFbVlN%xalKktK-CwX#{UJq%KDL3WaM4IHvZS+1(nqi}_dU`SWrMxlq$$pZcrTHbmSahKFO$|JwI**5X+xzp)cXTz!=yIM z`x|M)r8eBF2|^nowGmz&X(OdJ(kgi5GC1>MpQkjE?*f2@M@rPMRQZ)^zk&-ZUnN|6 z`L&7$ae?8_t7y`$Y%^9-vZg|-t>YzKgGwA?R~5xHJ{>8^HFix&uC;4RGOk!kGH(2qWL!;^WL%4sWZZEr$@u)IB;zBV zlH6c7lw^DiQIeB(vLxg4hmt(N9#E18+5=1SAbU_r9&8UT$wTZRB{^-UOLCLlRFa3< zLrd~7dss;xZVxZXBkU0+d89qEDEBVFB1;xNfEDMCO3C+=8s&SYzkDA(K)yE*l<(O= z@_o!;`95}td>@C{$_Z;7N#I(vT!QG zB?~Qxlq{TvAj!g1#77oRM`&bW8loZ#XCNT5Fdeawg)n=~Ja}NxDS}tJ0@Q;nMU}DXdPPE`_%AG%2h}pCN^{>FH8vPoF7;TzZBS z)}?1kVSRd*6gH%1OQ9n@M+zTE&y~Vu>3LG_zgIaj5uy|DzDv^;XXKDrFZkA;K!2Ut1KOM)5RR6%eLgqYY zKQ}PtobIpnT)HOZOshn|&l#0SUCNnWiPWc@Gb<50<;SkMr#pdnyEL%@QDfCUW!3mO6zGz2VY z2w2b%uuzG(TcyoEvVR1dE0+F`$Yu?J%^CumH3T+m2yE66*sLM2Swmp6hQMYGfz28M zn>7SBS0e6}(&iuAKZeZ}(e1}%vxdNC4S~%X0-H4iHfsoM))3gNA+T9PV6%q6W(|SO z8UmX&WJJoD=lAv>yFHSH7wi|nLPbP>fmqNGu%IDeK|{cThJXbP0Sg)e7BmDbXb4!) z5U`*jU_nE`LM7r}C2ihm@6=a=Y8!t#i8@+|KuNyIbdWx6bWuo!i|8x4R8)cN^U9Hn`nw zaJ$>!cDKRpZiCz12DiHnZg(5p?l!pHZE(BW;C8qBA<6BF_KS#v73Z`UDGq7~;-H2g z4r&PEpoSn0Y6#+>h9C}V2;!iIAP#B>;-H2g4r&PEU?t*ilQ#dv{s~Ru0>A(K#Jxsl z{?z^{2&p)N{*(yO5D=mvAVfnzh=za=4FMq<0zxzdglGr|(GU=#As|FUKu9IxUMp>W z$$kk7>>NKIFM))LQ};_mf`)(u4FL%n0unR?Bxndo&=8QIAs|6RK!S#V1PuWR8UhkD z1aW_1h3Up>dCC2-By!_n$Ie4ka`#JHVA>c(rz>9`}7YzX~8UkK41iWYn zc+n8>q9Nc#L%@rMfENwH71Uxs3qMbf(95_Vk-YrE{snlcxHA0(@uDH%MMJ=ghJY6h z0WTT?UNi)}Xb5=G5b&ZQ;6+1lb$_nk=3k`2lvV~zRU+>7l7*M;m%&2CwfD=!f`)(v z4FL-p0v0p`ENBQ=&=9boAz(p6z=DQ=1q}fUOZ+UnOe|<+z(OVB{)c4Ym-a8yID(w# zZ{U~iM`h-(>|fD7e!f5RSMCim^VjyTQ;n7Pw0`a0DD(E%d-Su>9-NJq`WxD#pN;nD zXQMs(*=Ub(HrivHjrJI4qdmsiXpeC=+GCuJ_84cQJ;vE+k8w8IW1Nll7-yqB#@T3( zaW>jxMEgDN$0WCV?Y%m;d%^88Keu~zZujck?$x>7YjC^Q;C8RU?Ouc1y#}{?4Q}@u z-0n5F-D_~W*Wh-q!R=my+r0+2dkt>)y4xkU`|N!>xBI~Dg??`L>D=zqx!tF8yU*Zu zpTX@ux-+@Fq9cRteFoe6(zr8uL1iuddUc<{|2~8NeFp#g4F2~S{O>dP-)Hc@&)|Qb z!T&z@CdvPPd%w>Ae(>MwH*mks|9+kS{W|~q4gU8V{O>3JS5$Ol@W0>Sf4|}F`wh1D z8*J}4*xqljz29Jazrpr?gYEqW+xrc+_q#Vswh!0`bhZzG?Th>*9MIW5ptF5IXZwJ` z_5p+K0|vJT3~mn?+#WEvJz#Kqz~J_P!R-Nq+XDu-2Mlfx7~CE(xIN&0TylHRKB#kh z5Zqqu=k}n^?LnQ}gF3ed4Q>w_+#WQzJ!o)y(BSr@P;P#Ng?IDBPL+-7T+r#!@o!i6U_7Xq0hjnfb>)amJxjk%f zd)VOiu)*zNgWJOfw}%aG4;$PbHn=@(aC_L`_OQY2VT0Sl2DgU|ZV$V+Np4@UU(vaJ z1>COkbNhG!MYM9Nw1r}5Ra{(1PTbn2|QY4>Vc|2+Iv@}`QV`7K?YYwchX zD-rijY4h*w-@)e7{j>2qvROl5vxdNC4S~%X0-H4iHfsoM))3w1-x)Ul&anA+WV6-| zY_3GyyQIxW>?3-VJc1~>)=$C_JxU(YqvR1iN**zywP5hHFMNyExDmF?)C86Ghr=@BE69x)>65hIcwF(T;^Ba$9*@0R?(X1@lXt5~_O zkhnfXWik2Hhp{F#4rKPNNau-~A` zT<_0(!~ML>eA9lDGB@}$-*oShnSZkXMEC4E{F#4pzaTS@+D9>cWBqwYY5Fuo5Bo>c zm_DtH9`=tKVgINR_KzB2|ELl6j~XH4s1Y)bQpnK8gXyb8+rS!)M2S0e5grOn6eV|ti8hA{a7 z|HL2D!{jkNOdiw2m9y7w^F(XVKGs5ICBPbp-g5ohFC>}EolgEq@c+3ca$BYno z%m{(Uj1YLt2!Y4k`y{u=?c+MP$HDDoer}KJ+#c7tJ+5K_+v5he#|>_e z8{8f@xIJ!gd)(mmxWVmlgWKZ53HVc|-=9wC z{&Yh3rxUtAoiP0AgyByo41YRd_|pl)pH3M5bi(kb6NW#XF#PF+;ZG+Fe>!3K(+R_$ zP8j}l!u_)3_8t2j_*2Dqt=}Pk(h%LB-XVX|%D|sA1pcHU@Fxw?{plUUpWZS2=^ewL z-XVX|T82MWBJKmy=6CIPVROY-uiqt`HAJ`hU9wp#qwn$W8hiY^Y1pjQ(rtd%u=!oX z=64O7-zA&1mSJ-x;(kTi{Ac^mu({$(;eRHZH3WOShQMYG!8~gS=2=5vvxZ=g*ARV= z|FdE9pADP;Og3xnz~)NC{i?M2FZN$xbHx|x|3Wrv2yE66*sLM2Swmp6hQMYGfz29% zqqv6PD6S#;CH!B=W~~ftu0-4irOkh}{|cKcelqY^vROl5vxdNC4S~%X0-H4iHfsoM z))3gNA+T9PbesQ5Hfv>Ib0y+FByIki{WsWL@uP^pk7SBYY1%C5ZJ6CuvtT3 zvxdNC4S~%Xf=ez9fz28Mn=29bVQKSw_It3o;ww(?k7SBYY1%C5ZJ6CuvtT3 zvxdNC4S~%X0-H4iHfsoM))0JYsSSkMr#P>Hx-XPe(kh`@WbA^^MnHy#Nh%MA>+8yKuNFxYQk zV8Fn@fq{Vq0|O5R1||#)To@SGFfj0;W9}o0kpLJ81nADvMxQG%mQFccI@XkO@*3uT zLp5cgDGN+i{>+In?L5F3nDl=eoH6Z8z?gQ!moe>@FJs!tfH7^KWK6s9%a|5J83U8X z_`sx&x!+Xg2Vs6NK(|LWRWK9`xZhGmLMRd<_gh?1BE;@zU~oSJ18D{Z_cJiKpMk;s z3=HmPU~oSJgZmj6+|R&3nt_2d1H(rJI_5sASPFxsFtOzSy&6HZNDT}u85meHFtB7` zV9CJ1l7WFG0|QG229^vAEEyPBGBB{DWA1+{Mj~J&LX7x-sYVbnVqjpzz`%%sfe`}( zBL)UW3=E7I7#J}yFk)a}#K6Fafq@Ynb01TTM8Qau81es_i6COcz`%%sfe`}(BL)UW z3=E7I7#J}yFk)a}#K6Faf#JKAmsdmy*anu2a$rfv+{YD5RbZ)#Sn_{MlOSTrz`&A$ zfh7Y2O9lp(3=Aw87+5keuw-Ch$-uypfq@YN10x1Dv=3~giMdZG=BmM5H8D4#Vh*aA zIRi7cH5hMOz zViQEZWMBp(C{x2KG0pCmJ;{r;3O?H8zw!Ce0(J7f6#(|>E5G3|G#jA_3_CCvRVH46#MLc*Md z1kFOBVipqSEF{cXNSL#b=wlXu8M6S)m<3?QEC4fR0hlohz>HY{X3PRGV-|oJvjEJP z1z^T305fI*m@x~9fcuP^g*wba9Yu%pDk!hx=wM)o4hDwkU|@(228QThV2BO|hUj2m zhzZNrqlgVA^^0#{ z#?Au_O!|K=%yo^6Zm<25iWEdv8128N|&U|3oPhNWd-SXu^#rDb4PS_X!tWnf^$z`%%(x!C&L@;K*STFu^PEpA=`80CC7tcu zsigVNT}oQu+^wW@oKGofq4Q}aEpk4iq{Yr>m2|H2IVCM|KCh(noO_gXzVihoEp_fy z(lY0ZN?PvRr=$y<`;~N|^Ccy%aK5ahR_6gFUF3X4Nf$d`Rnki5K_y+{Jfx&m&cjN& z)cKl{Ry$u;Qk(OLlGZriP|{lGn@VbTzNMs`^Qe;6Isd7o_0D5T+Tc8{qz>l^C4Ino zQc0INPbsO>`L>caI!`O9%lR)Q<(+4gw8{C7k}h|iRg&j?S4jouzm?SOd{0VNp%Z@$ z?7c(-0!2e0X^+Zpq(2TuO3FT|tTfu0veMrkT~-Fz&1Gevoh>Va>@j6!usyb{46(eC#%#izOUX+EvN zp6b*3*{A!oq&>~2rR+0&TBAMPr}ekb^l1a^89r^GJ=3QRvS<0U!S-yQHpHIe)6(`_ zpVnm0^JzovvwYex`)r>!+@9~#M%W8{+DQ8xpEk-~=+jQJ7x}b|z1XLXw$Jrx&Gr(X zmbK6GX=Cj3ecD)isZSecFY{^R?d3jgf_;Hcn`mF?(@wTm__RrOt52J3U*ywHu`l*% zQ|y&K?Ns{`pVnfp@@c2pm-@7+_G+JYy4~i}rrB$J+8Op*pEliY_i1O^IiEJeUgy(h z+UtGVEPI1bn{9Xav^n+%eA-<5GM_fj?(}JA*&BV@*>;ytn{VfR+5&r%PdmrH+@~$H zJ)gG7F8H*?c6V9pT}XegRvkk6A-43xd8YEG*@X2j;$rxVvj{;+6iWt@kpli+b|jyd zVJI0$RW}y!r?Y)Xqa8|VP=6B|U_t{;XpjjFwnP23=7*RNqLxt%e`Pf^K&zUr=>x0n z1B>_3UZM}It`Drf56tcZbNayCKClKmq?4ZR*9Vp~*-NMTXb&@H@Y2VWrTdt(G$zd$ z%OE_qP3L*A-Cv)!^pHNvrTZw?)CV@y?mtlPW0>7&^gG;cH2NLU2R71<7=u&~C=i+Zp7cK{s$Df;~{XZ2* zc_*1*qqo!q`+FZU!2#Y*6CCJuhm4K}d4Dv)!JZQ~N)GYnnP9rw^ZGzz-aUPwHQvEK z&|1%m7@ei#-k?6vgg2oNw9cE;2U_nf>jSmD_C8R@>+S<}z3clx8@#*vK>K+Q^noV5 zr}{us-V1%8jo$t~(Ei?=eV_w8JcUm8ne;%fz7KSehsOyTWe0oH`ap+x3;RIR-pW4E zCa<#(bf|Y#ALuY|dmrd8nHqe1N1v-G^T{?;yJ_gc03er9f(moQ>J{HnG8q$6q(!PG1eDYAAJj^E#FUzR{9;y(@Um@qJ zG0=+#v*7U;c)o*+b$lxxD2V5I$Y<$(5M}Tz-SC3iDm)Z4iy~pX@R$ohk0c=-4{H&4 zu!F#XMLdevynqmRFcUwT5RYFFgDoNOj05o{ypG_N4GOUludm~E9IxRaA(r5^9Iwmq zdLB=GD!%T5{y1L0$18@8r{lE|ukYgZ6TJS0*XW24r{R^u>pHxCj+cWra(K0T4+$O# zOpiI-f+lKO9s>|0g!S`U?xj+nrQ|MElr!?Tf}m0Uf?F%HKdEP5q_P`jN7RE7d#(n# zr5;(!Y{gjex1bF<7FF`RmWIk!^0%P~o_m64LQZ2dR6#j9UmvCB^Peyp71^m3b$RH0 z*1glL+j1?~Z0SWpHTsv0QzDO~+&i)M9v)E>@ENB{p4W2fztsw!2i#{Xf5MdaJ(j+R zzOs_&(pVl;t^8}#rL|I;uH4^kr7vDAA1S3KhW%Sjg!*dY02YTfpMF27oSoME?Zzy( zeD>dI;iA4;xcJ{`;o`np=>PAukm;d$?Zc9n5Ku}6mjs@ToUgoE{P+L;(q`c;DBMy& z!cjpnESK~Bp!B?!3yXQm%S!&Jf=}j4Tnta#@kJonz-N$?xsJ2#Vs=FjRG?&zug*uf z&OU_Ia;%cspDH)`OfkEnNh+W<$#rCtH}+LWEB@(n7kI#p9Kiq?B1*PbbV(Jc4ZRRg zha5JyDTfd(wy9?81U3_@t(q(iCVv;2t(cYbT7LX*l>I!)mf1V6<>UWG-L8dn(Y4%m{=icH*p$wE!-tTSawY-H5mZ~b3@`+q}cu&LE&N_7Eb!Yk) zsVaM3%VVmtk3j$Q_!=uspKoSpi1|AVsi(<6SiU#={t&@Gok#4(FH#iEhQi1-iRk4`STG`@C;XxU5UrS`pmniM4n}sMP~DLQZYwKd2a<>J!R;l%&f@!of3! zV_q_I0~JRBjiP%v)QdkWk ze7_Ela)OSfMsXD_9Vd{Pi(D6vbSid-HJor8TD}dAvPnHYEEOb0hO0Ks$xgdGH*%3Ths?IlE z*@zu-8_-wE?bovFFYmw4s<0cH1NGot+z^=Y!$2L3;pg#v4)5?8Jex3B0AZ2dR`hLI zR&r#FpR*Ui`-Olay(=h#r&*@Sku|;BfJJ++p&VYxy-T?erF;)SF2~aB;Q^}y)!ZeM zJPQT18tEk;7I>n!Y`B2_6o#k#U4*=58f#Ge9%GI2SbJ!cd2BopJiV1XPi~+Q`BZ1x zE{iaYFtvgQif1ZPW6GG5Ej!l8o>j70 zdK1|Js<_HqE%WFN8On`u-In$jV}~8tL(Yle(VK|ifx}huIpnuuy^Z@`Y9g!ifB>_t)c*;q+7{p$bTG^_)MATpO9*f z9x_#3kSDE(wEBWa^C)@*GOY`mr;u19gsArUCu&4MBu!8cb}v|4;#5vZEW(3KH%yQl zes-vr#>__24f!)MIPWAV{N&5b45;kfLLGSMS(^8vznJWg8ZNcQj~~Tan?esWrrz^B zl2T_?Qp#4R8>G}K*gv>~7{>fhOO^_#aff-_f*a6AT^est zALS=na{U@nm0D4&#)v1;lbanFC^u|8p+1RCH=MFE=b{Bjjiv23+&>C^06*{&0&kr0 ztf-c2s0RB0PHprI)(gN0RyIFOJOO|`-8NR_Us zQYKH`Y+)Lr-l-HqPNOlX{avnMJP?ukU7@dH|2m^M*Xvup7<%PO?xhmG8a}aSHC3jS z>H}4$$qD^^AeWT(ugF%bBB@rN-W+fRH#&ysmh9xZi3^co$$p0>{8?zaw?;Fgzt!mRP!w3ud_W>U}D)}O&%*v#Y|Dscr=p+}*+=65qmC6b(+;b}cmae{^>P}0RYc$@} zf~VWNc=}{A)j*dEICs{ik|i;74z+k2wMcc*BE9u|f?6a=ULN7Om$-Kl%i~sH%*Eb9 zOJyu#Ecs}US`~bvB$vXWTh{r!ez?ljB`kUcm{Q%BK z+um$=BVU%ewb^!I4Uo$n2cD#dTgEt3*H@m;`9b$U8@;VEyMOUOUe61kS7SdlbF{q_ zaH$l@oJ~`M@nnTvOL4&xLou)cGA3a`2oQKSE$E5$tbr(lB(--YR_72ZAFPSa9f8VW zyb$E+LCk{miFjc%7obgGdc<11HsRHa*Nu4Hi5GlEd@tTGg-JxHC*F|`>i>EO6W*}$U6o;7i*!(Dk7_Rn7pv5+`N2$`Mdnj>5?F zFopb)lz~b)L`qsIKO?0{DYz&TX;&#vkgiat|rBO2P6G>3&MV7BA9qsbsH8 zCzRx+>y@-2U8kf~Xhvl^K;Dp`=0SkxFuu zY1wKu5PIJBr?6>pgigv>oRT3oDTAka%)MxS>|ZH{C!)8(XGC)l>jj$w|N9p!@)$yL z3}HD2JRW{EHz%k)gr)zT_N+u$4U^AebJ1#At~(wBpV6%zx$&$<|9l+8N+i>8rHA8^ zOUETr>6mXDhGltqiP{;Q#9X;s7Xx*d4mYj9a-FD>Y=8Ce8VP~znh@u{l%Wp0?vul z0-{>T3in=4Z*Urq-^0BHevkBa<6Sgg?W?z$azedV&|A3ogPiZl?^X3~C9q7+7S3$O zRqqnc!c3MkucWdec^TFWKcao2Ki-?9KXEo+tMM5iCVhk~?M20+rI--16xXOFOFzYy z%J#77)80epQ7Tdw$XtZn{HKw`XaQ57I1c#B1k1UyjZw%SMs47OH9D`>M6o9q;DFf1 z>eOiX))=>VrJ7diPE9tASJ}<3yp8mvJo@=2KH1wx2Ih&5Q{ah@e_>e$^K=bR!Q&^+ zhST`y%K^9@Yw_hMSCgC({~4TKG5_;~Wo58Z@tJaF6(iEd)6qshwozt}cY?{26H%D#hahIAy#HJe{tq(ERLR3F{|E#D@1)D zL?{h28w`d3;Buda6%6qOAo~gN9;7o79Xa4zvV?3a59f+0hnMpM!exJa;*w0|*P&Df z(Mz3#2I5@vJj#ur_Qcg6MThy%AvgbdByOk$;}K3Ma}QMj5&17r-o2C;&Yt6hGhc*Q zgKL)jeS}4_DJPP-A7U-0oIX2?(Ot>NC;|A(R3d6e$L_^l-^hE(DZabD0!=+o%zps+ z;rEiKROE*;I5lzosh#h?|2~R@-b+sM72&b-MP(p^11)yL%w?hu!-qUxto&F}cEzW^ zCS~FhvnxhQAGjH|kHKdVI5>pzUqxpr_7}Rg!#$zJa5c*D9>oVi>fYJN9vs@~t`NOh zSKolN_f{l@IciOP97=vZ6r9(&SvrD_iq>YUt)5$uSGH}ysptsaE45ZAVPK22g@O|UN^5{r|l4Zazw zYSv`Wg|$?%Hakv4-({R#a8XPsHi&Hew5vksk(%D%2Hr2xpySFRm&9(26K!79{CiMqWjNT{xJ6`Sx#=M znQx+7X_2=B!Gn#qtgFbz%(p0yH|rkKIm&m@X2%SucFNVTZw19J^pll7M*MlZ&?tX9 z2{Vtgavc1S88t2BjK#6={+@Xh-BFCA{Nc#ue{!Ej&E=>`V{t^$kpP0$2-706SsVl^ zt4^vZwUSj73Rzh7E3%-YR7Pd-h$Rhjq*)OKadfW2!BXJLmDW$CZDX<5R*u?I2Mmm{ zURdQeQ#IM~eb|vIQBhGel&qoN590`au1 zR+ZS)zo>i=;b1^fi6CcSQHenrR8$gB1{W0v%8;Uxgo3Xgt6m3?7AtB)NUJGo!$_+w zYNJSt7qw>65=CtsX>~>IWYX%3+7#04qBfN@r>IRQ%`IxPNNXr+^GNGg)E1Cd;%YHz zC9=*Zt;E&^q!sDfMxO6o1c-nBu#MJ;ypL*Qjwi}Bio;NZj^)K=#p@A!i8z_^8)8=e zJD8%{sxggK-qmP|x0SJ0wmL}1cdo_ZlFtYqM!iYgZgHpP4}{k7jaB5)Wc#=3aMr~! zUvAZrD2Lk>F*^CvzRXn*%9Fo;XO;~l^Uw0QBJw~}70=dKDqhRak>p-IT8vmE_v+^I zQIXGO-^XYs(^v}+!;Woqol|&-EaJm0K2`fJjkfSrKsAwMH2>eEChM-9-q`*{cmO8AGvf!OtVXYEYx#VN(G#Fgu%XZD%&(!s_=jNxE*yMsb#)z-KaZS5 zHxa1!*?7@fx*soinZTwaz%GwzAl~7BrH>41Ak*-uUP!%@dGsQkW=C2S!M8%L4MfDl zf!mNi%IQx7--R5s{uqdf6c&U46VUNATjYuoLEgHuH|Ww zb0fX3UNqoyp)lr){;S6sWeT()BlTh$YXfnYlJd@BtqJ8xyO_0MxEoGdCu<{cUy-yA zu{H|9l(g-vjmEV)X?L?WRy4DAKWmfVdzAMGYg2HFChcj~T5zT!?RnOw;^!Zv{erb= z;uO{nLxb0d7S>+lycrlhm3&*g2W#fS!%3UQ+9l#b*3MyVjabRr#jLf9OIYhDqpS^twnf|y&Z*5&oOd@kzXqGk zc-HR08mGL|l=c8?)1k%0J>sjZErgbU_8@C(pgH(f$iw2pXeEF!Mc)zm8f&ZJePMhs z_%&=#hXZ4f)>#w81>0J!^O3INw4Kw-kVb@Obs)Xc+KBWz>k6c|SRX=qhxJjU_gl9j zeb~Ak>F=x^NME;}NBRcif3seIJTdqZ(o=(bk( z{CA8T<@7I{MnhD_2~}g2Obj+79TK9}GK`N2QSXyNX9F+FRDNpcq7pJAM5CR{TNj7?ZVR zJ3sZ+l{{2D3rO0N&SJ+y=Zj7k5JbXLE56%JelC)cd5+50H)tNmC(m!!YfBPr6 z%=<{Eh^olG;1rPz{01dgN2uS9$mmc~Os+Yv(4J@QdhspPv&0Kh<5ny&W~jiw>&27Soyc3L zw4K(27|XRvd)ayf+Q*c3zj$0!iQAQS*m?#rYuhNdF(#VxG8uC&jwwt)^t80Uk*2T^hxF5^jigtdp2 z_9S|Ui)WSg9n?#RgGzfo_!nsP6J))g2ZPx0Gg4zFY;kT$iwA76t)#gDN4!|l1_qLX zzJ)@)H-<(A28yjxLn{-Z-B!|04-6I$mb96HA>zj+ZDF8E>?>*K2ZoBbOWLZya8ZTJ zDfECg*9Jz2VI}Rdz$kHgN%QbQ#qyFi8M}FJN!uQ17T=PZSRXnayTaa5-W`Flq5&6P zvWG7RCW*-%bXey40BY>Ee|WZU)-WJ7xfm1$CXBFY=L-MYHZ&EvE?q=%9GY&Yk_F| zg4A|e>#W6MvC>|)E`xTV((cC|y+o{5+F@%e_U(nZ?545M8e1yfQ5vnWW#Ua-TvHyc zv1Q_>uSkv7*m7}~(rAq>7ge~}qms17mWwBpMr&-jnEas3doZ}pS}qoTU22c8wpD4g z#+HliN~1M)fp|!1w8kzFdzD6O>;iGpH@OvNqE##|Y4=&J;;NG71}+jWl(er}tHg+J z$=(}7k6LTRW~rf-iGj7^=92cLl@nhsY2UHdiRVh%kE{*iS0(L5oOzCxv{ix2MCj4t z$o5*DVn|8*AFE58TGD=RZ4&2|w8_E~TT9yZfG55#HLS5Gt#0wlQeJg%v#9^iVh>*q z^oR*1ZB^iEu}ErIV*`R85-Uo1PX)G#Zk5*<8Wp@&+^w`{(ZjW3ht%NZlY<`?zbk1| zgV%|w$GAV_%?N%(OqCilf4yj}(7ckiB6z)cKx$ZHZNVGGPNmTryHWg7X|%>ZCSI2s zud$DbNw|RuU*aCNi_=TmQJj3~S25&gw8m}{4=Ih-*v;aQ(rAs{ECxLxOVS$qxM)`z zt+89hcBRo8yG=Z*w9~_0@HX)X?#>Evhd4ic6|@$*ScbMH{E^@%L}y96Ie3S7q@>*$ zyi=Tx8?ePu-z_Gwc5CB9@sXjs#q5f_&XV@U;N9Y(lJ?agZfE0uF4^~q@Hd0^h;K=a znYc$huksp0ly?w!FlB#7ahm_D)Wi$n9luS4Jq^hSU<*BMpihkcPyqjNcxqueZdf4Eghn$n<`eA3!Sq1;iVWEfI-Q z%XOUgLu!dM(xAYf2|@dl{{bFWwa(;PbGhWXrPLA^uuOlVARs8Ugv|9LZN6N;EK9EE zTKK~vXu;#On-MA*bdkKj9xTGv2S^WwlU+44*q?UMw<^SgN|IgR|Tl4iC&)N$-kH173 z6!>fszCoT45C<7Q!m?RLM?z}N%9Z=Cq;GP|Z*ebD{zpha^qp&oceQqc3c*Datf15? zjjdJCwOkw0qqtW^>E)bm<@6d(Z{YM+PVeUQ3!Huh>GQ#Fu>2&a-{tg&NXLbKg>+Tm z5Yoxw2-0_ge`5JvPODYw#Wsfmf!kv}NWUJtE;JPQjiLU5wDtKAZfe&&78(utsF=v< zWUe($>2CK6u8Wma zaJR~(6GpqZw`NDMHSl;1c)<5gPKe6`KdG4?t`<^$Exar|Sy0J^oL_wZG2Y!d~pC;a_`Dys_0G%$bV~a?B9VOqb`BQj1w{ttU z`2{Zjg}_}kCvbit+gFO#+8L3r1Rkqh9QllRrnU>|_iKA1-wixd`yt>bYHx_#$M}7W zKZK9wpN`-N7=J0U5~G?Cd74}9W*&BM`U1Eb7yTKh%NY3ybKA|x4o*9mhaFtE7KpHF zc|5gZNPHD;{gLgpT=#!eO8i_NI4SN$e-)S#?~M`;a!hZt)uZ35{$Ed!@eYs=lqqe{ww>;v;g_c9L&hH z@G-`x1;|^*1jybIoYtb>mqTL$y6%lPR7<_JH2z#KJj z-EJPkRcy<3oOY{}THY?LmOY9u#9v6<9>~`mPJ9Mqn-(6#$bF1F#7F~={81kH(>(G= zdCU)S`Wa4F@@$S^iw1Gp!0Dd?PsKOa4MJ<%>vo`p8Ic`aK45(>{%BpbC0E4HA^(Xz zWDt*y=K9xl^Tk{7gLSsGBlK$B3v5@wdM|#g?()F9HSYtVnSFunx;zj`oDhR}zDDrO z4wCcBX@4u3m|WlA8k9J#zJcd@5T_$JtrE3#4T(F~7a?uHefcWUDB6XC-`_1qI+Al6 z0#v3E*K}3rhsrbssLUC_9WfW_Xz`NxQfQoT#q#=b_ZlVo_Rr)qqz=i%>E za?4VbZ7l6>>&~en=eKpOFUqoRvFi)kIydLUf`uK0?$r~;{H{%#yX6P-VqV_cxVf`U zeBivzIdALI4Y^#mSh~r>r}hPwXXiRQ#oR4G3iPSHDA_n~a~BW1AeQCuM*`2!e{fC* z18v?`e+zx11s`1eYJiZR>x*;Od?2^B8+W(V=lrwtot*%P$#G}px^iB}TA?f{x3c== zV)62v6{SUOU2W?zSFnM++?-3KQejc7y-*x$aB# zW(g~nD){6gwm9FF6H7OAtOH9qctB3fT)Q^62|V-s5`o^vj;^*&%vQ-ofVQpa%!xU< zb#3^5g!GGoP+y(^yk_%yvCL~jYtj*x&ufr>JFYKV9qAwO0f}3sL2nPqKM7f@3 zcamB2yViDYE_7T$29o#i%2Z^_eiyfGq+;zD(R|G>sc>P|RxUBKy}06uT{v=AZgHNL z6|FM3d9GdX*IwWxGI)TiqPRk|7M(_ZDW#~*@9Gw4nB8+ezKA0@!ARGOC7bb+Fpxvz zUf;bz&O61gBAKWsePQ+nvAGM$(#>lM{FN6BM0G<0xFY9|3qBb>(AK$D%t0VphHv4p zMl6cuo7#a<1d;KlEFoIJaXN*>&u%Le!w@*&`m^)+N{?zl7UC3Kh-F(h<;1LfUNt%= zk8ca*R0kV6I@>Y%7&sLmH-jiki1~%Zn>TXsfU_e|V@Xo5n_rmMu?3{hFPxv-m`5y~ z*|}*$+ZyEXx>6v^vY-$40c6|!c3FoTh5}kJhRqwnIUE!=OYe|m5(S{1-mc*2+`XZr zuvBc_ivJ57)Ul3o9P~G|VG28VjbO>HE$%DDRXUs2TJbwk@|#fO@K^LVb#&&ur8)14 z4tyU=%-P!2wy|UF%x=u=n$0k??TUOyJC+wYB}Lc{3hxC(hD+hjUbpagGg((!ES<&0 z!jM`a1S-+vXwXqwCIz`fIx!ngRbV^})P%S((Zr_qlaypAs_*h1|w9om-c6ba&>;1&i>U zTw$%(v5D5VnF;S)*Rg)H$6Hcg*&8>tb!{~>)ZSrc%+7Dx>UFH&&~0X618L7~Z1Wpa z9HZL3%5{oXDi1@*$>B6qaxi$@1@IxP#d4LiHg~j_wPMSPQZr*7Jl4om-OlM~Ti=y0 zba$+UFVp6?p0>ww8xq4b;Sk5W68S$T@=l z!UHHui%Ib510k)Qa>|X#zH=Tn`sFwiR%RAgVySMq-ubz8IYg_qxw)5brrlo+iUQo( zZC&kf=Cg9$q|L)42ozEzkwbk+DGhkzCTvz+-9!S8Z8(4Cy;)cQg-Wut3@i%-1U|-a z*qz^nh}6-3E{?j)+uSX5T%prnSyDY>`?_4r?V`ZS$CdeI8K(-~1>n!!h<^oqpR-t! zPEs&Ul_d?C9Kx5hb$B?+@mSei}F|GcMOs z2GOB+^`sIarcK`@i%*hSlgkJ`sBYUt-)j|1a=FXIqK>s*zK~znJ#O|=jB%3zj8n5e zi(;cE)LXIdqRMrpGOx1@UrNO|ufP?Fn2jSlCQ-&HA^Vu=t;fW4;XH-&tO>~mFc0d` z(uF5Pl@6SX5WjMs-&Z$+{h8fzYG6TuP7-vS*n%x~rsuV775PnTOxY=?`Q$cvIH0Xb9{$UYP{3iFPvdH5U*>J)O<8UGIUMh4`=@u>^gBDx z_2zEegki8VXe}~^({^4u(6apUP4Ii-wSXqXg&t-eF4ER+Tms@`T>Q3k@yen=7oVpr zz#ZNKuDQGLUCJf+9667jE{FGS;5p=s6X)}LUTg-6T@RS3nE-q;UMJ%>vU5>q9bF7Z zb7-Xb(hNI`B?;A~+R4!Jdn) zl*Y1_$I^x0$si{@hSEAp*P~uH-tpbhy2bdj-^;|=xT~^QoQ3*?kvt#hd@&PuW5vMn z_yyyce2*c9_p5M6VKgjg#`ju9s;@lY(Qzm-4)5bp8hUW72n1Kbe$rK4*ncj*p&`aD z#8|h$hPAM=6XW`a7UBn}O}H!71^dauJgn(L-7BHBBL`;$wAGD1aNi}~h7!a)aVl!c z?TQqY+Qe-Xz-tFHiTUZ*7cPcg!TfiWW@IVayd3jN^G59pm)Kf_Z=YNW&KAKRaHprP zjGc@*7x6CC*oZl$aftX*FnoTA_cOo|z7iG0m#c#K5>;>-Uem#!oF5TvhE6=r#cvko z!T!a#Cr0g`3rWP~sL4Mr$DcK$5#c0+QO!e%6&TeVl%9*Z#B5fVq?)Ce_qq6Q8QL9+ z*XekTLHifL1{&E+F$*=&W8EC2vw2nh{=`lteyNy%{L_%1vEBvIp3`|stA<~Ey9>P(a)H@OOf-pDD*Gg&6rxeBgHIQ9>uOCXOXqqp`w z%A#TAQPN1R!dT^)Cqeta88dnwUhcWnm&efyIg)H7J`n9*XoRg9;m3pOR@r4Wweqp5b{0$Sf^|HG}2S$vB{9N5`hl5 z&+fVK0LFZF^TPM(ytsY(P_3^sG<~Gj$HlnOt#dnq$^@|))fKl<+Ah~46s|$o&r_g` zx8r?tal4Hduw8h(siIU(0Y5^>;XiC4!I^l?!fQ5ObMV6U6{KwwxA%kd@mhe_Id~yR z2C)SM5uAhP;DO~#~R_`*E~EM612RA5c$)zQyB@%p^4{OpIz zUYl~^m7?nLD_367fAYZ_BK@4|fGeu{IdQAX+4j+*@R_1;PcY)xc=Zc5i2&}(P-wZMNzV>g$^#uyO+0bznSf ziZtO%&Q(=4Xb%8!h~Cg#6%B22(NMGyK*yXWIIRk27@;)5a#a<~OE~qi>NFa&E0AL5 zk&l$@oDo2E3mrz#;7DgM#?)OTaCK2wRunpm!pan;ZQJ(x;)`bPssJ<^*|R%~$-@;A{KolT|b*hH-@WRTl*Rug9{8Cc2euXI)e=~PU2 zO5%$ukDrKFLV^n~l$3V@brv$^KCV|%kDH1kT#cSkhf`*GHM0x^EU#vkS1XnmN|v_} zr&k3MWZHdUw6*QNV8k9>C5QrAY9dGs;GaTn!3TSsb&Ip@7MgoxDYrzAsK4Ec#A!U$ z)B>E@B2Tj*#KEg%JP?RSQ6i3M1Q~-P)buThC^dXbf~Gg1Qj47ntByNQ;FCqPnZT0UG;fh-15BMnFtbcL&NBNXu|NRv3p1^L*EO+!n(=&YE@^>eOxy3fBPq*qQ4bv&#FWhAy?giW-Mhbc_ns*o(+X>o^gc6G7&LjwDi={v zqf18{7Kxp+avBm&t5#ZD>>3_c;R5D^jXoVh;b_Y?^|$i5bz%1gsooLB%WjG0C8u%B&(k zm$)Domuzp+K&q?nW%e##)hJPoy0}6>hLdyUx(w(9i+wz_! zygw2%FdH@f2Hf${=8p_r|0KA%Ltc-zqtj{o6 zr<`VFKs}R==&F}||aX&|ysA0YXK?rJ&ETP^U2%|Vch1rf*^bY=^52Zy?Yzic!^&7i5h zvhbI8F8r(M^v>11ykmI=N_%-mWZRlt-hC;iJp82?`bgTKj4oN1f@PNro>0_9i28Dg zY+6k&vSlu^kS6Zy);bnVsMl1|EbkAo_Q%8%B(fz{w--J%>Aiq}y{$0)ix|WwVB+Z> zQ|}PQhVbqT>cocX8$zJG2RXKa2d2uLT8|#JF34uWGt{9wGSZ`W;lThk=vM5cpah%HARCKkw}QUrp0wlbSdCU@6m)NnOl7_GdMua2HPnXlG{3!|q_ zjg2iV)baimSX_qWdudPsLWbhsx)Ej4XvT2>$I^7Ttzu|_8Xkz z(DxtjkOAyDUTpsSnWB6!Gc_~vusC=5^W6DQH)~&h_2k|}5;*hY4z0$n(^`SWZMDA% zHzb%-ovD?1VZC#m^NXt&)~e18x+OZzmDZ~3%)2xqI->gieWiNC5te8f?{C(sWaG8C z#t!Uef90=?6{u(?#c>UF<*r&zQ>v7ZI6D+Fi9Yr{% zC|)Pu>~#tb`*(+5-v!S69&a6&l<_8DTega~PqY&U-&U31WU>HmYOqQvv&sytR`$60UgM2TVT7KwiTD}r^9hXm}eGwXmf4j4&mUQ_FMVKGUC8zt!Q;@A*B6s8uul{ z75v|L+d@nW9bp&XrL4k+22Tuu{T}4eguR!XUBf{$4w+$T+X=Jr6A?B(!zg=5!DNSb z?y&4Dem)*(v+O`VjQukYCxmRI&ANtTZ`z65TyN)_b)-x>ad%2)r(DKFo->dgEt0f& zHiSj{-|{{C`rG2<`clJ&uY-7bSQfK%)`suQ3VqlnvLBYt<;Su%e8HA$6*_EAWN+2o z?Bu(Nc(LL;W7#0E>`r9YTFc`uJg=83ZXPai(k&xDzp^x5ahLjU4rT47%JSj@yqbe` zNt6aswjC0?Sc78)TpKz#;>wY=>ESk!y?pCT6YeF_BfP)TY-R@}h1J#?U0fGd_Q=n0 zR^&t3Zhd|Y?g+R1I3O)}Sb)!Z?fur`O?XdTtGj!oIucN|akc4SN}XS$tIwtS&3eOb z@IH~PxNr%Ab4V*|uPxGf*@YMv;IdTrDML|Wyz`DD_%EICn#r_mjtbl?Q6+0>> z8jYGn6OD~ni7jgEqA}4ZQ4-A;qTla-@7#Iw-p;@8!fi@2y;&@VxIVZ2$Y;Ab~b} zkA83KciY4Ns02oD&Utj#oSGH+e^f00Gu3YK%+T0qHGf;5fU(|p-^tbIB>1yE{8vjL zs{Qxf-v0m9Z62=NysG17olsIyws6*>vhvD`S%nqz3d$Gxr))%J@q$IA1(n5v3M;(9 z73GD4k1r`Lt{7an=d7xV;_`}Feemsbv2R9dxQL2>!4qO!uO1;qzpEs|eU zUbcwqONvRUxT378ys)@pP*HJ3$=rp-<;t@)EoiCYx4}QP2dC0?$#eC9 znnKN?IMfbm0^LKrexJuMR_Ww{t-z1LHsFyY+5%K)3~hy!#>1RfMwdg)Acg%_4pR~S zyF!%xtMd!{e;upV>GUpvlmI&_U1?Xex9tbO!9nQ8=$q& zjnGZd&Co5-tO zehPXT+5r6;dIowHdJcLXdI5S7+6esydI@?JdIfqJdJXz5^g8qg^d|H>=q>1N=pE=? z=soCt=mY3OXcN>M+6~$sGE1PL+W+`hdk^{LiVkn=wbOOiPWydZsoD1MA0UB-YXAE7 z|BKpY?*BJ6{`czt|6Th2{^-^Ks43J8Y7Vu4+Cv?nj?fNJ7pN<=3)BZ12<;9Hf(Ank z)&A-I|Nf+X05l1j3>^p^1WkdaLI*>KK+~Y@egD6v@Bb09Z>aW9@Bg>={RsCzAT(6_ zZ}0#A0~$M`i0Uie%cU=%pB>F_&4q;u=h3;0Ze-_QGdZpeh5Mr%t|94QUfhJ=J3>1_ zouJOp&QM>dAJh_R1+|9SK;58Sp**NN)C1}X^@6sChLHfnFRvlif3Cl??R5|5cKh+B zik*Kp_}#XzH%#far}BMEprQPK*Y{?dw*J4Sxr}^MJ4kby^tp_izYHO6C^QTj4vm0DLVG}? zpwZA6XisP_Xm4mAXe_iZG!EJi8V}_|6QGIEfAjq1OzL+Qlz$Z;mZTh-pZPqN$pgdaN+#ddU5@@LQ?{M(j@Ap`-a;MjS@yVChd^%^U#+BP@ z|85)@_5*G`m%VpQ=Z4bHixy(-)N&7Zg>@D=w~_P*PY~Qns+5{1n~Kp==uD&XG!GQ<2Q3C?%T)t;}I%C#P1T zLF-UncJlXEc8RA%a3!9& z7(=P3_&&;9oSt;Ul{&w;w6wuxT$oI>;Yu2EcMV?PkdO1zZn$#qUsk@Ls;wJOWx6VSa3(XBFq7-`dX^kM=e~fd_g0wUlS>1rwSB z{UB7rv*t2upWd{xMLIXg%gz1uzJGk`zN227{BZAPjedUD{d07FDl2qa>r?uADI)6_eo=G1{OP@h z_8LNfPw~noEq;XJhx+ljko5Q=idXrqOlnidR5^ahwOYfx%+w`j?)%`-thK0I3J13E z5-Qt4pzaNs0_Lz2m&?wY(4`@nH&pvat^Xh4m*YrK`*@#!@ol09IFsX^;8CFNK{*E0 z8tp7Fm)*j~W+hkqhH?J22Rl*f#^&DGrtq0j3D^nBgS6(W`%30Oi=h?J_E0+sG*tT+ zuc-X2O@|xjzjw~8Rwpfgxu>&#x}&W2KN_As?dxyL7R%KpCs zYh(W!Zz;(B*Fg_M8gP69X^_`R&To6Dl>{29{nOX~b7Kok-|Y0(*{1qh1+}*e^k?xq zoNew`R5Z1qvTz=ewHpK2{?X;r-yZ|4^>sk^mAJsZU;G1?PyRg9_irS!6khSUIM=s# z%+U9%Z%>OieY^Vp9sRLGGM+VWDpdPEKUH>a?3Ala31Qi>j~Q>lAjDL+Y9Y0%t=!s} z_Gzg0PoMv(oZQP3IdrP zUb}{B|MdA^PL7x8OPO=Q5ny95hdYs*F?wyr-CWJExMqxATT!!C+|{MuU&1#7vc4b| z=sC7+?jr`gCZr=>ZwhLEuo>7LYz{Jx@LGVo%X649<1S!cFy>X-*2ZJT-Z^AcnM}Ji z*DCEcpyb^a>cW2P{ z(Vdx|EB(}RPcZrsGxssTo>J~ET&uLZf?7@61(fW&fl8bAd(h7gAE4`jWd1eJG2{+868$_5-aRj50c~g>y|I*T<{;L%3i9Gz+SPE{4`Z4?)jC zo1m>wM{K<>G!B{xZ4b4R0HULBir%kRTWAdFo-fdxK75a6TaM*K=~gw@4W2uQy3bQK z)fLjS2$}Bf>`nY`kZewRtiIXZBQ%iTyF-H@jUA;|>T`!d!=Vw-_WOSt=Gnz%$npZ{ zLg*ssV(1d+QfN7}0$K@O23-!Vf>uLUKv(}Iv=_P%0+2K(#P@ipX!%g|M3WglmF>NoI=>gmpAtkO*mHts{c3% zls`Thl+G>&bJX*qUDh9W41DDr;$QXC)_g`mQxW-o1()`ze%hz`X`k+=eFiAqKNGZh zj1KZ}eTnmbZjD3swE^RN3)%wF?|mkiKB5I7Tu(GVYw&Tmxak(4AZt#YhhQ${fSxG0-HG?AMhKJ|X_=dgWo)7}24Wbqw`83erCpxaTn5uDxH6 z{L-?8#dZv*{_848ye{62;b5m!3aRUhwI63b*GTEQ@;Mt=X6hPk1CKG!mJR$0)EtDQo&5JSVTU~;lIqL{X9H;CjOR{@B^4oRY|5@|sFCLo7b+y_5={Bx%qmt3MU*KV$y~6%B%Rab3F&YW%6$Gt(~bTsRaL z=FPq~pX!^PZ94m(6y$22y^oK*tUmT1oyWWg+bqX6&vSW%Z1XwFF~YY^7w>Gd`!?I= zH^w%{`@X~3=5D4O(Y85^HE`MHa8UizNRWA`w+E>HX%v{l6ErzIJ!3H!v}^iHiMMi$ z1@on5oLdYjq^CWGw4D8~T=HP=53qmV8QBYJ@wXxEzv`r_b<+Fo_W$p1|I+1B=qC*P zG}hY7*A?mR9RK$T=$A}!J{VsAE#PQ75j+gBU+l+yA+r zj!fm!d_#f$F|di#>G!0!XM*j)vp~&V5}?+J&IWUM`$!I{+c98!gQ_!YmEJ}_ZOw@k zG$b2hewq6aOr6gq4cXp#CN1r~X-t_L>|we2t@_&;_||z)0$Kz8GlQ~ozPZTH*wssi zC*ixMm^S8MT2;k7pmyuB_nGldzVG{79?t)V{mjYm91-MEm;K+=Jlq=FdMO>j>7;(+ z1LJdD9vSw39FOY*@V$}aGsP>LwD@ZKziILH-v4!SbUJ9;Bzpg64tAun6@b#g<3Ov& zsr$cH<}p{n6g@8X(>NZKj?N9z=w$TR*}s)nwEfG@RSwyC*!~xCEc=(;%l=OUW&h=1 zL)kycnSNbpN2U5@=9}>;OhAo_)M-9r=K*VdeOCQvK;2AQF|!`QVTzw&TyE;mdPzcK zboz7SUnmc2l&mj;wq1I8xs)=ORgpNWe@a{a#FjG_l%HXG@a!w?YQ_oLQ`fqx!WO70 zWaCo1*NWwvV?A@~FH0yF4=4KhJ-~ zcX4@Suz$z%?`Hq5j?VsVn?&3HAL(<{UZ47X&}Ts(lxqK0=F#@AJzAxqJzD9}pMx|~ z?cd5P+W!CQr|~ryw*PN9mi_+?l>Pr5l>PH=xI}I2-}Rm9|JOkeL$5%eKvGog|7yQY z`zPW3p9?!$J$AmEwem>c?)HC@@%7pNnQi(%*KSTXqxOF^Ke)v&o0nn#$MHDb#IHn_ zzxHbfUb`s!XB{I5jCbNQo!!*QUlv8yU-K;mwYLk}m%Y^G@jdSUjwPR`T|VrTNWAL!zoelXvPl&|9Di__w(?f)j@>$?A&DmyoJirW9(mpW~Bb*j_;ubn%m>*qRE zjDWuk!Z`Bi=k#-W)o~U62BqZJ6#hy`{EnyL^fOuxQTxC9QN}`7#v1m2UA$}GqEr*;PWfZAuxwEt`EFuL5@i&fg%i`95E4^+9kgDQ6q z(2fP8_kXQzMeqOi;##HM8$_qQ-9X7+d#y@ad#yF?|4t&_+C?n5pF(|t=D7;}xmIZp z08vrBe>Kqw+#T%U^<=a<7)tJu=sK&X(fhwc{Pc!`(wkx6_qG44aw?$T!QB58_FkmF z+LMv~XirA%p*90)tw*b}tEkU(^D^Ts< z8qC!Gww%%J@6vATr_CV2q}|?6y9229=RSq3?eE68h{an(|ElL()GjIPw!h26wZAQIbo;Z)k@rpvdz{oVK{YW#m1dA#oO zsOR|K=|HCYKTjv0cFtBJ#{VwPjSp$Ff9d$&)ydgT)c9Zazo)BHJ?!7*;o2u^{C_5S zRJc4cjQ<@^!|A8(LtGi19HPemXHmwxT^VZ_|GRkCzWnWzR7F zcRURzUpxMHWpv|zYwywH|5I6`mH#{g)cF5QP~$i@R1$gM*CEy5fDOlU_ zzx4&t5k9ZyQFr@pVKZA1V%sN3sph-{@Mwv}`6TC&uRd)6y<1M7w6mnxM)n^X;mC(h| zTIeC@ImnH9wbt_hmrz$pukD=Qsh z;>1%uZm5Z4h!+tz%*0X6h`8YM|Kc9)ECoq}~591AghEi+BA4O<80A zuXK~~jL{3qd2`Yc1*KKR+)JzHU2F4fXKMMsB+VI+m3Q>`^#$e*^1m;F@_)Yp*<3GWiZqIAy&>YbB`?Sp7sY9>jxn{?N|M@U-Q%cEvWJ9>tHYN4R8SXCO91Y9q96I z<{d`by1&0Ow3Cm!m~*b4R^BlqdoE9zr}O-MLe2OtsQSJKVshqLHu<l z{oc{>n1J<5yM^Mj*?$Fg^YLZ%xBq;uxAu_w{CC*?E8+RJUU@{152NhAiads2?$@IR z`*-oq{%MDd_MeR3Hv4xna&}?m9c}-78_C$iL{RpB04V#P1j_y=gU$w{?hmtaj<)~w zwDtVB($@3iN_#3O`#%_z4jux^{-=Rb?n6PBcWvz7$~)TrXONcc|8P+DuV=|SfO=+J z_J1^J$4k-n@5T@6%Qm6p-#~5Y1babyL(`zz@Yp<3@BiszbTxYKbt`jwmHQu{eCxMn zt}j2uNP)jwIH$3P%UkO^8z{?L&=#mI3yNXet}HmNw0OAf-zULaJ z?Caoa*@u4jT}z7Q@^Lm~%N%|G*An^;-T$R~wAzEZM@zbOKDaZu49s-@mn~~_`(MPh zlGVka+W!)hR`vFGeUI9I9)&+0S_Rz$sSZP+Z`Mlg+jjp)U-W4lr2I;u;*nNgjwOBR z5@vy%t#6KM{}X7Nzpbo)`#ay3sr~1Z#}3A(C`>)u-{s@l-ii*N4rYIpeb zQ!4akm2S!3gYwHtON;$iJRVTYS6xdAz4nSf;n1q$@>8bk6`{&Zbs3v&+|1-iWtQD& zo|FUSHnQUY9xA8PGh6rX=l(BS&W5%BRS2vr0-TOO z@~%nU|8a9Of6!w@CVe^Ns#JNo_FoEzcwKy5+TZY+x5YMmyBo!zT>ockVE>@2@j0#@ zY2!aV%OhSFukoLBD`|77_Xj9mdY2ZTa_^^fG%bFld-sp7Cpr|5Uk=`(DZiZ4ZY%K{ zDA#Ua?mx*F6sgh#jhS4y1i2mU=U=z}|GT5rFIV$75*%Ti`D_1NN*?7dj~Qj-%gRcP z4CYaujgWX0AN%-wa1iG|0crQd z7Ld9nz5%Hl^2|k&{aAzT1xgdNH`3H=K`DeysBJ6rdpH00K#m7NJwm)=;BQa;DKVj= zw+qKDkvAnG?0~j)rl%I_Ji2Ml>yOQ2AgE^+?X!wAIB&-l(d%5zD0dThMuM$D^xo*l zD3G@G@Uuowawwx+qiGkUT}r$iFT^O34N7Z{|9da4jqw{@Of&`e0nrD26UMA-p$7@_ z)wK!E>H9F`r8#^@s2|jxy7UBh2=Y{Y>=+@r@1-tb5~MKRvw7x&%5wrJeV+)TgXaFM zU6GmAiEKW}HK$n=*7p0cV9bENdec-1!er9W&jZ07KLY z`EB?P19dzdOtCz8JELHij!r2WiZcO|$R=c_<$OwaxK z<&gY(LmiQS??7I2;IZS5nBNL?T%2?HoXqvgXE7*!KLwO-o(ke)^&RzuYI8c+9UIpB znzT=A+a-BF=_GjUxFTl87#zZryg&6Uu2((@{wtreL3M`bfJvKe8O23oo zAv?dXkG>aUCD$pv%RuR>>`ZmnaeMG`ZoiO>ujIHdcr`c@yau%S$?K^P?1C;e@uX|H zzK`C*dC61z>3^DIBZCL_J_9uYy`SZbDz*12DYyn8W=q&_QuQD))mbZ0lOI_MS zwvBSV*8H~5F1fn7HCVFrUg6It`a#%@@zI|^@{~ADNF5&y8>5rr`y9-`SK#=*$jpcP zu<32i%!hlie1Fc&SLFD<%*<8|6lx|C70lNgY~kd z9NV;FK_2w;!T$4H+7A`^m$&}}%KTWz)H-V{{S9Ty>&ttHXjK=l^L-JHyZ@sNPEN9N z_kUpLfexkL|4}_IdH+ZCxa9pG)#H-)e^if4-v3cOF8lo-jDzEi+NR2)c5~R&{U7O} ze6LL_dd&A-%(g$14`cr^Q1;&ll>O&`IXr1(?OV1Tz2|St7{%%cWwL*_2Pgi4@Q#Bt zr&6BPWi?bT#>69zsQ5ixyc#^>dSg~fU%ojaezd#3Lv+0HIl3OzjJST-5O+N)7!^O% z#Y>hh|7`X@kM_TLWqsP;+JAnU{oAyn?f-4|Uu6I9fNGO>LAAwupvwF{DF6QfDF6Q< zDF43+RO5UE*2VuvwLi&tvj5kz*uRTUxBp)M!S=sJl_xZ^VE(H8u5z-NQC?73Y}XZ} zH~09wEWfb7xv zie%g<)4$0^tH+Htak$cmxG~0mHjj)O8u+gk(eZ)*(zv2}zC(v`+N9qqI)1o|*H}5? z`VlVvf64!=&bGaW1@hY|Qa-~1`60Uq`3(!?r&&dH`3?*EPtBtu;)DKEYa0>qLI0`w zV?_LDPMh{u9}y8B^q-7rBI1V!`nPLze4u}M(eZ)&x<|(c^6L>DAIPs~bbKJcUeWP^ z{M0vAum5l(KiT_kY4PSBBWka>K2dShTyb)h;dIS))LL=UmT^?SZj7n>o>6fOHzk+7 zBIB%F_Ku9Ra@i*`&dNn=uGPwddr^K`TdN*tE{uO7^0RVb zoLD^$H==S*jEu8#**`MQ%H@E_xa9qR)#^Un%4Krob;fwL0u!oRv#iWSo`DqR2QamlGr7tX#??#=2N$A_)gBur!L&^EzZoR?%eR5l9^9k zyWu-EGoQM7!^eI|bsb68S6#m0W4|O5pSpj;cSdHu(T?xT%zPRanDp3Z$&{~|ylFi= zk%dnUBEGY;@Toz>cTN^QHHi3@WZ_eTh;L~YJ~fE=&dtK71`*$RS@_f-;yXVJpBhAb z%d+sPLBw}KWoW5(8nt$GeHK2~9yes+bM3J<3!iI`8?*4a_P8kvpKFhs zv+%k0xFrjpYmZyA@VWN5EeoG(kJ~fzF$%Wru`UarYmYm!@VWN5GYg+5M$X4bO&*JR=OxuQT$DG(68_l~&u=pF6d9hEGV&A~o|iN79B;-$xIF3+nM>~HVxl9 znfbKrWcc3A%%>$N!}nfhJ}pNXzV|cpX=%#veUOk zW#$X?@8isTf&TqIGhd*8pJe6>^zRRu`2zj>V`jcU|31yk7wF$-nfU_!`%`AVK>t3^ z%oph27n%72{o9`4EgAXj9;)>3FPZrQ{rhWXzCi!J z&de9+-#3~00{#12X1+lG{x36MpnreQ%oph2*35i?{{15}U!Z^AX66g@@4L)=f&S^{ z#ZIAn7E{MZ!vp<`W#$X?uTf^cK>u`4mYMki{cDw(FVMf%nfVG(JJTL*GV=xc*ETa> zpnrP!HG>`m`qw@)U!Z>-GV=xc*D)iXS;jE+-61nypnp4N<_q+1r_6kT{^{EnHOqyU zfB5auIWwQpzq&mG*v>oynD5{3Io5xt$gFyW{30IRS2wdS&&hGUu66vn|COTil!CjjI`#Q)#W$)RA3Xo7_?#NzC2aTnb25GI zk1DhG9oFu?=hSyn1fID(@jD(@_nouUJuN<{ zyY5R+#>se|-7TA6ypVHh>ussuEq=v9&8&Bg#~Ym$uHVG+ay}qiyL_JIX)T^H^7YBd zvE=~Oz&@K|f0<|O;>}$?NU*rP{`t6PAvzAWsc+16xtQnd;_Y2NMsICfwWUlC58_<~ z@Va=lRYxxElA*13s2(4*m9F2hdVI<|BzCGEZ@xhyXQ1ox1L^sjcsT*ZqvPrECVv^f z)0JfTv4hHj!ufujY%m;mk{>Dik^P0^PC3QemFzBjel`)}mx#mXaSf(?jnmGT7Z;YD z#OnbT&b8%>r^Va*7;RjWw73HE{uvu59S!GKTwXrCvfQo@HA{=}7Ce^Cy`% zVA}R;lNPs-`@o$XRfo1w@xCk-FJ~1ltFCuFge!CHd`a>?taKs2?wzN{ctPsy?f}zT5e_&r}G)rxwiLgUBwi)UTsoLDg?7b$bYY@w#}G zU**H*!u1=f_uaVq$@bIY179coQl`mx`@JOTm*f&YUs|%TxPo)rTIX*hSi(wW;D;&H zdH%V6oe#H-syc6`5>LP{UKg)A%Wri}t+T0<>g?*2jOV#U-)59$%6Y#|PLAQYveF_R zeK1uvX-baac-+=D%VL(4h#=qR!c=6j^*mn|Q_ITb-)d)T-yIXxZ+A5#RP&s)%L0q@ z;*HPu^O#mp;S5PKpF^2GfsTXQ@i;r7oRNCw`mAKU-pg4b)2z3Q_VCBCo;pp!O%}}G zLn!}TSN_8n6_zcaYYN#)9(8^W(lw6H)qy@FvJOrM(&7VKadk|_^ZYA*Q3a~6O}IKv zF{6I-47#bG{!F8e&6fFXG<{y#$ODC=?Zt40_ou}he<@XUwv~*hozYO8mu-d57aIPYc6(FKj+C=E$2`!5+bxvMg4FnJd2$y54Mda8BU{IpV8xs*TqW)vZGxx$WVQ9T6~HO z)i@sVcs04e>Gsr-#Y(d8a^Csc}@!Z-?U+6jT<@^RJW4tHm*N(RI?B za9qj4B29@*oJ1LpQ+}K>dZ-5ghakhH9RDfQzS5)cHELhU{0T;41L4>4mp;GhOdp%V z&$|p4`Ja;r^g`DwzfZWniprdMfwd1^PhXXCz51*CvZ{qLP{lV*i&q^c`*qa*WV5t* z**32lDsna_8DaY=d4$Kd=yFP2cz$Q}Iu5{fAK0_=dC7S54v%{Kd^h%+xu>m^e1QwosoO2CZsUvRme5SK>-(eE zKDPRK_?>~tW(IlO=kl0VwrILP?w4)Nf`0=fe#ayE=|X&-pG>O!tnaOjZYSpgy2kZ= zkM3oPrT01o;c&|MgezlyRe5>w!pg&ZAE$Ei3L5WXNY^+%*UtFf$Z|TrnT)6JDlVR{ zOlx0QbBWh16jt*XlaQ>*U?7hI+Vqro{*P zTHm^SNx3zCw$BvDkckb#UjFaSOg&^vT|m7HK&0zdpv3mM+?aVsgV+y*ajCD|^k)hA zM;gYwALa9=_WdhgfP*-{8I-AS0mp&=2Oa>@eU7U_QqK!3p4=;6!i|xIcIVI2kMe z4+MEvi+L~AY2Xx&dDphbTqCg>M8=7m!9&1%!D-+x!9&64L40n4Z%ml?QT+kLha~v6 zw0Zwj;~e|`DZT@0-apkH#E&NigGYh;fJcJ|fyaPHfwRE5;IUv8_yceWI2&9E&H--# z3&6X<SHKc%tXs@CNl=_zrjv_XaW9&bR} zOz=&x0Q?mK0vF8IYp-jdniaPV|+GzNjlV?u!3!T7zSN5ucNC+z|r)|>Z=fIr-g_w9qt z`|`f<9NwD+@-5*NyZ6J7=Xe)?2J#K6!zk#m|z~AI}SI*cSd*yi2AcV$s#o)Q% zIpBrh4d8N6`vbgtd&wK%)!<*j>%k6#u`8}`f^)wg{5$w$j<@>AVYCx?-*C^vr!2pH z1mp5tZ*>k%y-TjQ{A-YR0x$m*=e`g4?r8ic`0^P17x?s^j4QyO@5MXOa=jIg?T!E7 z_$T{dzltA={p5P*w%-?f$n`F5H_m+TYRL%jH}D_5AMaOzuXH^9A$Vp!>oASI6}L=a z{@mDG`OZZ8ug2c;&HK}TfQ=^M&%ut9@u%Q!2jb5fd#l$Uggn4uQ;|Q{l^%?pH};k+ z2k&p}U3%#u*b{ikH1wM5Za9?pxHR?>cYq&*_kq6$9|1oBp9b-PiQj;K1b+v93VsBB z27Uql3H%%QIhb>p=Y0XT0yl#@f%wiuckoMa0QeO+66E_EiG9JpfRn+$g44mT!DGR1 zz_}nkH*q5Pf8c50-@$Xit>AL-AK=yCx8Tj-ci`P1!_CBlAig^B7}yAW7R&)(1#`i7 z!N%Ypz&Q97*aZ9s$h&qEO{TNX0=5I2gI&NDU~jM`I2ddNjsaVP`CuDxD%ci05~OcP z6oBo)`CtdI3hW4;1?~V|0PYB04(+7r|Y?H^6S- zhv2T@pTIouYmmMu5u3q&3)lke3GM*)0(S*_gZ;qWz~NvYa38QQcmUWBJQSoaOB@3Z z0E@waU>UeOcnUZOTmlXTF9C;uSAs*q8^K}VT_Am7;wRw9xc8fONAZroxVL09NT2q@ zyJzA5zoJ1_yx~K=Et-tm9`v<{*i; zz#-sY!J#1UF!Y9jx!_2!88`-P4UPrJgZqMqfa5{Nvfcrp=E;*l&65uTuK}llFMx-F znitOi-vf^V8M}H%gPI2)3o?fFjsuSb3qgHH^?0xZoDW_DmV&o~W#D?S9ApgYRe*m0 zPXa#&PXoKaK`RrL758-$zI0rlzTmUWu%fU;)+rUe~`@of;zOQ-(_!@X6_&#_I z_%V0`n1gPt1zUqRgB`$I!A{_v;9!tBS7HSCWAF&@C*U#Q&%i415%5&-SKuAsli&}* zXTS~M^WgK~OCV!6?^Teona3P0!I;8(8)VGjeE^;Xegta1`$up&_$P1`_$By5@GJ1= z;9tQgMeZY92WV+zlKG66fs!Y92TWya3!2 zya;4YnOF{v1?_ldXD{Y2Yua~GcjUN9K#h4ncVphSt8=Nphj6^3f1ZgMVOKAY;qcB- z7f9D32!efgx6XG9&bvGsvqF_jC;U5{e)zZE5$^J>>+cDnYkTqA)vIUl+tzb{U$2oq zPV}+F$8kQ+_VI8ZFYwW&t9LNFvW9<0#fRnGm+Lx*t{oKmy>ICEA;IrlzMkcL^I~Lf z?=Or6_a@ThTAMOqKiVGG<&6h*egeo;-}t(=;6#qwfvh{2_j^wU`*M6BXmzFwYxYdS z39Wbsb35AAy|?vC&N1Ef>^*`pPw6Y*!WaSCFqL$a|G`0egM;tm*?az?uRF}YZhG2v zQZsvxUd-IDr(Dj2nERPk(gX-(%f|B(-@HDUlJO^YwCUGt}A6y1509SzOOICx6IKBcb2iJjB;M0Emv*1Y_ zv!3Lg488~QF73qopsxQAJeA{3;Ax=xN}ZS7v3JvFo&o-y<1@jnAdQ^pionH}2cFHb z`p$E}J-{X4C_jD-crM3#g6Dzzfail+lU@ey3tk9L29@445WkW*6ucNb#y@`?cnQaa zApRzC0=NR4@8boau2-L|^Q%C{5sB5{W#CW2%R%+Yihmpwzt*sYZ-A?tdQ15>qjxRw z4}fdH2f^#WhrpXb)`JYc`qW!E<{Qi2t>7!*I`C~jUTe;GaomKya6Q-={2|yC{1K?W zR{8b^@8Ng=crQ2#{4uznAJ00HIo6u=eVo_#&2`)D)=zSdXx7Ha5boOSZDHn$+7zON72&{z$ZBV5PS;!2e<)bUCHn_1%J(PGw>O( zy??$V_#($UfEz)5KkheRPw*wMANVrZAAA8E3M&7R;Hw;u^^eDcuW_6Y{uVq0d>x$T z#~%j1$?w6NpI0#GfQ~DmkE|A{Kuiqm5?gQz(JOceWS2pHcW9^6# z)R)Cs6L5W+J??Dc^gSDW*TR0=CO>p;pgE@#mS+cpy0)?I=qFT9r$1@6CU%&KZ$o+X zt&FDZ{0MiTtS&TR7o`b197@}!$$}=qrm62@uz*Tv!mg0M!_b7QoA6YuJ*PA~L6)a0 zJ6K9zp|#hBUwM$e&(W0hTY@7YeOrb_TY@c9bAwITb!+lxAdS*oNTCgR>1SI|b>$|ML@%&C$nvt+0h|c(K6Ud=q#eLQ zj&}qXfU5H%|M*03C(f&moxn9g#p| zH-UNJM_><7^S_>;WMsb^qW8hKhFU>t_dTGnZMQ=zvfZ$(v<4i@?DkD(DRbU7x?o zKfVhb#`%ZA5zV|yCXqot$F9$u?H|tpCvaZ#(}_w4+#i%&^t}ta?$-s>x`t#l8qyk} z9h2qhZQ5onP=3$arTrd=&NmKZus7wf_k+fQ`$Tg%Hw03cOrB)z9SBMW2L)wFew$_z z=Nq4I<#-&w6>=e^t#GiP#vvfvEZ#J54tQvg*1_-}6O>6hHrG$@CVne4gBF`#%!mE- z4hL1HBS2|{^h-58l4E(OnIPK{-ccai5#G_@TJRXq%2D6Iv9gg&8nYv8b!2%^miysv zw#?S8jNb~frFG^Pd&{IH`OF4YmI6>->^QJ3s4}$&3pti<6@hA@VlWRBUoRgAgW?|! z&gHypa2{yOs^FgI^0C+OTlfcE` zOz;%25Ihx>otzHN2hRZIU(N(8z_UP&tDp!lBf zkDmn38tCy3*ZXIru}c0{jtp8h9Ug5h#B4M$NIlGju=aZvh_w zZv`I&b8^|w2b+RF(=j@m%NRky>b87+cpRqhGNt?U_MCBJ0gd708^<_8>kt}?wKb%Oc3js4>(5&TgY>m0 zXMLK|u=ftS6|2-VUhva+5mX)@XKLaH?_Zd*-zsYP`>_Eusir#kXCO> zW4}-MCFix~Ywxd%nS1Rx<@JNUQDq2k`02fEuD5c$p7ZZ=d^7kScn|mi_z1WOd%(fkVI+pyuwa!SP@l@DPw2jT8FzU zJTEh7MnT2=?B9aX{igB(z3eoNU%7gQF69|Bl_@RWJTE(x^SZuq4e`VL_;?NR8pG)N zCe`E3{jMW8FPR8GLnceXa$hF8j>Ay7xIc=ARSJqK<`wfPab2ge{U^{t@Ll9zw{{vGPr{(ZKw{U7e#tkKW!x_^$^J9q{JJ&;~#j4zeY zZ}nZc0{H>+oRhofT;o6mjkjGm2cA3qa(Ra@D&pzrd{prW|IuKh!`!py<#Da9bG(w3 z@?(@^Y$nRam0enVaL>7HsgeY=4y*axb0OJq7`l#idEPd`_o(nm*3Ob?GC%PP>gJEDD21+4?PumqmoEcS32J~b&Bm47B>-wKJ}@i@6~E>bS4 zgOWSmueNUvKUK~KbsK>!UWdf*c>Z1MHY08; zb#ka~=TbK<(nYmfTV#>PHR5+XsvAwotUJ2h6fgBiix2eKwQDk-ex+dH++wbgu1p|L z?zz)_<=**zxm>@Ia*f|_JOn@Y@OhKrUm4<;&4u|3%Su!FjN0jl^$$)*T%YogFUKb2 z;lg_4__dScpu)n+TE7$I$HoV_JT#`hn8vXEPb}!SH0MZ|Mq(`M|HPLiR8OI1A)2FT zuA<{SAG?DXQlf{CgF*2P^^eE+sI?5{J!UOKnD6sV^v_TAQ9g*g%(EgL!CC%!wV%?} zT7^(Pa0lW~2bKT1{`qTsycXP%^J_qr_g4SB<^a0>7a(;pYo@GHnK5uKPqpT8-=9J& z=7u9#4{eO}I_qf@LThr|ot{5VY!^m13T+rs^zahz8x>%3ML_T#thx>+@Iqr@BmO{&!x57n^~}JryV6>g4S4e;B6ej{kUq7N=Q&!?n7z%>!~Gk zymQcYw1H>+ie_;(Gy>Ev3QUh^8(Y?9YAM1Ns428LS4Vb@p;s$p4NZdnxbR7sB&bmxmosrHrMP(XiUX z)-{gL^(}of^gYr&RonUMB9oi(CH^n-j8uHeiu%+q^*KwY|2D1Y@BdaYe^)J`Q%PdHNW0NjZX_Kz>AP2kDT7k&vzzde$=tCvfE`wx4 zJHe07GU?!Z&^NoUW7FB4G<5Ix2*|FjxizSz@K&03i|Ls<6Sy|mpXf+B8dJ;nhx3sS zS3cNZ0w0HeW_=j!3gRQQ8*2I<%9O~#UXu9_<+s*HwRhdxkShyK=<8`r&*zyy`Qb^n z|HJmQ>?8>5(7pH9rnbMv9=dKZBwiOEp8sY0wyShLJP(Z=SEJL)NB&7>A=YyzP+O6_7|^<|5voXYnwd3ZJeE{_{%8!ZuM##`~Cyxn_V6?wSQr~^04D& zmxuHJ8>Qrg+bx*C7gCRPE{_`8e+}2^8pl`L_NV>S?Gwy;S}^y}JVHfD#co8Eg zJEsYsUs$z(^EvGvr46p)q6u90oL^oyhY9ni&%MKO;kl``z1q*coh;=O=0H|2W2%D* z>icK-ziaZnO+D*->*C|Bj{ST1c&m%4K7MJII%^!R{w5Dpf72aQf71h0f727xXsZ{< z_|J^LQ~RBLtMxnD2XlRoY}4vxEYNH9=i2*JpnVeh*$>PEHI^hVbF6ap=lmWZGZ!=V z90(rBF=aIOqYMHIIo4Qw9yknK2vYV$0#tgEfyUM6f~1wW1RMok>c^{pWVVo43GNAA z4^n5dZ%qG^xP@blWo`c|DQVuJeLd|N>fVy>P(Mg}jauv9m9eTFW7_$L<{1nq2=+M7 zpu10J3+K^2Z~t6zn6~iN!hS#W9P}Ra4b+kWQ7>qm21d2ylWpFEfcM5WRq~nbtv`1@ z!uhu%lcH%4|Ci}Q<8hzg+poy5)Mb3z7~ds3cI#nH{WjMe!v&-iALR0wTU zQsq{Az5An-f!5kM0y$5`(-5kAPl37``1v$mhdlz#P4{%?=miu zb0%0#w7;1n#$DTbX>zQo{dFZ{Pa{vi4+!L_I!F|0@j)L^dpX}~)@_`eoxZ)|*Fj@z z7qHp*nNH4i8c(IR<(DKl39`DI>;q(88ZRoWYh?Y-9biX}?*#jRcY)Tf^zH@a-+m0*efI&R(Aca2C~vDHF{3XWl72D`=5fXs{uI=>_h&&G zc|jUl^RVrlT%%~hxjB%+qkbBXftqi~|7o7_D~?-%kAuuPyeGk4;8UP2r)D8`ttal~ zQDV&_lI6DT66355;d0+X8f+^33rHshd^>lJo4DadT+;Ct8l~MNK?9n)Pj{8cueppDF(_EVM@c-$ujq?9x3=5C8A-_!9k<|F^mu?f<*Au)cOzQ2w9$CXD~@4%X!Vtqw-}|K0rb`hfC* zeZeUIZ*?Tv{}1xh7!1n)4++vp_5ZdFqy7ILej1~|u>a?t5aa*Hfb#!)f%5-*gSGMh zwq2tA|IVZ#|KA170%NiG!wry!)7?`|S}|vw^u@`s%OLt$_4$Lr zrr;2eF4G$d<}h=!`rFZ<(whNYmK*GgA;H=Id(FHpM5eAM^~?%gBpku|1mZ7LS%OgL@cS!mK82g(li z1C{o8Q02}CbC}5|%WZ993vuFiRuL()%vYq!n%dx3Cu?ncfPj9=Cz2_w8nnB)a|E`RO^^tBw5^P^TwW)Td6VW2;Q| ze;j$dTCY5;{X4n2JfiHskUTzbz&vVd|9Atozmn~y>(iaSKHcT((|S;L zbT^pE{;h1I?f*wyD_!MYRimr-g3{F=gBmN`2WGN=E7Rz5|AcFm_5+~o;6YGnKLo1W zKLs<{zZ;L_!TWkU?%#uQ+cS26hCmabSrt=3H;2BTF|m0nQNsYY#?5c8wn6WW z)-U;t+RsP#&(U~>bj*Cz?Fr!9Owjnsg&cS$bD;dqd^EqRw6cnqpc7QiHAJ-JI$h)V z+<2eUemQef`hU#B1nud$pt9(<$;a=TmA=LzGa<*T`0)OZolnFHLR)Iw@>8=6CulnmcD5!t> zJ;V}qT6{3y`TpDg^+x~f_7B&;_Imo=u~Fq*FX0hnhc2Keag7focdvr>3h8NG){(j1 z*u>*f(V?X0;`Gh>WaFwMy*bHm!#+tmlUuG%itzPgf2EP?FS6Xa- znKh7v%G{4@rJq{Q((0IwJA(beLEr#z1UL|6f5GfYXb+OOgzjBw=chi7yI6MM&8IuC zx?<1wGVA}YKGsHK#$LG`dq~!26ltj}qd}E%Optcplr*fIlkdX_r=dL!rJ+3y$wqq` zwjBLT8e2GL+D(y!JZKp{Zw+)m^g6T|YKahfLF1rX;E^HCzrnU|*#5Ka{~O)|ODf7( zU~+zGXbpBLy{zlK0;+p%qnA_c$&C-5kRS-OT@a{C{B*w_dd{Jg7}@)0p!$08x_IYD zhSgAB#mf}Z;sZb8`io>d_jMLm;K1D&vlf0cX4fun_U*#eZHOvPSYpBay%nC@UEQX$ zSxZpeHc&6@Gg$xo#Bc|dGDk{(y1OKSf- z7ys|k{&sv_+xB1X>Xz32TTxW$ii=m>ayT9ysDZgJAZ1TTZJ!n&=(eucydo_=_->u_ zPS3l2L%zqucY|Lp-B-Y2=sLO!RMpv1GCi&mpaJ=qx9 zq@-79FEL{b`IOrCcXpoPWc?-Sst>YyA2U9X!xW!Q-(vhN<1aHFZ3)`@9s37;kop>{ zQ?bAo$p_2#C@_vSY0&>9)Fuchp*~A}QCF}d$2~#T^348yCy@S0^JMrnw%Y~Y&Z?B* z>4z<7Upl!jul;x1?!1WEaGA6`w?I>QbNvN@Q1-UoP%L7#&q4HPx zGNXgARl=^@tajZV~43M-FXM+Pl z)ieB_k`|1{b)Rz&e>BjV((1h!ZP=|B?yA!G!9JI(cW3Fn5PHVn-oNMi!v5%#0&?|c zqFklWQs^q^9_R_EJL?PTGJAk(yPlxtAH6`$ZF++_+`pP_{Xueli}W@_O=;M!&7q5$Veu}h>ZOPk*$9p}n5!tfyi_%A(^^>Uc`^9S02_bT^_Q_NsujX(k@lUz5UF((jIEB zT|l)L-!CxjwX10-cmHJSx~VN&^xXFQZ2w-A@0}RWx`I3}n_#@)y$3S>^WF#d13v)m z{hwXXv2KvwNqht(``5c5^bQd1&lG|#W<6>{b$oQ*RH64`{&o9{pY~5 zzFv9Q_IG)>_P6DYZvV?z4^aDG4yyfEfwI@tW}P6q{cYKz+y6>GJ)Xri>0RxocMT}} zzZT47|8D&O_4h_#^OK-CP^HMX|B1x8kjehX!7tw0+Q0lmRQuZ=!{$g|5`U|8ecC_z zo{tTFMRs=;0=dsQ-pKj1I{BDX`*(iKt^c7HL7<&!BlEWR4u!{DYsky$Va#*-*@APpKNGU$&-;W;o!|EJ|GxVNr{5a? zsq6~b%DBld<41lO`G$~@(eFX^VV{8N!+7_D>BIgAYW?F=uzLHI(4N)%van2-a;^1w z$@^ZlPNKF}_?&b#e)$4q%n@o4f?yBq_mU1ouj(XpV)_ybU7oDHgsb3pn30$dK7vE`V3;??sb9&YN9~s>yP(a*+cX98hpym2;TVnX&QVTR=l9BvRILt_b(-a z{)%-T#?d~X>|XJMYViBvF?=BN5|^V2|y=yZ_zk9P)Wzq_Mxf!^z8-*={Q!WQB+o^yS$eox@ynGoWM zkBE@v{w0fxRd>mABW*At$2{KaIo`U+^S+~Ao1Ec(wYd6{t0;%s!0qqutwtcswP5~U z2haGFvgY$fkIANqRL;{Wquz<9YaE~R_k&a0-T3n%@VR}5WPIxSzeyavaQl}~jyG4< zzy0(5y1MqaX+^jH=h&J2{THCxZ8O*g{4=Qb{}NRDe+6c1e`kYAXAu`Kg^Uy6SZ(0K z)s$~^ikz(;Y=U75N-tg)-*9?h*T&NIpeFmDkW#*y?ced$rJSfxu>SWRzZK*QT~Han zx;C}_rGL7PVi{f+Uzh!#9^rR^@qVyDhZWD|eLUq87xQwgiVEhI6=rT(zkNSD*QEJU z#?v*me_o1wtGB<4uZvtW`+>T(|G<>;)!hD$ui?t+rT8oN4A*lJ{S+z^ACpo}>s6&I z1L4S_(uhe8(pAy@%>ZEXk}TG|989%SJqT{X7m3uQp#Gh z|95;Ur~2une>dy>8U6o)g37{qToWD>WY*nOdAmBSlS3fnnZNeW^~n3@DRr2xciv4d zBD!|>e%R-*UE8{OYSeqDZXmDUxxDH$PC3Q+`1Cv$v8kXi!Gig_mOR?hF-yjETi>&5 zq3LwlxuVD4kmVD4km7zf%klJBrpIjmod1-><0j(k52^ev&W6Z;W<8vO!!tl+%$S+QWu zt9mbm6ejs;Fegl?&o~g&y`0)7X0JeVQnT+o1yp&af~>um?}xKK<{iTE@!&Mjmfybf znNyy79;Y!<*6&<)mBpiWB45w?s~D|lLoT2^6sCJtKFn9ly?G+I;j~kfgj- zAM2Bn?|VXrf_2H->fKDz@6UBdfy~Fucg%-_)Rlar^iO+$nj0neG1tIveOD~-1=16> zg+gu1ax8hOEI$BMmf4`nG6&oXEC9!Y$AQshb88|UJ-auVEThp2<1=D`%)@$7+cFlB zx5~&Q*_07oFlA(}WZpwhe^*1L%P1YS{xoKMD~IqV{X++;QHGNlO4?_FvZWmKUwe}ZZr=P( zBXg+s^wuzEx(C_-y#;N7+G2=(p$X6|=yYfmbPu!v+5~Nd+IE5u+8dey&4UuqDri0Q z1eEO_!SFkTr<5!_Q6G+nd%ql2Pni?Un0C(A9J2B)Ape}nCHfSJJRjr0=!ezgDaDJej&Ki@ zr@5l|9govp^e0kx6)*iuix2iB+!|Igp8F)q<`?5TBlWv3_0zX26sS`W=&$3Sa+Iv! z#Paf5zpwO9z|La=k;1lBW#qh`k@8+{GH#)`q;L5 zg)%LMU%W0}ZP5{4%3ot!X&E~$K4>dlPnVG%AKVM7c)E)8_#wT93>l(+QSo#Wk?|w^ z_|DbiP5z9fgZ0j2`S6341%>p#CQdR4$DQOy%701+!*QpaB01T6W5efX6QT1Garpd6 z9IO1COF3U&Tv&EeaXBx(w`HKONr|sGWx;X0e%F*w%@3mU2B+H=7E&UVTkC?ew{rco&JsuRcv=`XutJL}=Vk;Jt`G zD?eSwxG^QaQoMy^sI{SRJ>9#AKP_yik{Lp>suHK^1m+7mhloYG5lSE#`9kFc}d?9K3`h0u($%=+SfU?k99tKg$$Fh z(p1p?Mo;5>+uPRpaNDS=GvBGw-m2ks@v5_Y5#k8f+0;pG>gtq?XCC6)gR)FH@7Kx6 zF&tM`TEvjtRN15{IfmnLMcXV3ea}R}R|E4KyNrKCMn*hS%gh6hwX>t|j*04v@0T+o z9B0A&#kS+0yF8{9R5(MD%)g;bS{xC-<8gLEIm0p!^vsP}lJUBaqC%!wZyC9D*Q-=1 z!c7*;UkVYIEf^UczNoNl0o_f=Rvx1KMO>$A9G|NL)r+iy(}A@3z*bxxlkv=F{qMfi z*Ct#YH_3q$n8E~sJ}UmDtK;-}WhYN7t0?g&PHHE8!{#2Y(>0Dyb&#G?{Tk~i+ewQL z>Zt4SQR(r-a-}i1ATeCz|Y$|*fyGEsP|ki#Tdlv;w1yA98{wW)m&-uDKb>Qn-(9) zQ0c4hjf!_;LW&d_uQ8$1!{qhc>t0oA9F^iE-*BAU|4^J{UM-GciQ=R;;kc58MVjWA zIEgYGr~EiYJLa_0JHj_mp`{$Z7HVJVQTQ6QulQ%d`vj!p-}(HK30+oXtr_ z6gMS}@OYJ?q{M~iY(}qRwRz?-snfX#@DnMa!GxY3RKu~@w~Q2dTZZ7*JQxJG+c zzG?A+Jv*P5jK|*KS2=6fFGr7q^sKRhe1QwhHRG4Kx{WWMTS7C{Cl4pTRhq;Q{ED03 z%va-UTprWP7ESlZ^s=ojlxYsvh~M!@e!38!7b(Bm%OQ1~@A|%(G^j#P3+69#=J?&N zjQLgN<;4pt5A%JT%BknmdU2huaeS_wxh%4rvR@^hjHmA^E}pM*wXZ{JTe`jYTrCn1 z@E<{7ULW7+>R|LVb@|iyLh7&)(shp4$s4_htVeyz`XzY`f$Uml%-EU=E8Xv<9|YDK z60(&ppw{8t{=f>(+4bUBu#PN$vJ_Il9Vg`fC~!h*{U)fk`5ib2di zKajF&y)I$*8T9;E^1Gbs?;eAc9y}(f-zfEe@6L5fk2)oE9(kJmJMA?n-Ju+-(T0Ii z3D#&5}Y?1CL>M@{zB8hPotHCrdwKA#e&{FS~!xP6eJ$zOY*w)}(5{te~uzJhAH zZmfTu_C3SbX<}>F!eYT1+L@%YMV&VRpKS7*0Lo9Po^mNVmf21ORU6uJ$t3U~ko_{V zKUoY;BVGn}C|C|223CR7LCJascp7*(cn)|3crJJ(xC}fBTmdTI)gZd7Pr#VHxpiOx z$4~q5&w|Hs{2W*az6Tb8?}NJjL-2TxH-U4(&;9d~`#g>%KgJ{p$>RiYD@eO1y3*jf zJ`Y^Lad&VbxCdAUj`HKjfG2XiCrDk*_eLwgu^d-|`+}^QB_@MPZyI0X3loe$pwAhJ$82wnj4eqL`m_zd{}?VSspS5>+9_lyHGD3<|2L2d&A0wT-|b1f|9 z!l(%ff+dN`z>Gq2lYv508%qjH6AH>}p;2k!Njg|sP*{+9(xP5C$2!`v(vF_Ap!7}O z)Xw*}*0c71&z}E(Aj9*%pI)~9_|00+vz~Ro?DgM!ZH4X=4ITr_&UpBC+^53)1lnE=e;%$g`80E%4SxZDeUDk;&N277 z@MipH!*{~(hVO#k1Ah^o2Y(s95~gjme**q0ya|?_Ti~zZz7^g|JN-3$AMW44-+*6- zx5EVmUSH3i-jBNn{7tx@`S*vvgL?qH10DkJginUQ3y*`p2akup4VS@+zY=~3_dCp8 z4}Twb1N;N{TzEG;6PEsY@DFj%hH2yN^WjI}X82L~!!T{WeFIFJZ~rpvi~sruecwF{|)xz!U?o`eGg_JdwXM}0tN^V{q8UK7@&8_^}K)hyU(ZMX0YM%?m_NvJ#${j*e>qwR)9>J&ToQaDS5ZPPhIH3 zcKn`n($07^dXw^UXS)yS(bsW{7=6V9NNczX8IcMZMKU&-8Mu7fdcuR9yO5Le3(038 zp_A|67ZFR5=?r03k$qjgS(0zx$ShDu*=g?5<>zhMbAP;Z_hMu&WHu^fCM={Ld^*DS!HZq^0yI_Uf5i0+ z@O!3tZvRvYn#Z2dA6(BzejfNQSoglagU7%xz*FHD;j>}J)b@Gs0r(QRX=jV!gSZ(} z6_-2LfU(w%_mW?SzuX%4UxGExzYKpC{xi&25xoK{t-W{}w}A33pv@Fe?s^tQZBUnQ zch!#N)>#PpHo1QWrca#LnmopNnxf`P^5L$5{2Sh>`b*^V`Wmdfz7CIq-+-&(zrxdC zg1c`s&3q6YgTL}v05kqY-C*TOd1st+?#*y_{2zb|;RoR!Fyn&L z`yqTRZpMM=I9T=76Mh!%4O2f+A6R9i_Uhjk=neM*s&_pLlsH$sN8()Z%i z-<8*QPI>#;^=r-y`n#?k>NyGZDt^>@*4!thEIZ9 z;KA@m;i2$)Smm?P++Tx-;lBee$%}40lL#i^z7Uq)#pa$5m*RgDTqZkkIjnN=&y$qH z`d0h|pm!>2Kp7a0Wo+xo3;LrU^L)QN3H@%)U(b^G{xSt!zek%F@7*4QU#X06RT3vr zN30QC8L&pMH2Cv3)aT9wet$JD-kUAJPquZjj&L^K4v)t@1)dL|9@{#H)La;+No~yU zb>_u;r9JRl19VL_dv&ntr5;v`Q28mR4Y)NzHNxk>)8KRACU`S^2JFjG=ZN^SQQPPi zHRDzrxhYP|cJ%$8WL~_dslIeK(Dg2CseI0cm6jQBZ}=Rz7*?A4!RO*u+hVQMt{P&k z)LsHhZQ^gZjXRgayI|?HpH){{eph|6jpt;9tX6z`uc& z4vkA<#&Z|$RrpHWe>FE_Ui2Z{jCs*jFk?k@4SX8R^Rw+UU<%uf%_xy!|-+R zFX6TD0r=zaarvxe;S*q`^CXz{a{FMIu+W`aBl@%O`S8tf3oJc7Zz1<$_!f92d@I}r-v)mO z{sR0-So$}adp*1v|1I!c@R#5(!pG1ax4>GPepzl>asg`uUA`}Btk-B8+RS=t{A0|TADUx!V_-5nech7iw0@OE%6?(txBLRUJ{^=qub zZcTYSD}Y}3`giA~Jix`J@n7lrB*=`%>KlH~FfSV6Ec-pv>+J7)C~uls^i`EVtok|@ zz8Cj#@IS%I?bl(AHd|rkMtWLJZo{oH>>IGJx6GJSL>`rHIcvY?mHnCVJ!X%-?#lU**p6R|yo7DlLwFBz zGk-rxfgb=xOix2V1-JmL0PDbJumkJ^2S5?cWeBJM(?JVZ1J;8rUo&#F$4+Irp zI#>i$u^Yiwup2xH4uGN|QB(qIz#OmytOu&6zwNz>o_Re9(v9Vz_Wi=XZmBcm_O)cu zUE|OxqjH^y@0f&VF%ED4xZ~ce+TDDxpNUQDL;%mRzt76|?-aZXR=YnN)}6@= zcocjNtR8wU?4R|04{d277zhd+6wex>;pc@__2 zd;0|R7~9=Edp@jq)ked!2Q6kZImV|GyNS zZ*BPd`hSQg^#2Q;z3lz}d%UAuNOpF?>i-YH>i<80)&Fi>J-L-qfUSUjQ6B>R7^ zcpkQR9o4b=ChbA&#au6^HNtA&##4zv}-( zA&xgW{)c!%{rhrx>+9c_P4@Bs@2&sC>HogmviJWV(~i{te*&xj?}gR>f9l#-_WmE< z%~$^~rBgJ5d0+)t2Q~x!{ zm$veI(c%6s-SJ%x)w$;O{TS9yTVO`aEX7bD+6-3ea^sVO7p|z*-r90oKmmW?1{Q$1?LC%iyWM)8j15hv)&y z^fB-Zcm)*XUCjF5uTewa4D)};8)C*`=6{!GIsTUUzvJ8-;uxh&aH&qi#U4fXP`}AD zP5U(K;!DfwO{OwT%NmfWjcZ;> z%G?~*(tu@eSNEDpd3bl>@aH#QrmA0sQTx_hn11BG z{Y~3%KOZ-9Rr|&8AXxjpY(=>JUT!7Yufok#=YBh*$+zEx`(*fTcoe)19u0pN9s}=& zS-X%Y{W7HA2&Wp4hD&je0Ye=3Vy{N-UVKHoFe-sF@V|>r!0$9<^cL*Bgl&xp+N0H_ zKDmfQT?ICRyMaV?RIGR@g)APy=9zOdS&J{C;Kb7?An|Amr@dAu=O6K_G%oQ5^RJ_z z<*uay#H|ce;=gj8)ML^?y?1aGjqc}WcaNpxPSYPs!Aif5gp22zy**~9hw*+YLh@PI z6E9}JM|?FEChkTdh+m~*#Y2tfQn7MBZgyu_xJNDj*IT~1&vbfg83d(2*Z5_Nug=Qp zDGNW>+^3oSL6$!~P^<8IQAgZr<E_ax{3pRWHrORrwUQ+hU8d%8E|%gTGHrSo-5=VH_AYy2P` zP2n#xE;HUwN0k3P#yzZkTuaB5|M|w_j9<5O++p=~x$!jP7p)v0GTvmo*toCpv(~O2 zG``We*|^fUhw)QZf7e_4xX8H7xSR3Mt^V#czSj7BW38%`uh*@g3^0Dx+VA7WcN(uY zKFfHm_50I|^NjafyL-yog`2K&$HGqhg!Py9FO$sEZk}<*G*QR_ggvKVdZ$1=^r$^mDUcIT042( z`t8-$4j(sr2d$o-w|MWg@I$Tt-(&vwkQSw9gz+8Le)(P9`H!=7vM=J?_gehpEMC3j zpzwL2-C4ap70T7}Q)%Tm)Y5Uk)#FcXycl8m*=gxoYw97&Rk313@gv`EnRxSR{7ju>3clXlkrmHXRZA1 zH(qO;XX(4b;@fF80HJ#8{O zb=Dq6SibVC{I9V1_L%;&!H&fM_azeS-$yQ*QN6oYxgrO-aD*)=s7>- z<8o`)vur#ZZT5Cr`#5Oje9-#qPp$sGWa&I;>D*@Nth96vuy|*g{w7QB<5oWRTfD2S zJnyvh?zeDPTY7(L>Fr_ZnP%b7w|vgB^uB2FTC2zVE!^pr{^u3q=g%Neb%9`3Pvt+V`Z zuy8vq{{7~jVf-sg@153{z|*w{$*h>AWYje`^<~oBLTSk3p92)2-aLS$a;l z@_Eqm@v`Z48_idfC=>mrw2l%lo*G3Z*YUg#?Y6yy^&|sckQe2fyxq$;BQGF*<0%u& zy7hN)eo=&X{?sUnt_69-JJQ+bStayje`I^czU28n{;5SKFG;q4O7r-k(`whi_ZwR@wnk(R`U^?J;u&4#-TV$M59IXQz!B(JW#&-jq zE&L>S4!i`oF^qbGfnXHSxBI5(Z;Dap=`xOfU~D0y-Dr25>Xj0(2h04)6%r2c8BmfLA~P1z!w?fU%$gOa~W$7O(htpe@f2Eey>qAlP)umkX$SF{g24PF3xXS;y$tQZUdV?hO&3Z{b#Knqv_ zt^(`8Mz9%d1$tk4H`oiF1kZt&fHu&3f>EFp%mGWl8gLz05A+`L-C#R-3_Jmz0SCZq zpg-ee377zCKqHt5R)KbK1GpJ%0eYW#2Y3YR15bljKrwSt1(*(6zzT2`*a)_Q2Y{X> zc@jJaUIKbpW*`^^rhqfSe6R$p0gnN_9NI4$&5FZ!=3&vy)oqKk2b0-59u}2Waa>Dj zbyY?e751=rc@7S`-p_Qa~opR~f<;{8mwEHk(0S?=O!&Tt505&}_pvT(iBJ}r+lObF?_*u^7t*169iE!+ ziOSV?te?oE>UMaR`i^xIYYEls@Er9W^lMV}(mPA}^$zQ$%1jruHqY-B@MCNMBbE!r0b$ybpjTPT^mGtlWk(UgLS0PfIy8N&6>tVLuK-TMcbW z=|4qn`#gU9PNc{C`}8!kt`6zh=k)!9BcXo0pXrjGpeq|Av!tDGIlFs|nna&bnUBm; z=CN*~&*;9rlU?U$b}7G*zeUb}&hq-@I)yP&-bwvLpDCgrj8qvWbiJS1PV|{2PIu1o z#^tLQ=!Bq99^T*U*V1P~T3RTOk36j4{Y;ns5NsE--#|SsU$(GWMHuJN z`-|hOF}A!$|LYt1g9wAJ_cL8O zV`%I1>3^!TaG+q&_x`3&I}2r4Lfar69S-mdVZ6-3Fvf&11+)>$rNe=EA&i&#FqMh9 zc_wY6uO0jrbiJSHCf0dFsDr+dt5-FhxSqVf=_kgSSDd~-tSQ*`ex{okXXd?4wljw= z1%2;t`s6RF;>pP@+wH9SfTnd(>}BqK4)r)PIP_ z`+40O%4wMO&l={766&snV|5#NYU|z2OIB00aX2rxaFkbQBNs475Jwy$#N+)zuBy({z1$nT2W2 zj3r8Uuhg9E{k-nv#C)$cU9T*Aklx?)6MeBK>B*+={Y^j7w)C4uHhu4J`ic2y6>Ydz zs?5Eg>C&#k+CzC7k|m!*!kkFs4{cES8ImKPu|8v3&{ux4>3e^lmg+<~DnHruy}#*G zjv?*J(~vCr3~8xOjAzPcVM^EgdAsF_@>4$3y57%p6XmD%Y+Bd*nJ#@Yq_>p(rFFfZ z>88f46SAcDgitSua!}gRy57&*txA-G(w5fsex{o!2c<2o>-|hOQ4T80ye#R>v-Fmd z-Y}MLbh`TO;Jnth<*QdNY@N}(tohQ`l`d_5J>YeGJf);R^yS-06JH-9Y{Tj$t5&Z} zj?G?XVaP`a(?~nXi`ue=@iGgO%Figx8B0_Kncq!DS$>)m<@5sSPV0Iv}(*hOz}2UA51&uJ<$D#5}gq z>G~HJLLGZQ({0JvRo?n#$y>irW{G)B`AF+}KX11(F^?%9X*@W177GuTV0rr10t_tRcxVG`|I`%3x#UaeCYFS9VT?@(6y4vfVUr^)-7F6}zxLC=unXSoOW{-(b$ zV_VOPRAxwFMSX0{k?t} zZ8(&>p8X&lS?|HU%)-!?Ll`~tLAhkT2lp}ylbB0&)_Q*G9^CtxF6)F)?mEZW>b1i? zxc4{x#9Co}Kk0Y82lsxao4DW88OM}QeDHB-m)_s>6MI8CYdAm0J-C-y7}|c^Z~DjS z&v_3%&*@m$#Q3hhT$E)lC<=2-YW_^?YW|FMu^Y-%b7hh4U+iFzkZRYpYv{9jMg zei@ddS7vHf_1C)=w=G{b(eIT;jZKYBWtC0!Ci|-n+v3u1-JYG({wa;tn3ZQ>*8EzixI%`^xtRdz9rdq-e|RhAC0gtka{-AKAq-V(paW1pG%aH;3y4{utyO zzuy)7x=zD{=sqjMMI=CJI56u|A!uZEvvT>0)|IOkx3=*ecz-L`7FE z$I-d|qt0=-Qvm+n`hPly-6K{1E6z`s&5^DDT{+S}bLH}u)&BcpRg=rgs_JVS52M^C z#_ekd+N#^9=cLo``&~ox!bPoNaIL7REUziAVTg2B*L6EyXUVy1m9?MJ9C@&zyQZwM zs{uN4ovuth~Im zv8u6dnlsIK6xjb2+}^i5w!H=q+1`9!y4+p6@uo{_8yd^&N_~xLtn1455S@?guKV~` zwu?L2wlZWqyt_@uzjvl~vW$HB}u}nT(B|uyJNH zaVVOS9JYO3wnft_Ya6SoD&kqB>$IPwGZEc2$L#N#nJ#l*E`D#gtf{hoa#`tNmCFG4 zyt#~PPgBvXn4Px$uIY>0R?RPqY9^Ofmo}99CU}UtJR$0-372alWh1)>I;GjI$Is)X zclOPu)z>zZS618P)pdEC9Ic;mjMO<9-z8-Kp3oYwOB=2^^|V z4UEUhFb_vv<|Q#2*VorH)zsA2Swvme$)q@*(7z5O#^cUq)?rj;$gi!bs$r4K)pb0l zb{dmsCdSRq@z}^*J8g0)lltMUjjB71%~6+e*a%%+SzA|G(HJVG>wJui>pzUqd%KLo z52w|oHDy&zHK9rlQC5@VIKo(6oEVpqWtAAQr&X7g)|TrB#Y5J`&`#s^)ExGcqjqh5 zO?Ca`T3baPs=jMGjoW(@<47_OJ`O*6H%*>aQP)^;nB_FC)A$|b=!=#Q_chbDsIk7R zuBx%|u-3zaJB{J@by-$^B(G>}te!kMthf(VR{cAT<-2m^BaG;Ejg^&6)n$h{4-M)x zrccdbKRL43*Orx*S67B5*CE>MsAxxb*Yu(}%paOJ*5`<0cILd4sJx+}vZ}@gkVCfH zQ=)w~U+=cLsWeC5)8=Q?P*+-A(=hGu#txoLEb{5syG=@edk)*v){ud=w#CbrMbjFp zYU>-C{K(PuxKR;3ZRJzLy^-v1&e4wIS*fY6w5+b7GIY4E?VlD^9OKh}0OQVnj`TOJ zUglQqZBczA3*WL@tKqKgzs)@Zsu)(7{h2w^Kc|)NR8FoctEsBjqe|}T+V+@em+8%c zmG+VxZHGq)6G!ZnH%+Ups-DLEzpk$17#7vYFxM8KKiB6-f1-UR;;JpHsAOQGGEV#U z#Divv-!3{|lF9#_okcF*v+&oeVChTYlz(f69mJB&1J?YVouDAu`@k&okUL!Z`|E() za(AU=58*pLhwOLwhqR=_{izGtUyz0Gho{5on;4(Z5ud&xp*VG=!_A>ja&CB5*|Q{) zt>3INeGgzk4w=sOzbl7KXYDV~A#0{`kFzy$I-NT2dPI(JI&->D4w=r9?wdoVGonw< zA=5j0J#)zP?%o)ag?1yS(wt91PRk*igv_smGwm&eTZ!!K9N~5%v)it?orZAv#d`kH zUp7oRhthIVLT1Gp%gT`r_rapHY!2N!`2)7^EDQ1ag9AAo0XBdYGHZ9W`x?@c{Et`uhO#Y#dN>w)3BMW5~`bCg^ z9oY~$xRPU+!u<$Y@Cz(G$#kA$sK4acC7I4)3}u#v4&SBx)(JJ3bAasBx=ifO0A zEkwpK6YfgOu0}REhwNr#Va%b4$CuJ_E3$i=y;oXx#s~blGLoicPh69ktJ1Rk4`=48 zwCva}Wc`qZxhfs**B{NyRcTrKb(y&;ExT-OX0A%hUi(;Pu1d?geLOQ)rDc~Q3v*Rk z)?-~}u1d?+APaL)Ly0|3v*Rkb_KF9SEXe;kcGJ_Eh}7~nXA&W>Bz!3LD!EjrKKeyqf5n?WLF^z z<8E4Z8?q1&%|E^rZfnA3TDCh8Za^H$#$;q+TuRG+pRk#hb>EOXoX)2{#p2QLHsMk_ zb*6L}BhxaS_Z-IgwCsz>!d!J?FbK=$FOY>Y3uP`9$zDYk=Bkj-ARF-M%($DD>Aclo zD~w$soX$%P`f1rrWFZe>TnpjWBy6T->yh=7B3D{=7qT!{rDcyG3v*Rk_FH5j51|ZX zU*+-!vQQ6c+2qe;@|TuPM;7KPj@F4U*?c#$zUGsbU5f1OIb?Sst1?;0i=49g1hU#3 zvc4NLb5%Or+mPi7*M=<2Rq1f|A`5kzmOYFtlyO@2Yh;gDIzwBOQ+fF6Cil%yCr!&n ze>PLMY1!GxLLH@L`Vij-oyAPsms9cm8Ch8CrNg~}EVR!O1+Yuu#(a)*BF$Z5ERt*? zval{Mk*8gf-Hq%k<}NW7Np|kdnKm&ZC7X}z|CnD|_TF1EZ8t4jiEL_)aNj@{>L?xV zab!Qv5$?8I*^|g2JMK2lNXa2^2icSyvh`hr+lP#Anz<_--|R1B+HP2nNKxu7$WC>kGHaC}y9pV~K6jhW|(5eur$L`Gt8xPRRz{nOTD+W%;bEdr1MU@C?dW zboK7GuHYv=#m(mWHn~m|))&3>wN%bWV+Ts#^3wNJiy8U*(c1gFuX*W9wSyQ(^~JBD z%umCk5_U93vZ@=!Q#fOY^GN=u^e+B8u#>QF76T~5%fS!92+HnCp#5c?tMw7E@NM(X zZ);uIHgDzf1w3goamA9=OL?nyUgPqGyj{C&RolEX7Oy&U^@4ft*TX{dRxDqM*TS|% z%_~>TbI+*Qzx*<1PpZs|pH!LH*xI)E(q*kHCoXI|ViC=0UAkfkFOMBrn{BJ+*{`uj z+-_p0^@!WnF91i}XlCpGh?@?({zu$!yxo7KEgxxn^EzzqA93r6#+KRES1fP*;f+5q z1h_HR|ARx922g(;AI*qe*4 zT)KGGqU^(mA5r|jis&sgJ@1n6bI{>NvTs1^;@_P%;&1(pKrV2ehtXR4*V4nyB_h+k#!sRSo-sL{1^Bgcmcc!eh>Zt4uFH; zkKj+>CGax%-{8+c2|59s2(%wG2xyN(_pRFNSAdbVLBwO0&3O*rw`OSre>hbOs9aPJ^pTc~Vd z0+lID;cuO5b31Zj9e)d|58)~b@&*!eGjRzzyH~h@utSJ%Dt@~t+^`^cGyDKHFcrND zw0H6sKo+BC!EeETg6F{B(_UU7d?CozX2#>M`(CQZHBdELip_P3(0&Hs9t_lZhJsVT zk!UlgW9J>QY{8_WUcgLi}X z0JXch;Jx5NFb`Y=-UluQ^FcFM02YE4&?gjq@z7FmK+rT%#KZEVye(+83E${$%5PTba2kZbl!FR#;z%K9*_&)dn*bVl8 zAA*O$Bj8c+FW^VuG4MF}G587C3w{cI2KIw};D3RC1^)(~06z!60RIl21W$oqg8u+d zgI|GPgWrH>z-TZA9K8-*0xI9dWnOWYMeU^*eWFc9T?8#3y?;_ssdb z=bm%!J$ELDj=zE)06C6p*MLv?6ewx@*Jz&Vq4l2);iG{|8$LA-UfM8w#*M627&Jns zY1JIx4`QpTtg!7{u5Xp6D^@e8D|>LTuqkzYWD+=N^uW3O^GdebWtbaQ7%PB0C4Gt1 zzJpJTqr?HM(zKbxEdq&O!#pwN0zD`_FQ)R>eWt942;bcfObb!sa#D!pa0*ztT=q|R zD+xa{&6D4sF?`ywIv4Xf)=y+{NUmwzq%>H-DLah98aW+XiG(Ct;8+ADMsJ783uvfg zJw>JX8sb<4C189JtI1VTSAxW5q8DFVz-rdq5aGXoZRQrvmH@Zmrco0QlA^C+oF~q$ z-okVXYpxnA^E);oq^R``12wlW`$8~46me>y&^IsE$($A2(J#IX@I**j^hKO2Y)9X= zjWFkh**0D|Fm9w#OAXGB*`xNZ(Oo<5CBwWt;>&b8a-QdnGv4ADsl=h{HzKk4iFLh) z&yk}QZ0b$U$jH8k@56Cac;rJk#Bbwe;`PQg;s=Qfc-=T}^x;e6BJuZHo;SsQP~!=6 zr&&N?K0^E=F_%dFCY4!*yKpaSA>1&YrN3c(z(aDx63gdqSwNAR6PkN1{}od*@LtM& zi*@7{Qtk&>%96%LTm4 zxsT!^Y}`c7X0<-X1V->Q@pg^Z;Xck1n>TTR)svM&uyOG#ElmD;^pMPQ%r7@j)e?A& zQ#v;UH3kl7{Zd)y0=oZDP;Yzc0UQZ~mI`B6MfQw}f_7LVRaTMP@KtEnBD?N+=xA`j zjRN29PC_%P1)=9wQJITk)x>o5aaD^`uIsYn;*jGz4HY6x7bBk;@8j8XJohOlb^{+1 zZ7*(zYRW$ybc|CO>{=XzXsGyP7Fp(2WSLd8h|XkZ9j~pj1!vlR>^7A>5j0z_r^1Q~ z&$`SXi9p9Oqde!FrlLJDo2lB471D`fMpf1I+<305?N+Co|KgHn%TMq{Q4X4&<*`q( z=1#2YqUrieDr=Wrr{M=t?A9WbRkht<84m~k(MW|$?Xz?`?z*mK)M*tezosUiXggkn z*|}CH8=?0*e%(_HBo=OO7&KE!8UyEh++NwAJyE2ZRc}sjLx)N2B!s|Me#~R0JWSSI zZrFGjJQ+DvZ&7N?6qT6S>tnn709-@};Im(juonWfp!kd_SJc>;(a!*FN^6=1eu-Dk zt;uaX{Oa0w-ng=G{si)$JayvO+Of+o_4E}7I0k#z*6fMmfS^J4lTjSZ<%K62%vpw! z@3l;0XsBdhS10SNF=m6ni)>!1f#2}vq(=4Z1dg{|udc#=xs~~2H%b%t!ZdHawGT#d z^YGT3h2oAr@m}1~-``UlC=Qspeg@FXWrug?4fePI33*onx5+&=Yp!`HbXwf%$#XT; zlH$*vky1*>r|&jxEVL!m^^m;-6V1tqAS`>{A;;r*Kde$tp4y6(Gj_wTUmjph{ ztz@hQV~T0zQr`FzPd_p&gYUNNH-;){;7&$lbnMHzyK34`YsoqmZAW=nySB$@8!{qS z_pZb;%3kdbFxJhqmuzBf>oazb^>WZ8kAK|lHj=npX69>8Htzws8S3;WUqiqaoyS3H z8+w%qeUHrPOd2@D2%uXg)-g?|a;cWYlvQ51|30=cUAN?JtMeACF`DJo>()(bDBo{V k>pjdeVopu&mWMfJ@OSg17B?(d$^Q(aci*rTxS Date: Tue, 8 Jul 2014 15:43:50 -0400 Subject: [PATCH 12/35] Removing files not needed --- ports/csharp/Jison/Jison.v12.suo | Bin 5632 -> 75264 bytes ports/csharp/Jison/Jison/bin/Debug/Jison.exe | Bin 64000 -> 0 bytes .../Jison/Jison/bin/Debug/Jison.exe.config | 6 ------ ports/csharp/Jison/Jison/bin/Debug/Jison.pdb | Bin 132608 -> 0 bytes .../Jison/Jison/bin/Debug/Jison.vshost.exe | Bin 24216 -> 0 bytes .../Jison/bin/Debug/Jison.vshost.exe.config | 6 ------ .../Jison/bin/Debug/Jison.vshost.exe.manifest | 11 ----------- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6824 -> 0 bytes .../Jison.Properties.Resources.resources | Bin 180 -> 0 bytes .../Debug/Jison.csproj.FileListAbsolute.txt | 8 -------- .../Debug/Jison.csproj.GenerateResource.Cache | Bin 919 -> 0 bytes ...Jison.csprojResolveAssemblyReference.cache | Bin 1755 -> 0 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.exe | Bin 64000 -> 0 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.pdb | Bin 132608 -> 0 bytes .../Properties.Resources.Designer.cs.dll | Bin 4096 -> 0 bytes 15 files changed, 31 deletions(-) delete mode 100755 ports/csharp/Jison/Jison/bin/Debug/Jison.exe delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.exe.config delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.pdb delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.config delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csprojResolveAssemblyReference.cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.exe delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.pdb delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index cfb792f2841f191bfd113ed5782759705c292ee3..6170e40d673aa27aa31441e0a4fb0aa73433457e 100644 GIT binary patch literal 75264 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 CS?8$$ delta 348 zcmZoT!_uHLL1%JLAFqf20|N^K0|O%v|NH;{KagTz-Wa%^abf|>Bqkq5rpby-@_Ywk zreC`_>pUYnP}YHIaurh*Bgf>gZ2lY|ZOlMC`NB$_$ra4rlMgc)3WChL0>mHyGV|}m zL}5-4g99Y6IZz8^x&gxU4Nn?{9>Yv$2Ab|U*;&SLQW(qRA8bD8Rs^tsj0f7MG5HI- zh$JhJ^A~6|$aoM20ZyRU|H*+I=QkDzFizqznH<4!Vq*ad<0Ju>$w!zBSV7LXHu>T? z@5x6*Z6-fB2NXrnllnO(bMQz^4&gYnu|R}z(~1p@0-{XJbyJIe@^QA5oR8u7qdob+ bN{7h@bWJutIH$k}G+@o59gHA8ka-3Gs}g|o diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.exe b/ports/csharp/Jison/Jison/bin/Debug/Jison.exe deleted file mode 100755 index fda9a7134ea9a5f6f16ff727aa6776e766020731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64000 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 - - - - - \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb b/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb deleted file mode 100644 index 8d05e19f78b2d29b0182abd4690192c31d950f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132608 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 - - - - - \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest b/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest deleted file mode 100644 index 061c9ca95..000000000 --- a/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index e9350f2fce01b536726f0d04548a1998d0bfbde3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6824 zcmeHMZByGu5VpZwFoYJ1+-poqBfy zTo1pczo65f*zU?NyoUCJG{XnWXMEINyGbe@hNxx6>yikgHmfKo8(#*$MsR`&^5`Kd>*SX84ZR$JRp_=u2qE^i|Lf2iF)MJN2?)RE% z)PlBKXWG_<>%e;Nqq0V2lj;7jYG^5@-+>YJh&O#9S(!B`xMIUs8s>L0yN=-}S9j`| z>vX-%FE?@Tg8uZVybJ48`rI_jTryh=$(foA98G1FQEBgPQoXAto97hcffNn!5Uy%U zvL;trwoV3QVPTq~3unO4X=j{5nLgL_R``6M$%mJ#%UlI6Z6VY z7#Xja&m^~vH{gQz#qI4Yx z<9cz{k=$m7L5yWHcsqguxIij<0|fkxqR65cLop6wjNAm7A`>89wkusa^t=k}_>f9w z_8F{cyj!dFiDBUYUhst;tL!q!wWDM55!h*$o|``_pp>Q*7L(ct+|cuwG|R#cJ?3j= zzT*0IXqkIl3EvEa1eL9JsSL~?B2`BUYtJk*D{O*PKrL%Pe=1A~_n^;pE3CmJ^MN)Q zHnn$I_G4VlB#4=_6Yf!ZoH)rr`y{sK`zy*XkSWk+qV`Yl&Qshax8QCJb;kVMd~qfF zDg2#7ALExyqc9G+?>PiHd&Y2Fm)wc&*b&R&HlTmWT@XLT<(7`8j6FqW;xubTS&2n8 znFX`I#WmX+@O85xq!+r>h&G&j2KFm)*?$oPh8<-?{8ML2oD z(aGVIsip>sD$^%|#G??Ao8QzJWy|G`Fg4mt%qX!$$Sf7V^Bd<@DOSi1aR1ty8O zk9+fDPV%8gnjSpJf?Qn## diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources b/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt deleted file mode 100644 index e068f4738..000000000 --- a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,8 +0,0 @@ -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe.config -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.pdb -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csprojResolveAssemblyReference.cache -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.Properties.Resources.resources -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csproj.GenerateResource.Cache -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.exe -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.pdb diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache deleted file mode 100644 index 6d2fbfad1909441196a5718ce02f5bdf4b889eb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcma)4%}N|W5T4PQb!T>k@eo9k!xB6QF2k-O$z=(+Vj@xS56K}AdZuegv%S+xSC6`tt{4vG z&OmI7kl8kxNlpPjLb(SsC?%A+0$e0;WC6eID-F0ZGuDYr!=cKouyntg38Ygw0m+Cx zWg&OQ&V#^z+syH}I_rHQjGSCEa=VI934#4vC*2|N?YNYo{la6VhYHP}K951WVJ`Jio5s2(!@ z@g4mzQMmdrFms-;&4OGhrttbnTnltZMyf)AeD&lGt`s_Kk*H%MO<8QS| zmy}TL@p6&Dg^&;pB$0ruY7kOLSA~t)E8Ag|f+tl7!rmp~Op*}=47*xTP(=7Ibwv@( zeMbB~@g(Cb^L#1}izb8vZ{Vg5^WliIY3Kv5;DbT<1BxmmQ9dR#0bv-0f>A2fD$BI? zF86w}B<8(;_W%89`>lylnKuKsRM7}>^8z0!W{)A3v=d@f(dZfC5oIp)t_yQXQD@2aJVhPJ!yZs)a`!+bE{>!f=+3G>xS n_jMB1Lnl4ZNmwtP^iU^ZJ$2H$PQrTYqz#>f=b@7xX{6d;TgCng diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.exe b/ports/csharp/Jison/Jison/obj/Debug/Jison.exe deleted file mode 100644 index fda9a7134ea9a5f6f16ff727aa6776e766020731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64000 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 k>pjdeVopu&mWMfJ@OSg17B?(d$^Q(aci*rTxS Date: Tue, 8 Jul 2014 16:08:17 -0400 Subject: [PATCH 13/35] Implement the unput fix defined in php port --- ports/csharp/Jison/Jison.v12.suo | Bin 75264 -> 47104 bytes ports/csharp/Jison/Jison/Template.cs | 35 +++++++++++++++++------ ports/csharp/Jison/Jison/Test/Formula.cs | 35 +++++++++++++++++------ 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index 6170e40d673aa27aa31441e0a4fb0aa73433457e..a2b93fbad263856ab2317a080248c2e95734d0f8 100644 GIT binary patch delta 2255 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 UnputStack = new JList(); public void Trace() { @@ -272,20 +273,23 @@ public string Input() public void Unput(string ch) { + var yy = new /**/ParserValue/**/(); int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - //TODO: not really compatible?? _Input.unCh(ch.Length); - Yy.Text = Yy.Text.Substring(0, len - 1); + yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; + if ((lines.Length - 1) > 0) + { + yy.LineNo -= Yy.LineNo - lines.Length - 1; + } var r = Yy.Loc.Range; - Yy.Loc = new ParserLocation( + yy.Loc = new ParserLocation( Yy.Loc.FirstLine, Yy.LineNo + 1, Yy.Loc.FirstColumn, @@ -301,8 +305,10 @@ public void Unput(string ch) ); if (Ranges.Count > 0) { - Yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); + yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); } + + UnputStack.Push(yy); } public void More() @@ -341,7 +347,12 @@ public string ShowPosition() public ParserSymbol Next() { - if (Done == true) + if (UnputStack.Count > 0) + { + Yy = UnputStack.Pop(); + } + + if (Done == true) { return Eof; } @@ -747,9 +758,17 @@ public void Push(T item) Add(item); } - public void Pop() + public T Pop() { - RemoveAt(Count - 1); + var i = Math.Max(0, Count); + if (i == 0) + { + return null; + } + + var val = this[i]; + RemoveAt(i); + return val; } new public T this[int index] diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index 656314c29..041ac81ea 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -20,6 +20,7 @@ public class Formula public const int Shift = 1; public const int Reduce = 2; public const int Accept = 3; + public JList UnputStack = new JList(); public void Trace() { @@ -2340,20 +2341,23 @@ public string Input() public void Unput(string ch) { + var yy = new Expression(); int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - //TODO: not really compatible?? _Input.unCh(ch.Length); - Yy.Text = Yy.Text.Substring(0, len - 1); + yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; + if ((lines.Length - 1) > 0) + { + yy.LineNo -= Yy.LineNo - lines.Length - 1; + } var r = Yy.Loc.Range; - Yy.Loc = new ParserLocation( + yy.Loc = new ParserLocation( Yy.Loc.FirstLine, Yy.LineNo + 1, Yy.Loc.FirstColumn, @@ -2369,8 +2373,10 @@ public void Unput(string ch) ); if (Ranges.Count > 0) { - Yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); + yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); } + + UnputStack.Push(yy); } public void More() @@ -2409,7 +2415,12 @@ public string ShowPosition() public ParserSymbol Next() { - if (Done == true) + if (UnputStack.Count > 0) + { + Yy = UnputStack.Pop(); + } + + if (Done == true) { return Eof; } @@ -2913,9 +2924,17 @@ public void Push(T item) Add(item); } - public void Pop() + public T Pop() { - RemoveAt(Count - 1); + var i = Math.Max(0, Count - 1); + if (i == 0) + { + return null; + } + + var val = this[i]; + RemoveAt(i); + return val; } new public T this[int index] From 9dc6f370d67902639d8b2a3eddc08b99f42dcbec Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 5 Aug 2014 13:59:55 -0400 Subject: [PATCH 14/35] Make c# entity a bit cleaner Getting ready to bring unit test into Spreadsheets/csharp-sheet --- ports/csharp/Jison/Jison.v12.suo | Bin 47104 -> 78336 bytes ports/csharp/Jison/Jison/Jison.csproj | 6 +- ports/csharp/Jison/Jison/Test.cs | 31 ++---- ports/csharp/Jison/Jison/Test/Cell.cs | 4 +- ports/csharp/Jison/Jison/Test/Expression.cs | 2 +- ports/csharp/Jison/Jison/Test/Formula.cs | 48 ++++----- ports/csharp/Jison/Jison/Test/FormulaBase.cs | 21 ++++ ports/csharp/Jison/Jison/Test/Functions.cs | 2 +- ports/csharp/Jison/Jison/Test/Location.cs | 26 +---- ports/csharp/Jison/Jison/Test/Row.cs | 51 +++++++++ .../csharp/Jison/Jison/Test/RowDictionary.cs | 13 --- ports/csharp/Jison/Jison/Test/Spreadsheet.cs | 98 ++++++++---------- .../Jison/Jison/Test/SpreadsheetDictionary.cs | 19 ---- ports/csharp/Jison/Jison/Test/Spreadsheets.cs | 88 ++++++++++++++++ .../Jison/Test/SpreadsheetsDictionary.cs | 10 -- ports/csharp/Jison/Jison/Test/formula.jison | 20 ++-- 16 files changed, 262 insertions(+), 177 deletions(-) create mode 100644 ports/csharp/Jison/Jison/Test/FormulaBase.cs create mode 100644 ports/csharp/Jison/Jison/Test/Row.cs delete mode 100644 ports/csharp/Jison/Jison/Test/RowDictionary.cs delete mode 100644 ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs create mode 100644 ports/csharp/Jison/Jison/Test/Spreadsheets.cs delete mode 100644 ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index a2b93fbad263856ab2317a080248c2e95734d0f8..c17dc66d271cd1f2bbbea8153bd0ff0c4fca3b36 100644 GIT binary patch delta 8240 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 delta 5073 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 b8z(JAN|IX%S?!k{j+JkvzLzo5%1!(ivu<{( diff --git a/ports/csharp/Jison/Jison/Jison.csproj b/ports/csharp/Jison/Jison/Jison.csproj index f218632e2..173fd5861 100644 --- a/ports/csharp/Jison/Jison/Jison.csproj +++ b/ports/csharp/Jison/Jison/Jison.csproj @@ -75,15 +75,15 @@ + + - - - + diff --git a/ports/csharp/Jison/Jison/Test.cs b/ports/csharp/Jison/Jison/Test.cs index c56b08731..d85161ede 100644 --- a/ports/csharp/Jison/Jison/Test.cs +++ b/ports/csharp/Jison/Jison/Test.cs @@ -1,7 +1,6 @@ using System; -using jQuerySheet; -namespace jQuerySheet +namespace Sheet { public class Test { @@ -11,29 +10,17 @@ public Test () public static void Main() { - Spreadsheet.Spreadsheets = new SpreadsheetsDictionary(); - var spreadsheetsDictionary = new SpreadsheetDictionary(); - Spreadsheet.Spreadsheets.Add(0, spreadsheetsDictionary); - var row = new RowDictionary(); - spreadsheetsDictionary.Add(0, row); + var spreadsheets = new Spreadsheets(); + var spreadsheet = spreadsheets.AddSpreadsheet(); - var cellA1 = new Cell(0, 0, 0); - cellA1.Value = "250"; - var cellB1 = new Cell(0, 0, 1); - cellB1.Value = "250"; - var cellC1 = new Cell(0, 0, 2); - cellC1.Formula = "800 - SUM(A1:B1) + 100"; - cellC1.HasFormula = true; + var row = spreadsheet.AddRow(); - row.Add(0, cellA1); - row.Add(1, cellB1); - row.Add(2, cellC1); + var cellA1 = row.AddCell("250"); + var cellB1 = row.AddCell("250"); + var cellC1 = row.AddCell("800 - (SUM(A1:B1) + 100)", true); - //var spreadsheet = new Spreadsheet(); - //spreadsheet.Calc(); - - var parsedCell = Spreadsheet.Spreadsheets[0][0][2]; - var value = parsedCell.UpdateValue(); + var cell = spreadsheet["C", 1]; + var value = cell.UpdateValue(); Console.Write(value.ToDouble()); Console.Read(); } diff --git a/ports/csharp/Jison/Jison/Test/Cell.cs b/ports/csharp/Jison/Jison/Test/Cell.cs index 897a2bc1b..4343987af 100644 --- a/ports/csharp/Jison/Jison/Test/Cell.cs +++ b/ports/csharp/Jison/Jison/Test/Cell.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace jQuerySheet +namespace Sheet { public class Cell { @@ -15,6 +15,7 @@ public class Cell public DateTime CalcLast = new DateTime(); public int CalcCount = 0; public Stack State = new Stack(); + public Row Parent; public Cell() { @@ -40,6 +41,7 @@ public Expression UpdateValue() State.Push ("Parsing"); CalcCount++; var formula = new Formula(); + formula.Setup(this); var value = formula.Parse (Formula); State.Pop (); return value; diff --git a/ports/csharp/Jison/Jison/Test/Expression.cs b/ports/csharp/Jison/Jison/Test/Expression.cs index e88a8a353..d5ed45fb9 100644 --- a/ports/csharp/Jison/Jison/Test/Expression.cs +++ b/ports/csharp/Jison/Jison/Test/Expression.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Jison; -namespace jQuerySheet +namespace Sheet { public class Expression : ParserValue { diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index 041ac81ea..f88b6bb60 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -4,9 +4,9 @@ using System.Linq; -namespace jQuerySheet +namespace Sheet { - public class Formula + public class Formula : FormulaBase { public ParserSymbols Symbols; public Dictionary Terminals; @@ -1846,7 +1846,7 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 9: // - + thisS = ss[so - 1]; break; case 10: @@ -1976,47 +1976,47 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r - thisS = Spreadsheet.CellValue(Location.ParseFixed(ss[so].Text)); + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed(ss[so].Text)); break; case 29: - - - - thisS = Spreadsheet.CellValue(Location.ParseFixed(ss[so-2].Text), Location.ParseFixed(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed(ss[so - 2].Text), MySpreadsheet.ParseFixed(ss[so].Text)); break; case 30: - - - - thisS = Spreadsheet.CellValue(Location.Parse(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.Parse(ss[so].Text)); break; case 31: - - - - thisS = Spreadsheet.CellValue(Location.Parse(ss[so-2].Text), Location.Parse(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.Parse(ss[so - 2].Text), MySpreadsheet.Parse(ss[so].Text)); break; case 32: - - - - thisS = Spreadsheet.CellValue(Location.ParseRemote(ss[so-2].Text, ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote(ss[so - 2].Text, ss[so].Text)); break; case 33: - - - - thisS = Spreadsheet.CellValue(Location.ParseRemote(ss[so-4].Text, ss[so-2].Text), Location.ParseRemote(ss[so-4].Text, ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote(ss[so - 4].Text, ss[so - 2].Text), MySpreadsheet.ParseRemote(ss[so - 4].Text, ss[so].Text)); break; diff --git a/ports/csharp/Jison/Jison/Test/FormulaBase.cs b/ports/csharp/Jison/Jison/Test/FormulaBase.cs new file mode 100644 index 000000000..324e88c62 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/FormulaBase.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sheet +{ + public class FormulaBase + { + public Cell Parent; + public Spreadsheet MySpreadsheet; + public Spreadsheets MySpreadsheets; + + public void Setup(Cell cell) + { + Parent = cell; + MySpreadsheet = cell.Parent.Parent; + MySpreadsheets = MySpreadsheet.Parent; + } + } +} diff --git a/ports/csharp/Jison/Jison/Test/Functions.cs b/ports/csharp/Jison/Jison/Test/Functions.cs index eff5cb715..af43a4242 100644 --- a/ports/csharp/Jison/Jison/Test/Functions.cs +++ b/ports/csharp/Jison/Jison/Test/Functions.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Jison; -namespace jQuerySheet +namespace Sheet { public static class Functions { diff --git a/ports/csharp/Jison/Jison/Test/Location.cs b/ports/csharp/Jison/Jison/Test/Location.cs index 6864d4aec..edb812ab8 100644 --- a/ports/csharp/Jison/Jison/Test/Location.cs +++ b/ports/csharp/Jison/Jison/Test/Location.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.RegularExpressions; -namespace jQuerySheet +namespace Sheet { public class Location { @@ -48,26 +48,6 @@ public Location () static readonly public Regex Cell = new Regex("^([A-Z]+)([0-9]+)"); - public static Location Parse(string id) - { - return new Location(id); - } - - public static Location ParseRemote(string sheet, string id) - { - return new Location(sheet, id); - } - - public static Location ParseFixed(string id) - { - return new Location(id, true); - } - - public static Location ParseRemoteFixed(string sheet, string id) - { - return new Location(sheet, id, true); - } - public void ParseCellId(string id) { var match = Cell.Match(id); @@ -76,7 +56,6 @@ public void ParseCellId(string id) Col = Alphabet[match.Groups[1].Value]; Row = Convert.ToInt32(match.Groups[2].Value) - 1; } - Sheet = Spreadsheet.ActiveSpreadsheet; } public void ParseSheetId(string sheet) @@ -85,9 +64,10 @@ public void ParseSheetId(string sheet) Sheet = Convert.ToInt32(sheet); } - public Location(string id) + public Location(Spreadsheet spreadsheet, string id) { ParseCellId(id); + Sheet = spreadsheet.Index; } public Location(string sheet, string id) diff --git a/ports/csharp/Jison/Jison/Test/Row.cs b/ports/csharp/Jison/Jison/Test/Row.cs new file mode 100644 index 000000000..fe130b720 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/Row.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; + +namespace Sheet +{ + public class Row: Dictionary + { + public Spreadsheet Parent; + public int CellIndex = -1; + + public Row () + { + } + + public Cell AddCell() + { + return AddCell("", false); + } + + public Cell AddCell(string value) + { + return AddCell(value, false); + } + + public Cell AddCell(string value, bool isFormula) + { + var cell = new Cell(); + CellIndex++; + cell.Parent = this; + + if (isFormula) + { + cell.Formula = value; + cell.HasFormula = true; + } + else + { + cell.Value = value; + } + + Add(CellIndex, cell); + return cell; + } + + public Cell this[string col] + { + get { return this[Location.Alphabet[col]]; } + } + } +} + diff --git a/ports/csharp/Jison/Jison/Test/RowDictionary.cs b/ports/csharp/Jison/Jison/Test/RowDictionary.cs deleted file mode 100644 index a29ecd704..000000000 --- a/ports/csharp/Jison/Jison/Test/RowDictionary.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace jQuerySheet -{ - public class RowDictionary : Dictionary - { - public RowDictionary () - { - } - } -} - diff --git a/ports/csharp/Jison/Jison/Test/Spreadsheet.cs b/ports/csharp/Jison/Jison/Test/Spreadsheet.cs index 44be3f8fe..a8fdc7f10 100644 --- a/ports/csharp/Jison/Jison/Test/Spreadsheet.cs +++ b/ports/csharp/Jison/Jison/Test/Spreadsheet.cs @@ -1,73 +1,67 @@ -using System; -using System.Text; -using System.Threading.Tasks; +using System; using System.Collections.Generic; -namespace jQuerySheet +namespace Sheet { - public class Spreadsheet - { - static public int ActiveSpreadsheet = 0; - static public SpreadsheetsDictionary Spreadsheets; - - - public SpreadsheetsDictionary Calc() + public class Spreadsheet : Dictionary + { + public Spreadsheets Parent; + public int Index; + public int RowIndex = -1; + public Row AddRow() { - foreach (var Spreadsheet in Spreadsheets.Values) { - foreach (var row in Spreadsheet.Values) { - foreach (var cell in row) { - cell.Value.UpdateValue(); - } - } - } - - return Spreadsheets; + var row = new Row(); + RowIndex++; + row.Parent = this; + Add(RowIndex, row); + return row; } - public static DateTime CalcLast; + public Cell this[string colString, int rowInt] + { + get { + var row = this[rowInt - 1]; + + var colInt = Location.Alphabet[colString]; + var cell = row[colInt]; + return cell; + } + } - public static Expression UpdateCellValue(Cell cell) + public Cell this[int colInt, int rowInt] { - if (cell.HasFormula && cell.State.Count < 1) + get { - cell.State.Push("Parsing"); - cell.CalcCount++; - cell.CalcLast = CalcLast; - var formula = new Formula(); - var value = formula.Parse(cell.Formula); - cell.State.Pop(); - return value; + var row = this[rowInt]; + var cell = row[colInt]; + return cell; } - return cell.Exp; } - public static Expression CellValue(int spreadsheet, int row, int col) - { - var cell = Spreadsheets[spreadsheet][row][col]; - var value = UpdateCellValue(cell); - return value; - } + public Spreadsheet(int index) + : base() { + Index = index; + } - public static Expression CellValue(Location loc) + public Location Parse(string id) { - var cell = Spreadsheets[loc.Sheet][loc.Row][loc.Col]; - var value = UpdateCellValue(cell); - return value; + return new Location(this, id); } - public static Expression CellValue(Location locStart, Location locEnd) + public Location ParseRemote(string sheet, string id) { - var range = new Expression(); + return new Location(sheet, id); + } - for (var row = locStart.Row; row <= locEnd.Row; row++) - { - for (var col = locStart.Col; col <= locEnd.Col; col++) - { - range.Push(Spreadsheets[locStart.Sheet][row][col].UpdateValue()); - } - } + public Location ParseFixed(string id) + { + return new Location(id, true); + } - return range; + public Location ParseRemoteFixed(string sheet, string id) + { + return new Location(sheet, id, true); } - } + } } + diff --git a/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs b/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs deleted file mode 100644 index a4441bf0c..000000000 --- a/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using jQuerySheet; - -namespace jQuerySheet -{ - public class SpreadsheetDictionary : Dictionary - { - public int RowIndex = -1; - public RowDictionary ActiveRow; - public void AddRow() - { - ActiveRow = new RowDictionary(); - RowIndex++; - Add (RowIndex, ActiveRow); - } - } -} - diff --git a/ports/csharp/Jison/Jison/Test/Spreadsheets.cs b/ports/csharp/Jison/Jison/Test/Spreadsheets.cs new file mode 100644 index 000000000..7831afec8 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/Spreadsheets.cs @@ -0,0 +1,88 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +namespace Sheet +{ + public class Spreadsheets : Dictionary + { + public int ActiveSpreadsheet = -1; + public int SpreadsheetIndex = -1; + + public void Calc() + { + foreach (var spreadsheet in Values) { + foreach (var row in spreadsheet.Values) { + foreach (var cell in row) { + cell.Value.UpdateValue(); + } + } + } + } + + public DateTime CalcLast; + + public Expression UpdateCellValue(Cell cell) + { + if (cell.HasFormula && cell.State.Count < 1) + { + cell.State.Push("Parsing"); + cell.CalcCount++; + cell.CalcLast = CalcLast; + var formula = new Formula(); + var value = formula.Parse(cell.Formula); + cell.State.Pop(); + return value; + } + return cell.Exp; + } + + public Expression CellValue(int spreadsheet, int row, int col) + { + Cell cell = Values.ElementAt(spreadsheet) + .Values.ElementAt(row) + .Values.ElementAt(col); + + var value = UpdateCellValue(cell); + return value; + } + + public Expression CellValue(Location loc) + { + Cell cell = Values.ElementAt(loc.Sheet) + .Values.ElementAt(loc.Row) + .Values.ElementAt(loc.Col); + + var value = UpdateCellValue(cell); + return value; + } + + public Expression CellValue(Location locStart, Location locEnd) + { + var range = new Expression(); + + for (var row = locStart.Row; row <= locEnd.Row; row++) + { + for (var col = locStart.Col; col <= locEnd.Col; col++) + { + range.Push( + Values.ElementAt(locStart.Sheet) + .Values.ElementAt(row) + .Values.ElementAt(col).UpdateValue() + ); + } + } + + return range; + } + + public Spreadsheet AddSpreadsheet() + { + SpreadsheetIndex++; + var spreadsheet = new Spreadsheet(SpreadsheetIndex); + spreadsheet.Parent = this; + Add(SpreadsheetIndex, spreadsheet); + return spreadsheet; + } + } +} diff --git a/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs b/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs deleted file mode 100644 index 0c0dfa11e..000000000 --- a/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace jQuerySheet -{ - public class SpreadsheetsDictionary : Dictionary - { - } -} - diff --git a/ports/csharp/Jison/Jison/Test/formula.jison b/ports/csharp/Jison/Jison/Test/formula.jison index 9814f4636..c37e931a8 100644 --- a/ports/csharp/Jison/Jison/Test/formula.jison +++ b/ports/csharp/Jison/Jison/Test/formula.jison @@ -1,5 +1,6 @@ //option parserValue:Expression -//option namespace:jQuerySheet +//option namespace:Sheet +//option extends:FormulaBase /* description: Parses end evaluates mathematical expressions. */ /* lexical grammar */ @@ -204,7 +205,10 @@ expression : { //js $$ = yy.handler.number.apply(yy.obj, [$2]); - // + + /*cs + $$ = $2; + */ } | expression '<' '=' expression { @@ -417,7 +421,7 @@ cell : //php $$ = $this->fixedCellValue($1); /*cs - $$ = Spreadsheet.CellValue(Location.ParseFixed($1.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed($1.Text)); */ } | FIXEDCELL ':' FIXEDCELL @@ -428,7 +432,7 @@ cell : //php $$ = $this->fixedCellRangeValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.ParseFixed($1.Text), Location.ParseFixed($3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed($1.Text), MySpreadsheet.ParseFixed($3.Text)); */ } | CELL @@ -439,7 +443,7 @@ cell : //php $$ = $this->cellValue($1); /*cs - $$ = Spreadsheet.CellValue(Location.Parse($1.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.Parse($1.Text)); */ } | CELL ':' CELL @@ -450,7 +454,7 @@ cell : //php $$ = $this->cellRangeValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.Parse($1.Text), Location.Parse($3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.Parse($1.Text), MySpreadsheet.Parse($3.Text)); */ } | SHEET '!' CELL @@ -461,7 +465,7 @@ cell : //php $$ = $this->remoteCellValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.ParseRemote($1.Text, $3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote($1.Text, $3.Text)); */ } | SHEET '!' CELL ':' CELL @@ -472,7 +476,7 @@ cell : //php $$ = $this->remoteCellRangeValue($1, $3, $5); /*cs - $$ = Spreadsheet.CellValue(Location.ParseRemote($1.Text, $3.Text), Location.ParseRemote($1.Text, $5.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote($1.Text, $3.Text), MySpreadsheet.ParseRemote($1.Text, $5.Text)); */ } ; From 49c624ae1967b459df1f3285169e1e915e97bc9d Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Thu, 31 Oct 2013 18:24:46 -0400 Subject: [PATCH 15/35] Buffer was overflowing, switched to spawn for more stability --- ports/php/php.js | 206 ++++++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 101 deletions(-) diff --git a/ports/php/php.js b/ports/php/php.js index 5e9f84254..4f0a5c81b 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -1,105 +1,96 @@ var fs = require('fs'), util = require('util'), exec = require('child_process').exec, + spawn = require('child_process').spawn, path = require('path'); GLOBAL.convertToSyntax = function (types, body) { - if (types['php'] || types['PHP']) { - return body; - } - return ''; + if (types['php'] || types['PHP']) { + return body; + } + return ''; }; -function puts(error, stdout, stderr) { - util.puts(stdout); -} -console.log("Executing: " + "jison " + process.argv[2]); +function createPHPFile(jisonFileName) { + String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; + + var fileName = jisonFileName.replace('.jison', ''), + comments = require(path.resolve(__dirname, '../comments.js')), + requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; + + console.log("Opening newly created jison js file: " + fileName + '.js'); + + var Parser = require(requirePath), + symbols = Parser.parser.symbols_, + terminals = Parser.parser.terminals_, + productions = Parser.parser.productions_, + table = Parser.parser.table, + defaultActions = Parser.parser.defaultActions, + //turn regex into string + rules = []; + + for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { + rules.push(Parser.parser.lexer.rules[i].toString()); + } + + var conditions = Parser.parser.lexer.conditions, + options = Parser.parser.lexer.options, + parserPerformAction = Parser.parser.performAction.toString(), + lexerPerformAction = Parser.parser.lexer.performAction.toString(); + + function jsFnBody(str) { + str = str.split('{'); + str.shift(); + str = str.join('{'); + + str = str.split('}'); + str.pop(); + str = str.join('}'); + + return str; + } + + function jsPerformActionToPhp(str) { + str = jsFnBody(str); + str = str.replace("var $0 = $$.length - 1;", ''); + str = str.replace("var YYSTATE=YY_START", ''); + str = str.replace(new RegExp('[$]0', 'g'), '$o'); + str = str.replace(new RegExp('[$][$]', 'g'), '$s'); + str = str.replace(new RegExp('default[:][;]', 'g'), ''); + str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); + str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); + str = str.replace(new RegExp('yystate', 'g'), '$yystate'); + //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); + str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); + str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); + str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); + str = str.replace(new RegExp('[$]end', 'g'), 'end'); + str = str.replace(new RegExp('console[.]log'), ''); + str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); -exec("jison " + process.argv[2], function (error) { - if (error) { - console.log(error); - return; - } - - String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; - - var fileName = process.argv[2].replace('.jison', ''), - comments = require(path.resolve(__dirname, '../comments.js')), - requirePath = path.resolve(process.argv[2]).replace('.jison', '') + '.js'; - - console.log("Opening newly created jison js file: " + fileName + '.js'); - - var Parser = require(requirePath), - symbols = Parser.parser.symbols_, - terminals = Parser.parser.terminals_, - productions = Parser.parser.productions_, - table = Parser.parser.table, - defaultActions = Parser.parser.defaultActions, - //turn regex into string - rules = []; - - for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { - rules.push(Parser.parser.lexer.rules[i].toString()); - } - - var conditions = Parser.parser.lexer.conditions, - options = Parser.parser.lexer.options, - parserPerformAction = Parser.parser.performAction.toString(), - lexerPerformAction = Parser.parser.lexer.performAction.toString(); - - function jsFnBody(str) { - str = str.split('{'); - str.shift(); - str = str.join('{'); - - str = str.split('}'); - str.pop(); - str = str.join('}'); - - return str; - } - - function jsPerformActionToPhp(str) { - str = jsFnBody(str); - str = str.replace("var $0 = $$.length - 1;", ''); - str = str.replace("var YYSTATE=YY_START", ''); - str = str.replace(new RegExp('[$]0', 'g'), '$o'); - str = str.replace(new RegExp('[$][$]', 'g'), '$s'); - str = str.replace(new RegExp('default[:][;]', 'g'), ''); - str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); - str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); - str = str.replace(new RegExp('yystate', 'g'), '$yystate'); - //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); - str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); - str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); - str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); - str = str.replace(new RegExp('[$]end', 'g'), 'end'); - str = str.replace(new RegExp('console[.]log'), ''); - str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); - str = comments.parse(str); str = str.replace(/(\d)\n/g, function () { - return arguments[1] + ';\n'; - }); + return arguments[1] + ';\n'; + }); - return str; + return str; } - - + + var option = { - 'namespace': 'Jison', - 'class': fileName, - 'fileName': fileName + '.php', - 'extends': '', - 'use': '', - 'parserValue': '' + 'namespace': 'Jison', + 'class': fileName, + 'fileName': fileName + '.php', + 'extends': '', + 'use': '', + 'parserValue': '' }; - + var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); parserDefinition = parserDefinition.split(/\n/g); for(var i = 0; i < parserDefinition.length; i++) { @@ -109,9 +100,7 @@ exec("jison " + process.argv[2], function (error) { option[parserDefinition[i][0]] = parserDefinition[i][1]; } } - - console.log(option); - + var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); function parserInject() { @@ -140,8 +129,6 @@ exec("jison " + process.argv[2], function (error) { }; } - console.log(this.symbolsByIndex); - for (var i in this.symbolsByIndex) { var symbol = this.symbolsByIndex[i]; result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; @@ -236,26 +223,26 @@ exec("jison " + process.argv[2], function (error) { } parserRaw = parserRaw - .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) + .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) - .replace('/**use**/', (option.use ? 'use ' + option.use : '')) - .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) + .replace('/**use**/', (option.use ? 'use ' + option.use : '')) + .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) .replace('//@@PARSER_INJECT@@', - parserInject() - ) + parserInject() + ) .replace('//@@LEXER_INJECT@@', - lexerInject() - ) + lexerInject() + ) .replace('//@@ParserPerformActionInjection@@', - jsPerformActionToPhp(parserPerformAction) - ) + jsPerformActionToPhp(parserPerformAction) + ) .replace('//@@LexerPerformActionInjection@@', - jsPerformActionToPhp(lexerPerformAction, true) - ); + jsPerformActionToPhp(lexerPerformAction, true) + ); fs.writeFile(option.fileName, parserRaw, function(err) { if (err) { @@ -265,4 +252,21 @@ exec("jison " + process.argv[2], function (error) { console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); } }); +} + + +console.log("Executing: " + "jison " + process.argv[2]); + +var spawnedJison = spawn("jison", [process.argv[2]]); + +spawnedJison.stdout.on('data', function (data) { + console.log(data.toString()); +}); + +spawnedJison.on('exit', function(code) { + if (code != 0) { + console.log('Failed: ' + code); + } else { + createPHPFile(process.argv[2]); + } }); \ No newline at end of file From 6316d85b78d60cf0e0baef78c4b868025144b39c Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Thu, 31 Oct 2013 18:35:55 -0400 Subject: [PATCH 16/35] Cleanup --- ports/php/php.js | 427 +++++++++++++++++++++++------------------------ 1 file changed, 211 insertions(+), 216 deletions(-) diff --git a/ports/php/php.js b/ports/php/php.js index 4f0a5c81b..08b1d37b1 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -1,266 +1,261 @@ -var fs = require('fs'), - util = require('util'), - exec = require('child_process').exec, - spawn = require('child_process').spawn, - path = require('path'); - -GLOBAL.convertToSyntax = function (types, body) { +GLOBAL.convertToSyntax = function (types, body) { if (types['php'] || types['PHP']) { return body; } return ''; }; +var fs = require('fs'), + spawn = require('child_process').spawn, + path = require('path'), + createPHPFile = function (jisonFileName) { + String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; + + var fileName = jisonFileName.replace('.jison', ''), + comments = require(path.resolve(__dirname, '../comments.js')), + requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; + + console.log("\n\n\nOpening newly created jison js file: " + fileName + '.js'); + + var Parser = require(requirePath), + symbols = Parser.parser.symbols_, + terminals = Parser.parser.terminals_, + productions = Parser.parser.productions_, + table = Parser.parser.table, + defaultActions = Parser.parser.defaultActions, + //turn regex into string + rules = []; + + for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { + rules.push(Parser.parser.lexer.rules[i].toString()); + } -function createPHPFile(jisonFileName) { - String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; - - var fileName = jisonFileName.replace('.jison', ''), - comments = require(path.resolve(__dirname, '../comments.js')), - requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; - - console.log("Opening newly created jison js file: " + fileName + '.js'); - - var Parser = require(requirePath), - symbols = Parser.parser.symbols_, - terminals = Parser.parser.terminals_, - productions = Parser.parser.productions_, - table = Parser.parser.table, - defaultActions = Parser.parser.defaultActions, - //turn regex into string - rules = []; - - for (var i = 0; i < Parser.parser.lexer.rules.length; i++) { - rules.push(Parser.parser.lexer.rules[i].toString()); - } - - var conditions = Parser.parser.lexer.conditions, - options = Parser.parser.lexer.options, - parserPerformAction = Parser.parser.performAction.toString(), - lexerPerformAction = Parser.parser.lexer.performAction.toString(); - - function jsFnBody(str) { - str = str.split('{'); - str.shift(); - str = str.join('{'); + var conditions = Parser.parser.lexer.conditions, + options = Parser.parser.lexer.options, + parserPerformAction = Parser.parser.performAction.toString(), + lexerPerformAction = Parser.parser.lexer.performAction.toString(); - str = str.split('}'); - str.pop(); - str = str.join('}'); + function jsFnBody(str) { + str = str.split('{'); + str.shift(); + str = str.join('{'); - return str; - } + str = str.split('}'); + str.pop(); + str = str.join('}'); - function jsPerformActionToPhp(str) { - str = jsFnBody(str); - str = str.replace("var $0 = $$.length - 1;", ''); - str = str.replace("var YYSTATE=YY_START", ''); - str = str.replace(new RegExp('[$]0', 'g'), '$o'); - str = str.replace(new RegExp('[$][$]', 'g'), '$s'); - str = str.replace(new RegExp('default[:][;]', 'g'), ''); - str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); - str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); - str = str.replace(new RegExp('yystate', 'g'), '$yystate'); - //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); - str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); - str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); - str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); - str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); - str = str.replace(new RegExp('[$]end', 'g'), 'end'); - str = str.replace(new RegExp('console[.]log'), ''); - str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); - - str = comments.parse(str); - - str = str.replace(/(\d)\n/g, function () { - return arguments[1] + ';\n'; - }); + return str; + } - return str; - } + function jsPerformActionToPhp(str) { + str = jsFnBody(str); + str = str.replace("var $0 = $$.length - 1;", ''); + str = str.replace("var YYSTATE=YY_START", ''); + str = str.replace(new RegExp('[$]0', 'g'), '$o'); + str = str.replace(new RegExp('[$][$]', 'g'), '$s'); + str = str.replace(new RegExp('default[:][;]', 'g'), ''); + str = str.replace(new RegExp('this[.][$]', 'g'), '$thisS'); + str = str.replace(new RegExp('this[-][>]', 'g'), '$this->'); + str = str.replace(new RegExp('yystate', 'g'), '$yystate'); + //str = str.replace(new RegExp('yytext', 'g'), 'yy->text'); + str = str.replace(new RegExp('[$]yy[_][.]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]this[-][>]yy[-][>]yy', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[.]yytext', 'g'), '->text'); + str = str.replace(new RegExp('yy[.]', 'g'), 'yy->'); + str = str.replace(new RegExp('yy_[.][$]', 'g'), '$this->yy->'); + str = str.replace(new RegExp('[$]accept', 'g'), 'accept'); + str = str.replace(new RegExp('[$]end', 'g'), 'end'); + str = str.replace(new RegExp('console[.]log'), ''); + str = str.replace(new RegExp('[$]avoiding_name_collisions'), '$avoidingNameCollisions'); + + str = comments.parse(str); + + str = str.replace(/(\d)\n/g, function () { + return arguments[1] + ';\n'; + }); + + return str; + } - var option = { - 'namespace': 'Jison', - 'class': fileName, - 'fileName': fileName + '.php', - 'extends': '', - 'use': '', - 'parserValue': '' - }; - - var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); - parserDefinition = parserDefinition.split(/\n/g); - for(var i = 0; i < parserDefinition.length; i++) { - if (parserDefinition[i].match('//option')) { - parserDefinition[i] = parserDefinition[i].replace('//option ', ''); - parserDefinition[i] = parserDefinition[i].split(':'); - option[parserDefinition[i][0]] = parserDefinition[i][1]; + var option = { + 'namespace': 'Jison', + 'class': fileName, + 'fileName': fileName + '.php', + 'extends': '', + 'use': '', + 'parserValue': '' + }; + + var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); + parserDefinition = parserDefinition.split(/\n/g); + for(var i = 0; i < parserDefinition.length; i++) { + if (parserDefinition[i].match('//option')) { + parserDefinition[i] = parserDefinition[i].replace('//option ', ''); + parserDefinition[i] = parserDefinition[i].split(':'); + option[parserDefinition[i][0]] = parserDefinition[i][1]; + } } - } - var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); - - function parserInject() { - var result = '\n'; - this.symbols = []; - this.symbolsByIndex = []; - this.tableInstantiation = []; - this.tableDefinition = []; - this.tableSetActions = []; - this.table = []; - this.terminals = []; - this.defaultActions = []; - this.productions = []; - - var actions = [ - 'none', - 'shift', - 'reduce', - 'accept' - ]; - - for (var i in symbols) { - this.symbolsByIndex[symbols[i] * 1] = { - name: i.replace('$', ''), - index: symbols[i] - }; - } + var parserRaw = fs.readFileSync(__dirname + "/template.php", "utf8"); + + function parserInject() { + var result = '\n'; + this.symbols = []; + this.symbolsByIndex = []; + this.tableInstantiation = []; + this.tableDefinition = []; + this.tableSetActions = []; + this.table = []; + this.terminals = []; + this.defaultActions = []; + this.productions = []; + + var actions = [ + 'none', + 'shift', + 'reduce', + 'accept' + ]; + + for (var i in symbols) { + this.symbolsByIndex[symbols[i] * 1] = { + name: i.replace('$', ''), + index: symbols[i] + }; + } - for (var i in this.symbolsByIndex) { - var symbol = this.symbolsByIndex[i]; - result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; - this.symbols.push('\t\t\t$this->symbols[' + symbol.index + '] = $symbol' + symbol.index + ''); - this.symbols.push('\t\t\t$this->symbols["' + symbol.name + '"] = $symbol' + symbol.index + ''); + for (var i in this.symbolsByIndex) { + var symbol = this.symbolsByIndex[i]; + result += '\t\t\t$symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; + this.symbols.push('\t\t\t$this->symbols[' + symbol.index + '] = $symbol' + symbol.index + ''); + this.symbols.push('\t\t\t$this->symbols["' + symbol.name + '"] = $symbol' + symbol.index + ''); - } + } - result += this.symbols.join(';\n') + ';\n\n'; + result += this.symbols.join(';\n') + ';\n\n'; - for (var i in terminals) { - this.terminals.push('\t\t\t\t\t' + i + '=>&$symbol' + i + ''); - } + for (var i in terminals) { + this.terminals.push('\t\t\t\t\t' + i + '=>&$symbol' + i + ''); + } - result += '\t\t\t$this->terminals = array(\n' + this.terminals.join(',\n') + '\n\t\t\t\t);\n\n'; - - for (var i in table) { - var items = []; - for (var j in table[i]) { - var item = table[i][j], - action = 0, - state = 0; - if (item.join) { //is array - if (item.length == 1) { - action = item[0]; - items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ')'); + result += '\t\t\t$this->terminals = array(\n' + this.terminals.join(',\n') + '\n\t\t\t\t);\n\n'; + + for (var i in table) { + var items = []; + for (var j in table[i]) { + var item = table[i][j], + action = 0, + state = 0; + if (item.join) { //is array + if (item.length == 1) { + action = item[0]; + items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ')'); + } else { + action = item[0]; + state = item[1]; + items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); + } } else { - action = item[0]; - state = item[1]; + state = item; items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); } - } else { - state = item; - items.push('\t\t\t\t\t' + j + '=>new ParserAction($this->' + actions[action] + ', $table' + state + ')'); } - } - this.tableInstantiation.push('\t\t\t$table' + i + ' = new ParserState(' + i + ')'); - this.tableDefinition.push('\t\t\t$tableDefinition' + i + ' = array(\n\t\t\t\t\n' + items.join(',\n') + '\n\t\t\t\t)'); - this.tableSetActions.push('\t\t\t$table' + i + '->setActions($tableDefinition' + i + ')'); - this.table.push('\t\t\t\t\t' + i + '=>$table' + i + ''); - } + this.tableInstantiation.push('\t\t\t$table' + i + ' = new ParserState(' + i + ')'); + this.tableDefinition.push('\t\t\t$tableDefinition' + i + ' = array(\n\t\t\t\t\n' + items.join(',\n') + '\n\t\t\t\t)'); + this.tableSetActions.push('\t\t\t$table' + i + '->setActions($tableDefinition' + i + ')'); + this.table.push('\t\t\t\t\t' + i + '=>$table' + i + ''); + } - result += this.tableInstantiation.join(';\n') + ';\n\n'; - result += this.tableDefinition.join(';\n\n') + ';\n\n'; - result += this.tableSetActions.join(';\n') + ';\n\n'; - result += '\t\t\t$this->table = array(\n\t\t\t\t\n' + this.table.join(',\n') + '\n\t\t\t\t);\n\n'; + result += this.tableInstantiation.join(';\n') + ';\n\n'; + result += this.tableDefinition.join(';\n\n') + ';\n\n'; + result += this.tableSetActions.join(';\n') + ';\n\n'; + result += '\t\t\t$this->table = array(\n\t\t\t\t\n' + this.table.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in defaultActions) { - var action = defaultActions[i][0]; - var state = defaultActions[i][1]; - this.defaultActions.push('\t\t\t\t\t' + i + '=>new ParserAction($this->' + actions[action] +', $table' + state + ')'); - } + for (var i in defaultActions) { + var action = defaultActions[i][0]; + var state = defaultActions[i][1]; + this.defaultActions.push('\t\t\t\t\t' + i + '=>new ParserAction($this->' + actions[action] +', $table' + state + ')'); + } - result += '\t\t\t$this->defaultActions = array(\n\t\t\t\t\n' + this.defaultActions.join(',\n') + '\n\t\t\t\t);\n\n'; + result += '\t\t\t$this->defaultActions = array(\n\t\t\t\t\n' + this.defaultActions.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in productions) { - var production = productions[i]; - if (production.join) { - var symbol = production[0], - len = production[1]; - this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')'); - } else { - var symbol = production; - this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ')'); + for (var i in productions) { + var production = productions[i]; + if (production.join) { + var symbol = production[0], + len = production[1]; + this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')'); + } else { + var symbol = production; + this.productions.push('\t\t\t\t\t' + i + '=>new ParserProduction($symbol' + this.symbolsByIndex[symbol].index + ')'); + } } + + result += '\t\t\t$this->productions = array(\n\t\t\t\t\n' + this.productions.join(',\n') + '\n\t\t\t\t);\n\n\n'; + + return result; } - result += '\t\t\t$this->productions = array(\n\t\t\t\t\n' + this.productions.join(',\n') + '\n\t\t\t\t);\n\n\n'; + function lexerInject() { + var result = '\n'; + this.rules = [], + this.conditions = []; - return result; - } + for (var i in rules) { + this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); + } - function lexerInject() { - var result = '\n'; - this.rules = [], - this.conditions = []; + result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in rules) { - this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); - } + for (var i in conditions) { + this.conditions.push('\t\t\t\t\t"' + i + '"=>new LexerConditions(array( ' + conditions[i].rules.join(',') + '), ' + conditions[i].inclusive + ')'); + } - result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; + result += '\t\t\t$this->conditions = array(\n\t\t\t\t\n' + this.conditions.join(',\n') + '\n\t\t\t\t);\n\n'; - for (var i in conditions) { - this.conditions.push('\t\t\t\t\t"' + i + '"=>new LexerConditions(array( ' + conditions[i].rules.join(',') + '), ' + conditions[i].inclusive + ')'); + return result; } - result += '\t\t\t$this->conditions = array(\n\t\t\t\t\n' + this.conditions.join(',\n') + '\n\t\t\t\t);\n\n'; + parserRaw = parserRaw + .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) + .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) + .replace('/**use**/', (option.use ? 'use ' + option.use : '')) + .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) - return result; - } + .replace('//@@PARSER_INJECT@@', + parserInject() + ) - parserRaw = parserRaw - .replace('/**/namespace Jison;/**/', (option.namespace ? 'namespace ' + option.namespace + ';\nuse Exception;\n' : '')) - .replace('/**/class Parser/**/', 'class ' + option.class + (option.extends ? ' extends ' + option.extends : '')) - .replace('/**use**/', (option.use ? 'use ' + option.use : '')) - .replace(/[/][*][*][/]ParserValue[/][*][*][/]/g, (option.parserValue ? option.parserValue : 'ParserValue')) - - .replace('//@@PARSER_INJECT@@', - parserInject() - ) - - .replace('//@@LEXER_INJECT@@', - lexerInject() - ) - - .replace('//@@ParserPerformActionInjection@@', - jsPerformActionToPhp(parserPerformAction) - ) - - .replace('//@@LexerPerformActionInjection@@', - jsPerformActionToPhp(lexerPerformAction, true) - ); - - fs.writeFile(option.fileName, parserRaw, function(err) { - if (err) { - console.log("Something went bad"); - } else { - console.log("Success writing new parser files " + fileName + ".js" + " & " + option.fileName); - console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); - } - }); -} + .replace('//@@LEXER_INJECT@@', + lexerInject() + ) + .replace('//@@ParserPerformActionInjection@@', + jsPerformActionToPhp(parserPerformAction) + ) -console.log("Executing: " + "jison " + process.argv[2]); + .replace('//@@LexerPerformActionInjection@@', + jsPerformActionToPhp(lexerPerformAction, true) + ); -var spawnedJison = spawn("jison", [process.argv[2]]); + fs.writeFile(option.fileName, parserRaw, function(err) { + if (err) { + console.log("Something went bad"); + } else { + console.log("**************SUCCESS**************"); + console.log("Success writing new parser files " + fileName + ".js" + " & " + option.fileName); + console.log("Please Note: The php version of the jison parser is only an ATTEMPTED conversion"); + } + }); + }, + msg = (console.log("Executing: " + "jison " + process.argv[2])), + spawnedJison = spawn("jison", [process.argv[2]]); spawnedJison.stdout.on('data', function (data) { console.log(data.toString()); + console.log("**************Possible Issue**************"); }); spawnedJison.on('exit', function(code) { From 7c89f94f8b0ebe1524e5c44c461ed36f26585edb Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Wed, 19 Feb 2014 11:03:17 -0500 Subject: [PATCH 17/35] Creation on InputReader, making reading of inputs using offsets Use \G and InputReader where possible in php and c# so that new strings are not made each time using substring etc. --- ports/csharp/Jison/Jison/Template.cs | 88 +++++++++++++++++++++------- ports/csharp/Jison/Jison/csharp.js | 4 +- ports/php/php.js | 2 +- ports/php/template.php | 81 +++++++++++++++++++------ 4 files changed, 136 insertions(+), 39 deletions(-) diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 40e224b7e..5ac73bdb0 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -4,7 +4,7 @@ using System.Linq; //@@USING_INJECT@@ -/**/namespace Jison/**/ +/**/namespace Jison/**//**extends**/ { public /**/class Parser/**/ { @@ -218,24 +218,22 @@ public void LexerError(string error, LexerError hash = null) public ParserSymbol Eof = new ParserSymbol("Eof", 1); public /**/ParserValue/**/ Yy = new /**/ParserValue/**/(); public string Match = ""; - public string Matched = ""; public Stack ConditionStack; public Dictionary Rules; public Dictionary Conditions; public bool Done = false; public bool Less; public bool _More; - public string _Input; + public InputReader _Input; public int Offset; public DictionaryRanges; public bool Flex = false; public void SetInput(string input) { - _Input = input; + _Input = new InputReader(input); _More = Less = Done = false; Yy.LineNo = Yy.Leng = 0; - Matched = Match = ""; ConditionStack = new Stack(); ConditionStack.Push("INITIAL"); @@ -251,12 +249,11 @@ public void SetInput(string input) public string Input() { - string ch = _Input[0].ToString(); + string ch = _Input.Ch(); Yy.Text += ch; Yy.Leng++; Offset++; Match += ch; - Matched += ch; Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); if (lines.Success) { Yy.LineNo++; @@ -270,7 +267,6 @@ public string Input() Yy.Loc.Range.Y++; } - _Input = _Input.Substring(1); return ch; } @@ -279,12 +275,12 @@ public void Unput(string ch) int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - _Input = ch + _Input; + //TODO: not really compatible?? + _Input.unCh(ch.Length); Yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - Matched = Matched.Substring(0, Matched.Length - 1); if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; var r = Yy.Loc.Range; @@ -316,8 +312,8 @@ public void More() public string PastInput() { - var past = Matched.Substring(0, Matched.Length - Match.Length); - return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(-20), "/\n/", "") : ""); + var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); + return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); } public string UpcomingInput() @@ -325,7 +321,7 @@ public string UpcomingInput() var next = Match; if (next.Length < 20) { - next += _Input.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); + next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); } return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); } @@ -350,7 +346,7 @@ public ParserSymbol Next() return Eof; } - if (String.IsNullOrEmpty(_Input)) + if (_Input.Done) { Done = true; } @@ -369,8 +365,8 @@ public ParserSymbol Next() for (int i = 0; i < rules.Count; i++) { rule = Rules[rules[i]]; - var tempMatch = rule.Match(_Input); - if (tempMatch.Success == true && (match != null || tempMatch.Length > match.Length)) { + var tempMatch = _Input.Match(rule); + if (tempMatch.Success && tempMatch.Length > match.Length) { match = tempMatch.Value; matched = true; index = i; @@ -391,7 +387,6 @@ public ParserSymbol Next() Yy.Text += match; Match += match; - Matched += match; Yy.Leng = Yy.Text.Length; if (Ranges != null) @@ -399,13 +394,13 @@ public ParserSymbol Next() Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); } _More = false; - _Input = _Input.Substring(match.Length); + _Input.AddMatch(match); var ruleIndex = rules[index]; var nextCondition = ConditionStack.Peek(); dynamic action = LexerPerformAction(ruleIndex, nextCondition); ParserSymbol token = Symbols[action]; - if (Done == true && String.IsNullOrEmpty(_Input) == false) + if (Done == true || _Input.Done) { Done = false; } @@ -417,7 +412,7 @@ public ParserSymbol Next() } } - if (String.IsNullOrEmpty(_Input)) { + if (_Input.Done) { return Symbols["EOF"]; } else { @@ -747,4 +742,57 @@ public void Pop() } } } + + + public class InputReader + { + + public bool Done = false; + public string Input; + public int Length; + public JList Matches = new JList(); + public int Position = 0; + + public InputReader(string input) + { + Input = input; + Length = input.Length; + } + + public void AddMatch (string match) { + Matches.Push(match); + Position += match.Length; + Done = (Position >= Length); + } + + public string Ch() + { + var ch = Input[Position].ToString(); + AddMatch(ch); + return ch; + } + + public void unCh(int chLength) + { + Position -= chLength; + Position = Math.Max(0, Position); + Done = (Position >= Length); + } + + public string Substring(int start, int end) { + start = (start != 0 ? Position + start : Position); + end = (end != 0 ? start + end : Length); + return Input.Substring(start, end); + } + + public Match Match(Regex rule) { + var match = rule.Match(Input, Position); + return match; + } + + public new string ToString() + { + return String.Join("", Matches.ToArray()); + } + } } \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 76c5d8adf..5ffede68a 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -99,6 +99,7 @@ exec("jison " + process.argv[2], function (error) { 'namespace': 'Jison', 'class': ClassName, 'fileName': FileName + '.cs', + 'extends': '', 'parserValue': '' }; @@ -237,11 +238,12 @@ exec("jison " + process.argv[2], function (error) { return result; } - + parserRaw = parserRaw .replace(new RegExp('//@@USING_INJECT@@', 'g'),(option.using ? 'using ' + option.using.split(',').join(';\nusing ') + ';' : '')) .replace(new RegExp('[/][*][*][/]namespace Jison[/][*][*][/]', 'g'), 'namespace ' + option.namespace) .replace(new RegExp('[/][*][*][/]class Parser[/][*][*][/]', 'g'), 'class ' + option.class) + .replace(new RegExp('[/][*][*]extends[*][*][/]', 'g'), (option.extends ? ' : ' + option.extends : '')) .replace(new RegExp('[/][*][*][/]public Parser[/][*][*][/]', 'g'), 'public ' + option.class) .replace(new RegExp('[/][*][*][/]ParserValue[/][*][*][/]', 'g'), (option.parserValue || 'ParserValue')) .replace('new Parser(', 'new ' + option.class + '(') diff --git a/ports/php/php.js b/ports/php/php.js index 08b1d37b1..d44ca6ebd 100644 --- a/ports/php/php.js +++ b/ports/php/php.js @@ -204,7 +204,7 @@ var fs = require('fs'), this.conditions = []; for (var i in rules) { - this.rules.push('\t\t\t\t\t' + i + '=>"/' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); + this.rules.push('\t\t\t\t\t' + i + '=>"/\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '\\"') + '/"'); } result += '\t\t\t$this->rules = array(\n\t\t\t\t\n' + this.rules.join(',\n') + '\n\t\t\t\t);\n\n'; diff --git a/ports/php/template.php b/ports/php/template.php index 436b679f4..4e1163bae 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -203,7 +203,6 @@ function parse($input) public $eof; public $yy = null; public $match = ""; - public $matched = ""; public $conditionStack = array(); public $conditionStackCount = 0; public $rules = array(); @@ -211,14 +210,14 @@ function parse($input) public $done = false; public $less; public $more; - public $input; + public $input; public $offset; public $ranges; public $flex = false; function setInput($input) { - $this->input = $input; + $this->input = new InputReader($input); $this->more = $this->less = $this->done = false; $this->yy = new /**/ParserValue/**/(); $this->conditionStack = array('INITIAL'); @@ -235,12 +234,11 @@ function setInput($input) function input() { - $ch = $this->input[0]; + $ch = $this->input->ch(); $this->yy->text .= $ch; $this->yy->leng++; $this->offset++; $this->match .= $ch; - $this->matched .= $ch; $lines = preg_match("/(?:\r\n?|\n).*/", $ch); if (count($lines) > 0) { $this->yy->lineNo++; @@ -252,7 +250,6 @@ function input() $this->yy->loc->range->y++; } - $this->input = array_slice($this->input, 1); return $ch; } @@ -262,14 +259,13 @@ function unput($ch) $lines = explode("/(?:\r\n?|\n)/", $ch); $linesCount = count($lines); - $this->input = $ch . $this->input; + $this->input->unCh($len); $this->yy->text = substr($this->yy->text, 0, $len - 1); //$this->yylen -= $len; $this->offset -= $len; $oldLines = explode("/(?:\r\n?|\n)/", $this->match); $oldLinesCount = count($oldLines); $this->match = substr($this->match, 0, strlen($this->match) - 1); - $this->matched = substr($this->matched, 0, strlen($this->matched) - 1); if (($linesCount - 1) > 0) $this->yy->lineNo -= $linesCount - 1; $r = $this->yy->loc->range; @@ -297,7 +293,8 @@ function more() function pastInput() { - $past = substr($this->matched, 0, strlen($this->matched) - strlen($this->match)); + $matched = $this->input->toString(); + $past = substr($matched, 0, strlen($matched) - strlen($this->match)); return (strlen($past) > 20 ? '...' : '') . preg_replace("/\n/", "", substr($past, -20)); } @@ -305,7 +302,7 @@ function upcomingInput() { $next = $this->match; if (strlen($next) < 20) { - $next .= substr($this->input, 0, 20 - strlen($next)); + $next .= substr($this->input->toString(), 0, 20 - strlen($next)); } return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); } @@ -328,7 +325,7 @@ function next() return $this->eof; } - if (empty($this->input)) { + if ($this->input->done) { $this->done = true; } @@ -339,7 +336,7 @@ function next() $rules = $this->currentRules(); for ($i = 0, $j = count($rules); $i < $j; $i++) { - preg_match($this->rules[$rules[$i]], $this->input, $tempMatch); + $tempMatch = $this->input->match($this->rules[$rules[$i]]); if ($tempMatch && (empty($match) || count($tempMatch[0]) > count($match[0]))) { $match = $tempMatch; $index = $i; @@ -368,33 +365,32 @@ function next() $this->yy->text .= $match[0]; $this->match .= $match[0]; $this->matches = $match; - $this->matched .= $match[0]; $this->yy->leng = strlen($this->yy->text); if (isset($this->ranges)) { $this->yy->loc->range = new ParserRange($this->offset, $this->offset += $this->yy->leng); } $this->more = false; - $this->input = substr($this->input, $matchCount, strlen($this->input)); + $this->input->addMatch($match[0]); $ruleIndex = $rules[$index]; $nextCondition = $this->conditionStack[$this->conditionStackCount - 1]; $token = $this->lexerPerformAction($ruleIndex, $nextCondition); - if ($this->done == true && empty($this->input) == false) { + if ($this->done == true || $this->input->done) { $this->done = false; } if (empty($token) == false) { return $this->symbols[ - $token + $token ]; } else { return null; } } - if (empty($this->input)) { + if ($this->input->done) { return $this->eof; } else { $this->lexerError("Lexical error on line " . ($this->yy->lineNo + 1) . ". Unrecognized text.\n" . $this->showPosition(), new LexerError("", -1, $this->yy->lineNo)); @@ -612,4 +608,55 @@ function __construct($x, $y) $this->x = $x; $this->y = $y; } +} + +class InputReader +{ + public $done = false; + public $input; + public $length; + public $matches = array(); + public $position = 0; + + public function __construct($input) + { + $this->input = $input; + $this->length = strlen($input); + } + + public function addMatch($match) { + $this->matches[] = $match; + $this->position += strlen($match); + $this->done = ($this->position >= $this->length); + } + + public function ch() + { + $ch = $this->input{$this->position}; + $this->addMatch($ch); + return $ch; + } + + public function unCh($chLength) + { + $this->position -= $chLength; + $this->position = max(0, $this->position); + $this->done = ($this->position >= $this->length); + } + + public function substring($start, $end) { + $start = ($start != 0 ? $this->position + $start : $this->position); + $end = ($end != 0 ? $start + $end : $this->length); + return substr($this->input, $start, $end); + } + + public function match($rule) { + preg_match($rule, $this->input, $match, null, $this->position); + return $match; + } + + public function toString() + { + return implode('', $this->matches); + } } \ No newline at end of file From 4ab63eaeaf51a57633d8020f0c49c25632842013 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 19 Feb 2014 11:49:54 -0500 Subject: [PATCH 18/35] extends in wrong place --- ports/csharp/Jison/Jison/Template.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 5ac73bdb0..ae96dbac9 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -4,9 +4,9 @@ using System.Linq; //@@USING_INJECT@@ -/**/namespace Jison/**//**extends**/ +/**/namespace Jison/**/ { - public /**/class Parser/**/ + public /**/class Parser/**//**extends**/ { public ParserSymbols Symbols; public Dictionary Terminals; From 13350ef939154e722be800e5ea2a5c344b290659 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 19 Feb 2014 11:54:27 -0500 Subject: [PATCH 19/35] \G in c# for regex --- ports/csharp/Jison/Jison/csharp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 5ffede68a..1054335e4 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -225,7 +225,7 @@ exec("jison " + process.argv[2], function (error) { this.conditions = []; for (var i in rules) { - this.rules.push('\t\t\t\t\t{' + i + ', new Regex(@"' + rules[i].substring(1, rules[i].length - 1).replace(/"/g, '""') + '")}'); + this.rules.push('\t\t\t\t\t{' + i + ', new Regex(@"\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '""') + '")}'); } result += '\t\t\tRules = new Dictionary\n\t\t\t\t{\n' + this.rules.join(',\n') + '\n\t\t\t\t};\n\n'; From 35a7ac72e2612cca7f9da73f108ad8e2f8df3e46 Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Fri, 21 Feb 2014 21:43:10 -0500 Subject: [PATCH 20/35] logic fixes --- ports/php/template.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 4e1163bae..13f72856f 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -377,7 +377,7 @@ function next() $token = $this->lexerPerformAction($ruleIndex, $nextCondition); - if ($this->done == true || $this->input->done) { + if ($this->done == true && !$this->input->done) { $this->done = false; } @@ -651,8 +651,10 @@ public function substring($start, $end) { } public function match($rule) { - preg_match($rule, $this->input, $match, null, $this->position); - return $match; + if (preg_match($rule, $this->input, $match, null, $this->position)) { + return $match; + } + return null; } public function toString() From d8cc27299fa0defcd52e735b15280cd926177378 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 30 Apr 2014 14:10:47 -0400 Subject: [PATCH 21/35] When EOF, and there is an error, handle correctly. --- ports/php/template.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 13f72856f..c3cc5cacd 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -300,11 +300,15 @@ function pastInput() function upcomingInput() { - $next = $this->match; - if (strlen($next) < 20) { - $next .= substr($this->input->toString(), 0, 20 - strlen($next)); + if (!$this->done) { + $next = $this->match; + if (strlen($next) < 20) { + $next .= substr($this->input->toString(), 0, 20 - strlen($next)); + } + return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); + } else { + return ""; } - return preg_replace("/\n/", "", substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '')); } function showPosition() From 30b76c90b18cb4f7d8265c665e1942da49ca4083 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 10 Jun 2014 14:25:37 -0400 Subject: [PATCH 22/35] Cleanup of __clone methods. --- ports/php/template.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index c3cc5cacd..422a2e530 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -460,7 +460,9 @@ public function Range($range) public function __clone() { - return new ParserLocation($this->firstLine, $this->lastLine, $this->firstColumn, $this->lastColumn); + if (isset($this->range)) { + $this->range = clone $this->range; + } } } @@ -472,14 +474,9 @@ class ParserValue public $text; function __clone() { - $clone = new ParserValue(); - $clone->leng = $this->leng; if (isset($this->loc)) { - $clone->loc = clone $this->loc; + $this->loc = clone $this->loc; } - $clone->lineNo = $this->lineNo; - $clone->text = $this->text; - return $clone; } } From d556119166b67fe9cda801bc4d6bcfd9b53066e0 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Wed, 25 Jun 2014 14:25:57 -0400 Subject: [PATCH 23/35] Fix the ability to use unput --- ports/php/template.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ports/php/template.php b/ports/php/template.php index 422a2e530..516e12a72 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -17,6 +17,7 @@ public $shift = 1; public $reduce = 2; public $accept = 3; + public $unputStack = array(); function trace() { @@ -255,23 +256,27 @@ function input() function unput($ch) { + $yy = new /**/ParserValue/**/(); + $len = strlen($ch); $lines = explode("/(?:\r\n?|\n)/", $ch); $linesCount = count($lines); $this->input->unCh($len); - $this->yy->text = substr($this->yy->text, 0, $len - 1); + $yy->text = substr($this->yy->text, 0, $len - 1); //$this->yylen -= $len; $this->offset -= $len; $oldLines = explode("/(?:\r\n?|\n)/", $this->match); $oldLinesCount = count($oldLines); $this->match = substr($this->match, 0, strlen($this->match) - 1); - if (($linesCount - 1) > 0) $this->yy->lineNo -= $linesCount - 1; + if (($linesCount - 1) > 0) { + $yy->lineNo = $this->yy->lineNo - $linesCount - 1; + } $r = $this->yy->loc->range; $oldLinesLength = (isset($oldLines[$oldLinesCount - $linesCount]) ? strlen($oldLines[$oldLinesCount - $linesCount]) : 0); - $this->yy->loc = new ParserLocation( + $yy->loc = new ParserLocation( $this->yy->loc->firstLine, $this->yy->lineNo, $this->yy->loc->firstColumn, @@ -282,8 +287,10 @@ function unput($ch) ); if (isset($this->ranges)) { - $this->yy->loc->range = array($r[0], $r[0] + $this->yy->leng - $len); + $yy->loc->range = array($r[0], $r[0] + $this->yy->leng - $len); } + + $this->unputStack[] = $yy; } function more() @@ -325,6 +332,9 @@ function showPosition() function next() { + if ($yy = array_pop($this->unputStack)) { + $this->yy = $yy; + } if ($this->done == true) { return $this->eof; } From 4fafb24f3e832b80a5739a0c3e9fba74f863cb2c Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 8 Jul 2014 15:31:09 -0400 Subject: [PATCH 24/35] Working well with jQuery.sheet formula parser in C# --- ports/csharp/Jison/Jison.v12.suo | Bin 0 -> 5632 bytes ports/csharp/Jison/Jison/Jison.csproj | 7 +- ports/csharp/Jison/Jison/Template.cs | 40 +- ports/csharp/Jison/Jison/Test.cs | 3 +- ports/csharp/Jison/Jison/Test/Cell.cs | 39 +- ports/csharp/Jison/Jison/Test/Expression.cs | 77 +- ports/csharp/Jison/Jison/Test/Formula.cs | 213 ++- ports/csharp/Jison/Jison/Test/Functions.cs | 2 +- ports/csharp/Jison/Jison/bin/Debug/Jison.exe | Bin 49664 -> 64000 bytes ports/csharp/Jison/Jison/bin/Debug/Jison.pdb | Bin 87552 -> 132608 bytes .../Jison/Jison/bin/Debug/Jison.vshost.exe | Bin 22984 -> 24216 bytes .../Jison/bin/Debug/Jison.vshost.exe.manifest | 11 + ports/csharp/Jison/Jison/build.bat | 1 + ports/csharp/Jison/Jison/csharp.js | 11 +- ports/csharp/Jison/Jison/formula.js | 1305 +++++++++++++++++ ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 6824 bytes .../Jison.Properties.Resources.resources | Bin 0 -> 180 bytes .../Debug/Jison.csproj.FileListAbsolute.txt | 8 + .../Debug/Jison.csproj.GenerateResource.Cache | Bin 0 -> 919 bytes ...Jison.csprojResolveAssemblyReference.cache | Bin 0 -> 1755 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.exe | Bin 0 -> 64000 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.pdb | Bin 0 -> 132608 bytes .../Properties.Resources.Designer.cs.dll | Bin 0 -> 4096 bytes 23 files changed, 1583 insertions(+), 134 deletions(-) create mode 100644 ports/csharp/Jison/Jison.v12.suo create mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest create mode 100644 ports/csharp/Jison/Jison/build.bat create mode 100644 ports/csharp/Jison/Jison/formula.js create mode 100644 ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csprojResolveAssemblyReference.cache create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.exe create mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.pdb create mode 100644 ports/csharp/Jison/Jison/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo new file mode 100644 index 0000000000000000000000000000000000000000..cfb792f2841f191bfd113ed5782759705c292ee3 GIT binary patch literal 5632 zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*3Bx6O1pwz`z1zgT(&*|NkE(%nZap<|r6K zArQon4}>KQ3Jk6cc|f{|p%N68L<2DfR(PDl(*_RR2V$mQyEyASBRf#u0jf9vXk$J@ z7K10y_B0^Nm7xNMZtTKhz!Zrb+}Ks2igEzCz~l=C{tTr+U*|An0__LkbcSFcKM{yi z!EP~TFoCMXPN^|4F@o{{EbU`gg(>;~Dn!_RQ%ucBB0&2|_CF}!UV)kc%DaD&0}#pv ziG#ukM2~{u8v^vq{~Mk(3O$D9e^7=20xINxM&#Imn2Mj|0ZI>}{15g&C{KgJ0l&{7 zvdH-#7Iv&aDNs28%I~l|&j~dX#)qjLrH4-lz}j@6>_Sy5oPB0$PMZYE%IGmfD0{DC9K8N_1BYEM zFjRAZ{)YHjl!>`+YSB+V&X$t%F&uxi$?-FCm^gOMYmw49`+sh_u*Cm)9%aaKqwL`y y0viT#`u72*|77r33?%PEa)8W(m~$&Ndil+z9Yd;@{QdxnBT{ocB3?&&`Ue23uitwB literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/Jison.csproj b/ports/csharp/Jison/Jison/Jison.csproj index 59df70a60..f218632e2 100644 --- a/ports/csharp/Jison/Jison/Jison.csproj +++ b/ports/csharp/Jison/Jison/Jison.csproj @@ -71,8 +71,9 @@ True Resources.resx - + + @@ -122,7 +123,5 @@ - - - + \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index ae96dbac9..4060c4161 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -489,6 +489,18 @@ public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColu LastColumn = lastColumn; Range = range; } + + public ParserLocation Clone() + { + var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); + + if (Range != null) + { + parserLocation.Range = Range.Clone(); + } + + return parserLocation; + } } public class LexerConditions @@ -651,6 +663,12 @@ public ParserRange(int x, int y) X = x; Y = y; } + + public ParserRange Clone() + { + var parserRange = new ParserRange(X, Y); + return parserRange; + } } public class ParserSymbols @@ -703,18 +721,22 @@ public class ParserValue public ParserValue() { } - - public ParserValue(ParserValue parserValue) - { - Text = parserValue.Text; - Leng = parserValue.Leng; - Loc = parserValue.Loc; - LineNo = parserValue.LineNo; - } + + public ParserValue(string text, ParserLocation loc, int leng, int lineNo) + { + Text = text; + Loc = loc; + Leng = leng; + LineNo = lineNo; + } public ParserValue Clone() { - return new ParserValue(this); + var parserValue = new ParserValue(); + parserValue.Text = this.Text; + + + return parserValue; } } diff --git a/ports/csharp/Jison/Jison/Test.cs b/ports/csharp/Jison/Jison/Test.cs index 1dd965950..c56b08731 100644 --- a/ports/csharp/Jison/Jison/Test.cs +++ b/ports/csharp/Jison/Jison/Test.cs @@ -34,7 +34,8 @@ public static void Main() var parsedCell = Spreadsheet.Spreadsheets[0][0][2]; var value = parsedCell.UpdateValue(); - value = value; + Console.Write(value.ToDouble()); + Console.Read(); } } } diff --git a/ports/csharp/Jison/Jison/Test/Cell.cs b/ports/csharp/Jison/Jison/Test/Cell.cs index c24a9d242..897a2bc1b 100644 --- a/ports/csharp/Jison/Jison/Test/Cell.cs +++ b/ports/csharp/Jison/Jison/Test/Cell.cs @@ -5,10 +5,6 @@ namespace jQuerySheet { public class Cell { - public Cell () - { - } - public int Row; public int Col; public int Spreadsheet; @@ -16,12 +12,14 @@ public Cell () public Boolean HasFormula; public string Formula; public Expression Exp; - public DateTime CalcLast = new DateTime(); public int CalcCount = 0; - public Stack State = new Stack(); - + + public Cell() + { + } + public Cell(int spreadsheet, int row, int col) { Spreadsheet = spreadsheet; @@ -41,23 +39,24 @@ public Expression UpdateValue() if (HasFormula && State.Count < 1) { State.Push ("Parsing"); CalcCount++; - var formula = new Formula (); + var formula = new Formula(); var value = formula.Parse (Formula); State.Pop (); return value; - } else { - var exp = new Expression(); - double num; - if (double.TryParse(Value, out num)) - { - exp.Set(num); - } - else - { - exp.Set(Value); - } - return exp; } + + var exp = new Expression(); + double num; + if (double.TryParse(Value, out num)) + { + exp.Set(num); + } + else + { + exp.Set(Value); + } + return exp; + } } } diff --git a/ports/csharp/Jison/Jison/Test/Expression.cs b/ports/csharp/Jison/Jison/Test/Expression.cs index 769d100f2..e88a8a353 100644 --- a/ports/csharp/Jison/Jison/Test/Expression.cs +++ b/ports/csharp/Jison/Jison/Test/Expression.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Jison; namespace jQuerySheet { @@ -7,23 +8,46 @@ public class Expression : ParserValue { public bool ValueSet = false; public string Type; + public bool BoolValue; + public double DoubleValue; + public List Children; + + public Expression() + { + } - public Expression(){} - public Expression(Expression value) - { - Text = value.Text; - Leng = value.Leng; - Loc = value.Loc; - LineNo = value.LineNo; - ValueSet = value.ValueSet; - BoolValue = value.BoolValue; - Children = value.Children; - DoubleValue = value.DoubleValue; - } - - public Expression Clone() + public new Expression Clone() { - return new Expression(this); + var expression = new Expression(); + expression.Text = Text; + if (Loc != null) + { + expression.Loc = Loc.Clone(); + } + expression.Leng = Leng; + expression.LineNo = LineNo; + + expression.ValueSet = ValueSet; + expression.Type = Type; + expression.ValueSet = ValueSet; + expression.BoolValue = BoolValue; + + if (Children != null) + { + expression.Children = new JList(); + + foreach (var child in Children) + { + if (this != child) + { + expression.Children.Add(child.Clone()); + } + } + } + + expression.DoubleValue = DoubleValue; + + return expression; } public Expression(string value) @@ -31,12 +55,12 @@ public Expression(string value) Text = value; } - public bool BoolValue; public bool ToBool() { ValueSet = true; BoolValue = Convert.ToBoolean (Text); Type = "bool"; + Text = BoolValue.ToString(); return BoolValue; } public void Set(bool value) { @@ -45,11 +69,14 @@ public void Set(bool value) { Type = "bool"; } - - public double DoubleValue; public double ToDouble() { - ValueSet = true; + if (Type == "double") + { + return DoubleValue; + } + + ValueSet = true; if (!String.IsNullOrEmpty (Text) || DoubleValue != 0) { double num; if (double.TryParse(Text, out num)) { @@ -87,35 +114,33 @@ public void Add(Expression value) value.ToDouble(); DoubleValue += value.DoubleValue; Type = "double"; + Text = DoubleValue.ToString(); } public void Set(double value) { DoubleValue = value; + Text = value.ToString(); ValueSet = true; Type = "double"; } - public string ToString() { ValueSet = true; - Type = "string"; return Text; } + public void Set(string value) { Text = value; ValueSet = true; Type = "string"; } + public void Concat(Expression value) { Text += value.Text; Type = "string"; } - - - - - public List Children; + public void Push(Expression value) { if (Children == null) { diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index bc1ec4011..656314c29 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -1729,42 +1729,42 @@ public Formula() Rules = new Dictionary { - {0, new Regex(@"^(?:\s+)")}, - {1, new Regex(@"^(?:""(\\[""]|[^""])*"")")}, - {2, new Regex(@"^(?:'(\\[']|[^'])*')")}, - {3, new Regex(@"^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))")}, - {4, new Regex(@"^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))")}, - {5, new Regex(@"^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)")}, - {6, new Regex(@"^(?:SHEET[0-9]+)")}, - {7, new Regex(@"^(?:\$[A-Za-z]+\$[0-9]+)")}, - {8, new Regex(@"^(?:[A-Za-z]+[0-9]+)")}, - {9, new Regex(@"^(?:[A-Za-z]+(?=[(]))")}, - {10, new Regex(@"^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)")}, - {11, new Regex(@"^(?:[A-Za-z_]+)")}, - {12, new Regex(@"^(?:[0-9]+)")}, - {13, new Regex(@"^(?:\\s)")}, - {14, new Regex(@"^(?:[.])")}, - {15, new Regex(@"^(?::)")}, - {16, new Regex(@"^(?:;)")}, - {17, new Regex(@"^(?:,)")}, - {18, new Regex(@"^(?:\*)")}, - {19, new Regex(@"^(?:\/)")}, - {20, new Regex(@"^(?:-)")}, - {21, new Regex(@"^(?:\+)")}, - {22, new Regex(@"^(?:\^)")}, - {23, new Regex(@"^(?:\()")}, - {24, new Regex(@"^(?:\))")}, - {25, new Regex(@"^(?:>)")}, - {26, new Regex(@"^(?:<)")}, - {27, new Regex(@"^(?:NOT\b)")}, - {28, new Regex(@"^(?:E\b)")}, - {29, new Regex(@"^(?:"")")}, - {30, new Regex(@"^(?:')")}, - {31, new Regex(@"^(?:!)")}, - {32, new Regex(@"^(?:=)")}, - {33, new Regex(@"^(?:%)")}, - {34, new Regex(@"^(?:[#])")}, - {35, new Regex(@"^(?:$)")} + {0, new Regex(@"\G(?:\s+)")}, + {1, new Regex(@"\G(?:""(\\[""]|[^""])*"")")}, + {2, new Regex(@"\G(?:'(\\[']|[^'])*')")}, + {3, new Regex(@"\G(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))")}, + {4, new Regex(@"\G(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))")}, + {5, new Regex(@"\G(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)")}, + {6, new Regex(@"\G(?:SHEET[0-9]+)")}, + {7, new Regex(@"\G(?:\$[A-Za-z]+\$[0-9]+)")}, + {8, new Regex(@"\G(?:[A-Za-z]+[0-9]+)")}, + {9, new Regex(@"\G(?:[A-Za-z]+(?=[(]))")}, + {10, new Regex(@"\G(?:[A-Za-z]{1,}[A-Za-z_0-9]+)")}, + {11, new Regex(@"\G(?:[A-Za-z_]+)")}, + {12, new Regex(@"\G(?:[0-9]+)")}, + {13, new Regex(@"\G(?:\\s)")}, + {14, new Regex(@"\G(?:[.])")}, + {15, new Regex(@"\G(?::)")}, + {16, new Regex(@"\G(?:;)")}, + {17, new Regex(@"\G(?:,)")}, + {18, new Regex(@"\G(?:\*)")}, + {19, new Regex(@"\G(?:\/)")}, + {20, new Regex(@"\G(?:-)")}, + {21, new Regex(@"\G(?:\+)")}, + {22, new Regex(@"\G(?:\^)")}, + {23, new Regex(@"\G(?:\()")}, + {24, new Regex(@"\G(?:\))")}, + {25, new Regex(@"\G(?:>)")}, + {26, new Regex(@"\G(?:<)")}, + {27, new Regex(@"\G(?:NOT\b)")}, + {28, new Regex(@"\G(?:E\b)")}, + {29, new Regex(@"\G(?:"")")}, + {30, new Regex(@"\G(?:')")}, + {31, new Regex(@"\G(?:!)")}, + {32, new Regex(@"\G(?:=)")}, + {33, new Regex(@"\G(?:%)")}, + {34, new Regex(@"\G(?:[#])")}, + {35, new Regex(@"\G(?:$)")} }; Conditions = new Dictionary @@ -1793,10 +1793,12 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 3: - + // + break; case 4: - + // + break; case 5: @@ -1842,7 +1844,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 9: - + // + break; case 10: @@ -1863,7 +1866,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 12: - + // + ss[so-3].Set(ss[so-3].Text != ss[so].Text); thisS = ss[so-3]; @@ -1871,7 +1875,8 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 13: - + // + ss[so-2].Set(ss[so-2].Text != ss[so].Text); thisS = ss[so-2]; @@ -2281,24 +2286,22 @@ public Expression Parse(string input) public ParserSymbol Eof = new ParserSymbol("Eof", 1); public Expression Yy = new Expression(); public string Match = ""; - public string Matched = ""; public Stack ConditionStack; public Dictionary Rules; public Dictionary Conditions; public bool Done = false; public bool Less; public bool _More; - public string _Input; + public InputReader _Input; public int Offset; public DictionaryRanges; public bool Flex = false; public void SetInput(string input) { - _Input = input; + _Input = new InputReader(input); _More = Less = Done = false; Yy.LineNo = Yy.Leng = 0; - Matched = Match = ""; ConditionStack = new Stack(); ConditionStack.Push("INITIAL"); @@ -2314,12 +2317,11 @@ public void SetInput(string input) public string Input() { - string ch = _Input[0].ToString(); + string ch = _Input.Ch(); Yy.Text += ch; Yy.Leng++; Offset++; Match += ch; - Matched += ch; Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); if (lines.Success) { Yy.LineNo++; @@ -2333,7 +2335,6 @@ public string Input() Yy.Loc.Range.Y++; } - _Input = _Input.Substring(1); return ch; } @@ -2342,12 +2343,12 @@ public void Unput(string ch) int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - _Input = ch + _Input; + //TODO: not really compatible?? + _Input.unCh(ch.Length); Yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - Matched = Matched.Substring(0, Matched.Length - 1); if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; var r = Yy.Loc.Range; @@ -2379,8 +2380,8 @@ public void More() public string PastInput() { - var past = Matched.Substring(0, Matched.Length - Match.Length); - return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(-20), "/\n/", "") : ""); + var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); + return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); } public string UpcomingInput() @@ -2388,7 +2389,7 @@ public string UpcomingInput() var next = Match; if (next.Length < 20) { - next += _Input.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); + next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); } return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); } @@ -2413,7 +2414,7 @@ public ParserSymbol Next() return Eof; } - if (String.IsNullOrEmpty(_Input)) + if (_Input.Done) { Done = true; } @@ -2432,8 +2433,8 @@ public ParserSymbol Next() for (int i = 0; i < rules.Count; i++) { rule = Rules[rules[i]]; - var tempMatch = rule.Match(_Input); - if (tempMatch.Success == true && (match != null || tempMatch.Length > match.Length)) { + var tempMatch = _Input.Match(rule); + if (tempMatch.Success && tempMatch.Length > match.Length) { match = tempMatch.Value; matched = true; index = i; @@ -2454,7 +2455,6 @@ public ParserSymbol Next() Yy.Text += match; Match += match; - Matched += match; Yy.Leng = Yy.Text.Length; if (Ranges != null) @@ -2462,13 +2462,13 @@ public ParserSymbol Next() Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); } _More = false; - _Input = _Input.Substring(match.Length); + _Input.AddMatch(match); var ruleIndex = rules[index]; var nextCondition = ConditionStack.Peek(); dynamic action = LexerPerformAction(ruleIndex, nextCondition); ParserSymbol token = Symbols[action]; - if (Done == true && String.IsNullOrEmpty(_Input) == false) + if (Done == true || _Input.Done) { Done = false; } @@ -2480,7 +2480,7 @@ public ParserSymbol Next() } } - if (String.IsNullOrEmpty(_Input)) { + if (_Input.Done) { return Symbols["EOF"]; } else { @@ -2655,6 +2655,18 @@ public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColu LastColumn = lastColumn; Range = range; } + + public ParserLocation Clone() + { + var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); + + if (Range != null) + { + parserLocation.Range = Range.Clone(); + } + + return parserLocation; + } } public class LexerConditions @@ -2817,6 +2829,12 @@ public ParserRange(int x, int y) X = x; Y = y; } + + public ParserRange Clone() + { + var parserRange = new ParserRange(X, Y); + return parserRange; + } } public class ParserSymbols @@ -2869,18 +2887,22 @@ public class ParserValue public ParserValue() { } - - public ParserValue(ParserValue parserValue) - { - Text = parserValue.Text; - Leng = parserValue.Leng; - Loc = parserValue.Loc; - LineNo = parserValue.LineNo; - } + + public ParserValue(string text, ParserLocation loc, int leng, int lineNo) + { + Text = text; + Loc = loc; + Leng = leng; + LineNo = lineNo; + } public ParserValue Clone() { - return new ParserValue(this); + var parserValue = new ParserValue(); + parserValue.Text = this.Text; + + + return parserValue; } } @@ -2908,4 +2930,57 @@ public void Pop() } } } + + + public class InputReader + { + + public bool Done = false; + public string Input; + public int Length; + public JList Matches = new JList(); + public int Position = 0; + + public InputReader(string input) + { + Input = input; + Length = input.Length; + } + + public void AddMatch (string match) { + Matches.Push(match); + Position += match.Length; + Done = (Position >= Length); + } + + public string Ch() + { + var ch = Input[Position].ToString(); + AddMatch(ch); + return ch; + } + + public void unCh(int chLength) + { + Position -= chLength; + Position = Math.Max(0, Position); + Done = (Position >= Length); + } + + public string Substring(int start, int end) { + start = (start != 0 ? Position + start : Position); + end = (end != 0 ? start + end : Length); + return Input.Substring(start, end); + } + + public Match Match(Regex rule) { + var match = rule.Match(Input, Position); + return match; + } + + public new string ToString() + { + return String.Join("", Matches.ToArray()); + } + } } \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/Test/Functions.cs b/ports/csharp/Jison/Jison/Test/Functions.cs index 4edce4b0a..eff5cb715 100644 --- a/ports/csharp/Jison/Jison/Test/Functions.cs +++ b/ports/csharp/Jison/Jison/Test/Functions.cs @@ -39,7 +39,7 @@ public static Expression Sum(Expression value) return firstChild; } - value.ToDouble (); + value.ToDouble(); return value; } } diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.exe b/ports/csharp/Jison/Jison/bin/Debug/Jison.exe index 2d64ad580d4c6809d2d4367893213e0f71737619..fda9a7134ea9a5f6f16ff727aa6776e766020731 100755 GIT binary patch literal 64000 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 NK?D2Z=l?qk{BMmg-wFT# diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb b/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb index 3c2fef7fb05d4b8d7d8d0176a7306d3bc2b3e5e1..8d05e19f78b2d29b0182abd4690192c31d950f0f 100644 GIT binary patch literal 132608 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 + + + + + + + + + + diff --git a/ports/csharp/Jison/Jison/build.bat b/ports/csharp/Jison/Jison/build.bat new file mode 100644 index 000000000..a25546ea3 --- /dev/null +++ b/ports/csharp/Jison/Jison/build.bat @@ -0,0 +1 @@ +node csharp.js Test\formula.jison \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 1054335e4..9441850a6 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -85,19 +85,22 @@ exec("jison " + process.argv[2], function (error) { } str = comments.parse(str); - str = str.replace(/(\d)\n/g, function () { + str = str.replace(/(\d)(\n|\r\n)/g, function () { return arguments[1] + ';\n'; }); return str; } + function capitaliseFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + } + var FileName = fileName.charAt(0).toUpperCase() + fileName.slice(1); - var ClassName = FileName.replace(/^.*[\\\/]/, '').charAt(0).toUpperCase() + FileName.replace(/^.*[\\\/]/, '').slice(1); var option = { 'using': '', 'namespace': 'Jison', - 'class': ClassName, + 'class': capitaliseFirstLetter(FileName.split(/[/\\]/g).pop()), 'fileName': FileName + '.cs', 'extends': '', 'parserValue': '' @@ -238,7 +241,7 @@ exec("jison " + process.argv[2], function (error) { return result; } - + parserRaw = parserRaw .replace(new RegExp('//@@USING_INJECT@@', 'g'),(option.using ? 'using ' + option.using.split(',').join(';\nusing ') + ';' : '')) .replace(new RegExp('[/][*][*][/]namespace Jison[/][*][*][/]', 'g'), 'namespace ' + option.namespace) diff --git a/ports/csharp/Jison/Jison/formula.js b/ports/csharp/Jison/Jison/formula.js new file mode 100644 index 000000000..e4068a9b4 --- /dev/null +++ b/ports/csharp/Jison/Jison/formula.js @@ -0,0 +1,1305 @@ +/* parser generated by jison 0.4.13 */ +/* + Returns a Parser object of the following structure: + + Parser: { + yy: {} + } + + Parser.prototype: { + yy: {}, + trace: function(), + symbols_: {associative list: name ==> number}, + terminals_: {associative list: number ==> name}, + productions_: [...], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), + table: [...], + defaultActions: {...}, + parseError: function(str, hash), + parse: function(input), + + lexer: { + EOF: 1, + parseError: function(str, hash), + setInput: function(input), + input: function(), + unput: function(str), + more: function(), + less: function(n), + pastInput: function(), + upcomingInput: function(), + showPosition: function(), + test_match: function(regex_match_array, rule_index), + next: function(), + lex: function(), + begin: function(condition), + popState: function(), + _currentRules: function(), + topState: function(), + pushState: function(condition), + + options: { + ranges: boolean (optional: true ==> token location info will include a .range[] member) + flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) + backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) + }, + + performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), + rules: [...], + conditions: {associative list: name ==> set}, + } + } + + + token location info (@$, _$, etc.): { + first_line: n, + last_line: n, + first_column: n, + last_column: n, + range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) + } + + + the parseError function receives a 'hash' object with these members for lexer and parser errors: { + text: (matched text) + token: (the produced terminal token, if any) + line: (yylineno) + } + while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { + loc: (yylloc) + expected: (string describing the set of expected tokens) + recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) + } +*/ +var formula = (function(){ +var parser = {trace: function trace() { }, +yy: {}, +symbols_: {"error":2,"expressions":3,"expression":4,"EOF":5,"variableSequence":6,"TIME_AMPM":7,"TIME_24":8,"number":9,"STRING":10,"=":11,"+":12,"(":13,")":14,"<":15,">":16,"NOT":17,"-":18,"*":19,"/":20,"^":21,"E":22,"FUNCTION":23,"expseq":24,"cell":25,"FIXEDCELL":26,":":27,"CELL":28,"SHEET":29,"!":30,";":31,",":32,"VARIABLE":33,"DECIMAL":34,"NUMBER":35,"%":36,"#":37,"$accept":0,"$end":1}, +terminals_: {5:"EOF",7:"TIME_AMPM",8:"TIME_24",10:"STRING",11:"=",12:"+",13:"(",14:")",15:"<",16:">",17:"NOT",18:"-",19:"*",20:"/",21:"^",22:"E",23:"FUNCTION",26:"FIXEDCELL",27:":",28:"CELL",29:"SHEET",30:"!",31:";",32:",",33:"VARIABLE",34:"DECIMAL",35:"NUMBER",36:"%",37:"#"}, +productions_: [0,[3,2],[4,1],[4,1],[4,1],[4,1],[4,1],[4,3],[4,3],[4,3],[4,4],[4,4],[4,4],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,2],[4,2],[4,1],[4,3],[4,4],[4,1],[4,1],[4,2],[25,1],[25,3],[25,1],[25,3],[25,3],[25,5],[24,1],[24,3],[24,3],[6,1],[6,3],[9,1],[9,3],[9,2],[2,3],[2,4]], +performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { +/* this == yyval */ + +var $0 = $$.length - 1; +switch (yystate) { +case 1:return $$[$0-1]; +break; +case 2: + //js + this.$ = yy.handler.variable.apply(yy.obj, $$[$0]); + + //php this.$ = $this->variable($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 3: + //js + this.$ = yy.handler.time.apply(yy.obj, [$$[$0], true]); + // + +break; +case 4: + //js + this.$ = yy.handler.time.apply(yy.obj, [$$[$0]]); + // + +break; +case 5: + //js + this.$ = yy.handler.number.apply(yy.obj, [$$[$0]]); + + //php this.$ = $$[$0] * 1; + + /*cs + $$[$0].ToDouble(); + this.$ = $$[$0]; + */ + +break; +case 6: + //js + this.$ = $$[$0].substring(1, $$[$0].length - 1); + + //php this.$ = substr($$[$0], 1, -1); + + /*cs + $$[$0].ToString(); + this.$ = $$[$0]; + */ + +break; +case 7: + //js + yy.obj.html.pop(); + this.$ = yy.handler.callFunction.apply(yy.obj, ['EQUAL', [$$[$0-2], $$[$0]]]); + + //php this.$ = $$[$0-2] == $$[$0]; + + /*cs + $$[$0-2].Set($$[$0-2].Text == $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 8: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['+', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + /*php + if (is_numeric($$[$0-2]) && is_numeric($$[$0])) { + this.$ = $$[$0-2] + $$[$0]; + } else { + this.$ = $$[$0-2] . $$[$0]; + } + */ + + /*cs + if ($$[$0-2].IsNumeric()) { + $$[$0-2].ToDouble(); + $$[$0-2].Add($$[$0]); + this.$ = $$[$0-2]; + } else { + $$[$0-2].ToString(); + $$[$0-2].Concat($$[$0]); + this.$ = $$[$0-2]; + } + */ + +break; +case 9: + //js + this.$ = yy.handler.number.apply(yy.obj, [$$[$0-1]]); + // + +break; +case 10: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['LESS_EQUAL', [$$[$0-3], $$[$0-1]]]); + + //php this.$ = ($$[$0-3] * 1) <= ($$[$0] * 1); + + /*cs + $$[$0-3].Set($$[$0-3].ToDouble() <= $$[$0].ToDouble()); + this.$ = $$[$0-3]; + */ + +break; +case 11: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['GREATER_EQUAL', [$$[$0-3], $$[$0-1]]]); + + //php this.$ = ($$[$0-3] * 1) >= ($$[$0] * 1); + + /*cs + $$[$0-3].Set($$[$0-3].ToDouble() >= $$[$0].ToDouble()); + this.$ = $$[$0-3]; + */ + +break; +case 12: + //js|php + this.$ = ($$[$0-3] * 1) != ($$[$0] * 1); + + //js + if (isNaN(this.$)) this.$ = 0; + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + // + + /*cs + $$[$0-3].Set($$[$0-3].Text != $$[$0].Text); + this.$ = $$[$0-3]; + */ + +break; +case 13: + //js|php + this.$ = $$[$0-2] != $$[$0]; + + //js + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + // + + /*cs + $$[$0-2].Set($$[$0-2].Text != $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 14: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['GREATER', [$$[$0-2], $$[$0]]]); + + //php this.$ = ($$[$0-2] * 1) > ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() > $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 15: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, ['LESS', [$$[$0-2], $$[$0]]]); + + //php this.$ = ($$[$0-2] * 1) < ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() < $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 16: + //js|php + this.$ = ($$[$0-2] * 1) - ($$[$0] * 1); + + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['-', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() - $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 17: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['*', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = ($$[$0-2] * 1) * ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() * $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 18: + //js + this.$ = yy.handler.performMath.apply(yy.obj, ['/', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = ($$[$0-2] * 1) / ($$[$0] * 1); + + /*cs + $$[$0-2].Set($$[$0-2].ToDouble() / $$[$0].ToDouble()); + this.$ = $$[$0-2]; + */ + +break; +case 19: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0-2]]), + n2 = yy.handler.number.apply(yy.obj, [$$[$0]]); + + this.$ = yy.handler.performMath.apply(yy.obj, ['^', $$[$0-2], $$[$0]]); + yy.obj.html.pop(); + yy.obj.html.pop(); + yy.obj.html.push(null); + + //php this.$ = pow(($$[$0-2] * 1), ($$[$0] * 1)); + + /*cs + $$[$0-2].Set(Math.Pow($$[$0-2].ToDouble(), $$[$0].ToDouble())); + this.$ = $$[$0-2]; + */ + +break; +case 20: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0]]); + this.$ = n1 * -1; + if (isNaN(this.$)) this.$ = 0; + + //php this.$ = $$[$0-1] * 1; + + /*cs + $$[$0].Set(-$$[$0].ToDouble()); + this.$ = $$[$0]; + */ + +break; +case 21: + //js + var n1 = yy.handler.number.apply(yy.obj, [$$[$0]]); + this.$ = n1 * 1; + if (isNaN(this.$)) this.$ = 0; + + //php this.$ = $$[$0-1] * 1; + + /*cs + $$[$0].Set($$[$0].ToDouble()); + this.$ = $$[$0]; + */ + +break; +case 22:/*this.$ = Math.E;*/; +break; +case 23: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, [$$[$0-2], '']); + + //php this.$ = $this->callFunction($$[$0-2]); + + /*cs + this.$ = Functions.Call($$[$0-2].Text); + */ + +break; +case 24: + //js + this.$ = yy.handler.callFunction.apply(yy.obj, [$$[$0-3], $$[$0-1]]); + + //php this.$ = $this->callFunction($$[$0-3], $$[$0-1]); + + /*cs + this.$ = Functions.Call($$[$0-3].Text, $$[$0-1]); + */ + +break; +case 28: + //js + this.$ = yy.handler.fixedCellValue.apply(yy.obj, [$$[$0]]); + + //php this.$ = $this->fixedCellValue($$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseFixed($$[$0].Text)); + */ + +break; +case 29: + //js + this.$ = yy.handler.fixedCellRangeValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->fixedCellRangeValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseFixed($$[$0-2].Text), Location.ParseFixed($$[$0].Text)); + */ + +break; +case 30: + //js + this.$ = yy.handler.cellValue.apply(yy.obj, [$$[$0]]); + + //php this.$ = $this->cellValue($$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.Parse($$[$0].Text)); + */ + +break; +case 31: + //js + this.$ = yy.handler.cellRangeValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->cellRangeValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.Parse($$[$0-2].Text), Location.Parse($$[$0].Text)); + */ + +break; +case 32: + //js + this.$ = yy.handler.remoteCellValue.apply(yy.obj, [$$[$0-2], $$[$0]]); + + //php this.$ = $this->remoteCellValue($$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseRemote($$[$0-2].Text, $$[$0].Text)); + */ + +break; +case 33: + //js + this.$ = yy.handler.remoteCellRangeValue.apply(yy.obj, [$$[$0-4], $$[$0-2], $$[$0]]); + + //php this.$ = $this->remoteCellRangeValue($$[$0-4], $$[$0-2], $$[$0]); + + /*cs + this.$ = Spreadsheet.CellValue(Location.ParseRemote($$[$0-4].Text, $$[$0-2].Text), Location.ParseRemote($$[$0-4].Text, $$[$0].Text)); + */ + +break; +case 34: + //js + this.$ = [$$[$0]]; + + //php this.$ = array($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 35: + //js + $$[$0-2].push($$[$0]); + this.$ = $$[$0-2]; + + /*php + $$[$0-2][] = $$[$0]; + this.$ = $$[$0-2]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 36: + //js + $$[$0-2].push($$[$0]); + this.$ = $$[$0-2]; + + /*php + $$[$0-2][] = $$[$0]; + this.$ = $$[$0-2]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 37: + //js + this.$ = [$$[$0]]; + + //php this.$ = array($$[$0]); + + /*cs + this.$ = $$[$0]; + */ + +break; +case 38: + //js + this.$ = ($.isArray($$[$0-2]) ? $$[$0-2] : [$$[$0-2]]); + this.$.push($$[$0]); + + /*php + this.$ = (is_array($$[$0-2]) ? $$[$0-2] : array()); + this.$[] = $$[$0]; + */ + + /*cs + $$[$0-2].Push($$[$0]); + this.$ = $$[$0-2]; + */ + +break; +case 39: + //js|php + this.$ = $$[$0] * 1; + + /*cs + $$[$0].ToDouble(); + this.$ = $$[$0]; + */ + +break; +case 40: + //js + this.$ =($$[$0-2] + '.' + $$[$0]) * 1; + + //php this.$ = $$[$0-2] . '.' . $$[$0]; + + /*cs + $$[$0-2].Text += "." + $$[$0].Text; + $$[$0-2].ToDouble(); + this.$ = $$[$0-2]; + */ + +break; +case 41: + //js + yy.obj.html.push($$[$0-1] + $$[$0]); + + //js|php + this.$ = $$[$0-1] * 0.01; + + /*cs + $$[$0-1].Set($$[$0-1].ToDouble() * 0.01); + this.$ = $$[$0-1]; + */ + +break; +case 42: + //js + this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; + + //php this.$ = $$[$0-2] . $$[$0-1] . $$[$0]; + + /*cs + $$[$0-2].Set($$[$0-2].Text + $$[$0-1].Text + $$[$0].Text); + this.$ = $$[$0-2]; + */ + +break; +case 43: + //js + this.$ = $$[$0-2] + $$[$0-1] + $$[$0]; + + //php this.$ = $$[$0-2] . $$[$0-1] . $$[$0]; + + /*cs + $$[$0-3].Set($$[$0-3].Text + $$[$0-2].Text + $$[$0-1].Text + $$[$0].Text); + this.$ = $$[$0-3]; + */ + +break; +} +}, +table: [{2:14,3:1,4:2,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{1:[3]},{5:[1,21],11:[1,22],12:[1,23],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30]},{5:[2,2],11:[2,2],12:[2,2],14:[2,2],15:[2,2],16:[2,2],17:[2,2],18:[2,2],19:[2,2],20:[2,2],21:[2,2],31:[2,2],32:[2,2],34:[1,31]},{5:[2,3],11:[2,3],12:[2,3],14:[2,3],15:[2,3],16:[2,3],17:[2,3],18:[2,3],19:[2,3],20:[2,3],21:[2,3],31:[2,3],32:[2,3]},{5:[2,4],11:[2,4],12:[2,4],14:[2,4],15:[2,4],16:[2,4],17:[2,4],18:[2,4],19:[2,4],20:[2,4],21:[2,4],31:[2,4],32:[2,4]},{5:[2,5],11:[2,5],12:[2,5],14:[2,5],15:[2,5],16:[2,5],17:[2,5],18:[2,5],19:[2,5],20:[2,5],21:[2,5],31:[2,5],32:[2,5],36:[1,32]},{5:[2,6],11:[2,6],12:[2,6],14:[2,6],15:[2,6],16:[2,6],17:[2,6],18:[2,6],19:[2,6],20:[2,6],21:[2,6],31:[2,6],32:[2,6]},{2:14,4:33,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:34,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:35,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,22],11:[2,22],12:[2,22],14:[2,22],15:[2,22],16:[2,22],17:[2,22],18:[2,22],19:[2,22],20:[2,22],21:[2,22],31:[2,22],32:[2,22]},{13:[1,36]},{5:[2,25],11:[2,25],12:[2,25],14:[2,25],15:[2,25],16:[2,25],17:[2,25],18:[2,25],19:[2,25],20:[2,25],21:[2,25],31:[2,25],32:[2,25]},{2:37,5:[2,26],11:[2,26],12:[2,26],14:[2,26],15:[2,26],16:[2,26],17:[2,26],18:[2,26],19:[2,26],20:[2,26],21:[2,26],31:[2,26],32:[2,26],33:[1,38],37:[1,20]},{5:[2,37],11:[2,37],12:[2,37],14:[2,37],15:[2,37],16:[2,37],17:[2,37],18:[2,37],19:[2,37],20:[2,37],21:[2,37],31:[2,37],32:[2,37],34:[2,37],37:[1,39]},{5:[2,39],11:[2,39],12:[2,39],14:[2,39],15:[2,39],16:[2,39],17:[2,39],18:[2,39],19:[2,39],20:[2,39],21:[2,39],31:[2,39],32:[2,39],34:[1,40],36:[2,39]},{5:[2,28],11:[2,28],12:[2,28],14:[2,28],15:[2,28],16:[2,28],17:[2,28],18:[2,28],19:[2,28],20:[2,28],21:[2,28],27:[1,41],31:[2,28],32:[2,28]},{5:[2,30],11:[2,30],12:[2,30],14:[2,30],15:[2,30],16:[2,30],17:[2,30],18:[2,30],19:[2,30],20:[2,30],21:[2,30],27:[1,42],31:[2,30],32:[2,30]},{30:[1,43]},{33:[1,44]},{1:[2,1]},{2:14,4:45,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:46,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:49,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],11:[1,47],12:[1,10],13:[1,8],16:[1,48],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:51,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],11:[1,50],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:52,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:53,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:54,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:55,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:56,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{33:[1,57]},{5:[2,41],11:[2,41],12:[2,41],14:[2,41],15:[2,41],16:[2,41],17:[2,41],18:[2,41],19:[2,41],20:[2,41],21:[2,41],31:[2,41],32:[2,41],36:[2,41]},{11:[1,22],12:[1,23],14:[1,58],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30]},{5:[2,20],11:[2,20],12:[2,20],14:[2,20],15:[2,20],16:[2,20],17:[2,20],18:[2,20],19:[1,28],20:[1,29],21:[1,30],31:[2,20],32:[2,20]},{5:[2,21],11:[2,21],12:[2,21],14:[2,21],15:[2,21],16:[2,21],17:[2,21],18:[2,21],19:[1,28],20:[1,29],21:[1,30],31:[2,21],32:[2,21]},{2:14,4:61,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],14:[1,59],18:[1,9],22:[1,11],23:[1,12],24:60,25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,27],11:[2,27],12:[2,27],14:[2,27],15:[2,27],16:[2,27],17:[2,27],18:[2,27],19:[2,27],20:[2,27],21:[2,27],31:[2,27],32:[2,27]},{37:[1,39]},{33:[1,62]},{35:[1,63]},{26:[1,64]},{28:[1,65]},{28:[1,66]},{30:[1,67]},{5:[2,7],11:[2,7],12:[1,23],14:[2,7],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,7],32:[2,7]},{5:[2,8],11:[2,8],12:[2,8],14:[2,8],15:[2,8],16:[2,8],17:[2,8],18:[2,8],19:[1,28],20:[1,29],21:[1,30],31:[2,8],32:[2,8]},{2:14,4:68,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:69,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,15],11:[2,15],12:[1,23],14:[2,15],15:[2,15],16:[2,15],17:[2,15],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,15],32:[2,15]},{2:14,4:70,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,14],11:[2,14],12:[1,23],14:[2,14],15:[2,14],16:[2,14],17:[2,14],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,14],32:[2,14]},{5:[2,13],11:[2,13],12:[1,23],14:[2,13],15:[1,24],16:[1,25],17:[2,13],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,13],32:[2,13]},{5:[2,16],11:[2,16],12:[2,16],14:[2,16],15:[2,16],16:[2,16],17:[2,16],18:[2,16],19:[1,28],20:[1,29],21:[1,30],31:[2,16],32:[2,16]},{5:[2,17],11:[2,17],12:[2,17],14:[2,17],15:[2,17],16:[2,17],17:[2,17],18:[2,17],19:[2,17],20:[2,17],21:[1,30],31:[2,17],32:[2,17]},{5:[2,18],11:[2,18],12:[2,18],14:[2,18],15:[2,18],16:[2,18],17:[2,18],18:[2,18],19:[2,18],20:[2,18],21:[1,30],31:[2,18],32:[2,18]},{5:[2,19],11:[2,19],12:[2,19],14:[2,19],15:[2,19],16:[2,19],17:[2,19],18:[2,19],19:[2,19],20:[2,19],21:[2,19],31:[2,19],32:[2,19]},{5:[2,38],11:[2,38],12:[2,38],14:[2,38],15:[2,38],16:[2,38],17:[2,38],18:[2,38],19:[2,38],20:[2,38],21:[2,38],31:[2,38],32:[2,38],34:[2,38]},{5:[2,9],11:[2,9],12:[2,9],14:[2,9],15:[2,9],16:[2,9],17:[2,9],18:[2,9],19:[2,9],20:[2,9],21:[2,9],31:[2,9],32:[2,9]},{5:[2,23],11:[2,23],12:[2,23],14:[2,23],15:[2,23],16:[2,23],17:[2,23],18:[2,23],19:[2,23],20:[2,23],21:[2,23],31:[2,23],32:[2,23]},{14:[1,71],31:[1,72],32:[1,73]},{11:[1,22],12:[1,23],14:[2,34],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,34],32:[2,34]},{30:[1,74]},{5:[2,40],11:[2,40],12:[2,40],14:[2,40],15:[2,40],16:[2,40],17:[2,40],18:[2,40],19:[2,40],20:[2,40],21:[2,40],31:[2,40],32:[2,40],36:[2,40]},{5:[2,29],11:[2,29],12:[2,29],14:[2,29],15:[2,29],16:[2,29],17:[2,29],18:[2,29],19:[2,29],20:[2,29],21:[2,29],31:[2,29],32:[2,29]},{5:[2,31],11:[2,31],12:[2,31],14:[2,31],15:[2,31],16:[2,31],17:[2,31],18:[2,31],19:[2,31],20:[2,31],21:[2,31],31:[2,31],32:[2,31]},{5:[2,32],11:[2,32],12:[2,32],14:[2,32],15:[2,32],16:[2,32],17:[2,32],18:[2,32],19:[2,32],20:[2,32],21:[2,32],27:[1,75],31:[2,32],32:[2,32]},{5:[2,42],11:[2,42],12:[2,42],14:[2,42],15:[2,42],16:[2,42],17:[2,42],18:[2,42],19:[2,42],20:[2,42],21:[2,42],31:[2,42],32:[2,42],33:[2,42],37:[2,42]},{5:[2,10],11:[2,10],12:[1,23],14:[2,10],15:[2,10],16:[2,10],17:[2,10],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,10],32:[2,10]},{5:[2,12],11:[2,12],12:[1,23],14:[2,12],15:[2,12],16:[2,12],17:[2,12],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,12],32:[2,12]},{5:[2,11],11:[2,11],12:[1,23],14:[2,11],15:[2,11],16:[2,11],17:[2,11],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,11],32:[2,11]},{5:[2,24],11:[2,24],12:[2,24],14:[2,24],15:[2,24],16:[2,24],17:[2,24],18:[2,24],19:[2,24],20:[2,24],21:[2,24],31:[2,24],32:[2,24]},{2:14,4:76,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{2:14,4:77,6:3,7:[1,4],8:[1,5],9:6,10:[1,7],12:[1,10],13:[1,8],18:[1,9],22:[1,11],23:[1,12],25:13,26:[1,17],28:[1,18],29:[1,19],33:[1,15],35:[1,16],37:[1,20]},{5:[2,43],11:[2,43],12:[2,43],14:[2,43],15:[2,43],16:[2,43],17:[2,43],18:[2,43],19:[2,43],20:[2,43],21:[2,43],31:[2,43],32:[2,43],33:[2,43],37:[2,43]},{28:[1,78]},{11:[1,22],12:[1,23],14:[2,35],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,35],32:[2,35]},{11:[1,22],12:[1,23],14:[2,36],15:[1,24],16:[1,25],17:[1,26],18:[1,27],19:[1,28],20:[1,29],21:[1,30],31:[2,36],32:[2,36]},{5:[2,33],11:[2,33],12:[2,33],14:[2,33],15:[2,33],16:[2,33],17:[2,33],18:[2,33],19:[2,33],20:[2,33],21:[2,33],31:[2,33],32:[2,33]}], +defaultActions: {21:[2,1]}, +parseError: function parseError(str, hash) { + if (hash.recoverable) { + this.trace(str); + } else { + throw new Error(str); + } +}, +parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], // semantic value stack + lstack = [], // location stack + table = this.table, + yytext = '', + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + + var args = lstack.slice.call(arguments, 1); + + //this.reductionCount = this.shiftCount = 0; + + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == 'undefined') { + this.lexer.yylloc = {}; + } + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + + var ranges = this.lexer.options && this.lexer.options.ranges; + + if (typeof this.yy.parseError === 'function') { + this.parseError = this.yy.parseError; + } else { + this.parseError = Object.getPrototypeOf(this).parseError; + } + + function popStack (n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + + function lex() { + var token; + token = self.lexer.lex() || EOF; // $end = 1 + // if token isn't its numeric value, convert + if (typeof token !== 'number') { + token = self.symbols_[token] || token; + } + return token; + } + + var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; + while (true) { + // retreive state number from top of stack + state = stack[stack.length - 1]; + + // use default actions if available + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == 'undefined') { + symbol = lex(); + } + // read action for current state and first input + action = table[state] && table[state][symbol]; + } + +_handle_error: + // handle parse error + if (typeof action === 'undefined' || !action.length || !action[0]) { + var error_rule_depth; + var errStr = ''; + + // Return the rule stack depth where the nearest error rule can be found. + // Return FALSE when no error recovery rule was found. + function locateNearestErrorRecoveryRule(state) { + var stack_probe = stack.length - 1; + var depth = 0; + + // try to recover from error + for(;;) { + // check for error recovery rule in this state + if ((TERROR.toString()) in table[state]) { + return depth; + } + if (state === 0 || stack_probe < 2) { + return false; // No suitable error recovery rule available. + } + stack_probe -= 2; // popStack(1): [symbol, action] + state = stack[stack_probe]; + ++depth; + } + } + + if (!recovering) { + // first see if there's any chance at hitting an error recovery rule: + error_rule_depth = locateNearestErrorRecoveryRule(state); + + // Report error + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push("'"+this.terminals_[p]+"'"); + } + } + if (this.lexer.showPosition) { + errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + (this.terminals_[symbol] || symbol)+ "'"; + } else { + errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " + + (symbol == EOF ? "end of input" : + ("'"+(this.terminals_[symbol] || symbol)+"'")); + } + this.parseError(errStr, { + text: this.lexer.match, + token: this.terminals_[symbol] || symbol, + line: this.lexer.yylineno, + loc: yyloc, + expected: expected, + recoverable: (error_rule_depth !== false) + }); + } else if (preErrorSymbol !== EOF) { + error_rule_depth = locateNearestErrorRecoveryRule(state); + } + + // just recovered from another error + if (recovering == 3) { + if (symbol === EOF || preErrorSymbol === EOF) { + throw new Error(errStr || 'Parsing halted while starting to recover from another error.'); + } + + // discard current lookahead and grab another + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + symbol = lex(); + } + + // try to recover from error + if (error_rule_depth === false) { + throw new Error(errStr || 'Parsing halted. No suitable error recovery rule available.'); + } + popStack(error_rule_depth); + + preErrorSymbol = (symbol == TERROR ? null : symbol); // save the lookahead token + symbol = TERROR; // insert generic error symbol as new lookahead + state = stack[stack.length-1]; + action = table[state] && table[state][TERROR]; + recovering = 3; // allow 3 real symbols to be shifted before reporting a new error + } + + // this shouldn't happen, unless resolve defaults are off + if (action[0] instanceof Array && action.length > 1) { + throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol); + } + + switch (action[0]) { + case 1: // shift + //this.shiftCount++; + + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); // push state + symbol = null; + if (!preErrorSymbol) { // normal execution/no error + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) { + recovering--; + } + } else { + // error just occurred, resume old lookahead f/ before error + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + + case 2: + // reduce + //this.reductionCount++; + + len = this.productions_[action[1]][1]; + + // perform semantic action + yyval.$ = vstack[vstack.length-len]; // default to $$ = $1 + // default location, uses first token for firsts, last for lasts + yyval._$ = { + first_line: lstack[lstack.length-(len||1)].first_line, + last_line: lstack[lstack.length-1].last_line, + first_column: lstack[lstack.length-(len||1)].first_column, + last_column: lstack[lstack.length-1].last_column + }; + if (ranges) { + yyval._$.range = [lstack[lstack.length-(len||1)].range[0], lstack[lstack.length-1].range[1]]; + } + r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack].concat(args)); + + if (typeof r !== 'undefined') { + return r; + } + + // pop off stack + if (len) { + stack = stack.slice(0,-1*len*2); + vstack = vstack.slice(0, -1*len); + lstack = lstack.slice(0, -1*len); + } + + stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce) + vstack.push(yyval.$); + lstack.push(yyval._$); + // goto new state = table[STATE][NONTERMINAL] + newState = table[stack[stack.length-2]][stack[stack.length-1]]; + stack.push(newState); + break; + + case 3: + // accept + return true; + } + + } + + return true; +}}; + +if (typeof(window) !== 'undefined') { + window.Formula = function(handler) { + var formulaLexer = function () {}; + formulaLexer.prototype = formula.lexer; + + var formulaParser = function () { + this.lexer = new formulaLexer(); + this.yy = {}; + }; + + formulaParser.prototype = formula; + var newParser = new formulaParser; + newParser.setObj = function(obj) { + newParser.yy.obj = obj; + }; + newParser.yy.handler = handler; + return newParser; + }; +}/* generated by jison-lex 0.2.1 */ +var lexer = (function(){ +var lexer = { + +EOF:1, + +parseError:function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + +// resets the lexer, sets new input +setInput:function (input) { + this._input = input; + this._more = this._backtrack = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { + first_line: 1, + first_column: 0, + last_line: 1, + last_column: 0 + }; + if (this.options.ranges) { + this.yylloc.range = [0,0]; + } + this.offset = 0; + return this; + }, + +// consumes and returns one char from the input +input:function () { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) { + this.yylloc.range[1]++; + } + + this._input = this._input.slice(1); + return ch; + }, + +// unshifts one char (or a string) into the input +unput:function (ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) { + this.yylineno -= lines.length - 1; + } + var r = this.yylloc.range; + + this.yylloc = { + first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? + (lines.length === oldLines.length ? this.yylloc.first_column : 0) + + oldLines[oldLines.length - lines.length].length - lines[0].length : + this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + this.yyleng = this.yytext.length; + return this; + }, + +// When called from action, caches matched text and appends it on next action +more:function () { + this._more = true; + return this; + }, + +// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. +reject:function () { + if (this.options.backtrack_lexer) { + this._backtrack = true; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + + } + return this; + }, + +// retain first n characters of the match +less:function (n) { + this.unput(this.match.slice(n)); + }, + +// displays already matched input, i.e. for error messages +pastInput:function () { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); + }, + +// displays upcoming input, i.e. for error messages +upcomingInput:function () { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20-next.length); + } + return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + +// displays the character position where the lexing error occurred, i.e. for error messages +showPosition:function () { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + +// test the lexed token: return FALSE when not a match, otherwise return token +test_match:function (match, indexed_rule) { + var token, + lines, + backup; + + if (this.options.backtrack_lexer) { + // save context + backup = { + yylineno: this.yylineno, + yylloc: { + first_line: this.yylloc.first_line, + last_line: this.last_line, + first_column: this.yylloc.first_column, + last_column: this.yylloc.last_column + }, + yytext: this.yytext, + match: this.match, + matches: this.matches, + matched: this.matched, + yyleng: this.yyleng, + offset: this.offset, + _more: this._more, + _input: this._input, + yy: this.yy, + conditionStack: this.conditionStack.slice(0), + done: this.done + }; + if (this.options.ranges) { + backup.yylloc.range = this.yylloc.range.slice(0); + } + } + + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno += lines.length; + } + this.yylloc = { + first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? + lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : + this.yylloc.last_column + match[0].length + }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._backtrack = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) { + this.done = false; + } + if (token) { + return token; + } else if (this._backtrack) { + // recover context + for (var k in backup) { + this[k] = backup[k]; + } + return false; // rule action called reject() implying the next rule should be tested instead. + } + return false; + }, + +// return next match in input +next:function () { + if (this.done) { + return this.EOF; + } + if (!this._input) { + this.done = true; + } + + var token, + match, + tempMatch, + index; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (this.options.backtrack_lexer) { + token = this.test_match(tempMatch, rules[i]); + if (token !== false) { + return token; + } else if (this._backtrack) { + match = false; + continue; // rule action called reject() implying a rule MISmatch. + } else { + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + } else if (!this.options.flex) { + break; + } + } + } + if (match) { + token = this.test_match(match, rules[index]); + if (token !== false) { + return token; + } + // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) + return false; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { + text: "", + token: null, + line: this.yylineno + }); + } + }, + +// return next match that has a token +lex:function lex() { + var r = this.next(); + if (r) { + return r; + } else { + return this.lex(); + } + }, + +// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) +begin:function begin(condition) { + this.conditionStack.push(condition); + }, + +// pop the previously active lexer condition state off the condition stack +popState:function popState() { + var n = this.conditionStack.length - 1; + if (n > 0) { + return this.conditionStack.pop(); + } else { + return this.conditionStack[0]; + } + }, + +// produce the lexer rule set which is active for the currently active lexer condition state +_currentRules:function _currentRules() { + if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + } else { + return this.conditions["INITIAL"].rules; + } + }, + +// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available +topState:function topState(n) { + n = this.conditionStack.length - 1 - Math.abs(n || 0); + if (n >= 0) { + return this.conditionStack[n]; + } else { + return "INITIAL"; + } + }, + +// alias for begin(condition) +pushState:function pushState(condition) { + this.begin(condition); + }, + +// return the number of states currently on the stack +stateStackSize:function stateStackSize() { + return this.conditionStack.length; + }, +options: {}, +performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { + +var YYSTATE=YY_START; +switch($avoiding_name_collisions) { +case 0:/* skip whitespace */ +break; +case 1:return 10; +break; +case 2:return 10; +break; +case 3:return 23; +break; +case 4:return 7; +break; +case 5:return 8; +break; +case 6: + //js + if (yy.obj.type == 'cell') return 29; + return 33; + + /*php + if ($this->type == 'cell') return 29; + return 33; + */ + + /*cs + return 29; + //return 33; + */ + +break; +case 7: + //js + if (yy.obj.type == 'cell') return 26; + return 33; + + /*php + if ($this->type == 'cell') return 26; + return 33; + */ + + /*cs + return 26; + //return 33; + */ + +break; +case 8: + //js + if (yy.obj.type == 'cell') return 28; + return 33; + + /*php + if ($this->type == 'cell') return 28; + return 33; + */ + + /*cs + return 28; + //return 33; + */ + +break; +case 9:return 23; +break; +case 10:return 33; +break; +case 11:return 33; +break; +case 12:return 35; +break; +case 13:/* skip whitespace */ +break; +case 14:return 34; +break; +case 15:return 27; +break; +case 16:return 31; +break; +case 17:return 32; +break; +case 18:return 19; +break; +case 19:return 20; +break; +case 20:return 18; +break; +case 21:return 12; +break; +case 22:return 21; +break; +case 23:return 13; +break; +case 24:return 14; +break; +case 25:return 16; +break; +case 26:return 15; +break; +case 27:return 17; +break; +case 28:return 22; +break; +case 29:return '"'; +break; +case 30:return "'"; +break; +case 31:return "!"; +break; +case 32:return 11; +break; +case 33:return 36; +break; +case 34:return 37; +break; +case 35:return 5; +break; +} +}, +rules: [/^(?:\s+)/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+(?=[(]))/,/^(?:([0]?[1-9]|1[0-2])[:][0-5][0-9]([:][0-5][0-9])?[ ]?(AM|am|aM|Am|PM|pm|pM|Pm))/,/^(?:([0]?[0-9]|1[0-9]|2[0-3])[:][0-5][0-9]([:][0-5][0-9])?)/,/^(?:SHEET[0-9]+)/,/^(?:\$[A-Za-z]+\$[0-9]+)/,/^(?:[A-Za-z]+[0-9]+)/,/^(?:[A-Za-z]+(?=[(]))/,/^(?:[A-Za-z]{1,}[A-Za-z_0-9]+)/,/^(?:[A-Za-z_]+)/,/^(?:[0-9]+)/,/^(?:\\s)/,/^(?:[.])/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\/)/,/^(?:-)/,/^(?:\+)/,/^(?:\^)/,/^(?:\()/,/^(?:\))/,/^(?:>)/,/^(?:<)/,/^(?:NOT\b)/,/^(?:E\b)/,/^(?:")/,/^(?:')/,/^(?:!)/,/^(?:=)/,/^(?:%)/,/^(?:[#])/,/^(?:$)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"inclusive":true}} +}; +return lexer; +})(); +parser.lexer = lexer; +function Parser () { + this.yy = {}; +} +Parser.prototype = parser;parser.Parser = Parser; +return new Parser; +})(); + + +if (typeof require !== 'undefined' && typeof exports !== 'undefined') { +exports.parser = formula; +exports.Parser = formula.Parser; +exports.parse = function () { return formula.parse.apply(formula, arguments); }; +exports.main = function commonjsMain(args) { + if (!args[1]) { + console.log('Usage: '+args[0]+' FILE'); + process.exit(1); + } + var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); + return exports.parser.parse(source); +}; +if (typeof module !== 'undefined' && require.main === module) { + exports.main(process.argv.slice(1)); +} +} \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..e9350f2fce01b536726f0d04548a1998d0bfbde3 GIT binary patch literal 6824 zcmeHMZByGu5VpZwFoYJ1+-poqBfy zTo1pczo65f*zU?NyoUCJG{XnWXMEINyGbe@hNxx6>yikgHmfKo8(#*$MsR`&^5`Kd>*SX84ZR$JRp_=u2qE^i|Lf2iF)MJN2?)RE% z)PlBKXWG_<>%e;Nqq0V2lj;7jYG^5@-+>YJh&O#9S(!B`xMIUs8s>L0yN=-}S9j`| z>vX-%FE?@Tg8uZVybJ48`rI_jTryh=$(foA98G1FQEBgPQoXAto97hcffNn!5Uy%U zvL;trwoV3QVPTq~3unO4X=j{5nLgL_R``6M$%mJ#%UlI6Z6VY z7#Xja&m^~vH{gQz#qI4Yx z<9cz{k=$m7L5yWHcsqguxIij<0|fkxqR65cLop6wjNAm7A`>89wkusa^t=k}_>f9w z_8F{cyj!dFiDBUYUhst;tL!q!wWDM55!h*$o|``_pp>Q*7L(ct+|cuwG|R#cJ?3j= zzT*0IXqkIl3EvEa1eL9JsSL~?B2`BUYtJk*D{O*PKrL%Pe=1A~_n^;pE3CmJ^MN)Q zHnn$I_G4VlB#4=_6Yf!ZoH)rr`y{sK`zy*XkSWk+qV`Yl&Qshax8QCJb;kVMd~qfF zDg2#7ALExyqc9G+?>PiHd&Y2Fm)wc&*b&R&HlTmWT@XLT<(7`8j6FqW;xubTS&2n8 znFX`I#WmX+@O85xq!+r>h&G&j2KFm)*?$oPh8<-?{8ML2oD z(aGVIsip>sD$^%|#G??Ao8QzJWy|G`Fg4mt%qX!$$Sf7V^Bd<@DOSi1aR1ty8O zk9+fDPV%8gnjSpJf?Qn## literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources b/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt new file mode 100644 index 000000000..e068f4738 --- /dev/null +++ b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt @@ -0,0 +1,8 @@ +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe.config +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.pdb +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csprojResolveAssemblyReference.cache +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.Properties.Resources.resources +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csproj.GenerateResource.Cache +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.exe +C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.pdb diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache new file mode 100644 index 0000000000000000000000000000000000000000..6d2fbfad1909441196a5718ce02f5bdf4b889eb3 GIT binary patch literal 919 zcma)4%}N|W5T4PQb!T>k@eo9k!xB6QF2k-O$z=(+Vj@xS56K}AdZuegv%S+xSC6`tt{4vG z&OmI7kl8kxNlpPjLb(SsC?%A+0$e0;WC6eID-F0ZGuDYr!=cKouyntg38Ygw0m+Cx zWg&OQ&V#^z+syH}I_rHQjGSCEa=VI934#4vC*2|N?YNYo{la6VhYHP}K951WVJ`Jio5s2(!@ z@g4mzQMmdrFms-;&4OGhrttbnTnltZMyf)AeD&lGt`s_Kk*H%MO<8QS| zmy}TL@p6&Dg^&;pB$0ruY7kOLSA~t)E8Ag|f+tl7!rmp~Op*}=47*xTP(=7Ibwv@( zeMbB~@g(Cb^L#1}izb8vZ{Vg5^WliIY3Kv5;DbT<1BxmmQ9dR#0bv-0f>A2fD$BI? zF86w}B<8(;_W%89`>lylnKuKsRM7}>^8z0!W{)A3v=d@f(dZfC5oIp)t_yQXQD@2aJVhPJ!yZs)a`!+bE{>!f=+3G>xS n_jMB1Lnl4ZNmwtP^iU^ZJ$2H$PQrTYqz#>f=b@7xX{6d;TgCng literal 0 HcmV?d00001 diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.exe b/ports/csharp/Jison/Jison/obj/Debug/Jison.exe new file mode 100644 index 0000000000000000000000000000000000000000..fda9a7134ea9a5f6f16ff727aa6776e766020731 GIT binary patch literal 64000 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 k>pjdeVopu&mWMfJ@OSg17B?(d$^Q(aci*rTxS Date: Tue, 8 Jul 2014 15:43:50 -0400 Subject: [PATCH 25/35] Removing files not needed --- ports/csharp/Jison/Jison.v12.suo | Bin 5632 -> 75264 bytes ports/csharp/Jison/Jison/bin/Debug/Jison.exe | Bin 64000 -> 0 bytes .../Jison/Jison/bin/Debug/Jison.exe.config | 6 ------ ports/csharp/Jison/Jison/bin/Debug/Jison.pdb | Bin 132608 -> 0 bytes .../Jison/Jison/bin/Debug/Jison.vshost.exe | Bin 24216 -> 0 bytes .../Jison/bin/Debug/Jison.vshost.exe.config | 6 ------ .../Jison/bin/Debug/Jison.vshost.exe.manifest | 11 ----------- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6824 -> 0 bytes .../Jison.Properties.Resources.resources | Bin 180 -> 0 bytes .../Debug/Jison.csproj.FileListAbsolute.txt | 8 -------- .../Debug/Jison.csproj.GenerateResource.Cache | Bin 919 -> 0 bytes ...Jison.csprojResolveAssemblyReference.cache | Bin 1755 -> 0 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.exe | Bin 64000 -> 0 bytes ports/csharp/Jison/Jison/obj/Debug/Jison.pdb | Bin 132608 -> 0 bytes .../Properties.Resources.Designer.cs.dll | Bin 4096 -> 0 bytes 15 files changed, 31 deletions(-) delete mode 100755 ports/csharp/Jison/Jison/bin/Debug/Jison.exe delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.exe.config delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.pdb delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.config delete mode 100644 ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.csprojResolveAssemblyReference.cache delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.exe delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/Jison.pdb delete mode 100644 ports/csharp/Jison/Jison/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index cfb792f2841f191bfd113ed5782759705c292ee3..6170e40d673aa27aa31441e0a4fb0aa73433457e 100644 GIT binary patch literal 75264 zcmeHweVAL-dFLIV7#v6-&_EIv2139Pq-Zo6Nn`V+Pup}H8_!?}Q34w2jz?q7XsQp7 z9orj1z#)MUlO~k7ff_>S$8Pfwn&zXW#f8GAT>{zAO+Pl>g(gpy=SiPJ^2fH@J{#}v zch5b#A9E#L$(qrX;-lx)J@?*o&pGdV-t(UKyyxqCFQ5JDqhEX1Yl_WXtDLO-;@IiR zsix;A!B5cKS&H&2@bLZ@$BrH2vy%bm0&si6^$7*GD<%A@%CM4B7H};qds&pO-8;Yq z64ldNe0A0r=KjZz55GJ#$#7SSz}t{wNtshNBlQ{hQp%ndu~=Wf0~{#R=hgbw`EDN` zgMBr(RjC2%qEbNmgq_MH?y~?@%gd+|(nC65E<^f6g}m=Jea7@E|KM7uKPCb;_(%Ff zOxKV1Zqq*nVgFi>Zw;>hk00ueb(!u~Jf8xHyJN>Tnf&q@8WU{GbWfwYq;B zuB6vZ`u&G+y%BITfO7K|zzzVz+<6BIHvHr()_-2f>!$(E05Hs3aeX_0vVRMJ zaWLGVI9dPA_{jSItH9U%ob{jgtpB{S{p{RL z^?S;YPXq4N?>~d<{eaKv_YdIuIlyn|_g}#ELBMb7_g}>IFyOcJ`-gFT1n}GX{iC=( z2Kcgm{}o)H0I-e@5+AV~yy%8NXX@}L>-45h&$f$t0qM_rO@60L;JqEBd^iX1&jqkf zyaR9^;C#S40q+958*l+Yet!}C!+?tcmjK=axD@bSz-55T0qX!)04QJI2aw-V*P%av z>j)qS7zKm?V}LLq0*C^}0qX%909OO90bC2X4j|);!=C^o0VzNlun|C+w;6B);MV{X z0Lr)z04Nu>0d53r2TTH{05<`404M`k|EV|J3ZQJr0Nl3!I}vskPyoyUb^#i-{}K;g zYY4X+ummtar~h$0Gq?YI7KbKLLhSR64F_d`#ypsYCj3_>EQUKR9 zd?WZJaeo_1TJ%zuQ)hh#>5~thWo3bLm;MyOZ9)FB(D|$s33re_+wN1e)ZO$ySd$t% z_J2rE)_b?*Pul-LkJ4WLHvvBt)Rxb!*y&t`Z zmO$Ywbn7hofXsm(rOqDV0`Bsle;IG);kV`p^dDkTo&#{3{vL#78PG}2Qo-+4a2w+< zAO}pfEP^!sA4dAa2tirvHvPQ_OSw&VqW+(#|IO?lL9HbfyyEmP?GJ39-SXd;5cV(h z$XeMyf?8|tl(Kln^x2+V3UHhL5rlmaK-Vh$(bnl}=`w9P5o`1ReR%zy=0VzeD^eE! zZGDKq-xx|jKgvLF5puTzKij%#P5x9N1s9=r)FAmN`^tEm#9Ow_yr;#GUu=ZTszP6? z;kyj<6}IIiyv^Wi(V8<<4o_zxMay`afmUUNGW(|xFExP-bb&>LRq;h$`%;CUIbuBL zeBd8myX4RV=l$)Uz5esVKfRr5nWY@umc>&Z#y<^uE&$sqC`D>kblhkD`+Eb=96IOk zHk|kHZ*BYEXZ@#6ap!j*2iytx1c3VB-MAhEd{V#v6t15J+^gSz2G{!mE8YK-x~rMD zPx!k}0csr6;Io~&))Uuj+%B!=QvYeLgRg`9Wq)lgfVsn^rHdiNg}MS{PoMVx9P+ei z;`(M0QvRQg0MuvQrhh%cO8w8Cej0Uc0rF-NHLeC)FfYxVZ2#VdKyK52Kf+$EE8vaO z-wO#lja(F)C6B&x`{N(1TQbr(q-zfSubse^7!&si_$YIe_~%$iGbiyU?sUz<%6GIi zvR_L_IEBHMNFvo%eSl8-zqBp<6%8|RJAmyJ@Fca#ZF^86Z0C0)?N+?c?=J!V=iw?! z-(C5$2c@$=Y$WqYc^ha*j9Q00NrzN&mohxl%8G^0eFZ&E;>e|2J#gmV=&T?`hf+)^E}OtJB_X`s69y z{GbfMe-hw?{crH?f8;y6{jZt)VOu=fy8j1D*$MkkzuJFVmwynY+t^Y6Sclh?A#UZ* zeuS0%-&W~|Abp!Tsef>c!EO3?AneceNL!^ps*ND%fgLWy|8hL%xP{yF??Tu&^|)H6 z&ryuVPU6qB=^BSL-rNK45B1yD>9?l;Rfy{ffZO!%L)gD{ojyl+8oN&LKZNN1O^>oQ z{-cc($D2;l|2)2X$z}RM7yPFcy#CiTv--=2aQ%DT&u$oXfKJ`36YqQJ-pv=>@ToW6 zcE!X0r?Q=LpdI&Sg1xuS-D5+?XTLh$@4IjRVsE?voj4C`&$OluuD@Y?e9vh&|J^_B z`fT~1f3om#Qp;TCZtI;Bl^L0||4=TO?LU+g)ET7xhxOKM|6x6P03h2wd!A0*d!GVN z9B2LMKL6AHJC8nDQR978w|QQE@?WkEf8gP(zW>qppLE+joBtYYx2z73+I-&1-GKnI z{qKJM%~ozdY~dB9SorB5jqd*3k+*#Dx>Mfx$xmNn{_LD#*uvZUKK7|c?t0f%-#zy5 z&U4N`_Q)m<{kL@H_CE_cOZmSsKCzj$0U=R^WrTJij(ZMc1e8*Vz0zT5e0wmvB8*l) zgV_%%EG4uV$bR!M#?&kLu^gxIO#wdI|F^)GL%0&|O8AC0eq&s93C}nKA%hbC07m0E z<}Jrujd!~-QtyXO$kBnlh=;xPc{~wz1iv;9LF=KA4;;WRjmuN?4ih+Y0YM=i80qN^(60pjA(O?5B2Q~ zde=3~*b{T<#C(exXx@}Cw8d^hhz#Zh#4-Eg7GSpnJ$&n&K+>1J_(grjK&C!ZqK1;n z*2{`^!6QAv*F2wa5jisE7Kk}?>}5!tDTO&}u{F-LV(bD1i8*IXa-It3J<=+YS7;&O zEQ&ntI8RboCKl_|pk@3e2WpU#-koh(L0QvkBWJ*{FTS^q(>maE$N{I-t&N+IJI*4J zGU8O^s`oNN*v}RCJhIy^+ZVjm>kR{gAs{5hd;3VkO-{2TGge#>%vKbKqLi zaRKzB9b3%Wdax&XF;mNGnU*DaGV(X&N{(CGE+ghfy#5Zv{CEqjSAU-T@^J#O3Sz<` zr*?U4ZOP<3M_I#-a#ysqdJnmXapl(pEFTjRJJ3AokUMkTSpAaW2$opEK#gFz?0gUS z>8L}l?WMG`G;O5ATJzj!4T6~Q&e_ZNioh{d&D8Pt6P(DkX2%pmss<`Hea^?V!xE$ z*C<2NH|On4(C;Y+`gw&{xt<~itxoo#WF6z2!Ebmt-yE4+MEk|oOpeXTykCU8KkebX zv+gW4?YmwA48HDR3>vq*94Gm_L(W%QUKp!6W&eQV6iytyx;bmC(X$swyAStzv)4v0 zh&haU%GI!314Jv1eKl+b)}7^A8Q02G@D1me48vE2KaXc6+y%AWB!Y-j^jhW+FRdwz z*~q8W@7%wkJ^V$7Qum6KbGCgpvmRXzjJ(&cT0Z|$K{+allRnWqzHY|J+zaBqwmC&; zt8!d1qpbpDt5pQ2$~k%TrC}2`?sse4Os!@dzaaKX8O6-7hz5bWMUJbpoaBO6c-P*G zFl!h80eSDeg{WB$#rdMV^F1D-Yqa&H+=VTKyM0Omv;Kmx zbcZxw04oSXXg#8MLSGDPZWHiD@hpY*hG?e|o-IrgzA)OCQS9^<#BOGsF}Y+*SF9g4 zr%HQ}bKZnD#;~Vp`_6SUZySI~x3T5e2FDx47{Pv|uz>NnVbE(EMkM{vZaIFy-P2~_ z<7lLr4%c-(Kh#6S{t@lwMQ{T5R~rQuEc*yb)Q1udqx@4EC!}!=!50U9L4=}j1imQz z0r=DS592Q7iW80<+o0`J5z};*0@ik`h<8RC`DXdkj?fq%?jX3_QMw$jMg6W}GWI^g`O1(}7X-nQ1E%7gZ=#8X z^6E-a-jYfigdYfH^sOdxLwJ2?rHG8U+aT?LsK{q+FD+TP>%(0ouRV761djiUY&p|o zsYo)A81co%MiahJAR6(-!|^d+Dm4~Jj)lfUv2gUj{_Sd|RNSqWw-+kA{E1=#)&qZR zaWT{2ISN}^AoA+&%yc=skegL2nbOQmv9O>910$gf6h$q{GNa6iD6@#NR>;hhv-9dw zsk}?g7pf%~FsRk+E~rZxJ}j29dETgHe_pK=b}qo{l}w?k&KviJuN|cP zlT+(QMrbVxhQ`9v`H`Sc&CLL-@o3bS4Q0c=a3miZABl|40J8(hzVG;~P1pNMH+Qv8 z8Sy&TrmxiZN4o6j^O!rxF|}kLD{rUQ)x8_LMaO!K&J^5Qe|+K5+u*+*knHbH;F^T! zG){Gkgqm`wM_MPB?h&dWCml&g9;9~YAwF!|@Opavi>~ouJw{0o&tRep3{ zW7dvrPiI=b>MpZdq82nW{smnpOucH3yJ=#yZ|z}g*ls{?+}cgnbGJX=_BvGlOvH&mfU@-&OKHdaaMm0G$XgE$P3rmiD{qk zz)`wA2oTTAd!4NAEN=TuUa?~FNynUdWqx#8s}J@)0FdSSIUe+P;@JEg1c=&YE|t~C zU7UK$E(CK`ZzSQDPCh>c51s&cA=k#7XSv2i?%68WYVAk1xjLR#w)1I#bP^+Z-|Wh; zPR{(ClyU3K-_dW?KL)QHI9HwY;g#48Ryn)?jJ#GK8m)16UaKVQ3uk(=p76?5VS`mp z-vdVdQcl)(r}2tNoqj(yjZW-HS!!uCeLg7V>&WptvPR(hwp z&dTXxy_|SmKXBzlUE6CCu+^S1Q&{9i3CAn#v2JV5^$6Rj738UVT;t4@&O6{|---K9 zCE(+ZB`Q+l{*Y$9jC$I?PTzRl3u|6E`_QCvbnBN-dK8Z=+H&`FK*rqMF+a!S_&xDk zVMFk#S1;6x#cM@QS7yM;l7wrLv^xLD&H3Lv|LuJMx94ws31R<2&tdEI!+J>P3(wy& zpQYg(%KG#OZeP?NwMu^_&i{TKX@5sgzZ;i!@i(XW^&#&{!p8fLTygJz9=Yb_d+xpa z(O3W5N7NTMkW%M@kD*FOAu9hT#1Pk=zX*jRh3m+vit=Z8C#l76u&Up~_*?hB{k0qa z%U68={MEw`Wq$Th{Q2j;&D={|Es$! zu@1B^&;K3beh=J_lUzWYS~>1$AkY78E&l>dqoe%23L&T`xJ~~)ggtTopCD^1`mgl) zf34DYasKNNZCUM{|IWJi1A#tv65&ebUD~-#++09ffaUXLL&5rY@`Cf9hZrAqPPhEG z4`F5fzZqjZ3m7rrZc$s1mjwX#$u2_=-ln~y9-N21EzhE|<|vHx-=nAPHvNwxJnc(# zR{6uevw4?V5vJMyFw!4J0C@&?v#|2rUU-gY&kz|8ulB7!%zXuOxJG``;dpfTUY{S? z{qy6N??1GX=RdyaVg1M1O51El@*n=}A7B5`k4`@L$v2d*op<{a=aTDKE6vWziGS61 z_&45B>)g`XrP(*%zV3nRez@WP{%ppThPVUrW(v}eJJ(O+e-HM_p!DOOW;ys;xl15_ zU?ftwA0VmRDm>rs0Z?Aki4#$1i7@u)7yEa}v%o~SM*o!mOqZIz+w`jl`!{-oQ^1ou zm5ANmICFv9+;AjW)%JqejTs98t#|93gDa6f_wS@Ub(=oVRF$zA`%Q>e=Vnks?B2na zptXbiw{UptFBC0at!f~!m-~PAk#b{mrRc}LHM8mO|1osuKfSd0=I`D92(c#h&8{&e zVt6In|3^Gq|HWw3n?L%)u}Ek`?H``G?$o0neB%ixOy7!!mjZ}A-?wsR{`+M=|J8fv zKQG@I%FX$)lJi@YJ>TC0_@N%qE`Q>X{oGw>7o=iI(|@VqGKT|DAmxx9Pth zVXxL3z{ctC#q2M($i;?f^F=52PjmgZpC8;w`Agn&i+>#X?qd0CrxsBLx=r6K{~Oc4 zz4DhdV41XXw5W8k{D-)2Rj2a*k3HM|@nq@ddpO^H+RUH+=+0|zdhedZ#22r4@N=ZQ zEC+ezvu5tA9>(7~`$6afhp$-rU+;VF{e`PO@%k4^&%Aagag(^pYcqW9@4BG>*KH3> z-yXlyJ=>FR>i@KTGCsHIcUk|}(xpw=ZTe>UYnMN(q5qeWSE>Ko)8B%&cOLbQr+k@h zV~uoxtMvXC&&Y9$Kildl0G&O3=k~{(6Y-t=4wD|1%$()Ii32{!J=$o1~ zvh_OsFKHuvGynBs{D*a=0HEu|_z!h8d-?bA_>abStb24CQCs}&#CtjZW1oLyu4&s) z8)%Jgrill@e;iM0$NoY4GxwdOYnHwo3y^z~i!ZGIex%Q?1O|6q*FQ7=JM*778Vog`xLH@N(f1*Ck$vkjdq2teCj(<;MZHj4;Xml}e_G=o zY{veyKMbuy2+9+;@@GH7en*eBRr(=V-EDI0Z|ae@PQQ5@An|9~bb7Q+FZbZBwEsQn;r_4lxmg#yntAE>)_vw}k$1R(YIabb#XTCF0{m4L(2{P#ah{srjb+kVLm$jKAxD|W*@`nxar3D zWP&FWcx`r|c|JQW<%^&h<Gz{2N|*`S8m_xAsw<{jf0Wv#)$b|qgdKtBm(OAKwvlV|c~*XW!LJy{r_%zYA`o3(t^xvaezhx(hT*H=GI8VCSJAk%r07taFAYBa2( zJ}*HNTfp0(Rug$b*bG8&JeY1{d}1^EI8*vF<9sC9KM?jghNCUS2-nJr$uBO(7oxv! zKO%-<6E*M?*{2H0sA*+*k1{qf9xwrmE4@z#rnSCH_X}b1b3RKVYq4DajVX2un+k zLD@#@*GNIOLCzdt$7M6Plq2ItDy;uZW%=2njG6V{oQLHn5;GM0Z$_y0XWk@J6Pp>& zG~yAQAh3~Zk%vu|tzoPy*#o%~#;j3V`B@KX0h9AChHd3nz#Hd!?_A#-^Nb-2$me?z zYZYGyM5Tq(4UVb|4QsC1VkpiVXWu-7obkNVA~Zs=Pu|7IuhU85w6aYjtk_R-rSsQl zM-6AYiOf6gOuact+x2~^Ku1R{>P3Adn*?tq0R z1G-x2%lk!8oGXShnmwuvI|}X5*?L*gQg+0Fw^p~T7Lg-kZ4vtxw22rvQwoz~TjNYC z)Gknsm}g*XUx1%H&-q$;g%&PjJXeNXw(ssGxtW&j-pDc|Z{{|`4|&CTOtgxL zmVzsypY1s%oq3ZsZ+D|QVr9)i2RzJjgJW+c;9UbR(Td)kRmpRZZp`HZXgUX<7_WP< zCwVcKx^-khmNzHVO}Uceq@2-q88J8Fb&lsf|=JAA!+*w;Mjv$#^ zY@@6dg(J|9JH%+_xYci|mamHwt6rY;TuzNPl^TJW%0e=|2lPGakn7dur$#!gHP4O4 zEEVNffrXPSSY0gad@Lx;8Q#6mn;7Ayd@}2s9D{e#ihEnTB+p7|%JJymb>Pw7=h8_A za`xZ1Jegb3i*4R7*X5`^y@vZ ziqda9M?~zK@sx-2?mP!m%y<2|hx6UI-Qp<2(;m(_YyA@RdG5a==azA1=-ztI<`Q7= zc?S$uTV7O5WAmbaz;Ozvnz*_-Ypl_8h9YfUoZTmBD_cCSpg9bhuSXw3&da1-(=0_e zYjAl#i+kl%@C|1Q4Z~+X@rH9OM=+;Qp3N|a9I#v&vyo4$-?@K7d-#hErEbpO>TBgv zZ)ktsprXy2chWI>$1TnH<9yKHd%dFNyM-y>L7v95GV?JxLw>S8+mQ3=$j#Kr#_OF8nFZ#(v!`5oVzozwSt&$Ccy zfyd<}Wvw9*Pd48?HPne%-l+-sSqNtL15!r8XH4pE2JB5%wNK9GBs{wrPdwYB9Bz^4 z<)YfDY3U{oRV}w1R6D~w9;7ILAn32nay{g^Y?G->jKM`Ie6)#c7tB9j{jRys{0;qd zofn1zU4raEJCA79&2}m)6PcMyh7z-(IBrILWD@_>^{7E`S2{A?9P)RKw)a2RafEQU z53)T4SsTY4eF5x#6oT}P;t72*XdDUnqIi~qye2);2u}%}gf9%)JgSW0$pK)Vhqh@= zcPrB7ss|%g+Ec7yWZr}}!?34eEns)^wgH%QH%7lU+nnQdVywWvy2cOfkmCqq2fjE; zC2yg_bzRSov1X>-ya-N6q9jK_CzgE#CF(;7hf)41jT6$ihTw~XAA$%)AGOga`~mpW z_z&YQ<%$!I9h3YQLmZ4dg4k1tk@3<$3LnpSOlmwC)7~*v)-$G<00)v6`AZTZ;y$hgw9P&BINRaj_lgq@jPQ(Zoil5vZ=lU z(B8^~Ey~C7&7FWx0PX_Z4LAt+B;XzZ*UEny*Lwl?0X_q`AMjbgA;1HG&jGdojP;i% zeEmWJ?!!Ub-kHj`hmz|9`0Y!ig7Huy74U_|qj6s-Hj?l~$5UxvARQbZPo~3>(Xrrx z{WlaUrGNe{yd4}p$9Oa!sL8{q&WmZ+Im3$#rEtD3r<-I6i z;1dfcBB4+$>IEJ|1ll0}pLi(a^NYo7Rc#~l=;{o~?oQ!)@90czt9xfD@qdv8 zkseD$l7YmCFE%!s@Pz`=h%X+FkNHxmu|RSxG#-kDqX+hHS1YCBZneClVU248iEtM-7R+8NXbt%J##ZorU8@24utChme1$f-+SMl#l%tuqP@kC%W>I)?j z5nm`08TXB+qX}PlG!c%Cg~t-XV8DiXeA|Q-Wjtsb*XhM#CRZvJRnhuo3RQL9xHo+5 zAmyK&T0b(v&POmb7M{+J1bu3523U)kWm>QpsX@6iLaxbu}ECkq6^BnM2xKi@=p3+2_7qP#`5O$a{_eUZ1C$PEec zp_L*s;%Aje_Z^?L>3U!3=B^S|D$tGi^(&`KGGBJ| zdCVQ9p*Pvb%G>F6b+2p3AlGA*l#*8=Ot;Eg<-()4z`qWV?C(zCnuO>yPIZ+P^`2;* zT)Ib4k<;d+BM(wN@DLxiZFoJs{>6>mB4Ry8Nhf)AZqzR(1wGcC@5rEXX3A`axwTv5 z)HGI0h9o`Zbva!*P_0SG0WcPxkv3TvKiE~Onr)YonDQ!!T5ommm;#f|Ys@N}&bDk% zXIj4MF0)#q7Bn;d1zjgh-71c|X=1c*?O|)CFlYo-duunjv!UwFiY*=2P-z0RuT64q znNsU!yvgp-upXzRmb?lcd|g@rl~azsq5C;=+r*mkgA>;QrvO(OaF!XTG0tGF4ELTk z&t~VWuNr1S@eGV%ZElYrGkCaHLIVH%mJX~fw*y`&LWW#m9JavS%UMqd~AT#X?drPG7; zXYy9dpK-C3CiXj_FFQ**9iTn|IMkYxTjtKMQA?o+5~= z)ql=pZRdM_%I4!BKyZ$^R8}8%v8M;S0L&G^?&Nb~{RF@Zxi(YWdF9W3WShGi@XB^N z4UkS^B=4JD8P>^}pG$sl3TJ<2{*HdD{xEpuz_kjb53j^-u*%^DVC1#>&}ff>=Ig09 z029^|Ub(7ou*&Isz^Gr!$=dETUX#ncdMM#|<%)>GDlsqCETh%2?|Rd04dg{@#C|ip zvW!lY(@N`bot4wYdO7jBe&EW9y0+IOps^0xD)Z#(@+mBGq=e&@_Efhu=X!)~)Cz9X z){1e@voiYQTzy`HpL;s;t6oMu?O&&FyzYfHubh2oQaQTy%O^dGM;2|l zdpaOvZtj?$UOJ{vz4g|_`piug6_d5frD?TX^)D7{^YdyslPu+G^O!GI$!siCH`S&y znzcEzSSsU@7e`y-+I_uccQ}x;F4>8E~>BArf-&|Nj9) CS?8$$ delta 348 zcmZoT!_uHLL1%JLAFqf20|N^K0|O%v|NH;{KagTz-Wa%^abf|>Bqkq5rpby-@_Ywk zreC`_>pUYnP}YHIaurh*Bgf>gZ2lY|ZOlMC`NB$_$ra4rlMgc)3WChL0>mHyGV|}m zL}5-4g99Y6IZz8^x&gxU4Nn?{9>Yv$2Ab|U*;&SLQW(qRA8bD8Rs^tsj0f7MG5HI- zh$JhJ^A~6|$aoM20ZyRU|H*+I=QkDzFizqznH<4!Vq*ad<0Ju>$w!zBSV7LXHu>T? z@5x6*Z6-fB2NXrnllnO(bMQz^4&gYnu|R}z(~1p@0-{XJbyJIe@^QA5oR8u7qdob+ bN{7h@bWJutIH$k}G+@o59gHA8ka-3Gs}g|o diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.exe b/ports/csharp/Jison/Jison/bin/Debug/Jison.exe deleted file mode 100755 index fda9a7134ea9a5f6f16ff727aa6776e766020731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64000 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 - - - - - \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb b/ports/csharp/Jison/Jison/bin/Debug/Jison.pdb deleted file mode 100644 index 8d05e19f78b2d29b0182abd4690192c31d950f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132608 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 - - - - - \ No newline at end of file diff --git a/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest b/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest deleted file mode 100644 index 061c9ca95..000000000 --- a/ports/csharp/Jison/Jison/bin/Debug/Jison.vshost.exe.manifest +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ports/csharp/Jison/Jison/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index e9350f2fce01b536726f0d04548a1998d0bfbde3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6824 zcmeHMZByGu5VpZwFoYJ1+-poqBfy zTo1pczo65f*zU?NyoUCJG{XnWXMEINyGbe@hNxx6>yikgHmfKo8(#*$MsR`&^5`Kd>*SX84ZR$JRp_=u2qE^i|Lf2iF)MJN2?)RE% z)PlBKXWG_<>%e;Nqq0V2lj;7jYG^5@-+>YJh&O#9S(!B`xMIUs8s>L0yN=-}S9j`| z>vX-%FE?@Tg8uZVybJ48`rI_jTryh=$(foA98G1FQEBgPQoXAto97hcffNn!5Uy%U zvL;trwoV3QVPTq~3unO4X=j{5nLgL_R``6M$%mJ#%UlI6Z6VY z7#Xja&m^~vH{gQz#qI4Yx z<9cz{k=$m7L5yWHcsqguxIij<0|fkxqR65cLop6wjNAm7A`>89wkusa^t=k}_>f9w z_8F{cyj!dFiDBUYUhst;tL!q!wWDM55!h*$o|``_pp>Q*7L(ct+|cuwG|R#cJ?3j= zzT*0IXqkIl3EvEa1eL9JsSL~?B2`BUYtJk*D{O*PKrL%Pe=1A~_n^;pE3CmJ^MN)Q zHnn$I_G4VlB#4=_6Yf!ZoH)rr`y{sK`zy*XkSWk+qV`Yl&Qshax8QCJb;kVMd~qfF zDg2#7ALExyqc9G+?>PiHd&Y2Fm)wc&*b&R&HlTmWT@XLT<(7`8j6FqW;xubTS&2n8 znFX`I#WmX+@O85xq!+r>h&G&j2KFm)*?$oPh8<-?{8ML2oD z(aGVIsip>sD$^%|#G??Ao8QzJWy|G`Fg4mt%qX!$$Sf7V^Bd<@DOSi1aR1ty8O zk9+fDPV%8gnjSpJf?Qn## diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources b/ports/csharp/Jison/Jison/obj/Debug/Jison.Properties.Resources.resources deleted file mode 100644 index 6c05a9776bd7cbae976fdcec7e3a254e93018279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt deleted file mode 100644 index e068f4738..000000000 --- a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,8 +0,0 @@ -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe.config -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.exe -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\bin\Debug\Jison.pdb -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csprojResolveAssemblyReference.cache -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.Properties.Resources.resources -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.csproj.GenerateResource.Cache -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.exe -C:\Users\robert.plummer\Documents\GitHub\jison\ports\csharp\Jison\Jison\obj\Debug\Jison.pdb diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache b/ports/csharp/Jison/Jison/obj/Debug/Jison.csproj.GenerateResource.Cache deleted file mode 100644 index 6d2fbfad1909441196a5718ce02f5bdf4b889eb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcma)4%}N|W5T4PQb!T>k@eo9k!xB6QF2k-O$z=(+Vj@xS56K}AdZuegv%S+xSC6`tt{4vG z&OmI7kl8kxNlpPjLb(SsC?%A+0$e0;WC6eID-F0ZGuDYr!=cKouyntg38Ygw0m+Cx zWg&OQ&V#^z+syH}I_rHQjGSCEa=VI934#4vC*2|N?YNYo{la6VhYHP}K951WVJ`Jio5s2(!@ z@g4mzQMmdrFms-;&4OGhrttbnTnltZMyf)AeD&lGt`s_Kk*H%MO<8QS| zmy}TL@p6&Dg^&;pB$0ruY7kOLSA~t)E8Ag|f+tl7!rmp~Op*}=47*xTP(=7Ibwv@( zeMbB~@g(Cb^L#1}izb8vZ{Vg5^WliIY3Kv5;DbT<1BxmmQ9dR#0bv-0f>A2fD$BI? zF86w}B<8(;_W%89`>lylnKuKsRM7}>^8z0!W{)A3v=d@f(dZfC5oIp)t_yQXQD@2aJVhPJ!yZs)a`!+bE{>!f=+3G>xS n_jMB1Lnl4ZNmwtP^iU^ZJ$2H$PQrTYqz#>f=b@7xX{6d;TgCng diff --git a/ports/csharp/Jison/Jison/obj/Debug/Jison.exe b/ports/csharp/Jison/Jison/obj/Debug/Jison.exe deleted file mode 100644 index fda9a7134ea9a5f6f16ff727aa6776e766020731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64000 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 k>pjdeVopu&mWMfJ@OSg17B?(d$^Q(aci*rTxS Date: Tue, 8 Jul 2014 16:08:17 -0400 Subject: [PATCH 26/35] Implement the unput fix defined in php port --- ports/csharp/Jison/Jison.v12.suo | Bin 75264 -> 47104 bytes ports/csharp/Jison/Jison/Template.cs | 35 +++++++++++++++++------ ports/csharp/Jison/Jison/Test/Formula.cs | 35 +++++++++++++++++------ 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index 6170e40d673aa27aa31441e0a4fb0aa73433457e..a2b93fbad263856ab2317a080248c2e95734d0f8 100644 GIT binary patch delta 2255 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 UnputStack = new JList(); public void Trace() { @@ -272,20 +273,23 @@ public string Input() public void Unput(string ch) { + var yy = new /**/ParserValue/**/(); int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - //TODO: not really compatible?? _Input.unCh(ch.Length); - Yy.Text = Yy.Text.Substring(0, len - 1); + yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; + if ((lines.Length - 1) > 0) + { + yy.LineNo -= Yy.LineNo - lines.Length - 1; + } var r = Yy.Loc.Range; - Yy.Loc = new ParserLocation( + yy.Loc = new ParserLocation( Yy.Loc.FirstLine, Yy.LineNo + 1, Yy.Loc.FirstColumn, @@ -301,8 +305,10 @@ public void Unput(string ch) ); if (Ranges.Count > 0) { - Yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); + yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); } + + UnputStack.Push(yy); } public void More() @@ -341,7 +347,12 @@ public string ShowPosition() public ParserSymbol Next() { - if (Done == true) + if (UnputStack.Count > 0) + { + Yy = UnputStack.Pop(); + } + + if (Done == true) { return Eof; } @@ -747,9 +758,17 @@ public void Push(T item) Add(item); } - public void Pop() + public T Pop() { - RemoveAt(Count - 1); + var i = Math.Max(0, Count); + if (i == 0) + { + return null; + } + + var val = this[i]; + RemoveAt(i); + return val; } new public T this[int index] diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index 656314c29..041ac81ea 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -20,6 +20,7 @@ public class Formula public const int Shift = 1; public const int Reduce = 2; public const int Accept = 3; + public JList UnputStack = new JList(); public void Trace() { @@ -2340,20 +2341,23 @@ public string Input() public void Unput(string ch) { + var yy = new Expression(); int len = ch.Length; var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - //TODO: not really compatible?? _Input.unCh(ch.Length); - Yy.Text = Yy.Text.Substring(0, len - 1); + yy.Text = Yy.Text.Substring(0, len - 1); Offset -= len; var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); Match = Match.Substring(0, Match.Length - 1); - if ((lines.Length - 1) > 0) Yy.LineNo -= lines.Length - 1; + if ((lines.Length - 1) > 0) + { + yy.LineNo -= Yy.LineNo - lines.Length - 1; + } var r = Yy.Loc.Range; - Yy.Loc = new ParserLocation( + yy.Loc = new ParserLocation( Yy.Loc.FirstLine, Yy.LineNo + 1, Yy.Loc.FirstColumn, @@ -2369,8 +2373,10 @@ public void Unput(string ch) ); if (Ranges.Count > 0) { - Yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); + yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); } + + UnputStack.Push(yy); } public void More() @@ -2409,7 +2415,12 @@ public string ShowPosition() public ParserSymbol Next() { - if (Done == true) + if (UnputStack.Count > 0) + { + Yy = UnputStack.Pop(); + } + + if (Done == true) { return Eof; } @@ -2913,9 +2924,17 @@ public void Push(T item) Add(item); } - public void Pop() + public T Pop() { - RemoveAt(Count - 1); + var i = Math.Max(0, Count - 1); + if (i == 0) + { + return null; + } + + var val = this[i]; + RemoveAt(i); + return val; } new public T this[int index] From 5c8c9f131cb2a68aade87b2081325de243cdb748 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Tue, 5 Aug 2014 13:59:55 -0400 Subject: [PATCH 27/35] Make c# entity a bit cleaner Getting ready to bring unit test into Spreadsheets/csharp-sheet --- ports/csharp/Jison/Jison.v12.suo | Bin 47104 -> 78336 bytes ports/csharp/Jison/Jison/Jison.csproj | 6 +- ports/csharp/Jison/Jison/Test.cs | 31 ++---- ports/csharp/Jison/Jison/Test/Cell.cs | 4 +- ports/csharp/Jison/Jison/Test/Expression.cs | 2 +- ports/csharp/Jison/Jison/Test/Formula.cs | 48 ++++----- ports/csharp/Jison/Jison/Test/FormulaBase.cs | 21 ++++ ports/csharp/Jison/Jison/Test/Functions.cs | 2 +- ports/csharp/Jison/Jison/Test/Location.cs | 26 +---- ports/csharp/Jison/Jison/Test/Row.cs | 51 +++++++++ .../csharp/Jison/Jison/Test/RowDictionary.cs | 13 --- ports/csharp/Jison/Jison/Test/Spreadsheet.cs | 98 ++++++++---------- .../Jison/Jison/Test/SpreadsheetDictionary.cs | 19 ---- ports/csharp/Jison/Jison/Test/Spreadsheets.cs | 88 ++++++++++++++++ .../Jison/Test/SpreadsheetsDictionary.cs | 10 -- ports/csharp/Jison/Jison/Test/formula.jison | 20 ++-- 16 files changed, 262 insertions(+), 177 deletions(-) create mode 100644 ports/csharp/Jison/Jison/Test/FormulaBase.cs create mode 100644 ports/csharp/Jison/Jison/Test/Row.cs delete mode 100644 ports/csharp/Jison/Jison/Test/RowDictionary.cs delete mode 100644 ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs create mode 100644 ports/csharp/Jison/Jison/Test/Spreadsheets.cs delete mode 100644 ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs diff --git a/ports/csharp/Jison/Jison.v12.suo b/ports/csharp/Jison/Jison.v12.suo index a2b93fbad263856ab2317a080248c2e95734d0f8..c17dc66d271cd1f2bbbea8153bd0ff0c4fca3b36 100644 GIT binary patch delta 8240 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 delta 5073 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 b8z(JAN|IX%S?!k{j+JkvzLzo5%1!(ivu<{( diff --git a/ports/csharp/Jison/Jison/Jison.csproj b/ports/csharp/Jison/Jison/Jison.csproj index f218632e2..173fd5861 100644 --- a/ports/csharp/Jison/Jison/Jison.csproj +++ b/ports/csharp/Jison/Jison/Jison.csproj @@ -75,15 +75,15 @@ + + - - - + diff --git a/ports/csharp/Jison/Jison/Test.cs b/ports/csharp/Jison/Jison/Test.cs index c56b08731..d85161ede 100644 --- a/ports/csharp/Jison/Jison/Test.cs +++ b/ports/csharp/Jison/Jison/Test.cs @@ -1,7 +1,6 @@ using System; -using jQuerySheet; -namespace jQuerySheet +namespace Sheet { public class Test { @@ -11,29 +10,17 @@ public Test () public static void Main() { - Spreadsheet.Spreadsheets = new SpreadsheetsDictionary(); - var spreadsheetsDictionary = new SpreadsheetDictionary(); - Spreadsheet.Spreadsheets.Add(0, spreadsheetsDictionary); - var row = new RowDictionary(); - spreadsheetsDictionary.Add(0, row); + var spreadsheets = new Spreadsheets(); + var spreadsheet = spreadsheets.AddSpreadsheet(); - var cellA1 = new Cell(0, 0, 0); - cellA1.Value = "250"; - var cellB1 = new Cell(0, 0, 1); - cellB1.Value = "250"; - var cellC1 = new Cell(0, 0, 2); - cellC1.Formula = "800 - SUM(A1:B1) + 100"; - cellC1.HasFormula = true; + var row = spreadsheet.AddRow(); - row.Add(0, cellA1); - row.Add(1, cellB1); - row.Add(2, cellC1); + var cellA1 = row.AddCell("250"); + var cellB1 = row.AddCell("250"); + var cellC1 = row.AddCell("800 - (SUM(A1:B1) + 100)", true); - //var spreadsheet = new Spreadsheet(); - //spreadsheet.Calc(); - - var parsedCell = Spreadsheet.Spreadsheets[0][0][2]; - var value = parsedCell.UpdateValue(); + var cell = spreadsheet["C", 1]; + var value = cell.UpdateValue(); Console.Write(value.ToDouble()); Console.Read(); } diff --git a/ports/csharp/Jison/Jison/Test/Cell.cs b/ports/csharp/Jison/Jison/Test/Cell.cs index 897a2bc1b..4343987af 100644 --- a/ports/csharp/Jison/Jison/Test/Cell.cs +++ b/ports/csharp/Jison/Jison/Test/Cell.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace jQuerySheet +namespace Sheet { public class Cell { @@ -15,6 +15,7 @@ public class Cell public DateTime CalcLast = new DateTime(); public int CalcCount = 0; public Stack State = new Stack(); + public Row Parent; public Cell() { @@ -40,6 +41,7 @@ public Expression UpdateValue() State.Push ("Parsing"); CalcCount++; var formula = new Formula(); + formula.Setup(this); var value = formula.Parse (Formula); State.Pop (); return value; diff --git a/ports/csharp/Jison/Jison/Test/Expression.cs b/ports/csharp/Jison/Jison/Test/Expression.cs index e88a8a353..d5ed45fb9 100644 --- a/ports/csharp/Jison/Jison/Test/Expression.cs +++ b/ports/csharp/Jison/Jison/Test/Expression.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Jison; -namespace jQuerySheet +namespace Sheet { public class Expression : ParserValue { diff --git a/ports/csharp/Jison/Jison/Test/Formula.cs b/ports/csharp/Jison/Jison/Test/Formula.cs index 041ac81ea..f88b6bb60 100644 --- a/ports/csharp/Jison/Jison/Test/Formula.cs +++ b/ports/csharp/Jison/Jison/Test/Formula.cs @@ -4,9 +4,9 @@ using System.Linq; -namespace jQuerySheet +namespace Sheet { - public class Formula + public class Formula : FormulaBase { public ParserSymbols Symbols; public Dictionary Terminals; @@ -1846,7 +1846,7 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r break; case 9: // - + thisS = ss[so - 1]; break; case 10: @@ -1976,47 +1976,47 @@ public Expression ParserPerformAction(ref Expression thisS, ref Expression yy, r - thisS = Spreadsheet.CellValue(Location.ParseFixed(ss[so].Text)); + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed(ss[so].Text)); break; case 29: - - - - thisS = Spreadsheet.CellValue(Location.ParseFixed(ss[so-2].Text), Location.ParseFixed(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed(ss[so - 2].Text), MySpreadsheet.ParseFixed(ss[so].Text)); break; case 30: - - - - thisS = Spreadsheet.CellValue(Location.Parse(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.Parse(ss[so].Text)); break; case 31: - - - - thisS = Spreadsheet.CellValue(Location.Parse(ss[so-2].Text), Location.Parse(ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.Parse(ss[so - 2].Text), MySpreadsheet.Parse(ss[so].Text)); break; case 32: - - - - thisS = Spreadsheet.CellValue(Location.ParseRemote(ss[so-2].Text, ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote(ss[so - 2].Text, ss[so].Text)); break; case 33: - - - - thisS = Spreadsheet.CellValue(Location.ParseRemote(ss[so-4].Text, ss[so-2].Text), Location.ParseRemote(ss[so-4].Text, ss[so].Text)); + + + + thisS = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote(ss[so - 4].Text, ss[so - 2].Text), MySpreadsheet.ParseRemote(ss[so - 4].Text, ss[so].Text)); break; diff --git a/ports/csharp/Jison/Jison/Test/FormulaBase.cs b/ports/csharp/Jison/Jison/Test/FormulaBase.cs new file mode 100644 index 000000000..324e88c62 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/FormulaBase.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Sheet +{ + public class FormulaBase + { + public Cell Parent; + public Spreadsheet MySpreadsheet; + public Spreadsheets MySpreadsheets; + + public void Setup(Cell cell) + { + Parent = cell; + MySpreadsheet = cell.Parent.Parent; + MySpreadsheets = MySpreadsheet.Parent; + } + } +} diff --git a/ports/csharp/Jison/Jison/Test/Functions.cs b/ports/csharp/Jison/Jison/Test/Functions.cs index eff5cb715..af43a4242 100644 --- a/ports/csharp/Jison/Jison/Test/Functions.cs +++ b/ports/csharp/Jison/Jison/Test/Functions.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using Jison; -namespace jQuerySheet +namespace Sheet { public static class Functions { diff --git a/ports/csharp/Jison/Jison/Test/Location.cs b/ports/csharp/Jison/Jison/Test/Location.cs index 6864d4aec..edb812ab8 100644 --- a/ports/csharp/Jison/Jison/Test/Location.cs +++ b/ports/csharp/Jison/Jison/Test/Location.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.RegularExpressions; -namespace jQuerySheet +namespace Sheet { public class Location { @@ -48,26 +48,6 @@ public Location () static readonly public Regex Cell = new Regex("^([A-Z]+)([0-9]+)"); - public static Location Parse(string id) - { - return new Location(id); - } - - public static Location ParseRemote(string sheet, string id) - { - return new Location(sheet, id); - } - - public static Location ParseFixed(string id) - { - return new Location(id, true); - } - - public static Location ParseRemoteFixed(string sheet, string id) - { - return new Location(sheet, id, true); - } - public void ParseCellId(string id) { var match = Cell.Match(id); @@ -76,7 +56,6 @@ public void ParseCellId(string id) Col = Alphabet[match.Groups[1].Value]; Row = Convert.ToInt32(match.Groups[2].Value) - 1; } - Sheet = Spreadsheet.ActiveSpreadsheet; } public void ParseSheetId(string sheet) @@ -85,9 +64,10 @@ public void ParseSheetId(string sheet) Sheet = Convert.ToInt32(sheet); } - public Location(string id) + public Location(Spreadsheet spreadsheet, string id) { ParseCellId(id); + Sheet = spreadsheet.Index; } public Location(string sheet, string id) diff --git a/ports/csharp/Jison/Jison/Test/Row.cs b/ports/csharp/Jison/Jison/Test/Row.cs new file mode 100644 index 000000000..fe130b720 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/Row.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; + +namespace Sheet +{ + public class Row: Dictionary + { + public Spreadsheet Parent; + public int CellIndex = -1; + + public Row () + { + } + + public Cell AddCell() + { + return AddCell("", false); + } + + public Cell AddCell(string value) + { + return AddCell(value, false); + } + + public Cell AddCell(string value, bool isFormula) + { + var cell = new Cell(); + CellIndex++; + cell.Parent = this; + + if (isFormula) + { + cell.Formula = value; + cell.HasFormula = true; + } + else + { + cell.Value = value; + } + + Add(CellIndex, cell); + return cell; + } + + public Cell this[string col] + { + get { return this[Location.Alphabet[col]]; } + } + } +} + diff --git a/ports/csharp/Jison/Jison/Test/RowDictionary.cs b/ports/csharp/Jison/Jison/Test/RowDictionary.cs deleted file mode 100644 index a29ecd704..000000000 --- a/ports/csharp/Jison/Jison/Test/RowDictionary.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace jQuerySheet -{ - public class RowDictionary : Dictionary - { - public RowDictionary () - { - } - } -} - diff --git a/ports/csharp/Jison/Jison/Test/Spreadsheet.cs b/ports/csharp/Jison/Jison/Test/Spreadsheet.cs index 44be3f8fe..a8fdc7f10 100644 --- a/ports/csharp/Jison/Jison/Test/Spreadsheet.cs +++ b/ports/csharp/Jison/Jison/Test/Spreadsheet.cs @@ -1,73 +1,67 @@ -using System; -using System.Text; -using System.Threading.Tasks; +using System; using System.Collections.Generic; -namespace jQuerySheet +namespace Sheet { - public class Spreadsheet - { - static public int ActiveSpreadsheet = 0; - static public SpreadsheetsDictionary Spreadsheets; - - - public SpreadsheetsDictionary Calc() + public class Spreadsheet : Dictionary + { + public Spreadsheets Parent; + public int Index; + public int RowIndex = -1; + public Row AddRow() { - foreach (var Spreadsheet in Spreadsheets.Values) { - foreach (var row in Spreadsheet.Values) { - foreach (var cell in row) { - cell.Value.UpdateValue(); - } - } - } - - return Spreadsheets; + var row = new Row(); + RowIndex++; + row.Parent = this; + Add(RowIndex, row); + return row; } - public static DateTime CalcLast; + public Cell this[string colString, int rowInt] + { + get { + var row = this[rowInt - 1]; + + var colInt = Location.Alphabet[colString]; + var cell = row[colInt]; + return cell; + } + } - public static Expression UpdateCellValue(Cell cell) + public Cell this[int colInt, int rowInt] { - if (cell.HasFormula && cell.State.Count < 1) + get { - cell.State.Push("Parsing"); - cell.CalcCount++; - cell.CalcLast = CalcLast; - var formula = new Formula(); - var value = formula.Parse(cell.Formula); - cell.State.Pop(); - return value; + var row = this[rowInt]; + var cell = row[colInt]; + return cell; } - return cell.Exp; } - public static Expression CellValue(int spreadsheet, int row, int col) - { - var cell = Spreadsheets[spreadsheet][row][col]; - var value = UpdateCellValue(cell); - return value; - } + public Spreadsheet(int index) + : base() { + Index = index; + } - public static Expression CellValue(Location loc) + public Location Parse(string id) { - var cell = Spreadsheets[loc.Sheet][loc.Row][loc.Col]; - var value = UpdateCellValue(cell); - return value; + return new Location(this, id); } - public static Expression CellValue(Location locStart, Location locEnd) + public Location ParseRemote(string sheet, string id) { - var range = new Expression(); + return new Location(sheet, id); + } - for (var row = locStart.Row; row <= locEnd.Row; row++) - { - for (var col = locStart.Col; col <= locEnd.Col; col++) - { - range.Push(Spreadsheets[locStart.Sheet][row][col].UpdateValue()); - } - } + public Location ParseFixed(string id) + { + return new Location(id, true); + } - return range; + public Location ParseRemoteFixed(string sheet, string id) + { + return new Location(sheet, id, true); } - } + } } + diff --git a/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs b/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs deleted file mode 100644 index a4441bf0c..000000000 --- a/ports/csharp/Jison/Jison/Test/SpreadsheetDictionary.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using jQuerySheet; - -namespace jQuerySheet -{ - public class SpreadsheetDictionary : Dictionary - { - public int RowIndex = -1; - public RowDictionary ActiveRow; - public void AddRow() - { - ActiveRow = new RowDictionary(); - RowIndex++; - Add (RowIndex, ActiveRow); - } - } -} - diff --git a/ports/csharp/Jison/Jison/Test/Spreadsheets.cs b/ports/csharp/Jison/Jison/Test/Spreadsheets.cs new file mode 100644 index 000000000..7831afec8 --- /dev/null +++ b/ports/csharp/Jison/Jison/Test/Spreadsheets.cs @@ -0,0 +1,88 @@ +using System; +using System.Linq; +using System.Collections.Generic; + +namespace Sheet +{ + public class Spreadsheets : Dictionary + { + public int ActiveSpreadsheet = -1; + public int SpreadsheetIndex = -1; + + public void Calc() + { + foreach (var spreadsheet in Values) { + foreach (var row in spreadsheet.Values) { + foreach (var cell in row) { + cell.Value.UpdateValue(); + } + } + } + } + + public DateTime CalcLast; + + public Expression UpdateCellValue(Cell cell) + { + if (cell.HasFormula && cell.State.Count < 1) + { + cell.State.Push("Parsing"); + cell.CalcCount++; + cell.CalcLast = CalcLast; + var formula = new Formula(); + var value = formula.Parse(cell.Formula); + cell.State.Pop(); + return value; + } + return cell.Exp; + } + + public Expression CellValue(int spreadsheet, int row, int col) + { + Cell cell = Values.ElementAt(spreadsheet) + .Values.ElementAt(row) + .Values.ElementAt(col); + + var value = UpdateCellValue(cell); + return value; + } + + public Expression CellValue(Location loc) + { + Cell cell = Values.ElementAt(loc.Sheet) + .Values.ElementAt(loc.Row) + .Values.ElementAt(loc.Col); + + var value = UpdateCellValue(cell); + return value; + } + + public Expression CellValue(Location locStart, Location locEnd) + { + var range = new Expression(); + + for (var row = locStart.Row; row <= locEnd.Row; row++) + { + for (var col = locStart.Col; col <= locEnd.Col; col++) + { + range.Push( + Values.ElementAt(locStart.Sheet) + .Values.ElementAt(row) + .Values.ElementAt(col).UpdateValue() + ); + } + } + + return range; + } + + public Spreadsheet AddSpreadsheet() + { + SpreadsheetIndex++; + var spreadsheet = new Spreadsheet(SpreadsheetIndex); + spreadsheet.Parent = this; + Add(SpreadsheetIndex, spreadsheet); + return spreadsheet; + } + } +} diff --git a/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs b/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs deleted file mode 100644 index 0c0dfa11e..000000000 --- a/ports/csharp/Jison/Jison/Test/SpreadsheetsDictionary.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace jQuerySheet -{ - public class SpreadsheetsDictionary : Dictionary - { - } -} - diff --git a/ports/csharp/Jison/Jison/Test/formula.jison b/ports/csharp/Jison/Jison/Test/formula.jison index 9814f4636..c37e931a8 100644 --- a/ports/csharp/Jison/Jison/Test/formula.jison +++ b/ports/csharp/Jison/Jison/Test/formula.jison @@ -1,5 +1,6 @@ //option parserValue:Expression -//option namespace:jQuerySheet +//option namespace:Sheet +//option extends:FormulaBase /* description: Parses end evaluates mathematical expressions. */ /* lexical grammar */ @@ -204,7 +205,10 @@ expression : { //js $$ = yy.handler.number.apply(yy.obj, [$2]); - // + + /*cs + $$ = $2; + */ } | expression '<' '=' expression { @@ -417,7 +421,7 @@ cell : //php $$ = $this->fixedCellValue($1); /*cs - $$ = Spreadsheet.CellValue(Location.ParseFixed($1.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed($1.Text)); */ } | FIXEDCELL ':' FIXEDCELL @@ -428,7 +432,7 @@ cell : //php $$ = $this->fixedCellRangeValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.ParseFixed($1.Text), Location.ParseFixed($3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseFixed($1.Text), MySpreadsheet.ParseFixed($3.Text)); */ } | CELL @@ -439,7 +443,7 @@ cell : //php $$ = $this->cellValue($1); /*cs - $$ = Spreadsheet.CellValue(Location.Parse($1.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.Parse($1.Text)); */ } | CELL ':' CELL @@ -450,7 +454,7 @@ cell : //php $$ = $this->cellRangeValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.Parse($1.Text), Location.Parse($3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.Parse($1.Text), MySpreadsheet.Parse($3.Text)); */ } | SHEET '!' CELL @@ -461,7 +465,7 @@ cell : //php $$ = $this->remoteCellValue($1, $3); /*cs - $$ = Spreadsheet.CellValue(Location.ParseRemote($1.Text, $3.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote($1.Text, $3.Text)); */ } | SHEET '!' CELL ':' CELL @@ -472,7 +476,7 @@ cell : //php $$ = $this->remoteCellRangeValue($1, $3, $5); /*cs - $$ = Spreadsheet.CellValue(Location.ParseRemote($1.Text, $3.Text), Location.ParseRemote($1.Text, $5.Text)); + $$ = MySpreadsheets.CellValue(MySpreadsheet.ParseRemote($1.Text, $3.Text), MySpreadsheet.ParseRemote($1.Text, $5.Text)); */ } ; From 5ddd7aa2bd9aa26ee9df23945dc6fe1c07fbd32a Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Mon, 8 Sep 2014 18:08:20 -0400 Subject: [PATCH 28/35] More info on why script may be failing --- lib/cli.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cli.js b/lib/cli.js index 4bd502528..f5ffc7ff0 100755 --- a/lib/cli.js +++ b/lib/cli.js @@ -167,14 +167,14 @@ cli.processGrammars = function processGrammars(file, lexFile, jsonMode) { grammar = ebnfParser.parse(file); } } catch (e) { - throw new Error('Could not parse jison grammar'); + throw new Error('Could not parse jison grammar\nError: ' + e); } try { if (lexFile) { grammar.lex = require('lex-parser').parse(lexFile); } } catch (e) { - throw new Error('Could not parse lex grammar'); + throw new Error('Could not parse lex grammar\nError: ' + e); } return grammar; }; From 00823d99a29286611749ef83e87c527f193810dc Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Tue, 9 Sep 2014 14:19:02 -0400 Subject: [PATCH 29/35] Fix for implementing options, better notifications --- ports/csharp/Jison/Jison/csharp.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 56367328f..72188da52 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -24,9 +24,10 @@ exec("jison " + process.argv[2], function (error) { String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; - var fileName = process.argv[2].replace('.jison', ''), + var jisonFileName = process.argv[2], + fileName = jisonFileName.replace('.jison', ''), comments = require(path.resolve(__dirname, '../../../comments.js')), - requirePath = path.resolve(process.argv[2]).replace('.jison', '') + '.js'; + requirePath = path.resolve(jisonFileName).replace('.jison', '') + '.js'; console.log("Opening newly created jison js file: " + fileName + '.js'); @@ -106,10 +107,10 @@ exec("jison " + process.argv[2], function (error) { 'parserValue': '' }; - - if (fileName.search(/jison/) !== -1) { + if (jisonFileName.match(/jison$/i)) { var parserDefinition = fs.readFileSync(fileName + '.jison', "utf8"); parserDefinition = parserDefinition.split(/\n/g); + for (var i = 0; i < parserDefinition.length; i++) { if (parserDefinition[i].match('//option')) { parserDefinition[i] = parserDefinition[i].replace('//option ', '').trim(); @@ -119,7 +120,11 @@ exec("jison " + process.argv[2], function (error) { } } - console.log(option); + console.log("\nUsing options:"); + for (i in option) { + console.log(i + ' = ' + option[i]); + } + console.log("\n"); var parserRaw = fs.readFileSync(__dirname + "/Template.cs", "utf8"); From 08e1a827bd42f1303599aec8ebbf07bb82c39249 Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Mon, 29 Sep 2014 16:04:34 -0400 Subject: [PATCH 30/35] Make error handling fully override-able. --- lib/jison.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/jison.js b/lib/jison.js index ab0f16d18..f8b764ec3 100755 --- a/lib/jison.js +++ b/lib/jison.js @@ -1486,7 +1486,7 @@ _handle_error: (symbol == EOF ? "end of input" : ("'"+(this.terminals_[symbol] || symbol)+"'")); } - this.parseError(errStr, { + var error = this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, @@ -1494,6 +1494,15 @@ _handle_error: expected: expected, recoverable: (error_rule_depth !== false) }); + + //if we are done, and there is an error, yet have been handled via an override, then return + if (this.done) { + if (error === undefined) { + return errStr; + } else { + return error; + } + } } else if (preErrorSymbol !== EOF) { error_rule_depth = locateNearestErrorRecoveryRule(state); } From 73aa05ea4f7ceac9fed68c8e9f941cc39204b306 Mon Sep 17 00:00:00 2001 From: robertleeplummerjr Date: Mon, 29 Sep 2014 16:27:49 -0400 Subject: [PATCH 31/35] Whitespace cleanup --- lib/jison.js | 16 +- ports/csharp/Jison/Jison/Template.cs | 1560 +++++++++++++------------- ports/csharp/Jison/Jison/csharp.js | 44 +- ports/php/template.php | 94 +- 4 files changed, 857 insertions(+), 857 deletions(-) diff --git a/lib/jison.js b/lib/jison.js index f8b764ec3..552750caa 100755 --- a/lib/jison.js +++ b/lib/jison.js @@ -1495,14 +1495,14 @@ _handle_error: recoverable: (error_rule_depth !== false) }); - //if we are done, and there is an error, yet have been handled via an override, then return - if (this.done) { - if (error === undefined) { - return errStr; - } else { - return error; - } - } + //if we are done, and there is an error, yet have been handled via an override, then return + if (this.done) { + if (error === undefined) { + return errStr; + } else { + return error; + } + } } else if (preErrorSymbol !== EOF) { error_rule_depth = locateNearestErrorRecoveryRule(state); } diff --git a/ports/csharp/Jison/Jison/Template.cs b/ports/csharp/Jison/Jison/Template.cs index 1c604368b..71c1fc8ff 100644 --- a/ports/csharp/Jison/Jison/Template.cs +++ b/ports/csharp/Jison/Jison/Template.cs @@ -6,732 +6,732 @@ /**/namespace Jison/**/ { - public /**/class Parser/**//**extends**/ - { - public ParserSymbols Symbols; - public Dictionary Terminals; - public Dictionary Productions; - public Dictionary Table; - public Dictionary DefaultActions; - public string Version = "0.4.2"; - public bool Debug = false; - - public const int None = 0; - public const int Shift = 1; - public const int Reduce = 2; - public const int Accept = 3; + public /**/class Parser/**//**extends**/ + { + public ParserSymbols Symbols; + public Dictionary Terminals; + public Dictionary Productions; + public Dictionary Table; + public Dictionary DefaultActions; + public string Version = "0.4.2"; + public bool Debug = false; + + public const int None = 0; + public const int Shift = 1; + public const int Reduce = 2; + public const int Accept = 3; public JList UnputStack = new JList(); - public void Trace() - { - - } - - /**/public Parser/**/() - { - //Setup Parser - //@@PARSER_INJECT@@ - - //Setup Lexer - //@@LEXER_INJECT@@ - } - - public /**/ParserValue/**/ ParserPerformAction(ref /**/ParserValue/**/ thisS, ref /**/ParserValue/**/ yy, ref int yystate, ref JList ss) - { - var so = ss.Count - 1;//@@ParserPerformActionInjection@@ - return null; - } - - public ParserSymbol ParserLex() - { - var token = LexerLex();//end = 1 + public void Trace() + { + + } + + /**/public Parser/**/() + { + //Setup Parser + //@@PARSER_INJECT@@ + + //Setup Lexer + //@@LEXER_INJECT@@ + } + + public /**/ParserValue/**/ ParserPerformAction(ref /**/ParserValue/**/ thisS, ref /**/ParserValue/**/ yy, ref int yystate, ref JList ss) + { + var so = ss.Count - 1;//@@ParserPerformActionInjection@@ + return null; + } + + public ParserSymbol ParserLex() + { + var token = LexerLex();//end = 1 if (token != null) { return token; } - return Symbols["end"]; - } - - public void ParseError(string error, ParserError hash = null) - { - throw new InvalidOperationException(error); - } - - public void LexerError(string error, LexerError hash = null) - { - throw new InvalidOperationException(error); - } - - public /**/ParserValue/**/ Parse(string input) - { - if (Table == null) { - throw new Exception("Empty table"); - } - var stack = new JList - { - new ParserCachedAction(new ParserAction(0, Table[0])) - }; - var vstack = new JList - { - new /**/ParserValue/**/() - }; - var yy = new /**/ParserValue/**/(); - var _yy = new /**/ParserValue/**/(); - var v = new /**/ParserValue/**/(); - int recovering = 0; - ParserSymbol symbol = null; - ParserAction action = null; - string errStr = ""; - ParserSymbol preErrorSymbol = null; - ParserState state = null; - - SetInput(input); - - while (true) - { - // retreive state number from top of stack - state = stack.Last().Action.State; - - // use default actions if available - if (state != null && DefaultActions.ContainsKey(state.Index)) - { - action = DefaultActions[state.Index]; - } - else - { - if (symbol == null) - { - symbol = ParserLex(); - } - // read action for current state and first input - if (state != null && state.Actions.ContainsKey(symbol.Index)) - { - action = state.Actions[symbol.Index]; - } - else - { - action = null; - } - } - - if (action == null) - { - if (recovering > 0) - { - // Report error - var expected = new Stack{}; - foreach(var p in Table[state.Index].Actions) - { - expected.Push(Terminals[p.Value.Action].Name); - } - - errStr = "Parse error on line " + (Yy.LineNo + 1).ToString() + ":" + '\n' + - ShowPosition() + '\n' + - "Expecting " + String.Join(", ", expected) + - ", got '" + - (symbol != null ? Terminals[symbol.Index].ToString() : "NOTHING") + "'"; - - ParseError(errStr, new ParserError(Match, state, symbol, Yy.LineNo, yy.Loc, expected)); - } - } - - /*if (state.IsArray()) { - this.parseError("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - }*/ - - if (state == null || action == null) - { - break; - } - - switch (action.Action) - { - case Shift: - stack.Push(new ParserCachedAction(action, symbol)); - vstack.Push(Yy.Clone()); - - symbol = null; - if (preErrorSymbol == null) - { // normal execution/no error - yy = Yy.Clone(); - if (recovering > 0) recovering--; - } else { // error just occurred, resume old lookahead f/ before error - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - - case Reduce: - int len = Productions[action.State.Index].Len; - // perform semantic action - _yy = vstack[vstack.Count - len]; - - if (Ranges != null) - { - Yy.Loc.Range = new ParserRange( - vstack[vstack.Count - len].Loc.Range.X, - vstack.Last().Loc.Range.Y - ); - } - - var value = ParserPerformAction(ref _yy, ref yy, ref action.State.Index, ref vstack); - - if (value != null) - { - return value; - } - - // pop off stack - while (len > 0) - { - stack.Pop(); - vstack.Pop(); - len--; - } - - if (_yy == null) - { - vstack.Push(new /**/ParserValue/**/()); - } - else - { - vstack.Push(_yy.Clone()); - } - var nextSymbol = Productions[action.State.Index].Symbol; - // goto new state = table[STATE][NONTERMINAL] - var nextState = stack.Last().Action.State; - var nextAction = nextState.Actions[nextSymbol.Index]; - - stack.Push(new ParserCachedAction(nextAction, nextSymbol)); - - break; - case Accept: - return v; - } - } - - return v; - } - - /* Jison generated lexer */ - public ParserSymbol Eof = new ParserSymbol("Eof", 1); - public /**/ParserValue/**/ Yy = new /**/ParserValue/**/(); - public string Match = ""; - public Stack ConditionStack; - public Dictionary Rules; - public Dictionary Conditions; - public bool Done = false; - public bool Less; - public bool _More; + return Symbols["end"]; + } + + public void ParseError(string error, ParserError hash = null) + { + throw new InvalidOperationException(error); + } + + public void LexerError(string error, LexerError hash = null) + { + throw new InvalidOperationException(error); + } + + public /**/ParserValue/**/ Parse(string input) + { + if (Table == null) { + throw new Exception("Empty table"); + } + var stack = new JList + { + new ParserCachedAction(new ParserAction(0, Table[0])) + }; + var vstack = new JList + { + new /**/ParserValue/**/() + }; + var yy = new /**/ParserValue/**/(); + var _yy = new /**/ParserValue/**/(); + var v = new /**/ParserValue/**/(); + int recovering = 0; + ParserSymbol symbol = null; + ParserAction action = null; + string errStr = ""; + ParserSymbol preErrorSymbol = null; + ParserState state = null; + + SetInput(input); + + while (true) + { + // retreive state number from top of stack + state = stack.Last().Action.State; + + // use default actions if available + if (state != null && DefaultActions.ContainsKey(state.Index)) + { + action = DefaultActions[state.Index]; + } + else + { + if (symbol == null) + { + symbol = ParserLex(); + } + // read action for current state and first input + if (state != null && state.Actions.ContainsKey(symbol.Index)) + { + action = state.Actions[symbol.Index]; + } + else + { + action = null; + } + } + + if (action == null) + { + if (recovering > 0) + { + // Report error + var expected = new Stack{}; + foreach(var p in Table[state.Index].Actions) + { + expected.Push(Terminals[p.Value.Action].Name); + } + + errStr = "Parse error on line " + (Yy.LineNo + 1).ToString() + ":" + '\n' + + ShowPosition() + '\n' + + "Expecting " + String.Join(", ", expected) + + ", got '" + + (symbol != null ? Terminals[symbol.Index].ToString() : "NOTHING") + "'"; + + ParseError(errStr, new ParserError(Match, state, symbol, Yy.LineNo, yy.Loc, expected)); + } + } + + /*if (state.IsArray()) { + this.parseError("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + }*/ + + if (state == null || action == null) + { + break; + } + + switch (action.Action) + { + case Shift: + stack.Push(new ParserCachedAction(action, symbol)); + vstack.Push(Yy.Clone()); + + symbol = null; + if (preErrorSymbol == null) + { // normal execution/no error + yy = Yy.Clone(); + if (recovering > 0) recovering--; + } else { // error just occurred, resume old lookahead f/ before error + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + + case Reduce: + int len = Productions[action.State.Index].Len; + // perform semantic action + _yy = vstack[vstack.Count - len]; + + if (Ranges != null) + { + Yy.Loc.Range = new ParserRange( + vstack[vstack.Count - len].Loc.Range.X, + vstack.Last().Loc.Range.Y + ); + } + + var value = ParserPerformAction(ref _yy, ref yy, ref action.State.Index, ref vstack); + + if (value != null) + { + return value; + } + + // pop off stack + while (len > 0) + { + stack.Pop(); + vstack.Pop(); + len--; + } + + if (_yy == null) + { + vstack.Push(new /**/ParserValue/**/()); + } + else + { + vstack.Push(_yy.Clone()); + } + var nextSymbol = Productions[action.State.Index].Symbol; + // goto new state = table[STATE][NONTERMINAL] + var nextState = stack.Last().Action.State; + var nextAction = nextState.Actions[nextSymbol.Index]; + + stack.Push(new ParserCachedAction(nextAction, nextSymbol)); + + break; + case Accept: + return v; + } + } + + return v; + } + + /* Jison generated lexer */ + public ParserSymbol Eof = new ParserSymbol("Eof", 1); + public /**/ParserValue/**/ Yy = new /**/ParserValue/**/(); + public string Match = ""; + public Stack ConditionStack; + public Dictionary Rules; + public Dictionary Conditions; + public bool Done = false; + public bool Less; + public bool _More; public InputReader _Input; - public int Offset; - public DictionaryRanges; - public bool Flex = false; + public int Offset; + public DictionaryRanges; + public bool Flex = false; - public void SetInput(string input) - { + public void SetInput(string input) + { _Input = new InputReader(input); - _More = Less = Done = false; - Yy.LineNo = Yy.Leng = 0; - ConditionStack = new Stack(); - ConditionStack.Push("INITIAL"); - - if (Ranges != null) - { - Yy.Loc = new ParserLocation(new ParserRange(0,0)); - } else { - Yy.Loc = new ParserLocation(); - } - - Offset = 0; - } - - public string Input() - { - string ch = _Input.Ch(); - Yy.Text += ch; - Yy.Leng++; - Offset++; - Match += ch; - Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); - if (lines.Success) { - Yy.LineNo++; - Yy.Loc.LastLine++; - } else { - Yy.Loc.LastColumn++; - } - - if (Ranges != null) - { - Yy.Loc.Range.Y++; - } - - return ch; - } - - public void Unput(string ch) - { + _More = Less = Done = false; + Yy.LineNo = Yy.Leng = 0; + ConditionStack = new Stack(); + ConditionStack.Push("INITIAL"); + + if (Ranges != null) + { + Yy.Loc = new ParserLocation(new ParserRange(0,0)); + } else { + Yy.Loc = new ParserLocation(); + } + + Offset = 0; + } + + public string Input() + { + string ch = _Input.Ch(); + Yy.Text += ch; + Yy.Leng++; + Offset++; + Match += ch; + Match lines = Regex.Match(ch, "/(?:\r\n?|\n).*/"); + if (lines.Success) { + Yy.LineNo++; + Yy.Loc.LastLine++; + } else { + Yy.Loc.LastColumn++; + } + + if (Ranges != null) + { + Yy.Loc.Range.Y++; + } + + return ch; + } + + public void Unput(string ch) + { var yy = new /**/ParserValue/**/(); - int len = ch.Length; - var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); - - _Input.unCh(ch.Length); - yy.Text = Yy.Text.Substring(0, len - 1); - Offset -= len; - var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); - Match = Match.Substring(0, Match.Length - 1); - - if ((lines.Length - 1) > 0) - { - yy.LineNo -= Yy.LineNo - lines.Length - 1; - } - var r = Yy.Loc.Range; - - yy.Loc = new ParserLocation( - Yy.Loc.FirstLine, - Yy.LineNo + 1, - Yy.Loc.FirstColumn, - ( - lines.Length > 0 ? - ( - lines.Length == oldLines.Length ? - Yy.Loc.FirstColumn : - 0 - ) + oldLines[oldLines.Length - lines.Length].Length - lines[0].Length : - Yy.Loc.FirstColumn - len - ) - ); - - if (Ranges.Count > 0) { - yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); - } + int len = ch.Length; + var lines = Regex.Split(ch, "/(?:\r\n?|\n)/"); + + _Input.unCh(ch.Length); + yy.Text = Yy.Text.Substring(0, len - 1); + Offset -= len; + var oldLines = Regex.Split(Match, "/(?:\r\n?|\n)/"); + Match = Match.Substring(0, Match.Length - 1); + + if ((lines.Length - 1) > 0) + { + yy.LineNo -= Yy.LineNo - lines.Length - 1; + } + var r = Yy.Loc.Range; + + yy.Loc = new ParserLocation( + Yy.Loc.FirstLine, + Yy.LineNo + 1, + Yy.Loc.FirstColumn, + ( + lines.Length > 0 ? + ( + lines.Length == oldLines.Length ? + Yy.Loc.FirstColumn : + 0 + ) + oldLines[oldLines.Length - lines.Length].Length - lines[0].Length : + Yy.Loc.FirstColumn - len + ) + ); + + if (Ranges.Count > 0) { + yy.Loc.Range = new ParserRange(r.X, r.X + Yy.Leng - len); + } UnputStack.Push(yy); - } - - public void More() - { - _More = true; - } - - public string PastInput() - { - var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); - return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); - } - - public string UpcomingInput() - { - var next = Match; - if (next.Length < 20) - { - next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); - } - return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); - } - - public string ShowPosition() - { - var pre = PastInput(); - - var c = ""; - for (var i = 0; i < pre.Length; i++) - { - c += "-"; - } - - return pre + UpcomingInput() + '\n' + c + "^"; - } - - public ParserSymbol Next() - { - if (UnputStack.Count > 0) - { - Yy = UnputStack.Pop(); - } - - if (Done == true) - { - return Eof; - } - - if (_Input.Done) - { - Done = true; - } - - if (_More == false) - { - Yy.Text = ""; - Match = ""; - } - - var rules = CurrentRules(); - string match = ""; - bool matched = false; - int index = 0; - Regex rule; - for (int i = 0; i < rules.Count; i++) - { - rule = Rules[rules[i]]; - var tempMatch = _Input.Match(rule); - if (tempMatch.Success && tempMatch.Length > match.Length) { - match = tempMatch.Value; - matched = true; - index = i; - if (!Flex) { - break; - } - } - } - if ( matched ) - { - Match lineCount = Regex.Match(match, "/\n.*/"); - - Yy.LineNo += lineCount.Length; - Yy.Loc.FirstLine = Yy.Loc.LastLine; - Yy.Loc.LastLine = Yy.LineNo + 1; - Yy.Loc.FirstColumn = Yy.Loc.LastColumn; - Yy.Loc.LastColumn = lineCount.Length > 0 ? lineCount.Length - 1 : Yy.Loc.LastColumn + match.Length; - - Yy.Text += match; - Match += match; - - Yy.Leng = Yy.Text.Length; - if (Ranges != null) - { - Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); - } - _More = false; - _Input.AddMatch(match); + } + + public void More() + { + _More = true; + } + + public string PastInput() + { + var past = _Input.ToString().Substring(0, _Input.Position - Match.Length); + return (past.Length > 20 ? "..." + Regex.Replace(past.Substring(20), "/\n/", "") : ""); + } + + public string UpcomingInput() + { + var next = Match; + if (next.Length < 20) + { + next += _Input.ToString().Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)); + } + return Regex.Replace(next.Substring(0, (next.Length > 20 ? 20 - next.Length : next.Length)) + (next.Length > 20 ? "..." : ""), "/\n/", ""); + } + + public string ShowPosition() + { + var pre = PastInput(); + + var c = ""; + for (var i = 0; i < pre.Length; i++) + { + c += "-"; + } + + return pre + UpcomingInput() + '\n' + c + "^"; + } + + public ParserSymbol Next() + { + if (UnputStack.Count > 0) + { + Yy = UnputStack.Pop(); + } + + if (Done == true) + { + return Eof; + } + + if (_Input.Done) + { + Done = true; + } + + if (_More == false) + { + Yy.Text = ""; + Match = ""; + } + + var rules = CurrentRules(); + string match = ""; + bool matched = false; + int index = 0; + Regex rule; + for (int i = 0; i < rules.Count; i++) + { + rule = Rules[rules[i]]; + var tempMatch = _Input.Match(rule); + if (tempMatch.Success && tempMatch.Length > match.Length) { + match = tempMatch.Value; + matched = true; + index = i; + if (!Flex) { + break; + } + } + } + if ( matched ) + { + Match lineCount = Regex.Match(match, "/\n.*/"); + + Yy.LineNo += lineCount.Length; + Yy.Loc.FirstLine = Yy.Loc.LastLine; + Yy.Loc.LastLine = Yy.LineNo + 1; + Yy.Loc.FirstColumn = Yy.Loc.LastColumn; + Yy.Loc.LastColumn = lineCount.Length > 0 ? lineCount.Length - 1 : Yy.Loc.LastColumn + match.Length; + + Yy.Text += match; + Match += match; + + Yy.Leng = Yy.Text.Length; + if (Ranges != null) + { + Yy.Loc.Range = new ParserRange(Offset, Offset += Yy.Leng); + } + _More = false; + _Input.AddMatch(match); var ruleIndex = rules[index]; var nextCondition = ConditionStack.Peek(); dynamic action = LexerPerformAction(ruleIndex, nextCondition); - ParserSymbol token = Symbols[action]; - - if (Done == true || _Input.Done) - { - Done = false; - } - - if (token.Index > -1) { - return token; - } else { - return null; - } - } - - if (_Input.Done) { - return Symbols["EOF"]; - } else - { - LexerError("Lexical error on line " + (Yy.LineNo + 1) + ". Unrecognized text.\n" + ShowPosition(), new LexerError("", -1, Yy.LineNo)); - return null; - } - } - - public ParserSymbol LexerLex() - { - var r = Next(); - - while (r == null) - { - r = Next(); - } - - return r; - } - - public void Begin(string condition) - { - ConditionStack.Push(condition); - } - - public string PopState() - { - return ConditionStack.Pop(); - } - - public List CurrentRules() - { - var peek = ConditionStack.Peek(); - return Conditions[peek].Rules; - } - - public dynamic LexerPerformAction(int avoidingNameCollisions, string Yy_Start) - { - //@@LexerPerformActionInjection@@ - return -1; - } - } - - public class ParserLocation - { - public int FirstLine = 1; - public int LastLine = 0; - public int FirstColumn = 1; - public int LastColumn = 0; - public ParserRange Range; - - public ParserLocation() - { - } - - public ParserLocation(ParserRange range) - { - Range = range; - } - - public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColumn) - { - FirstLine = firstLine; - LastLine = lastLine; - FirstColumn = firstColumn; - LastColumn = lastColumn; - } - - public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColumn, ParserRange range) - { - FirstLine = firstLine; - LastLine = lastLine; - FirstColumn = firstColumn; - LastColumn = lastColumn; - Range = range; - } - - public ParserLocation Clone() - { - var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); - - if (Range != null) - { - parserLocation.Range = Range.Clone(); - } - - return parserLocation; - } - } - - public class LexerConditions - { - public List Rules; - public bool Inclusive; - - public LexerConditions(List rules, bool inclusive) - { - Rules = rules; - Inclusive = inclusive; - } - } - - public class ParserProduction - { - public int Len = 0; - public ParserSymbol Symbol; - - public ParserProduction(ParserSymbol symbol) - { - Symbol = symbol; - } - - public ParserProduction(ParserSymbol symbol, int len) - { - Symbol = symbol; - Len = len; - } - } - - public class ParserCachedAction - { - public ParserAction Action; - public ParserSymbol Symbol; - - public ParserCachedAction(ParserAction action) - { - Action = action; - } - - public ParserCachedAction(ParserAction action, ParserSymbol symbol) - { - Action = action; - Symbol = symbol; - } - } - - public class ParserAction - { - public int Action; - public ParserState State; - public ParserSymbol Symbol; - - public ParserAction(int action) - { - Action = action; - } - - public ParserAction(int action, ref ParserState state) - { - Action = action; - State = state; - } - - public ParserAction(int action, ParserState state) - { - Action = action; - State = state; - } - - public ParserAction(int action, ref ParserSymbol symbol) - { - Action = action; - Symbol = symbol; - } - } - - public class ParserSymbol - { - public string Name; - public int Index = -1; - public IDictionary Symbols = new Dictionary(); - public IDictionary SymbolsByName = new Dictionary(); - - public ParserSymbol() - { - } - - public ParserSymbol(string name, int index) - { - Name = name; - Index = index; - } - - public void AddAction(ParserSymbol p) - { - Symbols.Add(p.Index, p); - SymbolsByName.Add(p.Name, p); - } - } - - public class ParserError - { - public String Text; - public ParserState State; - public ParserSymbol Symbol; - public int LineNo; - public ParserLocation Loc; - public Stack Expected; - - public ParserError(String text, ParserState state, ParserSymbol symbol, int lineNo, ParserLocation loc, Stack expected) - { - Text = text; - State = state; - Symbol = symbol; - LineNo = lineNo; - Loc = loc; - Expected = expected; - } - } - - public class LexerError - { - public String Text; - public int Token; - public int LineNo; - - public LexerError(String text, int token, int lineNo) - { - Text = text; - Token = token; - LineNo = lineNo; - } - } - - public class ParserState - { - public int Index; - public Dictionary Actions = new Dictionary(); - - public ParserState(int index) - { - Index = index; - } - - public void SetActions(ref Dictionary actions) - { - Actions = actions; - } - } - - public class ParserRange - { - public int X; - public int Y; - - public ParserRange(int x, int y) - { - X = x; - Y = y; - } - - public ParserRange Clone() - { - var parserRange = new ParserRange(X, Y); + ParserSymbol token = Symbols[action]; + + if (Done == true || _Input.Done) + { + Done = false; + } + + if (token.Index > -1) { + return token; + } else { + return null; + } + } + + if (_Input.Done) { + return Symbols["EOF"]; + } else + { + LexerError("Lexical error on line " + (Yy.LineNo + 1) + ". Unrecognized text.\n" + ShowPosition(), new LexerError("", -1, Yy.LineNo)); + return null; + } + } + + public ParserSymbol LexerLex() + { + var r = Next(); + + while (r == null) + { + r = Next(); + } + + return r; + } + + public void Begin(string condition) + { + ConditionStack.Push(condition); + } + + public string PopState() + { + return ConditionStack.Pop(); + } + + public List CurrentRules() + { + var peek = ConditionStack.Peek(); + return Conditions[peek].Rules; + } + + public dynamic LexerPerformAction(int avoidingNameCollisions, string Yy_Start) + { + //@@LexerPerformActionInjection@@ + return -1; + } + } + + public class ParserLocation + { + public int FirstLine = 1; + public int LastLine = 0; + public int FirstColumn = 1; + public int LastColumn = 0; + public ParserRange Range; + + public ParserLocation() + { + } + + public ParserLocation(ParserRange range) + { + Range = range; + } + + public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColumn) + { + FirstLine = firstLine; + LastLine = lastLine; + FirstColumn = firstColumn; + LastColumn = lastColumn; + } + + public ParserLocation(int firstLine, int lastLine, int firstColumn, int lastColumn, ParserRange range) + { + FirstLine = firstLine; + LastLine = lastLine; + FirstColumn = firstColumn; + LastColumn = lastColumn; + Range = range; + } + + public ParserLocation Clone() + { + var parserLocation = new ParserLocation(FirstLine, LastLine,FirstColumn,LastColumn); + + if (Range != null) + { + parserLocation.Range = Range.Clone(); + } + + return parserLocation; + } + } + + public class LexerConditions + { + public List Rules; + public bool Inclusive; + + public LexerConditions(List rules, bool inclusive) + { + Rules = rules; + Inclusive = inclusive; + } + } + + public class ParserProduction + { + public int Len = 0; + public ParserSymbol Symbol; + + public ParserProduction(ParserSymbol symbol) + { + Symbol = symbol; + } + + public ParserProduction(ParserSymbol symbol, int len) + { + Symbol = symbol; + Len = len; + } + } + + public class ParserCachedAction + { + public ParserAction Action; + public ParserSymbol Symbol; + + public ParserCachedAction(ParserAction action) + { + Action = action; + } + + public ParserCachedAction(ParserAction action, ParserSymbol symbol) + { + Action = action; + Symbol = symbol; + } + } + + public class ParserAction + { + public int Action; + public ParserState State; + public ParserSymbol Symbol; + + public ParserAction(int action) + { + Action = action; + } + + public ParserAction(int action, ref ParserState state) + { + Action = action; + State = state; + } + + public ParserAction(int action, ParserState state) + { + Action = action; + State = state; + } + + public ParserAction(int action, ref ParserSymbol symbol) + { + Action = action; + Symbol = symbol; + } + } + + public class ParserSymbol + { + public string Name; + public int Index = -1; + public IDictionary Symbols = new Dictionary(); + public IDictionary SymbolsByName = new Dictionary(); + + public ParserSymbol() + { + } + + public ParserSymbol(string name, int index) + { + Name = name; + Index = index; + } + + public void AddAction(ParserSymbol p) + { + Symbols.Add(p.Index, p); + SymbolsByName.Add(p.Name, p); + } + } + + public class ParserError + { + public String Text; + public ParserState State; + public ParserSymbol Symbol; + public int LineNo; + public ParserLocation Loc; + public Stack Expected; + + public ParserError(String text, ParserState state, ParserSymbol symbol, int lineNo, ParserLocation loc, Stack expected) + { + Text = text; + State = state; + Symbol = symbol; + LineNo = lineNo; + Loc = loc; + Expected = expected; + } + } + + public class LexerError + { + public String Text; + public int Token; + public int LineNo; + + public LexerError(String text, int token, int lineNo) + { + Text = text; + Token = token; + LineNo = lineNo; + } + } + + public class ParserState + { + public int Index; + public Dictionary Actions = new Dictionary(); + + public ParserState(int index) + { + Index = index; + } + + public void SetActions(ref Dictionary actions) + { + Actions = actions; + } + } + + public class ParserRange + { + public int X; + public int Y; + + public ParserRange(int x, int y) + { + X = x; + Y = y; + } + + public ParserRange Clone() + { + var parserRange = new ParserRange(X, Y); return parserRange; - } - } - - public class ParserSymbols - { - private Dictionary SymbolsString = new Dictionary(); - private Dictionary SymbolsInt = new Dictionary(); - - public void Add(ParserSymbol symbol) - { - SymbolsInt.Add(symbol.Index, symbol); - SymbolsString.Add(symbol.Name, symbol); - } - - public ParserSymbol this[char name] - { - get - { - return SymbolsString[name.ToString()]; - } - } - - public ParserSymbol this[string name] - { - get - { - return SymbolsString[name]; - } - } - - public ParserSymbol this[int index] - { - get - { - if (index < 0) - { - return new ParserSymbol(); - } - return SymbolsInt[index]; - } - } - } - - public class ParserValue - { - public string Text; - public ParserLocation Loc; - public int Leng = 0; - public int LineNo = 0; - - public ParserValue() - { - } + } + } + + public class ParserSymbols + { + private Dictionary SymbolsString = new Dictionary(); + private Dictionary SymbolsInt = new Dictionary(); + + public void Add(ParserSymbol symbol) + { + SymbolsInt.Add(symbol.Index, symbol); + SymbolsString.Add(symbol.Name, symbol); + } + + public ParserSymbol this[char name] + { + get + { + return SymbolsString[name.ToString()]; + } + } + + public ParserSymbol this[string name] + { + get + { + return SymbolsString[name]; + } + } + + public ParserSymbol this[int index] + { + get + { + if (index < 0) + { + return new ParserSymbol(); + } + return SymbolsInt[index]; + } + } + } + + public class ParserValue + { + public string Text; + public ParserLocation Loc; + public int Leng = 0; + public int LineNo = 0; + + public ParserValue() + { + } public ParserValue(string text, ParserLocation loc, int leng, int lineNo) { @@ -740,56 +740,56 @@ public ParserValue(string text, ParserLocation loc, int leng, int lineNo) Leng = leng; LineNo = lineNo; } - - public ParserValue Clone() - { - var parserValue = new ParserValue(); - parserValue.Text = this.Text; - - - return parserValue; - } - } - - public class JList : List where T : class - { - public void Push(T item) - { - Add(item); - } - - public T Pop() - { - var i = Math.Max(0, Count); - if (i == 0) - { - return null; - } - - var val = this[i]; - RemoveAt(i); - return val; - } - - new public T this[int index] - { - get - { - if (index >= Count || index < 0 || Count == 0) - { - return null; - } - return base[index]; - } - } - } + + public ParserValue Clone() + { + var parserValue = new ParserValue(); + parserValue.Text = this.Text; + + + return parserValue; + } + } + + public class JList : List where T : class + { + public void Push(T item) + { + Add(item); + } + + public T Pop() + { + var i = Math.Max(0, Count); + if (i == 0) + { + return null; + } + + var val = this[i]; + RemoveAt(i); + return val; + } + + new public T this[int index] + { + get + { + if (index >= Count || index < 0 || Count == 0) + { + return null; + } + return base[index]; + } + } + } public class InputReader { - - public bool Done = false; - public string Input; + + public bool Done = false; + public string Input; public int Length; public JList Matches = new JList(); public int Position = 0; @@ -801,35 +801,35 @@ public InputReader(string input) } public void AddMatch (string match) { - Matches.Push(match); - Position += match.Length; - Done = (Position >= Length); - } + Matches.Push(match); + Position += match.Length; + Done = (Position >= Length); + } public string Ch() { - var ch = Input[Position].ToString(); - AddMatch(ch); - return ch; - } - - public void unCh(int chLength) - { - Position -= chLength; - Position = Math.Max(0, Position); - Done = (Position >= Length); - } - - public string Substring(int start, int end) { - start = (start != 0 ? Position + start : Position); - end = (end != 0 ? start + end : Length); - return Input.Substring(start, end); - } - - public Match Match(Regex rule) { - var match = rule.Match(Input, Position); - return match; - } + var ch = Input[Position].ToString(); + AddMatch(ch); + return ch; + } + + public void unCh(int chLength) + { + Position -= chLength; + Position = Math.Max(0, Position); + Done = (Position >= Length); + } + + public string Substring(int start, int end) { + start = (start != 0 ? Position + start : Position); + end = (end != 0 ? start + end : Length); + return Input.Substring(start, end); + } + + public Match Match(Regex rule) { + var match = rule.Match(Input, Position); + return match; + } public new string ToString() { diff --git a/ports/csharp/Jison/Jison/csharp.js b/ports/csharp/Jison/Jison/csharp.js index 72188da52..4da738d95 100644 --- a/ports/csharp/Jison/Jison/csharp.js +++ b/ports/csharp/Jison/Jison/csharp.js @@ -156,19 +156,19 @@ exec("jison " + process.argv[2], function (error) { for (var i in this.symbolsByIndex) { var symbol = this.symbolsByIndex[i]; - result += '\t\t\tvar symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; - this.symbols.push('\t\t\tSymbols.Add(symbol' + symbol.index + ')'); + result += ' var symbol' + symbol.index + ' = new ParserSymbol("' + symbol.name + '", ' + symbol.index + ');\n'; + this.symbols.push(' Symbols.Add(symbol' + symbol.index + ')'); } - result += '\n\n\t\t\tSymbols = new ParserSymbols();\n'; + result += '\n\n Symbols = new ParserSymbols();\n'; result += this.symbols.join(';\n') + ';\n\n'; for (var i in terminals) { - this.terminals.push('\t\t\t\t\t{' + i + ', symbol' + i + '}'); + this.terminals.push(' {' + i + ', symbol' + i + '}'); } - result += '\t\t\tTerminals = new Dictionary\n\t\t\t\t{\n' + this.terminals.join(',\n') + '\n\t\t\t\t};\n\n'; + result += ' Terminals = new Dictionary\n {\n' + this.terminals.join(',\n') + '\n };\n\n'; for (var i in table) { var items = []; @@ -179,50 +179,50 @@ exec("jison " + process.argv[2], function (error) { if (item.join) { //is array if (item.length == 1) { action = item[0]; - items.push('\t\t\t\t\t{' + j + ', new ParserAction(' + actions[action] + ')}'); + items.push(' {' + j + ', new ParserAction(' + actions[action] + ')}'); } else { action = item[0]; state = item[1]; - items.push('\t\t\t\t\t{' + j + ', new ParserAction(' + actions[action] + ', ref table' + state + ')}'); + items.push(' {' + j + ', new ParserAction(' + actions[action] + ', ref table' + state + ')}'); } } else { state = item; - items.push('\t\t\t\t\t{' + j + ', new ParserAction(' + actions[action] + ', ref table' + state + ')}'); + items.push(' {' + j + ', new ParserAction(' + actions[action] + ', ref table' + state + ')}'); } } - this.tableInstantiation.push('\t\t\tvar table' + i + ' = new ParserState(' + i + ')'); - this.tableDefinition.push('\t\t\tvar tableDefinition' + i + ' = new Dictionary\n\t\t\t\t{\n' + items.join(',\n') + '\n\t\t\t\t}'); - this.tableSetActions.push('\t\t\ttable' + i + '.SetActions(ref tableDefinition' + i + ')'); - this.table.push('\t\t\t\t\t{' + i + ', table' + i + '}'); + this.tableInstantiation.push(' var table' + i + ' = new ParserState(' + i + ')'); + this.tableDefinition.push(' var tableDefinition' + i + ' = new Dictionary\n {\n' + items.join(',\n') + '\n }'); + this.tableSetActions.push(' table' + i + '.SetActions(ref tableDefinition' + i + ')'); + this.table.push(' {' + i + ', table' + i + '}'); } result += this.tableInstantiation.join(';\n') + ';\n\n'; result += this.tableDefinition.join(';\n\n') + ';\n\n'; result += this.tableSetActions.join(';\n') + ';\n\n'; - result += '\t\t\tTable = new Dictionary\n\t\t\t\t{\n' + this.table.join(',\n') + '\n\t\t\t\t};\n\n'; + result += ' Table = new Dictionary\n {\n' + this.table.join(',\n') + '\n };\n\n'; for (var i in defaultActions) { var action = defaultActions[i][0]; var state = defaultActions[i][1]; - this.defaultActions.push('\t\t\t\t\t{' + i + ', new ParserAction(' + actions[action] +', ref table' + state + ')}'); + this.defaultActions.push(' {' + i + ', new ParserAction(' + actions[action] +', ref table' + state + ')}'); } - result += '\t\t\tDefaultActions = new Dictionary\n\t\t\t\t{\n' + this.defaultActions.join(',\n') + '\n\t\t\t\t};\n\n'; + result += ' DefaultActions = new Dictionary\n {\n' + this.defaultActions.join(',\n') + '\n };\n\n'; for (var i in productions) { var production = productions[i]; if (production.join) { var symbol = production[0], len = production[1]; - this.productions.push('\t\t\t\t\t{' + i + ', new ParserProduction(symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')}'); + this.productions.push(' {' + i + ', new ParserProduction(symbol' + this.symbolsByIndex[symbol].index + ',' + len + ')}'); } else { var symbol = production; - this.productions.push('\t\t\t\t\t{' + i + ', new ParserProduction(symbol' + this.symbolsByIndex[symbol].index + ')}'); + this.productions.push(' {' + i + ', new ParserProduction(symbol' + this.symbolsByIndex[symbol].index + ')}'); } } - result += '\t\t\tProductions = new Dictionary\n\t\t\t\t{\t\t\t\t\n' + this.productions.join(',\n') + '\n\t\t\t\t};\n\n\n'; + result += ' Productions = new Dictionary\n { \n' + this.productions.join(',\n') + '\n };\n\n\n'; return result; } @@ -233,16 +233,16 @@ exec("jison " + process.argv[2], function (error) { this.conditions = []; for (var i in rules) { - this.rules.push('\t\t\t\t\t{' + i + ', new Regex(@"\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '""') + '")}'); + this.rules.push(' {' + i + ', new Regex(@"\\G' + rules[i].substring(2, rules[i].length - 1).replace(/"/g, '""') + '")}'); } - result += '\t\t\tRules = new Dictionary\n\t\t\t\t{\n' + this.rules.join(',\n') + '\n\t\t\t\t};\n\n'; + result += ' Rules = new Dictionary\n {\n' + this.rules.join(',\n') + '\n };\n\n'; for (var i in conditions) { - this.conditions.push('\t\t\t\t\t{"' + i + '", new LexerConditions(new List { ' + conditions[i].rules.join(',') + ' }, ' + conditions[i].inclusive + ')}'); + this.conditions.push(' {"' + i + '", new LexerConditions(new List { ' + conditions[i].rules.join(',') + ' }, ' + conditions[i].inclusive + ')}'); } - result += '\t\t\tConditions = new Dictionary\n\t\t\t\t{\n' + this.conditions.join(',\n') + '\n\t\t\t\t};\n\n'; + result += ' Conditions = new Dictionary\n {\n' + this.conditions.join(',\n') + '\n };\n\n'; return result; } diff --git a/ports/php/template.php b/ports/php/template.php index 516e12a72..c0bfa0ed2 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -211,7 +211,7 @@ function parse($input) public $done = false; public $less; public $more; - public $input; + public $input; public $offset; public $ranges; public $flex = false; @@ -300,7 +300,7 @@ function more() function pastInput() { - $matched = $this->input->toString(); + $matched = $this->input->toString(); $past = substr($matched, 0, strlen($matched) - strlen($this->match)); return (strlen($past) > 20 ? '...' : '') . preg_replace("/\n/", "", substr($past, -20)); } @@ -350,7 +350,7 @@ function next() $rules = $this->currentRules(); for ($i = 0, $j = count($rules); $i < $j; $i++) { - $tempMatch = $this->input->match($this->rules[$rules[$i]]); + $tempMatch = $this->input->match($this->rules[$rules[$i]]); if ($tempMatch && (empty($match) || count($tempMatch[0]) > count($match[0]))) { $match = $tempMatch; $index = $i; @@ -385,7 +385,7 @@ function next() $this->yy->loc->range = new ParserRange($this->offset, $this->offset += $this->yy->leng); } $this->more = false; - $this->input->addMatch($match[0]); + $this->input->addMatch($match[0]); $ruleIndex = $rules[$index]; $nextCondition = $this->conditionStack[$this->conditionStackCount - 1]; @@ -623,53 +623,53 @@ function __construct($x, $y) class InputReader { - public $done = false; - public $input; - public $length; - public $matches = array(); - public $position = 0; - - public function __construct($input) - { - $this->input = $input; - $this->length = strlen($input); - } - - public function addMatch($match) { - $this->matches[] = $match; - $this->position += strlen($match); - $this->done = ($this->position >= $this->length); - } + public $done = false; + public $input; + public $length; + public $matches = array(); + public $position = 0; + + public function __construct($input) + { + $this->input = $input; + $this->length = strlen($input); + } + + public function addMatch($match) { + $this->matches[] = $match; + $this->position += strlen($match); + $this->done = ($this->position >= $this->length); + } public function ch() - { - $ch = $this->input{$this->position}; - $this->addMatch($ch); - return $ch; - } - - public function unCh($chLength) - { - $this->position -= $chLength; - $this->position = max(0, $this->position); - $this->done = ($this->position >= $this->length); - } - - public function substring($start, $end) { - $start = ($start != 0 ? $this->position + $start : $this->position); - $end = ($end != 0 ? $start + $end : $this->length); - return substr($this->input, $start, $end); - } - - public function match($rule) { - if (preg_match($rule, $this->input, $match, null, $this->position)) { - return $match; - } - return null; - } + { + $ch = $this->input{$this->position}; + $this->addMatch($ch); + return $ch; + } + + public function unCh($chLength) + { + $this->position -= $chLength; + $this->position = max(0, $this->position); + $this->done = ($this->position >= $this->length); + } + + public function substring($start, $end) { + $start = ($start != 0 ? $this->position + $start : $this->position); + $end = ($end != 0 ? $start + $end : $this->length); + return substr($this->input, $start, $end); + } + + public function match($rule) { + if (preg_match($rule, $this->input, $match, null, $this->position)) { + return $match; + } + return null; + } public function toString() - { + { return implode('', $this->matches); } } \ No newline at end of file From 3d35ae634b003f0b7d434c8a6fa5c576a64d3a90 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Mon, 20 Oct 2014 09:58:35 -0400 Subject: [PATCH 32/35] Rollback on jison.js --- lib/jison.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/jison.js b/lib/jison.js index 552750caa..ab0f16d18 100755 --- a/lib/jison.js +++ b/lib/jison.js @@ -1486,7 +1486,7 @@ _handle_error: (symbol == EOF ? "end of input" : ("'"+(this.terminals_[symbol] || symbol)+"'")); } - var error = this.parseError(errStr, { + this.parseError(errStr, { text: lexer.match, token: this.terminals_[symbol] || symbol, line: lexer.yylineno, @@ -1494,15 +1494,6 @@ _handle_error: expected: expected, recoverable: (error_rule_depth !== false) }); - - //if we are done, and there is an error, yet have been handled via an override, then return - if (this.done) { - if (error === undefined) { - return errStr; - } else { - return error; - } - } } else if (preErrorSymbol !== EOF) { error_rule_depth = locateNearestErrorRecoveryRule(state); } From d8bfd6a83739f8029e7db95e8450bcb46af77e29 Mon Sep 17 00:00:00 2001 From: Robert Plummer Date: Mon, 20 Oct 2014 10:15:47 -0400 Subject: [PATCH 33/35] Fix from index to property --- ports/php/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/php/template.php b/ports/php/template.php index c0bfa0ed2..538e25969 100644 --- a/ports/php/template.php +++ b/ports/php/template.php @@ -287,7 +287,7 @@ function unput($ch) ); if (isset($this->ranges)) { - $yy->loc->range = array($r[0], $r[0] + $this->yy->leng - $len); + $yy->loc->range = array($r->x, $r->y + $this->yy->leng - $len); } $this->unputStack[] = $yy; From 79016217d388492c0f89f8028b40c8737235f05c Mon Sep 17 00:00:00 2001 From: flip111 Date: Tue, 21 Oct 2014 20:51:18 +0200 Subject: [PATCH 34/35] Create readme.md --- ports/php/readme.md | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ports/php/readme.md diff --git a/ports/php/readme.md b/ports/php/readme.md new file mode 100644 index 000000000..c0d30766a --- /dev/null +++ b/ports/php/readme.md @@ -0,0 +1,46 @@ +# Jison Parser Php Port # +A jison wrapper that first processes a jison file and then injects a php template with the variables from a .js file. Written By: Robert Plummer, RobertLeePlummerJr@gmail.com + +## DIRECTIONS ## +1. After you've downloaded jison & node.js, navigate in command line interface to the folder that contains the ".jison" file that you want to process +2. Process the ".jison" file like this "nodejs /location_of_jison/ports/php/php.js my_jison_file.jison" + +## CONFIGURATION ## +Configuration takes advantage of the commenting in javascript so as not to conflict with. + +### In your ".jison" file ### +* A line that has a "//js" comment BEFORE the javascript line starts a javascript area of the parser section. Which will be removed from the php. +* A line that simply has "//" ends whatever commenting is currently active. +* A that has a "//php" comment ON the line of php it starts a php area of the parser section. In Javascript this is just a comment, in php though, the comment is removed so that it can be called. +* A line that has no comment, is left alone. + +### Comments in the ".jison" file that start with "//option" can be used to configure the output of the php file. ### +* //option optionName:value +* Current Options: + * "namespace" - default is "Jison" + * "class" - default is your ".jison" file without the file extension + * "fileName" - default is your ".jison" file without the file extension followed by ".php" + +## EXAMPLE ## +``` +contents + : content + {$$ = $1;} //<--this is left alone + | contents content + { + //js + $$ = join($1, $2); //<--this is stripped in the php parser, no action taken in the javascript parser + + //php $$ = $SomeClass->someMethod($1, $2); //<-- this is uncommented from the php parser, no action taken in the javascript parser + + /*php + $$ = $SomeClass->someMethod($1, $2); //<-- this is uncommented from the php parser, no action taken in the javascript parser + */ + + /* If you'd like to just strip out the javascript and do nothing else, you can do the following: */ + //js + $$ = join($1, $2); //<--this is stripped in the php parser, no action taken in the javascript parser + // + } + ; +``` From 396e7a272ce40e214a9342e25dbf8d8f16fef3d9 Mon Sep 17 00:00:00 2001 From: flip111 Date: Tue, 21 Oct 2014 20:52:57 +0200 Subject: [PATCH 35/35] delete old readme --- ports/php/readme | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 ports/php/readme diff --git a/ports/php/readme b/ports/php/readme deleted file mode 100644 index 4f7c84d34..000000000 --- a/ports/php/readme +++ /dev/null @@ -1,43 +0,0 @@ -Name: Jison Parser Php Port -Written By: Robert Plummer, RobertLeePlummerJr@gmail.com -Description: A jison wrapper that first processes a jison file and then injects a php template with the variables from a .js file. - -DIRECTIONS: -1. After you've downloaded jison & node.js, navigate in command line interface to the folder that contains the ".jison" file that you want to process -2. Process the ".jison" file like this "nodejs /location_of_jison/ports/php/php.js my_jison_file.jison" - -CONFIGURATION: -Configuration takes advantage of the commenting in javascript so as not to conflict with. -*In your ".jison" file -**A that has a "//js" comment BEFORE the javascript line starts a javascript area of the parser section. Which will be removed from the php. -**A line that simply has "//" ends whatever commenting is currently active. -**A that has a "//php" comment ON the line of php it starts a php area of the parser section. In Javascript this is just a comment, in php though, the comment is removed so that it can be called. -**A that has no comment, is left alone. -*Comments in the ".jison" file that start with "//option" can be used to configure the output of the php file. -**//option optionName:value -**Current Options: -*** "namespace" - default is "Jison" -*** "class" - default is your ".jison" file without the file extension -*** "fileName" - default is your ".jison" file without the file extension followed by ".php" - -EXAMPLE: -contents - : content - {$$ = $1;} //<--this is left alone - | contents content - { - //js - $$ = join($1, $2); //<--this is stripped in the php parser, no action taken in the javascript parser - - //php $$ = $SomeClass->someMethod($1, $2); //<-- this is uncommented from the php parser, no action taken in the javascript parser - - /*php - $$ = $SomeClass->someMethod($1, $2); //<-- this is uncommented from the php parser, no action taken in the javascript parser - */ - - /* If you'd like to just strip out the javascript and do nothing else, you can do the following: */ - //js - $$ = join($1, $2); //<--this is stripped in the php parser, no action taken in the javascript parser - // - } - ;