/* 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 parser = (function(){ var parser = {trace: function trace(){}, yy: {}, symbols_: {"error":2,"Statement":3,"Block":4,"VariableStatement":5,"ExpressionStatement":6,"ForStatement":7,"IfStatement":8,"BreakStatement":9,"ContinueStatement":10,"ReturnStatement":11,"{":12,"StatementList":13,"}":14,"VAR":15,"Variable":16,";":17,"AssignmentExpression":18,"Expression":19,"CONTINUE":20,"BREAK":21,"RETURN":22,"FOR":23,"(":24,")":25,"IF":26,"ELSE":27,"MatrixAccess":28,"MathExpression":29,"BooleanExpression":30,"StringLiteral":31,"NullLiteral":32,"NULL":33,"BooleanLiteral":34,"TRUE":35,"FALSE":36,"NumericLiteral":37,"NUMERIC_LITERAL":38,"STRING_LITERAL":39,"IDENTIFIER":40,"=":41,"FunctionExpression":42,"AssignmentOperator":43,"*=":44,"/=":45,"%=":46,"+=":47,"-=":48,"MatrixIndexList":49,"MatrixIndex":50,"[":51,"]":52,"ContextAccess":53,"THIS":54,"ContextAccessList":55,"ContextAccessObject":56,".":57,"AdditiveExpression":58,"PostfixMathExpression":59,"++":60,"--":61,"UnaryMathExpression":62,"UnaryMathExpr":63,"+":64,"-":65,"MultiplicativeExpression":66,"*":67,"UnaryExpression":68,"/":69,"%":70,"RelationalExpression":71,"UnaryBoolExpression":72,"<":73,">":74,"<=":75,">=":76,"EqualityExpression":77,"==":78,"!=":79,"===":80,"!==":81,"LogicalANDExpression":82,"&&":83,"BitwiseORExpression":84,"LogicalORExpression":85,"||":86,"UnaryBoolExpr":87,"!":88,"Program":89,"SourceElements":90,"EOF":91,"SourceElement":92,"FunctionDeclaration":93,"FUNCTION":94,"FunctionBody":95,"FormalParameterList":96,",":97,"$accept":0,"$end":1}, terminals_: {2:"error",12:"{",14:"}",15:"VAR",17:";",20:"CONTINUE",21:"BREAK",22:"RETURN",23:"FOR",24:"(",25:")",26:"IF",27:"ELSE",30:"BooleanExpression",33:"NULL",35:"TRUE",36:"FALSE",38:"NUMERIC_LITERAL",39:"STRING_LITERAL",40:"IDENTIFIER",41:"=",44:"*=",45:"/=",46:"%=",47:"+=",48:"-=",51:"[",52:"]",54:"THIS",57:".",60:"++",61:"--",64:"+",65:"-",67:"*",68:"UnaryExpression",69:"/",70:"%",72:"UnaryBoolExpression",73:"<",74:">",75:"<=",76:">=",78:"==",79:"!=",80:"===",81:"!==",83:"&&",84:"BitwiseORExpression",86:"||",88:"!",91:"EOF",94:"FUNCTION",97:","}, productions_: [0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[4,3],[13,2],[13,0],[5,3],[5,3],[6,2],[10,2],[9,2],[11,2],[11,3],[7,9],[7,8],[7,8],[7,7],[7,8],[7,7],[7,7],[7,6],[8,5],[8,7],[19,1],[19,1],[19,1],[19,1],[19,1],[19,1],[19,3],[32,1],[34,1],[34,1],[37,1],[31,1],[16,1],[18,3],[18,3],[18,3],[43,1],[43,1],[43,1],[43,1],[43,1],[28,2],[49,2],[49,1],[50,3],[53,2],[55,2],[55,1],[56,2],[29,1],[59,1],[59,2],[59,2],[62,1],[62,1],[63,2],[63,2],[63,2],[63,2],[66,1],[66,1],[66,3],[66,3],[66,3],[58,1],[58,3],[58,3],[71,1],[71,1],[71,3],[71,3],[71,3],[71,3],[77,1],[77,3],[77,3],[77,3],[77,3],[82,1],[82,3],[85,1],[85,3],[87,2],[87,1],[89,2],[90,2],[90,0],[92,1],[92,1],[93,7],[93,8],[42,7],[42,8],[42,6],[42,7],[96,1],[96,3],[95,1]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */ /**/) { /* this == yyval */ var $0 = $$.length - 1; switch (yystate) { case 9: this.$ = new BlockStatementNode($$[$0-1]); break; case 10: this.$ = $$[$0-1].concat($$[$0]); break; case 11: this.$ = []; break; case 12: this.$ = new VariableDeclaratorNode($$[$0-1], null); break; case 13: this.$ = new VariableDeclaratorNode($$[$0-1].left, $$[$0-1].right); break; case 14: this.$ = new ExpressionStatementNode($$[$0-1]); break; case 15: this.$ = new ContinueStatementNode(); break; case 16: this.$ = new BreakStatementNode(); break; case 17: this.$ = new ReturnStatementNode(null); break; case 18: this.$ = new ReturnStatementNode($$[$0-1]); break; case 19: this.$ = new ForStatementNode($$[$0-6], $$[$0-4], $$[$0-2], $$[$0]); break; case 20: this.$ = new ForStatementNode($$[$0-5], $$[$0-3], null, $$[$0]); break; case 21: this.$ = new ForStatementNode($$[$0-5], null, $$[$0-2], $$[$0]); break; case 22: this.$ = new ForStatementNode($$[$0-4], null, null, $$[$0]); break; case 23: this.$ = new ForStatementNode(null, $$[$0-4], $$[$0-2], $$[$0]); break; case 24: this.$ = new ForStatementNode(null, $$[$0-3], null, $$[$0]); break; case 25: this.$ = new ForStatementNode(null, null, $$[$0-2], $$[$0]); break; case 26: this.$ = new ForStatementNode(null, null, null, $$[$0]); break; case 27: this.$ = new IfStatementNode($$[$0-2], $$[$0], null); break; case 28: this.$ = new IfStatementNode($$[$0-4], $$[$0-2], $$[$0]); break; case 36: this.$ = new LiteralNode(null); break; case 37: this.$ = new LiteralNode(true); break; case 38: this.$ = new LiteralNode(false); break; case 39: this.$ = new LiteralNode(parseNumericLiteral($$[$0])); break; case 40: this.$ = new LiteralNode($$[$0]); break; case 41: this.$ = new IdentifierNode($$[$0]); break; case 42: this.$ = new AssignmentExpressionNode("=", $$[$0-2], $$[$0]); break; case 43: this.$ = new AssignmentExpressionNode("=", $$[$0-2], $$[$0]); break; case 44: this.$ = new AssignmentExpressionNode($$[$0-1], $$[$0-2], $$[$0]); break; case 50: this.$ = new MatrixAccessNode($$[$0-1], $$[$0]); break; case 51: this.$ = $$[$0-1].concat($$[$0]); break; case 52: this.$ = [$$[$0]]; break; case 53: this.$ = $$[$0-2]; break; case 54: this.$ = new ContextAccessNode($$[$0]); break; case 55: this.$ = $$[$0-1].concat($$[$0]); break; case 56: this.$ = [$$[$0]]; break; case 57: this.$ = $$[$0]; break; case 58: this.$ = new MathExpressionNode($$[$0]); break; case 60: this.$ = new UpdateExpressionNode("++", $$[$0-1], false); break; case 61: this.$ = new UpdateExpressionNode("--", $$[$0-1], false); break; case 64: this.$ = new UpdateExpressionNode("++", $$[$0], true); break; case 65: this.$ = new UpdateExpressionNode("--", $$[$0], true); break; case 66: this.$ = new UnaryExpressionNode("+", true, $$[$0]); break; case 67: this.$ = new UnaryExpressionNode("-", true, $$[$0]); break; case 70: this.$ = new BinaryExpressionNode("*", $$[$0-2], $$[$0]); break; case 71: this.$ = new BinaryExpressionNode("/", $$[$0-2], $$[$0]); break; case 72: this.$ = new BinaryExpressionNode("%", $$[$0-2], $$[$0]); break; case 74: this.$ = new BinaryExpressionNode("+", $$[$0-2], $$[$0]); break; case 75: this.$ = new BinaryExpressionNode("-", $$[$0-2], $$[$0]); break; case 78: this.$ = new BinaryExpressionNode("<", $$[$0-2], $$[$0]); break; case 79: this.$ = new BinaryExpressionNode(">", $$[$0-2], $$[$0]); break; case 80: this.$ = new BinaryExpressionNode("<=", $$[$0-2], $$[$0]); break; case 81: this.$ = new BinaryExpressionNode(">=", $$[$0-2], $$[$0]); break; case 83: this.$ = new BinaryExpressionNode("==", $$[$0-2], $$[$0]); break; case 84: this.$ = new BinaryExpressionNode("!=", $$[$0-2], $$[$0]); break; case 85: this.$ = new BinaryExpressionNode("===", $$[$0-2], $$[$0]); break; case 86: this.$ = new BinaryExpressionNode("!==", $$[$0-2], $$[$0]); break; case 88: this.$ = new LogicalExpressionNode("&&", $$[$0-2], $$[$0]); break; case 90: this.$ = new LogicalExpressionNode("||", $$[$0-2], $$[$0]); break; case 91: this.$ = new UnaryExpressionNode("!", true, $$[$0]); break; case 93: this.$ = new ProgramNode($$[$0-1]); return this.$; break; case 94: this.$ = $$[$0-1].concat($$[$0]); break; case 95: this.$ = []; break; case 98: this.$ = new FunctionDeclarationNode(new IdentifierNode($$[$0-5]), [], $$[$0-1], false, false); break; case 99: this.$ = new FunctionDeclarationNode(new IdentifierNode($$[$0-6]), $$[$0-4], $$[$0-1], false, false); break; case 100: this.$ = new FunctionDeclarationNode(new IdentifierNode($$[$0-5]), [], $$[$0-1], false, false); break; case 101: this.$ = new FunctionDeclarationNode(new IdentifierNode($$[$0-6]), $$[$0-4], $$[$0-1], false, false); break; case 102: this.$ = new FunctionDeclarationNode(null, [], $$[$0-1], false, false); break; case 103: this.$ = new FunctionDeclarationNode(null, $$[$0-4], $$[$0-1], false, false); break; case 104: this.$ = [new IdentifierNode($$[$0])]; break; case 105: this.$ = $$[$0-2].concat(new IdentifierNode($$[$0])); break; } }, table: [{12:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],89:1,90:2,91:[2,95],94:[2,95]},{1:[3]},{3:5,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34,91:[1,3],92:4,93:6,94:[1,15]},{1:[2,93]},{12:[2,94],14:[2,94],15:[2,94],20:[2,94],21:[2,94],22:[2,94],23:[2,94],24:[2,94],26:[2,94],30:[2,94],38:[2,94],39:[2,94],40:[2,94],54:[2,94],60:[2,94],61:[2,94],64:[2,94],65:[2,94],91:[2,94],94:[2,94]},{12:[2,96],14:[2,96],15:[2,96],20:[2,96],21:[2,96],22:[2,96],23:[2,96],24:[2,96],26:[2,96],30:[2,96],38:[2,96],39:[2,96],40:[2,96],54:[2,96],60:[2,96],61:[2,96],64:[2,96],65:[2,96],91:[2,96],94:[2,96]},{12:[2,97],14:[2,97],15:[2,97],20:[2,97],21:[2,97],22:[2,97],23:[2,97],24:[2,97],26:[2,97],30:[2,97],38:[2,97],39:[2,97],40:[2,97],54:[2,97],60:[2,97],61:[2,97],64:[2,97],65:[2,97],91:[2,97],94:[2,97]},{12:[2,1],14:[2,1],15:[2,1],20:[2,1],21:[2,1],22:[2,1],23:[2,1],24:[2,1],26:[2,1],27:[2,1],30:[2,1],38:[2,1],39:[2,1],40:[2,1],54:[2,1],60:[2,1],61:[2,1],64:[2,1],65:[2,1],91:[2,1],94:[2,1]},{12:[2,2],14:[2,2],15:[2,2],20:[2,2],21:[2,2],22:[2,2],23:[2,2],24:[2,2],26:[2,2],27:[2,2],30:[2,2],38:[2,2],39:[2,2],40:[2,2],54:[2,2],60:[2,2],61:[2,2],64:[2,2],65:[2,2],91:[2,2],94:[2,2]},{12:[2,3],14:[2,3],15:[2,3],20:[2,3],21:[2,3],22:[2,3],23:[2,3],24:[2,3],26:[2,3],27:[2,3],30:[2,3],38:[2,3],39:[2,3],40:[2,3],54:[2,3],60:[2,3],61:[2,3],64:[2,3],65:[2,3],91:[2,3],94:[2,3]},{12:[2,4],14:[2,4],15:[2,4],20:[2,4],21:[2,4],22:[2,4],23:[2,4],24:[2,4],26:[2,4],27:[2,4],30:[2,4],38:[2,4],39:[2,4],40:[2,4],54:[2,4],60:[2,4],61:[2,4],64:[2,4],65:[2,4],91:[2,4],94:[2,4]},{12:[2,5],14:[2,5],15:[2,5],20:[2,5],21:[2,5],22:[2,5],23:[2,5],24:[2,5],26:[2,5],27:[2,5],30:[2,5],38:[2,5],39:[2,5],40:[2,5],54:[2,5],60:[2,5],61:[2,5],64:[2,5],65:[2,5],91:[2,5],94:[2,5]},{12:[2,6],14:[2,6],15:[2,6],20:[2,6],21:[2,6],22:[2,6],23:[2,6],24:[2,6],26:[2,6],27:[2,6],30:[2,6],38:[2,6],39:[2,6],40:[2,6],54:[2,6],60:[2,6],61:[2,6],64:[2,6],65:[2,6],91:[2,6],94:[2,6]},{12:[2,7],14:[2,7],15:[2,7],20:[2,7],21:[2,7],22:[2,7],23:[2,7],24:[2,7],26:[2,7],27:[2,7],30:[2,7],38:[2,7],39:[2,7],40:[2,7],54:[2,7],60:[2,7],61:[2,7],64:[2,7],65:[2,7],91:[2,7],94:[2,7]},{12:[2,8],14:[2,8],15:[2,8],20:[2,8],21:[2,8],22:[2,8],23:[2,8],24:[2,8],26:[2,8],27:[2,8],30:[2,8],38:[2,8],39:[2,8],40:[2,8],54:[2,8],60:[2,8],61:[2,8],64:[2,8],65:[2,8],91:[2,8],94:[2,8]},{40:[1,46]},{12:[2,11],13:47,14:[2,11],15:[2,11],20:[2,11],21:[2,11],22:[2,11],23:[2,11],24:[2,11],26:[2,11],30:[2,11],38:[2,11],39:[2,11],40:[2,11],54:[2,11],60:[2,11],61:[2,11],64:[2,11],65:[2,11]},{16:48,18:49,40:[1,31]},{17:[1,50]},{24:[1,51]},{24:[1,52]},{17:[1,53]},{17:[1,54]},{16:24,17:[1,55],18:25,19:56,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{17:[2,29],25:[2,29],41:[1,57],43:58,44:[1,62],45:[1,63],46:[1,64],47:[1,65],48:[1,66],49:59,50:67,51:[1,68],60:[1,60],61:[1,61]},{17:[2,30],25:[2,30]},{17:[2,31],25:[2,31]},{17:[2,32],25:[2,32]},{17:[2,33],25:[2,33]},{17:[2,34],25:[2,34]},{16:24,18:25,19:69,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{17:[2,41],25:[2,41],41:[2,41],44:[2,41],45:[2,41],46:[2,41],47:[2,41],48:[2,41],51:[2,41],60:[2,41],61:[2,41]},{17:[2,58],25:[2,58],52:[2,58],64:[1,70],65:[1,71]},{17:[2,40],25:[2,40]},{17:[2,73],25:[2,73],52:[2,73],64:[2,73],65:[2,73],67:[1,72],69:[1,73],70:[1,74]},{17:[2,68],25:[2,68],52:[2,68],64:[2,68],65:[2,68],67:[2,68],69:[2,68],70:[2,68]},{17:[2,69],25:[2,69],52:[2,69],64:[2,69],65:[2,69],67:[2,69],69:[2,69],70:[2,69]},{17:[2,62],25:[2,62],52:[2,62],64:[2,62],65:[2,62],67:[2,62],69:[2,62],70:[2,62]},{17:[2,63],25:[2,63],52:[2,63],64:[2,63],65:[2,63],67:[2,63],69:[2,63],70:[2,63]},{55:75,56:76,57:[1,77]},{17:[2,59],25:[2,59],52:[2,59],64:[2,59],65:[2,59],67:[2,59],69:[2,59],70:[2,59]},{16:79,37:40,38:[1,45],40:[1,31],59:37,60:[1,41],61:[1,42],62:78,63:38,64:[1,43],65:[1,44]},{16:79,37:40,38:[1,45],40:[1,31],59:37,60:[1,41],61:[1,42],62:80,63:38,64:[1,43],65:[1,44]},{16:79,37:40,38:[1,45],40:[1,31],59:37,60:[1,41],61:[1,42],62:81,63:38,64:[1,43],65:[1,44]},{16:79,37:40,38:[1,45],40:[1,31],59:37,60:[1,41],61:[1,42],62:82,63:38,64:[1,43],65:[1,44]},{17:[2,39],25:[2,39],52:[2,39],64:[2,39],65:[2,39],67:[2,39],69:[2,39],70:[2,39]},{24:[1,83]},{3:85,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],14:[1,84],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{17:[1,86],41:[1,57],43:58,44:[1,62],45:[1,63],46:[1,64],47:[1,65],48:[1,66]},{17:[1,87]},{12:[2,14],14:[2,14],15:[2,14],20:[2,14],21:[2,14],22:[2,14],23:[2,14],24:[2,14],26:[2,14],27:[2,14],30:[2,14],38:[2,14],39:[2,14],40:[2,14],54:[2,14],60:[2,14],61:[2,14],64:[2,14],65:[2,14],91:[2,14],94:[2,14]},{16:24,17:[1,89],18:25,19:88,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{16:24,18:25,19:90,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,16],14:[2,16],15:[2,16],20:[2,16],21:[2,16],22:[2,16],23:[2,16],24:[2,16],26:[2,16],27:[2,16],30:[2,16],38:[2,16],39:[2,16],40:[2,16],54:[2,16],60:[2,16],61:[2,16],64:[2,16],65:[2,16],91:[2,16],94:[2,16]},{12:[2,15],14:[2,15],15:[2,15],20:[2,15],21:[2,15],22:[2,15],23:[2,15],24:[2,15],26:[2,15],27:[2,15],30:[2,15],38:[2,15],39:[2,15],40:[2,15],54:[2,15],60:[2,15],61:[2,15],64:[2,15],65:[2,15],91:[2,15],94:[2,15]},{12:[2,17],14:[2,17],15:[2,17],20:[2,17],21:[2,17],22:[2,17],23:[2,17],24:[2,17],26:[2,17],27:[2,17],30:[2,17],38:[2,17],39:[2,17],40:[2,17],54:[2,17],60:[2,17],61:[2,17],64:[2,17],65:[2,17],91:[2,17],94:[2,17]},{17:[1,91]},{16:79,29:92,37:40,38:[1,45],40:[1,31],42:93,53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34,94:[1,94]},{16:79,29:95,37:40,38:[1,45],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{17:[2,50],25:[2,50],50:96,51:[1,68]},{17:[2,60],25:[2,60],52:[2,60],64:[2,60],65:[2,60],67:[2,60],69:[2,60],70:[2,60]},{17:[2,61],25:[2,61],52:[2,61],64:[2,61],65:[2,61],67:[2,61],69:[2,61],70:[2,61]},{38:[2,45],40:[2,45],54:[2,45],60:[2,45],61:[2,45],64:[2,45],65:[2,45]},{38:[2,46],40:[2,46],54:[2,46],60:[2,46],61:[2,46],64:[2,46],65:[2,46]},{38:[2,47],40:[2,47],54:[2,47],60:[2,47],61:[2,47],64:[2,47],65:[2,47]},{38:[2,48],40:[2,48],54:[2,48],60:[2,48],61:[2,48],64:[2,48],65:[2,48]},{38:[2,49],40:[2,49],54:[2,49],60:[2,49],61:[2,49],64:[2,49],65:[2,49]},{17:[2,52],25:[2,52],51:[2,52]},{16:79,29:97,37:40,38:[1,45],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{25:[1,98]},{16:79,37:40,38:[1,45],40:[1,31],53:36,54:[1,39],59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:99},{16:79,37:40,38:[1,45],40:[1,31],53:36,54:[1,39],59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:100},{68:[1,101]},{68:[1,102]},{68:[1,103]},{17:[2,54],25:[2,54],52:[2,54],56:104,57:[1,77],64:[2,54],65:[2,54],67:[2,54],69:[2,54],70:[2,54]},{17:[2,56],25:[2,56],52:[2,56],57:[2,56],64:[2,56],65:[2,56],67:[2,56],69:[2,56],70:[2,56]},{40:[1,105]},{17:[2,64],25:[2,64],52:[2,64],64:[2,64],65:[2,64],67:[2,64],69:[2,64],70:[2,64]},{60:[1,60],61:[1,61]},{17:[2,65],25:[2,65],52:[2,65],64:[2,65],65:[2,65],67:[2,65],69:[2,65],70:[2,65]},{17:[2,66],25:[2,66],52:[2,66],64:[2,66],65:[2,66],67:[2,66],69:[2,66],70:[2,66]},{17:[2,67],25:[2,67],52:[2,67],64:[2,67],65:[2,67],67:[2,67],69:[2,67],70:[2,67]},{25:[1,106],40:[1,108],96:107},{12:[2,9],14:[2,9],15:[2,9],20:[2,9],21:[2,9],22:[2,9],23:[2,9],24:[2,9],26:[2,9],27:[2,9],30:[2,9],38:[2,9],39:[2,9],40:[2,9],54:[2,9],60:[2,9],61:[2,9],64:[2,9],65:[2,9],91:[2,9],94:[2,9]},{12:[2,10],14:[2,10],15:[2,10],20:[2,10],21:[2,10],22:[2,10],23:[2,10],24:[2,10],26:[2,10],30:[2,10],38:[2,10],39:[2,10],40:[2,10],54:[2,10],60:[2,10],61:[2,10],64:[2,10],65:[2,10]},{12:[2,12],14:[2,12],15:[2,12],20:[2,12],21:[2,12],22:[2,12],23:[2,12],24:[2,12],26:[2,12],27:[2,12],30:[2,12],38:[2,12],39:[2,12],40:[2,12],54:[2,12],60:[2,12],61:[2,12],64:[2,12],65:[2,12],91:[2,12],94:[2,12]},{12:[2,13],14:[2,13],15:[2,13],20:[2,13],21:[2,13],22:[2,13],23:[2,13],24:[2,13],26:[2,13],27:[2,13],30:[2,13],38:[2,13],39:[2,13],40:[2,13],54:[2,13],60:[2,13],61:[2,13],64:[2,13],65:[2,13],91:[2,13],94:[2,13]},{17:[1,109]},{16:24,17:[1,111],18:25,19:110,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{25:[1,112]},{12:[2,18],14:[2,18],15:[2,18],20:[2,18],21:[2,18],22:[2,18],23:[2,18],24:[2,18],26:[2,18],27:[2,18],30:[2,18],38:[2,18],39:[2,18],40:[2,18],54:[2,18],60:[2,18],61:[2,18],64:[2,18],65:[2,18],91:[2,18],94:[2,18]},{17:[2,42],25:[2,42]},{17:[2,43],25:[2,43]},{24:[1,114],40:[1,113]},{17:[2,44],25:[2,44]},{17:[2,51],25:[2,51],51:[2,51]},{52:[1,115]},{17:[2,35],25:[2,35]},{17:[2,74],25:[2,74],52:[2,74],64:[2,74],65:[2,74],67:[1,72],69:[1,73],70:[1,74]},{17:[2,75],25:[2,75],52:[2,75],64:[2,75],65:[2,75],67:[1,72],69:[1,73],70:[1,74]},{17:[2,70],25:[2,70],52:[2,70],64:[2,70],65:[2,70],67:[2,70],69:[2,70],70:[2,70]},{17:[2,71],25:[2,71],52:[2,71],64:[2,71],65:[2,71],67:[2,71],69:[2,71],70:[2,71]},{17:[2,72],25:[2,72],52:[2,72],64:[2,72],65:[2,72],67:[2,72],69:[2,72],70:[2,72]},{17:[2,55],25:[2,55],52:[2,55],57:[2,55],64:[2,55],65:[2,55],67:[2,55],69:[2,55],70:[2,55]},{17:[2,57],25:[2,57],52:[2,57],57:[2,57],64:[2,57],65:[2,57],67:[2,57],69:[2,57],70:[2,57]},{12:[1,116]},{25:[1,117],97:[1,118]},{25:[2,104],97:[2,104]},{16:24,17:[1,120],18:25,19:119,24:[1,30],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{17:[1,121]},{16:24,18:25,19:122,24:[1,30],25:[1,123],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{3:124,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{24:[1,125]},{25:[1,126],40:[1,108],96:127},{17:[2,53],25:[2,53],51:[2,53]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:128},{12:[1,130]},{40:[1,131]},{17:[1,132]},{16:24,18:25,19:133,24:[1,30],25:[1,134],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{16:24,18:25,19:135,24:[1,30],25:[1,136],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{25:[1,137]},{3:138,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,27],14:[2,27],15:[2,27],20:[2,27],21:[2,27],22:[2,27],23:[2,27],24:[2,27],26:[2,27],27:[1,139],30:[2,27],38:[2,27],39:[2,27],40:[2,27],54:[2,27],60:[2,27],61:[2,27],64:[2,27],65:[2,27],91:[2,27],94:[2,27]},{25:[1,140],40:[1,108],96:141},{12:[1,142]},{25:[1,143],97:[1,118]},{14:[1,144]},{3:5,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],14:[2,106],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34,92:4,93:6,94:[1,15]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:145},{25:[2,105],97:[2,105]},{16:24,18:25,19:146,24:[1,30],25:[1,147],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{25:[1,148]},{3:149,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{25:[1,150]},{3:151,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{3:152,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,26],14:[2,26],15:[2,26],20:[2,26],21:[2,26],22:[2,26],23:[2,26],24:[2,26],26:[2,26],27:[2,26],30:[2,26],38:[2,26],39:[2,26],40:[2,26],54:[2,26],60:[2,26],61:[2,26],64:[2,26],65:[2,26],91:[2,26],94:[2,26]},{3:153,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[1,154]},{25:[1,155],97:[1,118]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:156},{12:[1,157]},{12:[2,98],14:[2,98],15:[2,98],20:[2,98],21:[2,98],22:[2,98],23:[2,98],24:[2,98],26:[2,98],30:[2,98],38:[2,98],39:[2,98],40:[2,98],54:[2,98],60:[2,98],61:[2,98],64:[2,98],65:[2,98],91:[2,98],94:[2,98]},{14:[1,158]},{25:[1,159]},{3:160,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{3:161,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,22],14:[2,22],15:[2,22],20:[2,22],21:[2,22],22:[2,22],23:[2,22],24:[2,22],26:[2,22],27:[2,22],30:[2,22],38:[2,22],39:[2,22],40:[2,22],54:[2,22],60:[2,22],61:[2,22],64:[2,22],65:[2,22],91:[2,22],94:[2,22]},{3:162,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,24],14:[2,24],15:[2,24],20:[2,24],21:[2,24],22:[2,24],23:[2,24],24:[2,24],26:[2,24],27:[2,24],30:[2,24],38:[2,24],39:[2,24],40:[2,24],54:[2,24],60:[2,24],61:[2,24],64:[2,24],65:[2,24],91:[2,24],94:[2,24]},{12:[2,25],14:[2,25],15:[2,25],20:[2,25],21:[2,25],22:[2,25],23:[2,25],24:[2,25],26:[2,25],27:[2,25],30:[2,25],38:[2,25],39:[2,25],40:[2,25],54:[2,25],60:[2,25],61:[2,25],64:[2,25],65:[2,25],91:[2,25],94:[2,25]},{12:[2,28],14:[2,28],15:[2,28],20:[2,28],21:[2,28],22:[2,28],23:[2,28],24:[2,28],26:[2,28],27:[2,28],30:[2,28],38:[2,28],39:[2,28],40:[2,28],54:[2,28],60:[2,28],61:[2,28],64:[2,28],65:[2,28],91:[2,28],94:[2,28]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:163},{12:[1,164]},{14:[1,165]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:166},{12:[2,99],14:[2,99],15:[2,99],20:[2,99],21:[2,99],22:[2,99],23:[2,99],24:[2,99],26:[2,99],30:[2,99],38:[2,99],39:[2,99],40:[2,99],54:[2,99],60:[2,99],61:[2,99],64:[2,99],65:[2,99],91:[2,99],94:[2,99]},{3:167,4:7,5:8,6:9,7:10,8:11,9:12,10:13,11:14,12:[1,16],15:[1,17],16:24,18:25,19:18,20:[1,22],21:[1,21],22:[1,23],23:[1,19],24:[1,30],26:[1,20],28:26,29:27,30:[1,28],31:29,37:40,38:[1,45],39:[1,33],40:[1,31],53:36,54:[1,39],58:32,59:37,60:[1,41],61:[1,42],62:35,63:38,64:[1,43],65:[1,44],66:34},{12:[2,20],14:[2,20],15:[2,20],20:[2,20],21:[2,20],22:[2,20],23:[2,20],24:[2,20],26:[2,20],27:[2,20],30:[2,20],38:[2,20],39:[2,20],40:[2,20],54:[2,20],60:[2,20],61:[2,20],64:[2,20],65:[2,20],91:[2,20],94:[2,20]},{12:[2,21],14:[2,21],15:[2,21],20:[2,21],21:[2,21],22:[2,21],23:[2,21],24:[2,21],26:[2,21],27:[2,21],30:[2,21],38:[2,21],39:[2,21],40:[2,21],54:[2,21],60:[2,21],61:[2,21],64:[2,21],65:[2,21],91:[2,21],94:[2,21]},{12:[2,23],14:[2,23],15:[2,23],20:[2,23],21:[2,23],22:[2,23],23:[2,23],24:[2,23],26:[2,23],27:[2,23],30:[2,23],38:[2,23],39:[2,23],40:[2,23],54:[2,23],60:[2,23],61:[2,23],64:[2,23],65:[2,23],91:[2,23],94:[2,23]},{14:[1,168]},{12:[2,95],14:[2,95],15:[2,95],20:[2,95],21:[2,95],22:[2,95],23:[2,95],24:[2,95],26:[2,95],30:[2,95],38:[2,95],39:[2,95],40:[2,95],54:[2,95],60:[2,95],61:[2,95],64:[2,95],65:[2,95],90:129,94:[2,95],95:169},{17:[2,102],25:[2,102]},{14:[1,170]},{12:[2,19],14:[2,19],15:[2,19],20:[2,19],21:[2,19],22:[2,19],23:[2,19],24:[2,19],26:[2,19],27:[2,19],30:[2,19],38:[2,19],39:[2,19],40:[2,19],54:[2,19],60:[2,19],61:[2,19],64:[2,19],65:[2,19],91:[2,19],94:[2,19]},{17:[2,100],25:[2,100]},{14:[1,171]},{17:[2,103],25:[2,103]},{17:[2,101],25:[2,101]}], defaultActions: {3:[2,93]}, 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], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; var args = lstack.slice.call(arguments, 1); 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; 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) { state = stack[stack.length - 1]; if (this.defaultActions[state]) { action = this.defaultActions[state]; } else { if (symbol === null || typeof symbol == 'undefined') { symbol = lex(); } action = table[state] && table[state][symbol]; } if (typeof action === 'undefined' || !action.length || !action[0]) { var errStr = ''; 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 }); } 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: stack.push(symbol); vstack.push(this.lexer.yytext); lstack.push(this.lexer.yylloc); stack.push(action[1]); symbol = null; if (!preErrorSymbol) { yyleng = this.lexer.yyleng; yytext = this.lexer.yytext; yylineno = this.lexer.yylineno; yyloc = this.lexer.yylloc; if (recovering > 0) { recovering--; } } else { symbol = preErrorSymbol; preErrorSymbol = null; } break; case 2: len = this.productions_[action[1]][1]; yyval.$ = vstack[vstack.length - len]; 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; } 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]); vstack.push(yyval.$); lstack.push(yyval._$); newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; stack.push(newState); break; case 3: return true; } } return true; }}; function parseNumericLiteral(literal) { if (literal.charAt(0) === "0") { if (literal.charAt(1).toLowerCase() === "x") { return parseInt(literal, 16); } else { return parseInt(literal, 8); } } else { return Number(literal); } } /* Begin Parser Customization Methods */ var _originalParseMethod = parser.parse; parser.parse = function(source, args) { parser.wasNewLine = false; parser.newLine = false; parser.restricted = false; return _originalParseMethod.call(this, source); }; parser.parseError = function(str, hash) { // alert(JSON.stringify(hash) + "\n\n\n" + parser.newLine + "\n" + parser.wasNewLine + "\n\n" + hash.expected.indexOf("';'")); if (!((hash.expected && hash.expected.indexOf("';'") >= 0) && (hash.token === "}" || hash.token === "EOF" || hash.token === "BR++" || hash.token === "BR--" || parser.newLine || parser.wasNewLine))) { throw new SyntaxError(str); } }; /* End Parser Customization Methods */ /* Begin AST Node Constructors */ function ProgramNode(body) { this.type = "Program"; this.body = body; } function EmptyStatementNode() { this.type = "EmptyStatement"; } function BlockStatementNode(body) { this.type = "BlockStatement"; this.body = body; } function ExpressionStatementNode(expression) { this.type = "ExpressionStatement"; this.expression = expression; } function IfStatementNode(test, consequent, alternate) { this.type = "IfStatement"; this.test = test; this.consequent = consequent; this.alternate = alternate; } function BreakStatementNode() { this.type = "BreakStatement"; } function ContinueStatementNode() { this.type = "ContinueStatement"; } function ReturnStatementNode(argument) { this.type = "ReturnStatement"; this.argument = argument; } function ForStatementNode(init, test, update, body) { this.type = "ForStatement"; this.init = init; this.test = test; this.update = update; this.body = body; } function MathExpressionNode(expr) { this.type = "MathExpression"; this.expr = expr; } function BoolExpressionNode(expr) { this.type = "BoolExpression"; this.expr = expr; } function ContextAccessNode(layers) { this.type = "ContextAccess"; this.layers = layers; } function FunctionDeclarationNode(id, params, body, generator, expression) { this.type = "FunctionDeclaration"; this.id = id; this.params = params; this.body = body; this.generator = generator; this.expression = expression; } function VariableDeclaratorNode(id, init) { this.type = "VariableDeclarator"; this.id = id; this.init = init; } function UnaryExpressionNode(operator, prefix, argument) { this.type = "UnaryExpression"; this.operator = operator; this.prefix = prefix; this.argument = argument; } function BinaryExpressionNode(operator, left, right) { this.type = "BinaryExpression"; this.operator = operator; this.left = left; this.right = right; } function AssignmentExpressionNode(operator, left, right) { this.type = "AssignmentExpression"; this.operator = operator; this.left = left; this.right = right; } function UpdateExpressionNode(operator, argument, prefix) { this.type = "UpdateExpression"; this.operator = operator; this.argument = argument; this.prefix = prefix; } function LogicalExpressionNode(operator, left, right) { this.type = "LogicalExpression"; this.operator = operator; this.left = left; this.right = right; } function ConditionalExpressionNode(test, consequent, alternate) { this.type = "ConditionalExpression"; this.test = test; this.consequent = consequent; this.alternate = alternate; } function IdentifierNode(name) { this.type = "Identifier"; this.name = name; } function LiteralNode(value) { this.type = "Literal"; this.value = value; } function MatrixAccessNode(name, indexes) { this.type = "MatrixAccess"; this.name = name; this.indexes = indexes; } /* End AST Node Constructors */ /* Expose the AST Node Constructors */ parser.ast = {}; parser.ast.ProgramNode = ProgramNode; parser.ast.BlockStatementNode = BlockStatementNode; parser.ast.ExpressionStatementNode = ExpressionStatementNode; parser.ast.IfStatementNode = IfStatementNode; parser.ast.ForStatementNode = ForStatementNode; parser.ast.BoolExpressionNode = BoolExpressionNode; parser.ast.MathExpressionNode = MathExpressionNode; parser.ast.MatrixAccessNode = MatrixAccessNode; parser.ast.BreakStatementNode = BreakStatementNode; parser.ast.ContinueStatementNode = ContinueStatementNode; parser.ast.ReturnStatementNode = ReturnStatementNode; parser.ast.ForStatementNode = ForStatementNode; parser.ast.FunctionDeclarationNode = FunctionDeclarationNode; parser.ast.VariableDeclaratorNode = VariableDeclaratorNode; parser.ast.UnaryExpressionNode = UnaryExpressionNode; parser.ast.BinaryExpressionNode = BinaryExpressionNode; parser.ast.AssignmentExpressionNode = AssignmentExpressionNode; parser.ast.UpdateExpressionNode = UpdateExpressionNode; parser.ast.LogicalExpressionNode = LogicalExpressionNode; parser.ast.IdentifierNode = IdentifierNode; parser.ast.LiteralNode = LiteralNode; /* 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.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){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){for(var k in backup){this[k]=backup[k]}return false}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;imatch[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}else{return false}}else if(!this.options.flex){break}}}if(match){token=this.test_match(match,rules[index]);if(token!==false){return token}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: {"flex":true}, 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:/* skip block comments */ break; case 2:/* skip line comments */ break; case 3:return "STRING_LITERAL"; break; case 4:return "ELSE"; break; case 5:return "FOR"; break; case 6:return "FUNCTION"; break; case 7:return "IF"; break; case 8:return "RETURN"; break; case 9:return "THIS"; break; case 10:return "VAR"; break; case 11:return "TRUE"; break; case 12:return "FALSE"; break; case 13:return "NULL"; break; case 14:return "UNDEFINED"; break; case 15:return "IDENTIFIER"; break; case 16:return "NUMERIC_LITERAL"; break; case 17:return "NUMERIC_LITERAL"; break; case 18:return "NUMERIC_LITERAL"; break; case 19:return "{"; break; case 20:return "}"; break; case 21:return "("; break; case 22:return ")"; break; case 23:return "["; break; case 24:return "]"; break; case 25:return ";"; break; case 26:return ","; break; case 27:return "?"; break; case 28:return ":"; break; case 29:return "==="; break; case 30:return "=="; break; case 31:return "="; break; case 32:return "!=="; break; case 33:return "!="; break; case 34:return "!"; break; case 35:return "<="; break; case 36:return "<"; break; case 37:return ">="; break; case 38:return ">"; break; case 39:return "+="; break; case 40:return "++"; break; case 41:return "+"; break; case 42:return "-="; break; case 43:return "--"; break; case 44:return "-"; break; case 45:return "*="; break; case 46:return "*"; break; case 47:return "/="; break; case 48:return "/"; break; case 49:return "%="; break; case 50:return "%"; break; case 51:return "&&"; break; case 52:return "&="; break; case 53:return "&"; break; case 54:return "||"; break; case 55:return "|="; break; case 56:return "|"; break; case 57:return "^="; break; case 58:return "^"; break; case 59:return "EOF"; break; case 60:return "ERROR"; break; case 61:console.log(yy_.yytext); break; } }, rules: [/^(?:\s+)/,/^(?:\/\*(.|\r|\n)*?\*\/)/,/^(?:\/\/.*($|\r\n|\r|\n))/,/^(?:(("(([^\"\\\n\r]+)|(\\((([\'\"\\bfnrtv])|([^\'\"\\bfnrtv0-9xu]))|((?:[1-7][0-7]{0,2}|[0-7]{2,3}))|([x]([0-9a-fA-F]){2})))|(\\(\r\n|\r|\n)))*")|('(([^\'\\\n\r]+)|(\\((([\'\"\\bfnrtv])|([^\'\"\\bfnrtv0-9xu]))|((?:[1-7][0-7]{0,2}|[0-7]{2,3}))|([x]([0-9a-fA-F]){2})))|(\\(\r\n|\r|\n)))*')))/,/^(?:else)/,/^(?:for)/,/^(?:function)/,/^(?:if)/,/^(?:return)/,/^(?:this)/,/^(?:var)/,/^(?:true)/,/^(?:false)/,/^(?:null)/,/^(?:undefined)/,/^(?:(([?_a-zA-Z])(([?_a-zA-Z])|[0-9])*))/,/^(?:(((([0-9])|(([1-9])([0-9]+)*))\.([0-9]+)*(([eE])([+-]?([0-9])+))?)|(\.([0-9]+)(([eE])([+-]?([0-9])+))?)|((([0-9])|(([1-9])([0-9]+)*))(([eE])([+-]?([0-9])+))?)))/,/^(?:([0][xX]([0-9a-fA-F])+))/,/^(?:([0]([0-7])+))/,/^(?:\{)/,/^(?:\})/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:;)/,/^(?:,)/,/^(?:\?)/,/^(?::)/,/^(?:===)/,/^(?:==)/,/^(?:=)/,/^(?:!==)/,/^(?:!=)/,/^(?:!)/,/^(?:<=)/,/^(?:<)/,/^(?:>=)/,/^(?:>)/,/^(?:\+=)/,/^(?:\+\+)/,/^(?:\+)/,/^(?:-=)/,/^(?:--)/,/^(?:-)/,/^(?:\*=)/,/^(?:\*)/,/^(?:\/=)/,/^(?:\/)/,/^(?:%=)/,/^(?:%)/,/^(?:&&)/,/^(?:&=)/,/^(?:&)/,/^(?:\|\|)/,/^(?:\|=)/,/^(?:\|)/,/^(?:\^=)/,/^(?:\^)/,/^(?:$)/,/^(?:.)/,/^(?:.)/], 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,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61],"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 = parser; exports.Parser = parser.Parser; exports.parse = function () { return parser.parse.apply(parser, 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)); } }