From f16a0dfd5cb390a4b9096175e241ae95bf7d8c93 Mon Sep 17 00:00:00 2001 From: javad Date: Wed, 10 Apr 2024 15:54:26 +0330 Subject: [PATCH 01/23] inital structure of phase2 --- .../gen/main/grammer/FunctionCraft.interp | 24 +- .../gen/main/grammer/FunctionCraft.tokens | 108 +- .../grammer/FunctionCraftBaseListener.java | 20 +- .../grammer/FunctionCraftBaseVisitor.java | 10 +- .../main/grammer/FunctionCraftLexer.interp | 32 +- .../gen/main/grammer/FunctionCraftLexer.java | 446 +- .../main/grammer/FunctionCraftLexer.tokens | 108 +- .../main/grammer/FunctionCraftListener.java | 20 +- .../gen/main/grammer/FunctionCraftParser.java | 1288 +++--- .../main/grammer/FunctionCraftVisitor.java | 12 +- Phase2/Jepeto-Compiler-main/.idea/misc.xml | 3 +- .../Jepeto-Phase2/main/Jepeto.class | Bin 765 -> 765 bytes .../Jepeto-Phase2/main/JepetoCompiler.class | Bin 1624 -> 1624 bytes .../Jepeto-Phase2/main/ast/nodes/Node.class | Bin 1399 -> 1399 bytes .../main/ast/nodes/Program.class | Bin 2032 -> 2032 bytes .../ast/nodes/declaration/Declaration.class | Bin 315 -> 315 bytes .../declaration/FunctionDeclaration.class | Bin 2757 -> 2757 bytes .../nodes/declaration/MainDeclaration.class | Bin 1193 -> 1193 bytes .../nodes/expression/AnonymousFunction.class | Bin 1790 -> 1790 bytes .../nodes/expression/BinaryExpression.class | Bin 2534 -> 2534 bytes .../ast/nodes/expression/Expression.class | Bin 310 -> 310 bytes .../ast/nodes/expression/FunctionCall.class | Bin 3077 -> 3077 bytes .../ast/nodes/expression/Identifier.class | Bin 1558 -> 1558 bytes .../nodes/expression/ListAccessByIndex.class | Bin 1525 -> 1525 bytes .../main/ast/nodes/expression/ListSize.class | Bin 1104 -> 1104 bytes .../nodes/expression/UnaryExpression.class | Bin 2225 -> 2225 bytes .../expression/operators/BinaryOperator.class | Bin 1598 -> 1643 bytes .../expression/operators/UnaryOperator.class | Bin 1168 -> 1213 bytes .../nodes/expression/values/ListValue.class | Bin 1792 -> 1792 bytes .../ast/nodes/expression/values/Value.class | Bin 326 -> 326 bytes .../nodes/expression/values/VoidValue.class | Bin 877 -> 877 bytes .../values/primitive/BoolValue.class | Bin 1573 -> 1573 bytes .../values/primitive/IntValue.class | Bin 1568 -> 1568 bytes .../values/primitive/StringValue.class | Bin 1628 -> 1628 bytes .../main/ast/nodes/statement/BlockStmt.class | Bin 1761 -> 1761 bytes .../ast/nodes/statement/ConditionalStmt.class | Bin 1849 -> 1849 bytes .../nodes/statement/FunctionCallStmt.class | Bin 1256 -> 1256 bytes .../main/ast/nodes/statement/PrintStmt.class | Bin 1179 -> 1179 bytes .../main/ast/nodes/statement/ReturnStmt.class | Bin 1276 -> 1276 bytes .../main/ast/nodes/statement/Statement.class | Bin 305 -> 305 bytes .../main/compileErrors/CompileError.class | Bin 972 -> 972 bytes .../nameErrors/ArgumentNotDeclared.class | Bin 1034 -> 1034 bytes .../nameErrors/DuplicateArgument.class | Bin 949 -> 949 bytes .../nameErrors/DuplicateFunction.class | Bin 949 -> 949 bytes .../nameErrors/FunctionNotDeclared.class | Bin 958 -> 958 bytes .../nameErrors/NameConflict.class | Bin 967 -> 967 bytes .../nameErrors/VariableNotDeclared.class | Bin 958 -> 958 bytes .../main/symbolTable/SymbolTable.class | Bin 1963 -> 1963 bytes .../ItemAlreadyExistsException.class | Bin 362 -> 362 bytes .../exceptions/ItemNotFoundException.class | Bin 347 -> 347 bytes .../items/FunctionSymbolTableItem.class | Bin 2023 -> 2023 bytes .../symbolTable/items/SymbolTableItem.class | Bin 583 -> 583 bytes .../items/VariableSymbolTableItem.class | Bin 1240 -> 1240 bytes .../main/symbolTable/utils/Stack.class | Bin 1152 -> 1152 bytes .../main/visitor/ASTErrorDetector.class | Bin 15927 -> 16166 bytes .../main/visitor/ASTTreePrinter.class | Bin 11666 -> 11905 bytes .../Jepeto-Phase2/main/visitor/IVisitor.class | Bin 2825 -> 2825 bytes .../Jepeto-Phase2/main/visitor/Visitor.class | Bin 5882 -> 5882 bytes .../parsers/JepetoBaseListener.class | Bin 13840 -> 13840 bytes .../parsers/JepetoBaseVisitor.class | Bin 13993 -> 13993 bytes .../Jepeto-Phase2/parsers/JepetoLexer.class | Bin 8147 -> 8147 bytes .../parsers/JepetoListener.class | Bin 7116 -> 7116 bytes ...JepetoParser$AccessExpressionContext.class | Bin 4535 -> 4535 bytes ...petoParser$AdditiveExpressionContext.class | Bin 3277 -> 3277 bytes .../JepetoParser$AndExpressionContext.class | Bin 2948 -> 2948 bytes ...epetoParser$AnonymousFunctionContext.class | Bin 2774 -> 2774 bytes ...JepetoParser$AppendExpressionContext.class | Bin 2968 -> 2968 bytes .../parsers/JepetoParser$BlockContext.class | Bin 3298 -> 3298 bytes .../parsers/JepetoParser$BodyContext.class | Bin 2411 -> 2411 bytes .../JepetoParser$BoolValueContext.class | Bin 2152 -> 2152 bytes .../JepetoParser$ConditionBodyContext.class | Bin 2779 -> 2779 bytes ...petoParser$EqualityExpressionContext.class | Bin 3256 -> 3256 bytes .../JepetoParser$ExpressionContext.class | Bin 2892 -> 2892 bytes ...epetoParser$FunctionArgumentsContext.class | Bin 2920 -> 2920 bytes ...$FunctionArgumentsDeclarationContext.class | Bin 2893 -> 2893 bytes .../JepetoParser$FunctionCallContext.class | Bin 3371 -> 3371 bytes ...oParser$FunctionCallStatementContext.class | Bin 2507 -> 2507 bytes ...etoParser$FunctionDeclarationContext.class | Bin 3001 -> 3001 bytes .../JepetoParser$IdentifierContext.class | Bin 2113 -> 2113 bytes .../JepetoParser$IfStatementContext.class | Bin 3342 -> 3342 bytes ...oParser$IfStatementWithReturnContext.class | Bin 3372 -> 3372 bytes .../parsers/JepetoParser$JepetoContext.class | Bin 2334 -> 2334 bytes .../JepetoParser$ListValueContext.class | Bin 2598 -> 2598 bytes .../parsers/JepetoParser$MainContext.class | Bin 2790 -> 2790 bytes ...rser$MultiplicativeExpressionContext.class | Bin 3292 -> 3292 bytes .../JepetoParser$OtherExpressionContext.class | Bin 3283 -> 3283 bytes ...petoParser$PreUnaryExpressionContext.class | Bin 2861 -> 2861 bytes .../JepetoParser$PrintStatementContext.class | Bin 2691 -> 2691 bytes .../parsers/JepetoParser$ProgramContext.class | Bin 2699 -> 2699 bytes ...toParser$RelationalExpressionContext.class | Bin 3267 -> 3267 bytes .../JepetoParser$ReturnStatementContext.class | Bin 2808 -> 2808 bytes .../JepetoParser$SingleStatementContext.class | Bin 2583 -> 2583 bytes .../JepetoParser$SizeExpressionContext.class | Bin 2150 -> 2150 bytes ...tedExpressionsWithCommaAndKeyContext.class | Bin 3675 -> 3675 bytes ...r$SplitedExpressionsWithCommaContext.class | Bin 3037 -> 3037 bytes .../JepetoParser$StatementContext.class | Bin 3060 -> 3060 bytes .../parsers/JepetoParser$ValuesContext.class | Bin 2745 -> 2745 bytes .../JepetoParser$VoidValueContext.class | Bin 2111 -> 2111 bytes .../Jepeto-Phase2/parsers/JepetoParser.class | Bin 48512 -> 48512 bytes .../Jepeto-Phase2/parsers/JepetoVisitor.class | Bin 8953 -> 8953 bytes .../Jepeto-Compiler-main/samples/sample1.jp | 76 +- Phase2Template/Phase2/.gitignore | 29 + Phase2Template/Phase2/.idea/.gitignore | 3 + Phase2Template/Phase2/.idea/misc.xml | 22 + Phase2Template/Phase2/.idea/modules.xml | 8 + Phase2Template/Phase2/.idea/uiDesigner.xml | 124 + Phase2Template/Phase2/.idea/vcs.xml | 6 + Phase2Template/Phase2/Phase2.iml | 11 + .../Phase2/src/main/FLCompiler.java | 4 + .../Phase2/src/main/FunctionCraft.java | 4 + .../Phase2/src/main/ast/nodes/Node.java | 17 + .../Phase2/src/main/ast/nodes/Program.java | 5 + .../src/main/compileError/CompileError.java | 13 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 309 ++ .../Phase2/src/main/visitor/IVisitor.java | 4 + .../Phase2/src/main/visitor/Visitor.java | 4 + .../Phase2/src/parsers/FunctionCraft.interp | 177 + .../Phase2/src/parsers/FunctionCraft.tokens | 124 + .../parsers/FunctionCraftBaseListener.java | 472 +++ .../src/parsers/FunctionCraftBaseVisitor.java | 267 ++ .../src/parsers/FunctionCraftLexer.interp | 212 + .../src/parsers/FunctionCraftLexer.java | 394 ++ .../src/parsers/FunctionCraftLexer.tokens | 124 + .../src/parsers/FunctionCraftListener.java | 370 ++ .../src/parsers/FunctionCraftParser.java | 3664 +++++++++++++++++ .../src/parsers/FunctionCraftVisitor.java | 229 ++ 126 files changed, 7800 insertions(+), 943 deletions(-) create mode 100644 Phase2Template/Phase2/.gitignore create mode 100644 Phase2Template/Phase2/.idea/.gitignore create mode 100644 Phase2Template/Phase2/.idea/misc.xml create mode 100644 Phase2Template/Phase2/.idea/modules.xml create mode 100644 Phase2Template/Phase2/.idea/uiDesigner.xml create mode 100644 Phase2Template/Phase2/.idea/vcs.xml create mode 100644 Phase2Template/Phase2/Phase2.iml create mode 100644 Phase2Template/Phase2/src/main/FLCompiler.java create mode 100644 Phase2Template/Phase2/src/main/FunctionCraft.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/Node.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/Program.java create mode 100644 Phase2Template/Phase2/src/main/compileError/CompileError.java create mode 100644 Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 create mode 100644 Phase2Template/Phase2/src/main/visitor/IVisitor.java create mode 100644 Phase2Template/Phase2/src/main/visitor/Visitor.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraft.interp create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraft.tokens create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftLexer.interp create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftLexer.tokens create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftListener.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftParser.java create mode 100644 Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraft.interp b/Phase1Template/untitled/gen/main/grammer/FunctionCraft.interp index a687692..9942363 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraft.interp +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraft.interp @@ -25,8 +25,8 @@ null '/' '==' '!=' -'is not' -'is' +'<=' +'>=' '>' '<' '&&' @@ -34,6 +34,7 @@ null '!' '++' '--' +' |' '|' '<<' 'true' @@ -41,6 +42,11 @@ null 'break' 'next' '->' +'+=' +'-=' +'*=' +'/=' +'%=' '=' '(' ')' @@ -87,8 +93,8 @@ MULT DIVIDE EQUAL NOT_EQUAL -IS_NOT -IS +LESS_EQUAL_THAN +GREATER_EQUAL_THAN GREATER_THAN LESS_THAN AND @@ -96,6 +102,7 @@ OR NOT INCREMENT DECREMENT +PATTERN_MATCHING_SEPARATOR SEPARATOR APPEND TRUE @@ -103,6 +110,11 @@ FALSE BREAK NEXT ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN ASSIGN LPAR RPAR @@ -147,11 +159,11 @@ accessList statement body expression +eqaulityExpression relationalExpression additiveExpression multiplicativeExpression preUnaryExpression -appendExpression accessExpression otherExpression lambdaFunction @@ -162,4 +174,4 @@ functionPointer atn: -[4, 1, 59, 488, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 5, 0, 75, 8, 0, 10, 0, 12, 0, 78, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 93, 8, 2, 10, 2, 12, 2, 96, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 107, 8, 2, 10, 2, 12, 2, 110, 9, 2, 1, 2, 1, 2, 3, 2, 114, 8, 2, 3, 2, 116, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 131, 8, 3, 10, 3, 12, 3, 134, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 149, 8, 5, 10, 5, 12, 5, 152, 9, 5, 3, 5, 154, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 159, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 172, 8, 7, 10, 7, 12, 7, 175, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 180, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 189, 8, 8, 1, 8, 1, 8, 3, 8, 193, 8, 8, 5, 8, 195, 8, 8, 10, 8, 12, 8, 198, 9, 8, 5, 8, 200, 8, 8, 10, 8, 12, 8, 203, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 245, 8, 13, 1, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 3, 13, 254, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 274, 8, 15, 10, 15, 12, 15, 277, 9, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 295, 8, 16, 10, 16, 12, 16, 298, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 314, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 3, 19, 323, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 342, 8, 21, 1, 22, 5, 22, 345, 8, 22, 10, 22, 12, 22, 348, 9, 22, 1, 22, 3, 22, 351, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 358, 8, 23, 1, 23, 1, 23, 1, 23, 5, 23, 363, 8, 23, 10, 23, 12, 23, 366, 9, 23, 1, 24, 1, 24, 1, 24, 3, 24, 371, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 376, 8, 24, 10, 24, 12, 24, 379, 9, 24, 1, 25, 1, 25, 1, 25, 3, 25, 384, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 389, 8, 25, 10, 25, 12, 25, 392, 9, 25, 1, 26, 1, 26, 1, 26, 3, 26, 397, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 402, 8, 26, 10, 26, 12, 26, 405, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 411, 8, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 417, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 5, 28, 424, 8, 28, 10, 28, 12, 28, 427, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 435, 8, 29, 10, 29, 12, 29, 438, 9, 29, 1, 29, 5, 29, 441, 8, 29, 10, 29, 12, 29, 444, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 455, 8, 30, 1, 30, 3, 30, 458, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 474, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 0, 0, 36, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 0, 2, 1, 0, 30, 31, 1, 0, 37, 38, 517, 0, 76, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 4, 88, 1, 0, 0, 0, 6, 119, 1, 0, 0, 0, 8, 137, 1, 0, 0, 0, 10, 153, 1, 0, 0, 0, 12, 155, 1, 0, 0, 0, 14, 162, 1, 0, 0, 0, 16, 201, 1, 0, 0, 0, 18, 204, 1, 0, 0, 0, 20, 211, 1, 0, 0, 0, 22, 217, 1, 0, 0, 0, 24, 226, 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 255, 1, 0, 0, 0, 30, 281, 1, 0, 0, 0, 32, 283, 1, 0, 0, 0, 34, 301, 1, 0, 0, 0, 36, 313, 1, 0, 0, 0, 38, 319, 1, 0, 0, 0, 40, 328, 1, 0, 0, 0, 42, 341, 1, 0, 0, 0, 44, 346, 1, 0, 0, 0, 46, 352, 1, 0, 0, 0, 48, 367, 1, 0, 0, 0, 50, 380, 1, 0, 0, 0, 52, 393, 1, 0, 0, 0, 54, 416, 1, 0, 0, 0, 56, 418, 1, 0, 0, 0, 58, 428, 1, 0, 0, 0, 60, 457, 1, 0, 0, 0, 62, 459, 1, 0, 0, 0, 64, 473, 1, 0, 0, 0, 66, 475, 1, 0, 0, 0, 68, 479, 1, 0, 0, 0, 70, 481, 1, 0, 0, 0, 72, 75, 3, 2, 1, 0, 73, 75, 3, 6, 3, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 80, 3, 8, 4, 0, 80, 1, 1, 0, 0, 0, 81, 82, 5, 1, 0, 0, 82, 83, 5, 56, 0, 0, 83, 84, 6, 1, -1, 0, 84, 85, 3, 4, 2, 0, 85, 86, 3, 44, 22, 0, 86, 87, 5, 2, 0, 0, 87, 3, 1, 0, 0, 0, 88, 115, 5, 43, 0, 0, 89, 94, 5, 56, 0, 0, 90, 91, 5, 49, 0, 0, 91, 93, 5, 56, 0, 0, 92, 90, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 98, 5, 49, 0, 0, 98, 99, 5, 45, 0, 0, 99, 100, 5, 56, 0, 0, 100, 101, 5, 42, 0, 0, 101, 108, 3, 46, 23, 0, 102, 103, 5, 49, 0, 0, 103, 104, 5, 56, 0, 0, 104, 105, 5, 42, 0, 0, 105, 107, 3, 46, 23, 0, 106, 102, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 5, 46, 0, 0, 112, 114, 1, 0, 0, 0, 113, 97, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 116, 1, 0, 0, 0, 115, 89, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 118, 5, 44, 0, 0, 118, 5, 1, 0, 0, 0, 119, 120, 5, 12, 0, 0, 120, 121, 5, 56, 0, 0, 121, 122, 6, 3, -1, 0, 122, 123, 5, 43, 0, 0, 123, 124, 5, 56, 0, 0, 124, 132, 5, 44, 0, 0, 125, 126, 5, 35, 0, 0, 126, 127, 3, 16, 8, 0, 127, 128, 5, 42, 0, 0, 128, 129, 3, 46, 23, 0, 129, 131, 1, 0, 0, 0, 130, 125, 1, 0, 0, 0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 135, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 135, 136, 5, 53, 0, 0, 136, 7, 1, 0, 0, 0, 137, 138, 5, 1, 0, 0, 138, 139, 5, 3, 0, 0, 139, 140, 6, 4, -1, 0, 140, 141, 5, 43, 0, 0, 141, 142, 5, 44, 0, 0, 142, 143, 3, 44, 22, 0, 143, 144, 5, 2, 0, 0, 144, 9, 1, 0, 0, 0, 145, 150, 3, 46, 23, 0, 146, 147, 5, 49, 0, 0, 147, 149, 3, 46, 23, 0, 148, 146, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 145, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 11, 1, 0, 0, 0, 155, 156, 5, 7, 0, 0, 156, 158, 6, 6, -1, 0, 157, 159, 3, 46, 23, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 161, 5, 53, 0, 0, 161, 13, 1, 0, 0, 0, 162, 163, 5, 8, 0, 0, 163, 164, 6, 7, -1, 0, 164, 165, 3, 16, 8, 0, 165, 173, 3, 44, 22, 0, 166, 167, 5, 10, 0, 0, 167, 168, 6, 7, -1, 0, 168, 169, 3, 16, 8, 0, 169, 170, 3, 44, 22, 0, 170, 172, 1, 0, 0, 0, 171, 166, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 179, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 9, 0, 0, 177, 178, 6, 7, -1, 0, 178, 180, 3, 44, 22, 0, 179, 176, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 5, 2, 0, 0, 182, 15, 1, 0, 0, 0, 183, 184, 5, 43, 0, 0, 184, 185, 3, 46, 23, 0, 185, 196, 5, 44, 0, 0, 186, 188, 7, 0, 0, 0, 187, 189, 5, 43, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 3, 16, 8, 0, 191, 193, 5, 44, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 186, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 183, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 17, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 206, 6, 9, -1, 0, 206, 207, 5, 43, 0, 0, 207, 208, 3, 46, 23, 0, 208, 209, 5, 44, 0, 0, 209, 210, 5, 53, 0, 0, 210, 19, 1, 0, 0, 0, 211, 212, 5, 6, 0, 0, 212, 213, 6, 10, -1, 0, 213, 214, 5, 43, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 5, 44, 0, 0, 216, 21, 1, 0, 0, 0, 217, 218, 5, 5, 0, 0, 218, 219, 6, 11, -1, 0, 219, 220, 5, 43, 0, 0, 220, 221, 3, 46, 23, 0, 221, 222, 5, 49, 0, 0, 222, 223, 3, 46, 23, 0, 223, 224, 5, 44, 0, 0, 224, 225, 5, 53, 0, 0, 225, 23, 1, 0, 0, 0, 226, 227, 5, 14, 0, 0, 227, 228, 5, 17, 0, 0, 228, 229, 6, 12, -1, 0, 229, 230, 3, 26, 13, 0, 230, 231, 5, 2, 0, 0, 231, 25, 1, 0, 0, 0, 232, 248, 3, 42, 21, 0, 233, 234, 5, 39, 0, 0, 234, 237, 6, 13, -1, 0, 235, 236, 5, 8, 0, 0, 236, 238, 3, 16, 8, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 248, 5, 53, 0, 0, 240, 241, 5, 40, 0, 0, 241, 244, 6, 13, -1, 0, 242, 243, 5, 8, 0, 0, 243, 245, 3, 16, 8, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 5, 53, 0, 0, 247, 232, 1, 0, 0, 0, 247, 233, 1, 0, 0, 0, 247, 240, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 254, 3, 12, 6, 0, 253, 252, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 27, 1, 0, 0, 0, 255, 256, 5, 15, 0, 0, 256, 257, 6, 14, -1, 0, 257, 258, 5, 56, 0, 0, 258, 259, 5, 16, 0, 0, 259, 260, 3, 30, 15, 0, 260, 261, 3, 26, 13, 0, 261, 262, 5, 2, 0, 0, 262, 29, 1, 0, 0, 0, 263, 264, 5, 43, 0, 0, 264, 265, 3, 46, 23, 0, 265, 266, 5, 51, 0, 0, 266, 267, 3, 46, 23, 0, 267, 268, 5, 44, 0, 0, 268, 282, 1, 0, 0, 0, 269, 270, 5, 45, 0, 0, 270, 275, 3, 46, 23, 0, 271, 272, 5, 49, 0, 0, 272, 274, 3, 46, 23, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 278, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 5, 46, 0, 0, 279, 282, 1, 0, 0, 0, 280, 282, 5, 56, 0, 0, 281, 263, 1, 0, 0, 0, 281, 269, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 31, 1, 0, 0, 0, 283, 284, 6, 16, -1, 0, 284, 285, 5, 45, 0, 0, 285, 286, 3, 46, 23, 0, 286, 287, 5, 35, 0, 0, 287, 288, 5, 56, 0, 0, 288, 289, 5, 41, 0, 0, 289, 290, 3, 30, 15, 0, 290, 291, 5, 49, 0, 0, 291, 296, 3, 46, 23, 0, 292, 293, 5, 49, 0, 0, 293, 295, 3, 46, 23, 0, 294, 292, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 299, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 5, 46, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 6, 17, -1, 0, 302, 303, 5, 56, 0, 0, 303, 304, 5, 50, 0, 0, 304, 305, 5, 13, 0, 0, 305, 306, 5, 43, 0, 0, 306, 307, 3, 46, 23, 0, 307, 308, 5, 44, 0, 0, 308, 35, 1, 0, 0, 0, 309, 310, 5, 18, 0, 0, 310, 314, 6, 18, -1, 0, 311, 312, 5, 19, 0, 0, 312, 314, 6, 18, -1, 0, 313, 309, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 5, 43, 0, 0, 316, 317, 3, 46, 23, 0, 317, 318, 5, 44, 0, 0, 318, 37, 1, 0, 0, 0, 319, 320, 5, 56, 0, 0, 320, 322, 6, 19, -1, 0, 321, 323, 3, 40, 20, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 5, 42, 0, 0, 325, 326, 3, 46, 23, 0, 326, 327, 5, 53, 0, 0, 327, 39, 1, 0, 0, 0, 328, 329, 5, 45, 0, 0, 329, 330, 3, 46, 23, 0, 330, 331, 5, 46, 0, 0, 331, 41, 1, 0, 0, 0, 332, 342, 3, 14, 7, 0, 333, 342, 3, 24, 12, 0, 334, 342, 3, 28, 14, 0, 335, 342, 3, 18, 9, 0, 336, 342, 3, 22, 11, 0, 337, 338, 3, 46, 23, 0, 338, 339, 5, 53, 0, 0, 339, 342, 1, 0, 0, 0, 340, 342, 3, 38, 19, 0, 341, 332, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 334, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 341, 337, 1, 0, 0, 0, 341, 340, 1, 0, 0, 0, 342, 43, 1, 0, 0, 0, 343, 345, 3, 42, 21, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 3, 12, 6, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 45, 1, 0, 0, 0, 352, 364, 3, 48, 24, 0, 353, 358, 5, 24, 0, 0, 354, 358, 5, 25, 0, 0, 355, 358, 5, 26, 0, 0, 356, 358, 5, 27, 0, 0, 357, 353, 1, 0, 0, 0, 357, 354, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 357, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 360, 3, 48, 24, 0, 360, 361, 6, 23, -1, 0, 361, 363, 1, 0, 0, 0, 362, 357, 1, 0, 0, 0, 363, 366, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 365, 1, 0, 0, 0, 365, 47, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 367, 377, 3, 50, 25, 0, 368, 371, 5, 28, 0, 0, 369, 371, 5, 29, 0, 0, 370, 368, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 373, 3, 50, 25, 0, 373, 374, 6, 24, -1, 0, 374, 376, 1, 0, 0, 0, 375, 370, 1, 0, 0, 0, 376, 379, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 377, 378, 1, 0, 0, 0, 378, 49, 1, 0, 0, 0, 379, 377, 1, 0, 0, 0, 380, 390, 3, 52, 26, 0, 381, 384, 5, 20, 0, 0, 382, 384, 5, 21, 0, 0, 383, 381, 1, 0, 0, 0, 383, 382, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 3, 52, 26, 0, 386, 387, 6, 25, -1, 0, 387, 389, 1, 0, 0, 0, 388, 383, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 51, 1, 0, 0, 0, 392, 390, 1, 0, 0, 0, 393, 403, 3, 54, 27, 0, 394, 397, 5, 22, 0, 0, 395, 397, 5, 23, 0, 0, 396, 394, 1, 0, 0, 0, 396, 395, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 399, 3, 54, 27, 0, 399, 400, 6, 26, -1, 0, 400, 402, 1, 0, 0, 0, 401, 396, 1, 0, 0, 0, 402, 405, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 53, 1, 0, 0, 0, 405, 403, 1, 0, 0, 0, 406, 411, 5, 32, 0, 0, 407, 411, 5, 21, 0, 0, 408, 411, 5, 33, 0, 0, 409, 411, 5, 34, 0, 0, 410, 406, 1, 0, 0, 0, 410, 407, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 413, 3, 54, 27, 0, 413, 414, 6, 27, -1, 0, 414, 417, 1, 0, 0, 0, 415, 417, 3, 56, 28, 0, 416, 410, 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 55, 1, 0, 0, 0, 418, 425, 3, 58, 29, 0, 419, 420, 5, 36, 0, 0, 420, 421, 3, 58, 29, 0, 421, 422, 6, 28, -1, 0, 422, 424, 1, 0, 0, 0, 423, 419, 1, 0, 0, 0, 424, 427, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 425, 426, 1, 0, 0, 0, 426, 57, 1, 0, 0, 0, 427, 425, 1, 0, 0, 0, 428, 436, 3, 60, 30, 0, 429, 430, 5, 43, 0, 0, 430, 431, 3, 10, 5, 0, 431, 432, 5, 44, 0, 0, 432, 433, 6, 29, -1, 0, 433, 435, 1, 0, 0, 0, 434, 429, 1, 0, 0, 0, 435, 438, 1, 0, 0, 0, 436, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 442, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 439, 441, 3, 40, 20, 0, 440, 439, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 59, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 458, 3, 64, 32, 0, 446, 458, 5, 56, 0, 0, 447, 458, 3, 62, 31, 0, 448, 458, 3, 36, 18, 0, 449, 458, 3, 34, 17, 0, 450, 458, 3, 32, 16, 0, 451, 458, 3, 20, 10, 0, 452, 454, 5, 43, 0, 0, 453, 455, 3, 46, 23, 0, 454, 453, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 458, 5, 44, 0, 0, 457, 445, 1, 0, 0, 0, 457, 446, 1, 0, 0, 0, 457, 447, 1, 0, 0, 0, 457, 448, 1, 0, 0, 0, 457, 449, 1, 0, 0, 0, 457, 450, 1, 0, 0, 0, 457, 451, 1, 0, 0, 0, 457, 452, 1, 0, 0, 0, 458, 61, 1, 0, 0, 0, 459, 460, 5, 41, 0, 0, 460, 461, 6, 31, -1, 0, 461, 462, 3, 4, 2, 0, 462, 463, 5, 47, 0, 0, 463, 464, 3, 44, 22, 0, 464, 465, 5, 48, 0, 0, 465, 466, 3, 10, 5, 0, 466, 63, 1, 0, 0, 0, 467, 474, 3, 68, 34, 0, 468, 474, 5, 57, 0, 0, 469, 474, 5, 54, 0, 0, 470, 474, 5, 55, 0, 0, 471, 474, 3, 66, 33, 0, 472, 474, 3, 70, 35, 0, 473, 467, 1, 0, 0, 0, 473, 468, 1, 0, 0, 0, 473, 469, 1, 0, 0, 0, 473, 470, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 473, 472, 1, 0, 0, 0, 474, 65, 1, 0, 0, 0, 475, 476, 5, 45, 0, 0, 476, 477, 3, 10, 5, 0, 477, 478, 5, 46, 0, 0, 478, 67, 1, 0, 0, 0, 479, 480, 7, 1, 0, 0, 480, 69, 1, 0, 0, 0, 481, 482, 5, 11, 0, 0, 482, 483, 5, 43, 0, 0, 483, 484, 5, 52, 0, 0, 484, 485, 5, 56, 0, 0, 485, 486, 5, 44, 0, 0, 486, 71, 1, 0, 0, 0, 45, 74, 76, 94, 108, 113, 115, 132, 150, 153, 158, 173, 179, 188, 192, 196, 201, 237, 244, 247, 249, 253, 275, 281, 296, 313, 322, 341, 346, 350, 357, 364, 370, 377, 383, 390, 396, 403, 410, 416, 425, 436, 442, 454, 457, 473] \ No newline at end of file +[4, 1, 65, 503, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 5, 0, 75, 8, 0, 10, 0, 12, 0, 78, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 93, 8, 2, 10, 2, 12, 2, 96, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 107, 8, 2, 10, 2, 12, 2, 110, 9, 2, 1, 2, 1, 2, 3, 2, 114, 8, 2, 3, 2, 116, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 131, 8, 3, 10, 3, 12, 3, 134, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 149, 8, 5, 10, 5, 12, 5, 152, 9, 5, 3, 5, 154, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 159, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 172, 8, 7, 10, 7, 12, 7, 175, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 180, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 189, 8, 8, 1, 8, 1, 8, 3, 8, 193, 8, 8, 5, 8, 195, 8, 8, 10, 8, 12, 8, 198, 9, 8, 5, 8, 200, 8, 8, 10, 8, 12, 8, 203, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 245, 8, 13, 1, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 3, 13, 254, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 274, 8, 15, 10, 15, 12, 15, 277, 9, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 295, 8, 16, 10, 16, 12, 16, 298, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 314, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 3, 19, 323, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 342, 8, 21, 1, 22, 5, 22, 345, 8, 22, 10, 22, 12, 22, 348, 9, 22, 1, 22, 3, 22, 351, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 361, 8, 23, 10, 23, 12, 23, 364, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 372, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 377, 8, 24, 10, 24, 12, 24, 380, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 390, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 395, 8, 25, 10, 25, 12, 25, 398, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 406, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 411, 8, 26, 10, 26, 12, 26, 414, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 422, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 427, 8, 27, 10, 27, 12, 27, 430, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 436, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 442, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 450, 8, 29, 10, 29, 12, 29, 453, 9, 29, 1, 29, 5, 29, 456, 8, 29, 10, 29, 12, 29, 459, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 470, 8, 30, 1, 30, 3, 30, 473, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 489, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 0, 5, 46, 48, 50, 52, 54, 36, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 0, 3, 1, 0, 30, 31, 1, 0, 43, 48, 1, 0, 38, 39, 532, 0, 76, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 4, 88, 1, 0, 0, 0, 6, 119, 1, 0, 0, 0, 8, 137, 1, 0, 0, 0, 10, 153, 1, 0, 0, 0, 12, 155, 1, 0, 0, 0, 14, 162, 1, 0, 0, 0, 16, 201, 1, 0, 0, 0, 18, 204, 1, 0, 0, 0, 20, 211, 1, 0, 0, 0, 22, 217, 1, 0, 0, 0, 24, 226, 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 255, 1, 0, 0, 0, 30, 281, 1, 0, 0, 0, 32, 283, 1, 0, 0, 0, 34, 301, 1, 0, 0, 0, 36, 313, 1, 0, 0, 0, 38, 319, 1, 0, 0, 0, 40, 328, 1, 0, 0, 0, 42, 341, 1, 0, 0, 0, 44, 346, 1, 0, 0, 0, 46, 352, 1, 0, 0, 0, 48, 365, 1, 0, 0, 0, 50, 381, 1, 0, 0, 0, 52, 399, 1, 0, 0, 0, 54, 415, 1, 0, 0, 0, 56, 441, 1, 0, 0, 0, 58, 443, 1, 0, 0, 0, 60, 472, 1, 0, 0, 0, 62, 474, 1, 0, 0, 0, 64, 488, 1, 0, 0, 0, 66, 490, 1, 0, 0, 0, 68, 494, 1, 0, 0, 0, 70, 496, 1, 0, 0, 0, 72, 75, 3, 2, 1, 0, 73, 75, 3, 6, 3, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 80, 3, 8, 4, 0, 80, 1, 1, 0, 0, 0, 81, 82, 5, 1, 0, 0, 82, 83, 5, 62, 0, 0, 83, 84, 6, 1, -1, 0, 84, 85, 3, 4, 2, 0, 85, 86, 3, 44, 22, 0, 86, 87, 5, 2, 0, 0, 87, 3, 1, 0, 0, 0, 88, 115, 5, 49, 0, 0, 89, 94, 5, 62, 0, 0, 90, 91, 5, 55, 0, 0, 91, 93, 5, 62, 0, 0, 92, 90, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 98, 5, 55, 0, 0, 98, 99, 5, 51, 0, 0, 99, 100, 5, 62, 0, 0, 100, 101, 5, 48, 0, 0, 101, 108, 3, 46, 23, 0, 102, 103, 5, 55, 0, 0, 103, 104, 5, 62, 0, 0, 104, 105, 5, 48, 0, 0, 105, 107, 3, 46, 23, 0, 106, 102, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 5, 52, 0, 0, 112, 114, 1, 0, 0, 0, 113, 97, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 116, 1, 0, 0, 0, 115, 89, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 118, 5, 50, 0, 0, 118, 5, 1, 0, 0, 0, 119, 120, 5, 12, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 3, -1, 0, 122, 123, 5, 49, 0, 0, 123, 124, 5, 62, 0, 0, 124, 132, 5, 50, 0, 0, 125, 126, 5, 35, 0, 0, 126, 127, 3, 16, 8, 0, 127, 128, 5, 48, 0, 0, 128, 129, 3, 46, 23, 0, 129, 131, 1, 0, 0, 0, 130, 125, 1, 0, 0, 0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 135, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 135, 136, 5, 59, 0, 0, 136, 7, 1, 0, 0, 0, 137, 138, 5, 1, 0, 0, 138, 139, 5, 3, 0, 0, 139, 140, 6, 4, -1, 0, 140, 141, 5, 49, 0, 0, 141, 142, 5, 50, 0, 0, 142, 143, 3, 44, 22, 0, 143, 144, 5, 2, 0, 0, 144, 9, 1, 0, 0, 0, 145, 150, 3, 46, 23, 0, 146, 147, 5, 55, 0, 0, 147, 149, 3, 46, 23, 0, 148, 146, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 145, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 11, 1, 0, 0, 0, 155, 156, 5, 7, 0, 0, 156, 158, 6, 6, -1, 0, 157, 159, 3, 46, 23, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 161, 5, 59, 0, 0, 161, 13, 1, 0, 0, 0, 162, 163, 5, 8, 0, 0, 163, 164, 6, 7, -1, 0, 164, 165, 3, 16, 8, 0, 165, 173, 3, 44, 22, 0, 166, 167, 5, 10, 0, 0, 167, 168, 6, 7, -1, 0, 168, 169, 3, 16, 8, 0, 169, 170, 3, 44, 22, 0, 170, 172, 1, 0, 0, 0, 171, 166, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 179, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 9, 0, 0, 177, 178, 6, 7, -1, 0, 178, 180, 3, 44, 22, 0, 179, 176, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 5, 2, 0, 0, 182, 15, 1, 0, 0, 0, 183, 184, 5, 49, 0, 0, 184, 185, 3, 46, 23, 0, 185, 196, 5, 50, 0, 0, 186, 188, 7, 0, 0, 0, 187, 189, 5, 49, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 3, 16, 8, 0, 191, 193, 5, 50, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 186, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 183, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 17, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 206, 6, 9, -1, 0, 206, 207, 5, 49, 0, 0, 207, 208, 3, 46, 23, 0, 208, 209, 5, 50, 0, 0, 209, 210, 5, 59, 0, 0, 210, 19, 1, 0, 0, 0, 211, 212, 5, 6, 0, 0, 212, 213, 6, 10, -1, 0, 213, 214, 5, 49, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 5, 50, 0, 0, 216, 21, 1, 0, 0, 0, 217, 218, 5, 5, 0, 0, 218, 219, 6, 11, -1, 0, 219, 220, 5, 49, 0, 0, 220, 221, 3, 46, 23, 0, 221, 222, 5, 55, 0, 0, 222, 223, 3, 46, 23, 0, 223, 224, 5, 50, 0, 0, 224, 225, 5, 59, 0, 0, 225, 23, 1, 0, 0, 0, 226, 227, 5, 14, 0, 0, 227, 228, 5, 17, 0, 0, 228, 229, 6, 12, -1, 0, 229, 230, 3, 26, 13, 0, 230, 231, 5, 2, 0, 0, 231, 25, 1, 0, 0, 0, 232, 248, 3, 42, 21, 0, 233, 234, 5, 40, 0, 0, 234, 237, 6, 13, -1, 0, 235, 236, 5, 8, 0, 0, 236, 238, 3, 16, 8, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 248, 5, 59, 0, 0, 240, 241, 5, 41, 0, 0, 241, 244, 6, 13, -1, 0, 242, 243, 5, 8, 0, 0, 243, 245, 3, 16, 8, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 5, 59, 0, 0, 247, 232, 1, 0, 0, 0, 247, 233, 1, 0, 0, 0, 247, 240, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 254, 3, 12, 6, 0, 253, 252, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 27, 1, 0, 0, 0, 255, 256, 5, 15, 0, 0, 256, 257, 6, 14, -1, 0, 257, 258, 5, 62, 0, 0, 258, 259, 5, 16, 0, 0, 259, 260, 3, 30, 15, 0, 260, 261, 3, 26, 13, 0, 261, 262, 5, 2, 0, 0, 262, 29, 1, 0, 0, 0, 263, 264, 5, 49, 0, 0, 264, 265, 3, 46, 23, 0, 265, 266, 5, 57, 0, 0, 266, 267, 3, 46, 23, 0, 267, 268, 5, 50, 0, 0, 268, 282, 1, 0, 0, 0, 269, 270, 5, 51, 0, 0, 270, 275, 3, 46, 23, 0, 271, 272, 5, 55, 0, 0, 272, 274, 3, 46, 23, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 278, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 5, 52, 0, 0, 279, 282, 1, 0, 0, 0, 280, 282, 5, 62, 0, 0, 281, 263, 1, 0, 0, 0, 281, 269, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 31, 1, 0, 0, 0, 283, 284, 6, 16, -1, 0, 284, 285, 5, 51, 0, 0, 285, 286, 3, 46, 23, 0, 286, 287, 5, 36, 0, 0, 287, 288, 5, 62, 0, 0, 288, 289, 5, 42, 0, 0, 289, 290, 3, 30, 15, 0, 290, 291, 5, 55, 0, 0, 291, 296, 3, 46, 23, 0, 292, 293, 5, 55, 0, 0, 293, 295, 3, 46, 23, 0, 294, 292, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 299, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 5, 52, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 6, 17, -1, 0, 302, 303, 5, 62, 0, 0, 303, 304, 5, 56, 0, 0, 304, 305, 5, 13, 0, 0, 305, 306, 5, 49, 0, 0, 306, 307, 3, 46, 23, 0, 307, 308, 5, 50, 0, 0, 308, 35, 1, 0, 0, 0, 309, 310, 5, 18, 0, 0, 310, 314, 6, 18, -1, 0, 311, 312, 5, 19, 0, 0, 312, 314, 6, 18, -1, 0, 313, 309, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 5, 49, 0, 0, 316, 317, 3, 46, 23, 0, 317, 318, 5, 50, 0, 0, 318, 37, 1, 0, 0, 0, 319, 320, 5, 62, 0, 0, 320, 322, 6, 19, -1, 0, 321, 323, 3, 40, 20, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 7, 1, 0, 0, 325, 326, 3, 46, 23, 0, 326, 327, 5, 59, 0, 0, 327, 39, 1, 0, 0, 0, 328, 329, 5, 51, 0, 0, 329, 330, 3, 46, 23, 0, 330, 331, 5, 52, 0, 0, 331, 41, 1, 0, 0, 0, 332, 342, 3, 14, 7, 0, 333, 342, 3, 24, 12, 0, 334, 342, 3, 28, 14, 0, 335, 342, 3, 18, 9, 0, 336, 342, 3, 22, 11, 0, 337, 338, 3, 46, 23, 0, 338, 339, 5, 59, 0, 0, 339, 342, 1, 0, 0, 0, 340, 342, 3, 38, 19, 0, 341, 332, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 334, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 341, 337, 1, 0, 0, 0, 341, 340, 1, 0, 0, 0, 342, 43, 1, 0, 0, 0, 343, 345, 3, 42, 21, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 3, 12, 6, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 45, 1, 0, 0, 0, 352, 353, 6, 23, -1, 0, 353, 354, 3, 48, 24, 0, 354, 362, 1, 0, 0, 0, 355, 356, 10, 2, 0, 0, 356, 357, 5, 37, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 6, 23, -1, 0, 359, 361, 1, 0, 0, 0, 360, 355, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 47, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 366, 6, 24, -1, 0, 366, 367, 3, 50, 25, 0, 367, 378, 1, 0, 0, 0, 368, 371, 10, 2, 0, 0, 369, 372, 5, 24, 0, 0, 370, 372, 5, 25, 0, 0, 371, 369, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 374, 3, 50, 25, 0, 374, 375, 6, 24, -1, 0, 375, 377, 1, 0, 0, 0, 376, 368, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 49, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 382, 6, 25, -1, 0, 382, 383, 3, 52, 26, 0, 383, 396, 1, 0, 0, 0, 384, 389, 10, 2, 0, 0, 385, 390, 5, 28, 0, 0, 386, 390, 5, 29, 0, 0, 387, 390, 5, 26, 0, 0, 388, 390, 5, 27, 0, 0, 389, 385, 1, 0, 0, 0, 389, 386, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 389, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 3, 52, 26, 0, 392, 393, 6, 25, -1, 0, 393, 395, 1, 0, 0, 0, 394, 384, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 51, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 6, 26, -1, 0, 400, 401, 3, 54, 27, 0, 401, 412, 1, 0, 0, 0, 402, 405, 10, 2, 0, 0, 403, 406, 5, 20, 0, 0, 404, 406, 5, 21, 0, 0, 405, 403, 1, 0, 0, 0, 405, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 54, 27, 0, 408, 409, 6, 26, -1, 0, 409, 411, 1, 0, 0, 0, 410, 402, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 53, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 6, 27, -1, 0, 416, 417, 3, 56, 28, 0, 417, 428, 1, 0, 0, 0, 418, 421, 10, 2, 0, 0, 419, 422, 5, 22, 0, 0, 420, 422, 5, 23, 0, 0, 421, 419, 1, 0, 0, 0, 421, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 3, 56, 28, 0, 424, 425, 6, 27, -1, 0, 425, 427, 1, 0, 0, 0, 426, 418, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 55, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 436, 5, 32, 0, 0, 432, 436, 5, 21, 0, 0, 433, 436, 5, 33, 0, 0, 434, 436, 5, 34, 0, 0, 435, 431, 1, 0, 0, 0, 435, 432, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 3, 58, 29, 0, 438, 439, 6, 28, -1, 0, 439, 442, 1, 0, 0, 0, 440, 442, 3, 58, 29, 0, 441, 435, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 57, 1, 0, 0, 0, 443, 451, 3, 60, 30, 0, 444, 445, 5, 49, 0, 0, 445, 446, 6, 29, -1, 0, 446, 447, 3, 10, 5, 0, 447, 448, 5, 50, 0, 0, 448, 450, 1, 0, 0, 0, 449, 444, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 457, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 456, 3, 40, 20, 0, 455, 454, 1, 0, 0, 0, 456, 459, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 59, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 460, 473, 3, 64, 32, 0, 461, 473, 5, 62, 0, 0, 462, 473, 3, 62, 31, 0, 463, 473, 3, 36, 18, 0, 464, 473, 3, 34, 17, 0, 465, 473, 3, 32, 16, 0, 466, 473, 3, 20, 10, 0, 467, 469, 5, 49, 0, 0, 468, 470, 3, 46, 23, 0, 469, 468, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 473, 5, 50, 0, 0, 472, 460, 1, 0, 0, 0, 472, 461, 1, 0, 0, 0, 472, 462, 1, 0, 0, 0, 472, 463, 1, 0, 0, 0, 472, 464, 1, 0, 0, 0, 472, 465, 1, 0, 0, 0, 472, 466, 1, 0, 0, 0, 472, 467, 1, 0, 0, 0, 473, 61, 1, 0, 0, 0, 474, 475, 5, 42, 0, 0, 475, 476, 6, 31, -1, 0, 476, 477, 3, 4, 2, 0, 477, 478, 5, 53, 0, 0, 478, 479, 3, 44, 22, 0, 479, 480, 5, 54, 0, 0, 480, 481, 3, 10, 5, 0, 481, 63, 1, 0, 0, 0, 482, 489, 3, 68, 34, 0, 483, 489, 5, 63, 0, 0, 484, 489, 5, 60, 0, 0, 485, 489, 5, 61, 0, 0, 486, 489, 3, 66, 33, 0, 487, 489, 3, 70, 35, 0, 488, 482, 1, 0, 0, 0, 488, 483, 1, 0, 0, 0, 488, 484, 1, 0, 0, 0, 488, 485, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 487, 1, 0, 0, 0, 489, 65, 1, 0, 0, 0, 490, 491, 5, 51, 0, 0, 491, 492, 3, 10, 5, 0, 492, 493, 5, 52, 0, 0, 493, 67, 1, 0, 0, 0, 494, 495, 7, 2, 0, 0, 495, 69, 1, 0, 0, 0, 496, 497, 5, 11, 0, 0, 497, 498, 5, 49, 0, 0, 498, 499, 5, 58, 0, 0, 499, 500, 5, 62, 0, 0, 500, 501, 5, 50, 0, 0, 501, 71, 1, 0, 0, 0, 45, 74, 76, 94, 108, 113, 115, 132, 150, 153, 158, 173, 179, 188, 192, 196, 201, 237, 244, 247, 249, 253, 275, 281, 296, 313, 322, 341, 346, 350, 362, 371, 378, 389, 396, 405, 412, 421, 428, 435, 441, 451, 457, 469, 472, 488] \ No newline at end of file diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraft.tokens b/Phase1Template/untitled/gen/main/grammer/FunctionCraft.tokens index 8deafa5..c103028 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraft.tokens +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraft.tokens @@ -23,8 +23,8 @@ MULT=22 DIVIDE=23 EQUAL=24 NOT_EQUAL=25 -IS_NOT=26 -IS=27 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 GREATER_THAN=28 LESS_THAN=29 AND=30 @@ -32,31 +32,37 @@ OR=31 NOT=32 INCREMENT=33 DECREMENT=34 -SEPARATOR=35 -APPEND=36 -TRUE=37 -FALSE=38 -BREAK=39 -NEXT=40 -ARROW=41 -ASSIGN=42 -LPAR=43 -RPAR=44 -LBRACK=45 -RBRACK=46 -LBRACE=47 -RBRACE=48 -COMMA=49 -DOT=50 -DOUBLEDOT=51 -COLON=52 -SEMICOLLON=53 -INT_VALUE=54 -FLOAT_VALUE=55 -IDENTIFIER=56 -STRING_VALUE=57 -COMMENT=58 -WS=59 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 'def'=1 'end'=2 'main'=3 @@ -82,8 +88,8 @@ WS=59 '/'=23 '=='=24 '!='=25 -'is not'=26 -'is'=27 +'<='=26 +'>='=27 '>'=28 '<'=29 '&&'=30 @@ -91,22 +97,28 @@ WS=59 '!'=32 '++'=33 '--'=34 -'|'=35 -'<<'=36 -'true'=37 -'false'=38 -'break'=39 -'next'=40 -'->'=41 -'='=42 -'('=43 -')'=44 -'['=45 -']'=46 -'{'=47 -'}'=48 -','=49 -'.'=50 -'..'=51 -':'=52 -';'=53 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseListener.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseListener.java index 132accc..0dd233f 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseListener.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseListener.java @@ -305,61 +305,61 @@ public class FunctionCraftBaseListener implements FunctionCraftListener { * *

The default implementation does nothing.

*/ - @Override public void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + @Override public void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + @Override public void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + @Override public void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + @Override public void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + @Override public void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + @Override public void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + @Override public void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + @Override public void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAppendExpression(FunctionCraftParser.AppendExpressionContext ctx) { } + @Override public void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAppendExpression(FunctionCraftParser.AppendExpressionContext ctx) { } + @Override public void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } /** * {@inheritDoc} * diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseVisitor.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseVisitor.java index 79e8e79..1dfad61 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseVisitor.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftBaseVisitor.java @@ -186,35 +186,35 @@ public class FunctionCraftBaseVisitor extends AbstractParseTreeVisitor imp *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAppendExpression(FunctionCraftParser.AppendExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.interp b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.interp index 6b2f602..6d42009 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.interp +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.interp @@ -25,8 +25,8 @@ null '/' '==' '!=' -'is not' -'is' +'<=' +'>=' '>' '<' '&&' @@ -34,6 +34,7 @@ null '!' '++' '--' +' |' '|' '<<' 'true' @@ -41,6 +42,11 @@ null 'break' 'next' '->' +'+=' +'-=' +'*=' +'/=' +'%=' '=' '(' ')' @@ -87,8 +93,8 @@ MULT DIVIDE EQUAL NOT_EQUAL -IS_NOT -IS +LESS_EQUAL_THAN +GREATER_EQUAL_THAN GREATER_THAN LESS_THAN AND @@ -96,6 +102,7 @@ OR NOT INCREMENT DECREMENT +PATTERN_MATCHING_SEPARATOR SEPARATOR APPEND TRUE @@ -103,6 +110,11 @@ FALSE BREAK NEXT ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN ASSIGN LPAR RPAR @@ -148,8 +160,8 @@ MULT DIVIDE EQUAL NOT_EQUAL -IS_NOT -IS +LESS_EQUAL_THAN +GREATER_EQUAL_THAN GREATER_THAN LESS_THAN AND @@ -157,6 +169,7 @@ OR NOT INCREMENT DECREMENT +PATTERN_MATCHING_SEPARATOR SEPARATOR APPEND TRUE @@ -164,6 +177,11 @@ FALSE BREAK NEXT ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN ASSIGN LPAR RPAR @@ -191,4 +209,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 59, 382, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 316, 8, 53, 10, 53, 12, 53, 319, 9, 53, 3, 53, 321, 8, 53, 1, 54, 5, 54, 324, 8, 54, 10, 54, 12, 54, 327, 9, 54, 1, 54, 1, 54, 4, 54, 331, 8, 54, 11, 54, 12, 54, 332, 1, 55, 1, 55, 5, 55, 337, 8, 55, 10, 55, 12, 55, 340, 9, 55, 1, 56, 1, 56, 5, 56, 344, 8, 56, 10, 56, 12, 56, 347, 9, 56, 1, 56, 1, 56, 1, 57, 1, 57, 5, 57, 353, 8, 57, 10, 57, 12, 57, 356, 9, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 5, 57, 366, 8, 57, 10, 57, 12, 57, 369, 9, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 375, 8, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 367, 0, 59, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 390, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 1, 119, 1, 0, 0, 0, 3, 123, 1, 0, 0, 0, 5, 127, 1, 0, 0, 0, 7, 132, 1, 0, 0, 0, 9, 137, 1, 0, 0, 0, 11, 142, 1, 0, 0, 0, 13, 146, 1, 0, 0, 0, 15, 153, 1, 0, 0, 0, 17, 156, 1, 0, 0, 0, 19, 161, 1, 0, 0, 0, 21, 168, 1, 0, 0, 0, 23, 175, 1, 0, 0, 0, 25, 183, 1, 0, 0, 0, 27, 189, 1, 0, 0, 0, 29, 194, 1, 0, 0, 0, 31, 198, 1, 0, 0, 0, 33, 201, 1, 0, 0, 0, 35, 204, 1, 0, 0, 0, 37, 209, 1, 0, 0, 0, 39, 215, 1, 0, 0, 0, 41, 217, 1, 0, 0, 0, 43, 219, 1, 0, 0, 0, 45, 221, 1, 0, 0, 0, 47, 223, 1, 0, 0, 0, 49, 226, 1, 0, 0, 0, 51, 229, 1, 0, 0, 0, 53, 236, 1, 0, 0, 0, 55, 239, 1, 0, 0, 0, 57, 241, 1, 0, 0, 0, 59, 243, 1, 0, 0, 0, 61, 246, 1, 0, 0, 0, 63, 249, 1, 0, 0, 0, 65, 251, 1, 0, 0, 0, 67, 254, 1, 0, 0, 0, 69, 257, 1, 0, 0, 0, 71, 259, 1, 0, 0, 0, 73, 262, 1, 0, 0, 0, 75, 267, 1, 0, 0, 0, 77, 273, 1, 0, 0, 0, 79, 279, 1, 0, 0, 0, 81, 284, 1, 0, 0, 0, 83, 287, 1, 0, 0, 0, 85, 289, 1, 0, 0, 0, 87, 291, 1, 0, 0, 0, 89, 293, 1, 0, 0, 0, 91, 295, 1, 0, 0, 0, 93, 297, 1, 0, 0, 0, 95, 299, 1, 0, 0, 0, 97, 301, 1, 0, 0, 0, 99, 303, 1, 0, 0, 0, 101, 305, 1, 0, 0, 0, 103, 308, 1, 0, 0, 0, 105, 310, 1, 0, 0, 0, 107, 320, 1, 0, 0, 0, 109, 325, 1, 0, 0, 0, 111, 334, 1, 0, 0, 0, 113, 341, 1, 0, 0, 0, 115, 374, 1, 0, 0, 0, 117, 378, 1, 0, 0, 0, 119, 120, 5, 100, 0, 0, 120, 121, 5, 101, 0, 0, 121, 122, 5, 102, 0, 0, 122, 2, 1, 0, 0, 0, 123, 124, 5, 101, 0, 0, 124, 125, 5, 110, 0, 0, 125, 126, 5, 100, 0, 0, 126, 4, 1, 0, 0, 0, 127, 128, 5, 109, 0, 0, 128, 129, 5, 97, 0, 0, 129, 130, 5, 105, 0, 0, 130, 131, 5, 110, 0, 0, 131, 6, 1, 0, 0, 0, 132, 133, 5, 112, 0, 0, 133, 134, 5, 117, 0, 0, 134, 135, 5, 116, 0, 0, 135, 136, 5, 115, 0, 0, 136, 8, 1, 0, 0, 0, 137, 138, 5, 112, 0, 0, 138, 139, 5, 117, 0, 0, 139, 140, 5, 115, 0, 0, 140, 141, 5, 104, 0, 0, 141, 10, 1, 0, 0, 0, 142, 143, 5, 108, 0, 0, 143, 144, 5, 101, 0, 0, 144, 145, 5, 110, 0, 0, 145, 12, 1, 0, 0, 0, 146, 147, 5, 114, 0, 0, 147, 148, 5, 101, 0, 0, 148, 149, 5, 116, 0, 0, 149, 150, 5, 117, 0, 0, 150, 151, 5, 114, 0, 0, 151, 152, 5, 110, 0, 0, 152, 14, 1, 0, 0, 0, 153, 154, 5, 105, 0, 0, 154, 155, 5, 102, 0, 0, 155, 16, 1, 0, 0, 0, 156, 157, 5, 101, 0, 0, 157, 158, 5, 108, 0, 0, 158, 159, 5, 115, 0, 0, 159, 160, 5, 101, 0, 0, 160, 18, 1, 0, 0, 0, 161, 162, 5, 101, 0, 0, 162, 163, 5, 108, 0, 0, 163, 164, 5, 115, 0, 0, 164, 165, 5, 101, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 20, 1, 0, 0, 0, 168, 169, 5, 109, 0, 0, 169, 170, 5, 101, 0, 0, 170, 171, 5, 116, 0, 0, 171, 172, 5, 104, 0, 0, 172, 173, 5, 111, 0, 0, 173, 174, 5, 100, 0, 0, 174, 22, 1, 0, 0, 0, 175, 176, 5, 112, 0, 0, 176, 177, 5, 97, 0, 0, 177, 178, 5, 116, 0, 0, 178, 179, 5, 116, 0, 0, 179, 180, 5, 101, 0, 0, 180, 181, 5, 114, 0, 0, 181, 182, 5, 110, 0, 0, 182, 24, 1, 0, 0, 0, 183, 184, 5, 109, 0, 0, 184, 185, 5, 97, 0, 0, 185, 186, 5, 116, 0, 0, 186, 187, 5, 99, 0, 0, 187, 188, 5, 104, 0, 0, 188, 26, 1, 0, 0, 0, 189, 190, 5, 108, 0, 0, 190, 191, 5, 111, 0, 0, 191, 192, 5, 111, 0, 0, 192, 193, 5, 112, 0, 0, 193, 28, 1, 0, 0, 0, 194, 195, 5, 102, 0, 0, 195, 196, 5, 111, 0, 0, 196, 197, 5, 114, 0, 0, 197, 30, 1, 0, 0, 0, 198, 199, 5, 105, 0, 0, 199, 200, 5, 110, 0, 0, 200, 32, 1, 0, 0, 0, 201, 202, 5, 100, 0, 0, 202, 203, 5, 111, 0, 0, 203, 34, 1, 0, 0, 0, 204, 205, 5, 99, 0, 0, 205, 206, 5, 104, 0, 0, 206, 207, 5, 111, 0, 0, 207, 208, 5, 112, 0, 0, 208, 36, 1, 0, 0, 0, 209, 210, 5, 99, 0, 0, 210, 211, 5, 104, 0, 0, 211, 212, 5, 111, 0, 0, 212, 213, 5, 109, 0, 0, 213, 214, 5, 112, 0, 0, 214, 38, 1, 0, 0, 0, 215, 216, 5, 43, 0, 0, 216, 40, 1, 0, 0, 0, 217, 218, 5, 45, 0, 0, 218, 42, 1, 0, 0, 0, 219, 220, 5, 42, 0, 0, 220, 44, 1, 0, 0, 0, 221, 222, 5, 47, 0, 0, 222, 46, 1, 0, 0, 0, 223, 224, 5, 61, 0, 0, 224, 225, 5, 61, 0, 0, 225, 48, 1, 0, 0, 0, 226, 227, 5, 33, 0, 0, 227, 228, 5, 61, 0, 0, 228, 50, 1, 0, 0, 0, 229, 230, 5, 105, 0, 0, 230, 231, 5, 115, 0, 0, 231, 232, 5, 32, 0, 0, 232, 233, 5, 110, 0, 0, 233, 234, 5, 111, 0, 0, 234, 235, 5, 116, 0, 0, 235, 52, 1, 0, 0, 0, 236, 237, 5, 105, 0, 0, 237, 238, 5, 115, 0, 0, 238, 54, 1, 0, 0, 0, 239, 240, 5, 62, 0, 0, 240, 56, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 58, 1, 0, 0, 0, 243, 244, 5, 38, 0, 0, 244, 245, 5, 38, 0, 0, 245, 60, 1, 0, 0, 0, 246, 247, 5, 124, 0, 0, 247, 248, 5, 124, 0, 0, 248, 62, 1, 0, 0, 0, 249, 250, 5, 33, 0, 0, 250, 64, 1, 0, 0, 0, 251, 252, 5, 43, 0, 0, 252, 253, 5, 43, 0, 0, 253, 66, 1, 0, 0, 0, 254, 255, 5, 45, 0, 0, 255, 256, 5, 45, 0, 0, 256, 68, 1, 0, 0, 0, 257, 258, 5, 124, 0, 0, 258, 70, 1, 0, 0, 0, 259, 260, 5, 60, 0, 0, 260, 261, 5, 60, 0, 0, 261, 72, 1, 0, 0, 0, 262, 263, 5, 116, 0, 0, 263, 264, 5, 114, 0, 0, 264, 265, 5, 117, 0, 0, 265, 266, 5, 101, 0, 0, 266, 74, 1, 0, 0, 0, 267, 268, 5, 102, 0, 0, 268, 269, 5, 97, 0, 0, 269, 270, 5, 108, 0, 0, 270, 271, 5, 115, 0, 0, 271, 272, 5, 101, 0, 0, 272, 76, 1, 0, 0, 0, 273, 274, 5, 98, 0, 0, 274, 275, 5, 114, 0, 0, 275, 276, 5, 101, 0, 0, 276, 277, 5, 97, 0, 0, 277, 278, 5, 107, 0, 0, 278, 78, 1, 0, 0, 0, 279, 280, 5, 110, 0, 0, 280, 281, 5, 101, 0, 0, 281, 282, 5, 120, 0, 0, 282, 283, 5, 116, 0, 0, 283, 80, 1, 0, 0, 0, 284, 285, 5, 45, 0, 0, 285, 286, 5, 62, 0, 0, 286, 82, 1, 0, 0, 0, 287, 288, 5, 61, 0, 0, 288, 84, 1, 0, 0, 0, 289, 290, 5, 40, 0, 0, 290, 86, 1, 0, 0, 0, 291, 292, 5, 41, 0, 0, 292, 88, 1, 0, 0, 0, 293, 294, 5, 91, 0, 0, 294, 90, 1, 0, 0, 0, 295, 296, 5, 93, 0, 0, 296, 92, 1, 0, 0, 0, 297, 298, 5, 123, 0, 0, 298, 94, 1, 0, 0, 0, 299, 300, 5, 125, 0, 0, 300, 96, 1, 0, 0, 0, 301, 302, 5, 44, 0, 0, 302, 98, 1, 0, 0, 0, 303, 304, 5, 46, 0, 0, 304, 100, 1, 0, 0, 0, 305, 306, 5, 46, 0, 0, 306, 307, 5, 46, 0, 0, 307, 102, 1, 0, 0, 0, 308, 309, 5, 58, 0, 0, 309, 104, 1, 0, 0, 0, 310, 311, 5, 59, 0, 0, 311, 106, 1, 0, 0, 0, 312, 321, 5, 48, 0, 0, 313, 317, 7, 0, 0, 0, 314, 316, 7, 1, 0, 0, 315, 314, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, 312, 1, 0, 0, 0, 320, 313, 1, 0, 0, 0, 321, 108, 1, 0, 0, 0, 322, 324, 7, 1, 0, 0, 323, 322, 1, 0, 0, 0, 324, 327, 1, 0, 0, 0, 325, 323, 1, 0, 0, 0, 325, 326, 1, 0, 0, 0, 326, 328, 1, 0, 0, 0, 327, 325, 1, 0, 0, 0, 328, 330, 5, 46, 0, 0, 329, 331, 7, 1, 0, 0, 330, 329, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 110, 1, 0, 0, 0, 334, 338, 7, 2, 0, 0, 335, 337, 7, 3, 0, 0, 336, 335, 1, 0, 0, 0, 337, 340, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 112, 1, 0, 0, 0, 340, 338, 1, 0, 0, 0, 341, 345, 5, 34, 0, 0, 342, 344, 8, 4, 0, 0, 343, 342, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 34, 0, 0, 349, 114, 1, 0, 0, 0, 350, 354, 5, 35, 0, 0, 351, 353, 8, 5, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 375, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 358, 5, 61, 0, 0, 358, 359, 5, 98, 0, 0, 359, 360, 5, 101, 0, 0, 360, 361, 5, 103, 0, 0, 361, 362, 5, 105, 0, 0, 362, 363, 5, 110, 0, 0, 363, 367, 1, 0, 0, 0, 364, 366, 9, 0, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 370, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 371, 5, 61, 0, 0, 371, 372, 5, 101, 0, 0, 372, 373, 5, 110, 0, 0, 373, 375, 5, 100, 0, 0, 374, 350, 1, 0, 0, 0, 374, 357, 1, 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 6, 57, 0, 0, 377, 116, 1, 0, 0, 0, 378, 379, 7, 6, 0, 0, 379, 380, 1, 0, 0, 0, 380, 381, 6, 58, 0, 0, 381, 118, 1, 0, 0, 0, 10, 0, 317, 320, 325, 332, 338, 345, 354, 367, 374, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 65, 411, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 345, 8, 59, 10, 59, 12, 59, 348, 9, 59, 3, 59, 350, 8, 59, 1, 60, 5, 60, 353, 8, 60, 10, 60, 12, 60, 356, 9, 60, 1, 60, 1, 60, 4, 60, 360, 8, 60, 11, 60, 12, 60, 361, 1, 61, 1, 61, 5, 61, 366, 8, 61, 10, 61, 12, 61, 369, 9, 61, 1, 62, 1, 62, 5, 62, 373, 8, 62, 10, 62, 12, 62, 376, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 382, 8, 63, 10, 63, 12, 63, 385, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 395, 8, 63, 10, 63, 12, 63, 398, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 404, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 396, 0, 65, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 419, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 1, 131, 1, 0, 0, 0, 3, 135, 1, 0, 0, 0, 5, 139, 1, 0, 0, 0, 7, 144, 1, 0, 0, 0, 9, 149, 1, 0, 0, 0, 11, 154, 1, 0, 0, 0, 13, 158, 1, 0, 0, 0, 15, 165, 1, 0, 0, 0, 17, 168, 1, 0, 0, 0, 19, 173, 1, 0, 0, 0, 21, 180, 1, 0, 0, 0, 23, 187, 1, 0, 0, 0, 25, 195, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 210, 1, 0, 0, 0, 33, 213, 1, 0, 0, 0, 35, 216, 1, 0, 0, 0, 37, 221, 1, 0, 0, 0, 39, 227, 1, 0, 0, 0, 41, 229, 1, 0, 0, 0, 43, 231, 1, 0, 0, 0, 45, 233, 1, 0, 0, 0, 47, 235, 1, 0, 0, 0, 49, 238, 1, 0, 0, 0, 51, 241, 1, 0, 0, 0, 53, 244, 1, 0, 0, 0, 55, 247, 1, 0, 0, 0, 57, 249, 1, 0, 0, 0, 59, 251, 1, 0, 0, 0, 61, 254, 1, 0, 0, 0, 63, 257, 1, 0, 0, 0, 65, 259, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 265, 1, 0, 0, 0, 71, 271, 1, 0, 0, 0, 73, 273, 1, 0, 0, 0, 75, 276, 1, 0, 0, 0, 77, 281, 1, 0, 0, 0, 79, 287, 1, 0, 0, 0, 81, 293, 1, 0, 0, 0, 83, 298, 1, 0, 0, 0, 85, 301, 1, 0, 0, 0, 87, 304, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 310, 1, 0, 0, 0, 93, 313, 1, 0, 0, 0, 95, 316, 1, 0, 0, 0, 97, 318, 1, 0, 0, 0, 99, 320, 1, 0, 0, 0, 101, 322, 1, 0, 0, 0, 103, 324, 1, 0, 0, 0, 105, 326, 1, 0, 0, 0, 107, 328, 1, 0, 0, 0, 109, 330, 1, 0, 0, 0, 111, 332, 1, 0, 0, 0, 113, 334, 1, 0, 0, 0, 115, 337, 1, 0, 0, 0, 117, 339, 1, 0, 0, 0, 119, 349, 1, 0, 0, 0, 121, 354, 1, 0, 0, 0, 123, 363, 1, 0, 0, 0, 125, 370, 1, 0, 0, 0, 127, 403, 1, 0, 0, 0, 129, 407, 1, 0, 0, 0, 131, 132, 5, 100, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 102, 0, 0, 134, 2, 1, 0, 0, 0, 135, 136, 5, 101, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 100, 0, 0, 138, 4, 1, 0, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 6, 1, 0, 0, 0, 144, 145, 5, 112, 0, 0, 145, 146, 5, 117, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 115, 0, 0, 148, 8, 1, 0, 0, 0, 149, 150, 5, 112, 0, 0, 150, 151, 5, 117, 0, 0, 151, 152, 5, 115, 0, 0, 152, 153, 5, 104, 0, 0, 153, 10, 1, 0, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 157, 5, 110, 0, 0, 157, 12, 1, 0, 0, 0, 158, 159, 5, 114, 0, 0, 159, 160, 5, 101, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 117, 0, 0, 162, 163, 5, 114, 0, 0, 163, 164, 5, 110, 0, 0, 164, 14, 1, 0, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 16, 1, 0, 0, 0, 168, 169, 5, 101, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 115, 0, 0, 171, 172, 5, 101, 0, 0, 172, 18, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 115, 0, 0, 176, 177, 5, 101, 0, 0, 177, 178, 5, 105, 0, 0, 178, 179, 5, 102, 0, 0, 179, 20, 1, 0, 0, 0, 180, 181, 5, 109, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 116, 0, 0, 183, 184, 5, 104, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 22, 1, 0, 0, 0, 187, 188, 5, 112, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 116, 0, 0, 190, 191, 5, 116, 0, 0, 191, 192, 5, 101, 0, 0, 192, 193, 5, 114, 0, 0, 193, 194, 5, 110, 0, 0, 194, 24, 1, 0, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 99, 0, 0, 199, 200, 5, 104, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 108, 0, 0, 202, 203, 5, 111, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 112, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 102, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 114, 0, 0, 209, 30, 1, 0, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 32, 1, 0, 0, 0, 213, 214, 5, 100, 0, 0, 214, 215, 5, 111, 0, 0, 215, 34, 1, 0, 0, 0, 216, 217, 5, 99, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 112, 0, 0, 220, 36, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 104, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 109, 0, 0, 225, 226, 5, 112, 0, 0, 226, 38, 1, 0, 0, 0, 227, 228, 5, 43, 0, 0, 228, 40, 1, 0, 0, 0, 229, 230, 5, 45, 0, 0, 230, 42, 1, 0, 0, 0, 231, 232, 5, 42, 0, 0, 232, 44, 1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 46, 1, 0, 0, 0, 235, 236, 5, 61, 0, 0, 236, 237, 5, 61, 0, 0, 237, 48, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 50, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 243, 5, 61, 0, 0, 243, 52, 1, 0, 0, 0, 244, 245, 5, 62, 0, 0, 245, 246, 5, 61, 0, 0, 246, 54, 1, 0, 0, 0, 247, 248, 5, 62, 0, 0, 248, 56, 1, 0, 0, 0, 249, 250, 5, 60, 0, 0, 250, 58, 1, 0, 0, 0, 251, 252, 5, 38, 0, 0, 252, 253, 5, 38, 0, 0, 253, 60, 1, 0, 0, 0, 254, 255, 5, 124, 0, 0, 255, 256, 5, 124, 0, 0, 256, 62, 1, 0, 0, 0, 257, 258, 5, 33, 0, 0, 258, 64, 1, 0, 0, 0, 259, 260, 5, 43, 0, 0, 260, 261, 5, 43, 0, 0, 261, 66, 1, 0, 0, 0, 262, 263, 5, 45, 0, 0, 263, 264, 5, 45, 0, 0, 264, 68, 1, 0, 0, 0, 265, 266, 5, 32, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 5, 32, 0, 0, 268, 269, 5, 32, 0, 0, 269, 270, 5, 124, 0, 0, 270, 70, 1, 0, 0, 0, 271, 272, 5, 124, 0, 0, 272, 72, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 60, 0, 0, 275, 74, 1, 0, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 117, 0, 0, 279, 280, 5, 101, 0, 0, 280, 76, 1, 0, 0, 0, 281, 282, 5, 102, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 108, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 101, 0, 0, 286, 78, 1, 0, 0, 0, 287, 288, 5, 98, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 101, 0, 0, 290, 291, 5, 97, 0, 0, 291, 292, 5, 107, 0, 0, 292, 80, 1, 0, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 101, 0, 0, 295, 296, 5, 120, 0, 0, 296, 297, 5, 116, 0, 0, 297, 82, 1, 0, 0, 0, 298, 299, 5, 45, 0, 0, 299, 300, 5, 62, 0, 0, 300, 84, 1, 0, 0, 0, 301, 302, 5, 43, 0, 0, 302, 303, 5, 61, 0, 0, 303, 86, 1, 0, 0, 0, 304, 305, 5, 45, 0, 0, 305, 306, 5, 61, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 5, 42, 0, 0, 308, 309, 5, 61, 0, 0, 309, 90, 1, 0, 0, 0, 310, 311, 5, 47, 0, 0, 311, 312, 5, 61, 0, 0, 312, 92, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 315, 5, 61, 0, 0, 315, 94, 1, 0, 0, 0, 316, 317, 5, 61, 0, 0, 317, 96, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 98, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 100, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 102, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 104, 1, 0, 0, 0, 326, 327, 5, 123, 0, 0, 327, 106, 1, 0, 0, 0, 328, 329, 5, 125, 0, 0, 329, 108, 1, 0, 0, 0, 330, 331, 5, 44, 0, 0, 331, 110, 1, 0, 0, 0, 332, 333, 5, 46, 0, 0, 333, 112, 1, 0, 0, 0, 334, 335, 5, 46, 0, 0, 335, 336, 5, 46, 0, 0, 336, 114, 1, 0, 0, 0, 337, 338, 5, 58, 0, 0, 338, 116, 1, 0, 0, 0, 339, 340, 5, 59, 0, 0, 340, 118, 1, 0, 0, 0, 341, 350, 5, 48, 0, 0, 342, 346, 7, 0, 0, 0, 343, 345, 7, 1, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 342, 1, 0, 0, 0, 350, 120, 1, 0, 0, 0, 351, 353, 7, 1, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 46, 0, 0, 358, 360, 7, 1, 0, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 122, 1, 0, 0, 0, 363, 367, 7, 2, 0, 0, 364, 366, 7, 3, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 124, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 374, 5, 34, 0, 0, 371, 373, 8, 4, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 378, 5, 34, 0, 0, 378, 126, 1, 0, 0, 0, 379, 383, 5, 35, 0, 0, 380, 382, 8, 5, 0, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 404, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 388, 5, 98, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 110, 0, 0, 392, 396, 1, 0, 0, 0, 393, 395, 9, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 61, 0, 0, 400, 401, 5, 101, 0, 0, 401, 402, 5, 110, 0, 0, 402, 404, 5, 100, 0, 0, 403, 379, 1, 0, 0, 0, 403, 386, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 6, 63, 0, 0, 406, 128, 1, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 64, 0, 0, 410, 130, 1, 0, 0, 0, 10, 0, 346, 349, 354, 361, 367, 374, 383, 396, 403, 1, 6, 0, 0] \ No newline at end of file diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.java index 0608d2d..62f6919 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.java @@ -20,12 +20,13 @@ public class FunctionCraftLexer extends Lexer { DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, - IS_NOT=26, IS=27, GREATER_THAN=28, LESS_THAN=29, AND=30, OR=31, NOT=32, - INCREMENT=33, DECREMENT=34, SEPARATOR=35, APPEND=36, TRUE=37, FALSE=38, - BREAK=39, NEXT=40, ARROW=41, ASSIGN=42, LPAR=43, RPAR=44, LBRACK=45, RBRACK=46, - LBRACE=47, RBRACE=48, COMMA=49, DOT=50, DOUBLEDOT=51, COLON=52, SEMICOLLON=53, - INT_VALUE=54, FLOAT_VALUE=55, IDENTIFIER=56, STRING_VALUE=57, COMMENT=58, - WS=59; + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -38,12 +39,14 @@ private static String[] makeRuleNames() { return new String[] { "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", - "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "IS_NOT", - "IS", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", "INCREMENT", "DECREMENT", - "SEPARATOR", "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "ASSIGN", - "LPAR", "RPAR", "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", - "DOUBLEDOT", "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", - "STRING_VALUE", "COMMENT", "WS" + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" }; } public static final String[] ruleNames = makeRuleNames(); @@ -53,10 +56,10 @@ private static String[] makeLiteralNames() { null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", - "'=='", "'!='", "'is not'", "'is'", "'>'", "'<'", "'&&'", "'||'", "'!'", - "'++'", "'--'", "'|'", "'<<'", "'true'", "'false'", "'break'", "'next'", - "'->'", "'='", "'('", "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", - "'..'", "':'", "';'" + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -64,12 +67,14 @@ private static String[] makeSymbolicNames() { return new String[] { null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", - "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "IS_NOT", - "IS", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", "INCREMENT", "DECREMENT", - "SEPARATOR", "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "ASSIGN", - "LPAR", "RPAR", "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", - "DOUBLEDOT", "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", - "STRING_VALUE", "COMMENT", "WS" + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -131,7 +136,7 @@ public FunctionCraftLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000;\u017e\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000A\u019b\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ @@ -147,47 +152,50 @@ public FunctionCraftLexer(CharStream input) { "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ - ":\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ - "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ - "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+ - "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ - "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001"+ - "\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\u000e"+ - "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011"+ - "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ - "\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ - "\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017"+ - "\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a"+ - "\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c"+ - "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ - "\"\u0001\"\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001"+ - "&\u0001&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001("+ - "\u0001)\u0001)\u0001*\u0001*\u0001+\u0001+\u0001,\u0001,\u0001-\u0001"+ - "-\u0001.\u0001.\u0001/\u0001/\u00010\u00010\u00011\u00011\u00012\u0001"+ - "2\u00012\u00013\u00013\u00014\u00014\u00015\u00015\u00015\u00055\u013c"+ - "\b5\n5\f5\u013f\t5\u00035\u0141\b5\u00016\u00056\u0144\b6\n6\f6\u0147"+ - "\t6\u00016\u00016\u00046\u014b\b6\u000b6\f6\u014c\u00017\u00017\u0005"+ - "7\u0151\b7\n7\f7\u0154\t7\u00018\u00018\u00058\u0158\b8\n8\f8\u015b\t"+ - "8\u00018\u00018\u00019\u00019\u00059\u0161\b9\n9\f9\u0164\t9\u00019\u0001"+ - "9\u00019\u00019\u00019\u00019\u00019\u00019\u00059\u016e\b9\n9\f9\u0171"+ - "\t9\u00019\u00019\u00019\u00019\u00039\u0177\b9\u00019\u00019\u0001:\u0001"+ - ":\u0001:\u0001:\u0001\u016f\u0000;\u0001\u0001\u0003\u0002\u0005\u0003"+ - "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+ - "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+ - "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+ - "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6"+ - "m7o8q9s:u;\u0001\u0000\u0007\u0001\u000019\u0001\u000009\u0003\u0000A"+ - "Z__az\u0004\u000009AZ__az\u0001\u0000\"\"\u0002\u0000\n\n\r\r\u0003\u0000"+ - "\t\n\r\r \u0186\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ + "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u00010\u00010\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u0001"+ + "4\u00015\u00015\u00016\u00016\u00017\u00017\u00018\u00018\u00018\u0001"+ + "9\u00019\u0001:\u0001:\u0001;\u0001;\u0001;\u0005;\u0159\b;\n;\f;\u015c"+ + "\t;\u0003;\u015e\b;\u0001<\u0005<\u0161\b<\n<\f<\u0164\t<\u0001<\u0001"+ + "<\u0004<\u0168\b<\u000b<\f<\u0169\u0001=\u0001=\u0005=\u016e\b=\n=\f="+ + "\u0171\t=\u0001>\u0001>\u0005>\u0175\b>\n>\f>\u0178\t>\u0001>\u0001>\u0001"+ + "?\u0001?\u0005?\u017e\b?\n?\f?\u0181\t?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0005?\u018b\b?\n?\f?\u018e\t?\u0001?\u0001?\u0001"+ + "?\u0001?\u0003?\u0194\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001"+ + "\u018c\u0000A\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+ + "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+ + "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+ + "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+ + "? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f"+ + "@\u0081A\u0001\u0000\u0007\u0001\u000019\u0001\u000009\u0003\u0000AZ_"+ + "_az\u0004\u000009AZ__az\u0001\u0000\"\"\u0002\u0000\n\n\r\r\u0003\u0000"+ + "\t\n\r\r \u01a3\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ @@ -213,154 +221,168 @@ public FunctionCraftLexer(CharStream input) { "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ - "\u0000\u0000u\u0001\u0000\u0000\u0000\u0001w\u0001\u0000\u0000\u0000\u0003"+ - "{\u0001\u0000\u0000\u0000\u0005\u007f\u0001\u0000\u0000\u0000\u0007\u0084"+ - "\u0001\u0000\u0000\u0000\t\u0089\u0001\u0000\u0000\u0000\u000b\u008e\u0001"+ - "\u0000\u0000\u0000\r\u0092\u0001\u0000\u0000\u0000\u000f\u0099\u0001\u0000"+ - "\u0000\u0000\u0011\u009c\u0001\u0000\u0000\u0000\u0013\u00a1\u0001\u0000"+ - "\u0000\u0000\u0015\u00a8\u0001\u0000\u0000\u0000\u0017\u00af\u0001\u0000"+ - "\u0000\u0000\u0019\u00b7\u0001\u0000\u0000\u0000\u001b\u00bd\u0001\u0000"+ - "\u0000\u0000\u001d\u00c2\u0001\u0000\u0000\u0000\u001f\u00c6\u0001\u0000"+ - "\u0000\u0000!\u00c9\u0001\u0000\u0000\u0000#\u00cc\u0001\u0000\u0000\u0000"+ - "%\u00d1\u0001\u0000\u0000\u0000\'\u00d7\u0001\u0000\u0000\u0000)\u00d9"+ - "\u0001\u0000\u0000\u0000+\u00db\u0001\u0000\u0000\u0000-\u00dd\u0001\u0000"+ - "\u0000\u0000/\u00df\u0001\u0000\u0000\u00001\u00e2\u0001\u0000\u0000\u0000"+ - "3\u00e5\u0001\u0000\u0000\u00005\u00ec\u0001\u0000\u0000\u00007\u00ef"+ - "\u0001\u0000\u0000\u00009\u00f1\u0001\u0000\u0000\u0000;\u00f3\u0001\u0000"+ - "\u0000\u0000=\u00f6\u0001\u0000\u0000\u0000?\u00f9\u0001\u0000\u0000\u0000"+ - "A\u00fb\u0001\u0000\u0000\u0000C\u00fe\u0001\u0000\u0000\u0000E\u0101"+ - "\u0001\u0000\u0000\u0000G\u0103\u0001\u0000\u0000\u0000I\u0106\u0001\u0000"+ - "\u0000\u0000K\u010b\u0001\u0000\u0000\u0000M\u0111\u0001\u0000\u0000\u0000"+ - "O\u0117\u0001\u0000\u0000\u0000Q\u011c\u0001\u0000\u0000\u0000S\u011f"+ - "\u0001\u0000\u0000\u0000U\u0121\u0001\u0000\u0000\u0000W\u0123\u0001\u0000"+ - "\u0000\u0000Y\u0125\u0001\u0000\u0000\u0000[\u0127\u0001\u0000\u0000\u0000"+ - "]\u0129\u0001\u0000\u0000\u0000_\u012b\u0001\u0000\u0000\u0000a\u012d"+ - "\u0001\u0000\u0000\u0000c\u012f\u0001\u0000\u0000\u0000e\u0131\u0001\u0000"+ - "\u0000\u0000g\u0134\u0001\u0000\u0000\u0000i\u0136\u0001\u0000\u0000\u0000"+ - "k\u0140\u0001\u0000\u0000\u0000m\u0145\u0001\u0000\u0000\u0000o\u014e"+ - "\u0001\u0000\u0000\u0000q\u0155\u0001\u0000\u0000\u0000s\u0176\u0001\u0000"+ - "\u0000\u0000u\u017a\u0001\u0000\u0000\u0000wx\u0005d\u0000\u0000xy\u0005"+ - "e\u0000\u0000yz\u0005f\u0000\u0000z\u0002\u0001\u0000\u0000\u0000{|\u0005"+ - "e\u0000\u0000|}\u0005n\u0000\u0000}~\u0005d\u0000\u0000~\u0004\u0001\u0000"+ - "\u0000\u0000\u007f\u0080\u0005m\u0000\u0000\u0080\u0081\u0005a\u0000\u0000"+ - "\u0081\u0082\u0005i\u0000\u0000\u0082\u0083\u0005n\u0000\u0000\u0083\u0006"+ - "\u0001\u0000\u0000\u0000\u0084\u0085\u0005p\u0000\u0000\u0085\u0086\u0005"+ - "u\u0000\u0000\u0086\u0087\u0005t\u0000\u0000\u0087\u0088\u0005s\u0000"+ - "\u0000\u0088\b\u0001\u0000\u0000\u0000\u0089\u008a\u0005p\u0000\u0000"+ - "\u008a\u008b\u0005u\u0000\u0000\u008b\u008c\u0005s\u0000\u0000\u008c\u008d"+ - "\u0005h\u0000\u0000\u008d\n\u0001\u0000\u0000\u0000\u008e\u008f\u0005"+ - "l\u0000\u0000\u008f\u0090\u0005e\u0000\u0000\u0090\u0091\u0005n\u0000"+ - "\u0000\u0091\f\u0001\u0000\u0000\u0000\u0092\u0093\u0005r\u0000\u0000"+ - "\u0093\u0094\u0005e\u0000\u0000\u0094\u0095\u0005t\u0000\u0000\u0095\u0096"+ - "\u0005u\u0000\u0000\u0096\u0097\u0005r\u0000\u0000\u0097\u0098\u0005n"+ - "\u0000\u0000\u0098\u000e\u0001\u0000\u0000\u0000\u0099\u009a\u0005i\u0000"+ - "\u0000\u009a\u009b\u0005f\u0000\u0000\u009b\u0010\u0001\u0000\u0000\u0000"+ - "\u009c\u009d\u0005e\u0000\u0000\u009d\u009e\u0005l\u0000\u0000\u009e\u009f"+ - "\u0005s\u0000\u0000\u009f\u00a0\u0005e\u0000\u0000\u00a0\u0012\u0001\u0000"+ - "\u0000\u0000\u00a1\u00a2\u0005e\u0000\u0000\u00a2\u00a3\u0005l\u0000\u0000"+ - "\u00a3\u00a4\u0005s\u0000\u0000\u00a4\u00a5\u0005e\u0000\u0000\u00a5\u00a6"+ - "\u0005i\u0000\u0000\u00a6\u00a7\u0005f\u0000\u0000\u00a7\u0014\u0001\u0000"+ - "\u0000\u0000\u00a8\u00a9\u0005m\u0000\u0000\u00a9\u00aa\u0005e\u0000\u0000"+ - "\u00aa\u00ab\u0005t\u0000\u0000\u00ab\u00ac\u0005h\u0000\u0000\u00ac\u00ad"+ - "\u0005o\u0000\u0000\u00ad\u00ae\u0005d\u0000\u0000\u00ae\u0016\u0001\u0000"+ - "\u0000\u0000\u00af\u00b0\u0005p\u0000\u0000\u00b0\u00b1\u0005a\u0000\u0000"+ - "\u00b1\u00b2\u0005t\u0000\u0000\u00b2\u00b3\u0005t\u0000\u0000\u00b3\u00b4"+ - "\u0005e\u0000\u0000\u00b4\u00b5\u0005r\u0000\u0000\u00b5\u00b6\u0005n"+ - "\u0000\u0000\u00b6\u0018\u0001\u0000\u0000\u0000\u00b7\u00b8\u0005m\u0000"+ - "\u0000\u00b8\u00b9\u0005a\u0000\u0000\u00b9\u00ba\u0005t\u0000\u0000\u00ba"+ - "\u00bb\u0005c\u0000\u0000\u00bb\u00bc\u0005h\u0000\u0000\u00bc\u001a\u0001"+ - "\u0000\u0000\u0000\u00bd\u00be\u0005l\u0000\u0000\u00be\u00bf\u0005o\u0000"+ - "\u0000\u00bf\u00c0\u0005o\u0000\u0000\u00c0\u00c1\u0005p\u0000\u0000\u00c1"+ - "\u001c\u0001\u0000\u0000\u0000\u00c2\u00c3\u0005f\u0000\u0000\u00c3\u00c4"+ - "\u0005o\u0000\u0000\u00c4\u00c5\u0005r\u0000\u0000\u00c5\u001e\u0001\u0000"+ - "\u0000\u0000\u00c6\u00c7\u0005i\u0000\u0000\u00c7\u00c8\u0005n\u0000\u0000"+ - "\u00c8 \u0001\u0000\u0000\u0000\u00c9\u00ca\u0005d\u0000\u0000\u00ca\u00cb"+ - "\u0005o\u0000\u0000\u00cb\"\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005"+ - "c\u0000\u0000\u00cd\u00ce\u0005h\u0000\u0000\u00ce\u00cf\u0005o\u0000"+ - "\u0000\u00cf\u00d0\u0005p\u0000\u0000\u00d0$\u0001\u0000\u0000\u0000\u00d1"+ - "\u00d2\u0005c\u0000\u0000\u00d2\u00d3\u0005h\u0000\u0000\u00d3\u00d4\u0005"+ - "o\u0000\u0000\u00d4\u00d5\u0005m\u0000\u0000\u00d5\u00d6\u0005p\u0000"+ - "\u0000\u00d6&\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005+\u0000\u0000\u00d8"+ - "(\u0001\u0000\u0000\u0000\u00d9\u00da\u0005-\u0000\u0000\u00da*\u0001"+ - "\u0000\u0000\u0000\u00db\u00dc\u0005*\u0000\u0000\u00dc,\u0001\u0000\u0000"+ - "\u0000\u00dd\u00de\u0005/\u0000\u0000\u00de.\u0001\u0000\u0000\u0000\u00df"+ - "\u00e0\u0005=\u0000\u0000\u00e0\u00e1\u0005=\u0000\u0000\u00e10\u0001"+ - "\u0000\u0000\u0000\u00e2\u00e3\u0005!\u0000\u0000\u00e3\u00e4\u0005=\u0000"+ - "\u0000\u00e42\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005i\u0000\u0000\u00e6"+ - "\u00e7\u0005s\u0000\u0000\u00e7\u00e8\u0005 \u0000\u0000\u00e8\u00e9\u0005"+ - "n\u0000\u0000\u00e9\u00ea\u0005o\u0000\u0000\u00ea\u00eb\u0005t\u0000"+ - "\u0000\u00eb4\u0001\u0000\u0000\u0000\u00ec\u00ed\u0005i\u0000\u0000\u00ed"+ - "\u00ee\u0005s\u0000\u0000\u00ee6\u0001\u0000\u0000\u0000\u00ef\u00f0\u0005"+ - ">\u0000\u0000\u00f08\u0001\u0000\u0000\u0000\u00f1\u00f2\u0005<\u0000"+ - "\u0000\u00f2:\u0001\u0000\u0000\u0000\u00f3\u00f4\u0005&\u0000\u0000\u00f4"+ - "\u00f5\u0005&\u0000\u0000\u00f5<\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005"+ - "|\u0000\u0000\u00f7\u00f8\u0005|\u0000\u0000\u00f8>\u0001\u0000\u0000"+ - "\u0000\u00f9\u00fa\u0005!\u0000\u0000\u00fa@\u0001\u0000\u0000\u0000\u00fb"+ - "\u00fc\u0005+\u0000\u0000\u00fc\u00fd\u0005+\u0000\u0000\u00fdB\u0001"+ - "\u0000\u0000\u0000\u00fe\u00ff\u0005-\u0000\u0000\u00ff\u0100\u0005-\u0000"+ - "\u0000\u0100D\u0001\u0000\u0000\u0000\u0101\u0102\u0005|\u0000\u0000\u0102"+ - "F\u0001\u0000\u0000\u0000\u0103\u0104\u0005<\u0000\u0000\u0104\u0105\u0005"+ - "<\u0000\u0000\u0105H\u0001\u0000\u0000\u0000\u0106\u0107\u0005t\u0000"+ - "\u0000\u0107\u0108\u0005r\u0000\u0000\u0108\u0109\u0005u\u0000\u0000\u0109"+ - "\u010a\u0005e\u0000\u0000\u010aJ\u0001\u0000\u0000\u0000\u010b\u010c\u0005"+ - "f\u0000\u0000\u010c\u010d\u0005a\u0000\u0000\u010d\u010e\u0005l\u0000"+ - "\u0000\u010e\u010f\u0005s\u0000\u0000\u010f\u0110\u0005e\u0000\u0000\u0110"+ - "L\u0001\u0000\u0000\u0000\u0111\u0112\u0005b\u0000\u0000\u0112\u0113\u0005"+ - "r\u0000\u0000\u0113\u0114\u0005e\u0000\u0000\u0114\u0115\u0005a\u0000"+ - "\u0000\u0115\u0116\u0005k\u0000\u0000\u0116N\u0001\u0000\u0000\u0000\u0117"+ - "\u0118\u0005n\u0000\u0000\u0118\u0119\u0005e\u0000\u0000\u0119\u011a\u0005"+ - "x\u0000\u0000\u011a\u011b\u0005t\u0000\u0000\u011bP\u0001\u0000\u0000"+ - "\u0000\u011c\u011d\u0005-\u0000\u0000\u011d\u011e\u0005>\u0000\u0000\u011e"+ - "R\u0001\u0000\u0000\u0000\u011f\u0120\u0005=\u0000\u0000\u0120T\u0001"+ - "\u0000\u0000\u0000\u0121\u0122\u0005(\u0000\u0000\u0122V\u0001\u0000\u0000"+ - "\u0000\u0123\u0124\u0005)\u0000\u0000\u0124X\u0001\u0000\u0000\u0000\u0125"+ - "\u0126\u0005[\u0000\u0000\u0126Z\u0001\u0000\u0000\u0000\u0127\u0128\u0005"+ - "]\u0000\u0000\u0128\\\u0001\u0000\u0000\u0000\u0129\u012a\u0005{\u0000"+ - "\u0000\u012a^\u0001\u0000\u0000\u0000\u012b\u012c\u0005}\u0000\u0000\u012c"+ - "`\u0001\u0000\u0000\u0000\u012d\u012e\u0005,\u0000\u0000\u012eb\u0001"+ - "\u0000\u0000\u0000\u012f\u0130\u0005.\u0000\u0000\u0130d\u0001\u0000\u0000"+ - "\u0000\u0131\u0132\u0005.\u0000\u0000\u0132\u0133\u0005.\u0000\u0000\u0133"+ - "f\u0001\u0000\u0000\u0000\u0134\u0135\u0005:\u0000\u0000\u0135h\u0001"+ - "\u0000\u0000\u0000\u0136\u0137\u0005;\u0000\u0000\u0137j\u0001\u0000\u0000"+ - "\u0000\u0138\u0141\u00050\u0000\u0000\u0139\u013d\u0007\u0000\u0000\u0000"+ - "\u013a\u013c\u0007\u0001\u0000\u0000\u013b\u013a\u0001\u0000\u0000\u0000"+ - "\u013c\u013f\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000"+ - "\u013d\u013e\u0001\u0000\u0000\u0000\u013e\u0141\u0001\u0000\u0000\u0000"+ - "\u013f\u013d\u0001\u0000\u0000\u0000\u0140\u0138\u0001\u0000\u0000\u0000"+ - "\u0140\u0139\u0001\u0000\u0000\u0000\u0141l\u0001\u0000\u0000\u0000\u0142"+ - "\u0144\u0007\u0001\u0000\u0000\u0143\u0142\u0001\u0000\u0000\u0000\u0144"+ - "\u0147\u0001\u0000\u0000\u0000\u0145\u0143\u0001\u0000\u0000\u0000\u0145"+ - "\u0146\u0001\u0000\u0000\u0000\u0146\u0148\u0001\u0000\u0000\u0000\u0147"+ - "\u0145\u0001\u0000\u0000\u0000\u0148\u014a\u0005.\u0000\u0000\u0149\u014b"+ - "\u0007\u0001\u0000\u0000\u014a\u0149\u0001\u0000\u0000\u0000\u014b\u014c"+ - "\u0001\u0000\u0000\u0000\u014c\u014a\u0001\u0000\u0000\u0000\u014c\u014d"+ - "\u0001\u0000\u0000\u0000\u014dn\u0001\u0000\u0000\u0000\u014e\u0152\u0007"+ - "\u0002\u0000\u0000\u014f\u0151\u0007\u0003\u0000\u0000\u0150\u014f\u0001"+ - "\u0000\u0000\u0000\u0151\u0154\u0001\u0000\u0000\u0000\u0152\u0150\u0001"+ - "\u0000\u0000\u0000\u0152\u0153\u0001\u0000\u0000\u0000\u0153p\u0001\u0000"+ - "\u0000\u0000\u0154\u0152\u0001\u0000\u0000\u0000\u0155\u0159\u0005\"\u0000"+ - "\u0000\u0156\u0158\b\u0004\u0000\u0000\u0157\u0156\u0001\u0000\u0000\u0000"+ - "\u0158\u015b\u0001\u0000\u0000\u0000\u0159\u0157\u0001\u0000\u0000\u0000"+ - "\u0159\u015a\u0001\u0000\u0000\u0000\u015a\u015c\u0001\u0000\u0000\u0000"+ - "\u015b\u0159\u0001\u0000\u0000\u0000\u015c\u015d\u0005\"\u0000\u0000\u015d"+ - "r\u0001\u0000\u0000\u0000\u015e\u0162\u0005#\u0000\u0000\u015f\u0161\b"+ - "\u0005\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0161\u0164\u0001"+ - "\u0000\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001"+ - "\u0000\u0000\u0000\u0163\u0177\u0001\u0000\u0000\u0000\u0164\u0162\u0001"+ - "\u0000\u0000\u0000\u0165\u0166\u0005=\u0000\u0000\u0166\u0167\u0005b\u0000"+ - "\u0000\u0167\u0168\u0005e\u0000\u0000\u0168\u0169\u0005g\u0000\u0000\u0169"+ - "\u016a\u0005i\u0000\u0000\u016a\u016b\u0005n\u0000\u0000\u016b\u016f\u0001"+ - "\u0000\u0000\u0000\u016c\u016e\t\u0000\u0000\u0000\u016d\u016c\u0001\u0000"+ - "\u0000\u0000\u016e\u0171\u0001\u0000\u0000\u0000\u016f\u0170\u0001\u0000"+ - "\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000\u0170\u0172\u0001\u0000"+ - "\u0000\u0000\u0171\u016f\u0001\u0000\u0000\u0000\u0172\u0173\u0005=\u0000"+ - "\u0000\u0173\u0174\u0005e\u0000\u0000\u0174\u0175\u0005n\u0000\u0000\u0175"+ - "\u0177\u0005d\u0000\u0000\u0176\u015e\u0001\u0000\u0000\u0000\u0176\u0165"+ - "\u0001\u0000\u0000\u0000\u0177\u0178\u0001\u0000\u0000\u0000\u0178\u0179"+ - "\u00069\u0000\u0000\u0179t\u0001\u0000\u0000\u0000\u017a\u017b\u0007\u0006"+ - "\u0000\u0000\u017b\u017c\u0001\u0000\u0000\u0000\u017c\u017d\u0006:\u0000"+ - "\u0000\u017dv\u0001\u0000\u0000\u0000\n\u0000\u013d\u0140\u0145\u014c"+ - "\u0152\u0159\u0162\u016f\u0176\u0001\u0006\u0000\u0000"; + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0001\u0083\u0001\u0000\u0000\u0000\u0003\u0087\u0001"+ + "\u0000\u0000\u0000\u0005\u008b\u0001\u0000\u0000\u0000\u0007\u0090\u0001"+ + "\u0000\u0000\u0000\t\u0095\u0001\u0000\u0000\u0000\u000b\u009a\u0001\u0000"+ + "\u0000\u0000\r\u009e\u0001\u0000\u0000\u0000\u000f\u00a5\u0001\u0000\u0000"+ + "\u0000\u0011\u00a8\u0001\u0000\u0000\u0000\u0013\u00ad\u0001\u0000\u0000"+ + "\u0000\u0015\u00b4\u0001\u0000\u0000\u0000\u0017\u00bb\u0001\u0000\u0000"+ + "\u0000\u0019\u00c3\u0001\u0000\u0000\u0000\u001b\u00c9\u0001\u0000\u0000"+ + "\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d2\u0001\u0000\u0000"+ + "\u0000!\u00d5\u0001\u0000\u0000\u0000#\u00d8\u0001\u0000\u0000\u0000%"+ + "\u00dd\u0001\u0000\u0000\u0000\'\u00e3\u0001\u0000\u0000\u0000)\u00e5"+ + "\u0001\u0000\u0000\u0000+\u00e7\u0001\u0000\u0000\u0000-\u00e9\u0001\u0000"+ + "\u0000\u0000/\u00eb\u0001\u0000\u0000\u00001\u00ee\u0001\u0000\u0000\u0000"+ + "3\u00f1\u0001\u0000\u0000\u00005\u00f4\u0001\u0000\u0000\u00007\u00f7"+ + "\u0001\u0000\u0000\u00009\u00f9\u0001\u0000\u0000\u0000;\u00fb\u0001\u0000"+ + "\u0000\u0000=\u00fe\u0001\u0000\u0000\u0000?\u0101\u0001\u0000\u0000\u0000"+ + "A\u0103\u0001\u0000\u0000\u0000C\u0106\u0001\u0000\u0000\u0000E\u0109"+ + "\u0001\u0000\u0000\u0000G\u010f\u0001\u0000\u0000\u0000I\u0111\u0001\u0000"+ + "\u0000\u0000K\u0114\u0001\u0000\u0000\u0000M\u0119\u0001\u0000\u0000\u0000"+ + "O\u011f\u0001\u0000\u0000\u0000Q\u0125\u0001\u0000\u0000\u0000S\u012a"+ + "\u0001\u0000\u0000\u0000U\u012d\u0001\u0000\u0000\u0000W\u0130\u0001\u0000"+ + "\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0136\u0001\u0000\u0000\u0000"+ + "]\u0139\u0001\u0000\u0000\u0000_\u013c\u0001\u0000\u0000\u0000a\u013e"+ + "\u0001\u0000\u0000\u0000c\u0140\u0001\u0000\u0000\u0000e\u0142\u0001\u0000"+ + "\u0000\u0000g\u0144\u0001\u0000\u0000\u0000i\u0146\u0001\u0000\u0000\u0000"+ + "k\u0148\u0001\u0000\u0000\u0000m\u014a\u0001\u0000\u0000\u0000o\u014c"+ + "\u0001\u0000\u0000\u0000q\u014e\u0001\u0000\u0000\u0000s\u0151\u0001\u0000"+ + "\u0000\u0000u\u0153\u0001\u0000\u0000\u0000w\u015d\u0001\u0000\u0000\u0000"+ + "y\u0162\u0001\u0000\u0000\u0000{\u016b\u0001\u0000\u0000\u0000}\u0172"+ + "\u0001\u0000\u0000\u0000\u007f\u0193\u0001\u0000\u0000\u0000\u0081\u0197"+ + "\u0001\u0000\u0000\u0000\u0083\u0084\u0005d\u0000\u0000\u0084\u0085\u0005"+ + "e\u0000\u0000\u0085\u0086\u0005f\u0000\u0000\u0086\u0002\u0001\u0000\u0000"+ + "\u0000\u0087\u0088\u0005e\u0000\u0000\u0088\u0089\u0005n\u0000\u0000\u0089"+ + "\u008a\u0005d\u0000\u0000\u008a\u0004\u0001\u0000\u0000\u0000\u008b\u008c"+ + "\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005i"+ + "\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0006\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0005p\u0000\u0000\u0091\u0092\u0005u\u0000\u0000\u0092"+ + "\u0093\u0005t\u0000\u0000\u0093\u0094\u0005s\u0000\u0000\u0094\b\u0001"+ + "\u0000\u0000\u0000\u0095\u0096\u0005p\u0000\u0000\u0096\u0097\u0005u\u0000"+ + "\u0000\u0097\u0098\u0005s\u0000\u0000\u0098\u0099\u0005h\u0000\u0000\u0099"+ + "\n\u0001\u0000\u0000\u0000\u009a\u009b\u0005l\u0000\u0000\u009b\u009c"+ + "\u0005e\u0000\u0000\u009c\u009d\u0005n\u0000\u0000\u009d\f\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0005r\u0000\u0000\u009f\u00a0\u0005e\u0000\u0000"+ + "\u00a0\u00a1\u0005t\u0000\u0000\u00a1\u00a2\u0005u\u0000\u0000\u00a2\u00a3"+ + "\u0005r\u0000\u0000\u00a3\u00a4\u0005n\u0000\u0000\u00a4\u000e\u0001\u0000"+ + "\u0000\u0000\u00a5\u00a6\u0005i\u0000\u0000\u00a6\u00a7\u0005f\u0000\u0000"+ + "\u00a7\u0010\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005e\u0000\u0000\u00a9"+ + "\u00aa\u0005l\u0000\u0000\u00aa\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005"+ + "e\u0000\u0000\u00ac\u0012\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005e\u0000"+ + "\u0000\u00ae\u00af\u0005l\u0000\u0000\u00af\u00b0\u0005s\u0000\u0000\u00b0"+ + "\u00b1\u0005e\u0000\u0000\u00b1\u00b2\u0005i\u0000\u0000\u00b2\u00b3\u0005"+ + "f\u0000\u0000\u00b3\u0014\u0001\u0000\u0000\u0000\u00b4\u00b5\u0005m\u0000"+ + "\u0000\u00b5\u00b6\u0005e\u0000\u0000\u00b6\u00b7\u0005t\u0000\u0000\u00b7"+ + "\u00b8\u0005h\u0000\u0000\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005"+ + "d\u0000\u0000\u00ba\u0016\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005p\u0000"+ + "\u0000\u00bc\u00bd\u0005a\u0000\u0000\u00bd\u00be\u0005t\u0000\u0000\u00be"+ + "\u00bf\u0005t\u0000\u0000\u00bf\u00c0\u0005e\u0000\u0000\u00c0\u00c1\u0005"+ + "r\u0000\u0000\u00c1\u00c2\u0005n\u0000\u0000\u00c2\u0018\u0001\u0000\u0000"+ + "\u0000\u00c3\u00c4\u0005m\u0000\u0000\u00c4\u00c5\u0005a\u0000\u0000\u00c5"+ + "\u00c6\u0005t\u0000\u0000\u00c6\u00c7\u0005c\u0000\u0000\u00c7\u00c8\u0005"+ + "h\u0000\u0000\u00c8\u001a\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005l\u0000"+ + "\u0000\u00ca\u00cb\u0005o\u0000\u0000\u00cb\u00cc\u0005o\u0000\u0000\u00cc"+ + "\u00cd\u0005p\u0000\u0000\u00cd\u001c\u0001\u0000\u0000\u0000\u00ce\u00cf"+ + "\u0005f\u0000\u0000\u00cf\u00d0\u0005o\u0000\u0000\u00d0\u00d1\u0005r"+ + "\u0000\u0000\u00d1\u001e\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005i\u0000"+ + "\u0000\u00d3\u00d4\u0005n\u0000\u0000\u00d4 \u0001\u0000\u0000\u0000\u00d5"+ + "\u00d6\u0005d\u0000\u0000\u00d6\u00d7\u0005o\u0000\u0000\u00d7\"\u0001"+ + "\u0000\u0000\u0000\u00d8\u00d9\u0005c\u0000\u0000\u00d9\u00da\u0005h\u0000"+ + "\u0000\u00da\u00db\u0005o\u0000\u0000\u00db\u00dc\u0005p\u0000\u0000\u00dc"+ + "$\u0001\u0000\u0000\u0000\u00dd\u00de\u0005c\u0000\u0000\u00de\u00df\u0005"+ + "h\u0000\u0000\u00df\u00e0\u0005o\u0000\u0000\u00e0\u00e1\u0005m\u0000"+ + "\u0000\u00e1\u00e2\u0005p\u0000\u0000\u00e2&\u0001\u0000\u0000\u0000\u00e3"+ + "\u00e4\u0005+\u0000\u0000\u00e4(\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005"+ + "-\u0000\u0000\u00e6*\u0001\u0000\u0000\u0000\u00e7\u00e8\u0005*\u0000"+ + "\u0000\u00e8,\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea"+ + ".\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005=\u0000\u0000\u00ec\u00ed\u0005"+ + "=\u0000\u0000\u00ed0\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005!\u0000"+ + "\u0000\u00ef\u00f0\u0005=\u0000\u0000\u00f02\u0001\u0000\u0000\u0000\u00f1"+ + "\u00f2\u0005<\u0000\u0000\u00f2\u00f3\u0005=\u0000\u0000\u00f34\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0005>\u0000\u0000\u00f5\u00f6\u0005=\u0000"+ + "\u0000\u00f66\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005>\u0000\u0000\u00f8"+ + "8\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005<\u0000\u0000\u00fa:\u0001"+ + "\u0000\u0000\u0000\u00fb\u00fc\u0005&\u0000\u0000\u00fc\u00fd\u0005&\u0000"+ + "\u0000\u00fd<\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005|\u0000\u0000\u00ff"+ + "\u0100\u0005|\u0000\u0000\u0100>\u0001\u0000\u0000\u0000\u0101\u0102\u0005"+ + "!\u0000\u0000\u0102@\u0001\u0000\u0000\u0000\u0103\u0104\u0005+\u0000"+ + "\u0000\u0104\u0105\u0005+\u0000\u0000\u0105B\u0001\u0000\u0000\u0000\u0106"+ + "\u0107\u0005-\u0000\u0000\u0107\u0108\u0005-\u0000\u0000\u0108D\u0001"+ + "\u0000\u0000\u0000\u0109\u010a\u0005 \u0000\u0000\u010a\u010b\u0005 \u0000"+ + "\u0000\u010b\u010c\u0005 \u0000\u0000\u010c\u010d\u0005 \u0000\u0000\u010d"+ + "\u010e\u0005|\u0000\u0000\u010eF\u0001\u0000\u0000\u0000\u010f\u0110\u0005"+ + "|\u0000\u0000\u0110H\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000"+ + "\u0000\u0112\u0113\u0005<\u0000\u0000\u0113J\u0001\u0000\u0000\u0000\u0114"+ + "\u0115\u0005t\u0000\u0000\u0115\u0116\u0005r\u0000\u0000\u0116\u0117\u0005"+ + "u\u0000\u0000\u0117\u0118\u0005e\u0000\u0000\u0118L\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005f\u0000\u0000\u011a\u011b\u0005a\u0000\u0000\u011b"+ + "\u011c\u0005l\u0000\u0000\u011c\u011d\u0005s\u0000\u0000\u011d\u011e\u0005"+ + "e\u0000\u0000\u011eN\u0001\u0000\u0000\u0000\u011f\u0120\u0005b\u0000"+ + "\u0000\u0120\u0121\u0005r\u0000\u0000\u0121\u0122\u0005e\u0000\u0000\u0122"+ + "\u0123\u0005a\u0000\u0000\u0123\u0124\u0005k\u0000\u0000\u0124P\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005n\u0000\u0000\u0126\u0127\u0005e\u0000"+ + "\u0000\u0127\u0128\u0005x\u0000\u0000\u0128\u0129\u0005t\u0000\u0000\u0129"+ + "R\u0001\u0000\u0000\u0000\u012a\u012b\u0005-\u0000\u0000\u012b\u012c\u0005"+ + ">\u0000\u0000\u012cT\u0001\u0000\u0000\u0000\u012d\u012e\u0005+\u0000"+ + "\u0000\u012e\u012f\u0005=\u0000\u0000\u012fV\u0001\u0000\u0000\u0000\u0130"+ + "\u0131\u0005-\u0000\u0000\u0131\u0132\u0005=\u0000\u0000\u0132X\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0005*\u0000\u0000\u0134\u0135\u0005=\u0000"+ + "\u0000\u0135Z\u0001\u0000\u0000\u0000\u0136\u0137\u0005/\u0000\u0000\u0137"+ + "\u0138\u0005=\u0000\u0000\u0138\\\u0001\u0000\u0000\u0000\u0139\u013a"+ + "\u0005%\u0000\u0000\u013a\u013b\u0005=\u0000\u0000\u013b^\u0001\u0000"+ + "\u0000\u0000\u013c\u013d\u0005=\u0000\u0000\u013d`\u0001\u0000\u0000\u0000"+ + "\u013e\u013f\u0005(\u0000\u0000\u013fb\u0001\u0000\u0000\u0000\u0140\u0141"+ + "\u0005)\u0000\u0000\u0141d\u0001\u0000\u0000\u0000\u0142\u0143\u0005["+ + "\u0000\u0000\u0143f\u0001\u0000\u0000\u0000\u0144\u0145\u0005]\u0000\u0000"+ + "\u0145h\u0001\u0000\u0000\u0000\u0146\u0147\u0005{\u0000\u0000\u0147j"+ + "\u0001\u0000\u0000\u0000\u0148\u0149\u0005}\u0000\u0000\u0149l\u0001\u0000"+ + "\u0000\u0000\u014a\u014b\u0005,\u0000\u0000\u014bn\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005.\u0000\u0000\u014dp\u0001\u0000\u0000\u0000\u014e\u014f"+ + "\u0005.\u0000\u0000\u014f\u0150\u0005.\u0000\u0000\u0150r\u0001\u0000"+ + "\u0000\u0000\u0151\u0152\u0005:\u0000\u0000\u0152t\u0001\u0000\u0000\u0000"+ + "\u0153\u0154\u0005;\u0000\u0000\u0154v\u0001\u0000\u0000\u0000\u0155\u015e"+ + "\u00050\u0000\u0000\u0156\u015a\u0007\u0000\u0000\u0000\u0157\u0159\u0007"+ + "\u0001\u0000\u0000\u0158\u0157\u0001\u0000\u0000\u0000\u0159\u015c\u0001"+ + "\u0000\u0000\u0000\u015a\u0158\u0001\u0000\u0000\u0000\u015a\u015b\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015d\u0155\u0001\u0000\u0000\u0000\u015d\u0156\u0001"+ + "\u0000\u0000\u0000\u015ex\u0001\u0000\u0000\u0000\u015f\u0161\u0007\u0001"+ + "\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0161\u0164\u0001\u0000"+ + "\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001\u0000"+ + "\u0000\u0000\u0163\u0165\u0001\u0000\u0000\u0000\u0164\u0162\u0001\u0000"+ + "\u0000\u0000\u0165\u0167\u0005.\u0000\u0000\u0166\u0168\u0007\u0001\u0000"+ + "\u0000\u0167\u0166\u0001\u0000\u0000\u0000\u0168\u0169\u0001\u0000\u0000"+ + "\u0000\u0169\u0167\u0001\u0000\u0000\u0000\u0169\u016a\u0001\u0000\u0000"+ + "\u0000\u016az\u0001\u0000\u0000\u0000\u016b\u016f\u0007\u0002\u0000\u0000"+ + "\u016c\u016e\u0007\u0003\u0000\u0000\u016d\u016c\u0001\u0000\u0000\u0000"+ + "\u016e\u0171\u0001\u0000\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000"+ + "\u016f\u0170\u0001\u0000\u0000\u0000\u0170|\u0001\u0000\u0000\u0000\u0171"+ + "\u016f\u0001\u0000\u0000\u0000\u0172\u0176\u0005\"\u0000\u0000\u0173\u0175"+ + "\b\u0004\u0000\u0000\u0174\u0173\u0001\u0000\u0000\u0000\u0175\u0178\u0001"+ + "\u0000\u0000\u0000\u0176\u0174\u0001\u0000\u0000\u0000\u0176\u0177\u0001"+ + "\u0000\u0000\u0000\u0177\u0179\u0001\u0000\u0000\u0000\u0178\u0176\u0001"+ + "\u0000\u0000\u0000\u0179\u017a\u0005\"\u0000\u0000\u017a~\u0001\u0000"+ + "\u0000\u0000\u017b\u017f\u0005#\u0000\u0000\u017c\u017e\b\u0005\u0000"+ + "\u0000\u017d\u017c\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000\u0000"+ + "\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000"+ + "\u0000\u0180\u0194\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000"+ + "\u0000\u0182\u0183\u0005=\u0000\u0000\u0183\u0184\u0005b\u0000\u0000\u0184"+ + "\u0185\u0005e\u0000\u0000\u0185\u0186\u0005g\u0000\u0000\u0186\u0187\u0005"+ + "i\u0000\u0000\u0187\u0188\u0005n\u0000\u0000\u0188\u018c\u0001\u0000\u0000"+ + "\u0000\u0189\u018b\t\u0000\u0000\u0000\u018a\u0189\u0001\u0000\u0000\u0000"+ + "\u018b\u018e\u0001\u0000\u0000\u0000\u018c\u018d\u0001\u0000\u0000\u0000"+ + "\u018c\u018a\u0001\u0000\u0000\u0000\u018d\u018f\u0001\u0000\u0000\u0000"+ + "\u018e\u018c\u0001\u0000\u0000\u0000\u018f\u0190\u0005=\u0000\u0000\u0190"+ + "\u0191\u0005e\u0000\u0000\u0191\u0192\u0005n\u0000\u0000\u0192\u0194\u0005"+ + "d\u0000\u0000\u0193\u017b\u0001\u0000\u0000\u0000\u0193\u0182\u0001\u0000"+ + "\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u0196\u0006?\u0000"+ + "\u0000\u0196\u0080\u0001\u0000\u0000\u0000\u0197\u0198\u0007\u0006\u0000"+ + "\u0000\u0198\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0006@\u0000\u0000"+ + "\u019a\u0082\u0001\u0000\u0000\u0000\n\u0000\u015a\u015d\u0162\u0169\u016f"+ + "\u0176\u017f\u018c\u0193\u0001\u0006\u0000\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.tokens b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.tokens index 8deafa5..c103028 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.tokens +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftLexer.tokens @@ -23,8 +23,8 @@ MULT=22 DIVIDE=23 EQUAL=24 NOT_EQUAL=25 -IS_NOT=26 -IS=27 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 GREATER_THAN=28 LESS_THAN=29 AND=30 @@ -32,31 +32,37 @@ OR=31 NOT=32 INCREMENT=33 DECREMENT=34 -SEPARATOR=35 -APPEND=36 -TRUE=37 -FALSE=38 -BREAK=39 -NEXT=40 -ARROW=41 -ASSIGN=42 -LPAR=43 -RPAR=44 -LBRACK=45 -RBRACK=46 -LBRACE=47 -RBRACE=48 -COMMA=49 -DOT=50 -DOUBLEDOT=51 -COLON=52 -SEMICOLLON=53 -INT_VALUE=54 -FLOAT_VALUE=55 -IDENTIFIER=56 -STRING_VALUE=57 -COMMENT=58 -WS=59 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 'def'=1 'end'=2 'main'=3 @@ -82,8 +88,8 @@ WS=59 '/'=23 '=='=24 '!='=25 -'is not'=26 -'is'=27 +'<='=26 +'>='=27 '>'=28 '<'=29 '&&'=30 @@ -91,22 +97,28 @@ WS=59 '!'=32 '++'=33 '--'=34 -'|'=35 -'<<'=36 -'true'=37 -'false'=38 -'break'=39 -'next'=40 -'->'=41 -'='=42 -'('=43 -')'=44 -'['=45 -']'=46 -'{'=47 -'}'=48 -','=49 -'.'=50 -'..'=51 -':'=52 -';'=53 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftListener.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftListener.java index 6f566d2..0cf4902 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftListener.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftListener.java @@ -247,6 +247,16 @@ public interface FunctionCraftListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); /** * Enter a parse tree produced by {@link FunctionCraftParser#relationalExpression}. * @param ctx the parse tree @@ -287,16 +297,6 @@ public interface FunctionCraftListener extends ParseTreeListener { * @param ctx the parse tree */ void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); - /** - * Enter a parse tree produced by {@link FunctionCraftParser#appendExpression}. - * @param ctx the parse tree - */ - void enterAppendExpression(FunctionCraftParser.AppendExpressionContext ctx); - /** - * Exit a parse tree produced by {@link FunctionCraftParser#appendExpression}. - * @param ctx the parse tree - */ - void exitAppendExpression(FunctionCraftParser.AppendExpressionContext ctx); /** * Enter a parse tree produced by {@link FunctionCraftParser#accessExpression}. * @param ctx the parse tree diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftParser.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftParser.java index e509242..22e086e 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftParser.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftParser.java @@ -20,12 +20,13 @@ public class FunctionCraftParser extends Parser { DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, - IS_NOT=26, IS=27, GREATER_THAN=28, LESS_THAN=29, AND=30, OR=31, NOT=32, - INCREMENT=33, DECREMENT=34, SEPARATOR=35, APPEND=36, TRUE=37, FALSE=38, - BREAK=39, NEXT=40, ARROW=41, ASSIGN=42, LPAR=43, RPAR=44, LBRACK=45, RBRACK=46, - LBRACE=47, RBRACE=48, COMMA=49, DOT=50, DOUBLEDOT=51, COLON=52, SEMICOLLON=53, - INT_VALUE=54, FLOAT_VALUE=55, IDENTIFIER=56, STRING_VALUE=57, COMMENT=58, - WS=59; + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; public static final int RULE_program = 0, RULE_functionDeclaration = 1, RULE_functionArgumentsDeclaration = 2, RULE_patternMatching = 3, RULE_main = 4, RULE_functionArguments = 5, RULE_returnStatement = 6, @@ -33,9 +34,9 @@ public class FunctionCraftParser extends Parser { RULE_pushStatement = 11, RULE_loopDoStatement = 12, RULE_loopBody = 13, RULE_forStatement = 14, RULE_range = 15, RULE_filterStatement = 16, RULE_matchPatternStatement = 17, RULE_chopAndChompStatement = 18, RULE_assignment = 19, RULE_accessList = 20, - RULE_statement = 21, RULE_body = 22, RULE_expression = 23, RULE_relationalExpression = 24, - RULE_additiveExpression = 25, RULE_multiplicativeExpression = 26, RULE_preUnaryExpression = 27, - RULE_appendExpression = 28, RULE_accessExpression = 29, RULE_otherExpression = 30, + RULE_statement = 21, RULE_body = 22, RULE_expression = 23, RULE_eqaulityExpression = 24, + RULE_relationalExpression = 25, RULE_additiveExpression = 26, RULE_multiplicativeExpression = 27, + RULE_preUnaryExpression = 28, RULE_accessExpression = 29, RULE_otherExpression = 30, RULE_lambdaFunction = 31, RULE_values = 32, RULE_listValue = 33, RULE_boolValue = 34, RULE_functionPointer = 35; private static String[] makeRuleNames() { @@ -45,9 +46,10 @@ private static String[] makeRuleNames() { "putsStatement", "lenStatement", "pushStatement", "loopDoStatement", "loopBody", "forStatement", "range", "filterStatement", "matchPatternStatement", "chopAndChompStatement", "assignment", "accessList", "statement", "body", - "expression", "relationalExpression", "additiveExpression", "multiplicativeExpression", - "preUnaryExpression", "appendExpression", "accessExpression", "otherExpression", - "lambdaFunction", "values", "listValue", "boolValue", "functionPointer" + "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", + "multiplicativeExpression", "preUnaryExpression", "accessExpression", + "otherExpression", "lambdaFunction", "values", "listValue", "boolValue", + "functionPointer" }; } public static final String[] ruleNames = makeRuleNames(); @@ -57,10 +59,10 @@ private static String[] makeLiteralNames() { null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", - "'=='", "'!='", "'is not'", "'is'", "'>'", "'<'", "'&&'", "'||'", "'!'", - "'++'", "'--'", "'|'", "'<<'", "'true'", "'false'", "'break'", "'next'", - "'->'", "'='", "'('", "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", - "'..'", "':'", "';'" + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -68,12 +70,14 @@ private static String[] makeSymbolicNames() { return new String[] { null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", - "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "IS_NOT", - "IS", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", "INCREMENT", "DECREMENT", - "SEPARATOR", "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "ASSIGN", - "LPAR", "RPAR", "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", - "DOUBLEDOT", "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", - "STRING_VALUE", "COMMENT", "WS" + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -368,7 +372,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() setState(100); match(ASSIGN); setState(101); - expression(); + expression(0); setState(108); _errHandler.sync(this); _la = _input.LA(1); @@ -382,7 +386,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() setState(104); match(ASSIGN); setState(105); - expression(); + expression(0); } } setState(110); @@ -423,9 +427,9 @@ public TerminalNode IDENTIFIER(int i) { public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } - public List SEPARATOR() { return getTokens(FunctionCraftParser.SEPARATOR); } - public TerminalNode SEPARATOR(int i) { - return getToken(FunctionCraftParser.SEPARATOR, i); + public List PATTERN_MATCHING_SEPARATOR() { return getTokens(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR); } + public TerminalNode PATTERN_MATCHING_SEPARATOR(int i) { + return getToken(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR, i); } public List condition() { return getRuleContexts(ConditionContext.class); @@ -483,17 +487,17 @@ public final PatternMatchingContext patternMatching() throws RecognitionExceptio setState(132); _errHandler.sync(this); _la = _input.LA(1); - while (_la==SEPARATOR) { + while (_la==PATTERN_MATCHING_SEPARATOR) { { { setState(125); - match(SEPARATOR); + match(PATTERN_MATCHING_SEPARATOR); setState(126); condition(); setState(127); match(ASSIGN); setState(128); - expression(); + expression(0); } } setState(134); @@ -620,7 +624,7 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce case 1: { setState(145); - expression(); + expression(0); setState(150); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); @@ -631,7 +635,7 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce setState(146); match(COMMA); setState(147); - expression(); + expression(0); } } } @@ -694,10 +698,10 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio setState(158); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270262599515113536L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { setState(157); - expression(); + expression(0); } } @@ -884,7 +888,7 @@ public final ConditionContext condition() throws RecognitionException { setState(183); match(LPAR); setState(184); - expression(); + expression(0); setState(185); match(RPAR); setState(196); @@ -993,7 +997,7 @@ public final PutsStatementContext putsStatement() throws RecognitionException { setState(206); match(LPAR); setState(207); - expression(); + expression(0); setState(208); match(RPAR); setState(209); @@ -1050,7 +1054,7 @@ public final LenStatementContext lenStatement() throws RecognitionException { setState(213); match(LPAR); setState(214); - expression(); + expression(0); setState(215); match(RPAR); } @@ -1110,11 +1114,11 @@ public final PushStatementContext pushStatement() throws RecognitionException { setState(219); match(LPAR); setState(220); - expression(); + expression(0); setState(221); match(COMMA); setState(222); - expression(); + expression(0); setState(223); match(RPAR); setState(224); @@ -1249,7 +1253,7 @@ public final LoopBodyContext loopBody() throws RecognitionException { setState(249); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270264248782604656L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { { setState(247); _errHandler.sync(this); @@ -1469,11 +1473,11 @@ public final RangeContext range() throws RecognitionException { setState(263); match(LPAR); setState(264); - expression(); + expression(0); setState(265); match(DOUBLEDOT); setState(266); - expression(); + expression(0); setState(267); match(RPAR); } @@ -1487,7 +1491,7 @@ public final RangeContext range() throws RecognitionException { match(LBRACK); { setState(270); - expression(); + expression(0); setState(275); _errHandler.sync(this); _la = _input.LA(1); @@ -1497,7 +1501,7 @@ public final RangeContext range() throws RecognitionException { setState(271); match(COMMA); setState(272); - expression(); + expression(0); } } setState(277); @@ -1582,7 +1586,7 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio setState(284); match(LBRACK); setState(285); - expression(); + expression(0); setState(286); match(SEPARATOR); setState(287); @@ -1594,7 +1598,7 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio setState(290); match(COMMA); setState(291); - expression(); + expression(0); setState(296); _errHandler.sync(this); _la = _input.LA(1); @@ -1604,7 +1608,7 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio setState(292); match(COMMA); setState(293); - expression(); + expression(0); } } setState(298); @@ -1671,7 +1675,7 @@ public final MatchPatternStatementContext matchPatternStatement() throws Recogni setState(305); match(LPAR); setState(306); - expression(); + expression(0); setState(307); match(RPAR); } @@ -1744,7 +1748,7 @@ public final ChopAndChompStatementContext chopAndChompStatement() throws Recogni setState(315); match(LPAR); setState(316); - expression(); + expression(0); setState(317); match(RPAR); } @@ -1764,11 +1768,16 @@ public final ChopAndChompStatementContext chopAndChompStatement() throws Recogni public static class AssignmentContext extends ParserRuleContext { public Token IDENTIFIER; public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } - public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } + public TerminalNode PLUS_ASSIGN() { return getToken(FunctionCraftParser.PLUS_ASSIGN, 0); } + public TerminalNode MINUS_ASSIGN() { return getToken(FunctionCraftParser.MINUS_ASSIGN, 0); } + public TerminalNode DIVIDE_ASSIGN() { return getToken(FunctionCraftParser.DIVIDE_ASSIGN, 0); } + public TerminalNode MULT_ASSIGN() { return getToken(FunctionCraftParser.MULT_ASSIGN, 0); } + public TerminalNode MOD_ASSIGN() { return getToken(FunctionCraftParser.MOD_ASSIGN, 0); } public AccessListContext accessList() { return getRuleContext(AccessListContext.class,0); } @@ -1812,9 +1821,17 @@ public final AssignmentContext assignment() throws RecognitionException { } setState(324); - match(ASSIGN); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 554153860399104L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } setState(325); - expression(); + expression(0); setState(326); match(SEMICOLLON); } @@ -1865,7 +1882,7 @@ public final AccessListContext accessList() throws RecognitionException { setState(328); match(LBRACK); setState(329); - expression(); + expression(0); setState(330); match(RBRACK); } @@ -1970,7 +1987,7 @@ public final StatementContext statement() throws RecognitionException { enterOuterAlt(_localctx, 6); { setState(337); - expression(); + expression(0); setState(338); match(SEMICOLLON); } @@ -2035,7 +2052,7 @@ public final BodyContext body() throws RecognitionException { setState(346); _errHandler.sync(this); _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270262599515162992L) != 0)) { + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { { { setState(343); @@ -2071,29 +2088,14 @@ public final BodyContext body() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class ExpressionContext extends ParserRuleContext { - public Token op; - public List relationalExpression() { - return getRuleContexts(RelationalExpressionContext.class); - } - public RelationalExpressionContext relationalExpression(int i) { - return getRuleContext(RelationalExpressionContext.class,i); - } - public List EQUAL() { return getTokens(FunctionCraftParser.EQUAL); } - public TerminalNode EQUAL(int i) { - return getToken(FunctionCraftParser.EQUAL, i); - } - public List NOT_EQUAL() { return getTokens(FunctionCraftParser.NOT_EQUAL); } - public TerminalNode NOT_EQUAL(int i) { - return getToken(FunctionCraftParser.NOT_EQUAL, i); - } - public List IS_NOT() { return getTokens(FunctionCraftParser.IS_NOT); } - public TerminalNode IS_NOT(int i) { - return getToken(FunctionCraftParser.IS_NOT, i); + public Token APPEND; + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); } - public List IS() { return getTokens(FunctionCraftParser.IS); } - public TerminalNode IS(int i) { - return getToken(FunctionCraftParser.IS, i); + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); } + public TerminalNode APPEND() { return getToken(FunctionCraftParser.APPEND, 0); } public ExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2114,60 +2116,153 @@ public T accept(ParseTreeVisitor visitor) { } public final ExpressionContext expression() throws RecognitionException { - ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_expression); + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 46; + enterRecursionRule(_localctx, 46, RULE_expression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(352); - relationalExpression(); - setState(364); + { + setState(353); + eqaulityExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(362); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,30,_ctx); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; { { + _localctx = new ExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(355); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(356); + ((ExpressionContext)_localctx).APPEND = match(APPEND); setState(357); + eqaulityExpression(0); + System.out.println("Operator: " + (((ExpressionContext)_localctx).APPEND!=null?((ExpressionContext)_localctx).APPEND.getText():null)); + } + } + } + setState(364); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EqaulityExpressionContext extends ParserRuleContext { + public Token op; + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public TerminalNode EQUAL() { return getToken(FunctionCraftParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(FunctionCraftParser.NOT_EQUAL, 0); } + public EqaulityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_eqaulityExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterEqaulityExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitEqaulityExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitEqaulityExpression(this); + else return visitor.visitChildren(this); + } + } + + public final EqaulityExpressionContext eqaulityExpression() throws RecognitionException { + return eqaulityExpression(0); + } + + private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, _parentState); + EqaulityExpressionContext _prevctx = _localctx; + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_eqaulityExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(366); + relationalExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(378); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new EqaulityExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_eqaulityExpression); + setState(368); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(371); _errHandler.sync(this); switch (_input.LA(1)) { case EQUAL: { - setState(353); - ((ExpressionContext)_localctx).op = match(EQUAL); + setState(369); + ((EqaulityExpressionContext)_localctx).op = match(EQUAL); } break; case NOT_EQUAL: { - setState(354); - ((ExpressionContext)_localctx).op = match(NOT_EQUAL); - } - break; - case IS_NOT: - { - setState(355); - ((ExpressionContext)_localctx).op = match(IS_NOT); - } - break; - case IS: - { - setState(356); - ((ExpressionContext)_localctx).op = match(IS); + setState(370); + ((EqaulityExpressionContext)_localctx).op = match(NOT_EQUAL); } break; default: throw new NoViableAltException(this); } - setState(359); - relationalExpression(); - System.out.println("Operator: " + (((ExpressionContext)_localctx).op!=null?((ExpressionContext)_localctx).op.getText():null)); + setState(373); + relationalExpression(0); + System.out.println("Operator: " + (((EqaulityExpressionContext)_localctx).op!=null?((EqaulityExpressionContext)_localctx).op.getText():null)); } } } - setState(366); + setState(380); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,30,_ctx); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); } } } @@ -2177,7 +2272,7 @@ public final ExpressionContext expression() throws RecognitionException { _errHandler.recover(this, re); } finally { - exitRule(); + unrollRecursionContexts(_parentctx); } return _localctx; } @@ -2185,20 +2280,16 @@ public final ExpressionContext expression() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class RelationalExpressionContext extends ParserRuleContext { public Token op; - public List additiveExpression() { - return getRuleContexts(AdditiveExpressionContext.class); + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); } - public AdditiveExpressionContext additiveExpression(int i) { - return getRuleContext(AdditiveExpressionContext.class,i); - } - public List GREATER_THAN() { return getTokens(FunctionCraftParser.GREATER_THAN); } - public TerminalNode GREATER_THAN(int i) { - return getToken(FunctionCraftParser.GREATER_THAN, i); - } - public List LESS_THAN() { return getTokens(FunctionCraftParser.LESS_THAN); } - public TerminalNode LESS_THAN(int i) { - return getToken(FunctionCraftParser.LESS_THAN, i); + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } + public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } + public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } + public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2219,48 +2310,77 @@ public T accept(ParseTreeVisitor visitor) { } public final RelationalExpressionContext relationalExpression() throws RecognitionException { - RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_relationalExpression); + return relationalExpression(0); + } + + private RelationalExpressionContext relationalExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); + RelationalExpressionContext _prevctx = _localctx; + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_relationalExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(367); - additiveExpression(); - setState(377); + { + setState(382); + additiveExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(396); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,32,_ctx); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; { { - setState(370); + _localctx = new RelationalExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); + setState(384); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(389); _errHandler.sync(this); switch (_input.LA(1)) { case GREATER_THAN: { - setState(368); + setState(385); ((RelationalExpressionContext)_localctx).op = match(GREATER_THAN); } break; case LESS_THAN: { - setState(369); + setState(386); ((RelationalExpressionContext)_localctx).op = match(LESS_THAN); } break; + case LESS_EQUAL_THAN: + { + setState(387); + ((RelationalExpressionContext)_localctx).op = match(LESS_EQUAL_THAN); + } + break; + case GREATER_EQUAL_THAN: + { + setState(388); + ((RelationalExpressionContext)_localctx).op = match(GREATER_EQUAL_THAN); + } + break; default: throw new NoViableAltException(this); } - setState(372); - additiveExpression(); + setState(391); + additiveExpression(0); System.out.println("Operator: " + (((RelationalExpressionContext)_localctx).op!=null?((RelationalExpressionContext)_localctx).op.getText():null)); } } } - setState(379); + setState(398); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,32,_ctx); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); } } } @@ -2270,7 +2390,7 @@ public final RelationalExpressionContext relationalExpression() throws Recogniti _errHandler.recover(this, re); } finally { - exitRule(); + unrollRecursionContexts(_parentctx); } return _localctx; } @@ -2278,20 +2398,14 @@ public final RelationalExpressionContext relationalExpression() throws Recogniti @SuppressWarnings("CheckReturnValue") public static class AdditiveExpressionContext extends ParserRuleContext { public Token op; - public List multiplicativeExpression() { - return getRuleContexts(MultiplicativeExpressionContext.class); - } - public MultiplicativeExpressionContext multiplicativeExpression(int i) { - return getRuleContext(MultiplicativeExpressionContext.class,i); + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); } - public List PLUS() { return getTokens(FunctionCraftParser.PLUS); } - public TerminalNode PLUS(int i) { - return getToken(FunctionCraftParser.PLUS, i); - } - public List MINUS() { return getTokens(FunctionCraftParser.MINUS); } - public TerminalNode MINUS(int i) { - return getToken(FunctionCraftParser.MINUS, i); + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); } + public TerminalNode PLUS() { return getToken(FunctionCraftParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2312,48 +2426,65 @@ public T accept(ParseTreeVisitor visitor) { } public final AdditiveExpressionContext additiveExpression() throws RecognitionException { - AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_additiveExpression); + return additiveExpression(0); + } + + private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); + AdditiveExpressionContext _prevctx = _localctx; + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_additiveExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(380); - multiplicativeExpression(); - setState(390); + { + setState(400); + multiplicativeExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(412); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; { { - setState(383); + _localctx = new AdditiveExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); + setState(402); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(405); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: { - setState(381); + setState(403); ((AdditiveExpressionContext)_localctx).op = match(PLUS); } break; case MINUS: { - setState(382); + setState(404); ((AdditiveExpressionContext)_localctx).op = match(MINUS); } break; default: throw new NoViableAltException(this); } - setState(385); - multiplicativeExpression(); + setState(407); + multiplicativeExpression(0); System.out.println("Operator: " + (((AdditiveExpressionContext)_localctx).op!=null?((AdditiveExpressionContext)_localctx).op.getText():null)); } } } - setState(392); + setState(414); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } } } @@ -2363,7 +2494,7 @@ public final AdditiveExpressionContext additiveExpression() throws RecognitionEx _errHandler.recover(this, re); } finally { - exitRule(); + unrollRecursionContexts(_parentctx); } return _localctx; } @@ -2371,20 +2502,14 @@ public final AdditiveExpressionContext additiveExpression() throws RecognitionEx @SuppressWarnings("CheckReturnValue") public static class MultiplicativeExpressionContext extends ParserRuleContext { public Token op; - public List preUnaryExpression() { - return getRuleContexts(PreUnaryExpressionContext.class); - } - public PreUnaryExpressionContext preUnaryExpression(int i) { - return getRuleContext(PreUnaryExpressionContext.class,i); - } - public List MULT() { return getTokens(FunctionCraftParser.MULT); } - public TerminalNode MULT(int i) { - return getToken(FunctionCraftParser.MULT, i); + public PreUnaryExpressionContext preUnaryExpression() { + return getRuleContext(PreUnaryExpressionContext.class,0); } - public List DIVIDE() { return getTokens(FunctionCraftParser.DIVIDE); } - public TerminalNode DIVIDE(int i) { - return getToken(FunctionCraftParser.DIVIDE, i); + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); } + public TerminalNode MULT() { return getToken(FunctionCraftParser.MULT, 0); } + public TerminalNode DIVIDE() { return getToken(FunctionCraftParser.DIVIDE, 0); } public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2405,48 +2530,65 @@ public T accept(ParseTreeVisitor visitor) { } public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { - MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_multiplicativeExpression); + return multiplicativeExpression(0); + } + + private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); + MultiplicativeExpressionContext _prevctx = _localctx; + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_multiplicativeExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(393); + { + setState(416); preUnaryExpression(); - setState(403); + } + _ctx.stop = _input.LT(-1); + setState(428); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; { { - setState(396); + _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); + setState(418); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(421); _errHandler.sync(this); switch (_input.LA(1)) { case MULT: { - setState(394); + setState(419); ((MultiplicativeExpressionContext)_localctx).op = match(MULT); } break; case DIVIDE: { - setState(395); + setState(420); ((MultiplicativeExpressionContext)_localctx).op = match(DIVIDE); } break; default: throw new NoViableAltException(this); } - setState(398); + setState(423); preUnaryExpression(); System.out.println("Operator: " + (((MultiplicativeExpressionContext)_localctx).op!=null?((MultiplicativeExpressionContext)_localctx).op.getText():null)); } } } - setState(405); + setState(430); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); } } } @@ -2456,7 +2598,7 @@ public final MultiplicativeExpressionContext multiplicativeExpression() throws R _errHandler.recover(this, re); } finally { - exitRule(); + unrollRecursionContexts(_parentctx); } return _localctx; } @@ -2464,16 +2606,13 @@ public final MultiplicativeExpressionContext multiplicativeExpression() throws R @SuppressWarnings("CheckReturnValue") public static class PreUnaryExpressionContext extends ParserRuleContext { public Token op; - public PreUnaryExpressionContext preUnaryExpression() { - return getRuleContext(PreUnaryExpressionContext.class,0); + public AccessExpressionContext accessExpression() { + return getRuleContext(AccessExpressionContext.class,0); } public TerminalNode NOT() { return getToken(FunctionCraftParser.NOT, 0); } public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } public TerminalNode INCREMENT() { return getToken(FunctionCraftParser.INCREMENT, 0); } public TerminalNode DECREMENT() { return getToken(FunctionCraftParser.DECREMENT, 0); } - public AppendExpressionContext appendExpression() { - return getRuleContext(AppendExpressionContext.class,0); - } public PreUnaryExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2495,9 +2634,9 @@ public T accept(ParseTreeVisitor visitor) { public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionException { PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_preUnaryExpression); + enterRule(_localctx, 56, RULE_preUnaryExpression); try { - setState(416); + setState(441); _errHandler.sync(this); switch (_input.LA(1)) { case MINUS: @@ -2506,42 +2645,40 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case DECREMENT: enterOuterAlt(_localctx, 1); { - { - setState(410); + setState(435); _errHandler.sync(this); switch (_input.LA(1)) { case NOT: { - setState(406); + setState(431); ((PreUnaryExpressionContext)_localctx).op = match(NOT); } break; case MINUS: { - setState(407); + setState(432); ((PreUnaryExpressionContext)_localctx).op = match(MINUS); } break; case INCREMENT: { - setState(408); + setState(433); ((PreUnaryExpressionContext)_localctx).op = match(INCREMENT); } break; case DECREMENT: { - setState(409); + setState(434); ((PreUnaryExpressionContext)_localctx).op = match(DECREMENT); } break; default: throw new NoViableAltException(this); } - setState(412); - preUnaryExpression(); + setState(437); + accessExpression(); System.out.println("Operator: " + (((PreUnaryExpressionContext)_localctx).op!=null?((PreUnaryExpressionContext)_localctx).op.getText():null)); } - } break; case LEN: case METHOD: @@ -2558,8 +2695,8 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(415); - appendExpression(); + setState(440); + accessExpression(); } break; default: @@ -2577,79 +2714,6 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx return _localctx; } - @SuppressWarnings("CheckReturnValue") - public static class AppendExpressionContext extends ParserRuleContext { - public Token APPEND; - public List accessExpression() { - return getRuleContexts(AccessExpressionContext.class); - } - public AccessExpressionContext accessExpression(int i) { - return getRuleContext(AccessExpressionContext.class,i); - } - public List APPEND() { return getTokens(FunctionCraftParser.APPEND); } - public TerminalNode APPEND(int i) { - return getToken(FunctionCraftParser.APPEND, i); - } - public AppendExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_appendExpression; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAppendExpression(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAppendExpression(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAppendExpression(this); - else return visitor.visitChildren(this); - } - } - - public final AppendExpressionContext appendExpression() throws RecognitionException { - AppendExpressionContext _localctx = new AppendExpressionContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_appendExpression); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(418); - accessExpression(); - setState(425); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,39,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(419); - ((AppendExpressionContext)_localctx).APPEND = match(APPEND); - setState(420); - accessExpression(); - System.out.println("Operator: " + (((AppendExpressionContext)_localctx).APPEND!=null?((AppendExpressionContext)_localctx).APPEND.getText():null)); - } - } - } - setState(427); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,39,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - @SuppressWarnings("CheckReturnValue") public static class AccessExpressionContext extends ParserRuleContext { public OtherExpressionContext otherExpression() { @@ -2701,42 +2765,42 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept int _alt; enterOuterAlt(_localctx, 1); { - setState(428); + setState(443); otherExpression(); - setState(436); + setState(451); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(429); + setState(444); match(LPAR); - setState(430); + System.out.println("FunctionCall"); + setState(446); functionArguments(); - setState(431); + setState(447); match(RPAR); - System.out.println("FunctionCall"); } } } - setState(438); + setState(453); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } - setState(442); + setState(457); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(439); + setState(454); accessList(); } } } - setState(444); + setState(459); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); } @@ -2803,74 +2867,74 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio enterRule(_localctx, 60, RULE_otherExpression); int _la; try { - setState(457); + setState(472); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(445); + setState(460); values(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(446); + setState(461); match(IDENTIFIER); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(447); + setState(462); lambdaFunction(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(448); + setState(463); chopAndChompStatement(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(449); + setState(464); matchPatternStatement(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(450); + setState(465); filterStatement(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(451); + setState(466); lenStatement(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(452); + setState(467); match(LPAR); - setState(454); + setState(469); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 270262599515113536L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(453); - expression(); + setState(468); + expression(0); } } - setState(456); + setState(471); match(RPAR); } break; @@ -2926,18 +2990,18 @@ public final LambdaFunctionContext lambdaFunction() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(459); + setState(474); match(ARROW); System.out.println("Structure: LAMBDA"); - setState(461); + setState(476); functionArgumentsDeclaration(); - setState(462); + setState(477); match(LBRACE); - setState(463); + setState(478); body(); - setState(464); + setState(479); match(RBRACE); - setState(465); + setState(480); functionArguments(); } } @@ -2989,49 +3053,49 @@ public final ValuesContext values() throws RecognitionException { ValuesContext _localctx = new ValuesContext(_ctx, getState()); enterRule(_localctx, 64, RULE_values); try { - setState(473); + setState(488); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: case FALSE: enterOuterAlt(_localctx, 1); { - setState(467); + setState(482); boolValue(); } break; case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(468); + setState(483); match(STRING_VALUE); } break; case INT_VALUE: enterOuterAlt(_localctx, 3); { - setState(469); + setState(484); match(INT_VALUE); } break; case FLOAT_VALUE: enterOuterAlt(_localctx, 4); { - setState(470); + setState(485); match(FLOAT_VALUE); } break; case LBRACK: enterOuterAlt(_localctx, 5); { - setState(471); + setState(486); listValue(); } break; case METHOD: enterOuterAlt(_localctx, 6); { - setState(472); + setState(487); functionPointer(); } break; @@ -3082,11 +3146,11 @@ public final ListValueContext listValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(475); + setState(490); match(LBRACK); - setState(476); + setState(491); functionArguments(); - setState(477); + setState(492); match(RBRACK); } } @@ -3131,7 +3195,7 @@ public final BoolValueContext boolValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(479); + setState(494); _la = _input.LA(1); if ( !(_la==TRUE || _la==FALSE) ) { _errHandler.recoverInline(this); @@ -3186,15 +3250,15 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(481); + setState(496); match(METHOD); - setState(482); + setState(497); match(LPAR); - setState(483); + setState(498); match(COLON); - setState(484); + setState(499); match(IDENTIFIER); - setState(485); + setState(500); match(RPAR); } } @@ -3209,8 +3273,59 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio return _localctx; } + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 23: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 24: + return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); + case 25: + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + case 26: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 27: + return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean eqaulityExpression_sempred(EqaulityExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 2); + } + return true; + } + private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 2); + } + return true; + } + private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 4: + return precpred(_ctx, 2); + } + return true; + } + public static final String _serializedATN = - "\u0004\u0001;\u01e8\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001A\u01f7\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -3264,269 +3379,280 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u0156\b\u0015"+ "\u0001\u0016\u0005\u0016\u0159\b\u0016\n\u0016\f\u0016\u015c\t\u0016\u0001"+ "\u0016\u0003\u0016\u015f\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0003\u0017\u0166\b\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0005\u0017\u016b\b\u0017\n\u0017\f\u0017\u016e\t\u0017\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0003\u0018\u0173\b\u0018\u0001\u0018\u0001\u0018"+ - "\u0001\u0018\u0005\u0018\u0178\b\u0018\n\u0018\f\u0018\u017b\t\u0018\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u0180\b\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0005\u0019\u0185\b\u0019\n\u0019\f\u0019\u0188\t\u0019"+ - "\u0001\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u018d\b\u001a\u0001\u001a"+ - "\u0001\u001a\u0001\u001a\u0005\u001a\u0192\b\u001a\n\u001a\f\u001a\u0195"+ - "\t\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u019b"+ - "\b\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u01a1"+ - "\b\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005"+ - "\u001c\u01a8\b\u001c\n\u001c\f\u001c\u01ab\t\u001c\u0001\u001d\u0001\u001d"+ - "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u01b3\b\u001d"+ - "\n\u001d\f\u001d\u01b6\t\u001d\u0001\u001d\u0005\u001d\u01b9\b\u001d\n"+ - "\u001d\f\u001d\u01bc\t\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0003"+ - "\u001e\u01c7\b\u001e\u0001\u001e\u0003\u001e\u01ca\b\u001e\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0003 \u01da\b"+ - " \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001"+ - "#\u0001#\u0001#\u0001#\u0000\u0000$\u0000\u0002\u0004\u0006\b\n\f\u000e"+ - "\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDF"+ - "\u0000\u0002\u0001\u0000\u001e\u001f\u0001\u0000%&\u0205\u0000L\u0001"+ - "\u0000\u0000\u0000\u0002Q\u0001\u0000\u0000\u0000\u0004X\u0001\u0000\u0000"+ - "\u0000\u0006w\u0001\u0000\u0000\u0000\b\u0089\u0001\u0000\u0000\u0000"+ - "\n\u0099\u0001\u0000\u0000\u0000\f\u009b\u0001\u0000\u0000\u0000\u000e"+ - "\u00a2\u0001\u0000\u0000\u0000\u0010\u00c9\u0001\u0000\u0000\u0000\u0012"+ - "\u00cc\u0001\u0000\u0000\u0000\u0014\u00d3\u0001\u0000\u0000\u0000\u0016"+ - "\u00d9\u0001\u0000\u0000\u0000\u0018\u00e2\u0001\u0000\u0000\u0000\u001a"+ - "\u00f9\u0001\u0000\u0000\u0000\u001c\u00ff\u0001\u0000\u0000\u0000\u001e"+ - "\u0119\u0001\u0000\u0000\u0000 \u011b\u0001\u0000\u0000\u0000\"\u012d"+ - "\u0001\u0000\u0000\u0000$\u0139\u0001\u0000\u0000\u0000&\u013f\u0001\u0000"+ - "\u0000\u0000(\u0148\u0001\u0000\u0000\u0000*\u0155\u0001\u0000\u0000\u0000"+ - ",\u015a\u0001\u0000\u0000\u0000.\u0160\u0001\u0000\u0000\u00000\u016f"+ - "\u0001\u0000\u0000\u00002\u017c\u0001\u0000\u0000\u00004\u0189\u0001\u0000"+ - "\u0000\u00006\u01a0\u0001\u0000\u0000\u00008\u01a2\u0001\u0000\u0000\u0000"+ - ":\u01ac\u0001\u0000\u0000\u0000<\u01c9\u0001\u0000\u0000\u0000>\u01cb"+ - "\u0001\u0000\u0000\u0000@\u01d9\u0001\u0000\u0000\u0000B\u01db\u0001\u0000"+ - "\u0000\u0000D\u01df\u0001\u0000\u0000\u0000F\u01e1\u0001\u0000\u0000\u0000"+ - "HK\u0003\u0002\u0001\u0000IK\u0003\u0006\u0003\u0000JH\u0001\u0000\u0000"+ - "\u0000JI\u0001\u0000\u0000\u0000KN\u0001\u0000\u0000\u0000LJ\u0001\u0000"+ - "\u0000\u0000LM\u0001\u0000\u0000\u0000MO\u0001\u0000\u0000\u0000NL\u0001"+ - "\u0000\u0000\u0000OP\u0003\b\u0004\u0000P\u0001\u0001\u0000\u0000\u0000"+ - "QR\u0005\u0001\u0000\u0000RS\u00058\u0000\u0000ST\u0006\u0001\uffff\uffff"+ - "\u0000TU\u0003\u0004\u0002\u0000UV\u0003,\u0016\u0000VW\u0005\u0002\u0000"+ - "\u0000W\u0003\u0001\u0000\u0000\u0000Xs\u0005+\u0000\u0000Y^\u00058\u0000"+ - "\u0000Z[\u00051\u0000\u0000[]\u00058\u0000\u0000\\Z\u0001\u0000\u0000"+ - "\u0000]`\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^_\u0001\u0000"+ - "\u0000\u0000_q\u0001\u0000\u0000\u0000`^\u0001\u0000\u0000\u0000ab\u0005"+ - "1\u0000\u0000bc\u0005-\u0000\u0000cd\u00058\u0000\u0000de\u0005*\u0000"+ - "\u0000el\u0003.\u0017\u0000fg\u00051\u0000\u0000gh\u00058\u0000\u0000"+ - "hi\u0005*\u0000\u0000ik\u0003.\u0017\u0000jf\u0001\u0000\u0000\u0000k"+ - "n\u0001\u0000\u0000\u0000lj\u0001\u0000\u0000\u0000lm\u0001\u0000\u0000"+ - "\u0000mo\u0001\u0000\u0000\u0000nl\u0001\u0000\u0000\u0000op\u0005.\u0000"+ - "\u0000pr\u0001\u0000\u0000\u0000qa\u0001\u0000\u0000\u0000qr\u0001\u0000"+ - "\u0000\u0000rt\u0001\u0000\u0000\u0000sY\u0001\u0000\u0000\u0000st\u0001"+ - "\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000uv\u0005,\u0000\u0000v\u0005"+ - "\u0001\u0000\u0000\u0000wx\u0005\f\u0000\u0000xy\u00058\u0000\u0000yz"+ - "\u0006\u0003\uffff\uffff\u0000z{\u0005+\u0000\u0000{|\u00058\u0000\u0000"+ - "|\u0084\u0005,\u0000\u0000}~\u0005#\u0000\u0000~\u007f\u0003\u0010\b\u0000"+ - "\u007f\u0080\u0005*\u0000\u0000\u0080\u0081\u0003.\u0017\u0000\u0081\u0083"+ - "\u0001\u0000\u0000\u0000\u0082}\u0001\u0000\u0000\u0000\u0083\u0086\u0001"+ - "\u0000\u0000\u0000\u0084\u0082\u0001\u0000\u0000\u0000\u0084\u0085\u0001"+ - "\u0000\u0000\u0000\u0085\u0087\u0001\u0000\u0000\u0000\u0086\u0084\u0001"+ - "\u0000\u0000\u0000\u0087\u0088\u00055\u0000\u0000\u0088\u0007\u0001\u0000"+ - "\u0000\u0000\u0089\u008a\u0005\u0001\u0000\u0000\u008a\u008b\u0005\u0003"+ - "\u0000\u0000\u008b\u008c\u0006\u0004\uffff\uffff\u0000\u008c\u008d\u0005"+ - "+\u0000\u0000\u008d\u008e\u0005,\u0000\u0000\u008e\u008f\u0003,\u0016"+ - "\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090\t\u0001\u0000\u0000\u0000"+ - "\u0091\u0096\u0003.\u0017\u0000\u0092\u0093\u00051\u0000\u0000\u0093\u0095"+ - "\u0003.\u0017\u0000\u0094\u0092\u0001\u0000\u0000\u0000\u0095\u0098\u0001"+ - "\u0000\u0000\u0000\u0096\u0094\u0001\u0000\u0000\u0000\u0096\u0097\u0001"+ - "\u0000\u0000\u0000\u0097\u009a\u0001\u0000\u0000\u0000\u0098\u0096\u0001"+ - "\u0000\u0000\u0000\u0099\u0091\u0001\u0000\u0000\u0000\u0099\u009a\u0001"+ - "\u0000\u0000\u0000\u009a\u000b\u0001\u0000\u0000\u0000\u009b\u009c\u0005"+ - "\u0007\u0000\u0000\u009c\u009e\u0006\u0006\uffff\uffff\u0000\u009d\u009f"+ - "\u0003.\u0017\u0000\u009e\u009d\u0001\u0000\u0000\u0000\u009e\u009f\u0001"+ - "\u0000\u0000\u0000\u009f\u00a0\u0001\u0000\u0000\u0000\u00a0\u00a1\u0005"+ - "5\u0000\u0000\u00a1\r\u0001\u0000\u0000\u0000\u00a2\u00a3\u0005\b\u0000"+ - "\u0000\u00a3\u00a4\u0006\u0007\uffff\uffff\u0000\u00a4\u00a5\u0003\u0010"+ - "\b\u0000\u00a5\u00ad\u0003,\u0016\u0000\u00a6\u00a7\u0005\n\u0000\u0000"+ - "\u00a7\u00a8\u0006\u0007\uffff\uffff\u0000\u00a8\u00a9\u0003\u0010\b\u0000"+ - "\u00a9\u00aa\u0003,\u0016\u0000\u00aa\u00ac\u0001\u0000\u0000\u0000\u00ab"+ - "\u00a6\u0001\u0000\u0000\u0000\u00ac\u00af\u0001\u0000\u0000\u0000\u00ad"+ - "\u00ab\u0001\u0000\u0000\u0000\u00ad\u00ae\u0001\u0000\u0000\u0000\u00ae"+ - "\u00b3\u0001\u0000\u0000\u0000\u00af\u00ad\u0001\u0000\u0000\u0000\u00b0"+ - "\u00b1\u0005\t\u0000\u0000\u00b1\u00b2\u0006\u0007\uffff\uffff\u0000\u00b2"+ - "\u00b4\u0003,\u0016\u0000\u00b3\u00b0\u0001\u0000\u0000\u0000\u00b3\u00b4"+ - "\u0001\u0000\u0000\u0000\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b6"+ - "\u0005\u0002\u0000\u0000\u00b6\u000f\u0001\u0000\u0000\u0000\u00b7\u00b8"+ - "\u0005+\u0000\u0000\u00b8\u00b9\u0003.\u0017\u0000\u00b9\u00c4\u0005,"+ - "\u0000\u0000\u00ba\u00bc\u0007\u0000\u0000\u0000\u00bb\u00bd\u0005+\u0000"+ - "\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000\u00bc\u00bd\u0001\u0000\u0000"+ - "\u0000\u00bd\u00be\u0001\u0000\u0000\u0000\u00be\u00c0\u0003\u0010\b\u0000"+ - "\u00bf\u00c1\u0005,\u0000\u0000\u00c0\u00bf\u0001\u0000\u0000\u0000\u00c0"+ - "\u00c1\u0001\u0000\u0000\u0000\u00c1\u00c3\u0001\u0000\u0000\u0000\u00c2"+ - "\u00ba\u0001\u0000\u0000\u0000\u00c3\u00c6\u0001\u0000\u0000\u0000\u00c4"+ - "\u00c2\u0001\u0000\u0000\u0000\u00c4\u00c5\u0001\u0000\u0000\u0000\u00c5"+ - "\u00c8\u0001\u0000\u0000\u0000\u00c6\u00c4\u0001\u0000\u0000\u0000\u00c7"+ - "\u00b7\u0001\u0000\u0000\u0000\u00c8\u00cb\u0001\u0000\u0000\u0000\u00c9"+ - "\u00c7\u0001\u0000\u0000\u0000\u00c9\u00ca\u0001\u0000\u0000\u0000\u00ca"+ - "\u0011\u0001\u0000\u0000\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cc"+ - "\u00cd\u0005\u0004\u0000\u0000\u00cd\u00ce\u0006\t\uffff\uffff\u0000\u00ce"+ - "\u00cf\u0005+\u0000\u0000\u00cf\u00d0\u0003.\u0017\u0000\u00d0\u00d1\u0005"+ - ",\u0000\u0000\u00d1\u00d2\u00055\u0000\u0000\u00d2\u0013\u0001\u0000\u0000"+ - "\u0000\u00d3\u00d4\u0005\u0006\u0000\u0000\u00d4\u00d5\u0006\n\uffff\uffff"+ - "\u0000\u00d5\u00d6\u0005+\u0000\u0000\u00d6\u00d7\u0003.\u0017\u0000\u00d7"+ - "\u00d8\u0005,\u0000\u0000\u00d8\u0015\u0001\u0000\u0000\u0000\u00d9\u00da"+ - "\u0005\u0005\u0000\u0000\u00da\u00db\u0006\u000b\uffff\uffff\u0000\u00db"+ - "\u00dc\u0005+\u0000\u0000\u00dc\u00dd\u0003.\u0017\u0000\u00dd\u00de\u0005"+ - "1\u0000\u0000\u00de\u00df\u0003.\u0017\u0000\u00df\u00e0\u0005,\u0000"+ - "\u0000\u00e0\u00e1\u00055\u0000\u0000\u00e1\u0017\u0001\u0000\u0000\u0000"+ - "\u00e2\u00e3\u0005\u000e\u0000\u0000\u00e3\u00e4\u0005\u0011\u0000\u0000"+ - "\u00e4\u00e5\u0006\f\uffff\uffff\u0000\u00e5\u00e6\u0003\u001a\r\u0000"+ - "\u00e6\u00e7\u0005\u0002\u0000\u0000\u00e7\u0019\u0001\u0000\u0000\u0000"+ - "\u00e8\u00f8\u0003*\u0015\u0000\u00e9\u00ea\u0005\'\u0000\u0000\u00ea"+ - "\u00ed\u0006\r\uffff\uffff\u0000\u00eb\u00ec\u0005\b\u0000\u0000\u00ec"+ - "\u00ee\u0003\u0010\b\u0000\u00ed\u00eb\u0001\u0000\u0000\u0000\u00ed\u00ee"+ - "\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f8"+ - "\u00055\u0000\u0000\u00f0\u00f1\u0005(\u0000\u0000\u00f1\u00f4\u0006\r"+ - "\uffff\uffff\u0000\u00f2\u00f3\u0005\b\u0000\u0000\u00f3\u00f5\u0003\u0010"+ - "\b\u0000\u00f4\u00f2\u0001\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000"+ - "\u0000\u00f5\u00f6\u0001\u0000\u0000\u0000\u00f6\u00f8\u00055\u0000\u0000"+ - "\u00f7\u00e8\u0001\u0000\u0000\u0000\u00f7\u00e9\u0001\u0000\u0000\u0000"+ - "\u00f7\u00f0\u0001\u0000\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000"+ - "\u00f9\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000"+ - "\u00fa\u00fd\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000"+ - "\u00fc\u00fe\u0003\f\u0006\u0000\u00fd\u00fc\u0001\u0000\u0000\u0000\u00fd"+ - "\u00fe\u0001\u0000\u0000\u0000\u00fe\u001b\u0001\u0000\u0000\u0000\u00ff"+ - "\u0100\u0005\u000f\u0000\u0000\u0100\u0101\u0006\u000e\uffff\uffff\u0000"+ - "\u0101\u0102\u00058\u0000\u0000\u0102\u0103\u0005\u0010\u0000\u0000\u0103"+ - "\u0104\u0003\u001e\u000f\u0000\u0104\u0105\u0003\u001a\r\u0000\u0105\u0106"+ - "\u0005\u0002\u0000\u0000\u0106\u001d\u0001\u0000\u0000\u0000\u0107\u0108"+ - "\u0005+\u0000\u0000\u0108\u0109\u0003.\u0017\u0000\u0109\u010a\u00053"+ - "\u0000\u0000\u010a\u010b\u0003.\u0017\u0000\u010b\u010c\u0005,\u0000\u0000"+ - "\u010c\u011a\u0001\u0000\u0000\u0000\u010d\u010e\u0005-\u0000\u0000\u010e"+ - "\u0113\u0003.\u0017\u0000\u010f\u0110\u00051\u0000\u0000\u0110\u0112\u0003"+ - ".\u0017\u0000\u0111\u010f\u0001\u0000\u0000\u0000\u0112\u0115\u0001\u0000"+ - "\u0000\u0000\u0113\u0111\u0001\u0000\u0000\u0000\u0113\u0114\u0001\u0000"+ - "\u0000\u0000\u0114\u0116\u0001\u0000\u0000\u0000\u0115\u0113\u0001\u0000"+ - "\u0000\u0000\u0116\u0117\u0005.\u0000\u0000\u0117\u011a\u0001\u0000\u0000"+ - "\u0000\u0118\u011a\u00058\u0000\u0000\u0119\u0107\u0001\u0000\u0000\u0000"+ - "\u0119\u010d\u0001\u0000\u0000\u0000\u0119\u0118\u0001\u0000\u0000\u0000"+ - "\u011a\u001f\u0001\u0000\u0000\u0000\u011b\u011c\u0006\u0010\uffff\uffff"+ - "\u0000\u011c\u011d\u0005-\u0000\u0000\u011d\u011e\u0003.\u0017\u0000\u011e"+ - "\u011f\u0005#\u0000\u0000\u011f\u0120\u00058\u0000\u0000\u0120\u0121\u0005"+ - ")\u0000\u0000\u0121\u0122\u0003\u001e\u000f\u0000\u0122\u0123\u00051\u0000"+ - "\u0000\u0123\u0128\u0003.\u0017\u0000\u0124\u0125\u00051\u0000\u0000\u0125"+ - "\u0127\u0003.\u0017\u0000\u0126\u0124\u0001\u0000\u0000\u0000\u0127\u012a"+ - "\u0001\u0000\u0000\u0000\u0128\u0126\u0001\u0000\u0000\u0000\u0128\u0129"+ - "\u0001\u0000\u0000\u0000\u0129\u012b\u0001\u0000\u0000\u0000\u012a\u0128"+ - "\u0001\u0000\u0000\u0000\u012b\u012c\u0005.\u0000\u0000\u012c!\u0001\u0000"+ - "\u0000\u0000\u012d\u012e\u0006\u0011\uffff\uffff\u0000\u012e\u012f\u0005"+ - "8\u0000\u0000\u012f\u0130\u00052\u0000\u0000\u0130\u0131\u0005\r\u0000"+ - "\u0000\u0131\u0132\u0005+\u0000\u0000\u0132\u0133\u0003.\u0017\u0000\u0133"+ - "\u0134\u0005,\u0000\u0000\u0134#\u0001\u0000\u0000\u0000\u0135\u0136\u0005"+ - "\u0012\u0000\u0000\u0136\u013a\u0006\u0012\uffff\uffff\u0000\u0137\u0138"+ - "\u0005\u0013\u0000\u0000\u0138\u013a\u0006\u0012\uffff\uffff\u0000\u0139"+ - "\u0135\u0001\u0000\u0000\u0000\u0139\u0137\u0001\u0000\u0000\u0000\u013a"+ - "\u013b\u0001\u0000\u0000\u0000\u013b\u013c\u0005+\u0000\u0000\u013c\u013d"+ - "\u0003.\u0017\u0000\u013d\u013e\u0005,\u0000\u0000\u013e%\u0001\u0000"+ - "\u0000\u0000\u013f\u0140\u00058\u0000\u0000\u0140\u0142\u0006\u0013\uffff"+ - "\uffff\u0000\u0141\u0143\u0003(\u0014\u0000\u0142\u0141\u0001\u0000\u0000"+ - "\u0000\u0142\u0143\u0001\u0000\u0000\u0000\u0143\u0144\u0001\u0000\u0000"+ - "\u0000\u0144\u0145\u0005*\u0000\u0000\u0145\u0146\u0003.\u0017\u0000\u0146"+ - "\u0147\u00055\u0000\u0000\u0147\'\u0001\u0000\u0000\u0000\u0148\u0149"+ - "\u0005-\u0000\u0000\u0149\u014a\u0003.\u0017\u0000\u014a\u014b\u0005."+ - "\u0000\u0000\u014b)\u0001\u0000\u0000\u0000\u014c\u0156\u0003\u000e\u0007"+ - "\u0000\u014d\u0156\u0003\u0018\f\u0000\u014e\u0156\u0003\u001c\u000e\u0000"+ - "\u014f\u0156\u0003\u0012\t\u0000\u0150\u0156\u0003\u0016\u000b\u0000\u0151"+ - "\u0152\u0003.\u0017\u0000\u0152\u0153\u00055\u0000\u0000\u0153\u0156\u0001"+ - "\u0000\u0000\u0000\u0154\u0156\u0003&\u0013\u0000\u0155\u014c\u0001\u0000"+ - "\u0000\u0000\u0155\u014d\u0001\u0000\u0000\u0000\u0155\u014e\u0001\u0000"+ - "\u0000\u0000\u0155\u014f\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000"+ - "\u0000\u0000\u0155\u0151\u0001\u0000\u0000\u0000\u0155\u0154\u0001\u0000"+ - "\u0000\u0000\u0156+\u0001\u0000\u0000\u0000\u0157\u0159\u0003*\u0015\u0000"+ - "\u0158\u0157\u0001\u0000\u0000\u0000\u0159\u015c\u0001\u0000\u0000\u0000"+ - "\u015a\u0158\u0001\u0000\u0000\u0000\u015a\u015b\u0001\u0000\u0000\u0000"+ - "\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000"+ - "\u015d\u015f\u0003\f\u0006\u0000\u015e\u015d\u0001\u0000\u0000\u0000\u015e"+ - "\u015f\u0001\u0000\u0000\u0000\u015f-\u0001\u0000\u0000\u0000\u0160\u016c"+ - "\u00030\u0018\u0000\u0161\u0166\u0005\u0018\u0000\u0000\u0162\u0166\u0005"+ - "\u0019\u0000\u0000\u0163\u0166\u0005\u001a\u0000\u0000\u0164\u0166\u0005"+ - "\u001b\u0000\u0000\u0165\u0161\u0001\u0000\u0000\u0000\u0165\u0162\u0001"+ - "\u0000\u0000\u0000\u0165\u0163\u0001\u0000\u0000\u0000\u0165\u0164\u0001"+ - "\u0000\u0000\u0000\u0166\u0167\u0001\u0000\u0000\u0000\u0167\u0168\u0003"+ - "0\u0018\u0000\u0168\u0169\u0006\u0017\uffff\uffff\u0000\u0169\u016b\u0001"+ - "\u0000\u0000\u0000\u016a\u0165\u0001\u0000\u0000\u0000\u016b\u016e\u0001"+ - "\u0000\u0000\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016c\u016d\u0001"+ - "\u0000\u0000\u0000\u016d/\u0001\u0000\u0000\u0000\u016e\u016c\u0001\u0000"+ - "\u0000\u0000\u016f\u0179\u00032\u0019\u0000\u0170\u0173\u0005\u001c\u0000"+ - "\u0000\u0171\u0173\u0005\u001d\u0000\u0000\u0172\u0170\u0001\u0000\u0000"+ - "\u0000\u0172\u0171\u0001\u0000\u0000\u0000\u0173\u0174\u0001\u0000\u0000"+ - "\u0000\u0174\u0175\u00032\u0019\u0000\u0175\u0176\u0006\u0018\uffff\uffff"+ - "\u0000\u0176\u0178\u0001\u0000\u0000\u0000\u0177\u0172\u0001\u0000\u0000"+ - "\u0000\u0178\u017b\u0001\u0000\u0000\u0000\u0179\u0177\u0001\u0000\u0000"+ - "\u0000\u0179\u017a\u0001\u0000\u0000\u0000\u017a1\u0001\u0000\u0000\u0000"+ - "\u017b\u0179\u0001\u0000\u0000\u0000\u017c\u0186\u00034\u001a\u0000\u017d"+ - "\u0180\u0005\u0014\u0000\u0000\u017e\u0180\u0005\u0015\u0000\u0000\u017f"+ - "\u017d\u0001\u0000\u0000\u0000\u017f\u017e\u0001\u0000\u0000\u0000\u0180"+ - "\u0181\u0001\u0000\u0000\u0000\u0181\u0182\u00034\u001a\u0000\u0182\u0183"+ - "\u0006\u0019\uffff\uffff\u0000\u0183\u0185\u0001\u0000\u0000\u0000\u0184"+ - "\u017f\u0001\u0000\u0000\u0000\u0185\u0188\u0001\u0000\u0000\u0000\u0186"+ - "\u0184\u0001\u0000\u0000\u0000\u0186\u0187\u0001\u0000\u0000\u0000\u0187"+ - "3\u0001\u0000\u0000\u0000\u0188\u0186\u0001\u0000\u0000\u0000\u0189\u0193"+ - "\u00036\u001b\u0000\u018a\u018d\u0005\u0016\u0000\u0000\u018b\u018d\u0005"+ - "\u0017\u0000\u0000\u018c\u018a\u0001\u0000\u0000\u0000\u018c\u018b\u0001"+ - "\u0000\u0000\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u018f\u0003"+ - "6\u001b\u0000\u018f\u0190\u0006\u001a\uffff\uffff\u0000\u0190\u0192\u0001"+ - "\u0000\u0000\u0000\u0191\u018c\u0001\u0000\u0000\u0000\u0192\u0195\u0001"+ - "\u0000\u0000\u0000\u0193\u0191\u0001\u0000\u0000\u0000\u0193\u0194\u0001"+ - "\u0000\u0000\u0000\u01945\u0001\u0000\u0000\u0000\u0195\u0193\u0001\u0000"+ - "\u0000\u0000\u0196\u019b\u0005 \u0000\u0000\u0197\u019b\u0005\u0015\u0000"+ - "\u0000\u0198\u019b\u0005!\u0000\u0000\u0199\u019b\u0005\"\u0000\u0000"+ - "\u019a\u0196\u0001\u0000\u0000\u0000\u019a\u0197\u0001\u0000\u0000\u0000"+ - "\u019a\u0198\u0001\u0000\u0000\u0000\u019a\u0199\u0001\u0000\u0000\u0000"+ - "\u019b\u019c\u0001\u0000\u0000\u0000\u019c\u019d\u00036\u001b\u0000\u019d"+ - "\u019e\u0006\u001b\uffff\uffff\u0000\u019e\u01a1\u0001\u0000\u0000\u0000"+ - "\u019f\u01a1\u00038\u001c\u0000\u01a0\u019a\u0001\u0000\u0000\u0000\u01a0"+ - "\u019f\u0001\u0000\u0000\u0000\u01a17\u0001\u0000\u0000\u0000\u01a2\u01a9"+ - "\u0003:\u001d\u0000\u01a3\u01a4\u0005$\u0000\u0000\u01a4\u01a5\u0003:"+ - "\u001d\u0000\u01a5\u01a6\u0006\u001c\uffff\uffff\u0000\u01a6\u01a8\u0001"+ - "\u0000\u0000\u0000\u01a7\u01a3\u0001\u0000\u0000\u0000\u01a8\u01ab\u0001"+ - "\u0000\u0000\u0000\u01a9\u01a7\u0001\u0000\u0000\u0000\u01a9\u01aa\u0001"+ - "\u0000\u0000\u0000\u01aa9\u0001\u0000\u0000\u0000\u01ab\u01a9\u0001\u0000"+ - "\u0000\u0000\u01ac\u01b4\u0003<\u001e\u0000\u01ad\u01ae\u0005+\u0000\u0000"+ - "\u01ae\u01af\u0003\n\u0005\u0000\u01af\u01b0\u0005,\u0000\u0000\u01b0"+ - "\u01b1\u0006\u001d\uffff\uffff\u0000\u01b1\u01b3\u0001\u0000\u0000\u0000"+ - "\u01b2\u01ad\u0001\u0000\u0000\u0000\u01b3\u01b6\u0001\u0000\u0000\u0000"+ - "\u01b4\u01b2\u0001\u0000\u0000\u0000\u01b4\u01b5\u0001\u0000\u0000\u0000"+ - "\u01b5\u01ba\u0001\u0000\u0000\u0000\u01b6\u01b4\u0001\u0000\u0000\u0000"+ - "\u01b7\u01b9\u0003(\u0014\u0000\u01b8\u01b7\u0001\u0000\u0000\u0000\u01b9"+ - "\u01bc\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001\u0000\u0000\u0000\u01ba"+ - "\u01bb\u0001\u0000\u0000\u0000\u01bb;\u0001\u0000\u0000\u0000\u01bc\u01ba"+ - "\u0001\u0000\u0000\u0000\u01bd\u01ca\u0003@ \u0000\u01be\u01ca\u00058"+ - "\u0000\u0000\u01bf\u01ca\u0003>\u001f\u0000\u01c0\u01ca\u0003$\u0012\u0000"+ - "\u01c1\u01ca\u0003\"\u0011\u0000\u01c2\u01ca\u0003 \u0010\u0000\u01c3"+ - "\u01ca\u0003\u0014\n\u0000\u01c4\u01c6\u0005+\u0000\u0000\u01c5\u01c7"+ - "\u0003.\u0017\u0000\u01c6\u01c5\u0001\u0000\u0000\u0000\u01c6\u01c7\u0001"+ - "\u0000\u0000\u0000\u01c7\u01c8\u0001\u0000\u0000\u0000\u01c8\u01ca\u0005"+ - ",\u0000\u0000\u01c9\u01bd\u0001\u0000\u0000\u0000\u01c9\u01be\u0001\u0000"+ - "\u0000\u0000\u01c9\u01bf\u0001\u0000\u0000\u0000\u01c9\u01c0\u0001\u0000"+ - "\u0000\u0000\u01c9\u01c1\u0001\u0000\u0000\u0000\u01c9\u01c2\u0001\u0000"+ - "\u0000\u0000\u01c9\u01c3\u0001\u0000\u0000\u0000\u01c9\u01c4\u0001\u0000"+ - "\u0000\u0000\u01ca=\u0001\u0000\u0000\u0000\u01cb\u01cc\u0005)\u0000\u0000"+ - "\u01cc\u01cd\u0006\u001f\uffff\uffff\u0000\u01cd\u01ce\u0003\u0004\u0002"+ - "\u0000\u01ce\u01cf\u0005/\u0000\u0000\u01cf\u01d0\u0003,\u0016\u0000\u01d0"+ - "\u01d1\u00050\u0000\u0000\u01d1\u01d2\u0003\n\u0005\u0000\u01d2?\u0001"+ - "\u0000\u0000\u0000\u01d3\u01da\u0003D\"\u0000\u01d4\u01da\u00059\u0000"+ - "\u0000\u01d5\u01da\u00056\u0000\u0000\u01d6\u01da\u00057\u0000\u0000\u01d7"+ - "\u01da\u0003B!\u0000\u01d8\u01da\u0003F#\u0000\u01d9\u01d3\u0001\u0000"+ - "\u0000\u0000\u01d9\u01d4\u0001\u0000\u0000\u0000\u01d9\u01d5\u0001\u0000"+ - "\u0000\u0000\u01d9\u01d6\u0001\u0000\u0000\u0000\u01d9\u01d7\u0001\u0000"+ - "\u0000\u0000\u01d9\u01d8\u0001\u0000\u0000\u0000\u01daA\u0001\u0000\u0000"+ - "\u0000\u01db\u01dc\u0005-\u0000\u0000\u01dc\u01dd\u0003\n\u0005\u0000"+ - "\u01dd\u01de\u0005.\u0000\u0000\u01deC\u0001\u0000\u0000\u0000\u01df\u01e0"+ - "\u0007\u0001\u0000\u0000\u01e0E\u0001\u0000\u0000\u0000\u01e1\u01e2\u0005"+ - "\u000b\u0000\u0000\u01e2\u01e3\u0005+\u0000\u0000\u01e3\u01e4\u00054\u0000"+ - "\u0000\u01e4\u01e5\u00058\u0000\u0000\u01e5\u01e6\u0005,\u0000\u0000\u01e6"+ - "G\u0001\u0000\u0000\u0000-JL^lqs\u0084\u0096\u0099\u009e\u00ad\u00b3\u00bc"+ - "\u00c0\u00c4\u00c9\u00ed\u00f4\u00f7\u00f9\u00fd\u0113\u0119\u0128\u0139"+ - "\u0142\u0155\u015a\u015e\u0165\u016c\u0172\u0179\u017f\u0186\u018c\u0193"+ - "\u019a\u01a0\u01a9\u01b4\u01ba\u01c6\u01c9\u01d9"; + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u0169"+ + "\b\u0017\n\u0017\f\u0017\u016c\t\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u0174\b\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0005\u0018\u0179\b\u0018\n\u0018\f\u0018\u017c"+ + "\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u0186\b\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0005\u0019\u018b\b\u0019\n\u0019\f\u0019\u018e\t\u0019"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0003\u001a\u0196\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a"+ + "\u019b\b\u001a\n\u001a\f\u001a\u019e\t\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u01a6\b\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u01ab\b\u001b\n\u001b\f\u001b"+ + "\u01ae\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u01b4\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u01ba\b\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0005\u001d\u01c2\b\u001d\n\u001d\f\u001d\u01c5\t\u001d\u0001"+ + "\u001d\u0005\u001d\u01c8\b\u001d\n\u001d\f\u001d\u01cb\t\u001d\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0003\u001e\u01d6\b\u001e\u0001\u001e\u0003\u001e"+ + "\u01d9\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0003 \u01e9\b \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0000\u0005.0246$\u0000\u0002"+ + "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ + " \"$&(*,.02468:<>@BDF\u0000\u0003\u0001\u0000\u001e\u001f\u0001\u0000"+ + "+0\u0001\u0000&\'\u0214\u0000L\u0001\u0000\u0000\u0000\u0002Q\u0001\u0000"+ + "\u0000\u0000\u0004X\u0001\u0000\u0000\u0000\u0006w\u0001\u0000\u0000\u0000"+ + "\b\u0089\u0001\u0000\u0000\u0000\n\u0099\u0001\u0000\u0000\u0000\f\u009b"+ + "\u0001\u0000\u0000\u0000\u000e\u00a2\u0001\u0000\u0000\u0000\u0010\u00c9"+ + "\u0001\u0000\u0000\u0000\u0012\u00cc\u0001\u0000\u0000\u0000\u0014\u00d3"+ + "\u0001\u0000\u0000\u0000\u0016\u00d9\u0001\u0000\u0000\u0000\u0018\u00e2"+ + "\u0001\u0000\u0000\u0000\u001a\u00f9\u0001\u0000\u0000\u0000\u001c\u00ff"+ + "\u0001\u0000\u0000\u0000\u001e\u0119\u0001\u0000\u0000\u0000 \u011b\u0001"+ + "\u0000\u0000\u0000\"\u012d\u0001\u0000\u0000\u0000$\u0139\u0001\u0000"+ + "\u0000\u0000&\u013f\u0001\u0000\u0000\u0000(\u0148\u0001\u0000\u0000\u0000"+ + "*\u0155\u0001\u0000\u0000\u0000,\u015a\u0001\u0000\u0000\u0000.\u0160"+ + "\u0001\u0000\u0000\u00000\u016d\u0001\u0000\u0000\u00002\u017d\u0001\u0000"+ + "\u0000\u00004\u018f\u0001\u0000\u0000\u00006\u019f\u0001\u0000\u0000\u0000"+ + "8\u01b9\u0001\u0000\u0000\u0000:\u01bb\u0001\u0000\u0000\u0000<\u01d8"+ + "\u0001\u0000\u0000\u0000>\u01da\u0001\u0000\u0000\u0000@\u01e8\u0001\u0000"+ + "\u0000\u0000B\u01ea\u0001\u0000\u0000\u0000D\u01ee\u0001\u0000\u0000\u0000"+ + "F\u01f0\u0001\u0000\u0000\u0000HK\u0003\u0002\u0001\u0000IK\u0003\u0006"+ + "\u0003\u0000JH\u0001\u0000\u0000\u0000JI\u0001\u0000\u0000\u0000KN\u0001"+ + "\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000LM\u0001\u0000\u0000\u0000"+ + "MO\u0001\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000OP\u0003\b\u0004\u0000"+ + "P\u0001\u0001\u0000\u0000\u0000QR\u0005\u0001\u0000\u0000RS\u0005>\u0000"+ + "\u0000ST\u0006\u0001\uffff\uffff\u0000TU\u0003\u0004\u0002\u0000UV\u0003"+ + ",\u0016\u0000VW\u0005\u0002\u0000\u0000W\u0003\u0001\u0000\u0000\u0000"+ + "Xs\u00051\u0000\u0000Y^\u0005>\u0000\u0000Z[\u00057\u0000\u0000[]\u0005"+ + ">\u0000\u0000\\Z\u0001\u0000\u0000\u0000]`\u0001\u0000\u0000\u0000^\\"+ + "\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_q\u0001\u0000\u0000"+ + "\u0000`^\u0001\u0000\u0000\u0000ab\u00057\u0000\u0000bc\u00053\u0000\u0000"+ + "cd\u0005>\u0000\u0000de\u00050\u0000\u0000el\u0003.\u0017\u0000fg\u0005"+ + "7\u0000\u0000gh\u0005>\u0000\u0000hi\u00050\u0000\u0000ik\u0003.\u0017"+ + "\u0000jf\u0001\u0000\u0000\u0000kn\u0001\u0000\u0000\u0000lj\u0001\u0000"+ + "\u0000\u0000lm\u0001\u0000\u0000\u0000mo\u0001\u0000\u0000\u0000nl\u0001"+ + "\u0000\u0000\u0000op\u00054\u0000\u0000pr\u0001\u0000\u0000\u0000qa\u0001"+ + "\u0000\u0000\u0000qr\u0001\u0000\u0000\u0000rt\u0001\u0000\u0000\u0000"+ + "sY\u0001\u0000\u0000\u0000st\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000"+ + "\u0000uv\u00052\u0000\u0000v\u0005\u0001\u0000\u0000\u0000wx\u0005\f\u0000"+ + "\u0000xy\u0005>\u0000\u0000yz\u0006\u0003\uffff\uffff\u0000z{\u00051\u0000"+ + "\u0000{|\u0005>\u0000\u0000|\u0084\u00052\u0000\u0000}~\u0005#\u0000\u0000"+ + "~\u007f\u0003\u0010\b\u0000\u007f\u0080\u00050\u0000\u0000\u0080\u0081"+ + "\u0003.\u0017\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082}\u0001\u0000"+ + "\u0000\u0000\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001\u0000"+ + "\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000"+ + "\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u0088\u0005;\u0000"+ + "\u0000\u0088\u0007\u0001\u0000\u0000\u0000\u0089\u008a\u0005\u0001\u0000"+ + "\u0000\u008a\u008b\u0005\u0003\u0000\u0000\u008b\u008c\u0006\u0004\uffff"+ + "\uffff\u0000\u008c\u008d\u00051\u0000\u0000\u008d\u008e\u00052\u0000\u0000"+ + "\u008e\u008f\u0003,\u0016\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090"+ + "\t\u0001\u0000\u0000\u0000\u0091\u0096\u0003.\u0017\u0000\u0092\u0093"+ + "\u00057\u0000\u0000\u0093\u0095\u0003.\u0017\u0000\u0094\u0092\u0001\u0000"+ + "\u0000\u0000\u0095\u0098\u0001\u0000\u0000\u0000\u0096\u0094\u0001\u0000"+ + "\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u009a\u0001\u0000"+ + "\u0000\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0099\u0091\u0001\u0000"+ + "\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u000b\u0001\u0000"+ + "\u0000\u0000\u009b\u009c\u0005\u0007\u0000\u0000\u009c\u009e\u0006\u0006"+ + "\uffff\uffff\u0000\u009d\u009f\u0003.\u0017\u0000\u009e\u009d\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0001\u0000\u0000\u0000\u009f\u00a0\u0001\u0000"+ + "\u0000\u0000\u00a0\u00a1\u0005;\u0000\u0000\u00a1\r\u0001\u0000\u0000"+ + "\u0000\u00a2\u00a3\u0005\b\u0000\u0000\u00a3\u00a4\u0006\u0007\uffff\uffff"+ + "\u0000\u00a4\u00a5\u0003\u0010\b\u0000\u00a5\u00ad\u0003,\u0016\u0000"+ + "\u00a6\u00a7\u0005\n\u0000\u0000\u00a7\u00a8\u0006\u0007\uffff\uffff\u0000"+ + "\u00a8\u00a9\u0003\u0010\b\u0000\u00a9\u00aa\u0003,\u0016\u0000\u00aa"+ + "\u00ac\u0001\u0000\u0000\u0000\u00ab\u00a6\u0001\u0000\u0000\u0000\u00ac"+ + "\u00af\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001\u0000\u0000\u0000\u00ad"+ + "\u00ae\u0001\u0000\u0000\u0000\u00ae\u00b3\u0001\u0000\u0000\u0000\u00af"+ + "\u00ad\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005\t\u0000\u0000\u00b1\u00b2"+ + "\u0006\u0007\uffff\uffff\u0000\u00b2\u00b4\u0003,\u0016\u0000\u00b3\u00b0"+ + "\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001\u0000\u0000\u0000\u00b4\u00b5"+ + "\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005\u0002\u0000\u0000\u00b6\u000f"+ + "\u0001\u0000\u0000\u0000\u00b7\u00b8\u00051\u0000\u0000\u00b8\u00b9\u0003"+ + ".\u0017\u0000\u00b9\u00c4\u00052\u0000\u0000\u00ba\u00bc\u0007\u0000\u0000"+ + "\u0000\u00bb\u00bd\u00051\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000"+ + "\u00bc\u00bd\u0001\u0000\u0000\u0000\u00bd\u00be\u0001\u0000\u0000\u0000"+ + "\u00be\u00c0\u0003\u0010\b\u0000\u00bf\u00c1\u00052\u0000\u0000\u00c0"+ + "\u00bf\u0001\u0000\u0000\u0000\u00c0\u00c1\u0001\u0000\u0000\u0000\u00c1"+ + "\u00c3\u0001\u0000\u0000\u0000\u00c2\u00ba\u0001\u0000\u0000\u0000\u00c3"+ + "\u00c6\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4"+ + "\u00c5\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000\u0000\u0000\u00c6"+ + "\u00c4\u0001\u0000\u0000\u0000\u00c7\u00b7\u0001\u0000\u0000\u0000\u00c8"+ + "\u00cb\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00c9"+ + "\u00ca\u0001\u0000\u0000\u0000\u00ca\u0011\u0001\u0000\u0000\u0000\u00cb"+ + "\u00c9\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005\u0004\u0000\u0000\u00cd"+ + "\u00ce\u0006\t\uffff\uffff\u0000\u00ce\u00cf\u00051\u0000\u0000\u00cf"+ + "\u00d0\u0003.\u0017\u0000\u00d0\u00d1\u00052\u0000\u0000\u00d1\u00d2\u0005"+ + ";\u0000\u0000\u00d2\u0013\u0001\u0000\u0000\u0000\u00d3\u00d4\u0005\u0006"+ + "\u0000\u0000\u00d4\u00d5\u0006\n\uffff\uffff\u0000\u00d5\u00d6\u00051"+ + "\u0000\u0000\u00d6\u00d7\u0003.\u0017\u0000\u00d7\u00d8\u00052\u0000\u0000"+ + "\u00d8\u0015\u0001\u0000\u0000\u0000\u00d9\u00da\u0005\u0005\u0000\u0000"+ + "\u00da\u00db\u0006\u000b\uffff\uffff\u0000\u00db\u00dc\u00051\u0000\u0000"+ + "\u00dc\u00dd\u0003.\u0017\u0000\u00dd\u00de\u00057\u0000\u0000\u00de\u00df"+ + "\u0003.\u0017\u0000\u00df\u00e0\u00052\u0000\u0000\u00e0\u00e1\u0005;"+ + "\u0000\u0000\u00e1\u0017\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005\u000e"+ + "\u0000\u0000\u00e3\u00e4\u0005\u0011\u0000\u0000\u00e4\u00e5\u0006\f\uffff"+ + "\uffff\u0000\u00e5\u00e6\u0003\u001a\r\u0000\u00e6\u00e7\u0005\u0002\u0000"+ + "\u0000\u00e7\u0019\u0001\u0000\u0000\u0000\u00e8\u00f8\u0003*\u0015\u0000"+ + "\u00e9\u00ea\u0005(\u0000\u0000\u00ea\u00ed\u0006\r\uffff\uffff\u0000"+ + "\u00eb\u00ec\u0005\b\u0000\u0000\u00ec\u00ee\u0003\u0010\b\u0000\u00ed"+ + "\u00eb\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000\u00ee"+ + "\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f8\u0005;\u0000\u0000\u00f0\u00f1"+ + "\u0005)\u0000\u0000\u00f1\u00f4\u0006\r\uffff\uffff\u0000\u00f2\u00f3"+ + "\u0005\b\u0000\u0000\u00f3\u00f5\u0003\u0010\b\u0000\u00f4\u00f2\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f6\u0001"+ + "\u0000\u0000\u0000\u00f6\u00f8\u0005;\u0000\u0000\u00f7\u00e8\u0001\u0000"+ + "\u0000\u0000\u00f7\u00e9\u0001\u0000\u0000\u0000\u00f7\u00f0\u0001\u0000"+ + "\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000"+ + "\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fd\u0001\u0000"+ + "\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc\u00fe\u0003\f\u0006"+ + "\u0000\u00fd\u00fc\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000"+ + "\u0000\u00fe\u001b\u0001\u0000\u0000\u0000\u00ff\u0100\u0005\u000f\u0000"+ + "\u0000\u0100\u0101\u0006\u000e\uffff\uffff\u0000\u0101\u0102\u0005>\u0000"+ + "\u0000\u0102\u0103\u0005\u0010\u0000\u0000\u0103\u0104\u0003\u001e\u000f"+ + "\u0000\u0104\u0105\u0003\u001a\r\u0000\u0105\u0106\u0005\u0002\u0000\u0000"+ + "\u0106\u001d\u0001\u0000\u0000\u0000\u0107\u0108\u00051\u0000\u0000\u0108"+ + "\u0109\u0003.\u0017\u0000\u0109\u010a\u00059\u0000\u0000\u010a\u010b\u0003"+ + ".\u0017\u0000\u010b\u010c\u00052\u0000\u0000\u010c\u011a\u0001\u0000\u0000"+ + "\u0000\u010d\u010e\u00053\u0000\u0000\u010e\u0113\u0003.\u0017\u0000\u010f"+ + "\u0110\u00057\u0000\u0000\u0110\u0112\u0003.\u0017\u0000\u0111\u010f\u0001"+ + "\u0000\u0000\u0000\u0112\u0115\u0001\u0000\u0000\u0000\u0113\u0111\u0001"+ + "\u0000\u0000\u0000\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0116\u0001"+ + "\u0000\u0000\u0000\u0115\u0113\u0001\u0000\u0000\u0000\u0116\u0117\u0005"+ + "4\u0000\u0000\u0117\u011a\u0001\u0000\u0000\u0000\u0118\u011a\u0005>\u0000"+ + "\u0000\u0119\u0107\u0001\u0000\u0000\u0000\u0119\u010d\u0001\u0000\u0000"+ + "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u011a\u001f\u0001\u0000\u0000"+ + "\u0000\u011b\u011c\u0006\u0010\uffff\uffff\u0000\u011c\u011d\u00053\u0000"+ + "\u0000\u011d\u011e\u0003.\u0017\u0000\u011e\u011f\u0005$\u0000\u0000\u011f"+ + "\u0120\u0005>\u0000\u0000\u0120\u0121\u0005*\u0000\u0000\u0121\u0122\u0003"+ + "\u001e\u000f\u0000\u0122\u0123\u00057\u0000\u0000\u0123\u0128\u0003.\u0017"+ + "\u0000\u0124\u0125\u00057\u0000\u0000\u0125\u0127\u0003.\u0017\u0000\u0126"+ + "\u0124\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128"+ + "\u0126\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129"+ + "\u012b\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b"+ + "\u012c\u00054\u0000\u0000\u012c!\u0001\u0000\u0000\u0000\u012d\u012e\u0006"+ + "\u0011\uffff\uffff\u0000\u012e\u012f\u0005>\u0000\u0000\u012f\u0130\u0005"+ + "8\u0000\u0000\u0130\u0131\u0005\r\u0000\u0000\u0131\u0132\u00051\u0000"+ + "\u0000\u0132\u0133\u0003.\u0017\u0000\u0133\u0134\u00052\u0000\u0000\u0134"+ + "#\u0001\u0000\u0000\u0000\u0135\u0136\u0005\u0012\u0000\u0000\u0136\u013a"+ + "\u0006\u0012\uffff\uffff\u0000\u0137\u0138\u0005\u0013\u0000\u0000\u0138"+ + "\u013a\u0006\u0012\uffff\uffff\u0000\u0139\u0135\u0001\u0000\u0000\u0000"+ + "\u0139\u0137\u0001\u0000\u0000\u0000\u013a\u013b\u0001\u0000\u0000\u0000"+ + "\u013b\u013c\u00051\u0000\u0000\u013c\u013d\u0003.\u0017\u0000\u013d\u013e"+ + "\u00052\u0000\u0000\u013e%\u0001\u0000\u0000\u0000\u013f\u0140\u0005>"+ + "\u0000\u0000\u0140\u0142\u0006\u0013\uffff\uffff\u0000\u0141\u0143\u0003"+ + "(\u0014\u0000\u0142\u0141\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000"+ + "\u0000\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0145\u0007\u0001"+ + "\u0000\u0000\u0145\u0146\u0003.\u0017\u0000\u0146\u0147\u0005;\u0000\u0000"+ + "\u0147\'\u0001\u0000\u0000\u0000\u0148\u0149\u00053\u0000\u0000\u0149"+ + "\u014a\u0003.\u0017\u0000\u014a\u014b\u00054\u0000\u0000\u014b)\u0001"+ + "\u0000\u0000\u0000\u014c\u0156\u0003\u000e\u0007\u0000\u014d\u0156\u0003"+ + "\u0018\f\u0000\u014e\u0156\u0003\u001c\u000e\u0000\u014f\u0156\u0003\u0012"+ + "\t\u0000\u0150\u0156\u0003\u0016\u000b\u0000\u0151\u0152\u0003.\u0017"+ + "\u0000\u0152\u0153\u0005;\u0000\u0000\u0153\u0156\u0001\u0000\u0000\u0000"+ + "\u0154\u0156\u0003&\u0013\u0000\u0155\u014c\u0001\u0000\u0000\u0000\u0155"+ + "\u014d\u0001\u0000\u0000\u0000\u0155\u014e\u0001\u0000\u0000\u0000\u0155"+ + "\u014f\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0155"+ + "\u0151\u0001\u0000\u0000\u0000\u0155\u0154\u0001\u0000\u0000\u0000\u0156"+ + "+\u0001\u0000\u0000\u0000\u0157\u0159\u0003*\u0015\u0000\u0158\u0157\u0001"+ + "\u0000\u0000\u0000\u0159\u015c\u0001\u0000\u0000\u0000\u015a\u0158\u0001"+ + "\u0000\u0000\u0000\u015a\u015b\u0001\u0000\u0000\u0000\u015b\u015e\u0001"+ + "\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u015f\u0003"+ + "\f\u0006\u0000\u015e\u015d\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000"+ + "\u0000\u0000\u015f-\u0001\u0000\u0000\u0000\u0160\u0161\u0006\u0017\uffff"+ + "\uffff\u0000\u0161\u0162\u00030\u0018\u0000\u0162\u016a\u0001\u0000\u0000"+ + "\u0000\u0163\u0164\n\u0002\u0000\u0000\u0164\u0165\u0005%\u0000\u0000"+ + "\u0165\u0166\u00030\u0018\u0000\u0166\u0167\u0006\u0017\uffff\uffff\u0000"+ + "\u0167\u0169\u0001\u0000\u0000\u0000\u0168\u0163\u0001\u0000\u0000\u0000"+ + "\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000\u0000\u0000"+ + "\u016a\u016b\u0001\u0000\u0000\u0000\u016b/\u0001\u0000\u0000\u0000\u016c"+ + "\u016a\u0001\u0000\u0000\u0000\u016d\u016e\u0006\u0018\uffff\uffff\u0000"+ + "\u016e\u016f\u00032\u0019\u0000\u016f\u017a\u0001\u0000\u0000\u0000\u0170"+ + "\u0173\n\u0002\u0000\u0000\u0171\u0174\u0005\u0018\u0000\u0000\u0172\u0174"+ + "\u0005\u0019\u0000\u0000\u0173\u0171\u0001\u0000\u0000\u0000\u0173\u0172"+ + "\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000\u0000\u0000\u0175\u0176"+ + "\u00032\u0019\u0000\u0176\u0177\u0006\u0018\uffff\uffff\u0000\u0177\u0179"+ + "\u0001\u0000\u0000\u0000\u0178\u0170\u0001\u0000\u0000\u0000\u0179\u017c"+ + "\u0001\u0000\u0000\u0000\u017a\u0178\u0001\u0000\u0000\u0000\u017a\u017b"+ + "\u0001\u0000\u0000\u0000\u017b1\u0001\u0000\u0000\u0000\u017c\u017a\u0001"+ + "\u0000\u0000\u0000\u017d\u017e\u0006\u0019\uffff\uffff\u0000\u017e\u017f"+ + "\u00034\u001a\u0000\u017f\u018c\u0001\u0000\u0000\u0000\u0180\u0185\n"+ + "\u0002\u0000\u0000\u0181\u0186\u0005\u001c\u0000\u0000\u0182\u0186\u0005"+ + "\u001d\u0000\u0000\u0183\u0186\u0005\u001a\u0000\u0000\u0184\u0186\u0005"+ + "\u001b\u0000\u0000\u0185\u0181\u0001\u0000\u0000\u0000\u0185\u0182\u0001"+ + "\u0000\u0000\u0000\u0185\u0183\u0001\u0000\u0000\u0000\u0185\u0184\u0001"+ + "\u0000\u0000\u0000\u0186\u0187\u0001\u0000\u0000\u0000\u0187\u0188\u0003"+ + "4\u001a\u0000\u0188\u0189\u0006\u0019\uffff\uffff\u0000\u0189\u018b\u0001"+ + "\u0000\u0000\u0000\u018a\u0180\u0001\u0000\u0000\u0000\u018b\u018e\u0001"+ + "\u0000\u0000\u0000\u018c\u018a\u0001\u0000\u0000\u0000\u018c\u018d\u0001"+ + "\u0000\u0000\u0000\u018d3\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ + "\u0000\u0000\u018f\u0190\u0006\u001a\uffff\uffff\u0000\u0190\u0191\u0003"+ + "6\u001b\u0000\u0191\u019c\u0001\u0000\u0000\u0000\u0192\u0195\n\u0002"+ + "\u0000\u0000\u0193\u0196\u0005\u0014\u0000\u0000\u0194\u0196\u0005\u0015"+ + "\u0000\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0195\u0194\u0001\u0000"+ + "\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u0198\u00036\u001b"+ + "\u0000\u0198\u0199\u0006\u001a\uffff\uffff\u0000\u0199\u019b\u0001\u0000"+ + "\u0000\u0000\u019a\u0192\u0001\u0000\u0000\u0000\u019b\u019e\u0001\u0000"+ + "\u0000\u0000\u019c\u019a\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000"+ + "\u0000\u0000\u019d5\u0001\u0000\u0000\u0000\u019e\u019c\u0001\u0000\u0000"+ + "\u0000\u019f\u01a0\u0006\u001b\uffff\uffff\u0000\u01a0\u01a1\u00038\u001c"+ + "\u0000\u01a1\u01ac\u0001\u0000\u0000\u0000\u01a2\u01a5\n\u0002\u0000\u0000"+ + "\u01a3\u01a6\u0005\u0016\u0000\u0000\u01a4\u01a6\u0005\u0017\u0000\u0000"+ + "\u01a5\u01a3\u0001\u0000\u0000\u0000\u01a5\u01a4\u0001\u0000\u0000\u0000"+ + "\u01a6\u01a7\u0001\u0000\u0000\u0000\u01a7\u01a8\u00038\u001c\u0000\u01a8"+ + "\u01a9\u0006\u001b\uffff\uffff\u0000\u01a9\u01ab\u0001\u0000\u0000\u0000"+ + "\u01aa\u01a2\u0001\u0000\u0000\u0000\u01ab\u01ae\u0001\u0000\u0000\u0000"+ + "\u01ac\u01aa\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000\u0000\u0000"+ + "\u01ad7\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000\u0000\u01af"+ + "\u01b4\u0005 \u0000\u0000\u01b0\u01b4\u0005\u0015\u0000\u0000\u01b1\u01b4"+ + "\u0005!\u0000\u0000\u01b2\u01b4\u0005\"\u0000\u0000\u01b3\u01af\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b0\u0001\u0000\u0000\u0000\u01b3\u01b1\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b2\u0001\u0000\u0000\u0000\u01b4\u01b5\u0001"+ + "\u0000\u0000\u0000\u01b5\u01b6\u0003:\u001d\u0000\u01b6\u01b7\u0006\u001c"+ + "\uffff\uffff\u0000\u01b7\u01ba\u0001\u0000\u0000\u0000\u01b8\u01ba\u0003"+ + ":\u001d\u0000\u01b9\u01b3\u0001\u0000\u0000\u0000\u01b9\u01b8\u0001\u0000"+ + "\u0000\u0000\u01ba9\u0001\u0000\u0000\u0000\u01bb\u01c3\u0003<\u001e\u0000"+ + "\u01bc\u01bd\u00051\u0000\u0000\u01bd\u01be\u0006\u001d\uffff\uffff\u0000"+ + "\u01be\u01bf\u0003\n\u0005\u0000\u01bf\u01c0\u00052\u0000\u0000\u01c0"+ + "\u01c2\u0001\u0000\u0000\u0000\u01c1\u01bc\u0001\u0000\u0000\u0000\u01c2"+ + "\u01c5\u0001\u0000\u0000\u0000\u01c3\u01c1\u0001\u0000\u0000\u0000\u01c3"+ + "\u01c4\u0001\u0000\u0000\u0000\u01c4\u01c9\u0001\u0000\u0000\u0000\u01c5"+ + "\u01c3\u0001\u0000\u0000\u0000\u01c6\u01c8\u0003(\u0014\u0000\u01c7\u01c6"+ + "\u0001\u0000\u0000\u0000\u01c8\u01cb\u0001\u0000\u0000\u0000\u01c9\u01c7"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0001\u0000\u0000\u0000\u01ca;\u0001"+ + "\u0000\u0000\u0000\u01cb\u01c9\u0001\u0000\u0000\u0000\u01cc\u01d9\u0003"+ + "@ \u0000\u01cd\u01d9\u0005>\u0000\u0000\u01ce\u01d9\u0003>\u001f\u0000"+ + "\u01cf\u01d9\u0003$\u0012\u0000\u01d0\u01d9\u0003\"\u0011\u0000\u01d1"+ + "\u01d9\u0003 \u0010\u0000\u01d2\u01d9\u0003\u0014\n\u0000\u01d3\u01d5"+ + "\u00051\u0000\u0000\u01d4\u01d6\u0003.\u0017\u0000\u01d5\u01d4\u0001\u0000"+ + "\u0000\u0000\u01d5\u01d6\u0001\u0000\u0000\u0000\u01d6\u01d7\u0001\u0000"+ + "\u0000\u0000\u01d7\u01d9\u00052\u0000\u0000\u01d8\u01cc\u0001\u0000\u0000"+ + "\u0000\u01d8\u01cd\u0001\u0000\u0000\u0000\u01d8\u01ce\u0001\u0000\u0000"+ + "\u0000\u01d8\u01cf\u0001\u0000\u0000\u0000\u01d8\u01d0\u0001\u0000\u0000"+ + "\u0000\u01d8\u01d1\u0001\u0000\u0000\u0000\u01d8\u01d2\u0001\u0000\u0000"+ + "\u0000\u01d8\u01d3\u0001\u0000\u0000\u0000\u01d9=\u0001\u0000\u0000\u0000"+ + "\u01da\u01db\u0005*\u0000\u0000\u01db\u01dc\u0006\u001f\uffff\uffff\u0000"+ + "\u01dc\u01dd\u0003\u0004\u0002\u0000\u01dd\u01de\u00055\u0000\u0000\u01de"+ + "\u01df\u0003,\u0016\u0000\u01df\u01e0\u00056\u0000\u0000\u01e0\u01e1\u0003"+ + "\n\u0005\u0000\u01e1?\u0001\u0000\u0000\u0000\u01e2\u01e9\u0003D\"\u0000"+ + "\u01e3\u01e9\u0005?\u0000\u0000\u01e4\u01e9\u0005<\u0000\u0000\u01e5\u01e9"+ + "\u0005=\u0000\u0000\u01e6\u01e9\u0003B!\u0000\u01e7\u01e9\u0003F#\u0000"+ + "\u01e8\u01e2\u0001\u0000\u0000\u0000\u01e8\u01e3\u0001\u0000\u0000\u0000"+ + "\u01e8\u01e4\u0001\u0000\u0000\u0000\u01e8\u01e5\u0001\u0000\u0000\u0000"+ + "\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e7\u0001\u0000\u0000\u0000"+ + "\u01e9A\u0001\u0000\u0000\u0000\u01ea\u01eb\u00053\u0000\u0000\u01eb\u01ec"+ + "\u0003\n\u0005\u0000\u01ec\u01ed\u00054\u0000\u0000\u01edC\u0001\u0000"+ + "\u0000\u0000\u01ee\u01ef\u0007\u0002\u0000\u0000\u01efE\u0001\u0000\u0000"+ + "\u0000\u01f0\u01f1\u0005\u000b\u0000\u0000\u01f1\u01f2\u00051\u0000\u0000"+ + "\u01f2\u01f3\u0005:\u0000\u0000\u01f3\u01f4\u0005>\u0000\u0000\u01f4\u01f5"+ + "\u00052\u0000\u0000\u01f5G\u0001\u0000\u0000\u0000-JL^lqs\u0084\u0096"+ + "\u0099\u009e\u00ad\u00b3\u00bc\u00c0\u00c4\u00c9\u00ed\u00f4\u00f7\u00f9"+ + "\u00fd\u0113\u0119\u0128\u0139\u0142\u0155\u015a\u015e\u016a\u0173\u017a"+ + "\u0185\u018c\u0195\u019c\u01a5\u01ac\u01b3\u01b9\u01c3\u01c9\u01d5\u01d8"+ + "\u01e8"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase1Template/untitled/gen/main/grammer/FunctionCraftVisitor.java b/Phase1Template/untitled/gen/main/grammer/FunctionCraftVisitor.java index 9e6c7f6..cda99f1 100644 --- a/Phase1Template/untitled/gen/main/grammer/FunctionCraftVisitor.java +++ b/Phase1Template/untitled/gen/main/grammer/FunctionCraftVisitor.java @@ -154,6 +154,12 @@ public interface FunctionCraftVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); /** * Visit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. * @param ctx the parse tree @@ -178,12 +184,6 @@ public interface FunctionCraftVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); - /** - * Visit a parse tree produced by {@link FunctionCraftParser#appendExpression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitAppendExpression(FunctionCraftParser.AppendExpressionContext ctx); /** * Visit a parse tree produced by {@link FunctionCraftParser#accessExpression}. * @param ctx the parse tree diff --git a/Phase2/Jepeto-Compiler-main/.idea/misc.xml b/Phase2/Jepeto-Compiler-main/.idea/misc.xml index c8c822e..a256553 100644 --- a/Phase2/Jepeto-Compiler-main/.idea/misc.xml +++ b/Phase2/Jepeto-Compiler-main/.idea/misc.xml @@ -1,3 +1,4 @@ + - + \ No newline at end of file diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/Jepeto.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/Jepeto.class index 0b05bd6e135f2df1fa8186fd25e969acfc30d9be..2c606bbb33b23b1f3b04670fa5a9cfd930274580 100644 GIT binary patch delta 17 Zcmey%`j?gC)W2Q(7#J8FH*$Ps0su)62R;A* delta 17 Zcmey%`j?gC)W2Q(7#J9AHgbGr0su(&2RQ%$ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/JepetoCompiler.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/JepetoCompiler.class index c1dc003af95d6cbdb53b83e72a9d54994ec9f6fc..35075df0eca19d56ce086cc2220d0173083ed383 100644 GIT binary patch delta 17 Zcmcb?bAyND)W2Q(7#J8FH*y590RTh%24MgI delta 17 Zcmcb?bAyND)W2Q(7#J9AHgW{80RThe23!CD diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/Node.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/Node.class index bc53763464f5605ac768f9a69039a30261a710a3..2e9bc9ed93074eefb31ebdd2fa34dfe7be5a3980 100644 GIT binary patch delta 17 Zcmey)^_`33)W2Q(7#J8FH*(~&0su$d2DtzL delta 17 Zcmey)^_`33)W2Q(7#J9AHge>%0su$E2DAVG diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/Program.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/Program.class index 23200cd40435b56d71a43546af4220c414480804..18fa84dadca4e768823e67c1b01e143d03681572 100644 GIT binary patch delta 17 Zcmeys|AC+5)W2Q(7#J8FH*&mS2LMQi2QUBt delta 17 Zcmeys|AC+5)W2Q(7#J9AHgddR2LMQJ2P*&o diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/declaration/Declaration.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/declaration/Declaration.class index 9f1a75b27f399bb507cf472753995a0b42bc6aed..5ad92d48127cf8fa06e791eba3513791d6faad2a 100644 GIT binary patch delta 17 ZcmdnZw3~_J)W2Q(7#J8FH*y#=0subo1@Qm? delta 17 ZcmdnZw3~_J)W2Q(7#J9AHgXs<0subP1?&I- diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/declaration/FunctionDeclaration.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/declaration/FunctionDeclaration.class index e06ecd0ddf912629c42a670edd02d03404deb0a5..6f6ac1a8852790c125bb8dd36cb6a0fa4cc33578 100644 GIT binary patch delta 74 zcmX>qdQ_C-)W2Q(7#J8FH*yHEF>^2kO#Z+oA;{0h5X8k0%n-uP5X!@#!VorDo9)nM c4)ztyqJa#I4E_w^KrLKARs=&7Lkxo?0KRGuNB{r; delta 74 zcmX>qdQ_C-)W2Q(7#J9AHgX8D3G%Zs1aL6~G6b`sm!4NiCmQ7+a c2m1IAj^}%o57bs5&&rS6;}WN diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/Expression.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/Expression.class index aaccfdc07e843996e0328759a92757a7ab24deba..dc65ad15db9c5600010552cf6a17aaf9223be14a 100644 GIT binary patch delta 17 ZcmdnSw2g`5)W2Q(7#J8FH*)AP0suZo1>yhz delta 17 ZcmdnSw2g`5)W2Q(7#J9AHgf1O0suZP1>FDu diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/FunctionCall.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/FunctionCall.class index 5aeb9b5f382cb72dc8c5dc79568093d09756f689..c82959a0f8f692281d5d523f80f0eacfbc50196d 100644 GIT binary patch delta 17 YcmZpbXqDhN^>5cc1_lPljU0cu0X$;{g#Z8m delta 17 YcmZpbXqDhN^>5cc1_lP3jU0cu0X#|ufB*mh diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/Identifier.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/Identifier.class index bcaa2eacfa3600284605bcc0fda553981dab0d67..59d582252e71bcb396c7946befa0ba657417658b 100644 GIT binary patch delta 84 zcmbQnGmVGi)W2Q(7#J8FH*zpDD|0aDGBWUZrljVTWTs`N7R592voYv%F&HoyvNIU* mFz_=NPnKamwD|+GAd{#b10#bDg9%VG7m#JjV9sF4APE3aln^BV delta 85 zcmbQnGmVGi)W2Q(7#J9AHgYgC3-Yru=yEaWG3c{181OLgGZ;?RV?HFr!C=hDz~h;c nnpcvUmYG@<&$#&mvmleG4g({D5rYX(Hy4m)%3#i5$sh>;Cdv>p diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/ListAccessByIndex.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/ListAccessByIndex.class index 4e07333ffd2249b417822de50e35e29bd4dbd4a0..fdaf939acacc84974321f374a872531a8e672452 100644 GIT binary patch delta 17 Zcmey${gs>J)W2Q(7#J8FH*&mX1pr952Q>fy delta 17 Zcmey${gs>J)W2Q(7#J9AHgddW1pr8%2QUBt diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/ListSize.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/ListSize.class index 4a16ea022b11d7f5295266313115632a5ff9775a..9a66dd9bc60ce115c36dafc1c2d6bf3624756294 100644 GIT binary patch delta 17 Zcmcb>ae;&5)W2Q(7#J8FH*$Ee002UA20s7* delta 17 Zcmcb>ae;&5)W2Q(7#J9AHgb5d002T+208!$ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/UnaryExpression.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/UnaryExpression.class index 37bd9aac5c995bd01048eae2265894d5db26b23c..9f596176d5675c660ad717b3cdaeb0a399cbd789 100644 GIT binary patch delta 74 zcmdlexKWVf)W2Q(7#J8FH*$PpVdh}4nS6m&M3A42!H$c;p22~g!I6hSlEG;*H|wFz cPgr*_iP|zSGFUS>1GR7gSuPB23?2-U0M*wIo&W#< delta 90 zcmdlexKWVf)W2Q(7#J9AHgbGo5#(oMu;F5`Ww2vsu;*crWN?_Q#Ck}agTaZBK`=Bg sv8d9uqM#_XxHvOEFP?Gp6V@F}qSg$I42}%WKqI(-EEfhh1`h^F05t9t`2YX_ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/operators/BinaryOperator.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/operators/BinaryOperator.class index a6ec3d7509ab842fcfa8987c6aba137600258609..35b6f76cc75acdeb83d06abfe70ccb7ed863596e 100644 GIT binary patch delta 128 zcmdnT^O}e2)W2Q(7#J8F8NxSmnKKIt_@?i;+wK0~=5RB+1Fdz#ssmfjAIIF);*9{=!nm91Ns$ PSr73;#6lQC!E#{$@2VNw delta 84 zcmaFOvyX@C)W2Q(7#J9A7{WGknKN$=VK!uBWSrc_V$IIPV8&q1z%=(z93(@k7Ld8A8Bvp#XV25o!Pc diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/operators/UnaryOperator.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/operators/UnaryOperator.class index 76aad39bcbcba8cfecbe1214db8f05bbbb061c61..5d462352550c52bfd19ec05ad3a0456226c88cfe 100644 GIT binary patch delta 127 zcmbQhxtEjc)W2Q(7#J8F8H_h_butMG_@Ro delta 83 zcmdnXIf0Yw)W2Q(7#J9A7>qV@buvv}#`K(#adIECH9Hf7G=mHS)8yOCM!eb#Y(O5cc1_lPljT}GN06K^UT>t<8 delta 17 YcmZqRYvAKJ^>5cc1_lP3jT}GN06K35SO5S3 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/Value.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/Value.class index 4fd690fad3a5c151aa1ea5a746169cc30d45981d..932c05e58e07e9aa6a99e16f7b868086c5e9bcf0 100644 GIT binary patch delta 17 ZcmX@cbc~7P)W2Q(7#J8FH*(l90suf~1`+@O delta 17 ZcmX@cbc~7P)W2Q(7#J9AHgec80sufx1`PlJ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/VoidValue.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/VoidValue.class index 42072e4af941821c8530228c5d3c8ccbb683abbf..ded218ba52363e6f50b4b8f322260e2ca22d48e1 100644 GIT binary patch delta 17 ZcmaFM_Lhy~)W2Q(7#J8FH*%yh0{})329W>& delta 17 ZcmaFM_Lhy~)W2Q(7#J9AHgcpg0{}(#28;jz diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/BoolValue.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/BoolValue.class index 484be92afca9756319d9f33c598a04667a1ef112..57538484c9f25e1f27755e6641dd558d3b6c0c23 100644 GIT binary patch delta 83 zcmZ3=vy_M9)W2Q(7#J8FH*yFwD{(OBF*0yF<>%*wCFYc-#xwG>F&J<$7%~{KGZ^zQ l@H3c9)?q%h`9HHDlc+ueBZDr3DNrvLkY&bT!C=K82>?Ky5CQ-I delta 84 zcmZ3=vy_M9)W2Q(7#J9AHgX6v3-Yru=y5UVGZ?Tl81gXiGZ;;_Wj-Xx!C=D3!0nWu mpA(jtQ<@sjxcNV`Ad{#r10#bmgDFrm7m#JfV8LL;APE2;uMiFZ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/IntValue.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/IntValue.class index 0c03ccbf716567b3f4840cf707976d0d4739d899..79af5a09b82bc3c49c668ba62f70db2e01b60bc2 100644 GIT binary patch delta 82 zcmZ3$vw(-=)W2Q(7#J8FH*)YZD{?UCF*0y@=9Ppc=9H$!GxD=B7;rHdG8nNl81pdj kGnh=)U_P|@7qcLfs6GQDgD!(9P%9UZWyWB^V8tK_03L@AhyVZp delta 83 zcmZ3$vw(-=)W2Q(7#J9AHgfPY3-Yru=y5UVGZ?Tl81gXiGZ;;_U_K=3c50d}@ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/StringValue.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/ast/nodes/expression/values/primitive/StringValue.class index be23378aab28f777ba88300e02019b7a1150c963..143f5965ce6c4e280c863d2eeb96bf04f725e547 100644 GIT binary patch delta 85 zcmcb^bBBlH)W2Q(7#J8FH*$C|t8g&rGBWT6mlS2@rH3Wvl%~cr^0P7Mb1@h&7_u`M n@i6c+7*9@QKD614MUY8UkAaavhrtA>n+wP?WiV&3WRL^^sA~}Q delta 86 zcmcb^bBBlH)W2Q(7#J9AHgb3{3-Yru=yEaWG3c{181OLgGZ;=TVLl|x!C=hDz#Cjr ol$n7zVo+vhP~l+^W>B4cl<^Qh2ZK5z1E)`B kUaA74l>+1Db|wQxQ3VD@1~mo^pjIv*OOrvHL6<=i00STnga7~l diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/ArgumentNotDeclared.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/ArgumentNotDeclared.class index 21d9c5c18e86bbca4f8b883a1c598b9994d5822f..8ba038c94b536b746dca292f7f8fd2ce259b1dd2 100644 GIT binary patch delta 72 zcmeC;=;Giw^>5cc1_lPljU2xinK>BbC*NSw5aefLP~>7zVo+vhP~l5cc1_lP3jU2xi1^L++?RMT#%oQL4k`wkwJ-_L79hvlR;(jEyhEW bw=umEm1kgNkY!K>>fi#h)EG1vv=}4-o7fIt delta 92 zcmdnWzLlNh)W2Q(7#J9AHgX(f6y#@PkmF*IXHZ~gP~>6YWKf#?h4GLS2ZIVDgNRFM uK~83JVo9n(Vo`c&ZfahM0^{UuOs_;`85kLq8B~FWZ~<9r3>pkt43YpsI~0@v diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/DuplicateFunction.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/DuplicateFunction.class index a547bf8c7c5fb2052b59b514ac785f00e2a89534..33a409899f05c5cf19203ca3c03c8a174e57e7b2 100644 GIT binary patch delta 73 zcmdnWzLlNh)W2Q(7#J8FH*y?gWaeOyn>?RMT#%oQL4k`wkwJ-_L79hvlR;(jEyhEW bw=umEm1kgNkY!K>>fi#h)EG1vv=}4-o7fIt delta 92 zcmdnWzLlNh)W2Q(7#J9AHgX(f6y#@PkmF*IXHZ~gP~>6YWKf#?h4GLS2ZIVDgNRFM uK~83JVo9n(T4`Q#NoIbY0^{UuOs_;`85kLq8B~FWZ~<9r3>pkt43Ypsz!aAN diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/FunctionNotDeclared.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/FunctionNotDeclared.class index 01a6df862a056b9032c7db9fd005faf5a2806207..f0c2e8b6436cb487e7624e2b90fbad1e49fda693 100644 GIT binary patch delta 94 zcmdnTzK@;b)W2Q(7#J8FH*y?j)Z<`~V`LC_E6qzT$;{7FU{uJ6YWKf#?m+_D+2ZIVDgScC1 xUUErhex3rOLSBA}LP~0KPGV7N%H;h_uS8`T7#WlqRDtGj0a}-)W2Q(7#J8FH*#!ZWaeOyn>>NZLXe-0L4k`wkwJ-_L79hvlR;(jX~sj7 bPcXd_m1kgNkY!K>>fi#h)EG1vv=}4-rS%Sp delta 73 zcmX@kew>}-)W2Q(7#J9AHgarY6y#@PkmF*IXHZ~gP~>6YWKf#S#&n38gF$8TUPg<_ bCzxJ|$}%uAC^M)6b#MV$Y780-S`3l^gUAi+ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/VariableNotDeclared.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/compileErrors/nameErrors/VariableNotDeclared.class index 2c8d548911bf4526a8fd342c0cb35234c9d4d88f..93966135b98457e22318e73f7ebcd38732b8eb85 100644 GIT binary patch delta 94 zcmdnTzK@;b)W2Q(7#J8FH*y?j)Z<`~V`LByODxJvOv*`BU{uJn+a delta 95 zcmdnTzK@;b)W2Q(7#J9AHgX(i6y#@PkmF*IXHZ~gP~>6YWKf#?m+_D+2ZIVDgLqhC xQD$ONPO1Wz_hf^`;?s4W8{gEfOQP%9UZ<-*{`;K3jX0C`psJpcdz delta 83 zcmaFP|D2!W)W2Q(7#J9AHgfo~2=cQr*l;n}GT5;**z+(bGdN5xV>u+i!QjNmz~xq& lmt2yWpBK-#*@ATzlc+TVBZDJ@Gf*!VkmbVQ#^Avq2>@iD5l8?4 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/symbolTable/items/SymbolTableItem.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/symbolTable/items/SymbolTableItem.class index 67d1172153e0046f99ffc4ac72a1c92bd4ac8310..d7d25b1e7d7d00f5a256be9576a4aaa3d47cc780 100644 GIT binary patch delta 17 ZcmX@ka-48s5S#5gC>I^Pzx83WyD~@V8$Q`0BNEO-~a#s delta 75 zcmcb?d4rSV)W2Q(7#J9AHga?^3G%ZsXmK%UGw850=<+Z~Fz8KQ&2)%^gTa82fr*iE db1rijqo^hWBZEGJAy5w&kY&VR!eGWA2>^z$4C4R* diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/symbolTable/utils/Stack.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/symbolTable/utils/Stack.class index c51e662471aec073ff938f6c926629545592c79f..e46a4f25d2850e2b7fa0261a264d38993b9e0ddb 100644 GIT binary patch delta 17 YcmZqRY~bWL^>5cc1_lPljT{v$066dk(EtDd delta 17 YcmZqRY~bWL^>5cc1_lP3jT{v$065nL%m4rY diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTErrorDetector.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTErrorDetector.class index 7e337e3f080397d14ebdbab06fa09806e19745b2..4c2cdd138087554c79fc85484d25eec4a0a17631 100644 GIT binary patch delta 688 zcmZwFIYbcM|d3ZkW@#TJ%! z){zu~poL%~SXy`+@B6;*A(fEV%sjsL_!*ctKQ=qAuKp}65m8Jib80kD>}}JnzM^l*Cn1|_c!F`AFy{y{E&T0;z#Uj z5P$AV%sZD4{Y@%pz#fDy)r2xQOBz4vV04-THok2528H zf)*`WRP+s+=d3iddA1Jn?&h5PyZ3)K=dR?|W|iIA`UYdnFX>m6po`DD9elX4fmfX} zkJ_7gzRg@%a5)Tis}WBMp7A2%)xyGf<3-PA$b=6tr9Z2VXC{(r3?_Vm=@6vD513&j zo{9m?GN`JFRCp?$PAAfI9Z@r>8Char9{%WcD(<0VaxyzDOH!fY9dH2L*X1+WLWp3G zf#(JG2|EG@1bep@J0y$=91)fUjtOOf6GCT?HgihI37iqO1)T X*KhpNi-WT5XhqFv#-9X9$6EdYK)`j@ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTTreePrinter.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTTreePrinter.class index 45e360b856eb29d730b32ea804212fc214203e33..a2723fcdf2635a90dd7ecf714580a49aec84e6e0 100644 GIT binary patch delta 665 zcmZwEyGufG6bJD0z35eMskaB1py5!^!?tjUhAuT0v`2&GEwy}fwU=e3y&W3*{SVR5 zV7Np>MN84t{}2Q%wKYnIXbA3aI2_K0!#M}e`AlV2duiU@5s`t~wPpl5^(nKM%q6Dd zRy<=CO{)MJ6NWD&UNv2$TD+p(VpyLSCE84;V@fGr^E}Ve6|4LWmEqtLt5w*Tp2j=(;Cx~>?4f?=5DdJh;33j#L z-fyx`NPL04D)B}32Z<-yn-Wj4j}F-PrrAppUt+(J_%i#q#53%}gZBAZc1z+p_PWIL z?4J@}VUI@b^DXwY#0%_~5-+m9OMI2RXDBxQ?~mlb8b4LRIyQduCQ6*$1e7_pu+LRH RDfC45I8Z$}#4%1O_ygN!b{PNw delta 400 zcmXxgyDvj=6bJD0ZL03QkzBeo4Y%n?X>E;&NV=OC#e$+9Rj)q0>)D#bZ^UYl7^Is) zu}BR53MBpkqxeSd8BV_WZloX4^lVXXm`}|s-7*#A2 zmx==Mp;#f3N&jY*C@R*7redA2Qt1H+VuLRYpor3cmQi6^0&H^jaX^J7Ag|KIVaUc2 IPEeERABk06+yDRo diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/IVisitor.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/IVisitor.class index 64918f39ce535647cb42165f934f045f7550ab6f..973fe98e319f9c709259131929961c956d90eb7f 100644 GIT binary patch delta 17 YcmeAa>lEWS^>5cc1_lPljU0^J06MP)jQ{`u delta 17 YcmeAa>lEWS^>5cc1_lP3jU0^J06LZhhyVZp diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/Visitor.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/Visitor.class index ad7957d64ca7bd8f9664117a1d8a8635a6634027..6a63decdd06e9cbfc38c9a2e08e5a34dcb5fc557 100644 GIT binary patch delta 17 ZcmeyR`%9PO)W2Q(7#J8FH*$Ou0{~5K2bll> delta 17 ZcmeyR`%9PO)W2Q(7#J9AHgbFt0{~4`2b2H+ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoBaseListener.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoBaseListener.class index 43c7590204f3f9a7d7d31c2508e93cc0b2ade9a1..df74a7d8bd41428d8a40719475a0bd7d37e450c6 100644 GIT binary patch delta 17 ZcmbP`Ga-lL)W2Q(7#J8FH*#>80RTnZ26+Gg delta 17 ZcmbP`Ga-lL)W2Q(7#J9AHga&70RTnA26O-b diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoBaseVisitor.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoBaseVisitor.class index 3eeeb180c25a84d06c11a4be517ffb3a5dc68633..844aef84dffabfadfb00f18915fb819bdf82be28 100644 GIT binary patch delta 17 ZcmZ3PyE2#K)W2Q(7#J8FH*zdA0{}`)2Sxw@ delta 17 ZcmZ3PyE2#K)W2Q(7#J9AHgYU90{}`h2SES; diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoLexer.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoLexer.class index dd27b8bc4a0b3183bee7d838770d21e86f5f77bf..ba7c61107f82292422d5303daaa09042163a2b1d 100644 GIT binary patch delta 17 Zcmca?f7zbn)W2Q(7#J8FH*%bo2LMWC2T=e3 delta 17 Zcmca?f7zbn)W2Q(7#J9AHgcSn2LMV;2TT9} diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoListener.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoListener.class index 2849708fd4a560f4a1abf8719c81c9f8dec0e9fc..048f3b656d8a7a313c84e131ee1df2856ce5a207 100644 GIT binary patch delta 17 ZcmX?Oe#V^R)W2Q(7#J8FH*y@21^`Hd2Pgml delta 17 ZcmX?Oe#V^R)W2Q(7#J9AHgX)11^`HE2O|Ig diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AccessExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AccessExpressionContext.class index 707854235d4f3dc52098f1c80bfc7a1039d7376d..7eda56d7773b3e4bac338920445feafd7feaae77 100644 GIT binary patch delta 17 Zcmdn4yj_{&)W2Q(7#J8FH*%~O1OP)<2DbnJ delta 17 Zcmdn4yj_{&)W2Q(7#J9AHgc>N1OP)m2C@JE diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AdditiveExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AdditiveExpressionContext.class index 8b77217f4aaa3fcdde46b5aed2f62d86ec16b724..ba1a90b42ce827320bf3b8d10ba06699c81931a1 100644 GIT binary patch delta 29 lcmX>rc~(;3)W2Q(7#J8F8B*C9m>3yECI>Q!Y*bmv0|1m^2xR~O delta 29 lcmX>rc~(;3)W2Q(7#J9A7*g38m>3yECI>Q!Y*bmv0|1l^2w(sJ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AndExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AndExpressionContext.class index 0b451327688c9df80e117db73d0f3c4103c642eb..649299175c01904a6959131db5de4473b0d0af4d 100644 GIT binary patch delta 29 kcmZn>ZxI(b^>5cc1_lO4h6Hv7CPoI4$&O4S8&wjx0fMgwZ~y=R delta 29 kcmZn>ZxI(b^>5cc1_lNjh6Hv7CPoI4$&O4S8&wjx0fJfwYXATM diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AnonymousFunctionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AnonymousFunctionContext.class index c5ac0f1e5799172ef8d062ef25c0dec416677067..6753ce355ac75c6ccd2a22f4047c81d4cf2bf4a1 100644 GIT binary patch delta 28 kcmca6dQDW|)W2Q(7#J8F86wyjm>3yECN31&sIrL*0FTlLwEzGB delta 28 kcmca6dQDW|)W2Q(7#J9A7$Vpim>3yECN31&sIrL*0FQzQumAu6 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AppendExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$AppendExpressionContext.class index 6afbf5a2e343b9852eb34be05b5979a282cc0ffb..8404e69e72074647634916d08aff610e840ba34a 100644 GIT binary patch delta 17 ZcmbOsK0}=2)W2Q(7#J8FH*!qi1^_+F20Q=& delta 17 ZcmbOsK0}=2)W2Q(7#J9AHgZhh1^_*>1~&iz diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BlockContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BlockContext.class index c97ceb196926e13c4bd4c5c0aa7d71cfbd25ec74..eca8be95788a0134bcaa646ef3c141e15d453462 100644 GIT binary patch delta 17 ZcmaDP`ACxE)W2Q(7#J8FH*(zK0RTtb2Oj_c delta 17 ZcmaDP`ACxE)W2Q(7#J9AHgeqJ0RTtC2O0nX diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BodyContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BodyContext.class index e3d1d1c112e8f361ee0537f9eff04e933bb4b031..dcef8fc5b3bc545bbd658a77df2c3af261eebbcd 100644 GIT binary patch delta 29 lcmaDY^jb*Z)W2Q(7#J8F8G_gum>3yECNE?Z*{I^q2>_YB2x3yECNE?Z*{I^q2>_XB2xR~O diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BoolValueContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$BoolValueContext.class index 8da0e00a9c92a5d65a70b9f908164e143e68eb33..776e4cbfc2000e74c4324d8af85c054d03077d58 100644 GIT binary patch delta 17 ZcmaDM@Irv&)W2Q(7#J8FH*zF!002go2Aco? delta 17 ZcmaDM@Irv&)W2Q(7#J9AHgY6z002gP29^K- diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ConditionBodyContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ConditionBodyContext.class index 0327a8b08d6d446ae22f89584164109a98201e7e..6873968555a2135cd62b68532ac5635414de570b 100644 GIT binary patch delta 29 lcmcaDdRtWB)W2Q(7#J8F8DiKOm>3yECI_;JY*g9K1pt;f2z~$n delta 29 lcmcaDdRtWB)W2Q(7#J9A7-HBNm>3yECI_;JY*g9K1pt-f2zdYi diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$EqualityExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$EqualityExpressionContext.class index 9de5a4aa72a6cfac6a16a81b64bf244b70b7b690..79987103a4ee04be36ccdb9fefc678547e862ebf 100644 GIT binary patch delta 29 lcmdlXxkFOm)W2Q(7#J8F8B*C9m>3yECL6MdY*d-T0|1W82nYZG delta 29 lcmdlXxkFOm)W2Q(7#J9A7*g38m>3yECL6MdY*d-T0|1V82m=5B diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ExpressionContext.class index 8e393a036c6062c89764f209a36f46d82ba9a948..c3c5666ee6ce342e375324a141eb5ed1bec68107 100644 GIT binary patch delta 17 ZcmX>jc1Dcj)W2Q(7#J8FH*&ae0{}yn237z7 delta 17 ZcmX>jc1Dcj)W2Q(7#J9AHgdRd0{}yO22lV2 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionArgumentsContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionArgumentsContext.class index daa153e82c36ed33ba221f2f1f2f8f14d35c4585..6cc81a7bdeae34d451da9c4060c46824bcc5874c 100644 GIT binary patch delta 28 kcmaDM_CieH)W2Q(7#J8F8N%2Zm>3yECKifpRB_=30Fk>0JOBUy delta 28 kcmaDM_CieH)W2Q(7#J9A7{b^Ym>3yECKifpRB_=30Fi45Hvj+t diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionArgumentsDeclarationContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionArgumentsDeclarationContext.class index 2809f4caf978e8eaf62b4871796e9db989acc2a7..74b26f9e4afe4064db0f5287a7e4d0150514b572 100644 GIT binary patch delta 17 ZcmX>rc2rc23yECI_;JY*b3yECI_;JY*btd|FuG)W2Q(7#J8F83NfEm>3yECKs}ZY*bm!2>_C22wngH delta 29 lcmX>td|FuG)W2Q(7#J9A7y{WDm>3yECKs}ZY*bm!2>_B22w4CC diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionDeclarationContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$FunctionDeclarationContext.class index ee38216099660d7e198ea2bd01757bf096233424..a05e7a641f2c8377321fb641792aa12754c81d7b 100644 GIT binary patch delta 17 ZcmdlfzEhmz)W2Q(7#J8FH*##`1^_}W2A==` delta 17 ZcmdlfzEhmz)W2Q(7#J9AHgas_1^_}72ATi> diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IdentifierContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IdentifierContext.class index df7a7dc77fdbf4ff7b2bd63f40dd3a2afa0df809..5493112ad93b863da2a11603eeb9bf104ab12416 100644 GIT binary patch delta 29 lcmX>oa8N+t)W2Q(7#J8F89dn;m>3yECI>Q$Y*dlu005042ao^& delta 29 lcmX>oa8N+t)W2Q(7#J9A7(Ce-m>3yECI>Q$Y*dlu004~42a5mz diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IfStatementContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IfStatementContext.class index ccb1efd795df3d7c37d2eb7f17d62c14f9fcfc86..b3a16025a7a6c257b9b34db936d822547429c4d8 100644 GIT binary patch delta 17 YcmeB^>XYI)^>5cc1_lPljT~&e06WtKrT_o{ delta 17 YcmeB^>XYI)^>5cc1_lP3jT~&e06V$`p#T5? diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IfStatementWithReturnContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$IfStatementWithReturnContext.class index b49532461013ded6e077a7b1571ce757d0f7d622..61efbb0f7fac6c2ffe1f76f51c85f81b96aba0a1 100644 GIT binary patch delta 28 kcmZ1@wMI(d)W2Q(7#J8F88X=!m>3yECSDZTsKUVu0Eo8;1poj5 delta 28 kcmZ1@wMI(d)W2Q(7#J9A7&6%zm>3yECSDZTsKUVu0ElM@00000 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$JepetoContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$JepetoContext.class index ea875d08ca6d16d41b249c47d6614ef3c94ca87a..e8eb5a9299e26f1947bb31bae600f229b48b0c59 100644 GIT binary patch delta 17 ZcmbOyG*5`*)W2Q(7#J8FH*$z^0suV!1;PLT delta 17 ZcmbOyG*5`*)W2Q(7#J9AHgbq@0suVb1-$?O diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ListValueContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ListValueContext.class index 9d0ba3e5f86f9636eec599f65b1eae4f9d5df597..5f1e5681552cf6457ed2481e5fb459ac10d09381 100644 GIT binary patch delta 29 lcmZ1`vP?wa)W2Q(7#J8F8A8|@m>3yECI>Q!Y*b<50sx472U7q5 delta 29 lcmZ1`vP?wa)W2Q(7#J9A7(&3yECI>Q!Y*b<50sx372TlM0 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$MainContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$MainContext.class index fa5cd58e9e58ba2fea9c99adf5b1a8563fd3415e..9bcbe6c6c24e88cda2ae9326f82acf0f8ce014b1 100644 GIT binary patch delta 29 lcmaDR`b<>d)W2Q(7#J8F8KT)4m>3yECO>2m*{E`e3jmy#2`&Ht delta 29 lcmaDR`b<>d)W2Q(7#J9A7^2x3m>3yECO>2m*{E`e3jmx#2`K;o diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$MultiplicativeExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$MultiplicativeExpressionContext.class index 686ebb84472e72ff8d9b079367501dcb32282138..2ea97049b7048ea5d1f886adab16e7e0e36227fc 100644 GIT binary patch delta 29 lcmca3c}G&<)W2Q(7#J8F8B*C9m>3yECNnaNY*g970|1qs2txn> delta 29 lcmca3c}G&<)W2Q(7#J9A7*g38m>3yECNnaNY*g970|1ps2tEJ+ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$OtherExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$OtherExpressionContext.class index 59b0c682fa27e5ff8005b5977428ca89c56c469f..6fa1a615c685caba8710d4d195fe07e5ccff7421 100644 GIT binary patch delta 17 ZcmcaCd0CR<)W2Q(7#J8FH*%cj0RTnb2J!#^ delta 17 ZcmcaCd0CR<)W2Q(7#J9AHgcTi0RTnC2JHX< diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$PreUnaryExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$PreUnaryExpressionContext.class index 3deec59c1fa5d843a5322537ae2010ef24683c1a..c48b892d2f4d3667655d23b372a898be84728aee 100644 GIT binary patch delta 17 ZcmZ20wpNVe)W2Q(7#J8FH*%1@r&_ diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$PrintStatementContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$PrintStatementContext.class index b694ea2302817be29e01ad65ef8a1154a5ecd366..d3bf8dc321b021e7a62258bf9a4ad4c04ad1f375 100644 GIT binary patch delta 17 YcmZn`Z5HJ?^>5cc1_lPljU3fn06N44_y7O^ delta 17 YcmZn`Z5HJ?^>5cc1_lP3jU3fn06MD$^8f$< diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ProgramContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ProgramContext.class index 39edba1bfb8ddaccaa1ee615fc4519d726b5d646..3222ae41b37574fa1e977859c85a2e247ab0bc07 100644 GIT binary patch delta 17 YcmeAc?H1)Y^>5cc1_lPljU3Hf06WwM5C8xG delta 17 YcmeAc?H1)Y^>5cc1_lP3jU3Hf06V(|3jhEB diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$RelationalExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$RelationalExpressionContext.class index 5c2d098b78693d8dc60a6fbbfeba1f531144d724..0a10460090a2a9cb48c221ae4a9f028760c801a5 100644 GIT binary patch delta 17 ZcmX>sd03L;)W2Q(7#J8FH*)Oe0RTh32EqUU delta 17 ZcmX>sd03L;)W2Q(7#J9AHgfFd0RTg#2E70P diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ReturnStatementContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ReturnStatementContext.class index 807433c3f912306cd41f81c0b9d3cf5a3e08ab9e..4ed189786a2a21cec11e704a476dcfa5382fb033 100644 GIT binary patch delta 17 Zcmew%`a_iC)W2Q(7#J8FH*$R70su-*2Uh?9 delta 17 Zcmew%`a_iC)W2Q(7#J9AHgbI60su-i2T}k4 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SingleStatementContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SingleStatementContext.class index dc52cdffb11d6964c82d999f014524fdb4b44e05..6701363f4c9fffe9d953ca9b9a493510e3719737 100644 GIT binary patch delta 17 ZcmbO(GF^n@)W2Q(7#J8FH*)ZE0RTKs1+oAD delta 17 ZcmbO(GF^n@)W2Q(7#J9AHgfQD0RTKT1+4%8 diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SizeExpressionContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SizeExpressionContext.class index 3a3061ef07a6d0ad06a1d4880f1653aa0fbb3546..8f0801b2799201b482199999f037f9ba080e1ee9 100644 GIT binary patch delta 17 ZcmaDR@JxW?)W2Q(7#J8FH*&;r002f(29*E+ delta 17 ZcmaDR@JxW?)W2Q(7#J9AHgd#q002fg29N*% diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SplitedExpressionsWithCommaAndKeyContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SplitedExpressionsWithCommaAndKeyContext.class index 3fc9961b9f611a5cfc4bdc37eced6543944c5b34..083f7f1bc0a81a4becb543cf58c1b6a5236a5e19 100644 GIT binary patch delta 17 ZcmcaDb6bYv)W2Q(7#J8FH*y5?0RToy29f{( delta 17 ZcmcaDb6bYv)W2Q(7#J9AHgW{>0RToZ28{p! diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SplitedExpressionsWithCommaContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$SplitedExpressionsWithCommaContext.class index c19d25f50a5411a0f3a7bc6d5cbbb746b97c857a..454a4c2f7802d117cc54cbf0413308b34a2f4469 100644 GIT binary patch delta 17 ZcmcaBepj61)W2Q(7#J8FH*#F%1^`C&2MYiI delta 17 ZcmcaBepj61)W2Q(7#J9AHga6$1^`Cf2L=ED diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$StatementContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$StatementContext.class index 7f6de88d6c4d6b5f3636a1e19c4d237e6b5c2bbe..7e5a656cef2b4ee6ac3f82bb90a78810fde8d3e3 100644 GIT binary patch delta 28 kcmew&{zY8i)W2Q(7#J8F84}nTm>3yECMJq(RJp(n0F}E4+yDRo delta 28 kcmew&{zY8i)W2Q(7#J9A7!ueSm>3yECMJq(RJp(n0F`S9*8l(j diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ValuesContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$ValuesContext.class index 6ee65714d9c0e21393a84179978f5389e7909289..78e770f31702cf21a335702666ef2e4d7716ce3d 100644 GIT binary patch delta 29 lcmdlfx>Ho()W2Q(7#J8F8DiKOm>3yECOfi-Y*d-b1ptl|2nYZG delta 29 lcmdlfx>Ho()W2Q(7#J9A7-HBNm>3yECOfi-Y*d-b1ptk|2m=5B diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$VoidValueContext.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser$VoidValueContext.class index 6b033184fc8662165d28acb9a2f8b0af7565b59f..83cad2f694fbc6c2f86d7bf6f28c86d7102b7e45 100644 GIT binary patch delta 29 lcmdlluwOvn)W2Q(7#J8F89dn;m>3yECI>Q$Y*dlv004}w2Z{gy delta 29 lcmdlluwOvn)W2Q(7#J9A7(Ce-m>3yECI>Q$Y*dlv004|w2ZaCt diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoParser.class index 22a4dac8991210738d10105aa3bff8cd2a990bce..7dd0229813b147293297c42584cdc7d1e46cff03 100644 GIT binary patch delta 19 bcmZqp&D8LliR0A2UHcdq7#ufpRO|%+TDAys delta 19 bcmZqp&D8LliR0A2UHcdq7;H9jRO|%+TAc`O diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoVisitor.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/parsers/JepetoVisitor.class index 20089020d51b0e0064b483747de361b538e790de..22c7937c950d92eb0edbf64565084bbf786bc20d 100644 GIT binary patch delta 17 ZcmezA`qP!;)W2Q(7#J8FH*$Pb0sv4b2hsol delta 17 ZcmezA`qP!;)W2Q(7#J9AHgbGa0sv4C2h9Kg diff --git a/Phase2/Jepeto-Compiler-main/samples/sample1.jp b/Phase2/Jepeto-Compiler-main/samples/sample1.jp index 815a662..7d55058 100644 --- a/Phase2/Jepeto-Compiler-main/samples/sample1.jp +++ b/Phase2/Jepeto-Compiler-main/samples/sample1.jp @@ -1,17 +1,75 @@ -main : f1(a = 2, b = "stign"); +main: f(a = 1, + c = 2); +func f(a, + b):{ + return dd; + if a > + b: + return + d; + else: + return + e; -func f1(b, a, c) : { - print(a + b); - if (c) : - { + return + f; + print( + g()); +} + +func f(a, + c): +{ + return a; + print( + h(a = 1, + b = 2)); +} + +func f(x, + y): + return + x; + +func g(a, b, c, + a, b, + b):{ + return a; + return f(x = 1, + y = 2); } - f2(a::b::(c or ~c)::a.size); +func plc(): return - void; + plc(); + +func PLC(plc, + os, + db): + return plc + + os + + db * + a + + CN; + +func CN(a, aa, + aaa, aaaa):{ + print(a + + aa + + + aa); + return Cn(1, + + 2, + + 3); } -func f2() : - return (a, b) -> {return a + f4();}; +func conflict(f, + + +PLC): + return + Cn(a = 50); \ No newline at end of file diff --git a/Phase2Template/Phase2/.gitignore b/Phase2Template/Phase2/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/Phase2Template/Phase2/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/Phase2Template/Phase2/.idea/.gitignore b/Phase2Template/Phase2/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Phase2Template/Phase2/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Phase2Template/Phase2/.idea/misc.xml b/Phase2Template/Phase2/.idea/misc.xml new file mode 100644 index 0000000..e717da3 --- /dev/null +++ b/Phase2Template/Phase2/.idea/misc.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/.idea/modules.xml b/Phase2Template/Phase2/.idea/modules.xml new file mode 100644 index 0000000..0dc8126 --- /dev/null +++ b/Phase2Template/Phase2/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/.idea/uiDesigner.xml b/Phase2Template/Phase2/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/Phase2Template/Phase2/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/.idea/vcs.xml b/Phase2Template/Phase2/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/Phase2Template/Phase2/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/Phase2.iml b/Phase2Template/Phase2/Phase2.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/Phase2Template/Phase2/Phase2.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/FLCompiler.java b/Phase2Template/Phase2/src/main/FLCompiler.java new file mode 100644 index 0000000..339ae28 --- /dev/null +++ b/Phase2Template/Phase2/src/main/FLCompiler.java @@ -0,0 +1,4 @@ +package main; + +public class FLCompiler { +} diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java new file mode 100644 index 0000000..487b45a --- /dev/null +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -0,0 +1,4 @@ +package main; + +public class FunctionCraft { +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/Node.java b/Phase2Template/Phase2/src/main/ast/nodes/Node.java new file mode 100644 index 0000000..b53cfdc --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/Node.java @@ -0,0 +1,17 @@ +package main.ast.nodes; + +import main.compileError.CompileError; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public abstract class Node { + private int line; + private ArrayListcompileErrors = new ArrayList<>(); + + public void setLine(int line){this.line = line;} + public int getLine(){return this.line;} + public abstract String toString(); + public void addCompileError(CompileError ce){this.compileErrors.add(ce);} + public abstract T accept(IVisitor visitor); +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/Program.java b/Phase2Template/Phase2/src/main/ast/nodes/Program.java new file mode 100644 index 0000000..6f44179 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/Program.java @@ -0,0 +1,5 @@ +package main.ast.nodes; + +public class Program extends Node{ + +} diff --git a/Phase2Template/Phase2/src/main/compileError/CompileError.java b/Phase2Template/Phase2/src/main/compileError/CompileError.java new file mode 100644 index 0000000..b0f2623 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/CompileError.java @@ -0,0 +1,13 @@ +package main.compileError; + +public class CompileError extends Exception{ + private int line; + protected String errorMessage; + public CompileError(int line, String errorMessage){ + this.line = line; + this.errorMessage = errorMessage; + } + public String getErrorMessage(){ + return "Line " + this.line + " : " + this.errorMessage; + } +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 new file mode 100644 index 0000000..f27169d --- /dev/null +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -0,0 +1,309 @@ +grammar FunctionCraft; + + + +program returns [Program flProgram]: + { + + } + ( + functionDeclaration + | patternMatching + )* + main; + +functionDeclaration: + DEF IDENTIFIER { System.out.println("FuncDec: " + $IDENTIFIER.text); } + functionArgumentsDeclaration + body + END + ; + +functionArgumentsDeclaration: + LPAR + (IDENTIFIER + (COMMA IDENTIFIER)* + ( + COMMA LBRACK IDENTIFIER ASSIGN expression (COMMA IDENTIFIER ASSIGN expression)* RBRACK + )? + )? RPAR; + +patternMatching: + PATTERN IDENTIFIER { System.out.println("PatternDec: " + $IDENTIFIER.text); } + LPAR IDENTIFIER RPAR + (PATTERN_MATCHING_SEPARATOR condition ASSIGN expression)* + SEMICOLLON; + +main: + DEF MAIN { System.out.println("MAIN"); } + LPAR RPAR + body + END; + +functionArguments: + (expression (COMMA expression)* )?; + + +returnStatement: + RETURN { System.out.println("RETURN"); } (expression)? SEMICOLLON; + +ifStatement: + IF { System.out.println("Decision: IF"); } condition + body + (ELSEIF { System.out.println("Decision: ELSE IF"); } condition body)* + (ELSE { System.out.println("Decision: ELSE"); } body)? END; + +condition: + (LPAR expression RPAR ((AND | OR) (LPAR)? condition (RPAR)?)*)*; + +putsStatement: + PUTS { System.out.println("Built-In: PUTS"); } LPAR expression + RPAR SEMICOLLON; + +lenStatement: + LEN { System.out.println("Built-In: LEN"); } LPAR expression RPAR; + +pushStatement: + PUSH { System.out.println("Built-In: PUSH"); } LPAR expression COMMA expression RPAR SEMICOLLON; + +loopDoStatement: + LOOP DO { System.out.println("Loop: DO"); } + loopBody + END; + +loopBody: + (statement + | BREAK { System.out.println("Control: BREAK"); } (IF condition)? SEMICOLLON + | NEXT { System.out.println("Control: NEXT"); } (IF condition)? SEMICOLLON + )* + ( + returnStatement + )?; + +forStatement: + FOR { System.out.println("Loop: FOR"); } IDENTIFIER IN range + loopBody + END; + +range: + (LPAR expression DOUBLEDOT expression RPAR) + | (LBRACK (expression (COMMA expression)*) RBRACK) + | IDENTIFIER; + +filterStatement: + { System.out.println("Structure: FILTER"); } LBRACK expression SEPARATOR IDENTIFIER + ARROW range COMMA expression (COMMA expression)* RBRACK; + +matchPatternStatement: + { System.out.println("Built-In: MATCH"); } IDENTIFIER DOT MATCH LPAR expression RPAR; + +chopAndChompStatement: + (CHOP { System.out.println("Built-In: CHOP"); } + | CHOMP { System.out.println("Built-In: CHOMP"); }) LPAR expression RPAR; + +assignment: + IDENTIFIER { System.out.println("Assignment: " + $IDENTIFIER.text); } (accessList)? + (ASSIGN + | PLUS_ASSIGN + | MINUS_ASSIGN + | DIVIDE_ASSIGN + | MULT_ASSIGN + | MOD_ASSIGN) + expression SEMICOLLON; + +accessList: + LBRACK expression RBRACK; + +statement: + ifStatement + | loopDoStatement + | forStatement + | putsStatement + | pushStatement + | expression SEMICOLLON + | assignment + ; + + +body: + (statement)* + ( + returnStatement + )?; + + +expression: + expression APPEND eqaulityExpression { System.out.println("Operator: " + $APPEND.text); } + | eqaulityExpression; + + +eqaulityExpression: + eqaulityExpression + (op = EQUAL + | op = NOT_EQUAL + ) relationalExpression { System.out.println("Operator: " + $op.text); } + | relationalExpression; + +relationalExpression: + relationalExpression + (op = GREATER_THAN + | op = LESS_THAN + | op = LESS_EQUAL_THAN + | op = GREATER_EQUAL_THAN + ) additiveExpression { System.out.println("Operator: " + $op.text); } + | additiveExpression; + + +additiveExpression: + additiveExpression + (op = PLUS + | op = MINUS + ) multiplicativeExpression { System.out.println("Operator: " + $op.text); } + | multiplicativeExpression; + + +multiplicativeExpression: + multiplicativeExpression + (op = MULT + | op = DIVIDE + ) preUnaryExpression { System.out.println("Operator: " + $op.text); } + | preUnaryExpression; + + +preUnaryExpression: + (op = NOT + | op = MINUS + | op = INCREMENT + | op = DECREMENT + ) accessExpression { System.out.println("Operator: " + $op.text); } + | accessExpression; + + +accessExpression: + otherExpression + (LPAR { System.out.println("FunctionCall"); } functionArguments + RPAR)* + (accessList)* + ; + +otherExpression: + values + | IDENTIFIER + | lambdaFunction + | chopAndChompStatement + | matchPatternStatement + | filterStatement + | lenStatement + | LPAR (expression)? RPAR; + + + +lambdaFunction: + ARROW { System.out.println("Structure: LAMBDA"); } functionArgumentsDeclaration + LBRACE body RBRACE functionArguments + ; + + +values: + boolValue + | STRING_VALUE + | INT_VALUE + | FLOAT_VALUE + | listValue + | functionPointer; + +listValue: + LBRACK functionArguments + RBRACK + ; + +boolValue: + TRUE + | FALSE + ; + +functionPointer: + METHOD LPAR COLON IDENTIFIER RPAR; + + +DEF: 'def'; +END: 'end'; +MAIN: 'main'; + +PUTS: 'puts'; +PUSH: 'push'; +LEN: 'len'; +RETURN: 'return'; + +IF: 'if'; +ELSE: 'else'; +ELSEIF: 'elseif'; + +METHOD: 'method'; + +PATTERN: 'pattern'; +MATCH: 'match'; +LOOP: 'loop'; +FOR: 'for'; +IN: 'in'; +DO: 'do'; + +CHOP: 'chop'; +CHOMP: 'chomp'; + +PLUS: '+'; +MINUS: '-'; +MULT: '*'; +DIVIDE: '/'; + +EQUAL: '=='; +NOT_EQUAL: '!='; +LESS_EQUAL_THAN: '<='; +GREATER_EQUAL_THAN: '>='; +GREATER_THAN: '>'; +LESS_THAN: '<'; + +AND: '&&'; +OR: '||'; +NOT: '!'; +INCREMENT: '++'; +DECREMENT: '--'; + +PATTERN_MATCHING_SEPARATOR: ' |'; +SEPARATOR: '|'; +APPEND: '<<'; + +TRUE: 'true'; +FALSE: 'false'; + +BREAK: 'break'; +NEXT: 'next'; + +ARROW: '->'; + +PLUS_ASSIGN: '+='; +MINUS_ASSIGN: '-='; +MULT_ASSIGN: '*='; +DIVIDE_ASSIGN: '/='; +MOD_ASSIGN: '%='; +ASSIGN: '='; + +LPAR: '('; +RPAR: ')'; +LBRACK: '['; +RBRACK: ']'; +LBRACE: '{'; +RBRACE: '}'; + +COMMA: ','; +DOT: '.'; +DOUBLEDOT: '..'; +COLON: ':'; +SEMICOLLON: ';'; + +INT_VALUE: '0' | [1-9][0-9]*; +FLOAT_VALUE: [0-9]* '.' [0-9]+; +IDENTIFIER: [a-zA-Z_][A-Za-z0-9_]*; +STRING_VALUE: '"'~["]*'"'; +COMMENT: ('#' ~( '\r' | '\n')* | ('=begin' .*? '=end')) -> skip; +WS: ([ \t\n\r]) -> skip; \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java new file mode 100644 index 0000000..9bc01e4 --- /dev/null +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -0,0 +1,4 @@ +package main.visitor; + +public interface IVisitor { +} diff --git a/Phase2Template/Phase2/src/main/visitor/Visitor.java b/Phase2Template/Phase2/src/main/visitor/Visitor.java new file mode 100644 index 0000000..d8dc171 --- /dev/null +++ b/Phase2Template/Phase2/src/main/visitor/Visitor.java @@ -0,0 +1,4 @@ +package main.visitor; + +public class Visitor implements IVisitor { +} diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp new file mode 100644 index 0000000..9942363 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp @@ -0,0 +1,177 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +program +functionDeclaration +functionArgumentsDeclaration +patternMatching +main +functionArguments +returnStatement +ifStatement +condition +putsStatement +lenStatement +pushStatement +loopDoStatement +loopBody +forStatement +range +filterStatement +matchPatternStatement +chopAndChompStatement +assignment +accessList +statement +body +expression +eqaulityExpression +relationalExpression +additiveExpression +multiplicativeExpression +preUnaryExpression +accessExpression +otherExpression +lambdaFunction +values +listValue +boolValue +functionPointer + + +atn: +[4, 1, 65, 503, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 5, 0, 75, 8, 0, 10, 0, 12, 0, 78, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 93, 8, 2, 10, 2, 12, 2, 96, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 107, 8, 2, 10, 2, 12, 2, 110, 9, 2, 1, 2, 1, 2, 3, 2, 114, 8, 2, 3, 2, 116, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 131, 8, 3, 10, 3, 12, 3, 134, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 149, 8, 5, 10, 5, 12, 5, 152, 9, 5, 3, 5, 154, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 159, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 172, 8, 7, 10, 7, 12, 7, 175, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 180, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 189, 8, 8, 1, 8, 1, 8, 3, 8, 193, 8, 8, 5, 8, 195, 8, 8, 10, 8, 12, 8, 198, 9, 8, 5, 8, 200, 8, 8, 10, 8, 12, 8, 203, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 245, 8, 13, 1, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 3, 13, 254, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 274, 8, 15, 10, 15, 12, 15, 277, 9, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 295, 8, 16, 10, 16, 12, 16, 298, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 314, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 3, 19, 323, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 342, 8, 21, 1, 22, 5, 22, 345, 8, 22, 10, 22, 12, 22, 348, 9, 22, 1, 22, 3, 22, 351, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 361, 8, 23, 10, 23, 12, 23, 364, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 372, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 377, 8, 24, 10, 24, 12, 24, 380, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 390, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 395, 8, 25, 10, 25, 12, 25, 398, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 406, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 411, 8, 26, 10, 26, 12, 26, 414, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 422, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 427, 8, 27, 10, 27, 12, 27, 430, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 436, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 442, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 450, 8, 29, 10, 29, 12, 29, 453, 9, 29, 1, 29, 5, 29, 456, 8, 29, 10, 29, 12, 29, 459, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 470, 8, 30, 1, 30, 3, 30, 473, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 489, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 0, 5, 46, 48, 50, 52, 54, 36, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 0, 3, 1, 0, 30, 31, 1, 0, 43, 48, 1, 0, 38, 39, 532, 0, 76, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 4, 88, 1, 0, 0, 0, 6, 119, 1, 0, 0, 0, 8, 137, 1, 0, 0, 0, 10, 153, 1, 0, 0, 0, 12, 155, 1, 0, 0, 0, 14, 162, 1, 0, 0, 0, 16, 201, 1, 0, 0, 0, 18, 204, 1, 0, 0, 0, 20, 211, 1, 0, 0, 0, 22, 217, 1, 0, 0, 0, 24, 226, 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 255, 1, 0, 0, 0, 30, 281, 1, 0, 0, 0, 32, 283, 1, 0, 0, 0, 34, 301, 1, 0, 0, 0, 36, 313, 1, 0, 0, 0, 38, 319, 1, 0, 0, 0, 40, 328, 1, 0, 0, 0, 42, 341, 1, 0, 0, 0, 44, 346, 1, 0, 0, 0, 46, 352, 1, 0, 0, 0, 48, 365, 1, 0, 0, 0, 50, 381, 1, 0, 0, 0, 52, 399, 1, 0, 0, 0, 54, 415, 1, 0, 0, 0, 56, 441, 1, 0, 0, 0, 58, 443, 1, 0, 0, 0, 60, 472, 1, 0, 0, 0, 62, 474, 1, 0, 0, 0, 64, 488, 1, 0, 0, 0, 66, 490, 1, 0, 0, 0, 68, 494, 1, 0, 0, 0, 70, 496, 1, 0, 0, 0, 72, 75, 3, 2, 1, 0, 73, 75, 3, 6, 3, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 80, 3, 8, 4, 0, 80, 1, 1, 0, 0, 0, 81, 82, 5, 1, 0, 0, 82, 83, 5, 62, 0, 0, 83, 84, 6, 1, -1, 0, 84, 85, 3, 4, 2, 0, 85, 86, 3, 44, 22, 0, 86, 87, 5, 2, 0, 0, 87, 3, 1, 0, 0, 0, 88, 115, 5, 49, 0, 0, 89, 94, 5, 62, 0, 0, 90, 91, 5, 55, 0, 0, 91, 93, 5, 62, 0, 0, 92, 90, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 98, 5, 55, 0, 0, 98, 99, 5, 51, 0, 0, 99, 100, 5, 62, 0, 0, 100, 101, 5, 48, 0, 0, 101, 108, 3, 46, 23, 0, 102, 103, 5, 55, 0, 0, 103, 104, 5, 62, 0, 0, 104, 105, 5, 48, 0, 0, 105, 107, 3, 46, 23, 0, 106, 102, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 5, 52, 0, 0, 112, 114, 1, 0, 0, 0, 113, 97, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 116, 1, 0, 0, 0, 115, 89, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 118, 5, 50, 0, 0, 118, 5, 1, 0, 0, 0, 119, 120, 5, 12, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 3, -1, 0, 122, 123, 5, 49, 0, 0, 123, 124, 5, 62, 0, 0, 124, 132, 5, 50, 0, 0, 125, 126, 5, 35, 0, 0, 126, 127, 3, 16, 8, 0, 127, 128, 5, 48, 0, 0, 128, 129, 3, 46, 23, 0, 129, 131, 1, 0, 0, 0, 130, 125, 1, 0, 0, 0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 135, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 135, 136, 5, 59, 0, 0, 136, 7, 1, 0, 0, 0, 137, 138, 5, 1, 0, 0, 138, 139, 5, 3, 0, 0, 139, 140, 6, 4, -1, 0, 140, 141, 5, 49, 0, 0, 141, 142, 5, 50, 0, 0, 142, 143, 3, 44, 22, 0, 143, 144, 5, 2, 0, 0, 144, 9, 1, 0, 0, 0, 145, 150, 3, 46, 23, 0, 146, 147, 5, 55, 0, 0, 147, 149, 3, 46, 23, 0, 148, 146, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 145, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 11, 1, 0, 0, 0, 155, 156, 5, 7, 0, 0, 156, 158, 6, 6, -1, 0, 157, 159, 3, 46, 23, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 161, 5, 59, 0, 0, 161, 13, 1, 0, 0, 0, 162, 163, 5, 8, 0, 0, 163, 164, 6, 7, -1, 0, 164, 165, 3, 16, 8, 0, 165, 173, 3, 44, 22, 0, 166, 167, 5, 10, 0, 0, 167, 168, 6, 7, -1, 0, 168, 169, 3, 16, 8, 0, 169, 170, 3, 44, 22, 0, 170, 172, 1, 0, 0, 0, 171, 166, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 179, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 9, 0, 0, 177, 178, 6, 7, -1, 0, 178, 180, 3, 44, 22, 0, 179, 176, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 5, 2, 0, 0, 182, 15, 1, 0, 0, 0, 183, 184, 5, 49, 0, 0, 184, 185, 3, 46, 23, 0, 185, 196, 5, 50, 0, 0, 186, 188, 7, 0, 0, 0, 187, 189, 5, 49, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 3, 16, 8, 0, 191, 193, 5, 50, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 186, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 183, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 17, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 206, 6, 9, -1, 0, 206, 207, 5, 49, 0, 0, 207, 208, 3, 46, 23, 0, 208, 209, 5, 50, 0, 0, 209, 210, 5, 59, 0, 0, 210, 19, 1, 0, 0, 0, 211, 212, 5, 6, 0, 0, 212, 213, 6, 10, -1, 0, 213, 214, 5, 49, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 5, 50, 0, 0, 216, 21, 1, 0, 0, 0, 217, 218, 5, 5, 0, 0, 218, 219, 6, 11, -1, 0, 219, 220, 5, 49, 0, 0, 220, 221, 3, 46, 23, 0, 221, 222, 5, 55, 0, 0, 222, 223, 3, 46, 23, 0, 223, 224, 5, 50, 0, 0, 224, 225, 5, 59, 0, 0, 225, 23, 1, 0, 0, 0, 226, 227, 5, 14, 0, 0, 227, 228, 5, 17, 0, 0, 228, 229, 6, 12, -1, 0, 229, 230, 3, 26, 13, 0, 230, 231, 5, 2, 0, 0, 231, 25, 1, 0, 0, 0, 232, 248, 3, 42, 21, 0, 233, 234, 5, 40, 0, 0, 234, 237, 6, 13, -1, 0, 235, 236, 5, 8, 0, 0, 236, 238, 3, 16, 8, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 248, 5, 59, 0, 0, 240, 241, 5, 41, 0, 0, 241, 244, 6, 13, -1, 0, 242, 243, 5, 8, 0, 0, 243, 245, 3, 16, 8, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 5, 59, 0, 0, 247, 232, 1, 0, 0, 0, 247, 233, 1, 0, 0, 0, 247, 240, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 254, 3, 12, 6, 0, 253, 252, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 27, 1, 0, 0, 0, 255, 256, 5, 15, 0, 0, 256, 257, 6, 14, -1, 0, 257, 258, 5, 62, 0, 0, 258, 259, 5, 16, 0, 0, 259, 260, 3, 30, 15, 0, 260, 261, 3, 26, 13, 0, 261, 262, 5, 2, 0, 0, 262, 29, 1, 0, 0, 0, 263, 264, 5, 49, 0, 0, 264, 265, 3, 46, 23, 0, 265, 266, 5, 57, 0, 0, 266, 267, 3, 46, 23, 0, 267, 268, 5, 50, 0, 0, 268, 282, 1, 0, 0, 0, 269, 270, 5, 51, 0, 0, 270, 275, 3, 46, 23, 0, 271, 272, 5, 55, 0, 0, 272, 274, 3, 46, 23, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 278, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 5, 52, 0, 0, 279, 282, 1, 0, 0, 0, 280, 282, 5, 62, 0, 0, 281, 263, 1, 0, 0, 0, 281, 269, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 31, 1, 0, 0, 0, 283, 284, 6, 16, -1, 0, 284, 285, 5, 51, 0, 0, 285, 286, 3, 46, 23, 0, 286, 287, 5, 36, 0, 0, 287, 288, 5, 62, 0, 0, 288, 289, 5, 42, 0, 0, 289, 290, 3, 30, 15, 0, 290, 291, 5, 55, 0, 0, 291, 296, 3, 46, 23, 0, 292, 293, 5, 55, 0, 0, 293, 295, 3, 46, 23, 0, 294, 292, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 299, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 5, 52, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 6, 17, -1, 0, 302, 303, 5, 62, 0, 0, 303, 304, 5, 56, 0, 0, 304, 305, 5, 13, 0, 0, 305, 306, 5, 49, 0, 0, 306, 307, 3, 46, 23, 0, 307, 308, 5, 50, 0, 0, 308, 35, 1, 0, 0, 0, 309, 310, 5, 18, 0, 0, 310, 314, 6, 18, -1, 0, 311, 312, 5, 19, 0, 0, 312, 314, 6, 18, -1, 0, 313, 309, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 5, 49, 0, 0, 316, 317, 3, 46, 23, 0, 317, 318, 5, 50, 0, 0, 318, 37, 1, 0, 0, 0, 319, 320, 5, 62, 0, 0, 320, 322, 6, 19, -1, 0, 321, 323, 3, 40, 20, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 7, 1, 0, 0, 325, 326, 3, 46, 23, 0, 326, 327, 5, 59, 0, 0, 327, 39, 1, 0, 0, 0, 328, 329, 5, 51, 0, 0, 329, 330, 3, 46, 23, 0, 330, 331, 5, 52, 0, 0, 331, 41, 1, 0, 0, 0, 332, 342, 3, 14, 7, 0, 333, 342, 3, 24, 12, 0, 334, 342, 3, 28, 14, 0, 335, 342, 3, 18, 9, 0, 336, 342, 3, 22, 11, 0, 337, 338, 3, 46, 23, 0, 338, 339, 5, 59, 0, 0, 339, 342, 1, 0, 0, 0, 340, 342, 3, 38, 19, 0, 341, 332, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 334, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 341, 337, 1, 0, 0, 0, 341, 340, 1, 0, 0, 0, 342, 43, 1, 0, 0, 0, 343, 345, 3, 42, 21, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 3, 12, 6, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 45, 1, 0, 0, 0, 352, 353, 6, 23, -1, 0, 353, 354, 3, 48, 24, 0, 354, 362, 1, 0, 0, 0, 355, 356, 10, 2, 0, 0, 356, 357, 5, 37, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 6, 23, -1, 0, 359, 361, 1, 0, 0, 0, 360, 355, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 47, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 366, 6, 24, -1, 0, 366, 367, 3, 50, 25, 0, 367, 378, 1, 0, 0, 0, 368, 371, 10, 2, 0, 0, 369, 372, 5, 24, 0, 0, 370, 372, 5, 25, 0, 0, 371, 369, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 374, 3, 50, 25, 0, 374, 375, 6, 24, -1, 0, 375, 377, 1, 0, 0, 0, 376, 368, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 49, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 382, 6, 25, -1, 0, 382, 383, 3, 52, 26, 0, 383, 396, 1, 0, 0, 0, 384, 389, 10, 2, 0, 0, 385, 390, 5, 28, 0, 0, 386, 390, 5, 29, 0, 0, 387, 390, 5, 26, 0, 0, 388, 390, 5, 27, 0, 0, 389, 385, 1, 0, 0, 0, 389, 386, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 389, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 3, 52, 26, 0, 392, 393, 6, 25, -1, 0, 393, 395, 1, 0, 0, 0, 394, 384, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 51, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 6, 26, -1, 0, 400, 401, 3, 54, 27, 0, 401, 412, 1, 0, 0, 0, 402, 405, 10, 2, 0, 0, 403, 406, 5, 20, 0, 0, 404, 406, 5, 21, 0, 0, 405, 403, 1, 0, 0, 0, 405, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 54, 27, 0, 408, 409, 6, 26, -1, 0, 409, 411, 1, 0, 0, 0, 410, 402, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 53, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 6, 27, -1, 0, 416, 417, 3, 56, 28, 0, 417, 428, 1, 0, 0, 0, 418, 421, 10, 2, 0, 0, 419, 422, 5, 22, 0, 0, 420, 422, 5, 23, 0, 0, 421, 419, 1, 0, 0, 0, 421, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 3, 56, 28, 0, 424, 425, 6, 27, -1, 0, 425, 427, 1, 0, 0, 0, 426, 418, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 55, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 436, 5, 32, 0, 0, 432, 436, 5, 21, 0, 0, 433, 436, 5, 33, 0, 0, 434, 436, 5, 34, 0, 0, 435, 431, 1, 0, 0, 0, 435, 432, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 3, 58, 29, 0, 438, 439, 6, 28, -1, 0, 439, 442, 1, 0, 0, 0, 440, 442, 3, 58, 29, 0, 441, 435, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 57, 1, 0, 0, 0, 443, 451, 3, 60, 30, 0, 444, 445, 5, 49, 0, 0, 445, 446, 6, 29, -1, 0, 446, 447, 3, 10, 5, 0, 447, 448, 5, 50, 0, 0, 448, 450, 1, 0, 0, 0, 449, 444, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 457, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 456, 3, 40, 20, 0, 455, 454, 1, 0, 0, 0, 456, 459, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 59, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 460, 473, 3, 64, 32, 0, 461, 473, 5, 62, 0, 0, 462, 473, 3, 62, 31, 0, 463, 473, 3, 36, 18, 0, 464, 473, 3, 34, 17, 0, 465, 473, 3, 32, 16, 0, 466, 473, 3, 20, 10, 0, 467, 469, 5, 49, 0, 0, 468, 470, 3, 46, 23, 0, 469, 468, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 473, 5, 50, 0, 0, 472, 460, 1, 0, 0, 0, 472, 461, 1, 0, 0, 0, 472, 462, 1, 0, 0, 0, 472, 463, 1, 0, 0, 0, 472, 464, 1, 0, 0, 0, 472, 465, 1, 0, 0, 0, 472, 466, 1, 0, 0, 0, 472, 467, 1, 0, 0, 0, 473, 61, 1, 0, 0, 0, 474, 475, 5, 42, 0, 0, 475, 476, 6, 31, -1, 0, 476, 477, 3, 4, 2, 0, 477, 478, 5, 53, 0, 0, 478, 479, 3, 44, 22, 0, 479, 480, 5, 54, 0, 0, 480, 481, 3, 10, 5, 0, 481, 63, 1, 0, 0, 0, 482, 489, 3, 68, 34, 0, 483, 489, 5, 63, 0, 0, 484, 489, 5, 60, 0, 0, 485, 489, 5, 61, 0, 0, 486, 489, 3, 66, 33, 0, 487, 489, 3, 70, 35, 0, 488, 482, 1, 0, 0, 0, 488, 483, 1, 0, 0, 0, 488, 484, 1, 0, 0, 0, 488, 485, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 487, 1, 0, 0, 0, 489, 65, 1, 0, 0, 0, 490, 491, 5, 51, 0, 0, 491, 492, 3, 10, 5, 0, 492, 493, 5, 52, 0, 0, 493, 67, 1, 0, 0, 0, 494, 495, 7, 2, 0, 0, 495, 69, 1, 0, 0, 0, 496, 497, 5, 11, 0, 0, 497, 498, 5, 49, 0, 0, 498, 499, 5, 58, 0, 0, 499, 500, 5, 62, 0, 0, 500, 501, 5, 50, 0, 0, 501, 71, 1, 0, 0, 0, 45, 74, 76, 94, 108, 113, 115, 132, 150, 153, 158, 173, 179, 188, 192, 196, 201, 237, 244, 247, 249, 253, 275, 281, 296, 313, 322, 341, 346, 350, 362, 371, 378, 389, 396, 405, 412, 421, 428, 435, 441, 451, 457, 469, 472, 488] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.tokens b/Phase2Template/Phase2/src/parsers/FunctionCraft.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java new file mode 100644 index 0000000..bce37ad --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java @@ -0,0 +1,472 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link FunctionCraftListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseListener implements FunctionCraftListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java new file mode 100644 index 0000000..dc61c14 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java @@ -0,0 +1,267 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link FunctionCraftVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseVisitor extends AbstractParseTreeVisitor implements FunctionCraftVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProgram(FunctionCraftParser.ProgramContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMain(FunctionCraftParser.MainContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfStatement(FunctionCraftParser.IfStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCondition(FunctionCraftParser.ConditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLenStatement(FunctionCraftParser.LenStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPushStatement(FunctionCraftParser.PushStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForStatement(FunctionCraftParser.ForStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRange(FunctionCraftParser.RangeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment(FunctionCraftParser.AssignmentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAccessList(FunctionCraftParser.AccessListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStatement(FunctionCraftParser.StatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBody(FunctionCraftParser.BodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpression(FunctionCraftParser.ExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValues(FunctionCraftParser.ValuesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitListValue(FunctionCraftParser.ListValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBoolValue(FunctionCraftParser.BoolValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.interp b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.interp new file mode 100644 index 0000000..6d42009 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.interp @@ -0,0 +1,212 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 65, 411, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 345, 8, 59, 10, 59, 12, 59, 348, 9, 59, 3, 59, 350, 8, 59, 1, 60, 5, 60, 353, 8, 60, 10, 60, 12, 60, 356, 9, 60, 1, 60, 1, 60, 4, 60, 360, 8, 60, 11, 60, 12, 60, 361, 1, 61, 1, 61, 5, 61, 366, 8, 61, 10, 61, 12, 61, 369, 9, 61, 1, 62, 1, 62, 5, 62, 373, 8, 62, 10, 62, 12, 62, 376, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 382, 8, 63, 10, 63, 12, 63, 385, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 395, 8, 63, 10, 63, 12, 63, 398, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 404, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 396, 0, 65, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 419, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 1, 131, 1, 0, 0, 0, 3, 135, 1, 0, 0, 0, 5, 139, 1, 0, 0, 0, 7, 144, 1, 0, 0, 0, 9, 149, 1, 0, 0, 0, 11, 154, 1, 0, 0, 0, 13, 158, 1, 0, 0, 0, 15, 165, 1, 0, 0, 0, 17, 168, 1, 0, 0, 0, 19, 173, 1, 0, 0, 0, 21, 180, 1, 0, 0, 0, 23, 187, 1, 0, 0, 0, 25, 195, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 210, 1, 0, 0, 0, 33, 213, 1, 0, 0, 0, 35, 216, 1, 0, 0, 0, 37, 221, 1, 0, 0, 0, 39, 227, 1, 0, 0, 0, 41, 229, 1, 0, 0, 0, 43, 231, 1, 0, 0, 0, 45, 233, 1, 0, 0, 0, 47, 235, 1, 0, 0, 0, 49, 238, 1, 0, 0, 0, 51, 241, 1, 0, 0, 0, 53, 244, 1, 0, 0, 0, 55, 247, 1, 0, 0, 0, 57, 249, 1, 0, 0, 0, 59, 251, 1, 0, 0, 0, 61, 254, 1, 0, 0, 0, 63, 257, 1, 0, 0, 0, 65, 259, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 265, 1, 0, 0, 0, 71, 271, 1, 0, 0, 0, 73, 273, 1, 0, 0, 0, 75, 276, 1, 0, 0, 0, 77, 281, 1, 0, 0, 0, 79, 287, 1, 0, 0, 0, 81, 293, 1, 0, 0, 0, 83, 298, 1, 0, 0, 0, 85, 301, 1, 0, 0, 0, 87, 304, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 310, 1, 0, 0, 0, 93, 313, 1, 0, 0, 0, 95, 316, 1, 0, 0, 0, 97, 318, 1, 0, 0, 0, 99, 320, 1, 0, 0, 0, 101, 322, 1, 0, 0, 0, 103, 324, 1, 0, 0, 0, 105, 326, 1, 0, 0, 0, 107, 328, 1, 0, 0, 0, 109, 330, 1, 0, 0, 0, 111, 332, 1, 0, 0, 0, 113, 334, 1, 0, 0, 0, 115, 337, 1, 0, 0, 0, 117, 339, 1, 0, 0, 0, 119, 349, 1, 0, 0, 0, 121, 354, 1, 0, 0, 0, 123, 363, 1, 0, 0, 0, 125, 370, 1, 0, 0, 0, 127, 403, 1, 0, 0, 0, 129, 407, 1, 0, 0, 0, 131, 132, 5, 100, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 102, 0, 0, 134, 2, 1, 0, 0, 0, 135, 136, 5, 101, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 100, 0, 0, 138, 4, 1, 0, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 6, 1, 0, 0, 0, 144, 145, 5, 112, 0, 0, 145, 146, 5, 117, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 115, 0, 0, 148, 8, 1, 0, 0, 0, 149, 150, 5, 112, 0, 0, 150, 151, 5, 117, 0, 0, 151, 152, 5, 115, 0, 0, 152, 153, 5, 104, 0, 0, 153, 10, 1, 0, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 157, 5, 110, 0, 0, 157, 12, 1, 0, 0, 0, 158, 159, 5, 114, 0, 0, 159, 160, 5, 101, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 117, 0, 0, 162, 163, 5, 114, 0, 0, 163, 164, 5, 110, 0, 0, 164, 14, 1, 0, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 16, 1, 0, 0, 0, 168, 169, 5, 101, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 115, 0, 0, 171, 172, 5, 101, 0, 0, 172, 18, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 115, 0, 0, 176, 177, 5, 101, 0, 0, 177, 178, 5, 105, 0, 0, 178, 179, 5, 102, 0, 0, 179, 20, 1, 0, 0, 0, 180, 181, 5, 109, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 116, 0, 0, 183, 184, 5, 104, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 22, 1, 0, 0, 0, 187, 188, 5, 112, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 116, 0, 0, 190, 191, 5, 116, 0, 0, 191, 192, 5, 101, 0, 0, 192, 193, 5, 114, 0, 0, 193, 194, 5, 110, 0, 0, 194, 24, 1, 0, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 99, 0, 0, 199, 200, 5, 104, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 108, 0, 0, 202, 203, 5, 111, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 112, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 102, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 114, 0, 0, 209, 30, 1, 0, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 32, 1, 0, 0, 0, 213, 214, 5, 100, 0, 0, 214, 215, 5, 111, 0, 0, 215, 34, 1, 0, 0, 0, 216, 217, 5, 99, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 112, 0, 0, 220, 36, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 104, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 109, 0, 0, 225, 226, 5, 112, 0, 0, 226, 38, 1, 0, 0, 0, 227, 228, 5, 43, 0, 0, 228, 40, 1, 0, 0, 0, 229, 230, 5, 45, 0, 0, 230, 42, 1, 0, 0, 0, 231, 232, 5, 42, 0, 0, 232, 44, 1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 46, 1, 0, 0, 0, 235, 236, 5, 61, 0, 0, 236, 237, 5, 61, 0, 0, 237, 48, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 50, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 243, 5, 61, 0, 0, 243, 52, 1, 0, 0, 0, 244, 245, 5, 62, 0, 0, 245, 246, 5, 61, 0, 0, 246, 54, 1, 0, 0, 0, 247, 248, 5, 62, 0, 0, 248, 56, 1, 0, 0, 0, 249, 250, 5, 60, 0, 0, 250, 58, 1, 0, 0, 0, 251, 252, 5, 38, 0, 0, 252, 253, 5, 38, 0, 0, 253, 60, 1, 0, 0, 0, 254, 255, 5, 124, 0, 0, 255, 256, 5, 124, 0, 0, 256, 62, 1, 0, 0, 0, 257, 258, 5, 33, 0, 0, 258, 64, 1, 0, 0, 0, 259, 260, 5, 43, 0, 0, 260, 261, 5, 43, 0, 0, 261, 66, 1, 0, 0, 0, 262, 263, 5, 45, 0, 0, 263, 264, 5, 45, 0, 0, 264, 68, 1, 0, 0, 0, 265, 266, 5, 32, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 5, 32, 0, 0, 268, 269, 5, 32, 0, 0, 269, 270, 5, 124, 0, 0, 270, 70, 1, 0, 0, 0, 271, 272, 5, 124, 0, 0, 272, 72, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 60, 0, 0, 275, 74, 1, 0, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 117, 0, 0, 279, 280, 5, 101, 0, 0, 280, 76, 1, 0, 0, 0, 281, 282, 5, 102, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 108, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 101, 0, 0, 286, 78, 1, 0, 0, 0, 287, 288, 5, 98, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 101, 0, 0, 290, 291, 5, 97, 0, 0, 291, 292, 5, 107, 0, 0, 292, 80, 1, 0, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 101, 0, 0, 295, 296, 5, 120, 0, 0, 296, 297, 5, 116, 0, 0, 297, 82, 1, 0, 0, 0, 298, 299, 5, 45, 0, 0, 299, 300, 5, 62, 0, 0, 300, 84, 1, 0, 0, 0, 301, 302, 5, 43, 0, 0, 302, 303, 5, 61, 0, 0, 303, 86, 1, 0, 0, 0, 304, 305, 5, 45, 0, 0, 305, 306, 5, 61, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 5, 42, 0, 0, 308, 309, 5, 61, 0, 0, 309, 90, 1, 0, 0, 0, 310, 311, 5, 47, 0, 0, 311, 312, 5, 61, 0, 0, 312, 92, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 315, 5, 61, 0, 0, 315, 94, 1, 0, 0, 0, 316, 317, 5, 61, 0, 0, 317, 96, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 98, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 100, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 102, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 104, 1, 0, 0, 0, 326, 327, 5, 123, 0, 0, 327, 106, 1, 0, 0, 0, 328, 329, 5, 125, 0, 0, 329, 108, 1, 0, 0, 0, 330, 331, 5, 44, 0, 0, 331, 110, 1, 0, 0, 0, 332, 333, 5, 46, 0, 0, 333, 112, 1, 0, 0, 0, 334, 335, 5, 46, 0, 0, 335, 336, 5, 46, 0, 0, 336, 114, 1, 0, 0, 0, 337, 338, 5, 58, 0, 0, 338, 116, 1, 0, 0, 0, 339, 340, 5, 59, 0, 0, 340, 118, 1, 0, 0, 0, 341, 350, 5, 48, 0, 0, 342, 346, 7, 0, 0, 0, 343, 345, 7, 1, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 342, 1, 0, 0, 0, 350, 120, 1, 0, 0, 0, 351, 353, 7, 1, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 46, 0, 0, 358, 360, 7, 1, 0, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 122, 1, 0, 0, 0, 363, 367, 7, 2, 0, 0, 364, 366, 7, 3, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 124, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 374, 5, 34, 0, 0, 371, 373, 8, 4, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 378, 5, 34, 0, 0, 378, 126, 1, 0, 0, 0, 379, 383, 5, 35, 0, 0, 380, 382, 8, 5, 0, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 404, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 388, 5, 98, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 110, 0, 0, 392, 396, 1, 0, 0, 0, 393, 395, 9, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 61, 0, 0, 400, 401, 5, 101, 0, 0, 401, 402, 5, 110, 0, 0, 402, 404, 5, 100, 0, 0, 403, 379, 1, 0, 0, 0, 403, 386, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 6, 63, 0, 0, 406, 128, 1, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 64, 0, 0, 410, 130, 1, 0, 0, 0, 10, 0, 346, 349, 354, 361, 367, 374, 383, 396, 403, 1, 6, 0, 0] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java new file mode 100644 index 0000000..e98ce89 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java @@ -0,0 +1,394 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class FunctionCraftLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public FunctionCraftLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000A\u019b\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+ + "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+ + "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+ + "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+ + "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+ + "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+ + "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ + "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+ + "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ + "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ + "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ + "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ + "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u00010\u00010\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u0001"+ + "4\u00015\u00015\u00016\u00016\u00017\u00017\u00018\u00018\u00018\u0001"+ + "9\u00019\u0001:\u0001:\u0001;\u0001;\u0001;\u0005;\u0159\b;\n;\f;\u015c"+ + "\t;\u0003;\u015e\b;\u0001<\u0005<\u0161\b<\n<\f<\u0164\t<\u0001<\u0001"+ + "<\u0004<\u0168\b<\u000b<\f<\u0169\u0001=\u0001=\u0005=\u016e\b=\n=\f="+ + "\u0171\t=\u0001>\u0001>\u0005>\u0175\b>\n>\f>\u0178\t>\u0001>\u0001>\u0001"+ + "?\u0001?\u0005?\u017e\b?\n?\f?\u0181\t?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0005?\u018b\b?\n?\f?\u018e\t?\u0001?\u0001?\u0001"+ + "?\u0001?\u0003?\u0194\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001"+ + "\u018c\u0000A\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+ + "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+ + "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+ + "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+ + "? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f"+ + "@\u0081A\u0001\u0000\u0007\u0001\u000019\u0001\u000009\u0003\u0000AZ_"+ + "_az\u0004\u000009AZ__az\u0001\u0000\"\"\u0002\u0000\n\n\r\r\u0003\u0000"+ + "\t\n\r\r \u01a3\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0001\u0083\u0001\u0000\u0000\u0000\u0003\u0087\u0001"+ + "\u0000\u0000\u0000\u0005\u008b\u0001\u0000\u0000\u0000\u0007\u0090\u0001"+ + "\u0000\u0000\u0000\t\u0095\u0001\u0000\u0000\u0000\u000b\u009a\u0001\u0000"+ + "\u0000\u0000\r\u009e\u0001\u0000\u0000\u0000\u000f\u00a5\u0001\u0000\u0000"+ + "\u0000\u0011\u00a8\u0001\u0000\u0000\u0000\u0013\u00ad\u0001\u0000\u0000"+ + "\u0000\u0015\u00b4\u0001\u0000\u0000\u0000\u0017\u00bb\u0001\u0000\u0000"+ + "\u0000\u0019\u00c3\u0001\u0000\u0000\u0000\u001b\u00c9\u0001\u0000\u0000"+ + "\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d2\u0001\u0000\u0000"+ + "\u0000!\u00d5\u0001\u0000\u0000\u0000#\u00d8\u0001\u0000\u0000\u0000%"+ + "\u00dd\u0001\u0000\u0000\u0000\'\u00e3\u0001\u0000\u0000\u0000)\u00e5"+ + "\u0001\u0000\u0000\u0000+\u00e7\u0001\u0000\u0000\u0000-\u00e9\u0001\u0000"+ + "\u0000\u0000/\u00eb\u0001\u0000\u0000\u00001\u00ee\u0001\u0000\u0000\u0000"+ + "3\u00f1\u0001\u0000\u0000\u00005\u00f4\u0001\u0000\u0000\u00007\u00f7"+ + "\u0001\u0000\u0000\u00009\u00f9\u0001\u0000\u0000\u0000;\u00fb\u0001\u0000"+ + "\u0000\u0000=\u00fe\u0001\u0000\u0000\u0000?\u0101\u0001\u0000\u0000\u0000"+ + "A\u0103\u0001\u0000\u0000\u0000C\u0106\u0001\u0000\u0000\u0000E\u0109"+ + "\u0001\u0000\u0000\u0000G\u010f\u0001\u0000\u0000\u0000I\u0111\u0001\u0000"+ + "\u0000\u0000K\u0114\u0001\u0000\u0000\u0000M\u0119\u0001\u0000\u0000\u0000"+ + "O\u011f\u0001\u0000\u0000\u0000Q\u0125\u0001\u0000\u0000\u0000S\u012a"+ + "\u0001\u0000\u0000\u0000U\u012d\u0001\u0000\u0000\u0000W\u0130\u0001\u0000"+ + "\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0136\u0001\u0000\u0000\u0000"+ + "]\u0139\u0001\u0000\u0000\u0000_\u013c\u0001\u0000\u0000\u0000a\u013e"+ + "\u0001\u0000\u0000\u0000c\u0140\u0001\u0000\u0000\u0000e\u0142\u0001\u0000"+ + "\u0000\u0000g\u0144\u0001\u0000\u0000\u0000i\u0146\u0001\u0000\u0000\u0000"+ + "k\u0148\u0001\u0000\u0000\u0000m\u014a\u0001\u0000\u0000\u0000o\u014c"+ + "\u0001\u0000\u0000\u0000q\u014e\u0001\u0000\u0000\u0000s\u0151\u0001\u0000"+ + "\u0000\u0000u\u0153\u0001\u0000\u0000\u0000w\u015d\u0001\u0000\u0000\u0000"+ + "y\u0162\u0001\u0000\u0000\u0000{\u016b\u0001\u0000\u0000\u0000}\u0172"+ + "\u0001\u0000\u0000\u0000\u007f\u0193\u0001\u0000\u0000\u0000\u0081\u0197"+ + "\u0001\u0000\u0000\u0000\u0083\u0084\u0005d\u0000\u0000\u0084\u0085\u0005"+ + "e\u0000\u0000\u0085\u0086\u0005f\u0000\u0000\u0086\u0002\u0001\u0000\u0000"+ + "\u0000\u0087\u0088\u0005e\u0000\u0000\u0088\u0089\u0005n\u0000\u0000\u0089"+ + "\u008a\u0005d\u0000\u0000\u008a\u0004\u0001\u0000\u0000\u0000\u008b\u008c"+ + "\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005i"+ + "\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0006\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0005p\u0000\u0000\u0091\u0092\u0005u\u0000\u0000\u0092"+ + "\u0093\u0005t\u0000\u0000\u0093\u0094\u0005s\u0000\u0000\u0094\b\u0001"+ + "\u0000\u0000\u0000\u0095\u0096\u0005p\u0000\u0000\u0096\u0097\u0005u\u0000"+ + "\u0000\u0097\u0098\u0005s\u0000\u0000\u0098\u0099\u0005h\u0000\u0000\u0099"+ + "\n\u0001\u0000\u0000\u0000\u009a\u009b\u0005l\u0000\u0000\u009b\u009c"+ + "\u0005e\u0000\u0000\u009c\u009d\u0005n\u0000\u0000\u009d\f\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0005r\u0000\u0000\u009f\u00a0\u0005e\u0000\u0000"+ + "\u00a0\u00a1\u0005t\u0000\u0000\u00a1\u00a2\u0005u\u0000\u0000\u00a2\u00a3"+ + "\u0005r\u0000\u0000\u00a3\u00a4\u0005n\u0000\u0000\u00a4\u000e\u0001\u0000"+ + "\u0000\u0000\u00a5\u00a6\u0005i\u0000\u0000\u00a6\u00a7\u0005f\u0000\u0000"+ + "\u00a7\u0010\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005e\u0000\u0000\u00a9"+ + "\u00aa\u0005l\u0000\u0000\u00aa\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005"+ + "e\u0000\u0000\u00ac\u0012\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005e\u0000"+ + "\u0000\u00ae\u00af\u0005l\u0000\u0000\u00af\u00b0\u0005s\u0000\u0000\u00b0"+ + "\u00b1\u0005e\u0000\u0000\u00b1\u00b2\u0005i\u0000\u0000\u00b2\u00b3\u0005"+ + "f\u0000\u0000\u00b3\u0014\u0001\u0000\u0000\u0000\u00b4\u00b5\u0005m\u0000"+ + "\u0000\u00b5\u00b6\u0005e\u0000\u0000\u00b6\u00b7\u0005t\u0000\u0000\u00b7"+ + "\u00b8\u0005h\u0000\u0000\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005"+ + "d\u0000\u0000\u00ba\u0016\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005p\u0000"+ + "\u0000\u00bc\u00bd\u0005a\u0000\u0000\u00bd\u00be\u0005t\u0000\u0000\u00be"+ + "\u00bf\u0005t\u0000\u0000\u00bf\u00c0\u0005e\u0000\u0000\u00c0\u00c1\u0005"+ + "r\u0000\u0000\u00c1\u00c2\u0005n\u0000\u0000\u00c2\u0018\u0001\u0000\u0000"+ + "\u0000\u00c3\u00c4\u0005m\u0000\u0000\u00c4\u00c5\u0005a\u0000\u0000\u00c5"+ + "\u00c6\u0005t\u0000\u0000\u00c6\u00c7\u0005c\u0000\u0000\u00c7\u00c8\u0005"+ + "h\u0000\u0000\u00c8\u001a\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005l\u0000"+ + "\u0000\u00ca\u00cb\u0005o\u0000\u0000\u00cb\u00cc\u0005o\u0000\u0000\u00cc"+ + "\u00cd\u0005p\u0000\u0000\u00cd\u001c\u0001\u0000\u0000\u0000\u00ce\u00cf"+ + "\u0005f\u0000\u0000\u00cf\u00d0\u0005o\u0000\u0000\u00d0\u00d1\u0005r"+ + "\u0000\u0000\u00d1\u001e\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005i\u0000"+ + "\u0000\u00d3\u00d4\u0005n\u0000\u0000\u00d4 \u0001\u0000\u0000\u0000\u00d5"+ + "\u00d6\u0005d\u0000\u0000\u00d6\u00d7\u0005o\u0000\u0000\u00d7\"\u0001"+ + "\u0000\u0000\u0000\u00d8\u00d9\u0005c\u0000\u0000\u00d9\u00da\u0005h\u0000"+ + "\u0000\u00da\u00db\u0005o\u0000\u0000\u00db\u00dc\u0005p\u0000\u0000\u00dc"+ + "$\u0001\u0000\u0000\u0000\u00dd\u00de\u0005c\u0000\u0000\u00de\u00df\u0005"+ + "h\u0000\u0000\u00df\u00e0\u0005o\u0000\u0000\u00e0\u00e1\u0005m\u0000"+ + "\u0000\u00e1\u00e2\u0005p\u0000\u0000\u00e2&\u0001\u0000\u0000\u0000\u00e3"+ + "\u00e4\u0005+\u0000\u0000\u00e4(\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005"+ + "-\u0000\u0000\u00e6*\u0001\u0000\u0000\u0000\u00e7\u00e8\u0005*\u0000"+ + "\u0000\u00e8,\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea"+ + ".\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005=\u0000\u0000\u00ec\u00ed\u0005"+ + "=\u0000\u0000\u00ed0\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005!\u0000"+ + "\u0000\u00ef\u00f0\u0005=\u0000\u0000\u00f02\u0001\u0000\u0000\u0000\u00f1"+ + "\u00f2\u0005<\u0000\u0000\u00f2\u00f3\u0005=\u0000\u0000\u00f34\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0005>\u0000\u0000\u00f5\u00f6\u0005=\u0000"+ + "\u0000\u00f66\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005>\u0000\u0000\u00f8"+ + "8\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005<\u0000\u0000\u00fa:\u0001"+ + "\u0000\u0000\u0000\u00fb\u00fc\u0005&\u0000\u0000\u00fc\u00fd\u0005&\u0000"+ + "\u0000\u00fd<\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005|\u0000\u0000\u00ff"+ + "\u0100\u0005|\u0000\u0000\u0100>\u0001\u0000\u0000\u0000\u0101\u0102\u0005"+ + "!\u0000\u0000\u0102@\u0001\u0000\u0000\u0000\u0103\u0104\u0005+\u0000"+ + "\u0000\u0104\u0105\u0005+\u0000\u0000\u0105B\u0001\u0000\u0000\u0000\u0106"+ + "\u0107\u0005-\u0000\u0000\u0107\u0108\u0005-\u0000\u0000\u0108D\u0001"+ + "\u0000\u0000\u0000\u0109\u010a\u0005 \u0000\u0000\u010a\u010b\u0005 \u0000"+ + "\u0000\u010b\u010c\u0005 \u0000\u0000\u010c\u010d\u0005 \u0000\u0000\u010d"+ + "\u010e\u0005|\u0000\u0000\u010eF\u0001\u0000\u0000\u0000\u010f\u0110\u0005"+ + "|\u0000\u0000\u0110H\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000"+ + "\u0000\u0112\u0113\u0005<\u0000\u0000\u0113J\u0001\u0000\u0000\u0000\u0114"+ + "\u0115\u0005t\u0000\u0000\u0115\u0116\u0005r\u0000\u0000\u0116\u0117\u0005"+ + "u\u0000\u0000\u0117\u0118\u0005e\u0000\u0000\u0118L\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005f\u0000\u0000\u011a\u011b\u0005a\u0000\u0000\u011b"+ + "\u011c\u0005l\u0000\u0000\u011c\u011d\u0005s\u0000\u0000\u011d\u011e\u0005"+ + "e\u0000\u0000\u011eN\u0001\u0000\u0000\u0000\u011f\u0120\u0005b\u0000"+ + "\u0000\u0120\u0121\u0005r\u0000\u0000\u0121\u0122\u0005e\u0000\u0000\u0122"+ + "\u0123\u0005a\u0000\u0000\u0123\u0124\u0005k\u0000\u0000\u0124P\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005n\u0000\u0000\u0126\u0127\u0005e\u0000"+ + "\u0000\u0127\u0128\u0005x\u0000\u0000\u0128\u0129\u0005t\u0000\u0000\u0129"+ + "R\u0001\u0000\u0000\u0000\u012a\u012b\u0005-\u0000\u0000\u012b\u012c\u0005"+ + ">\u0000\u0000\u012cT\u0001\u0000\u0000\u0000\u012d\u012e\u0005+\u0000"+ + "\u0000\u012e\u012f\u0005=\u0000\u0000\u012fV\u0001\u0000\u0000\u0000\u0130"+ + "\u0131\u0005-\u0000\u0000\u0131\u0132\u0005=\u0000\u0000\u0132X\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0005*\u0000\u0000\u0134\u0135\u0005=\u0000"+ + "\u0000\u0135Z\u0001\u0000\u0000\u0000\u0136\u0137\u0005/\u0000\u0000\u0137"+ + "\u0138\u0005=\u0000\u0000\u0138\\\u0001\u0000\u0000\u0000\u0139\u013a"+ + "\u0005%\u0000\u0000\u013a\u013b\u0005=\u0000\u0000\u013b^\u0001\u0000"+ + "\u0000\u0000\u013c\u013d\u0005=\u0000\u0000\u013d`\u0001\u0000\u0000\u0000"+ + "\u013e\u013f\u0005(\u0000\u0000\u013fb\u0001\u0000\u0000\u0000\u0140\u0141"+ + "\u0005)\u0000\u0000\u0141d\u0001\u0000\u0000\u0000\u0142\u0143\u0005["+ + "\u0000\u0000\u0143f\u0001\u0000\u0000\u0000\u0144\u0145\u0005]\u0000\u0000"+ + "\u0145h\u0001\u0000\u0000\u0000\u0146\u0147\u0005{\u0000\u0000\u0147j"+ + "\u0001\u0000\u0000\u0000\u0148\u0149\u0005}\u0000\u0000\u0149l\u0001\u0000"+ + "\u0000\u0000\u014a\u014b\u0005,\u0000\u0000\u014bn\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005.\u0000\u0000\u014dp\u0001\u0000\u0000\u0000\u014e\u014f"+ + "\u0005.\u0000\u0000\u014f\u0150\u0005.\u0000\u0000\u0150r\u0001\u0000"+ + "\u0000\u0000\u0151\u0152\u0005:\u0000\u0000\u0152t\u0001\u0000\u0000\u0000"+ + "\u0153\u0154\u0005;\u0000\u0000\u0154v\u0001\u0000\u0000\u0000\u0155\u015e"+ + "\u00050\u0000\u0000\u0156\u015a\u0007\u0000\u0000\u0000\u0157\u0159\u0007"+ + "\u0001\u0000\u0000\u0158\u0157\u0001\u0000\u0000\u0000\u0159\u015c\u0001"+ + "\u0000\u0000\u0000\u015a\u0158\u0001\u0000\u0000\u0000\u015a\u015b\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015d\u0155\u0001\u0000\u0000\u0000\u015d\u0156\u0001"+ + "\u0000\u0000\u0000\u015ex\u0001\u0000\u0000\u0000\u015f\u0161\u0007\u0001"+ + "\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0161\u0164\u0001\u0000"+ + "\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001\u0000"+ + "\u0000\u0000\u0163\u0165\u0001\u0000\u0000\u0000\u0164\u0162\u0001\u0000"+ + "\u0000\u0000\u0165\u0167\u0005.\u0000\u0000\u0166\u0168\u0007\u0001\u0000"+ + "\u0000\u0167\u0166\u0001\u0000\u0000\u0000\u0168\u0169\u0001\u0000\u0000"+ + "\u0000\u0169\u0167\u0001\u0000\u0000\u0000\u0169\u016a\u0001\u0000\u0000"+ + "\u0000\u016az\u0001\u0000\u0000\u0000\u016b\u016f\u0007\u0002\u0000\u0000"+ + "\u016c\u016e\u0007\u0003\u0000\u0000\u016d\u016c\u0001\u0000\u0000\u0000"+ + "\u016e\u0171\u0001\u0000\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000"+ + "\u016f\u0170\u0001\u0000\u0000\u0000\u0170|\u0001\u0000\u0000\u0000\u0171"+ + "\u016f\u0001\u0000\u0000\u0000\u0172\u0176\u0005\"\u0000\u0000\u0173\u0175"+ + "\b\u0004\u0000\u0000\u0174\u0173\u0001\u0000\u0000\u0000\u0175\u0178\u0001"+ + "\u0000\u0000\u0000\u0176\u0174\u0001\u0000\u0000\u0000\u0176\u0177\u0001"+ + "\u0000\u0000\u0000\u0177\u0179\u0001\u0000\u0000\u0000\u0178\u0176\u0001"+ + "\u0000\u0000\u0000\u0179\u017a\u0005\"\u0000\u0000\u017a~\u0001\u0000"+ + "\u0000\u0000\u017b\u017f\u0005#\u0000\u0000\u017c\u017e\b\u0005\u0000"+ + "\u0000\u017d\u017c\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000\u0000"+ + "\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000"+ + "\u0000\u0180\u0194\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000"+ + "\u0000\u0182\u0183\u0005=\u0000\u0000\u0183\u0184\u0005b\u0000\u0000\u0184"+ + "\u0185\u0005e\u0000\u0000\u0185\u0186\u0005g\u0000\u0000\u0186\u0187\u0005"+ + "i\u0000\u0000\u0187\u0188\u0005n\u0000\u0000\u0188\u018c\u0001\u0000\u0000"+ + "\u0000\u0189\u018b\t\u0000\u0000\u0000\u018a\u0189\u0001\u0000\u0000\u0000"+ + "\u018b\u018e\u0001\u0000\u0000\u0000\u018c\u018d\u0001\u0000\u0000\u0000"+ + "\u018c\u018a\u0001\u0000\u0000\u0000\u018d\u018f\u0001\u0000\u0000\u0000"+ + "\u018e\u018c\u0001\u0000\u0000\u0000\u018f\u0190\u0005=\u0000\u0000\u0190"+ + "\u0191\u0005e\u0000\u0000\u0191\u0192\u0005n\u0000\u0000\u0192\u0194\u0005"+ + "d\u0000\u0000\u0193\u017b\u0001\u0000\u0000\u0000\u0193\u0182\u0001\u0000"+ + "\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u0196\u0006?\u0000"+ + "\u0000\u0196\u0080\u0001\u0000\u0000\u0000\u0197\u0198\u0007\u0006\u0000"+ + "\u0000\u0198\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0006@\u0000\u0000"+ + "\u019a\u0082\u0001\u0000\u0000\u0000\n\u0000\u015a\u015d\u0162\u0169\u016f"+ + "\u0176\u017f\u018c\u0193\u0001\u0006\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.tokens b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java new file mode 100644 index 0000000..9af4fd8 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java @@ -0,0 +1,370 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link FunctionCraftParser}. + */ +public interface FunctionCraftListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void enterProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void exitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void enterMain(FunctionCraftParser.MainContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void exitMain(FunctionCraftParser.MainContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void enterIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void exitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void enterCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void exitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void enterLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void exitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void enterPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void exitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void enterForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void exitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void enterRange(FunctionCraftParser.RangeContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void exitRange(FunctionCraftParser.RangeContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * @param ctx the parse tree + */ + void enterChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * @param ctx the parse tree + */ + void exitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void enterAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void exitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void enterAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void exitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void enterStatement(FunctionCraftParser.StatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void exitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void enterBody(FunctionCraftParser.BodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void exitBody(FunctionCraftParser.BodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void enterExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void exitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void enterValues(FunctionCraftParser.ValuesContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void exitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void enterListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void exitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void enterBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void exitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java new file mode 100644 index 0000000..1456a02 --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -0,0 +1,3664 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class FunctionCraftParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static final int + RULE_program = 0, RULE_functionDeclaration = 1, RULE_functionArgumentsDeclaration = 2, + RULE_patternMatching = 3, RULE_main = 4, RULE_functionArguments = 5, RULE_returnStatement = 6, + RULE_ifStatement = 7, RULE_condition = 8, RULE_putsStatement = 9, RULE_lenStatement = 10, + RULE_pushStatement = 11, RULE_loopDoStatement = 12, RULE_loopBody = 13, + RULE_forStatement = 14, RULE_range = 15, RULE_filterStatement = 16, RULE_matchPatternStatement = 17, + RULE_chopAndChompStatement = 18, RULE_assignment = 19, RULE_accessList = 20, + RULE_statement = 21, RULE_body = 22, RULE_expression = 23, RULE_eqaulityExpression = 24, + RULE_relationalExpression = 25, RULE_additiveExpression = 26, RULE_multiplicativeExpression = 27, + RULE_preUnaryExpression = 28, RULE_accessExpression = 29, RULE_otherExpression = 30, + RULE_lambdaFunction = 31, RULE_values = 32, RULE_listValue = 33, RULE_boolValue = 34, + RULE_functionPointer = 35; + private static String[] makeRuleNames() { + return new String[] { + "program", "functionDeclaration", "functionArgumentsDeclaration", "patternMatching", + "main", "functionArguments", "returnStatement", "ifStatement", "condition", + "putsStatement", "lenStatement", "pushStatement", "loopDoStatement", + "loopBody", "forStatement", "range", "filterStatement", "matchPatternStatement", + "chopAndChompStatement", "assignment", "accessList", "statement", "body", + "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", + "multiplicativeExpression", "preUnaryExpression", "accessExpression", + "otherExpression", "lambdaFunction", "values", "listValue", "boolValue", + "functionPointer" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public FunctionCraftParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ProgramContext extends ParserRuleContext { + public MainContext main() { + return getRuleContext(MainContext.class,0); + } + public List functionDeclaration() { + return getRuleContexts(FunctionDeclarationContext.class); + } + public FunctionDeclarationContext functionDeclaration(int i) { + return getRuleContext(FunctionDeclarationContext.class,i); + } + public List patternMatching() { + return getRuleContexts(PatternMatchingContext.class); + } + public PatternMatchingContext patternMatching(int i) { + return getRuleContext(PatternMatchingContext.class,i); + } + public ProgramContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_program; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterProgram(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitProgram(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitProgram(this); + else return visitor.visitChildren(this); + } + } + + public final ProgramContext program() throws RecognitionException { + ProgramContext _localctx = new ProgramContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_program); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(76); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(74); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DEF: + { + setState(72); + functionDeclaration(); + } + break; + case PATTERN: + { + setState(73); + patternMatching(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(78); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + } + setState(79); + main(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionDeclarationContext extends ParserRuleContext { + public Token IDENTIFIER; + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionDeclarationContext functionDeclaration() throws RecognitionException { + FunctionDeclarationContext _localctx = new FunctionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_functionDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(81); + match(DEF); + setState(82); + ((FunctionDeclarationContext)_localctx).IDENTIFIER = match(IDENTIFIER); + System.out.println("FuncDec: " + (((FunctionDeclarationContext)_localctx).IDENTIFIER!=null?((FunctionDeclarationContext)_localctx).IDENTIFIER.getText():null)); + setState(84); + functionArgumentsDeclaration(); + setState(85); + body(); + setState(86); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsDeclarationContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public FunctionArgumentsDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArgumentsDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArgumentsDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArgumentsDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArgumentsDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() throws RecognitionException { + FunctionArgumentsDeclarationContext _localctx = new FunctionArgumentsDeclarationContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_functionArgumentsDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(88); + match(LPAR); + setState(115); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IDENTIFIER) { + { + setState(89); + match(IDENTIFIER); + setState(94); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(90); + match(COMMA); + setState(91); + match(IDENTIFIER); + } + } + } + setState(96); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + setState(113); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(97); + match(COMMA); + setState(98); + match(LBRACK); + setState(99); + match(IDENTIFIER); + setState(100); + match(ASSIGN); + setState(101); + expression(0); + setState(108); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(102); + match(COMMA); + setState(103); + match(IDENTIFIER); + setState(104); + match(ASSIGN); + setState(105); + expression(0); + } + } + setState(110); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(111); + match(RBRACK); + } + } + + } + } + + setState(117); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PatternMatchingContext extends ParserRuleContext { + public Token IDENTIFIER; + public TerminalNode PATTERN() { return getToken(FunctionCraftParser.PATTERN, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public List PATTERN_MATCHING_SEPARATOR() { return getTokens(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR); } + public TerminalNode PATTERN_MATCHING_SEPARATOR(int i) { + return getToken(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PatternMatchingContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_patternMatching; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPatternMatching(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPatternMatching(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPatternMatching(this); + else return visitor.visitChildren(this); + } + } + + public final PatternMatchingContext patternMatching() throws RecognitionException { + PatternMatchingContext _localctx = new PatternMatchingContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_patternMatching); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(119); + match(PATTERN); + setState(120); + ((PatternMatchingContext)_localctx).IDENTIFIER = match(IDENTIFIER); + System.out.println("PatternDec: " + (((PatternMatchingContext)_localctx).IDENTIFIER!=null?((PatternMatchingContext)_localctx).IDENTIFIER.getText():null)); + setState(122); + match(LPAR); + setState(123); + ((PatternMatchingContext)_localctx).IDENTIFIER = match(IDENTIFIER); + setState(124); + match(RPAR); + setState(132); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PATTERN_MATCHING_SEPARATOR) { + { + { + setState(125); + match(PATTERN_MATCHING_SEPARATOR); + setState(126); + condition(); + setState(127); + match(ASSIGN); + setState(128); + expression(0); + } + } + setState(134); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(135); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MainContext extends ParserRuleContext { + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode MAIN() { return getToken(FunctionCraftParser.MAIN, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public MainContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_main; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMain(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMain(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMain(this); + else return visitor.visitChildren(this); + } + } + + public final MainContext main() throws RecognitionException { + MainContext _localctx = new MainContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_main); + try { + enterOuterAlt(_localctx, 1); + { + setState(137); + match(DEF); + setState(138); + match(MAIN); + System.out.println("MAIN"); + setState(140); + match(LPAR); + setState(141); + match(RPAR); + setState(142); + body(); + setState(143); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsContext extends ParserRuleContext { + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public FunctionArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArguments(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArguments(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsContext functionArguments() throws RecognitionException { + FunctionArgumentsContext _localctx = new FunctionArgumentsContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_functionArguments); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(153); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + case 1: + { + setState(145); + expression(0); + setState(150); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(146); + match(COMMA); + setState(147); + expression(0); + } + } + } + setState(152); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ReturnStatementContext extends ParserRuleContext { + public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterReturnStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitReturnStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitReturnStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_returnStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(155); + match(RETURN); + System.out.println("RETURN"); + setState(158); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(157); + expression(0); + } + } + + setState(160); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IfStatementContext extends ParserRuleContext { + public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List body() { + return getRuleContexts(BodyContext.class); + } + public BodyContext body(int i) { + return getRuleContext(BodyContext.class,i); + } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public List ELSEIF() { return getTokens(FunctionCraftParser.ELSEIF); } + public TerminalNode ELSEIF(int i) { + return getToken(FunctionCraftParser.ELSEIF, i); + } + public TerminalNode ELSE() { return getToken(FunctionCraftParser.ELSE, 0); } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_ifStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(162); + match(IF); + System.out.println("Decision: IF"); + setState(164); + condition(); + setState(165); + body(); + setState(173); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ELSEIF) { + { + { + setState(166); + match(ELSEIF); + System.out.println("Decision: ELSE IF"); + setState(168); + condition(); + setState(169); + body(); + } + } + setState(175); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(179); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(176); + match(ELSE); + System.out.println("Decision: ELSE"); + setState(178); + body(); + } + } + + setState(181); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConditionContext extends ParserRuleContext { + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List AND() { return getTokens(FunctionCraftParser.AND); } + public TerminalNode AND(int i) { + return getToken(FunctionCraftParser.AND, i); + } + public List OR() { return getTokens(FunctionCraftParser.OR); } + public TerminalNode OR(int i) { + return getToken(FunctionCraftParser.OR, i); + } + public ConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_condition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitCondition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitCondition(this); + else return visitor.visitChildren(this); + } + } + + public final ConditionContext condition() throws RecognitionException { + ConditionContext _localctx = new ConditionContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_condition); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(201); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(183); + match(LPAR); + setState(184); + expression(0); + setState(185); + match(RPAR); + setState(196); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(186); + _la = _input.LA(1); + if ( !(_la==AND || _la==OR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(188); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + case 1: + { + setState(187); + match(LPAR); + } + break; + } + setState(190); + condition(); + setState(192); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + { + setState(191); + match(RPAR); + } + break; + } + } + } + } + setState(198); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + } + } + } + } + setState(203); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PutsStatementContext extends ParserRuleContext { + public TerminalNode PUTS() { return getToken(FunctionCraftParser.PUTS, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public PutsStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_putsStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPutsStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPutsStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPutsStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PutsStatementContext putsStatement() throws RecognitionException { + PutsStatementContext _localctx = new PutsStatementContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_putsStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(204); + match(PUTS); + System.out.println("Built-In: PUTS"); + setState(206); + match(LPAR); + setState(207); + expression(0); + setState(208); + match(RPAR); + setState(209); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LenStatementContext extends ParserRuleContext { + public TerminalNode LEN() { return getToken(FunctionCraftParser.LEN, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public LenStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lenStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLenStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLenStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLenStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LenStatementContext lenStatement() throws RecognitionException { + LenStatementContext _localctx = new LenStatementContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_lenStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(211); + match(LEN); + System.out.println("Built-In: LEN"); + setState(213); + match(LPAR); + setState(214); + expression(0); + setState(215); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PushStatementContext extends ParserRuleContext { + public TerminalNode PUSH() { return getToken(FunctionCraftParser.PUSH, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode COMMA() { return getToken(FunctionCraftParser.COMMA, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public PushStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pushStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPushStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPushStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPushStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PushStatementContext pushStatement() throws RecognitionException { + PushStatementContext _localctx = new PushStatementContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_pushStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(217); + match(PUSH); + System.out.println("Built-In: PUSH"); + setState(219); + match(LPAR); + setState(220); + expression(0); + setState(221); + match(COMMA); + setState(222); + expression(0); + setState(223); + match(RPAR); + setState(224); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopDoStatementContext extends ParserRuleContext { + public TerminalNode LOOP() { return getToken(FunctionCraftParser.LOOP, 0); } + public TerminalNode DO() { return getToken(FunctionCraftParser.DO, 0); } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public LoopDoStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopDoStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopDoStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopDoStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopDoStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoopDoStatementContext loopDoStatement() throws RecognitionException { + LoopDoStatementContext _localctx = new LoopDoStatementContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_loopDoStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(226); + match(LOOP); + setState(227); + match(DO); + System.out.println("Loop: DO"); + setState(229); + loopBody(); + setState(230); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopBodyContext extends ParserRuleContext { + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public List BREAK() { return getTokens(FunctionCraftParser.BREAK); } + public TerminalNode BREAK(int i) { + return getToken(FunctionCraftParser.BREAK, i); + } + public List SEMICOLLON() { return getTokens(FunctionCraftParser.SEMICOLLON); } + public TerminalNode SEMICOLLON(int i) { + return getToken(FunctionCraftParser.SEMICOLLON, i); + } + public List NEXT() { return getTokens(FunctionCraftParser.NEXT); } + public TerminalNode NEXT(int i) { + return getToken(FunctionCraftParser.NEXT, i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public List IF() { return getTokens(FunctionCraftParser.IF); } + public TerminalNode IF(int i) { + return getToken(FunctionCraftParser.IF, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public LoopBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopBody(this); + else return visitor.visitChildren(this); + } + } + + public final LoopBodyContext loopBody() throws RecognitionException { + LoopBodyContext _localctx = new LoopBodyContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_loopBody); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(249); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { + { + setState(247); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PUTS: + case PUSH: + case LEN: + case IF: + case METHOD: + case LOOP: + case FOR: + case CHOP: + case CHOMP: + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + { + setState(232); + statement(); + } + break; + case BREAK: + { + setState(233); + match(BREAK); + System.out.println("Control: BREAK"); + setState(237); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(235); + match(IF); + setState(236); + condition(); + } + } + + setState(239); + match(SEMICOLLON); + } + break; + case NEXT: + { + setState(240); + match(NEXT); + System.out.println("Control: NEXT"); + setState(244); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(242); + match(IF); + setState(243); + condition(); + } + } + + setState(246); + match(SEMICOLLON); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(251); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(253); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(252); + returnStatement(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForStatementContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(FunctionCraftParser.FOR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode IN() { return getToken(FunctionCraftParser.IN, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public ForStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterForStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitForStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitForStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ForStatementContext forStatement() throws RecognitionException { + ForStatementContext _localctx = new ForStatementContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_forStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(255); + match(FOR); + System.out.println("Loop: FOR"); + setState(257); + match(IDENTIFIER); + setState(258); + match(IN); + setState(259); + range(); + setState(260); + loopBody(); + setState(261); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RangeContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode DOUBLEDOT() { return getToken(FunctionCraftParser.DOUBLEDOT, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_range; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRange(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRange(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRange(this); + else return visitor.visitChildren(this); + } + } + + public final RangeContext range() throws RecognitionException { + RangeContext _localctx = new RangeContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_range); + int _la; + try { + setState(281); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAR: + enterOuterAlt(_localctx, 1); + { + { + setState(263); + match(LPAR); + setState(264); + expression(0); + setState(265); + match(DOUBLEDOT); + setState(266); + expression(0); + setState(267); + match(RPAR); + } + } + break; + case LBRACK: + enterOuterAlt(_localctx, 2); + { + { + setState(269); + match(LBRACK); + { + setState(270); + expression(0); + setState(275); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(271); + match(COMMA); + setState(272); + expression(0); + } + } + setState(277); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + setState(278); + match(RBRACK); + } + } + break; + case IDENTIFIER: + enterOuterAlt(_localctx, 3); + { + setState(280); + match(IDENTIFIER); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FilterStatementContext extends ParserRuleContext { + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode SEPARATOR() { return getToken(FunctionCraftParser.SEPARATOR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public FilterStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_filterStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFilterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFilterStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFilterStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FilterStatementContext filterStatement() throws RecognitionException { + FilterStatementContext _localctx = new FilterStatementContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_filterStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + System.out.println("Structure: FILTER"); + setState(284); + match(LBRACK); + setState(285); + expression(0); + setState(286); + match(SEPARATOR); + setState(287); + match(IDENTIFIER); + setState(288); + match(ARROW); + setState(289); + range(); + setState(290); + match(COMMA); + setState(291); + expression(0); + setState(296); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(292); + match(COMMA); + setState(293); + expression(0); + } + } + setState(298); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(299); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MatchPatternStatementContext extends ParserRuleContext { + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode DOT() { return getToken(FunctionCraftParser.DOT, 0); } + public TerminalNode MATCH() { return getToken(FunctionCraftParser.MATCH, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public MatchPatternStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_matchPatternStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMatchPatternStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMatchPatternStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMatchPatternStatement(this); + else return visitor.visitChildren(this); + } + } + + public final MatchPatternStatementContext matchPatternStatement() throws RecognitionException { + MatchPatternStatementContext _localctx = new MatchPatternStatementContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_matchPatternStatement); + try { + enterOuterAlt(_localctx, 1); + { + System.out.println("Built-In: MATCH"); + setState(302); + match(IDENTIFIER); + setState(303); + match(DOT); + setState(304); + match(MATCH); + setState(305); + match(LPAR); + setState(306); + expression(0); + setState(307); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChopAndChompStatementContext extends ParserRuleContext { + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOP() { return getToken(FunctionCraftParser.CHOP, 0); } + public TerminalNode CHOMP() { return getToken(FunctionCraftParser.CHOMP, 0); } + public ChopAndChompStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chopAndChompStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChopAndChompStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChopAndChompStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChopAndChompStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChopAndChompStatementContext chopAndChompStatement() throws RecognitionException { + ChopAndChompStatementContext _localctx = new ChopAndChompStatementContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_chopAndChompStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(313); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CHOP: + { + setState(309); + match(CHOP); + System.out.println("Built-In: CHOP"); + } + break; + case CHOMP: + { + setState(311); + match(CHOMP); + System.out.println("Built-In: CHOMP"); + } + break; + default: + throw new NoViableAltException(this); + } + setState(315); + match(LPAR); + setState(316); + expression(0); + setState(317); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignmentContext extends ParserRuleContext { + public Token IDENTIFIER; + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } + public TerminalNode PLUS_ASSIGN() { return getToken(FunctionCraftParser.PLUS_ASSIGN, 0); } + public TerminalNode MINUS_ASSIGN() { return getToken(FunctionCraftParser.MINUS_ASSIGN, 0); } + public TerminalNode DIVIDE_ASSIGN() { return getToken(FunctionCraftParser.DIVIDE_ASSIGN, 0); } + public TerminalNode MULT_ASSIGN() { return getToken(FunctionCraftParser.MULT_ASSIGN, 0); } + public TerminalNode MOD_ASSIGN() { return getToken(FunctionCraftParser.MOD_ASSIGN, 0); } + public AccessListContext accessList() { + return getRuleContext(AccessListContext.class,0); + } + public AssignmentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAssignment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAssignment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAssignment(this); + else return visitor.visitChildren(this); + } + } + + public final AssignmentContext assignment() throws RecognitionException { + AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_assignment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(319); + ((AssignmentContext)_localctx).IDENTIFIER = match(IDENTIFIER); + System.out.println("Assignment: " + (((AssignmentContext)_localctx).IDENTIFIER!=null?((AssignmentContext)_localctx).IDENTIFIER.getText():null)); + setState(322); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LBRACK) { + { + setState(321); + accessList(); + } + } + + setState(324); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 554153860399104L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(325); + expression(0); + setState(326); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessListContext extends ParserRuleContext { + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public AccessListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessList(this); + else return visitor.visitChildren(this); + } + } + + public final AccessListContext accessList() throws RecognitionException { + AccessListContext _localctx = new AccessListContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_accessList); + try { + enterOuterAlt(_localctx, 1); + { + setState(328); + match(LBRACK); + setState(329); + expression(0); + setState(330); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementContext extends ParserRuleContext { + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public LoopDoStatementContext loopDoStatement() { + return getRuleContext(LoopDoStatementContext.class,0); + } + public ForStatementContext forStatement() { + return getRuleContext(ForStatementContext.class,0); + } + public PutsStatementContext putsStatement() { + return getRuleContext(PutsStatementContext.class,0); + } + public PushStatementContext pushStatement() { + return getRuleContext(PushStatementContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public AssignmentContext assignment() { + return getRuleContext(AssignmentContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitStatement(this); + else return visitor.visitChildren(this); + } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_statement); + try { + setState(341); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(332); + ifStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(333); + loopDoStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(334); + forStatement(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(335); + putsStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(336); + pushStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(337); + expression(0); + setState(338); + match(SEMICOLLON); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(340); + assignment(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BodyContext extends ParserRuleContext { + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public BodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_body; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBody(this); + else return visitor.visitChildren(this); + } + } + + public final BodyContext body() throws RecognitionException { + BodyContext _localctx = new BodyContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_body); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(346); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { + { + { + setState(343); + statement(); + } + } + setState(348); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(350); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(349); + returnStatement(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends ParserRuleContext { + public Token APPEND; + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode APPEND() { return getToken(FunctionCraftParser.APPEND, 0); } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitExpression(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 46; + enterRecursionRule(_localctx, 46, RULE_expression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(353); + eqaulityExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(362); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(355); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(356); + ((ExpressionContext)_localctx).APPEND = match(APPEND); + setState(357); + eqaulityExpression(0); + System.out.println("Operator: " + (((ExpressionContext)_localctx).APPEND!=null?((ExpressionContext)_localctx).APPEND.getText():null)); + } + } + } + setState(364); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EqaulityExpressionContext extends ParserRuleContext { + public Token op; + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public TerminalNode EQUAL() { return getToken(FunctionCraftParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(FunctionCraftParser.NOT_EQUAL, 0); } + public EqaulityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_eqaulityExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterEqaulityExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitEqaulityExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitEqaulityExpression(this); + else return visitor.visitChildren(this); + } + } + + public final EqaulityExpressionContext eqaulityExpression() throws RecognitionException { + return eqaulityExpression(0); + } + + private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, _parentState); + EqaulityExpressionContext _prevctx = _localctx; + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_eqaulityExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(366); + relationalExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(378); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new EqaulityExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_eqaulityExpression); + setState(368); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(371); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL: + { + setState(369); + ((EqaulityExpressionContext)_localctx).op = match(EQUAL); + } + break; + case NOT_EQUAL: + { + setState(370); + ((EqaulityExpressionContext)_localctx).op = match(NOT_EQUAL); + } + break; + default: + throw new NoViableAltException(this); + } + setState(373); + relationalExpression(0); + System.out.println("Operator: " + (((EqaulityExpressionContext)_localctx).op!=null?((EqaulityExpressionContext)_localctx).op.getText():null)); + } + } + } + setState(380); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelationalExpressionContext extends ParserRuleContext { + public Token op; + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } + public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } + public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } + public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } + public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relationalExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRelationalExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRelationalExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRelationalExpression(this); + else return visitor.visitChildren(this); + } + } + + public final RelationalExpressionContext relationalExpression() throws RecognitionException { + return relationalExpression(0); + } + + private RelationalExpressionContext relationalExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); + RelationalExpressionContext _prevctx = _localctx; + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_relationalExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(382); + additiveExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(396); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new RelationalExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); + setState(384); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(389); + _errHandler.sync(this); + switch (_input.LA(1)) { + case GREATER_THAN: + { + setState(385); + ((RelationalExpressionContext)_localctx).op = match(GREATER_THAN); + } + break; + case LESS_THAN: + { + setState(386); + ((RelationalExpressionContext)_localctx).op = match(LESS_THAN); + } + break; + case LESS_EQUAL_THAN: + { + setState(387); + ((RelationalExpressionContext)_localctx).op = match(LESS_EQUAL_THAN); + } + break; + case GREATER_EQUAL_THAN: + { + setState(388); + ((RelationalExpressionContext)_localctx).op = match(GREATER_EQUAL_THAN); + } + break; + default: + throw new NoViableAltException(this); + } + setState(391); + additiveExpression(0); + System.out.println("Operator: " + (((RelationalExpressionContext)_localctx).op!=null?((RelationalExpressionContext)_localctx).op.getText():null)); + } + } + } + setState(398); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AdditiveExpressionContext extends ParserRuleContext { + public Token op; + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public TerminalNode PLUS() { return getToken(FunctionCraftParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAdditiveExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAdditiveExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAdditiveExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + return additiveExpression(0); + } + + private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); + AdditiveExpressionContext _prevctx = _localctx; + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_additiveExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(400); + multiplicativeExpression(0); + } + _ctx.stop = _input.LT(-1); + setState(412); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new AdditiveExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); + setState(402); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(405); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PLUS: + { + setState(403); + ((AdditiveExpressionContext)_localctx).op = match(PLUS); + } + break; + case MINUS: + { + setState(404); + ((AdditiveExpressionContext)_localctx).op = match(MINUS); + } + break; + default: + throw new NoViableAltException(this); + } + setState(407); + multiplicativeExpression(0); + System.out.println("Operator: " + (((AdditiveExpressionContext)_localctx).op!=null?((AdditiveExpressionContext)_localctx).op.getText():null)); + } + } + } + setState(414); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiplicativeExpressionContext extends ParserRuleContext { + public Token op; + public PreUnaryExpressionContext preUnaryExpression() { + return getRuleContext(PreUnaryExpressionContext.class,0); + } + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public TerminalNode MULT() { return getToken(FunctionCraftParser.MULT, 0); } + public TerminalNode DIVIDE() { return getToken(FunctionCraftParser.DIVIDE, 0); } + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMultiplicativeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMultiplicativeExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMultiplicativeExpression(this); + else return visitor.visitChildren(this); + } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + return multiplicativeExpression(0); + } + + private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); + MultiplicativeExpressionContext _prevctx = _localctx; + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_multiplicativeExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(416); + preUnaryExpression(); + } + _ctx.stop = _input.LT(-1); + setState(428); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); + setState(418); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(421); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MULT: + { + setState(419); + ((MultiplicativeExpressionContext)_localctx).op = match(MULT); + } + break; + case DIVIDE: + { + setState(420); + ((MultiplicativeExpressionContext)_localctx).op = match(DIVIDE); + } + break; + default: + throw new NoViableAltException(this); + } + setState(423); + preUnaryExpression(); + System.out.println("Operator: " + (((MultiplicativeExpressionContext)_localctx).op!=null?((MultiplicativeExpressionContext)_localctx).op.getText():null)); + } + } + } + setState(430); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PreUnaryExpressionContext extends ParserRuleContext { + public Token op; + public AccessExpressionContext accessExpression() { + return getRuleContext(AccessExpressionContext.class,0); + } + public TerminalNode NOT() { return getToken(FunctionCraftParser.NOT, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public TerminalNode INCREMENT() { return getToken(FunctionCraftParser.INCREMENT, 0); } + public TerminalNode DECREMENT() { return getToken(FunctionCraftParser.DECREMENT, 0); } + public PreUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_preUnaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPreUnaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPreUnaryExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPreUnaryExpression(this); + else return visitor.visitChildren(this); + } + } + + public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionException { + PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_preUnaryExpression); + try { + setState(441); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + enterOuterAlt(_localctx, 1); + { + setState(435); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NOT: + { + setState(431); + ((PreUnaryExpressionContext)_localctx).op = match(NOT); + } + break; + case MINUS: + { + setState(432); + ((PreUnaryExpressionContext)_localctx).op = match(MINUS); + } + break; + case INCREMENT: + { + setState(433); + ((PreUnaryExpressionContext)_localctx).op = match(INCREMENT); + } + break; + case DECREMENT: + { + setState(434); + ((PreUnaryExpressionContext)_localctx).op = match(DECREMENT); + } + break; + default: + throw new NoViableAltException(this); + } + setState(437); + accessExpression(); + System.out.println("Operator: " + (((PreUnaryExpressionContext)_localctx).op!=null?((PreUnaryExpressionContext)_localctx).op.getText():null)); + } + break; + case LEN: + case METHOD: + case CHOP: + case CHOMP: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(440); + accessExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessExpressionContext extends ParserRuleContext { + public OtherExpressionContext otherExpression() { + return getRuleContext(OtherExpressionContext.class,0); + } + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List functionArguments() { + return getRuleContexts(FunctionArgumentsContext.class); + } + public FunctionArgumentsContext functionArguments(int i) { + return getRuleContext(FunctionArgumentsContext.class,i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List accessList() { + return getRuleContexts(AccessListContext.class); + } + public AccessListContext accessList(int i) { + return getRuleContext(AccessListContext.class,i); + } + public AccessExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AccessExpressionContext accessExpression() throws RecognitionException { + AccessExpressionContext _localctx = new AccessExpressionContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_accessExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(443); + otherExpression(); + setState(451); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(444); + match(LPAR); + System.out.println("FunctionCall"); + setState(446); + functionArguments(); + setState(447); + match(RPAR); + } + } + } + setState(453); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + } + setState(457); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(454); + accessList(); + } + } + } + setState(459); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OtherExpressionContext extends ParserRuleContext { + public ValuesContext values() { + return getRuleContext(ValuesContext.class,0); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public LambdaFunctionContext lambdaFunction() { + return getRuleContext(LambdaFunctionContext.class,0); + } + public ChopAndChompStatementContext chopAndChompStatement() { + return getRuleContext(ChopAndChompStatementContext.class,0); + } + public MatchPatternStatementContext matchPatternStatement() { + return getRuleContext(MatchPatternStatementContext.class,0); + } + public FilterStatementContext filterStatement() { + return getRuleContext(FilterStatementContext.class,0); + } + public LenStatementContext lenStatement() { + return getRuleContext(LenStatementContext.class,0); + } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public OtherExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_otherExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterOtherExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitOtherExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitOtherExpression(this); + else return visitor.visitChildren(this); + } + } + + public final OtherExpressionContext otherExpression() throws RecognitionException { + OtherExpressionContext _localctx = new OtherExpressionContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_otherExpression); + int _la; + try { + setState(472); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(460); + values(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(461); + match(IDENTIFIER); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(462); + lambdaFunction(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(463); + chopAndChompStatement(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(464); + matchPatternStatement(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(465); + filterStatement(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(466); + lenStatement(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(467); + match(LPAR); + setState(469); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(468); + expression(0); + } + } + + setState(471); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LambdaFunctionContext extends ParserRuleContext { + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } + public FunctionArgumentsContext functionArguments() { + return getRuleContext(FunctionArgumentsContext.class,0); + } + public LambdaFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLambdaFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLambdaFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLambdaFunction(this); + else return visitor.visitChildren(this); + } + } + + public final LambdaFunctionContext lambdaFunction() throws RecognitionException { + LambdaFunctionContext _localctx = new LambdaFunctionContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_lambdaFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(474); + match(ARROW); + System.out.println("Structure: LAMBDA"); + setState(476); + functionArgumentsDeclaration(); + setState(477); + match(LBRACE); + setState(478); + body(); + setState(479); + match(RBRACE); + setState(480); + functionArguments(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValuesContext extends ParserRuleContext { + public BoolValueContext boolValue() { + return getRuleContext(BoolValueContext.class,0); + } + public TerminalNode STRING_VALUE() { return getToken(FunctionCraftParser.STRING_VALUE, 0); } + public TerminalNode INT_VALUE() { return getToken(FunctionCraftParser.INT_VALUE, 0); } + public TerminalNode FLOAT_VALUE() { return getToken(FunctionCraftParser.FLOAT_VALUE, 0); } + public ListValueContext listValue() { + return getRuleContext(ListValueContext.class,0); + } + public FunctionPointerContext functionPointer() { + return getRuleContext(FunctionPointerContext.class,0); + } + public ValuesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_values; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterValues(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitValues(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitValues(this); + else return visitor.visitChildren(this); + } + } + + public final ValuesContext values() throws RecognitionException { + ValuesContext _localctx = new ValuesContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_values); + try { + setState(488); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + case FALSE: + enterOuterAlt(_localctx, 1); + { + setState(482); + boolValue(); + } + break; + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(483); + match(STRING_VALUE); + } + break; + case INT_VALUE: + enterOuterAlt(_localctx, 3); + { + setState(484); + match(INT_VALUE); + } + break; + case FLOAT_VALUE: + enterOuterAlt(_localctx, 4); + { + setState(485); + match(FLOAT_VALUE); + } + break; + case LBRACK: + enterOuterAlt(_localctx, 5); + { + setState(486); + listValue(); + } + break; + case METHOD: + enterOuterAlt(_localctx, 6); + { + setState(487); + functionPointer(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ListValueContext extends ParserRuleContext { + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public FunctionArgumentsContext functionArguments() { + return getRuleContext(FunctionArgumentsContext.class,0); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public ListValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_listValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterListValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitListValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitListValue(this); + else return visitor.visitChildren(this); + } + } + + public final ListValueContext listValue() throws RecognitionException { + ListValueContext _localctx = new ListValueContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_listValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(490); + match(LBRACK); + setState(491); + functionArguments(); + setState(492); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BoolValueContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(FunctionCraftParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(FunctionCraftParser.FALSE, 0); } + public BoolValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBoolValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBoolValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBoolValue(this); + else return visitor.visitChildren(this); + } + } + + public final BoolValueContext boolValue() throws RecognitionException { + BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_boolValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(494); + _la = _input.LA(1); + if ( !(_la==TRUE || _la==FALSE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionPointerContext extends ParserRuleContext { + public TerminalNode METHOD() { return getToken(FunctionCraftParser.METHOD, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COLON() { return getToken(FunctionCraftParser.COLON, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public FunctionPointerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionPointer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionPointer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionPointer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionPointer(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionPointerContext functionPointer() throws RecognitionException { + FunctionPointerContext _localctx = new FunctionPointerContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_functionPointer); + try { + enterOuterAlt(_localctx, 1); + { + setState(496); + match(METHOD); + setState(497); + match(LPAR); + setState(498); + match(COLON); + setState(499); + match(IDENTIFIER); + setState(500); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 23: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 24: + return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); + case 25: + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + case 26: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 27: + return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean eqaulityExpression_sempred(EqaulityExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 2); + } + return true; + } + private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 2); + } + return true; + } + private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 4: + return precpred(_ctx, 2); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001A\u01f7\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0001\u0000\u0001\u0000\u0005\u0000K\b\u0000\n\u0000\f\u0000"+ + "N\t\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0005\u0002]\b\u0002\n\u0002\f\u0002`\t\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002k\b\u0002\n\u0002\f\u0002"+ + "n\t\u0002\u0001\u0002\u0001\u0002\u0003\u0002r\b\u0002\u0003\u0002t\b"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0005\u0003\u0083\b\u0003\n\u0003\f\u0003\u0086\t\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0005\u0005\u0095\b\u0005\n\u0005\f\u0005\u0098\t\u0005\u0003"+ + "\u0005\u009a\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u009f"+ + "\b\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0005"+ + "\u0007\u00ac\b\u0007\n\u0007\f\u0007\u00af\t\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0003\u0007\u00b4\b\u0007\u0001\u0007\u0001\u0007\u0001\b"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00bd\b\b\u0001\b\u0001\b\u0003"+ + "\b\u00c1\b\b\u0005\b\u00c3\b\b\n\b\f\b\u00c6\t\b\u0005\b\u00c8\b\b\n\b"+ + "\f\b\u00cb\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t"+ + "\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0003\r\u00ee\b\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0003\r\u00f5\b\r\u0001\r\u0005\r\u00f8\b\r\n\r\f\r\u00fb\t"+ + "\r\u0001\r\u0003\r\u00fe\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0112\b\u000f\n\u000f\f\u000f"+ + "\u0115\t\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u011a\b"+ + "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ + "\u0010\u0127\b\u0010\n\u0010\f\u0010\u012a\t\u0010\u0001\u0010\u0001\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0003\u0012\u013a\b\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u0143\b\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u0156\b\u0015"+ + "\u0001\u0016\u0005\u0016\u0159\b\u0016\n\u0016\f\u0016\u015c\t\u0016\u0001"+ + "\u0016\u0003\u0016\u015f\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u0169"+ + "\b\u0017\n\u0017\f\u0017\u016c\t\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u0174\b\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0005\u0018\u0179\b\u0018\n\u0018\f\u0018\u017c"+ + "\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u0186\b\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0005\u0019\u018b\b\u0019\n\u0019\f\u0019\u018e\t\u0019"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0003\u001a\u0196\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a"+ + "\u019b\b\u001a\n\u001a\f\u001a\u019e\t\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u01a6\b\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u01ab\b\u001b\n\u001b\f\u001b"+ + "\u01ae\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u01b4\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u01ba\b\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0005\u001d\u01c2\b\u001d\n\u001d\f\u001d\u01c5\t\u001d\u0001"+ + "\u001d\u0005\u001d\u01c8\b\u001d\n\u001d\f\u001d\u01cb\t\u001d\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0003\u001e\u01d6\b\u001e\u0001\u001e\u0003\u001e"+ + "\u01d9\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0003 \u01e9\b \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0000\u0005.0246$\u0000\u0002"+ + "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ + " \"$&(*,.02468:<>@BDF\u0000\u0003\u0001\u0000\u001e\u001f\u0001\u0000"+ + "+0\u0001\u0000&\'\u0214\u0000L\u0001\u0000\u0000\u0000\u0002Q\u0001\u0000"+ + "\u0000\u0000\u0004X\u0001\u0000\u0000\u0000\u0006w\u0001\u0000\u0000\u0000"+ + "\b\u0089\u0001\u0000\u0000\u0000\n\u0099\u0001\u0000\u0000\u0000\f\u009b"+ + "\u0001\u0000\u0000\u0000\u000e\u00a2\u0001\u0000\u0000\u0000\u0010\u00c9"+ + "\u0001\u0000\u0000\u0000\u0012\u00cc\u0001\u0000\u0000\u0000\u0014\u00d3"+ + "\u0001\u0000\u0000\u0000\u0016\u00d9\u0001\u0000\u0000\u0000\u0018\u00e2"+ + "\u0001\u0000\u0000\u0000\u001a\u00f9\u0001\u0000\u0000\u0000\u001c\u00ff"+ + "\u0001\u0000\u0000\u0000\u001e\u0119\u0001\u0000\u0000\u0000 \u011b\u0001"+ + "\u0000\u0000\u0000\"\u012d\u0001\u0000\u0000\u0000$\u0139\u0001\u0000"+ + "\u0000\u0000&\u013f\u0001\u0000\u0000\u0000(\u0148\u0001\u0000\u0000\u0000"+ + "*\u0155\u0001\u0000\u0000\u0000,\u015a\u0001\u0000\u0000\u0000.\u0160"+ + "\u0001\u0000\u0000\u00000\u016d\u0001\u0000\u0000\u00002\u017d\u0001\u0000"+ + "\u0000\u00004\u018f\u0001\u0000\u0000\u00006\u019f\u0001\u0000\u0000\u0000"+ + "8\u01b9\u0001\u0000\u0000\u0000:\u01bb\u0001\u0000\u0000\u0000<\u01d8"+ + "\u0001\u0000\u0000\u0000>\u01da\u0001\u0000\u0000\u0000@\u01e8\u0001\u0000"+ + "\u0000\u0000B\u01ea\u0001\u0000\u0000\u0000D\u01ee\u0001\u0000\u0000\u0000"+ + "F\u01f0\u0001\u0000\u0000\u0000HK\u0003\u0002\u0001\u0000IK\u0003\u0006"+ + "\u0003\u0000JH\u0001\u0000\u0000\u0000JI\u0001\u0000\u0000\u0000KN\u0001"+ + "\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000LM\u0001\u0000\u0000\u0000"+ + "MO\u0001\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000OP\u0003\b\u0004\u0000"+ + "P\u0001\u0001\u0000\u0000\u0000QR\u0005\u0001\u0000\u0000RS\u0005>\u0000"+ + "\u0000ST\u0006\u0001\uffff\uffff\u0000TU\u0003\u0004\u0002\u0000UV\u0003"+ + ",\u0016\u0000VW\u0005\u0002\u0000\u0000W\u0003\u0001\u0000\u0000\u0000"+ + "Xs\u00051\u0000\u0000Y^\u0005>\u0000\u0000Z[\u00057\u0000\u0000[]\u0005"+ + ">\u0000\u0000\\Z\u0001\u0000\u0000\u0000]`\u0001\u0000\u0000\u0000^\\"+ + "\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_q\u0001\u0000\u0000"+ + "\u0000`^\u0001\u0000\u0000\u0000ab\u00057\u0000\u0000bc\u00053\u0000\u0000"+ + "cd\u0005>\u0000\u0000de\u00050\u0000\u0000el\u0003.\u0017\u0000fg\u0005"+ + "7\u0000\u0000gh\u0005>\u0000\u0000hi\u00050\u0000\u0000ik\u0003.\u0017"+ + "\u0000jf\u0001\u0000\u0000\u0000kn\u0001\u0000\u0000\u0000lj\u0001\u0000"+ + "\u0000\u0000lm\u0001\u0000\u0000\u0000mo\u0001\u0000\u0000\u0000nl\u0001"+ + "\u0000\u0000\u0000op\u00054\u0000\u0000pr\u0001\u0000\u0000\u0000qa\u0001"+ + "\u0000\u0000\u0000qr\u0001\u0000\u0000\u0000rt\u0001\u0000\u0000\u0000"+ + "sY\u0001\u0000\u0000\u0000st\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000"+ + "\u0000uv\u00052\u0000\u0000v\u0005\u0001\u0000\u0000\u0000wx\u0005\f\u0000"+ + "\u0000xy\u0005>\u0000\u0000yz\u0006\u0003\uffff\uffff\u0000z{\u00051\u0000"+ + "\u0000{|\u0005>\u0000\u0000|\u0084\u00052\u0000\u0000}~\u0005#\u0000\u0000"+ + "~\u007f\u0003\u0010\b\u0000\u007f\u0080\u00050\u0000\u0000\u0080\u0081"+ + "\u0003.\u0017\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082}\u0001\u0000"+ + "\u0000\u0000\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001\u0000"+ + "\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000"+ + "\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u0088\u0005;\u0000"+ + "\u0000\u0088\u0007\u0001\u0000\u0000\u0000\u0089\u008a\u0005\u0001\u0000"+ + "\u0000\u008a\u008b\u0005\u0003\u0000\u0000\u008b\u008c\u0006\u0004\uffff"+ + "\uffff\u0000\u008c\u008d\u00051\u0000\u0000\u008d\u008e\u00052\u0000\u0000"+ + "\u008e\u008f\u0003,\u0016\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090"+ + "\t\u0001\u0000\u0000\u0000\u0091\u0096\u0003.\u0017\u0000\u0092\u0093"+ + "\u00057\u0000\u0000\u0093\u0095\u0003.\u0017\u0000\u0094\u0092\u0001\u0000"+ + "\u0000\u0000\u0095\u0098\u0001\u0000\u0000\u0000\u0096\u0094\u0001\u0000"+ + "\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u009a\u0001\u0000"+ + "\u0000\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0099\u0091\u0001\u0000"+ + "\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u000b\u0001\u0000"+ + "\u0000\u0000\u009b\u009c\u0005\u0007\u0000\u0000\u009c\u009e\u0006\u0006"+ + "\uffff\uffff\u0000\u009d\u009f\u0003.\u0017\u0000\u009e\u009d\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0001\u0000\u0000\u0000\u009f\u00a0\u0001\u0000"+ + "\u0000\u0000\u00a0\u00a1\u0005;\u0000\u0000\u00a1\r\u0001\u0000\u0000"+ + "\u0000\u00a2\u00a3\u0005\b\u0000\u0000\u00a3\u00a4\u0006\u0007\uffff\uffff"+ + "\u0000\u00a4\u00a5\u0003\u0010\b\u0000\u00a5\u00ad\u0003,\u0016\u0000"+ + "\u00a6\u00a7\u0005\n\u0000\u0000\u00a7\u00a8\u0006\u0007\uffff\uffff\u0000"+ + "\u00a8\u00a9\u0003\u0010\b\u0000\u00a9\u00aa\u0003,\u0016\u0000\u00aa"+ + "\u00ac\u0001\u0000\u0000\u0000\u00ab\u00a6\u0001\u0000\u0000\u0000\u00ac"+ + "\u00af\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001\u0000\u0000\u0000\u00ad"+ + "\u00ae\u0001\u0000\u0000\u0000\u00ae\u00b3\u0001\u0000\u0000\u0000\u00af"+ + "\u00ad\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005\t\u0000\u0000\u00b1\u00b2"+ + "\u0006\u0007\uffff\uffff\u0000\u00b2\u00b4\u0003,\u0016\u0000\u00b3\u00b0"+ + "\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001\u0000\u0000\u0000\u00b4\u00b5"+ + "\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005\u0002\u0000\u0000\u00b6\u000f"+ + "\u0001\u0000\u0000\u0000\u00b7\u00b8\u00051\u0000\u0000\u00b8\u00b9\u0003"+ + ".\u0017\u0000\u00b9\u00c4\u00052\u0000\u0000\u00ba\u00bc\u0007\u0000\u0000"+ + "\u0000\u00bb\u00bd\u00051\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000"+ + "\u00bc\u00bd\u0001\u0000\u0000\u0000\u00bd\u00be\u0001\u0000\u0000\u0000"+ + "\u00be\u00c0\u0003\u0010\b\u0000\u00bf\u00c1\u00052\u0000\u0000\u00c0"+ + "\u00bf\u0001\u0000\u0000\u0000\u00c0\u00c1\u0001\u0000\u0000\u0000\u00c1"+ + "\u00c3\u0001\u0000\u0000\u0000\u00c2\u00ba\u0001\u0000\u0000\u0000\u00c3"+ + "\u00c6\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4"+ + "\u00c5\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000\u0000\u0000\u00c6"+ + "\u00c4\u0001\u0000\u0000\u0000\u00c7\u00b7\u0001\u0000\u0000\u0000\u00c8"+ + "\u00cb\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00c9"+ + "\u00ca\u0001\u0000\u0000\u0000\u00ca\u0011\u0001\u0000\u0000\u0000\u00cb"+ + "\u00c9\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005\u0004\u0000\u0000\u00cd"+ + "\u00ce\u0006\t\uffff\uffff\u0000\u00ce\u00cf\u00051\u0000\u0000\u00cf"+ + "\u00d0\u0003.\u0017\u0000\u00d0\u00d1\u00052\u0000\u0000\u00d1\u00d2\u0005"+ + ";\u0000\u0000\u00d2\u0013\u0001\u0000\u0000\u0000\u00d3\u00d4\u0005\u0006"+ + "\u0000\u0000\u00d4\u00d5\u0006\n\uffff\uffff\u0000\u00d5\u00d6\u00051"+ + "\u0000\u0000\u00d6\u00d7\u0003.\u0017\u0000\u00d7\u00d8\u00052\u0000\u0000"+ + "\u00d8\u0015\u0001\u0000\u0000\u0000\u00d9\u00da\u0005\u0005\u0000\u0000"+ + "\u00da\u00db\u0006\u000b\uffff\uffff\u0000\u00db\u00dc\u00051\u0000\u0000"+ + "\u00dc\u00dd\u0003.\u0017\u0000\u00dd\u00de\u00057\u0000\u0000\u00de\u00df"+ + "\u0003.\u0017\u0000\u00df\u00e0\u00052\u0000\u0000\u00e0\u00e1\u0005;"+ + "\u0000\u0000\u00e1\u0017\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005\u000e"+ + "\u0000\u0000\u00e3\u00e4\u0005\u0011\u0000\u0000\u00e4\u00e5\u0006\f\uffff"+ + "\uffff\u0000\u00e5\u00e6\u0003\u001a\r\u0000\u00e6\u00e7\u0005\u0002\u0000"+ + "\u0000\u00e7\u0019\u0001\u0000\u0000\u0000\u00e8\u00f8\u0003*\u0015\u0000"+ + "\u00e9\u00ea\u0005(\u0000\u0000\u00ea\u00ed\u0006\r\uffff\uffff\u0000"+ + "\u00eb\u00ec\u0005\b\u0000\u0000\u00ec\u00ee\u0003\u0010\b\u0000\u00ed"+ + "\u00eb\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000\u00ee"+ + "\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f8\u0005;\u0000\u0000\u00f0\u00f1"+ + "\u0005)\u0000\u0000\u00f1\u00f4\u0006\r\uffff\uffff\u0000\u00f2\u00f3"+ + "\u0005\b\u0000\u0000\u00f3\u00f5\u0003\u0010\b\u0000\u00f4\u00f2\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f6\u0001"+ + "\u0000\u0000\u0000\u00f6\u00f8\u0005;\u0000\u0000\u00f7\u00e8\u0001\u0000"+ + "\u0000\u0000\u00f7\u00e9\u0001\u0000\u0000\u0000\u00f7\u00f0\u0001\u0000"+ + "\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000"+ + "\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fd\u0001\u0000"+ + "\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc\u00fe\u0003\f\u0006"+ + "\u0000\u00fd\u00fc\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000"+ + "\u0000\u00fe\u001b\u0001\u0000\u0000\u0000\u00ff\u0100\u0005\u000f\u0000"+ + "\u0000\u0100\u0101\u0006\u000e\uffff\uffff\u0000\u0101\u0102\u0005>\u0000"+ + "\u0000\u0102\u0103\u0005\u0010\u0000\u0000\u0103\u0104\u0003\u001e\u000f"+ + "\u0000\u0104\u0105\u0003\u001a\r\u0000\u0105\u0106\u0005\u0002\u0000\u0000"+ + "\u0106\u001d\u0001\u0000\u0000\u0000\u0107\u0108\u00051\u0000\u0000\u0108"+ + "\u0109\u0003.\u0017\u0000\u0109\u010a\u00059\u0000\u0000\u010a\u010b\u0003"+ + ".\u0017\u0000\u010b\u010c\u00052\u0000\u0000\u010c\u011a\u0001\u0000\u0000"+ + "\u0000\u010d\u010e\u00053\u0000\u0000\u010e\u0113\u0003.\u0017\u0000\u010f"+ + "\u0110\u00057\u0000\u0000\u0110\u0112\u0003.\u0017\u0000\u0111\u010f\u0001"+ + "\u0000\u0000\u0000\u0112\u0115\u0001\u0000\u0000\u0000\u0113\u0111\u0001"+ + "\u0000\u0000\u0000\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0116\u0001"+ + "\u0000\u0000\u0000\u0115\u0113\u0001\u0000\u0000\u0000\u0116\u0117\u0005"+ + "4\u0000\u0000\u0117\u011a\u0001\u0000\u0000\u0000\u0118\u011a\u0005>\u0000"+ + "\u0000\u0119\u0107\u0001\u0000\u0000\u0000\u0119\u010d\u0001\u0000\u0000"+ + "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u011a\u001f\u0001\u0000\u0000"+ + "\u0000\u011b\u011c\u0006\u0010\uffff\uffff\u0000\u011c\u011d\u00053\u0000"+ + "\u0000\u011d\u011e\u0003.\u0017\u0000\u011e\u011f\u0005$\u0000\u0000\u011f"+ + "\u0120\u0005>\u0000\u0000\u0120\u0121\u0005*\u0000\u0000\u0121\u0122\u0003"+ + "\u001e\u000f\u0000\u0122\u0123\u00057\u0000\u0000\u0123\u0128\u0003.\u0017"+ + "\u0000\u0124\u0125\u00057\u0000\u0000\u0125\u0127\u0003.\u0017\u0000\u0126"+ + "\u0124\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128"+ + "\u0126\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129"+ + "\u012b\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b"+ + "\u012c\u00054\u0000\u0000\u012c!\u0001\u0000\u0000\u0000\u012d\u012e\u0006"+ + "\u0011\uffff\uffff\u0000\u012e\u012f\u0005>\u0000\u0000\u012f\u0130\u0005"+ + "8\u0000\u0000\u0130\u0131\u0005\r\u0000\u0000\u0131\u0132\u00051\u0000"+ + "\u0000\u0132\u0133\u0003.\u0017\u0000\u0133\u0134\u00052\u0000\u0000\u0134"+ + "#\u0001\u0000\u0000\u0000\u0135\u0136\u0005\u0012\u0000\u0000\u0136\u013a"+ + "\u0006\u0012\uffff\uffff\u0000\u0137\u0138\u0005\u0013\u0000\u0000\u0138"+ + "\u013a\u0006\u0012\uffff\uffff\u0000\u0139\u0135\u0001\u0000\u0000\u0000"+ + "\u0139\u0137\u0001\u0000\u0000\u0000\u013a\u013b\u0001\u0000\u0000\u0000"+ + "\u013b\u013c\u00051\u0000\u0000\u013c\u013d\u0003.\u0017\u0000\u013d\u013e"+ + "\u00052\u0000\u0000\u013e%\u0001\u0000\u0000\u0000\u013f\u0140\u0005>"+ + "\u0000\u0000\u0140\u0142\u0006\u0013\uffff\uffff\u0000\u0141\u0143\u0003"+ + "(\u0014\u0000\u0142\u0141\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000"+ + "\u0000\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0145\u0007\u0001"+ + "\u0000\u0000\u0145\u0146\u0003.\u0017\u0000\u0146\u0147\u0005;\u0000\u0000"+ + "\u0147\'\u0001\u0000\u0000\u0000\u0148\u0149\u00053\u0000\u0000\u0149"+ + "\u014a\u0003.\u0017\u0000\u014a\u014b\u00054\u0000\u0000\u014b)\u0001"+ + "\u0000\u0000\u0000\u014c\u0156\u0003\u000e\u0007\u0000\u014d\u0156\u0003"+ + "\u0018\f\u0000\u014e\u0156\u0003\u001c\u000e\u0000\u014f\u0156\u0003\u0012"+ + "\t\u0000\u0150\u0156\u0003\u0016\u000b\u0000\u0151\u0152\u0003.\u0017"+ + "\u0000\u0152\u0153\u0005;\u0000\u0000\u0153\u0156\u0001\u0000\u0000\u0000"+ + "\u0154\u0156\u0003&\u0013\u0000\u0155\u014c\u0001\u0000\u0000\u0000\u0155"+ + "\u014d\u0001\u0000\u0000\u0000\u0155\u014e\u0001\u0000\u0000\u0000\u0155"+ + "\u014f\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0155"+ + "\u0151\u0001\u0000\u0000\u0000\u0155\u0154\u0001\u0000\u0000\u0000\u0156"+ + "+\u0001\u0000\u0000\u0000\u0157\u0159\u0003*\u0015\u0000\u0158\u0157\u0001"+ + "\u0000\u0000\u0000\u0159\u015c\u0001\u0000\u0000\u0000\u015a\u0158\u0001"+ + "\u0000\u0000\u0000\u015a\u015b\u0001\u0000\u0000\u0000\u015b\u015e\u0001"+ + "\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u015f\u0003"+ + "\f\u0006\u0000\u015e\u015d\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000"+ + "\u0000\u0000\u015f-\u0001\u0000\u0000\u0000\u0160\u0161\u0006\u0017\uffff"+ + "\uffff\u0000\u0161\u0162\u00030\u0018\u0000\u0162\u016a\u0001\u0000\u0000"+ + "\u0000\u0163\u0164\n\u0002\u0000\u0000\u0164\u0165\u0005%\u0000\u0000"+ + "\u0165\u0166\u00030\u0018\u0000\u0166\u0167\u0006\u0017\uffff\uffff\u0000"+ + "\u0167\u0169\u0001\u0000\u0000\u0000\u0168\u0163\u0001\u0000\u0000\u0000"+ + "\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000\u0000\u0000"+ + "\u016a\u016b\u0001\u0000\u0000\u0000\u016b/\u0001\u0000\u0000\u0000\u016c"+ + "\u016a\u0001\u0000\u0000\u0000\u016d\u016e\u0006\u0018\uffff\uffff\u0000"+ + "\u016e\u016f\u00032\u0019\u0000\u016f\u017a\u0001\u0000\u0000\u0000\u0170"+ + "\u0173\n\u0002\u0000\u0000\u0171\u0174\u0005\u0018\u0000\u0000\u0172\u0174"+ + "\u0005\u0019\u0000\u0000\u0173\u0171\u0001\u0000\u0000\u0000\u0173\u0172"+ + "\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000\u0000\u0000\u0175\u0176"+ + "\u00032\u0019\u0000\u0176\u0177\u0006\u0018\uffff\uffff\u0000\u0177\u0179"+ + "\u0001\u0000\u0000\u0000\u0178\u0170\u0001\u0000\u0000\u0000\u0179\u017c"+ + "\u0001\u0000\u0000\u0000\u017a\u0178\u0001\u0000\u0000\u0000\u017a\u017b"+ + "\u0001\u0000\u0000\u0000\u017b1\u0001\u0000\u0000\u0000\u017c\u017a\u0001"+ + "\u0000\u0000\u0000\u017d\u017e\u0006\u0019\uffff\uffff\u0000\u017e\u017f"+ + "\u00034\u001a\u0000\u017f\u018c\u0001\u0000\u0000\u0000\u0180\u0185\n"+ + "\u0002\u0000\u0000\u0181\u0186\u0005\u001c\u0000\u0000\u0182\u0186\u0005"+ + "\u001d\u0000\u0000\u0183\u0186\u0005\u001a\u0000\u0000\u0184\u0186\u0005"+ + "\u001b\u0000\u0000\u0185\u0181\u0001\u0000\u0000\u0000\u0185\u0182\u0001"+ + "\u0000\u0000\u0000\u0185\u0183\u0001\u0000\u0000\u0000\u0185\u0184\u0001"+ + "\u0000\u0000\u0000\u0186\u0187\u0001\u0000\u0000\u0000\u0187\u0188\u0003"+ + "4\u001a\u0000\u0188\u0189\u0006\u0019\uffff\uffff\u0000\u0189\u018b\u0001"+ + "\u0000\u0000\u0000\u018a\u0180\u0001\u0000\u0000\u0000\u018b\u018e\u0001"+ + "\u0000\u0000\u0000\u018c\u018a\u0001\u0000\u0000\u0000\u018c\u018d\u0001"+ + "\u0000\u0000\u0000\u018d3\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ + "\u0000\u0000\u018f\u0190\u0006\u001a\uffff\uffff\u0000\u0190\u0191\u0003"+ + "6\u001b\u0000\u0191\u019c\u0001\u0000\u0000\u0000\u0192\u0195\n\u0002"+ + "\u0000\u0000\u0193\u0196\u0005\u0014\u0000\u0000\u0194\u0196\u0005\u0015"+ + "\u0000\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0195\u0194\u0001\u0000"+ + "\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u0198\u00036\u001b"+ + "\u0000\u0198\u0199\u0006\u001a\uffff\uffff\u0000\u0199\u019b\u0001\u0000"+ + "\u0000\u0000\u019a\u0192\u0001\u0000\u0000\u0000\u019b\u019e\u0001\u0000"+ + "\u0000\u0000\u019c\u019a\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000"+ + "\u0000\u0000\u019d5\u0001\u0000\u0000\u0000\u019e\u019c\u0001\u0000\u0000"+ + "\u0000\u019f\u01a0\u0006\u001b\uffff\uffff\u0000\u01a0\u01a1\u00038\u001c"+ + "\u0000\u01a1\u01ac\u0001\u0000\u0000\u0000\u01a2\u01a5\n\u0002\u0000\u0000"+ + "\u01a3\u01a6\u0005\u0016\u0000\u0000\u01a4\u01a6\u0005\u0017\u0000\u0000"+ + "\u01a5\u01a3\u0001\u0000\u0000\u0000\u01a5\u01a4\u0001\u0000\u0000\u0000"+ + "\u01a6\u01a7\u0001\u0000\u0000\u0000\u01a7\u01a8\u00038\u001c\u0000\u01a8"+ + "\u01a9\u0006\u001b\uffff\uffff\u0000\u01a9\u01ab\u0001\u0000\u0000\u0000"+ + "\u01aa\u01a2\u0001\u0000\u0000\u0000\u01ab\u01ae\u0001\u0000\u0000\u0000"+ + "\u01ac\u01aa\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000\u0000\u0000"+ + "\u01ad7\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000\u0000\u01af"+ + "\u01b4\u0005 \u0000\u0000\u01b0\u01b4\u0005\u0015\u0000\u0000\u01b1\u01b4"+ + "\u0005!\u0000\u0000\u01b2\u01b4\u0005\"\u0000\u0000\u01b3\u01af\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b0\u0001\u0000\u0000\u0000\u01b3\u01b1\u0001"+ + "\u0000\u0000\u0000\u01b3\u01b2\u0001\u0000\u0000\u0000\u01b4\u01b5\u0001"+ + "\u0000\u0000\u0000\u01b5\u01b6\u0003:\u001d\u0000\u01b6\u01b7\u0006\u001c"+ + "\uffff\uffff\u0000\u01b7\u01ba\u0001\u0000\u0000\u0000\u01b8\u01ba\u0003"+ + ":\u001d\u0000\u01b9\u01b3\u0001\u0000\u0000\u0000\u01b9\u01b8\u0001\u0000"+ + "\u0000\u0000\u01ba9\u0001\u0000\u0000\u0000\u01bb\u01c3\u0003<\u001e\u0000"+ + "\u01bc\u01bd\u00051\u0000\u0000\u01bd\u01be\u0006\u001d\uffff\uffff\u0000"+ + "\u01be\u01bf\u0003\n\u0005\u0000\u01bf\u01c0\u00052\u0000\u0000\u01c0"+ + "\u01c2\u0001\u0000\u0000\u0000\u01c1\u01bc\u0001\u0000\u0000\u0000\u01c2"+ + "\u01c5\u0001\u0000\u0000\u0000\u01c3\u01c1\u0001\u0000\u0000\u0000\u01c3"+ + "\u01c4\u0001\u0000\u0000\u0000\u01c4\u01c9\u0001\u0000\u0000\u0000\u01c5"+ + "\u01c3\u0001\u0000\u0000\u0000\u01c6\u01c8\u0003(\u0014\u0000\u01c7\u01c6"+ + "\u0001\u0000\u0000\u0000\u01c8\u01cb\u0001\u0000\u0000\u0000\u01c9\u01c7"+ + "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0001\u0000\u0000\u0000\u01ca;\u0001"+ + "\u0000\u0000\u0000\u01cb\u01c9\u0001\u0000\u0000\u0000\u01cc\u01d9\u0003"+ + "@ \u0000\u01cd\u01d9\u0005>\u0000\u0000\u01ce\u01d9\u0003>\u001f\u0000"+ + "\u01cf\u01d9\u0003$\u0012\u0000\u01d0\u01d9\u0003\"\u0011\u0000\u01d1"+ + "\u01d9\u0003 \u0010\u0000\u01d2\u01d9\u0003\u0014\n\u0000\u01d3\u01d5"+ + "\u00051\u0000\u0000\u01d4\u01d6\u0003.\u0017\u0000\u01d5\u01d4\u0001\u0000"+ + "\u0000\u0000\u01d5\u01d6\u0001\u0000\u0000\u0000\u01d6\u01d7\u0001\u0000"+ + "\u0000\u0000\u01d7\u01d9\u00052\u0000\u0000\u01d8\u01cc\u0001\u0000\u0000"+ + "\u0000\u01d8\u01cd\u0001\u0000\u0000\u0000\u01d8\u01ce\u0001\u0000\u0000"+ + "\u0000\u01d8\u01cf\u0001\u0000\u0000\u0000\u01d8\u01d0\u0001\u0000\u0000"+ + "\u0000\u01d8\u01d1\u0001\u0000\u0000\u0000\u01d8\u01d2\u0001\u0000\u0000"+ + "\u0000\u01d8\u01d3\u0001\u0000\u0000\u0000\u01d9=\u0001\u0000\u0000\u0000"+ + "\u01da\u01db\u0005*\u0000\u0000\u01db\u01dc\u0006\u001f\uffff\uffff\u0000"+ + "\u01dc\u01dd\u0003\u0004\u0002\u0000\u01dd\u01de\u00055\u0000\u0000\u01de"+ + "\u01df\u0003,\u0016\u0000\u01df\u01e0\u00056\u0000\u0000\u01e0\u01e1\u0003"+ + "\n\u0005\u0000\u01e1?\u0001\u0000\u0000\u0000\u01e2\u01e9\u0003D\"\u0000"+ + "\u01e3\u01e9\u0005?\u0000\u0000\u01e4\u01e9\u0005<\u0000\u0000\u01e5\u01e9"+ + "\u0005=\u0000\u0000\u01e6\u01e9\u0003B!\u0000\u01e7\u01e9\u0003F#\u0000"+ + "\u01e8\u01e2\u0001\u0000\u0000\u0000\u01e8\u01e3\u0001\u0000\u0000\u0000"+ + "\u01e8\u01e4\u0001\u0000\u0000\u0000\u01e8\u01e5\u0001\u0000\u0000\u0000"+ + "\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e7\u0001\u0000\u0000\u0000"+ + "\u01e9A\u0001\u0000\u0000\u0000\u01ea\u01eb\u00053\u0000\u0000\u01eb\u01ec"+ + "\u0003\n\u0005\u0000\u01ec\u01ed\u00054\u0000\u0000\u01edC\u0001\u0000"+ + "\u0000\u0000\u01ee\u01ef\u0007\u0002\u0000\u0000\u01efE\u0001\u0000\u0000"+ + "\u0000\u01f0\u01f1\u0005\u000b\u0000\u0000\u01f1\u01f2\u00051\u0000\u0000"+ + "\u01f2\u01f3\u0005:\u0000\u0000\u01f3\u01f4\u0005>\u0000\u0000\u01f4\u01f5"+ + "\u00052\u0000\u0000\u01f5G\u0001\u0000\u0000\u0000-JL^lqs\u0084\u0096"+ + "\u0099\u009e\u00ad\u00b3\u00bc\u00c0\u00c4\u00c9\u00ed\u00f4\u00f7\u00f9"+ + "\u00fd\u0113\u0119\u0128\u0139\u0142\u0155\u015a\u015e\u016a\u0173\u017a"+ + "\u0185\u018c\u0195\u019c\u01a5\u01ac\u01b3\u01b9\u01c3\u01c9\u01d5\u01d8"+ + "\u01e8"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java new file mode 100644 index 0000000..1cb127c --- /dev/null +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java @@ -0,0 +1,229 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package parsers; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link FunctionCraftParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface FunctionCraftVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMain(FunctionCraftParser.MainContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRange(FunctionCraftParser.RangeContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBody(FunctionCraftParser.BodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file From 8bd2d6a66a3967e65d0ae6f2c44ad6f9235d9e9a Mon Sep 17 00:00:00 2001 From: javad Date: Thu, 11 Apr 2024 20:40:15 +0330 Subject: [PATCH 02/23] add program semantics --- Phase2Template/.idea/.gitignore | 3 + .../.idea/libraries/antlr_4_13_1_complete.xml | 9 ++ Phase2Template/.idea/misc.xml | 6 + Phase2Template/.idea/modules.xml | 8 ++ Phase2Template/.idea/uiDesigner.xml | 124 ++++++++++++++++++ Phase2Template/.idea/vcs.xml | 6 + .../Phase2/src/main/ast/nodes/Program.java | 41 ++++++ .../ast/nodes/declaration/Declaration.java | 6 + .../declaration/FunctionDeclaration.java | 28 ++++ .../nodes/declaration/MainDeclaration.java | 17 +++ .../nodes/declaration/PatternDeclaration.java | 29 ++++ .../ast/nodes/declaration/VarDeclaration.java | 20 +++ .../main/ast/nodes/expression/Expression.java | 6 + .../main/ast/nodes/expression/Identifier.java | 14 ++ .../main/ast/nodes/statement/Statement.java | 5 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 69 +++++----- .../Phase2/src/main/visitor/IVisitor.java | 13 ++ Phase2Template/Phase2Template.iml | 12 ++ 18 files changed, 382 insertions(+), 34 deletions(-) create mode 100644 Phase2Template/.idea/.gitignore create mode 100644 Phase2Template/.idea/libraries/antlr_4_13_1_complete.xml create mode 100644 Phase2Template/.idea/misc.xml create mode 100644 Phase2Template/.idea/modules.xml create mode 100644 Phase2Template/.idea/uiDesigner.xml create mode 100644 Phase2Template/.idea/vcs.xml create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/declaration/Declaration.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/declaration/FunctionDeclaration.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/declaration/MainDeclaration.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/Expression.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/Identifier.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java create mode 100644 Phase2Template/Phase2Template.iml diff --git a/Phase2Template/.idea/.gitignore b/Phase2Template/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Phase2Template/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Phase2Template/.idea/libraries/antlr_4_13_1_complete.xml b/Phase2Template/.idea/libraries/antlr_4_13_1_complete.xml new file mode 100644 index 0000000..c1a2632 --- /dev/null +++ b/Phase2Template/.idea/libraries/antlr_4_13_1_complete.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/.idea/misc.xml b/Phase2Template/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/Phase2Template/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Phase2Template/.idea/modules.xml b/Phase2Template/.idea/modules.xml new file mode 100644 index 0000000..22a3745 --- /dev/null +++ b/Phase2Template/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/.idea/uiDesigner.xml b/Phase2Template/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/Phase2Template/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Phase2Template/.idea/vcs.xml b/Phase2Template/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Phase2Template/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/ast/nodes/Program.java b/Phase2Template/Phase2/src/main/ast/nodes/Program.java index 6f44179..e7fb829 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/Program.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/Program.java @@ -1,5 +1,46 @@ package main.ast.nodes; +import com.sun.tools.javac.Main; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.PatternDeclaration; +import main.ast.nodes.declaration.MainDeclaration; +import main.visitor.IVisitor; + + +import java.util.ArrayList; + public class Program extends Node{ + private ArrayList functionDeclarations = new ArrayList<>(); + private ArrayList patternDeclarations = new ArrayList<>(); + private MainDeclaration main = new MainDeclaration(); + + public ArrayList getFunctionDeclarations(){return this.functionDeclarations;} + public void setFunctionDeclarations(ArrayList functionDeclarations){ + this.functionDeclarations =functionDeclarations; + } + public void addFunctionDeclaration(FunctionDeclaration functionDeclaration){ + this.functionDeclarations.add(functionDeclaration); + } + + public ArrayList getPatternDeclarations(){return this.patternDeclarations;} + public void setPatternDeclarations(ArrayListpatternDeclarations){ + this.patternDeclarations = patternDeclarations; + } + public void addPatternDeclaration(PatternDeclaration patternDeclaration){ + this.patternDeclarations.add(patternDeclaration); + } + + + public MainDeclaration getMain(){return this.main;} + public void setMain(MainDeclaration mainDeclaration){this.main = mainDeclaration;} + + + + + + @Override + public String toString(){return "FLProgram";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/Declaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/Declaration.java new file mode 100644 index 0000000..dfbcc1c --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/Declaration.java @@ -0,0 +1,6 @@ +package main.ast.nodes.declaration; + +import main.ast.nodes.Node; + +public abstract class Declaration extends Node { +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/FunctionDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/FunctionDeclaration.java new file mode 100644 index 0000000..6facf7b --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/FunctionDeclaration.java @@ -0,0 +1,28 @@ +package main.ast.nodes.declaration; + +import main.ast.nodes.expression.Identifier; +import main.ast.nodes.statement.Statement; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class FunctionDeclaration extends Declaration{ + private Identifier functionName; + private ArrayList args = new ArrayList<>(); + private ArrayList body = new ArrayList<>(); + + public Identifier getFunctionName(){return this.functionName;} + public void setFunctionName(Identifier functionName){this.functionName = functionName;} + + public ArrayList getArgs(){return this.args;} + public void setArgs(ArrayList args){this.args = args;} + public void addArg(VarDeclaration arg){this.args.add(arg);} + + public ArrayList getBody(){return this.body;} + public void setBody(ArrayList body){this.body = body;} + public void addStmt(Statement stmt){this.body.add(stmt);} + @Override + public String toString(){return "FunctionDeclaration:" + this.functionName.getName();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/MainDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/MainDeclaration.java new file mode 100644 index 0000000..65bc6a5 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/MainDeclaration.java @@ -0,0 +1,17 @@ +package main.ast.nodes.declaration; + +import main.ast.nodes.statement.Statement; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class MainDeclaration extends Declaration{ + private ArrayList body = new ArrayList<>(); + public ArrayList getBody() {return this.body;} + public void setBody(ArrayListbody){this.body = body;} + public void addBody(Statement stmt){this.body.add(stmt);} + @Override + public String toString(){return "MainDeclaration";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java new file mode 100644 index 0000000..20fd12a --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java @@ -0,0 +1,29 @@ +package main.ast.nodes.declaration; + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class PatternDeclaration extends Declaration{ + private Identifier patternName; + private ArrayList conditions = new ArrayList<>(); + private ArrayList returnStmts = new ArrayList<>(); + public PatternDeclaration(Identifier name){this.patternName = name;} + public void setPatternName(Identifier name){this.patternName = name;} + public Identifier getPatternName(){return this.patternName;} + + public ArrayList getConditions(){return this.conditions;} + public void setConditions(ArrayList conditions){this.conditions = conditions;} + public void addCondition(Expression condition){this.conditions.add(condition);} + + public ArrayList getReturnStmts(){return this.returnStmts;} + public void setReturnStmts(ArrayList returnStmts){this.returnStmts = returnStmts;} + public void addReturnStmt(Expression returnStmt){this.returnStmts.add(returnStmt);} + @Override + public String toString(){return "PatternDeclaration:" + patternName;} + @Override + public T accept(IVisitorvisitor){return visitor.visit(this);} + +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java new file mode 100644 index 0000000..1174565 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java @@ -0,0 +1,20 @@ +package main.ast.nodes.declaration; + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + +public class VarDeclaration extends Declaration{ + private Identifier name; + private Expression defaultVal; + + public VarDeclaration(Identifier name){this.name = name;} + public Identifier getName(){return this.name;} + public void setName(Identifier name){this.name = name;} + public Expression getDefaultVal(){return this.defaultVal;} + public void setDefaultVal(Expression defaultVal){this.defaultVal = defaultVal;} + @Override + public String toString(){return "VarDeclaration:" + this.name;} + @Override + publicT accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/Expression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/Expression.java new file mode 100644 index 0000000..c45980b --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/Expression.java @@ -0,0 +1,6 @@ +package main.ast.nodes.expression; + +import main.ast.nodes.Node; + +public abstract class Expression extends Node { +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/Identifier.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/Identifier.java new file mode 100644 index 0000000..13b2dc7 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/Identifier.java @@ -0,0 +1,14 @@ +package main.ast.nodes.expression; + +import main.visitor.IVisitor; + +public class Identifier extends Expression{ + private String name; + public Identifier(String name){this.name = name;} + public void setName(String name) {this.name = name;} + public String getName(){return this.name;} + @Override + public String toString(){return "Identifier:" + this.name;} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java new file mode 100644 index 0000000..d7b1fa9 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java @@ -0,0 +1,5 @@ +package main.ast.nodes.statement; + +public abstract class Statement extends Node{ + +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index f27169d..86a4b58 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -4,16 +4,17 @@ grammar FunctionCraft; program returns [Program flProgram]: { - + $flProgram = new Program(); + $flProgram.setLine(1); } ( - functionDeclaration - | patternMatching + f = functionDeclaration{$flProgram.addFunctionDeclaration(f.functionDeclarationRet);} + | p = patternMatching{$fl.Program.addPatternDeclaration(p.patternRet);} )* - main; + m = main{$flProgram.setMain(m.mainRet);}; -functionDeclaration: - DEF IDENTIFIER { System.out.println("FuncDec: " + $IDENTIFIER.text); } +functionDeclaration returns [FunctionDeclaration functionDeclarationRet]: + DEF IDENTIFIER functionArgumentsDeclaration body END @@ -28,14 +29,14 @@ functionArgumentsDeclaration: )? )? RPAR; -patternMatching: - PATTERN IDENTIFIER { System.out.println("PatternDec: " + $IDENTIFIER.text); } +patternMatching returns [PatternDeclaration patternRet]: + PATTERN IDENTIFIER LPAR IDENTIFIER RPAR (PATTERN_MATCHING_SEPARATOR condition ASSIGN expression)* SEMICOLLON; -main: - DEF MAIN { System.out.println("MAIN"); } +main returns [MainDeclaration mainRet]: + DEF MAIN LPAR RPAR body END; @@ -45,43 +46,43 @@ functionArguments: returnStatement: - RETURN { System.out.println("RETURN"); } (expression)? SEMICOLLON; + RETURN (expression)? SEMICOLLON; ifStatement: - IF { System.out.println("Decision: IF"); } condition + IF condition body - (ELSEIF { System.out.println("Decision: ELSE IF"); } condition body)* - (ELSE { System.out.println("Decision: ELSE"); } body)? END; + (ELSEIF condition body)* + (ELSE body)? END; condition: (LPAR expression RPAR ((AND | OR) (LPAR)? condition (RPAR)?)*)*; putsStatement: - PUTS { System.out.println("Built-In: PUTS"); } LPAR expression + PUTS LPAR expression RPAR SEMICOLLON; lenStatement: - LEN { System.out.println("Built-In: LEN"); } LPAR expression RPAR; + LEN LPAR expression RPAR; pushStatement: - PUSH { System.out.println("Built-In: PUSH"); } LPAR expression COMMA expression RPAR SEMICOLLON; + PUSH LPAR expression COMMA expression RPAR SEMICOLLON; loopDoStatement: - LOOP DO { System.out.println("Loop: DO"); } + LOOP DO loopBody END; loopBody: (statement - | BREAK { System.out.println("Control: BREAK"); } (IF condition)? SEMICOLLON - | NEXT { System.out.println("Control: NEXT"); } (IF condition)? SEMICOLLON + | BREAK (IF condition)? SEMICOLLON + | NEXT (IF condition)? SEMICOLLON )* ( returnStatement )?; forStatement: - FOR { System.out.println("Loop: FOR"); } IDENTIFIER IN range + FOR IDENTIFIER IN range loopBody END; @@ -91,18 +92,18 @@ range: | IDENTIFIER; filterStatement: - { System.out.println("Structure: FILTER"); } LBRACK expression SEPARATOR IDENTIFIER + LBRACK expression SEPARATOR IDENTIFIER ARROW range COMMA expression (COMMA expression)* RBRACK; matchPatternStatement: - { System.out.println("Built-In: MATCH"); } IDENTIFIER DOT MATCH LPAR expression RPAR; + IDENTIFIER DOT MATCH LPAR expression RPAR; chopAndChompStatement: - (CHOP { System.out.println("Built-In: CHOP"); } - | CHOMP { System.out.println("Built-In: CHOMP"); }) LPAR expression RPAR; + (CHOP + | CHOMP) LPAR expression RPAR; assignment: - IDENTIFIER { System.out.println("Assignment: " + $IDENTIFIER.text); } (accessList)? + IDENTIFIER (accessList)? (ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN @@ -133,7 +134,7 @@ body: expression: - expression APPEND eqaulityExpression { System.out.println("Operator: " + $APPEND.text); } + expression APPEND eqaulityExpression | eqaulityExpression; @@ -141,7 +142,7 @@ eqaulityExpression: eqaulityExpression (op = EQUAL | op = NOT_EQUAL - ) relationalExpression { System.out.println("Operator: " + $op.text); } + ) relationalExpression | relationalExpression; relationalExpression: @@ -150,7 +151,7 @@ relationalExpression: | op = LESS_THAN | op = LESS_EQUAL_THAN | op = GREATER_EQUAL_THAN - ) additiveExpression { System.out.println("Operator: " + $op.text); } + ) additiveExpression | additiveExpression; @@ -158,7 +159,7 @@ additiveExpression: additiveExpression (op = PLUS | op = MINUS - ) multiplicativeExpression { System.out.println("Operator: " + $op.text); } + ) multiplicativeExpression | multiplicativeExpression; @@ -166,7 +167,7 @@ multiplicativeExpression: multiplicativeExpression (op = MULT | op = DIVIDE - ) preUnaryExpression { System.out.println("Operator: " + $op.text); } + ) preUnaryExpression | preUnaryExpression; @@ -175,13 +176,13 @@ preUnaryExpression: | op = MINUS | op = INCREMENT | op = DECREMENT - ) accessExpression { System.out.println("Operator: " + $op.text); } + ) accessExpression | accessExpression; accessExpression: otherExpression - (LPAR { System.out.println("FunctionCall"); } functionArguments + (LPAR functionArguments RPAR)* (accessList)* ; @@ -199,7 +200,7 @@ otherExpression: lambdaFunction: - ARROW { System.out.println("Structure: LAMBDA"); } functionArgumentsDeclaration + ARROW functionArgumentsDeclaration LBRACE body RBRACE functionArguments ; diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index 9bc01e4..c47830f 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -1,4 +1,17 @@ package main.visitor; +import main.ast.nodes.Program; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.MainDeclaration; +import main.ast.nodes.declaration.PatternDeclaration; +import main.ast.nodes.declaration.VarDeclaration; +import main.ast.nodes.expression.Identifier; + public interface IVisitor { + T visit(Program program); + T visit(Identifier identifier); + T visit(VarDeclaration varDeclaration); + T visit(FunctionDeclaration functionDeclaration); + T visit(PatternDeclaration patternDeclaration); + T visit(MainDeclaration mainDeclaration); } diff --git a/Phase2Template/Phase2Template.iml b/Phase2Template/Phase2Template.iml new file mode 100644 index 0000000..48b9d60 --- /dev/null +++ b/Phase2Template/Phase2Template.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file From bbe2fb1006a47e1b62e877ac570c2b8fc166a9fc Mon Sep 17 00:00:00 2001 From: javad Date: Thu, 11 Apr 2024 22:57:39 +0330 Subject: [PATCH 03/23] add main semantics --- .../nodes/declaration/PatternDeclaration.java | 17 ++- .../Phase2/src/main/grammer/FunctionCraft.g4 | 122 +++++++++++++++--- 2 files changed, 115 insertions(+), 24 deletions(-) diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java index 20fd12a..0045da4 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java @@ -8,19 +8,26 @@ public class PatternDeclaration extends Declaration{ private Identifier patternName; + private Identifier targetVariable; private ArrayList conditions = new ArrayList<>(); - private ArrayList returnStmts = new ArrayList<>(); - public PatternDeclaration(Identifier name){this.patternName = name;} + private ArrayList returnExp = new ArrayList<>(); + public PatternDeclaration(Identifier name, Identifier targetVariable){ + this.patternName = name; + this.targetVariable = targetVariable; + } public void setPatternName(Identifier name){this.patternName = name;} public Identifier getPatternName(){return this.patternName;} + public void setTargetVariable(Identifier targetVariable){this.targetVariable = targetVariable;} + public Identifier getTargetVariable(){return this.targetVariable;} + public ArrayList getConditions(){return this.conditions;} public void setConditions(ArrayList conditions){this.conditions = conditions;} public void addCondition(Expression condition){this.conditions.add(condition);} - public ArrayList getReturnStmts(){return this.returnStmts;} - public void setReturnStmts(ArrayList returnStmts){this.returnStmts = returnStmts;} - public void addReturnStmt(Expression returnStmt){this.returnStmts.add(returnStmt);} + public ArrayList getReturnExp(){return this.returnExp;} + public void setReturnExp(ArrayList returnExp){this.returnExp = returnExp;} + public void addReturnExp(Expression returnExp){this.returnExp.add(returnExp);} @Override public String toString(){return "PatternDeclaration:" + patternName;} @Override diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 86a4b58..5d8a72a 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -8,37 +8,112 @@ program returns [Program flProgram]: $flProgram.setLine(1); } ( - f = functionDeclaration{$flProgram.addFunctionDeclaration(f.functionDeclarationRet);} - | p = patternMatching{$fl.Program.addPatternDeclaration(p.patternRet);} + f = functionDeclaration{$flProgram.addFunctionDeclaration($f.functionDeclarationRet);} + | p = patternMatching{$flProgram.addPatternDeclaration($p.patternRet);} )* - m = main{$flProgram.setMain(m.mainRet);}; + m = main{$flProgram.setMain($m.mainRet);}; functionDeclaration returns [FunctionDeclaration functionDeclarationRet]: - DEF IDENTIFIER - functionArgumentsDeclaration - body + { + $functionDeclarationRet = new FunctionDeclaration(); + } + def = DEF {$functionDeclarationRet.setLine($def.line);} id = IDENTIFIER { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $functionDeclarationRet.setFunctionName(id_); + } + f = functionArgumentsDeclaration {$functionDeclarationRet.setArgs($f.argRet);} + b = body {$functionDeclarationRet.setBody($b.bodyRet);} END ; -functionArgumentsDeclaration: +functionArgumentsDeclaration returns [ArrayList argRet]: + { + $argRet = new ArrayList(); + } LPAR - (IDENTIFIER - (COMMA IDENTIFIER)* + (id1 = IDENTIFIER + { + Identifier id_ = new Identifier(id1.text); + id_.setLine($id1.line); + VarDeclaration = newVarDec(id_); + $argRet.add(newVarDec); + } + (COMMA id2 = IDENTIFIER + { + Identifier id_ = new Identifier(id2.text); + id_.setLine($id2.line); + VarDeclaration = newVarDec(id_); + $argRet.add(newVarDec); + } + )* ( - COMMA LBRACK IDENTIFIER ASSIGN expression (COMMA IDENTIFIER ASSIGN expression)* RBRACK + COMMA LBRACK id3 = IDENTIFIER + { + Identifier id_ = new Identifier(id3.text); + id_.setLine($id3.line); + VarDeclaration = newVarDec(id_); + } + ASSIGN e1 = expression + { + newVarDec.setDefaultVal(e1.expRet); + $argRet.add(newVarDec); + } + (COMMA id4 = IDENTIFIER + { + Identifier id_ = new Identifier(id4.text); + id_.setLine($id4.line); + VarDeclaration = newVarDec(id_); + } + ASSIGN e2 = expression + { + newVarDec.setDefaultVal(e2.expRet); + $argRet.add(newVarDec); + } + )* RBRACK )? )? RPAR; patternMatching returns [PatternDeclaration patternRet]: - PATTERN IDENTIFIER - LPAR IDENTIFIER RPAR - (PATTERN_MATCHING_SEPARATOR condition ASSIGN expression)* + pat = PATTERN + { + int patternLine = $pat.line; + } + patternName = IDENTIFIER + { + Identifier patternNameId = new Identifier($patternName.text); + patternNameId.setLine($patternName.line); + } + LPAR targetVar = IDENTIFIER + { + Identifier targetVariable = new Identifier($targetVar.text); + targetVariable.setLine($targetVar.line); + $patternRet = new PatternDeclaration(patternNameId, targetVariable); + $patternRet.setLine(patternLine); + } + RPAR + (PATTERN_MATCHING_SEPARATOR c = condition + { + $patternRet.setConditions($c.conditionRet); + } + ASSIGN e = expression + { + $patternRet.addReturnExp($e.expRet); + } + )* SEMICOLLON; main returns [MainDeclaration mainRet]: - DEF MAIN + { + $mainRet = new MainDeclaration(); + } + DEF m = MAIN + { + $mainRet.setLine($m.line); + } LPAR RPAR - body + b = body + {$mainRet.setBody($b.bodyRet);} END; functionArguments: @@ -54,8 +129,17 @@ ifStatement: (ELSEIF condition body)* (ELSE body)? END; -condition: - (LPAR expression RPAR ((AND | OR) (LPAR)? condition (RPAR)?)*)*; +condition returns [ArrayList conditionRet]: + { + $conditionRet = new ArrayList(); + } + (LPAR e = expression + {$conditionRet.add($e.expRet);} + RPAR ((AND | OR) (LPAR)? c = condition + { + $conditionRet.addAll($c.conditionRet); + } + (RPAR)?)*)*; putsStatement: PUTS LPAR expression @@ -126,14 +210,14 @@ statement: ; -body: +body returns [ArrayList bodyRet]: (statement)* ( returnStatement )?; -expression: +expression returns [Expression expRet]: expression APPEND eqaulityExpression | eqaulityExpression; From 2574cede82ccb235ee106c7f94952015cc8a28ae Mon Sep 17 00:00:00 2001 From: javad Date: Thu, 11 Apr 2024 23:14:04 +0330 Subject: [PATCH 04/23] add returnStmt class --- .../ast/nodes/statement/ReturnStatement.java | 20 +++++++++++++++++ .../main/ast/nodes/statement/Statement.java | 2 ++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 22 +++++++++++++++---- .../Phase2/src/main/visitor/IVisitor.java | 2 ++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/ReturnStatement.java diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/ReturnStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/ReturnStatement.java new file mode 100644 index 0000000..9828475 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/ReturnStatement.java @@ -0,0 +1,20 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +public class ReturnStatement extends Statement{ + private Expression returnExp; + private boolean hasRetExp; + public ReturnStatement(){this.hasRetExp = false;} + public Expression getReturnExp(){return returnExp;} + public void setReturnExp(Expression returnExp){ + this.returnExp = returnExp; + this.hasRetExp = true; + } + public boolean hasRetExpression(){return hasRetExp;} + @Override + public String toString(){return "ReturnStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java index d7b1fa9..8355fc9 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/Statement.java @@ -1,5 +1,7 @@ package main.ast.nodes.statement; +import main.ast.nodes.Node; + public abstract class Statement extends Node{ } diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 5d8a72a..4f899c3 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -116,12 +116,26 @@ main returns [MainDeclaration mainRet]: {$mainRet.setBody($b.bodyRet);} END; -functionArguments: - (expression (COMMA expression)* )?; +functionArguments returns [ArrayList funcArgsRet]: + { + $funcArgsRet = new ArrayList(); + } + (e1 = expression + { + $funcArgsRet.add($e1.expRet); + } + (COMMA e2 = expression + { + $funcArgsRet.add($e2.expRet); + } + )* )?; -returnStatement: - RETURN (expression)? SEMICOLLON; +returnStatement returns [ReturnStatement returnStmtRet]: + { + $returnStmtRet = new ReturnStatement(); + } + RETURN (e = expression{$returnStmtRet.setReturnExp(e.expRet);})? SEMICOLLON; ifStatement: IF condition diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index c47830f..bfd752f 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -6,6 +6,7 @@ import main.ast.nodes.declaration.PatternDeclaration; import main.ast.nodes.declaration.VarDeclaration; import main.ast.nodes.expression.Identifier; +import main.ast.nodes.statement.ReturnStatement; public interface IVisitor { T visit(Program program); @@ -14,4 +15,5 @@ public interface IVisitor { T visit(FunctionDeclaration functionDeclaration); T visit(PatternDeclaration patternDeclaration); T visit(MainDeclaration mainDeclaration); + T visit(ReturnStatement returnStatement); } From fdc034bc1030ea21cc413d6e5c8a9593d172a879 Mon Sep 17 00:00:00 2001 From: javad Date: Fri, 12 Apr 2024 14:22:33 +0330 Subject: [PATCH 05/23] add loopDo semantics --- .../Phase2/src/main/ast/nodes/Node.java | 2 - .../main/ast/nodes/statement/IfStatement.java | 24 +++++ .../ast/nodes/statement/LenStatement.java | 15 ++++ .../ast/nodes/statement/LoopDoStatement.java | 30 +++++++ .../ast/nodes/statement/PushStatement.java | 22 +++++ .../ast/nodes/statement/PutStatement.java | 15 ++++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 89 ++++++++++++++----- .../Phase2/src/main/visitor/IVisitor.java | 7 +- 8 files changed, 181 insertions(+), 23 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/IfStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/LoopDoStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/PushStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/PutStatement.java diff --git a/Phase2Template/Phase2/src/main/ast/nodes/Node.java b/Phase2Template/Phase2/src/main/ast/nodes/Node.java index b53cfdc..617a9e8 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/Node.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/Node.java @@ -7,11 +7,9 @@ public abstract class Node { private int line; - private ArrayListcompileErrors = new ArrayList<>(); public void setLine(int line){this.line = line;} public int getLine(){return this.line;} public abstract String toString(); - public void addCompileError(CompileError ce){this.compileErrors.add(ce);} public abstract T accept(IVisitor visitor); } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/IfStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/IfStatement.java new file mode 100644 index 0000000..765ca60 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/IfStatement.java @@ -0,0 +1,24 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +import java.lang.reflect.Array; +import java.util.ArrayList; + +public class IfStatement extends Statement{ + private ArrayList conditions = new ArrayList<>(); + private ArrayList thenBody = new ArrayList<>(); + private ArrayList elseBody = new ArrayList<>(); + + public void addCondition(ArrayList condition){this.conditions.addAll(condition);} + public void setThenBody(ArrayListthenBody){this.thenBody = thenBody;} + public void setElseBody(ArrayListelseBody){this.elseBody = elseBody;} + public ArrayList getConditions(){return this.conditions;} + public ArrayList getThenBody(){return this.thenBody;} + public ArrayList getElseBody(){return this.elseBody;} + @Override + public String toString(){return "IfStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java new file mode 100644 index 0000000..3ccddbe --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java @@ -0,0 +1,15 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +public class LenStatement extends Statement{ + private Expression expression; + public LenStatement(Expression expression){this.expression = expression;} + public Expression getExpression(){return this.expression;} + public void setExpression(Expression expression){this.expression = expression;} + @Override + public String toString(){return "LenStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/LoopDoStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/LoopDoStatement.java new file mode 100644 index 0000000..e218cc1 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/LoopDoStatement.java @@ -0,0 +1,30 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class LoopDoStatement extends Statement{ + private ArrayList loopBodyStmts = new ArrayList<>(); + private ArrayList loopConditions = new ArrayList<>(); + private ReturnStatement loopRetStmt; + + public LoopDoStatement(ArrayListloopBodyStmts, ArrayListloopConditions, + ReturnStatement loopRetStmt){ + this.loopBodyStmts = loopBodyStmts; + this.loopConditions = loopConditions; + this.loopRetStmt = loopRetStmt; + } + public void setLoopBodyStmts(ArrayListloopBodyStmts){this.loopBodyStmts = loopBodyStmts;} + public void setLoopConditions(ArrayListloopConditions){this.loopConditions = loopConditions;} + public void setLoopRetStmt(ReturnStatement loopRetStmt){this.loopRetStmt = loopRetStmt;} + public ArrayList getLoopBodyStmts(){return this.loopBodyStmts;} + public ArrayList getLoopConditions(){return this.loopConditions;} + public ReturnStatement getLoopRetStmt(){return this.loopRetStmt;} + + @Override + public String toString(){return "LoopDoStatement";} + @Override + public T accept(IVisitorvisitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/PushStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/PushStatement.java new file mode 100644 index 0000000..1406efe --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/PushStatement.java @@ -0,0 +1,22 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +public class PushStatement extends Statement{ + private Expression initial; + private Expression toBeAdded; + public PushStatement(Expression initial, Expression toBeAdded){ + this.initial = initial; + this.toBeAdded = toBeAdded; + } + public Expression getInitial(){return this.initial;} + public Expression getToBeAdded(){return this.toBeAdded;} + public void setInitial(Expression initial){this.initial = initial;} + public void setToBeAdded(Expression toBeAdded){this.toBeAdded = toBeAdded;} + @Override + public String toString(){return "PushStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} + +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/PutStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/PutStatement.java new file mode 100644 index 0000000..ae4982b --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/PutStatement.java @@ -0,0 +1,15 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +public class PutStatement extends Statement{ + private Expression expression; + public PutStatement(Expression expression){this.expression = expression;} + public Expression getExpression(){return this.expression;} + public void setExpression(Expression expression){this.expression = expression;} + @Override + public String toString(){return "PutStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 4f899c3..782f0bd 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -137,11 +137,37 @@ returnStatement returns [ReturnStatement returnStmtRet]: } RETURN (e = expression{$returnStmtRet.setReturnExp(e.expRet);})? SEMICOLLON; -ifStatement: - IF condition - body - (ELSEIF condition body)* - (ELSE body)? END; +ifStatement returns[IfStatement ifRet]: + { + $ifRet = new IfStatement(); + } + if = IF + { + $ifRet.setLine($if.line); + } + c1 = condition {$ifRet.addCondition($c1.conditionRet);} + b = body {$ifRet.setThenBody($b.bodyRet);} + { + ArrayList tempArray = new ArrayList(); + } + (ELSEIF c2 = condition + { + $ifRet.addCondition($c2.conditionRet); + } + b1 = body + { + tempArray.addAll($b1.bodyRet); + } + )* + (ELSE b2 = body + { + tempArray.addAll($b2.bodyRet); + } + )? + { + $ifRet.setElseBody(tempArray); + } + END; condition returns [ArrayList conditionRet]: { @@ -155,28 +181,51 @@ condition returns [ArrayList conditionRet]: } (RPAR)?)*)*; -putsStatement: - PUTS LPAR expression +putsStatement returns [PutStatement putRet]: + p = PUTS LPAR e = expression + { + $putRet = new PutStatement($e.expRet); + $putRet.setLine($p.line); + } RPAR SEMICOLLON; -lenStatement: - LEN LPAR expression RPAR; +lenStatement returns [LenStatement lenRet]: + l = LEN LPAR e = expression + { + $lenRet = new LenStatement($e.expRet); + $lenRet.setLine($l.line); + } + RPAR; -pushStatement: - PUSH LPAR expression COMMA expression RPAR SEMICOLLON; +pushStatement returns [PushStatement pushRet]: + p = PUSH LPAR e1 = expression COMMA e2 = expression RPAR SEMICOLLON + { + $pushRet = new PushStatement($e1.expRet, $e2.expRet); + $pushRet.setLine($p.line); + } + ; -loopDoStatement: - LOOP DO - loopBody +loopDoStatement returns [LoopDoStatement loopDoRet]: + l1 = LOOP DO + l2 = loopBody + { + $loopDoRet = new LoopDoStatement(l2.loopStmts, l2.loopExps, l2.loopRetStmt); + $loopDoRet.setLine($l1.line); + } END; -loopBody: - (statement - | BREAK (IF condition)? SEMICOLLON - | NEXT (IF condition)? SEMICOLLON +loopBody returns [ArrayList loopStmts, ArrayList loopExps, ReturnStatement loopRetStmt]: + { + $loopStmts = new ArrayList(); + $loopExps = new ArrayList(); + $loopRetStmt = new ReturnStatement(); + } + (s = statement {$loopStmts.add($s.stmtRet);} + | BREAK (IF c1 = condition{$loopExps.addAll($c1.conditionRet);})? SEMICOLLON + | NEXT (IF c2 = condition{$loopExps.addAll($c2.conditionRet);})? SEMICOLLON )* ( - returnStatement + r = returnStatement {$loopRetStmt = $r.returnStmtRet;} )?; forStatement: @@ -213,7 +262,7 @@ assignment: accessList: LBRACK expression RBRACK; -statement: +statement returns [Statement stmtRet]: ifStatement | loopDoStatement | forStatement diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index bfd752f..fae6095 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -6,7 +6,7 @@ import main.ast.nodes.declaration.PatternDeclaration; import main.ast.nodes.declaration.VarDeclaration; import main.ast.nodes.expression.Identifier; -import main.ast.nodes.statement.ReturnStatement; +import main.ast.nodes.statement.*; public interface IVisitor { T visit(Program program); @@ -16,4 +16,9 @@ public interface IVisitor { T visit(PatternDeclaration patternDeclaration); T visit(MainDeclaration mainDeclaration); T visit(ReturnStatement returnStatement); + T visit(IfStatement ifStatement); + T visit(PutStatement putStatement); + T visit(LenStatement lenStatement); + T visit(PushStatement pushStatement); + T visit(LoopDoStatement loopDoStatement); } From 3c8beee6fb61910f900909db61167218243ce0c6 Mon Sep 17 00:00:00 2001 From: javad Date: Fri, 12 Apr 2024 15:27:16 +0330 Subject: [PATCH 06/23] todo for filter --- .../ast/nodes/statement/FilterStatement.java | 15 ++++ .../ast/nodes/statement/ForStatement.java | 71 +++++++++++++++++++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 47 +++++++++--- .../Phase2/src/main/visitor/IVisitor.java | 1 + 4 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/ForStatement.java diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java new file mode 100644 index 0000000..74646ea --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java @@ -0,0 +1,15 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; + +import java.util.ArrayList; + +//visit Identifier first +public class FilterStatement extends Statement{ + private Identifier filterId; + private Expression filterExpression; + private ArrayList conditionalExpressions = new ArrayList<>(); + private ArrayList rangeExpressions = new ArrayList<>(); + +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/ForStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/ForStatement.java new file mode 100644 index 0000000..cd88a2a --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/ForStatement.java @@ -0,0 +1,71 @@ +package main.ast.nodes.statement; + + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class ForStatement extends Statement{ + private Identifier iteratorId; + private ArrayList rangeExpressions = new ArrayList<>(); + private ArrayList loopBodyExpressions = new ArrayList<>(); + private ArrayList loopBody = new ArrayList<>(); + private ReturnStatement returnStatement; + public ForStatement(Identifier identifierId, ArrayList rangeExpressions + , ArrayList loopBodyExpressions, ArrayList loopBody + , ReturnStatement returnStatement){ + this.iteratorId = identifierId; + this.rangeExpressions = rangeExpressions; + this.loopBodyExpressions = loopBodyExpressions; + this.loopBody = loopBody; + this.returnStatement = returnStatement; + + } + public ArrayList getLoopBodyExpressions() { + return loopBodyExpressions; + } + + public ReturnStatement getReturnStatement() { + return returnStatement; + } + + public ArrayList getRangeExpressions() { + return rangeExpressions; + } + + public ArrayList getLoopBody() { + return loopBody; + } + + public Identifier getIteratorId() { + return iteratorId; + } + + public void setIteratorId(Identifier iteratorId) { + this.iteratorId = iteratorId; + } + + public void setLoopBody(ArrayList loopBody) { + this.loopBody = loopBody; + } + + public void setLoopBodyExpressions(ArrayList loopBodyExpressions) { + this.loopBodyExpressions = loopBodyExpressions; + } + + public void setRangeExpressions(ArrayList rangeExpressions) { + this.rangeExpressions = rangeExpressions; + } + + public void setReturnStatement(ReturnStatement returnStatement) { + this.returnStatement = returnStatement; + } + + @Override + public String toString(){return "ForLoop:"+iteratorId.getName();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} + +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 782f0bd..7cb83af 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -228,15 +228,46 @@ loopBody returns [ArrayList loopStmts, ArrayList loopExps r = returnStatement {$loopRetStmt = $r.returnStmtRet;} )?; -forStatement: - FOR IDENTIFIER IN range - loopBody - END; +forStatement returns [ForStatement forStRet]: + f = FOR id = IDENTIFIER IN r = range + l = loopBody + END + { + $forStRet = new ForStatement(new Identifier($id.text), + $r.rangeRet, $l.loopExps, $l.loopStmts, + $l.loopRetStmt); + $forStRet.setLine($f.line); + } + ; -range: - (LPAR expression DOUBLEDOT expression RPAR) - | (LBRACK (expression (COMMA expression)*) RBRACK) - | IDENTIFIER; +range returns [ArrayList rangeRet]: + { + $rangeRet = new ArrayList(); + } + (LPAR e1 = expression + { + $rangeRet.add($e1.expRet); + } + DOUBLEDOT e2 = expression + { + $rangeRet.add($e2.expRet); + } + RPAR) + | (LBRACK (e3 = expression + { + $rangeRet.add($e3.expRet); + } + (COMMA e4 = expression + { + $rangeRet.add($e4.expRet); + } + )*) RBRACK) + | id = IDENTIFIER + { + Identifier id_ = new Identifier($id.text); + $rangeRet.add(id_); + } + ; filterStatement: LBRACK expression SEPARATOR IDENTIFIER diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index fae6095..abf2aef 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -21,4 +21,5 @@ public interface IVisitor { T visit(LenStatement lenStatement); T visit(PushStatement pushStatement); T visit(LoopDoStatement loopDoStatement); + T visit(ForStatement forStatement); } From a2489c5ca5701cfffe58f9726781caf16e5bc65e Mon Sep 17 00:00:00 2001 From: javad Date: Sat, 13 Apr 2024 00:03:34 +0330 Subject: [PATCH 07/23] final structure figured out --- .../ast/nodes/statement/FilterStatement.java | 46 ++++++++++++++++++- .../statement/MatchPatternStatement.java | 33 +++++++++++++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 46 +++++++++++++++---- .../Phase2/src/main/visitor/IVisitor.java | 2 + 4 files changed, 117 insertions(+), 10 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java index 74646ea..82b748a 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java @@ -2,14 +2,58 @@ import main.ast.nodes.expression.Expression; import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; import java.util.ArrayList; //visit Identifier first public class FilterStatement extends Statement{ - private Identifier filterId; + private Identifier iteratorId; private Expression filterExpression; private ArrayList conditionalExpressions = new ArrayList<>(); private ArrayList rangeExpressions = new ArrayList<>(); + public FilterStatement(Identifier iteratorId, Expression filterExpression, + ArrayList conditionalExpressions, + ArrayList rangeExpressions){ + this.iteratorId = iteratorId; + this.filterExpression =filterExpression; + this.conditionalExpressions = conditionalExpressions; + this.rangeExpressions = rangeExpressions; + } + public void setRangeExpressions(ArrayList rangeExpressions) { + this.rangeExpressions = rangeExpressions; + } + + public void setIteratorId(Identifier iteratorId) { + this.iteratorId = iteratorId; + } + + public void setConditionalExpressions(ArrayList conditionalExpressions) { + this.conditionalExpressions = conditionalExpressions; + } + + public void setFilterExpression(Expression filterExpression) { + this.filterExpression = filterExpression; + } + + public Identifier getIteratorId() { + return iteratorId; + } + + public ArrayList getRangeExpressions() { + return rangeExpressions; + } + + public Expression getFilterExpression() { + return filterExpression; + } + + public ArrayList getConditionalExpressions() { + return conditionalExpressions; + } + @Override + public String toString(){return "FilterOn:" + this.iteratorId.getName();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java new file mode 100644 index 0000000..6a3d4cf --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java @@ -0,0 +1,33 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + +public class MatchPatternStatement extends Statement{ + private Identifier patternId; + Expression matchArgument; + public MatchPatternStatement(Identifier patternId, Expression matchArgument){ + this.matchArgument = matchArgument; + this.patternId = patternId; + } + public void setPatternId(Identifier patternId){ + this.patternId = patternId; + } + + public void setMatchArgument(Expression matchArgument) { + this.matchArgument = matchArgument; + } + + public Identifier getPatternId() { + return patternId; + } + + public Expression getMatchArgument() { + return matchArgument; + } + @Override + public String toString(){return "MatchPattern:"+patternId.getName();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 7cb83af..2b754b2 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -269,16 +269,43 @@ range returns [ArrayList rangeRet]: } ; -filterStatement: - LBRACK expression SEPARATOR IDENTIFIER - ARROW range COMMA expression (COMMA expression)* RBRACK; +filterStatement returns [FilterStatement filterStatementRet]: + { + ArrayList conditionExps = new ArrayList(); + } + brack = LBRACK e1 = expression SEPARATOR id = IDENTIFIER + ARROW r = range COMMA e2 = expression + { + conditionExps.add($e2.expRet); + } + (COMMA e3 = expression + { + conditionExps.add($e3.expRet); + } + )* + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $filterStatementRet = new FilterStatement(id_, $e1.expRet, + conditionExps, $r.rangeRet); + $filterStatementRet.setLine($brack.line); + } + RBRACK; -matchPatternStatement: - IDENTIFIER DOT MATCH LPAR expression RPAR; +matchPatternStatement returns [MatchPatternStatement matchPatRet]: + id = IDENTIFIER DOT m = MATCH LPAR e = expression RPAR + { + Identifier id_ = new Identifier($id.text); + $matchPatRet = new MatchPatternStatement(id_, $e.expRet); + $matchPatRet.setLine($m.line); + } + ; -chopAndChompStatement: - (CHOP - | CHOMP) LPAR expression RPAR; +// todo:move match, filter, to expression +chopStatement: + CHOP LPAR expression RPAR; +chompStatement: + CHOMP LPAR expression RPAR; assignment: IDENTIFIER (accessList)? @@ -369,7 +396,8 @@ otherExpression: values | IDENTIFIER | lambdaFunction - | chopAndChompStatement + | chopStatement + |chompStatement | matchPatternStatement | filterStatement | lenStatement diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index abf2aef..d0e6378 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -22,4 +22,6 @@ public interface IVisitor { T visit(PushStatement pushStatement); T visit(LoopDoStatement loopDoStatement); T visit(ForStatement forStatement); + T visit(FilterStatement filterStatement); + T visit(MatchPatternStatement matchPatternStatement); } From 9212b5bc82e99b0cbb212875967cabf739ec26d7 Mon Sep 17 00:00:00 2001 From: javad Date: Sat, 13 Apr 2024 23:32:20 +0330 Subject: [PATCH 08/23] add statements --- .../ast/nodes/expression/ChompStatement.java | 20 +++++ .../ast/nodes/expression/ChopStatement.java | 14 +++ .../FilterStatement.java | 7 +- .../MatchPatternStatement.java | 6 +- .../ast/nodes/statement/AssignOperator.java | 5 ++ .../ast/nodes/statement/AssignStatement.java | 66 ++++++++++++++ .../nodes/statement/ExpressionStatement.java | 21 +++++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 87 +++++++++++++------ .../Phase2/src/main/visitor/IVisitor.java | 6 +- 9 files changed, 195 insertions(+), 37 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/ChompStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/ChopStatement.java rename Phase2Template/Phase2/src/main/ast/nodes/{statement => expression}/FilterStatement.java (90%) rename Phase2Template/Phase2/src/main/ast/nodes/{statement => expression}/MatchPatternStatement.java (81%) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/AssignOperator.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/statement/ExpressionStatement.java diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/ChompStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/ChompStatement.java new file mode 100644 index 0000000..13bcb6c --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/ChompStatement.java @@ -0,0 +1,20 @@ +package main.ast.nodes.expression; + +import main.visitor.IVisitor; + +public class ChompStatement extends Expression{ + private Expression chompExpression; + public ChompStatement(Expression chompExpression){this.chompExpression = chompExpression;} + + public Expression getChompExpression() { + return chompExpression; + } + + public void setChompExpression(Expression chompExpression) { + this.chompExpression = chompExpression; + } + @Override + public String toString(){return "ChompStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/ChopStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/ChopStatement.java new file mode 100644 index 0000000..c38d03e --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/ChopStatement.java @@ -0,0 +1,14 @@ +package main.ast.nodes.expression; + +import main.visitor.IVisitor; + +public class ChopStatement extends Expression{ + private Expression chopExpression; + public ChopStatement(Expression chopExpression){this.chopExpression = chopExpression;} + public void setChopExpression(Expression chopExpression){this.chopExpression = chopExpression;} + public Expression getChopExpression(){return this.chopExpression;} + @Override + public String toString(){return "ChopStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/FilterStatement.java similarity index 90% rename from Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java rename to Phase2Template/Phase2/src/main/ast/nodes/expression/FilterStatement.java index 82b748a..ac2fde2 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/FilterStatement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/FilterStatement.java @@ -1,13 +1,10 @@ -package main.ast.nodes.statement; +package main.ast.nodes.expression; -import main.ast.nodes.expression.Expression; -import main.ast.nodes.expression.Identifier; import main.visitor.IVisitor; import java.util.ArrayList; -//visit Identifier first -public class FilterStatement extends Statement{ +public class FilterStatement extends Expression{ private Identifier iteratorId; private Expression filterExpression; private ArrayList conditionalExpressions = new ArrayList<>(); diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/MatchPatternStatement.java similarity index 81% rename from Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java rename to Phase2Template/Phase2/src/main/ast/nodes/expression/MatchPatternStatement.java index 6a3d4cf..bfd66e4 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/MatchPatternStatement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/MatchPatternStatement.java @@ -1,10 +1,8 @@ -package main.ast.nodes.statement; +package main.ast.nodes.expression; -import main.ast.nodes.expression.Expression; -import main.ast.nodes.expression.Identifier; import main.visitor.IVisitor; -public class MatchPatternStatement extends Statement{ +public class MatchPatternStatement extends Expression{ private Identifier patternId; Expression matchArgument; public MatchPatternStatement(Identifier patternId, Expression matchArgument){ diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignOperator.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignOperator.java new file mode 100644 index 0000000..ca7be02 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignOperator.java @@ -0,0 +1,5 @@ +package main.ast.nodes.statement; + +public enum AssignOperator { + ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN, DIVIDE_ASSIGN, MULT_ASSIGN, MOD_ASSIGN +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java new file mode 100644 index 0000000..7caae5c --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java @@ -0,0 +1,66 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + + +public class AssignStatement extends Statement{ + private boolean accessList; + private Identifier assignedId; + private Expression assignExpression; + private Expression accessListExpression; + private AssignOperator assignOperator; + public AssignStatement(boolean accessList, Identifier assignedId, Expression assignExpression, + AssignOperator assignOperator){ + this.accessList = accessList; + this.assignedId = assignedId; + this.assignExpression = assignExpression; + this.assignOperator = assignOperator; + } + + public void setAccessList(boolean accessList) { + this.accessList = accessList; + } + + public void setAssignedId(Identifier assignedId) { + this.assignedId = assignedId; + } + + public void setAccessListExpression(Expression accessListExpression) { + this.accessListExpression = accessListExpression; + } + + public void setAssignExpression(Expression assignExpression) { + this.assignExpression = assignExpression; + } + + public void setAssignOperator(AssignOperator assignOperator) { + this.assignOperator = assignOperator; + } + + public AssignOperator getAssignOperator() { + return assignOperator; + } + + public boolean isAccessList() { + return accessList; + } + + public Expression getAccessListExpression() { + return accessListExpression; + } + + public Identifier getAssignedId() { + return assignedId; + } + + public Expression getAssignExpression() { + return assignExpression; + } + @Override + public String toString(){return "Assign:"+ this.assignedId.toString();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} + diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/ExpressionStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/ExpressionStatement.java new file mode 100644 index 0000000..623db06 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/ExpressionStatement.java @@ -0,0 +1,21 @@ +package main.ast.nodes.statement; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +public class ExpressionStatement extends Statement{ + private Expression expression; + public ExpressionStatement(Expression expression){this.expression = expression;} + + public Expression getExpression() { + return expression; + } + + public void setExpression(Expression expression) { + this.expression = expression; + } + @Override + public String toString(){return "ExpressionStatement";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 2b754b2..76ec79f 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -301,40 +301,73 @@ matchPatternStatement returns [MatchPatternStatement matchPatRet]: } ; -// todo:move match, filter, to expression -chopStatement: - CHOP LPAR expression RPAR; -chompStatement: - CHOMP LPAR expression RPAR; - -assignment: - IDENTIFIER (accessList)? - (ASSIGN - | PLUS_ASSIGN - | MINUS_ASSIGN - | DIVIDE_ASSIGN - | MULT_ASSIGN - | MOD_ASSIGN) - expression SEMICOLLON; - -accessList: - LBRACK expression RBRACK; +chopStatement returns [ChopStatement chopRet]: + + c = CHOP LPAR e = expression RPAR + { + $chopRet = new ChopStatement($e.expRet); + $chopRet.setLine($c.line); + } + ; +chompStatement returns [ChompStatement chompRet]: + c = CHOMP LPAR e = expression RPAR + { + $chompRet = new ChompStatement($e.expRet); + $chompRet.setLine($c.line); + } + ; + +assignment returns [AssignStatement assignRet]: + { + boolean access = false; + int line; + AssignOperator op; + } + id = IDENTIFIER (a = accessList {access = true;})? + (as = ASSIGN {op = AssignOperator.ASSIGN;line = $as.line;} + | pl = PLUS_ASSIGN {op = AssignOperator.PLUS_ASSIGN;line = $pl.line;} + | mi = MINUS_ASSIGN {op = AssignOperator.MINUS_ASSIGN;line = $mi.line;} + | di = DIVIDE_ASSIGN {op = AssignOperator.DIVIDE_ASSIGN;line = $di.line;} + | mu = MULT_ASSIGN {op = AssignOperator.MULT_ASSIGN;line = $mu.line;} + | mo = MOD_ASSIGN {op = AssignOperator.MOD_ASSIGN;line = $mo.line;}) + e = expression SEMICOLLON + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $assignRet = new AssignStatement(access, id_, $e.expRet, op); + if(access){ + $assignRet.setAccessListExpression($a.accessListExp); + } + $assignRet.setLine(line); + }; + +accessList returns [Expression accessListExp]: + LBRACK e = expression {$accessListExp = $e.expRet;} RBRACK; statement returns [Statement stmtRet]: - ifStatement - | loopDoStatement - | forStatement - | putsStatement - | pushStatement - | expression SEMICOLLON - | assignment + if = ifStatement {$stmtRet = $if.ifRet;} + | loop = loopDoStatement {$stmtRet = $loop.loopDoRet;} + | for = forStatement {$stmtRet = $for.forStRet;} + | puts = putsStatement {$stmtRet = $puts.putRet;} + | push = pushStatement {$stmtRet = $push.pushRet;} + | e = expression + { + ExpressionStatement expStmt = new ExpressionStatement($e.expRet); + $stmtRet = expStmt; + $stmtRet.setLine($e.expRet.getLine()); + } + SEMICOLLON + | as = assignment {$stmtRet = $as.assignRet;} ; body returns [ArrayList bodyRet]: - (statement)* + { + $bodyRet = new ArrayList(); + } + (s = statement {$bodyRet.add($s.stmtRet);})* ( - returnStatement + r = returnStatement {$bodyRet.add($r.returnStmtRet);} )?; diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index d0e6378..12dc7aa 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -5,7 +5,7 @@ import main.ast.nodes.declaration.MainDeclaration; import main.ast.nodes.declaration.PatternDeclaration; import main.ast.nodes.declaration.VarDeclaration; -import main.ast.nodes.expression.Identifier; +import main.ast.nodes.expression.*; import main.ast.nodes.statement.*; public interface IVisitor { @@ -24,4 +24,8 @@ public interface IVisitor { T visit(ForStatement forStatement); T visit(FilterStatement filterStatement); T visit(MatchPatternStatement matchPatternStatement); + T visit(ChopStatement chopStatement); + T visit(ChompStatement chompStatement); + T visit(AssignStatement assignStatement); + T visit(ExpressionStatement expressionStatement); } From 141577968719e8aa1e398d994aaa44d0af51b32e Mon Sep 17 00:00:00 2001 From: javad Date: Sun, 14 Apr 2024 03:05:59 +0330 Subject: [PATCH 09/23] add binaryExpression --- Phase1Template/.idea/misc.xml | 6 ++ Phase1Template/.idea/modules.xml | 8 ++ Phase1Template/.idea/vcs.xml | 6 ++ Phase1Template/.idea/workspace.xml | 44 +++++++++++ Phase1Template/Phase1Template.iml | 11 +++ Phase1Template/untitled/samples/2.fl | 1 + .../nodes/expression/AppendExpression.java | 27 +++++++ .../nodes/expression/BinaryExpression.java | 44 +++++++++++ .../expression/operators/BinaryOperator.java | 5 ++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 79 ++++++++++++------- .../Phase2/src/main/visitor/IVisitor.java | 2 + 11 files changed, 205 insertions(+), 28 deletions(-) create mode 100644 Phase1Template/.idea/misc.xml create mode 100644 Phase1Template/.idea/modules.xml create mode 100644 Phase1Template/.idea/vcs.xml create mode 100644 Phase1Template/.idea/workspace.xml create mode 100644 Phase1Template/Phase1Template.iml create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/AppendExpression.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/BinaryExpression.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java diff --git a/Phase1Template/.idea/misc.xml b/Phase1Template/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/Phase1Template/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Phase1Template/.idea/modules.xml b/Phase1Template/.idea/modules.xml new file mode 100644 index 0000000..10263b2 --- /dev/null +++ b/Phase1Template/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Phase1Template/.idea/vcs.xml b/Phase1Template/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Phase1Template/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Phase1Template/.idea/workspace.xml b/Phase1Template/.idea/workspace.xml new file mode 100644 index 0000000..927ac8b --- /dev/null +++ b/Phase1Template/.idea/workspace.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + 1713046498302 + + + + \ No newline at end of file diff --git a/Phase1Template/Phase1Template.iml b/Phase1Template/Phase1Template.iml new file mode 100644 index 0000000..726ae78 --- /dev/null +++ b/Phase1Template/Phase1Template.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Phase1Template/untitled/samples/2.fl b/Phase1Template/untitled/samples/2.fl index b8744b8..511f01b 100644 --- a/Phase1Template/untitled/samples/2.fl +++ b/Phase1Template/untitled/samples/2.fl @@ -1,5 +1,6 @@ def main() puts(len(a)); + a == 5; end diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/AppendExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/AppendExpression.java new file mode 100644 index 0000000..0d87894 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/AppendExpression.java @@ -0,0 +1,27 @@ +package main.ast.nodes.expression; + +import main.visitor.IVisitor; + +import java.lang.reflect.Array; +import java.util.ArrayList; + +public class AppendExpression extends Expression{ + private Expression appendee; + private ArrayList appendeds = new ArrayList<>(); + public AppendExpression(Expression appendee){this.appendee = appendee;} + public void addAppendedExpression(Expression expression){this.appendeds.add(expression);} + public Expression getAppendee(){return this.appendee;} + public ArrayList getAppendeds(){return this.appendeds;} + + public void setAppendee(Expression appendee) { + this.appendee = appendee; + } + + public void setAppendeds(ArrayList appendeds) { + this.appendeds = appendeds; + } + @Override + public String toString(){return "AppendExpression";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/BinaryExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/BinaryExpression.java new file mode 100644 index 0000000..8aa07df --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/BinaryExpression.java @@ -0,0 +1,44 @@ +package main.ast.nodes.expression; + +import main.ast.nodes.expression.operators.BinaryOperator; +import main.visitor.IVisitor; + +public class BinaryExpression extends Expression{ + private Expression firstOperand; + private Expression secondOperand; + private BinaryOperator binaryOperator; + public BinaryExpression(Expression firstOperand, Expression secondOperand, + BinaryOperator binaryOperator){ + this.firstOperand = firstOperand; + this.secondOperand = secondOperand; + this.binaryOperator = binaryOperator; + } + + public BinaryOperator getBinaryOperator() { + return binaryOperator; + } + + public Expression getFirstOperand() { + return firstOperand; + } + + public Expression getSecondOperand() { + return secondOperand; + } + + public void setBinaryOperator(BinaryOperator binaryOperator) { + this.binaryOperator = binaryOperator; + } + + public void setFirstOperand(Expression firstOperand) { + this.firstOperand = firstOperand; + } + + public void setSecondOperand(Expression secondOperand) { + this.secondOperand = secondOperand; + } + @Override + public String toString(){return "BinaryOperation:" + this.binaryOperator.name();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java new file mode 100644 index 0000000..354dc8f --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java @@ -0,0 +1,5 @@ +package main.ast.nodes.expression.operators; + +public enum BinaryOperator { + EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, LESS_EQUAL_THAN, GREATER_EQUAL_THAN, PLUS, MINUS +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 76ec79f..b763630 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -372,33 +372,56 @@ body returns [ArrayList bodyRet]: expression returns [Expression expRet]: - expression APPEND eqaulityExpression - | eqaulityExpression; - - -eqaulityExpression: - eqaulityExpression - (op = EQUAL - | op = NOT_EQUAL - ) relationalExpression - | relationalExpression; - -relationalExpression: - relationalExpression - (op = GREATER_THAN - | op = LESS_THAN - | op = LESS_EQUAL_THAN - | op = GREATER_EQUAL_THAN - ) additiveExpression - | additiveExpression; - - -additiveExpression: - additiveExpression - (op = PLUS - | op = MINUS - ) multiplicativeExpression - | multiplicativeExpression; + e1 = expression a = APPEND e2 = eqaulityExpression + { + if(!($e1.expRet instanceof AppendExpression)){ + $expRet = new AppendExpression($e1.expRet); + $expRet.setLine($a.line); + } + else{ + $e1.expRet.addAppendedExpression($e2.expRet) + $expRet = $e1.expRet; + } + } + | e3 = eqaulityExpression {$expRet = $e3.expRet;}; + + +eqaulityExpression returns [Expression expRet]: + { + BinaryOperator op; + } + e1 = eqaulityExpression + (op1 = EQUAL {op = BinaryOperator.EQUAL;} + | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;} + ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);} + | r2 = relationalExpression {$expRet = $r2.expRet;}; + +relationalExpression returns [Expression expRet]: + { + BinaryOperator op; + } + r1 = relationalExpression + (op = GREATER_THAN {op = BinaryOperator.GREATER_THAN;} + | LESS_THAN {op = BinaryOperator.LESS_THAN;} + | LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;} + | GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;} + ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);} + | a2 = additiveExpression {$expRet = $a2.expRet;}; + + +additiveExpression returns [Expression expRet]: + { + BinaryOperator op; + } + a1 = additiveExpression + (PLUS {op = BinaryOperator.PLUS;} + | MINUS {op = BinaryOperator.MINUS;} + ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);} + | m2 = multiplicativeExpression + { + $expRet = $m2.expRet; + } + ; multiplicativeExpression: @@ -433,7 +456,7 @@ otherExpression: |chompStatement | matchPatternStatement | filterStatement - | lenStatement + | lenStatement//move len to expression | LPAR (expression)? RPAR; diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index 12dc7aa..8c93cac 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -28,4 +28,6 @@ public interface IVisitor { T visit(ChompStatement chompStatement); T visit(AssignStatement assignStatement); T visit(ExpressionStatement expressionStatement); + T visit(AppendExpression appendExpression); + T visit(BinaryExpression binaryExpression); } From 356c06b95f282bf2efad666942db188d0447560d Mon Sep 17 00:00:00 2001 From: javad Date: Sun, 14 Apr 2024 20:42:08 +0330 Subject: [PATCH 10/23] semanticRules done --- .../nodes/expression/AccessExpression.java | 44 ++ .../nodes/expression/LambdaExpression.java | 47 +++ .../LenStatement.java | 5 +- .../ast/nodes/expression/UnaryExpression.java | 33 ++ .../expression/operators/BinaryOperator.java | 2 +- .../expression/operators/UnaryOperator.java | 5 + .../expression/value/FunctionPointer.java | 21 + .../ast/nodes/expression/value/ListValue.java | 23 + .../ast/nodes/expression/value/Value.java | 6 + .../expression/value/primitive/BoolValue.java | 21 + .../value/primitive/FloatValue.java | 23 + .../expression/value/primitive/IntValue.java | 21 + .../value/primitive/StringValue.java | 21 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 147 ++++--- .../Phase2/src/main/visitor/IVisitor.java | 15 + .../gen/main/grammer/FunctionCraft.interp | 178 ++++++++ .../main/grammer/FunctionCraftLexer.interp | 212 ++++++++++ .../gen/main/grammer/FunctionCraftLexer.java | 394 ++++++++++++++++++ .../main/grammer/FunctionCraftLexer.tokens | 124 ++++++ 19 files changed, 1290 insertions(+), 52 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java rename Phase2Template/Phase2/src/main/ast/nodes/{statement => expression}/LenStatement.java (78%) create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/UnaryExpression.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/operators/UnaryOperator.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/FunctionPointer.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/ListValue.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/Value.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/BoolValue.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/FloatValue.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/IntValue.java create mode 100644 Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/StringValue.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraft.interp create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftLexer.interp create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftLexer.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java new file mode 100644 index 0000000..238cefc --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java @@ -0,0 +1,44 @@ +package main.ast.nodes.expression; + +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class AccessExpression extends Expression{ + private Expression accessedExpression; + private ArrayList arguments = new ArrayList<>(); + private ArrayList dimentionalAccess = new ArrayList<>(); + + public AccessExpression(Expression accessedExpression, ArrayList arguments){ + this.accessedExpression = accessedExpression; + this.arguments = arguments; + } + + public Expression getAccessedExpression() { + return accessedExpression; + } + + public ArrayList getDimentionalAccess() { + return dimentionalAccess; + } + + public ArrayList getArguments() { + return arguments; + } + + public void setAccessedExpression(Expression accessedExpression) { + this.accessedExpression = accessedExpression; + } + + public void setArguments(ArrayList arguments) { + this.arguments = arguments; + } + + public void setDimentionalAccess(ArrayList dimentionalAccess) { + this.dimentionalAccess = dimentionalAccess; + } + @Override + public String toString(){return "AccessExpression";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java new file mode 100644 index 0000000..ab5669c --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java @@ -0,0 +1,47 @@ +package main.ast.nodes.expression; + +import main.ast.nodes.declaration.VarDeclaration; +import main.ast.nodes.statement.Statement; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class LambdaExpression extends Expression{ + ArrayList declarationArgs = new ArrayList<>(); + ArrayList body = new ArrayList<>(); + ArrayList args = new ArrayList<>(); + public LambdaExpression(ArrayList declarationArgs, ArrayList body + , ArrayList args){ + this.declarationArgs = declarationArgs; + this.args = args; + this.body = body; + } + + public void setArgs(ArrayList args) { + this.args = args; + } + + public void setBody(ArrayList body) { + this.body = body; + } + + public void setDeclarationArgs(ArrayList declarationArgs) { + this.declarationArgs = declarationArgs; + } + + public ArrayList getArgs() { + return args; + } + + public ArrayList getBody() { + return body; + } + + public ArrayList getDeclarationArgs() { + return declarationArgs; + } + @Override + public String toString(){return "LambdaExpression";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/LenStatement.java similarity index 78% rename from Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java rename to Phase2Template/Phase2/src/main/ast/nodes/expression/LenStatement.java index 3ccddbe..790c745 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/LenStatement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/LenStatement.java @@ -1,9 +1,8 @@ -package main.ast.nodes.statement; +package main.ast.nodes.expression; -import main.ast.nodes.expression.Expression; import main.visitor.IVisitor; -public class LenStatement extends Statement{ +public class LenStatement extends Expression{ private Expression expression; public LenStatement(Expression expression){this.expression = expression;} public Expression getExpression(){return this.expression;} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/UnaryExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/UnaryExpression.java new file mode 100644 index 0000000..c4c9a53 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/UnaryExpression.java @@ -0,0 +1,33 @@ +package main.ast.nodes.expression; + +import main.ast.nodes.expression.operators.UnaryOperator; +import main.visitor.IVisitor; + +public class UnaryExpression extends Expression{ + private Expression expression; + private UnaryOperator op; + public UnaryExpression(Expression expression, UnaryOperator op){ + this.expression = expression; + this.op = op; + } + + public void setExpression(Expression expression) { + this.expression = expression; + } + + public Expression getExpression() { + return expression; + } + + public UnaryOperator getOp() { + return op; + } + + public void setOp(UnaryOperator op) { + this.op = op; + } + @Override + public String toString(){return "UnaryExpression_" + op.name();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java index 354dc8f..07bc825 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/BinaryOperator.java @@ -1,5 +1,5 @@ package main.ast.nodes.expression.operators; public enum BinaryOperator { - EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, LESS_EQUAL_THAN, GREATER_EQUAL_THAN, PLUS, MINUS + EQUAL, NOT_EQUAL, GREATER_THAN, LESS_THAN, LESS_EQUAL_THAN, GREATER_EQUAL_THAN, PLUS, MINUS, MULT, DIVIDE } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/UnaryOperator.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/UnaryOperator.java new file mode 100644 index 0000000..93d1529 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/operators/UnaryOperator.java @@ -0,0 +1,5 @@ +package main.ast.nodes.expression.operators; + +public enum UnaryOperator { + NOT, MINUS, INC, DEC +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/FunctionPointer.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/FunctionPointer.java new file mode 100644 index 0000000..47e3c1f --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/FunctionPointer.java @@ -0,0 +1,21 @@ +package main.ast.nodes.expression.value; + +import main.ast.nodes.expression.Identifier; +import main.visitor.IVisitor; + +public class FunctionPointer extends Value{ + private Identifier id; + public FunctionPointer(Identifier id){this.id = id;} + + public Identifier getId() { + return id; + } + + public void setId(Identifier id) { + this.id = id; + } + @Override + public String toString(){return "FunctionPointer:" + this.id.getName();} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/ListValue.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/ListValue.java new file mode 100644 index 0000000..de9d3ea --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/ListValue.java @@ -0,0 +1,23 @@ +package main.ast.nodes.expression.value; + +import main.ast.nodes.expression.Expression; +import main.visitor.IVisitor; + +import java.util.ArrayList; + +public class ListValue extends Value{ + private ArrayList elements; + public ListValue(ArrayList elements){this.elements = elements;} + + public ArrayList getElements() { + return elements; + } + + public void setElements(ArrayList elements) { + this.elements = elements; + } + @Override + public String toString(){return "ListValue";} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/Value.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/Value.java new file mode 100644 index 0000000..de6e4bf --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/Value.java @@ -0,0 +1,6 @@ +package main.ast.nodes.expression.value; + +import main.ast.nodes.expression.Expression; + +public abstract class Value extends Expression { +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/BoolValue.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/BoolValue.java new file mode 100644 index 0000000..1df7150 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/BoolValue.java @@ -0,0 +1,21 @@ +package main.ast.nodes.expression.value.primitive; + +import main.ast.nodes.expression.value.Value; +import main.visitor.IVisitor; + +public class BoolValue extends Value { + private Boolean bool; + public BoolValue(Boolean bool){this.bool = bool;} + + public Boolean getBool() { + return bool; + } + + public void setBool(Boolean bool) { + this.bool = bool; + } + @Override + public String toString(){return "BoolValue:" + this.bool;} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/FloatValue.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/FloatValue.java new file mode 100644 index 0000000..2092fda --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/FloatValue.java @@ -0,0 +1,23 @@ +package main.ast.nodes.expression.value.primitive; + +import main.ast.nodes.expression.value.Value; +import main.visitor.IVisitor; + +public class FloatValue extends Value { + private float flt; + public FloatValue(float flt){ + this.flt = flt; + } + + public float getFlt() { + return flt; + } + + public void setFlt(float flt) { + this.flt = flt; + } + @Override + public String toString(){return "FLoatValue:" + String.valueOf(this.flt);} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/IntValue.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/IntValue.java new file mode 100644 index 0000000..f720b01 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/IntValue.java @@ -0,0 +1,21 @@ +package main.ast.nodes.expression.value.primitive; + +import main.ast.nodes.expression.value.Value; +import main.visitor.IVisitor; + +public class IntValue extends Value { + private int intVal; + public IntValue(int intVal){this.intVal = intVal;} + + public int getIntVal() { + return intVal; + } + + public void setIntVal(int intVal) { + this.intVal = intVal; + } + @Override + public String toString(){return "IntValue:" + String.valueOf(this.intVal);} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/StringValue.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/StringValue.java new file mode 100644 index 0000000..6b65ef8 --- /dev/null +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/value/primitive/StringValue.java @@ -0,0 +1,21 @@ +package main.ast.nodes.expression.value.primitive; + +import main.ast.nodes.expression.value.Value; +import main.visitor.IVisitor; + +public class StringValue extends Value { + private String str; + public StringValue(String str){this.str = str;} + + public String getStr() { + return str; + } + + public void setStr(String str) { + this.str = str; + } + @Override + public String toString(){return "StringValue:"+this.str;} + @Override + public T accept(IVisitor visitor){return visitor.visit(this);} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index b763630..f6eb333 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -424,69 +424,120 @@ additiveExpression returns [Expression expRet]: ; -multiplicativeExpression: - multiplicativeExpression - (op = MULT - | op = DIVIDE - ) preUnaryExpression - | preUnaryExpression; - - -preUnaryExpression: - (op = NOT - | op = MINUS - | op = INCREMENT - | op = DECREMENT - ) accessExpression - | accessExpression; - - -accessExpression: - otherExpression - (LPAR functionArguments +multiplicativeExpression returns [Expression expRet]: + { + BinaryOperator op; + } + m1 = multiplicativeExpression + (MULT {op = BinaryOperator.MULT;} + |DIVIDE {op = BinaryOperator.DIVIDE;} + ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);} + | p2 = preUnaryExpression {$expRet = $p2.expRet;}; + + +preUnaryExpression returns [Expression expRet]: + { + UnaryOperator op; + } + (NOT {op = UnaryOperator.NOT;} + |MINUS {op = UnaryOperator.MINUS;} + |INCREMENT {op = UnaryOperator.INC;} + |DECREMENT {op = UnaryOperator.DEC;} + ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);} + | a2 = accessExpression {$expRet = $a2.expRet;}; + + +accessExpression returns [Expression expRet]: + { + boolean isAccessExpression = false; + boolean isMultiDimentional = false; + ArrayList args = new ArrayList(); + ArrayList dimentions = new ArrayList(); + } + o = otherExpression + (LPAR f = functionArguments //arrayList of expression + { + isAccessExpression = true; + args.addAll($f.funcArgsRet); + } RPAR)* - (accessList)* + (a = accessList //single expression + { + isMultiDimentional = true; + dimentions.add($a.accessListExp); + } + )* + { + if(!isAccessExpression){ + $expRet = $o.expRet; + } + else{ + $expRet = new AccessExpression($o.expRet, args); + if(isMultiDimentional){ + $expRet.setDimentionalAccess(dimentions); + } + } + } ; -otherExpression: - values - | IDENTIFIER - | lambdaFunction - | chopStatement - |chompStatement - | matchPatternStatement - | filterStatement - | lenStatement//move len to expression - | LPAR (expression)? RPAR; +otherExpression returns [Expression expRet]: + v = values {$expRet = $v.valRet;} + | id = IDENTIFIER + { + $expRet = new Identifier($id.text); + $expRet.setLine($id.line); + } + | lambda = lambdaFunction {$expRet = $lambda.lambdaRet;} + | chop = chopStatement {$expRet = $chop.chopRet;} + | chomp = chompStatement {$expRet = chomp.chompRet;} + | match = matchPatternStatement {$expRet = $match.matchPatRet;} + | f = filterStatement {$expRet = $f.filterStatementRet;} + | len = lenStatement {$expRet = $len.lenRet;} + | LPAR (e = expression {$expRet = $e.expRet;})? RPAR; -lambdaFunction: - ARROW functionArgumentsDeclaration - LBRACE body RBRACE functionArguments +lambdaFunction returns [Expression lambdaRet]: + a = ARROW fd = functionArgumentsDeclaration + LBRACE b = body RBRACE fa = functionArguments + { + $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); + $lambdaRet.setLine($a.line); + } ; -values: - boolValue - | STRING_VALUE - | INT_VALUE - | FLOAT_VALUE - | listValue - | functionPointer; +values returns [Value valRet]: + b = boolValue {$valRet = $b.boolValRet;} + | s = STRING_VALUE {$valRet = new StringValue($s.text); $valRet.setLine($s.line);} + | i = INT_VALUE {$valRet = new IntValue($i.int);$valRet.setLine($i.line);} + | float = FLOAT_VALUE {$valRet = new FloatValue(Float.parseFloat($float.text));$valRet.setLine($float.line);} + | l = listValue {$valRet = $l.listValRet;} + | f = functionPointer {$valRet = $f.fpRet;}; -listValue: - LBRACK functionArguments +listValue returns [ListValue listValRet]: + l = LBRACK f = functionArguments RBRACK + { + $listValRet = new ListValue($f.funcArgsRet); + $listValRet.setLine($l.line); + } ; -boolValue: - TRUE - | FALSE +boolValue returns [BoolValue boolValRet]: + t = TRUE {$boolValRet = new BoolValue(true); $boolValRet.setLine($t.line);} + | f = FALSE {$boolValRet = new BoolValue(false); $boolValRet.setLine($f.line);} ; -functionPointer: - METHOD LPAR COLON IDENTIFIER RPAR; +functionPointer returns [FunctionPointer fpRet]: + m = METHOD LPAR COLON id = IDENTIFIER RPAR + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $fpRet = new FunctionPointer(id_); + $fpRet.setLine($m.line); + } + ; DEF: 'def'; diff --git a/Phase2Template/Phase2/src/main/visitor/IVisitor.java b/Phase2Template/Phase2/src/main/visitor/IVisitor.java index 8c93cac..ae04ce5 100644 --- a/Phase2Template/Phase2/src/main/visitor/IVisitor.java +++ b/Phase2Template/Phase2/src/main/visitor/IVisitor.java @@ -6,6 +6,12 @@ import main.ast.nodes.declaration.PatternDeclaration; import main.ast.nodes.declaration.VarDeclaration; import main.ast.nodes.expression.*; +import main.ast.nodes.expression.value.FunctionPointer; +import main.ast.nodes.expression.value.ListValue; +import main.ast.nodes.expression.value.primitive.BoolValue; +import main.ast.nodes.expression.value.primitive.FloatValue; +import main.ast.nodes.expression.value.primitive.IntValue; +import main.ast.nodes.expression.value.primitive.StringValue; import main.ast.nodes.statement.*; public interface IVisitor { @@ -30,4 +36,13 @@ public interface IVisitor { T visit(ExpressionStatement expressionStatement); T visit(AppendExpression appendExpression); T visit(BinaryExpression binaryExpression); + T visit(UnaryExpression unaryExpression); + T visit(AccessExpression accessExpression); + T visit(LambdaExpression lambdaExpression); + T visit(ListValue listValue); + T visit(FunctionPointer functionPointer); + T visit(BoolValue boolValue); + T visit(IntValue intValue); + T visit(StringValue stringValue); + T visit(FloatValue floatValue); } diff --git a/Phase2Template/gen/main/grammer/FunctionCraft.interp b/Phase2Template/gen/main/grammer/FunctionCraft.interp new file mode 100644 index 0000000..d9abf07 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraft.interp @@ -0,0 +1,178 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +program +functionDeclaration +functionArgumentsDeclaration +patternMatching +main +functionArguments +returnStatement +ifStatement +condition +putsStatement +lenStatement +pushStatement +loopDoStatement +loopBody +forStatement +range +filterStatement +matchPatternStatement +chopStatement +chompStatement +assignment +accessList +statement +body +expression +eqaulityExpression +relationalExpression +additiveExpression +multiplicativeExpression +preUnaryExpression +accessExpression +otherExpression +lambdaFunction +values +listValue +boolValue +functionPointer + + +atn: +[4, 1, 65, 648, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 434, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 440, 8, 23, 10, 23, 12, 23, 443, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 448, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 459, 8, 24, 10, 24, 12, 24, 462, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 470, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 478, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 490, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 498, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 506, 8, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 514, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 522, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 530, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 541, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 549, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 558, 8, 30, 10, 30, 12, 30, 561, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 566, 8, 30, 10, 30, 12, 30, 569, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 600, 8, 31, 1, 31, 3, 31, 603, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 628, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 639, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 1, 48, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 682, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 433, 1, 0, 0, 0, 46, 435, 1, 0, 0, 0, 48, 449, 1, 0, 0, 0, 50, 477, 1, 0, 0, 0, 52, 497, 1, 0, 0, 0, 54, 513, 1, 0, 0, 0, 56, 529, 1, 0, 0, 0, 58, 548, 1, 0, 0, 0, 60, 550, 1, 0, 0, 0, 62, 602, 1, 0, 0, 0, 64, 604, 1, 0, 0, 0, 66, 627, 1, 0, 0, 0, 68, 629, 1, 0, 0, 0, 70, 638, 1, 0, 0, 0, 72, 640, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 434, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 434, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 434, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 434, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 434, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 5, 59, 0, 0, 429, 434, 1, 0, 0, 0, 430, 431, 3, 40, 20, 0, 431, 432, 6, 22, -1, 0, 432, 434, 1, 0, 0, 0, 433, 411, 1, 0, 0, 0, 433, 414, 1, 0, 0, 0, 433, 417, 1, 0, 0, 0, 433, 420, 1, 0, 0, 0, 433, 423, 1, 0, 0, 0, 433, 426, 1, 0, 0, 0, 433, 430, 1, 0, 0, 0, 434, 45, 1, 0, 0, 0, 435, 441, 6, 23, -1, 0, 436, 437, 3, 44, 22, 0, 437, 438, 6, 23, -1, 0, 438, 440, 1, 0, 0, 0, 439, 436, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 447, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 3, 12, 6, 0, 445, 446, 6, 23, -1, 0, 446, 448, 1, 0, 0, 0, 447, 444, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 47, 1, 0, 0, 0, 449, 450, 6, 24, -1, 0, 450, 451, 3, 50, 25, 0, 451, 452, 6, 24, -1, 0, 452, 460, 1, 0, 0, 0, 453, 454, 10, 2, 0, 0, 454, 455, 5, 37, 0, 0, 455, 456, 3, 50, 25, 0, 456, 457, 6, 24, -1, 0, 457, 459, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 49, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 464, 6, 25, -1, 0, 464, 469, 3, 50, 25, 0, 465, 466, 5, 24, 0, 0, 466, 470, 6, 25, -1, 0, 467, 468, 5, 25, 0, 0, 468, 470, 6, 25, -1, 0, 469, 465, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 3, 52, 26, 0, 472, 473, 6, 25, -1, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 52, 26, 0, 475, 476, 6, 25, -1, 0, 476, 478, 1, 0, 0, 0, 477, 463, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 51, 1, 0, 0, 0, 479, 480, 6, 26, -1, 0, 480, 489, 3, 52, 26, 0, 481, 482, 5, 28, 0, 0, 482, 490, 6, 26, -1, 0, 483, 484, 5, 29, 0, 0, 484, 490, 6, 26, -1, 0, 485, 486, 5, 26, 0, 0, 486, 490, 6, 26, -1, 0, 487, 488, 5, 27, 0, 0, 488, 490, 6, 26, -1, 0, 489, 481, 1, 0, 0, 0, 489, 483, 1, 0, 0, 0, 489, 485, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 492, 3, 54, 27, 0, 492, 493, 6, 26, -1, 0, 493, 498, 1, 0, 0, 0, 494, 495, 3, 54, 27, 0, 495, 496, 6, 26, -1, 0, 496, 498, 1, 0, 0, 0, 497, 479, 1, 0, 0, 0, 497, 494, 1, 0, 0, 0, 498, 53, 1, 0, 0, 0, 499, 500, 6, 27, -1, 0, 500, 505, 3, 54, 27, 0, 501, 502, 5, 20, 0, 0, 502, 506, 6, 27, -1, 0, 503, 504, 5, 21, 0, 0, 504, 506, 6, 27, -1, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 56, 28, 0, 508, 509, 6, 27, -1, 0, 509, 514, 1, 0, 0, 0, 510, 511, 3, 56, 28, 0, 511, 512, 6, 27, -1, 0, 512, 514, 1, 0, 0, 0, 513, 499, 1, 0, 0, 0, 513, 510, 1, 0, 0, 0, 514, 55, 1, 0, 0, 0, 515, 516, 6, 28, -1, 0, 516, 521, 3, 56, 28, 0, 517, 518, 5, 22, 0, 0, 518, 522, 6, 28, -1, 0, 519, 520, 5, 23, 0, 0, 520, 522, 6, 28, -1, 0, 521, 517, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 3, 58, 29, 0, 524, 525, 6, 28, -1, 0, 525, 530, 1, 0, 0, 0, 526, 527, 3, 58, 29, 0, 527, 528, 6, 28, -1, 0, 528, 530, 1, 0, 0, 0, 529, 515, 1, 0, 0, 0, 529, 526, 1, 0, 0, 0, 530, 57, 1, 0, 0, 0, 531, 540, 6, 29, -1, 0, 532, 533, 5, 32, 0, 0, 533, 541, 6, 29, -1, 0, 534, 535, 5, 21, 0, 0, 535, 541, 6, 29, -1, 0, 536, 537, 5, 33, 0, 0, 537, 541, 6, 29, -1, 0, 538, 539, 5, 34, 0, 0, 539, 541, 6, 29, -1, 0, 540, 532, 1, 0, 0, 0, 540, 534, 1, 0, 0, 0, 540, 536, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 3, 60, 30, 0, 543, 544, 6, 29, -1, 0, 544, 549, 1, 0, 0, 0, 545, 546, 3, 60, 30, 0, 546, 547, 6, 29, -1, 0, 547, 549, 1, 0, 0, 0, 548, 531, 1, 0, 0, 0, 548, 545, 1, 0, 0, 0, 549, 59, 1, 0, 0, 0, 550, 551, 6, 30, -1, 0, 551, 559, 3, 62, 31, 0, 552, 553, 5, 49, 0, 0, 553, 554, 3, 10, 5, 0, 554, 555, 6, 30, -1, 0, 555, 556, 5, 50, 0, 0, 556, 558, 1, 0, 0, 0, 557, 552, 1, 0, 0, 0, 558, 561, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 567, 1, 0, 0, 0, 561, 559, 1, 0, 0, 0, 562, 563, 3, 42, 21, 0, 563, 564, 6, 30, -1, 0, 564, 566, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 570, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 6, 30, -1, 0, 571, 61, 1, 0, 0, 0, 572, 573, 3, 66, 33, 0, 573, 574, 6, 31, -1, 0, 574, 603, 1, 0, 0, 0, 575, 576, 5, 62, 0, 0, 576, 603, 6, 31, -1, 0, 577, 578, 3, 64, 32, 0, 578, 579, 6, 31, -1, 0, 579, 603, 1, 0, 0, 0, 580, 581, 3, 36, 18, 0, 581, 582, 6, 31, -1, 0, 582, 603, 1, 0, 0, 0, 583, 584, 3, 38, 19, 0, 584, 585, 6, 31, -1, 0, 585, 603, 1, 0, 0, 0, 586, 587, 3, 34, 17, 0, 587, 588, 6, 31, -1, 0, 588, 603, 1, 0, 0, 0, 589, 590, 3, 32, 16, 0, 590, 591, 6, 31, -1, 0, 591, 603, 1, 0, 0, 0, 592, 593, 3, 20, 10, 0, 593, 594, 6, 31, -1, 0, 594, 603, 1, 0, 0, 0, 595, 599, 5, 49, 0, 0, 596, 597, 3, 48, 24, 0, 597, 598, 6, 31, -1, 0, 598, 600, 1, 0, 0, 0, 599, 596, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 603, 5, 50, 0, 0, 602, 572, 1, 0, 0, 0, 602, 575, 1, 0, 0, 0, 602, 577, 1, 0, 0, 0, 602, 580, 1, 0, 0, 0, 602, 583, 1, 0, 0, 0, 602, 586, 1, 0, 0, 0, 602, 589, 1, 0, 0, 0, 602, 592, 1, 0, 0, 0, 602, 595, 1, 0, 0, 0, 603, 63, 1, 0, 0, 0, 604, 605, 5, 42, 0, 0, 605, 606, 3, 4, 2, 0, 606, 607, 5, 53, 0, 0, 607, 608, 3, 46, 23, 0, 608, 609, 5, 54, 0, 0, 609, 610, 3, 10, 5, 0, 610, 611, 6, 32, -1, 0, 611, 65, 1, 0, 0, 0, 612, 613, 3, 70, 35, 0, 613, 614, 6, 33, -1, 0, 614, 628, 1, 0, 0, 0, 615, 616, 5, 63, 0, 0, 616, 628, 6, 33, -1, 0, 617, 618, 5, 60, 0, 0, 618, 628, 6, 33, -1, 0, 619, 620, 5, 61, 0, 0, 620, 628, 6, 33, -1, 0, 621, 622, 3, 68, 34, 0, 622, 623, 6, 33, -1, 0, 623, 628, 1, 0, 0, 0, 624, 625, 3, 72, 36, 0, 625, 626, 6, 33, -1, 0, 626, 628, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 627, 615, 1, 0, 0, 0, 627, 617, 1, 0, 0, 0, 627, 619, 1, 0, 0, 0, 627, 621, 1, 0, 0, 0, 627, 624, 1, 0, 0, 0, 628, 67, 1, 0, 0, 0, 629, 630, 5, 51, 0, 0, 630, 631, 3, 10, 5, 0, 631, 632, 5, 52, 0, 0, 632, 633, 6, 34, -1, 0, 633, 69, 1, 0, 0, 0, 634, 635, 5, 38, 0, 0, 635, 639, 6, 35, -1, 0, 636, 637, 5, 39, 0, 0, 637, 639, 6, 35, -1, 0, 638, 634, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 71, 1, 0, 0, 0, 640, 641, 5, 11, 0, 0, 641, 642, 5, 49, 0, 0, 642, 643, 5, 58, 0, 0, 643, 644, 5, 62, 0, 0, 644, 645, 5, 50, 0, 0, 645, 646, 6, 36, -1, 0, 646, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 433, 441, 447, 460, 469, 477, 489, 497, 505, 513, 521, 529, 540, 548, 559, 567, 599, 602, 627, 638] \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.interp b/Phase2Template/gen/main/grammer/FunctionCraftLexer.interp new file mode 100644 index 0000000..6d42009 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftLexer.interp @@ -0,0 +1,212 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 65, 411, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 345, 8, 59, 10, 59, 12, 59, 348, 9, 59, 3, 59, 350, 8, 59, 1, 60, 5, 60, 353, 8, 60, 10, 60, 12, 60, 356, 9, 60, 1, 60, 1, 60, 4, 60, 360, 8, 60, 11, 60, 12, 60, 361, 1, 61, 1, 61, 5, 61, 366, 8, 61, 10, 61, 12, 61, 369, 9, 61, 1, 62, 1, 62, 5, 62, 373, 8, 62, 10, 62, 12, 62, 376, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 382, 8, 63, 10, 63, 12, 63, 385, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 395, 8, 63, 10, 63, 12, 63, 398, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 404, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 396, 0, 65, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 419, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 1, 131, 1, 0, 0, 0, 3, 135, 1, 0, 0, 0, 5, 139, 1, 0, 0, 0, 7, 144, 1, 0, 0, 0, 9, 149, 1, 0, 0, 0, 11, 154, 1, 0, 0, 0, 13, 158, 1, 0, 0, 0, 15, 165, 1, 0, 0, 0, 17, 168, 1, 0, 0, 0, 19, 173, 1, 0, 0, 0, 21, 180, 1, 0, 0, 0, 23, 187, 1, 0, 0, 0, 25, 195, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 210, 1, 0, 0, 0, 33, 213, 1, 0, 0, 0, 35, 216, 1, 0, 0, 0, 37, 221, 1, 0, 0, 0, 39, 227, 1, 0, 0, 0, 41, 229, 1, 0, 0, 0, 43, 231, 1, 0, 0, 0, 45, 233, 1, 0, 0, 0, 47, 235, 1, 0, 0, 0, 49, 238, 1, 0, 0, 0, 51, 241, 1, 0, 0, 0, 53, 244, 1, 0, 0, 0, 55, 247, 1, 0, 0, 0, 57, 249, 1, 0, 0, 0, 59, 251, 1, 0, 0, 0, 61, 254, 1, 0, 0, 0, 63, 257, 1, 0, 0, 0, 65, 259, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 265, 1, 0, 0, 0, 71, 271, 1, 0, 0, 0, 73, 273, 1, 0, 0, 0, 75, 276, 1, 0, 0, 0, 77, 281, 1, 0, 0, 0, 79, 287, 1, 0, 0, 0, 81, 293, 1, 0, 0, 0, 83, 298, 1, 0, 0, 0, 85, 301, 1, 0, 0, 0, 87, 304, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 310, 1, 0, 0, 0, 93, 313, 1, 0, 0, 0, 95, 316, 1, 0, 0, 0, 97, 318, 1, 0, 0, 0, 99, 320, 1, 0, 0, 0, 101, 322, 1, 0, 0, 0, 103, 324, 1, 0, 0, 0, 105, 326, 1, 0, 0, 0, 107, 328, 1, 0, 0, 0, 109, 330, 1, 0, 0, 0, 111, 332, 1, 0, 0, 0, 113, 334, 1, 0, 0, 0, 115, 337, 1, 0, 0, 0, 117, 339, 1, 0, 0, 0, 119, 349, 1, 0, 0, 0, 121, 354, 1, 0, 0, 0, 123, 363, 1, 0, 0, 0, 125, 370, 1, 0, 0, 0, 127, 403, 1, 0, 0, 0, 129, 407, 1, 0, 0, 0, 131, 132, 5, 100, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 102, 0, 0, 134, 2, 1, 0, 0, 0, 135, 136, 5, 101, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 100, 0, 0, 138, 4, 1, 0, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 6, 1, 0, 0, 0, 144, 145, 5, 112, 0, 0, 145, 146, 5, 117, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 115, 0, 0, 148, 8, 1, 0, 0, 0, 149, 150, 5, 112, 0, 0, 150, 151, 5, 117, 0, 0, 151, 152, 5, 115, 0, 0, 152, 153, 5, 104, 0, 0, 153, 10, 1, 0, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 157, 5, 110, 0, 0, 157, 12, 1, 0, 0, 0, 158, 159, 5, 114, 0, 0, 159, 160, 5, 101, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 117, 0, 0, 162, 163, 5, 114, 0, 0, 163, 164, 5, 110, 0, 0, 164, 14, 1, 0, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 16, 1, 0, 0, 0, 168, 169, 5, 101, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 115, 0, 0, 171, 172, 5, 101, 0, 0, 172, 18, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 115, 0, 0, 176, 177, 5, 101, 0, 0, 177, 178, 5, 105, 0, 0, 178, 179, 5, 102, 0, 0, 179, 20, 1, 0, 0, 0, 180, 181, 5, 109, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 116, 0, 0, 183, 184, 5, 104, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 22, 1, 0, 0, 0, 187, 188, 5, 112, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 116, 0, 0, 190, 191, 5, 116, 0, 0, 191, 192, 5, 101, 0, 0, 192, 193, 5, 114, 0, 0, 193, 194, 5, 110, 0, 0, 194, 24, 1, 0, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 99, 0, 0, 199, 200, 5, 104, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 108, 0, 0, 202, 203, 5, 111, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 112, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 102, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 114, 0, 0, 209, 30, 1, 0, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 32, 1, 0, 0, 0, 213, 214, 5, 100, 0, 0, 214, 215, 5, 111, 0, 0, 215, 34, 1, 0, 0, 0, 216, 217, 5, 99, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 112, 0, 0, 220, 36, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 104, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 109, 0, 0, 225, 226, 5, 112, 0, 0, 226, 38, 1, 0, 0, 0, 227, 228, 5, 43, 0, 0, 228, 40, 1, 0, 0, 0, 229, 230, 5, 45, 0, 0, 230, 42, 1, 0, 0, 0, 231, 232, 5, 42, 0, 0, 232, 44, 1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 46, 1, 0, 0, 0, 235, 236, 5, 61, 0, 0, 236, 237, 5, 61, 0, 0, 237, 48, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 50, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 243, 5, 61, 0, 0, 243, 52, 1, 0, 0, 0, 244, 245, 5, 62, 0, 0, 245, 246, 5, 61, 0, 0, 246, 54, 1, 0, 0, 0, 247, 248, 5, 62, 0, 0, 248, 56, 1, 0, 0, 0, 249, 250, 5, 60, 0, 0, 250, 58, 1, 0, 0, 0, 251, 252, 5, 38, 0, 0, 252, 253, 5, 38, 0, 0, 253, 60, 1, 0, 0, 0, 254, 255, 5, 124, 0, 0, 255, 256, 5, 124, 0, 0, 256, 62, 1, 0, 0, 0, 257, 258, 5, 33, 0, 0, 258, 64, 1, 0, 0, 0, 259, 260, 5, 43, 0, 0, 260, 261, 5, 43, 0, 0, 261, 66, 1, 0, 0, 0, 262, 263, 5, 45, 0, 0, 263, 264, 5, 45, 0, 0, 264, 68, 1, 0, 0, 0, 265, 266, 5, 32, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 5, 32, 0, 0, 268, 269, 5, 32, 0, 0, 269, 270, 5, 124, 0, 0, 270, 70, 1, 0, 0, 0, 271, 272, 5, 124, 0, 0, 272, 72, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 60, 0, 0, 275, 74, 1, 0, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 117, 0, 0, 279, 280, 5, 101, 0, 0, 280, 76, 1, 0, 0, 0, 281, 282, 5, 102, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 108, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 101, 0, 0, 286, 78, 1, 0, 0, 0, 287, 288, 5, 98, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 101, 0, 0, 290, 291, 5, 97, 0, 0, 291, 292, 5, 107, 0, 0, 292, 80, 1, 0, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 101, 0, 0, 295, 296, 5, 120, 0, 0, 296, 297, 5, 116, 0, 0, 297, 82, 1, 0, 0, 0, 298, 299, 5, 45, 0, 0, 299, 300, 5, 62, 0, 0, 300, 84, 1, 0, 0, 0, 301, 302, 5, 43, 0, 0, 302, 303, 5, 61, 0, 0, 303, 86, 1, 0, 0, 0, 304, 305, 5, 45, 0, 0, 305, 306, 5, 61, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 5, 42, 0, 0, 308, 309, 5, 61, 0, 0, 309, 90, 1, 0, 0, 0, 310, 311, 5, 47, 0, 0, 311, 312, 5, 61, 0, 0, 312, 92, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 315, 5, 61, 0, 0, 315, 94, 1, 0, 0, 0, 316, 317, 5, 61, 0, 0, 317, 96, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 98, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 100, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 102, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 104, 1, 0, 0, 0, 326, 327, 5, 123, 0, 0, 327, 106, 1, 0, 0, 0, 328, 329, 5, 125, 0, 0, 329, 108, 1, 0, 0, 0, 330, 331, 5, 44, 0, 0, 331, 110, 1, 0, 0, 0, 332, 333, 5, 46, 0, 0, 333, 112, 1, 0, 0, 0, 334, 335, 5, 46, 0, 0, 335, 336, 5, 46, 0, 0, 336, 114, 1, 0, 0, 0, 337, 338, 5, 58, 0, 0, 338, 116, 1, 0, 0, 0, 339, 340, 5, 59, 0, 0, 340, 118, 1, 0, 0, 0, 341, 350, 5, 48, 0, 0, 342, 346, 7, 0, 0, 0, 343, 345, 7, 1, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 342, 1, 0, 0, 0, 350, 120, 1, 0, 0, 0, 351, 353, 7, 1, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 46, 0, 0, 358, 360, 7, 1, 0, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 122, 1, 0, 0, 0, 363, 367, 7, 2, 0, 0, 364, 366, 7, 3, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 124, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 374, 5, 34, 0, 0, 371, 373, 8, 4, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 378, 5, 34, 0, 0, 378, 126, 1, 0, 0, 0, 379, 383, 5, 35, 0, 0, 380, 382, 8, 5, 0, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 404, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 388, 5, 98, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 110, 0, 0, 392, 396, 1, 0, 0, 0, 393, 395, 9, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 61, 0, 0, 400, 401, 5, 101, 0, 0, 401, 402, 5, 110, 0, 0, 402, 404, 5, 100, 0, 0, 403, 379, 1, 0, 0, 0, 403, 386, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 6, 63, 0, 0, 406, 128, 1, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 64, 0, 0, 410, 130, 1, 0, 0, 0, 10, 0, 346, 349, 354, 361, 367, 374, 383, 396, 403, 1, 6, 0, 0] \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.java b/Phase2Template/gen/main/grammer/FunctionCraftLexer.java new file mode 100644 index 0000000..638d90d --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftLexer.java @@ -0,0 +1,394 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class FunctionCraftLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public FunctionCraftLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000A\u019b\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+ + "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+ + "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+ + "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+ + "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+ + "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+ + "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ + "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+ + "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ + "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ + "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ + "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ + "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u00010\u00010\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u0001"+ + "4\u00015\u00015\u00016\u00016\u00017\u00017\u00018\u00018\u00018\u0001"+ + "9\u00019\u0001:\u0001:\u0001;\u0001;\u0001;\u0005;\u0159\b;\n;\f;\u015c"+ + "\t;\u0003;\u015e\b;\u0001<\u0005<\u0161\b<\n<\f<\u0164\t<\u0001<\u0001"+ + "<\u0004<\u0168\b<\u000b<\f<\u0169\u0001=\u0001=\u0005=\u016e\b=\n=\f="+ + "\u0171\t=\u0001>\u0001>\u0005>\u0175\b>\n>\f>\u0178\t>\u0001>\u0001>\u0001"+ + "?\u0001?\u0005?\u017e\b?\n?\f?\u0181\t?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0005?\u018b\b?\n?\f?\u018e\t?\u0001?\u0001?\u0001"+ + "?\u0001?\u0003?\u0194\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001"+ + "\u018c\u0000A\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+ + "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+ + "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+ + "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+ + "? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f"+ + "@\u0081A\u0001\u0000\u0007\u0001\u000019\u0001\u000009\u0003\u0000AZ_"+ + "_az\u0004\u000009AZ__az\u0001\u0000\"\"\u0002\u0000\n\n\r\r\u0003\u0000"+ + "\t\n\r\r \u01a3\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0001\u0083\u0001\u0000\u0000\u0000\u0003\u0087\u0001"+ + "\u0000\u0000\u0000\u0005\u008b\u0001\u0000\u0000\u0000\u0007\u0090\u0001"+ + "\u0000\u0000\u0000\t\u0095\u0001\u0000\u0000\u0000\u000b\u009a\u0001\u0000"+ + "\u0000\u0000\r\u009e\u0001\u0000\u0000\u0000\u000f\u00a5\u0001\u0000\u0000"+ + "\u0000\u0011\u00a8\u0001\u0000\u0000\u0000\u0013\u00ad\u0001\u0000\u0000"+ + "\u0000\u0015\u00b4\u0001\u0000\u0000\u0000\u0017\u00bb\u0001\u0000\u0000"+ + "\u0000\u0019\u00c3\u0001\u0000\u0000\u0000\u001b\u00c9\u0001\u0000\u0000"+ + "\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d2\u0001\u0000\u0000"+ + "\u0000!\u00d5\u0001\u0000\u0000\u0000#\u00d8\u0001\u0000\u0000\u0000%"+ + "\u00dd\u0001\u0000\u0000\u0000\'\u00e3\u0001\u0000\u0000\u0000)\u00e5"+ + "\u0001\u0000\u0000\u0000+\u00e7\u0001\u0000\u0000\u0000-\u00e9\u0001\u0000"+ + "\u0000\u0000/\u00eb\u0001\u0000\u0000\u00001\u00ee\u0001\u0000\u0000\u0000"+ + "3\u00f1\u0001\u0000\u0000\u00005\u00f4\u0001\u0000\u0000\u00007\u00f7"+ + "\u0001\u0000\u0000\u00009\u00f9\u0001\u0000\u0000\u0000;\u00fb\u0001\u0000"+ + "\u0000\u0000=\u00fe\u0001\u0000\u0000\u0000?\u0101\u0001\u0000\u0000\u0000"+ + "A\u0103\u0001\u0000\u0000\u0000C\u0106\u0001\u0000\u0000\u0000E\u0109"+ + "\u0001\u0000\u0000\u0000G\u010f\u0001\u0000\u0000\u0000I\u0111\u0001\u0000"+ + "\u0000\u0000K\u0114\u0001\u0000\u0000\u0000M\u0119\u0001\u0000\u0000\u0000"+ + "O\u011f\u0001\u0000\u0000\u0000Q\u0125\u0001\u0000\u0000\u0000S\u012a"+ + "\u0001\u0000\u0000\u0000U\u012d\u0001\u0000\u0000\u0000W\u0130\u0001\u0000"+ + "\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0136\u0001\u0000\u0000\u0000"+ + "]\u0139\u0001\u0000\u0000\u0000_\u013c\u0001\u0000\u0000\u0000a\u013e"+ + "\u0001\u0000\u0000\u0000c\u0140\u0001\u0000\u0000\u0000e\u0142\u0001\u0000"+ + "\u0000\u0000g\u0144\u0001\u0000\u0000\u0000i\u0146\u0001\u0000\u0000\u0000"+ + "k\u0148\u0001\u0000\u0000\u0000m\u014a\u0001\u0000\u0000\u0000o\u014c"+ + "\u0001\u0000\u0000\u0000q\u014e\u0001\u0000\u0000\u0000s\u0151\u0001\u0000"+ + "\u0000\u0000u\u0153\u0001\u0000\u0000\u0000w\u015d\u0001\u0000\u0000\u0000"+ + "y\u0162\u0001\u0000\u0000\u0000{\u016b\u0001\u0000\u0000\u0000}\u0172"+ + "\u0001\u0000\u0000\u0000\u007f\u0193\u0001\u0000\u0000\u0000\u0081\u0197"+ + "\u0001\u0000\u0000\u0000\u0083\u0084\u0005d\u0000\u0000\u0084\u0085\u0005"+ + "e\u0000\u0000\u0085\u0086\u0005f\u0000\u0000\u0086\u0002\u0001\u0000\u0000"+ + "\u0000\u0087\u0088\u0005e\u0000\u0000\u0088\u0089\u0005n\u0000\u0000\u0089"+ + "\u008a\u0005d\u0000\u0000\u008a\u0004\u0001\u0000\u0000\u0000\u008b\u008c"+ + "\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005i"+ + "\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0006\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0005p\u0000\u0000\u0091\u0092\u0005u\u0000\u0000\u0092"+ + "\u0093\u0005t\u0000\u0000\u0093\u0094\u0005s\u0000\u0000\u0094\b\u0001"+ + "\u0000\u0000\u0000\u0095\u0096\u0005p\u0000\u0000\u0096\u0097\u0005u\u0000"+ + "\u0000\u0097\u0098\u0005s\u0000\u0000\u0098\u0099\u0005h\u0000\u0000\u0099"+ + "\n\u0001\u0000\u0000\u0000\u009a\u009b\u0005l\u0000\u0000\u009b\u009c"+ + "\u0005e\u0000\u0000\u009c\u009d\u0005n\u0000\u0000\u009d\f\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0005r\u0000\u0000\u009f\u00a0\u0005e\u0000\u0000"+ + "\u00a0\u00a1\u0005t\u0000\u0000\u00a1\u00a2\u0005u\u0000\u0000\u00a2\u00a3"+ + "\u0005r\u0000\u0000\u00a3\u00a4\u0005n\u0000\u0000\u00a4\u000e\u0001\u0000"+ + "\u0000\u0000\u00a5\u00a6\u0005i\u0000\u0000\u00a6\u00a7\u0005f\u0000\u0000"+ + "\u00a7\u0010\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005e\u0000\u0000\u00a9"+ + "\u00aa\u0005l\u0000\u0000\u00aa\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005"+ + "e\u0000\u0000\u00ac\u0012\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005e\u0000"+ + "\u0000\u00ae\u00af\u0005l\u0000\u0000\u00af\u00b0\u0005s\u0000\u0000\u00b0"+ + "\u00b1\u0005e\u0000\u0000\u00b1\u00b2\u0005i\u0000\u0000\u00b2\u00b3\u0005"+ + "f\u0000\u0000\u00b3\u0014\u0001\u0000\u0000\u0000\u00b4\u00b5\u0005m\u0000"+ + "\u0000\u00b5\u00b6\u0005e\u0000\u0000\u00b6\u00b7\u0005t\u0000\u0000\u00b7"+ + "\u00b8\u0005h\u0000\u0000\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005"+ + "d\u0000\u0000\u00ba\u0016\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005p\u0000"+ + "\u0000\u00bc\u00bd\u0005a\u0000\u0000\u00bd\u00be\u0005t\u0000\u0000\u00be"+ + "\u00bf\u0005t\u0000\u0000\u00bf\u00c0\u0005e\u0000\u0000\u00c0\u00c1\u0005"+ + "r\u0000\u0000\u00c1\u00c2\u0005n\u0000\u0000\u00c2\u0018\u0001\u0000\u0000"+ + "\u0000\u00c3\u00c4\u0005m\u0000\u0000\u00c4\u00c5\u0005a\u0000\u0000\u00c5"+ + "\u00c6\u0005t\u0000\u0000\u00c6\u00c7\u0005c\u0000\u0000\u00c7\u00c8\u0005"+ + "h\u0000\u0000\u00c8\u001a\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005l\u0000"+ + "\u0000\u00ca\u00cb\u0005o\u0000\u0000\u00cb\u00cc\u0005o\u0000\u0000\u00cc"+ + "\u00cd\u0005p\u0000\u0000\u00cd\u001c\u0001\u0000\u0000\u0000\u00ce\u00cf"+ + "\u0005f\u0000\u0000\u00cf\u00d0\u0005o\u0000\u0000\u00d0\u00d1\u0005r"+ + "\u0000\u0000\u00d1\u001e\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005i\u0000"+ + "\u0000\u00d3\u00d4\u0005n\u0000\u0000\u00d4 \u0001\u0000\u0000\u0000\u00d5"+ + "\u00d6\u0005d\u0000\u0000\u00d6\u00d7\u0005o\u0000\u0000\u00d7\"\u0001"+ + "\u0000\u0000\u0000\u00d8\u00d9\u0005c\u0000\u0000\u00d9\u00da\u0005h\u0000"+ + "\u0000\u00da\u00db\u0005o\u0000\u0000\u00db\u00dc\u0005p\u0000\u0000\u00dc"+ + "$\u0001\u0000\u0000\u0000\u00dd\u00de\u0005c\u0000\u0000\u00de\u00df\u0005"+ + "h\u0000\u0000\u00df\u00e0\u0005o\u0000\u0000\u00e0\u00e1\u0005m\u0000"+ + "\u0000\u00e1\u00e2\u0005p\u0000\u0000\u00e2&\u0001\u0000\u0000\u0000\u00e3"+ + "\u00e4\u0005+\u0000\u0000\u00e4(\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005"+ + "-\u0000\u0000\u00e6*\u0001\u0000\u0000\u0000\u00e7\u00e8\u0005*\u0000"+ + "\u0000\u00e8,\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea"+ + ".\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005=\u0000\u0000\u00ec\u00ed\u0005"+ + "=\u0000\u0000\u00ed0\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005!\u0000"+ + "\u0000\u00ef\u00f0\u0005=\u0000\u0000\u00f02\u0001\u0000\u0000\u0000\u00f1"+ + "\u00f2\u0005<\u0000\u0000\u00f2\u00f3\u0005=\u0000\u0000\u00f34\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0005>\u0000\u0000\u00f5\u00f6\u0005=\u0000"+ + "\u0000\u00f66\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005>\u0000\u0000\u00f8"+ + "8\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005<\u0000\u0000\u00fa:\u0001"+ + "\u0000\u0000\u0000\u00fb\u00fc\u0005&\u0000\u0000\u00fc\u00fd\u0005&\u0000"+ + "\u0000\u00fd<\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005|\u0000\u0000\u00ff"+ + "\u0100\u0005|\u0000\u0000\u0100>\u0001\u0000\u0000\u0000\u0101\u0102\u0005"+ + "!\u0000\u0000\u0102@\u0001\u0000\u0000\u0000\u0103\u0104\u0005+\u0000"+ + "\u0000\u0104\u0105\u0005+\u0000\u0000\u0105B\u0001\u0000\u0000\u0000\u0106"+ + "\u0107\u0005-\u0000\u0000\u0107\u0108\u0005-\u0000\u0000\u0108D\u0001"+ + "\u0000\u0000\u0000\u0109\u010a\u0005 \u0000\u0000\u010a\u010b\u0005 \u0000"+ + "\u0000\u010b\u010c\u0005 \u0000\u0000\u010c\u010d\u0005 \u0000\u0000\u010d"+ + "\u010e\u0005|\u0000\u0000\u010eF\u0001\u0000\u0000\u0000\u010f\u0110\u0005"+ + "|\u0000\u0000\u0110H\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000"+ + "\u0000\u0112\u0113\u0005<\u0000\u0000\u0113J\u0001\u0000\u0000\u0000\u0114"+ + "\u0115\u0005t\u0000\u0000\u0115\u0116\u0005r\u0000\u0000\u0116\u0117\u0005"+ + "u\u0000\u0000\u0117\u0118\u0005e\u0000\u0000\u0118L\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005f\u0000\u0000\u011a\u011b\u0005a\u0000\u0000\u011b"+ + "\u011c\u0005l\u0000\u0000\u011c\u011d\u0005s\u0000\u0000\u011d\u011e\u0005"+ + "e\u0000\u0000\u011eN\u0001\u0000\u0000\u0000\u011f\u0120\u0005b\u0000"+ + "\u0000\u0120\u0121\u0005r\u0000\u0000\u0121\u0122\u0005e\u0000\u0000\u0122"+ + "\u0123\u0005a\u0000\u0000\u0123\u0124\u0005k\u0000\u0000\u0124P\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005n\u0000\u0000\u0126\u0127\u0005e\u0000"+ + "\u0000\u0127\u0128\u0005x\u0000\u0000\u0128\u0129\u0005t\u0000\u0000\u0129"+ + "R\u0001\u0000\u0000\u0000\u012a\u012b\u0005-\u0000\u0000\u012b\u012c\u0005"+ + ">\u0000\u0000\u012cT\u0001\u0000\u0000\u0000\u012d\u012e\u0005+\u0000"+ + "\u0000\u012e\u012f\u0005=\u0000\u0000\u012fV\u0001\u0000\u0000\u0000\u0130"+ + "\u0131\u0005-\u0000\u0000\u0131\u0132\u0005=\u0000\u0000\u0132X\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0005*\u0000\u0000\u0134\u0135\u0005=\u0000"+ + "\u0000\u0135Z\u0001\u0000\u0000\u0000\u0136\u0137\u0005/\u0000\u0000\u0137"+ + "\u0138\u0005=\u0000\u0000\u0138\\\u0001\u0000\u0000\u0000\u0139\u013a"+ + "\u0005%\u0000\u0000\u013a\u013b\u0005=\u0000\u0000\u013b^\u0001\u0000"+ + "\u0000\u0000\u013c\u013d\u0005=\u0000\u0000\u013d`\u0001\u0000\u0000\u0000"+ + "\u013e\u013f\u0005(\u0000\u0000\u013fb\u0001\u0000\u0000\u0000\u0140\u0141"+ + "\u0005)\u0000\u0000\u0141d\u0001\u0000\u0000\u0000\u0142\u0143\u0005["+ + "\u0000\u0000\u0143f\u0001\u0000\u0000\u0000\u0144\u0145\u0005]\u0000\u0000"+ + "\u0145h\u0001\u0000\u0000\u0000\u0146\u0147\u0005{\u0000\u0000\u0147j"+ + "\u0001\u0000\u0000\u0000\u0148\u0149\u0005}\u0000\u0000\u0149l\u0001\u0000"+ + "\u0000\u0000\u014a\u014b\u0005,\u0000\u0000\u014bn\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005.\u0000\u0000\u014dp\u0001\u0000\u0000\u0000\u014e\u014f"+ + "\u0005.\u0000\u0000\u014f\u0150\u0005.\u0000\u0000\u0150r\u0001\u0000"+ + "\u0000\u0000\u0151\u0152\u0005:\u0000\u0000\u0152t\u0001\u0000\u0000\u0000"+ + "\u0153\u0154\u0005;\u0000\u0000\u0154v\u0001\u0000\u0000\u0000\u0155\u015e"+ + "\u00050\u0000\u0000\u0156\u015a\u0007\u0000\u0000\u0000\u0157\u0159\u0007"+ + "\u0001\u0000\u0000\u0158\u0157\u0001\u0000\u0000\u0000\u0159\u015c\u0001"+ + "\u0000\u0000\u0000\u015a\u0158\u0001\u0000\u0000\u0000\u015a\u015b\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015d\u0155\u0001\u0000\u0000\u0000\u015d\u0156\u0001"+ + "\u0000\u0000\u0000\u015ex\u0001\u0000\u0000\u0000\u015f\u0161\u0007\u0001"+ + "\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0161\u0164\u0001\u0000"+ + "\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001\u0000"+ + "\u0000\u0000\u0163\u0165\u0001\u0000\u0000\u0000\u0164\u0162\u0001\u0000"+ + "\u0000\u0000\u0165\u0167\u0005.\u0000\u0000\u0166\u0168\u0007\u0001\u0000"+ + "\u0000\u0167\u0166\u0001\u0000\u0000\u0000\u0168\u0169\u0001\u0000\u0000"+ + "\u0000\u0169\u0167\u0001\u0000\u0000\u0000\u0169\u016a\u0001\u0000\u0000"+ + "\u0000\u016az\u0001\u0000\u0000\u0000\u016b\u016f\u0007\u0002\u0000\u0000"+ + "\u016c\u016e\u0007\u0003\u0000\u0000\u016d\u016c\u0001\u0000\u0000\u0000"+ + "\u016e\u0171\u0001\u0000\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000"+ + "\u016f\u0170\u0001\u0000\u0000\u0000\u0170|\u0001\u0000\u0000\u0000\u0171"+ + "\u016f\u0001\u0000\u0000\u0000\u0172\u0176\u0005\"\u0000\u0000\u0173\u0175"+ + "\b\u0004\u0000\u0000\u0174\u0173\u0001\u0000\u0000\u0000\u0175\u0178\u0001"+ + "\u0000\u0000\u0000\u0176\u0174\u0001\u0000\u0000\u0000\u0176\u0177\u0001"+ + "\u0000\u0000\u0000\u0177\u0179\u0001\u0000\u0000\u0000\u0178\u0176\u0001"+ + "\u0000\u0000\u0000\u0179\u017a\u0005\"\u0000\u0000\u017a~\u0001\u0000"+ + "\u0000\u0000\u017b\u017f\u0005#\u0000\u0000\u017c\u017e\b\u0005\u0000"+ + "\u0000\u017d\u017c\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000\u0000"+ + "\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000"+ + "\u0000\u0180\u0194\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000"+ + "\u0000\u0182\u0183\u0005=\u0000\u0000\u0183\u0184\u0005b\u0000\u0000\u0184"+ + "\u0185\u0005e\u0000\u0000\u0185\u0186\u0005g\u0000\u0000\u0186\u0187\u0005"+ + "i\u0000\u0000\u0187\u0188\u0005n\u0000\u0000\u0188\u018c\u0001\u0000\u0000"+ + "\u0000\u0189\u018b\t\u0000\u0000\u0000\u018a\u0189\u0001\u0000\u0000\u0000"+ + "\u018b\u018e\u0001\u0000\u0000\u0000\u018c\u018d\u0001\u0000\u0000\u0000"+ + "\u018c\u018a\u0001\u0000\u0000\u0000\u018d\u018f\u0001\u0000\u0000\u0000"+ + "\u018e\u018c\u0001\u0000\u0000\u0000\u018f\u0190\u0005=\u0000\u0000\u0190"+ + "\u0191\u0005e\u0000\u0000\u0191\u0192\u0005n\u0000\u0000\u0192\u0194\u0005"+ + "d\u0000\u0000\u0193\u017b\u0001\u0000\u0000\u0000\u0193\u0182\u0001\u0000"+ + "\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u0196\u0006?\u0000"+ + "\u0000\u0196\u0080\u0001\u0000\u0000\u0000\u0197\u0198\u0007\u0006\u0000"+ + "\u0000\u0198\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0006@\u0000\u0000"+ + "\u019a\u0082\u0001\u0000\u0000\u0000\n\u0000\u015a\u015d\u0162\u0169\u016f"+ + "\u0176\u017f\u018c\u0193\u0001\u0006\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens b/Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 From 719da687b0ab208702e9676da4bec0be1413dd8c Mon Sep 17 00:00:00 2001 From: javad Date: Sun, 14 Apr 2024 21:19:12 +0330 Subject: [PATCH 11/23] bug fixed --- .../Phase2/src/main/grammer/FunctionCraft.g4 | 14 +- .../gen/main/grammer/FunctionCraft.interp | 2 +- .../gen/main/grammer/FunctionCraft.tokens | 124 + .../grammer/FunctionCraftBaseListener.java | 484 ++ .../grammer/FunctionCraftBaseVisitor.java | 274 ++ .../main/grammer/FunctionCraftListener.java | 380 ++ .../gen/main/grammer/FunctionCraftParser.java | 4354 +++++++++++++++++ .../main/grammer/FunctionCraftVisitor.java | 235 + 8 files changed, 5859 insertions(+), 8 deletions(-) create mode 100644 Phase2Template/gen/main/grammer/FunctionCraft.tokens create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftListener.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftParser.java create mode 100644 Phase2Template/gen/main/grammer/FunctionCraftVisitor.java diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index f6eb333..14537df 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -386,21 +386,21 @@ expression returns [Expression expRet]: | e3 = eqaulityExpression {$expRet = $e3.expRet;}; -eqaulityExpression returns [Expression expRet]: +eqaulityExpression returns[Expression expRet]: + e1 = eqaulityExpression { BinaryOperator op; } - e1 = eqaulityExpression (op1 = EQUAL {op = BinaryOperator.EQUAL;} | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;} ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);} | r2 = relationalExpression {$expRet = $r2.expRet;}; relationalExpression returns [Expression expRet]: + r1 = relationalExpression { BinaryOperator op; } - r1 = relationalExpression (op = GREATER_THAN {op = BinaryOperator.GREATER_THAN;} | LESS_THAN {op = BinaryOperator.LESS_THAN;} | LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;} @@ -410,10 +410,10 @@ relationalExpression returns [Expression expRet]: additiveExpression returns [Expression expRet]: + a1 = additiveExpression { - BinaryOperator op; + BinaryOperator op; } - a1 = additiveExpression (PLUS {op = BinaryOperator.PLUS;} | MINUS {op = BinaryOperator.MINUS;} ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);} @@ -425,10 +425,10 @@ additiveExpression returns [Expression expRet]: multiplicativeExpression returns [Expression expRet]: + m1 = multiplicativeExpression { - BinaryOperator op; + BinaryOperator op; } - m1 = multiplicativeExpression (MULT {op = BinaryOperator.MULT;} |DIVIDE {op = BinaryOperator.DIVIDE;} ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);} diff --git a/Phase2Template/gen/main/grammer/FunctionCraft.interp b/Phase2Template/gen/main/grammer/FunctionCraft.interp index d9abf07..01313b4 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraft.interp +++ b/Phase2Template/gen/main/grammer/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 648, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 434, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 440, 8, 23, 10, 23, 12, 23, 443, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 448, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 459, 8, 24, 10, 24, 12, 24, 462, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 470, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 478, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 490, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 498, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 506, 8, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 514, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 522, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 530, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 541, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 549, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 558, 8, 30, 10, 30, 12, 30, 561, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 566, 8, 30, 10, 30, 12, 30, 569, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 600, 8, 31, 1, 31, 3, 31, 603, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 628, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 639, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 1, 48, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 682, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 433, 1, 0, 0, 0, 46, 435, 1, 0, 0, 0, 48, 449, 1, 0, 0, 0, 50, 477, 1, 0, 0, 0, 52, 497, 1, 0, 0, 0, 54, 513, 1, 0, 0, 0, 56, 529, 1, 0, 0, 0, 58, 548, 1, 0, 0, 0, 60, 550, 1, 0, 0, 0, 62, 602, 1, 0, 0, 0, 64, 604, 1, 0, 0, 0, 66, 627, 1, 0, 0, 0, 68, 629, 1, 0, 0, 0, 70, 638, 1, 0, 0, 0, 72, 640, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 434, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 434, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 434, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 434, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 434, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 5, 59, 0, 0, 429, 434, 1, 0, 0, 0, 430, 431, 3, 40, 20, 0, 431, 432, 6, 22, -1, 0, 432, 434, 1, 0, 0, 0, 433, 411, 1, 0, 0, 0, 433, 414, 1, 0, 0, 0, 433, 417, 1, 0, 0, 0, 433, 420, 1, 0, 0, 0, 433, 423, 1, 0, 0, 0, 433, 426, 1, 0, 0, 0, 433, 430, 1, 0, 0, 0, 434, 45, 1, 0, 0, 0, 435, 441, 6, 23, -1, 0, 436, 437, 3, 44, 22, 0, 437, 438, 6, 23, -1, 0, 438, 440, 1, 0, 0, 0, 439, 436, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 447, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 3, 12, 6, 0, 445, 446, 6, 23, -1, 0, 446, 448, 1, 0, 0, 0, 447, 444, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 47, 1, 0, 0, 0, 449, 450, 6, 24, -1, 0, 450, 451, 3, 50, 25, 0, 451, 452, 6, 24, -1, 0, 452, 460, 1, 0, 0, 0, 453, 454, 10, 2, 0, 0, 454, 455, 5, 37, 0, 0, 455, 456, 3, 50, 25, 0, 456, 457, 6, 24, -1, 0, 457, 459, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 49, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 464, 6, 25, -1, 0, 464, 469, 3, 50, 25, 0, 465, 466, 5, 24, 0, 0, 466, 470, 6, 25, -1, 0, 467, 468, 5, 25, 0, 0, 468, 470, 6, 25, -1, 0, 469, 465, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 472, 3, 52, 26, 0, 472, 473, 6, 25, -1, 0, 473, 478, 1, 0, 0, 0, 474, 475, 3, 52, 26, 0, 475, 476, 6, 25, -1, 0, 476, 478, 1, 0, 0, 0, 477, 463, 1, 0, 0, 0, 477, 474, 1, 0, 0, 0, 478, 51, 1, 0, 0, 0, 479, 480, 6, 26, -1, 0, 480, 489, 3, 52, 26, 0, 481, 482, 5, 28, 0, 0, 482, 490, 6, 26, -1, 0, 483, 484, 5, 29, 0, 0, 484, 490, 6, 26, -1, 0, 485, 486, 5, 26, 0, 0, 486, 490, 6, 26, -1, 0, 487, 488, 5, 27, 0, 0, 488, 490, 6, 26, -1, 0, 489, 481, 1, 0, 0, 0, 489, 483, 1, 0, 0, 0, 489, 485, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 492, 3, 54, 27, 0, 492, 493, 6, 26, -1, 0, 493, 498, 1, 0, 0, 0, 494, 495, 3, 54, 27, 0, 495, 496, 6, 26, -1, 0, 496, 498, 1, 0, 0, 0, 497, 479, 1, 0, 0, 0, 497, 494, 1, 0, 0, 0, 498, 53, 1, 0, 0, 0, 499, 500, 6, 27, -1, 0, 500, 505, 3, 54, 27, 0, 501, 502, 5, 20, 0, 0, 502, 506, 6, 27, -1, 0, 503, 504, 5, 21, 0, 0, 504, 506, 6, 27, -1, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 56, 28, 0, 508, 509, 6, 27, -1, 0, 509, 514, 1, 0, 0, 0, 510, 511, 3, 56, 28, 0, 511, 512, 6, 27, -1, 0, 512, 514, 1, 0, 0, 0, 513, 499, 1, 0, 0, 0, 513, 510, 1, 0, 0, 0, 514, 55, 1, 0, 0, 0, 515, 516, 6, 28, -1, 0, 516, 521, 3, 56, 28, 0, 517, 518, 5, 22, 0, 0, 518, 522, 6, 28, -1, 0, 519, 520, 5, 23, 0, 0, 520, 522, 6, 28, -1, 0, 521, 517, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 3, 58, 29, 0, 524, 525, 6, 28, -1, 0, 525, 530, 1, 0, 0, 0, 526, 527, 3, 58, 29, 0, 527, 528, 6, 28, -1, 0, 528, 530, 1, 0, 0, 0, 529, 515, 1, 0, 0, 0, 529, 526, 1, 0, 0, 0, 530, 57, 1, 0, 0, 0, 531, 540, 6, 29, -1, 0, 532, 533, 5, 32, 0, 0, 533, 541, 6, 29, -1, 0, 534, 535, 5, 21, 0, 0, 535, 541, 6, 29, -1, 0, 536, 537, 5, 33, 0, 0, 537, 541, 6, 29, -1, 0, 538, 539, 5, 34, 0, 0, 539, 541, 6, 29, -1, 0, 540, 532, 1, 0, 0, 0, 540, 534, 1, 0, 0, 0, 540, 536, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 3, 60, 30, 0, 543, 544, 6, 29, -1, 0, 544, 549, 1, 0, 0, 0, 545, 546, 3, 60, 30, 0, 546, 547, 6, 29, -1, 0, 547, 549, 1, 0, 0, 0, 548, 531, 1, 0, 0, 0, 548, 545, 1, 0, 0, 0, 549, 59, 1, 0, 0, 0, 550, 551, 6, 30, -1, 0, 551, 559, 3, 62, 31, 0, 552, 553, 5, 49, 0, 0, 553, 554, 3, 10, 5, 0, 554, 555, 6, 30, -1, 0, 555, 556, 5, 50, 0, 0, 556, 558, 1, 0, 0, 0, 557, 552, 1, 0, 0, 0, 558, 561, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 567, 1, 0, 0, 0, 561, 559, 1, 0, 0, 0, 562, 563, 3, 42, 21, 0, 563, 564, 6, 30, -1, 0, 564, 566, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 569, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 570, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 6, 30, -1, 0, 571, 61, 1, 0, 0, 0, 572, 573, 3, 66, 33, 0, 573, 574, 6, 31, -1, 0, 574, 603, 1, 0, 0, 0, 575, 576, 5, 62, 0, 0, 576, 603, 6, 31, -1, 0, 577, 578, 3, 64, 32, 0, 578, 579, 6, 31, -1, 0, 579, 603, 1, 0, 0, 0, 580, 581, 3, 36, 18, 0, 581, 582, 6, 31, -1, 0, 582, 603, 1, 0, 0, 0, 583, 584, 3, 38, 19, 0, 584, 585, 6, 31, -1, 0, 585, 603, 1, 0, 0, 0, 586, 587, 3, 34, 17, 0, 587, 588, 6, 31, -1, 0, 588, 603, 1, 0, 0, 0, 589, 590, 3, 32, 16, 0, 590, 591, 6, 31, -1, 0, 591, 603, 1, 0, 0, 0, 592, 593, 3, 20, 10, 0, 593, 594, 6, 31, -1, 0, 594, 603, 1, 0, 0, 0, 595, 599, 5, 49, 0, 0, 596, 597, 3, 48, 24, 0, 597, 598, 6, 31, -1, 0, 598, 600, 1, 0, 0, 0, 599, 596, 1, 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 603, 5, 50, 0, 0, 602, 572, 1, 0, 0, 0, 602, 575, 1, 0, 0, 0, 602, 577, 1, 0, 0, 0, 602, 580, 1, 0, 0, 0, 602, 583, 1, 0, 0, 0, 602, 586, 1, 0, 0, 0, 602, 589, 1, 0, 0, 0, 602, 592, 1, 0, 0, 0, 602, 595, 1, 0, 0, 0, 603, 63, 1, 0, 0, 0, 604, 605, 5, 42, 0, 0, 605, 606, 3, 4, 2, 0, 606, 607, 5, 53, 0, 0, 607, 608, 3, 46, 23, 0, 608, 609, 5, 54, 0, 0, 609, 610, 3, 10, 5, 0, 610, 611, 6, 32, -1, 0, 611, 65, 1, 0, 0, 0, 612, 613, 3, 70, 35, 0, 613, 614, 6, 33, -1, 0, 614, 628, 1, 0, 0, 0, 615, 616, 5, 63, 0, 0, 616, 628, 6, 33, -1, 0, 617, 618, 5, 60, 0, 0, 618, 628, 6, 33, -1, 0, 619, 620, 5, 61, 0, 0, 620, 628, 6, 33, -1, 0, 621, 622, 3, 68, 34, 0, 622, 623, 6, 33, -1, 0, 623, 628, 1, 0, 0, 0, 624, 625, 3, 72, 36, 0, 625, 626, 6, 33, -1, 0, 626, 628, 1, 0, 0, 0, 627, 612, 1, 0, 0, 0, 627, 615, 1, 0, 0, 0, 627, 617, 1, 0, 0, 0, 627, 619, 1, 0, 0, 0, 627, 621, 1, 0, 0, 0, 627, 624, 1, 0, 0, 0, 628, 67, 1, 0, 0, 0, 629, 630, 5, 51, 0, 0, 630, 631, 3, 10, 5, 0, 631, 632, 5, 52, 0, 0, 632, 633, 6, 34, -1, 0, 633, 69, 1, 0, 0, 0, 634, 635, 5, 38, 0, 0, 635, 639, 6, 35, -1, 0, 636, 637, 5, 39, 0, 0, 637, 639, 6, 35, -1, 0, 638, 634, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 71, 1, 0, 0, 0, 640, 641, 5, 11, 0, 0, 641, 642, 5, 49, 0, 0, 642, 643, 5, 58, 0, 0, 643, 644, 5, 62, 0, 0, 644, 645, 5, 50, 0, 0, 645, 646, 6, 36, -1, 0, 646, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 433, 441, 447, 460, 469, 477, 489, 497, 505, 513, 521, 529, 540, 548, 559, 567, 599, 602, 627, 638] \ No newline at end of file +[4, 1, 65, 664, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 434, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 440, 8, 23, 10, 23, 12, 23, 443, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 448, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 459, 8, 24, 10, 24, 12, 24, 462, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 474, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 479, 8, 25, 10, 25, 12, 25, 482, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 498, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 503, 8, 26, 10, 26, 12, 26, 506, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 518, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 523, 8, 27, 10, 27, 12, 27, 526, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 538, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 543, 8, 28, 10, 28, 12, 28, 546, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 557, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 565, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 574, 8, 30, 10, 30, 12, 30, 577, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 582, 8, 30, 10, 30, 12, 30, 585, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 616, 8, 31, 1, 31, 3, 31, 619, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 644, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 655, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 5, 48, 50, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 698, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 433, 1, 0, 0, 0, 46, 435, 1, 0, 0, 0, 48, 449, 1, 0, 0, 0, 50, 463, 1, 0, 0, 0, 52, 483, 1, 0, 0, 0, 54, 507, 1, 0, 0, 0, 56, 527, 1, 0, 0, 0, 58, 564, 1, 0, 0, 0, 60, 566, 1, 0, 0, 0, 62, 618, 1, 0, 0, 0, 64, 620, 1, 0, 0, 0, 66, 643, 1, 0, 0, 0, 68, 645, 1, 0, 0, 0, 70, 654, 1, 0, 0, 0, 72, 656, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 434, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 434, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 434, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 434, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 434, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 5, 59, 0, 0, 429, 434, 1, 0, 0, 0, 430, 431, 3, 40, 20, 0, 431, 432, 6, 22, -1, 0, 432, 434, 1, 0, 0, 0, 433, 411, 1, 0, 0, 0, 433, 414, 1, 0, 0, 0, 433, 417, 1, 0, 0, 0, 433, 420, 1, 0, 0, 0, 433, 423, 1, 0, 0, 0, 433, 426, 1, 0, 0, 0, 433, 430, 1, 0, 0, 0, 434, 45, 1, 0, 0, 0, 435, 441, 6, 23, -1, 0, 436, 437, 3, 44, 22, 0, 437, 438, 6, 23, -1, 0, 438, 440, 1, 0, 0, 0, 439, 436, 1, 0, 0, 0, 440, 443, 1, 0, 0, 0, 441, 439, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 447, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 444, 445, 3, 12, 6, 0, 445, 446, 6, 23, -1, 0, 446, 448, 1, 0, 0, 0, 447, 444, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 47, 1, 0, 0, 0, 449, 450, 6, 24, -1, 0, 450, 451, 3, 50, 25, 0, 451, 452, 6, 24, -1, 0, 452, 460, 1, 0, 0, 0, 453, 454, 10, 2, 0, 0, 454, 455, 5, 37, 0, 0, 455, 456, 3, 50, 25, 0, 456, 457, 6, 24, -1, 0, 457, 459, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 459, 462, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 460, 461, 1, 0, 0, 0, 461, 49, 1, 0, 0, 0, 462, 460, 1, 0, 0, 0, 463, 464, 6, 25, -1, 0, 464, 465, 3, 52, 26, 0, 465, 466, 6, 25, -1, 0, 466, 480, 1, 0, 0, 0, 467, 468, 10, 2, 0, 0, 468, 473, 6, 25, -1, 0, 469, 470, 5, 24, 0, 0, 470, 474, 6, 25, -1, 0, 471, 472, 5, 25, 0, 0, 472, 474, 6, 25, -1, 0, 473, 469, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 477, 6, 25, -1, 0, 477, 479, 1, 0, 0, 0, 478, 467, 1, 0, 0, 0, 479, 482, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 51, 1, 0, 0, 0, 482, 480, 1, 0, 0, 0, 483, 484, 6, 26, -1, 0, 484, 485, 3, 54, 27, 0, 485, 486, 6, 26, -1, 0, 486, 504, 1, 0, 0, 0, 487, 488, 10, 2, 0, 0, 488, 497, 6, 26, -1, 0, 489, 490, 5, 28, 0, 0, 490, 498, 6, 26, -1, 0, 491, 492, 5, 29, 0, 0, 492, 498, 6, 26, -1, 0, 493, 494, 5, 26, 0, 0, 494, 498, 6, 26, -1, 0, 495, 496, 5, 27, 0, 0, 496, 498, 6, 26, -1, 0, 497, 489, 1, 0, 0, 0, 497, 491, 1, 0, 0, 0, 497, 493, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 500, 3, 54, 27, 0, 500, 501, 6, 26, -1, 0, 501, 503, 1, 0, 0, 0, 502, 487, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 53, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 507, 508, 6, 27, -1, 0, 508, 509, 3, 56, 28, 0, 509, 510, 6, 27, -1, 0, 510, 524, 1, 0, 0, 0, 511, 512, 10, 2, 0, 0, 512, 517, 6, 27, -1, 0, 513, 514, 5, 20, 0, 0, 514, 518, 6, 27, -1, 0, 515, 516, 5, 21, 0, 0, 516, 518, 6, 27, -1, 0, 517, 513, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 3, 56, 28, 0, 520, 521, 6, 27, -1, 0, 521, 523, 1, 0, 0, 0, 522, 511, 1, 0, 0, 0, 523, 526, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 55, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 527, 528, 6, 28, -1, 0, 528, 529, 3, 58, 29, 0, 529, 530, 6, 28, -1, 0, 530, 544, 1, 0, 0, 0, 531, 532, 10, 2, 0, 0, 532, 537, 6, 28, -1, 0, 533, 534, 5, 22, 0, 0, 534, 538, 6, 28, -1, 0, 535, 536, 5, 23, 0, 0, 536, 538, 6, 28, -1, 0, 537, 533, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 540, 3, 58, 29, 0, 540, 541, 6, 28, -1, 0, 541, 543, 1, 0, 0, 0, 542, 531, 1, 0, 0, 0, 543, 546, 1, 0, 0, 0, 544, 542, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 57, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 547, 556, 6, 29, -1, 0, 548, 549, 5, 32, 0, 0, 549, 557, 6, 29, -1, 0, 550, 551, 5, 21, 0, 0, 551, 557, 6, 29, -1, 0, 552, 553, 5, 33, 0, 0, 553, 557, 6, 29, -1, 0, 554, 555, 5, 34, 0, 0, 555, 557, 6, 29, -1, 0, 556, 548, 1, 0, 0, 0, 556, 550, 1, 0, 0, 0, 556, 552, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 6, 29, -1, 0, 560, 565, 1, 0, 0, 0, 561, 562, 3, 60, 30, 0, 562, 563, 6, 29, -1, 0, 563, 565, 1, 0, 0, 0, 564, 547, 1, 0, 0, 0, 564, 561, 1, 0, 0, 0, 565, 59, 1, 0, 0, 0, 566, 567, 6, 30, -1, 0, 567, 575, 3, 62, 31, 0, 568, 569, 5, 49, 0, 0, 569, 570, 3, 10, 5, 0, 570, 571, 6, 30, -1, 0, 571, 572, 5, 50, 0, 0, 572, 574, 1, 0, 0, 0, 573, 568, 1, 0, 0, 0, 574, 577, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 583, 1, 0, 0, 0, 577, 575, 1, 0, 0, 0, 578, 579, 3, 42, 21, 0, 579, 580, 6, 30, -1, 0, 580, 582, 1, 0, 0, 0, 581, 578, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 6, 30, -1, 0, 587, 61, 1, 0, 0, 0, 588, 589, 3, 66, 33, 0, 589, 590, 6, 31, -1, 0, 590, 619, 1, 0, 0, 0, 591, 592, 5, 62, 0, 0, 592, 619, 6, 31, -1, 0, 593, 594, 3, 64, 32, 0, 594, 595, 6, 31, -1, 0, 595, 619, 1, 0, 0, 0, 596, 597, 3, 36, 18, 0, 597, 598, 6, 31, -1, 0, 598, 619, 1, 0, 0, 0, 599, 600, 3, 38, 19, 0, 600, 601, 6, 31, -1, 0, 601, 619, 1, 0, 0, 0, 602, 603, 3, 34, 17, 0, 603, 604, 6, 31, -1, 0, 604, 619, 1, 0, 0, 0, 605, 606, 3, 32, 16, 0, 606, 607, 6, 31, -1, 0, 607, 619, 1, 0, 0, 0, 608, 609, 3, 20, 10, 0, 609, 610, 6, 31, -1, 0, 610, 619, 1, 0, 0, 0, 611, 615, 5, 49, 0, 0, 612, 613, 3, 48, 24, 0, 613, 614, 6, 31, -1, 0, 614, 616, 1, 0, 0, 0, 615, 612, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 619, 5, 50, 0, 0, 618, 588, 1, 0, 0, 0, 618, 591, 1, 0, 0, 0, 618, 593, 1, 0, 0, 0, 618, 596, 1, 0, 0, 0, 618, 599, 1, 0, 0, 0, 618, 602, 1, 0, 0, 0, 618, 605, 1, 0, 0, 0, 618, 608, 1, 0, 0, 0, 618, 611, 1, 0, 0, 0, 619, 63, 1, 0, 0, 0, 620, 621, 5, 42, 0, 0, 621, 622, 3, 4, 2, 0, 622, 623, 5, 53, 0, 0, 623, 624, 3, 46, 23, 0, 624, 625, 5, 54, 0, 0, 625, 626, 3, 10, 5, 0, 626, 627, 6, 32, -1, 0, 627, 65, 1, 0, 0, 0, 628, 629, 3, 70, 35, 0, 629, 630, 6, 33, -1, 0, 630, 644, 1, 0, 0, 0, 631, 632, 5, 63, 0, 0, 632, 644, 6, 33, -1, 0, 633, 634, 5, 60, 0, 0, 634, 644, 6, 33, -1, 0, 635, 636, 5, 61, 0, 0, 636, 644, 6, 33, -1, 0, 637, 638, 3, 68, 34, 0, 638, 639, 6, 33, -1, 0, 639, 644, 1, 0, 0, 0, 640, 641, 3, 72, 36, 0, 641, 642, 6, 33, -1, 0, 642, 644, 1, 0, 0, 0, 643, 628, 1, 0, 0, 0, 643, 631, 1, 0, 0, 0, 643, 633, 1, 0, 0, 0, 643, 635, 1, 0, 0, 0, 643, 637, 1, 0, 0, 0, 643, 640, 1, 0, 0, 0, 644, 67, 1, 0, 0, 0, 645, 646, 5, 51, 0, 0, 646, 647, 3, 10, 5, 0, 647, 648, 5, 52, 0, 0, 648, 649, 6, 34, -1, 0, 649, 69, 1, 0, 0, 0, 650, 651, 5, 38, 0, 0, 651, 655, 6, 35, -1, 0, 652, 653, 5, 39, 0, 0, 653, 655, 6, 35, -1, 0, 654, 650, 1, 0, 0, 0, 654, 652, 1, 0, 0, 0, 655, 71, 1, 0, 0, 0, 656, 657, 5, 11, 0, 0, 657, 658, 5, 49, 0, 0, 658, 659, 5, 58, 0, 0, 659, 660, 5, 62, 0, 0, 660, 661, 5, 50, 0, 0, 661, 662, 6, 36, -1, 0, 662, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 433, 441, 447, 460, 473, 480, 497, 504, 517, 524, 537, 544, 556, 564, 575, 583, 615, 618, 643, 654] \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraft.tokens b/Phase2Template/gen/main/grammer/FunctionCraft.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraft.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java b/Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java new file mode 100644 index 0000000..5151a9b --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java @@ -0,0 +1,484 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link FunctionCraftListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseListener implements FunctionCraftListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java b/Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java new file mode 100644 index 0000000..d33a9a1 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java @@ -0,0 +1,274 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link FunctionCraftVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseVisitor extends AbstractParseTreeVisitor implements FunctionCraftVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProgram(FunctionCraftParser.ProgramContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMain(FunctionCraftParser.MainContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIfStatement(FunctionCraftParser.IfStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCondition(FunctionCraftParser.ConditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLenStatement(FunctionCraftParser.LenStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPushStatement(FunctionCraftParser.PushStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitForStatement(FunctionCraftParser.ForStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRange(FunctionCraftParser.RangeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAssignment(FunctionCraftParser.AssignmentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAccessList(FunctionCraftParser.AccessListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStatement(FunctionCraftParser.StatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBody(FunctionCraftParser.BodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpression(FunctionCraftParser.ExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValues(FunctionCraftParser.ValuesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitListValue(FunctionCraftParser.ListValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBoolValue(FunctionCraftParser.BoolValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftListener.java b/Phase2Template/gen/main/grammer/FunctionCraftListener.java new file mode 100644 index 0000000..f84cf2b --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftListener.java @@ -0,0 +1,380 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link FunctionCraftParser}. + */ +public interface FunctionCraftListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void enterProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void exitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void enterMain(FunctionCraftParser.MainContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void exitMain(FunctionCraftParser.MainContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void enterIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void exitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void enterCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void exitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void enterLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void exitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void enterPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void exitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void enterForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void exitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void enterRange(FunctionCraftParser.RangeContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void exitRange(FunctionCraftParser.RangeContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + */ + void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + */ + void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void enterAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void exitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void enterAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void exitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void enterStatement(FunctionCraftParser.StatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void exitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void enterBody(FunctionCraftParser.BodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void exitBody(FunctionCraftParser.BodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void enterExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void exitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void enterValues(FunctionCraftParser.ValuesContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void exitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void enterListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void exitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void enterBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void exitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftParser.java b/Phase2Template/gen/main/grammer/FunctionCraftParser.java new file mode 100644 index 0000000..e459f4f --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftParser.java @@ -0,0 +1,4354 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class FunctionCraftParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static final int + RULE_program = 0, RULE_functionDeclaration = 1, RULE_functionArgumentsDeclaration = 2, + RULE_patternMatching = 3, RULE_main = 4, RULE_functionArguments = 5, RULE_returnStatement = 6, + RULE_ifStatement = 7, RULE_condition = 8, RULE_putsStatement = 9, RULE_lenStatement = 10, + RULE_pushStatement = 11, RULE_loopDoStatement = 12, RULE_loopBody = 13, + RULE_forStatement = 14, RULE_range = 15, RULE_filterStatement = 16, RULE_matchPatternStatement = 17, + RULE_chopStatement = 18, RULE_chompStatement = 19, RULE_assignment = 20, + RULE_accessList = 21, RULE_statement = 22, RULE_body = 23, RULE_expression = 24, + RULE_eqaulityExpression = 25, RULE_relationalExpression = 26, RULE_additiveExpression = 27, + RULE_multiplicativeExpression = 28, RULE_preUnaryExpression = 29, RULE_accessExpression = 30, + RULE_otherExpression = 31, RULE_lambdaFunction = 32, RULE_values = 33, + RULE_listValue = 34, RULE_boolValue = 35, RULE_functionPointer = 36; + private static String[] makeRuleNames() { + return new String[] { + "program", "functionDeclaration", "functionArgumentsDeclaration", "patternMatching", + "main", "functionArguments", "returnStatement", "ifStatement", "condition", + "putsStatement", "lenStatement", "pushStatement", "loopDoStatement", + "loopBody", "forStatement", "range", "filterStatement", "matchPatternStatement", + "chopStatement", "chompStatement", "assignment", "accessList", "statement", + "body", "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", + "multiplicativeExpression", "preUnaryExpression", "accessExpression", + "otherExpression", "lambdaFunction", "values", "listValue", "boolValue", + "functionPointer" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public FunctionCraftParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ProgramContext extends ParserRuleContext { + public Program flProgram; + public FunctionDeclarationContext f; + public PatternMatchingContext p; + public MainContext m; + public MainContext main() { + return getRuleContext(MainContext.class,0); + } + public List functionDeclaration() { + return getRuleContexts(FunctionDeclarationContext.class); + } + public FunctionDeclarationContext functionDeclaration(int i) { + return getRuleContext(FunctionDeclarationContext.class,i); + } + public List patternMatching() { + return getRuleContexts(PatternMatchingContext.class); + } + public PatternMatchingContext patternMatching(int i) { + return getRuleContext(PatternMatchingContext.class,i); + } + public ProgramContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_program; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterProgram(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitProgram(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitProgram(this); + else return visitor.visitChildren(this); + } + } + + public final ProgramContext program() throws RecognitionException { + ProgramContext _localctx = new ProgramContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_program); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((ProgramContext)_localctx).flProgram = new Program(); + _localctx.flProgram.setLine(1); + + setState(83); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(81); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DEF: + { + setState(75); + ((ProgramContext)_localctx).f = functionDeclaration(); + _localctx.flProgram.addFunctionDeclaration(((ProgramContext)_localctx).f.functionDeclarationRet); + } + break; + case PATTERN: + { + setState(78); + ((ProgramContext)_localctx).p = patternMatching(); + _localctx.flProgram.addPatternDeclaration(((ProgramContext)_localctx).p.patternRet); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(85); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + } + setState(86); + ((ProgramContext)_localctx).m = main(); + _localctx.flProgram.setMain(((ProgramContext)_localctx).m.mainRet); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionDeclarationContext extends ParserRuleContext { + public FunctionDeclaration functionDeclarationRet; + public Token def; + public Token id; + public FunctionArgumentsDeclarationContext f; + public BodyContext b; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionDeclarationContext functionDeclaration() throws RecognitionException { + FunctionDeclarationContext _localctx = new FunctionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_functionDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + + ((FunctionDeclarationContext)_localctx).functionDeclarationRet = new FunctionDeclaration(); + + setState(90); + ((FunctionDeclarationContext)_localctx).def = match(DEF); + _localctx.functionDeclarationRet.setLine((((FunctionDeclarationContext)_localctx).def!=null?((FunctionDeclarationContext)_localctx).def.getLine():0)); + setState(92); + ((FunctionDeclarationContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getText():null)); + id_.setLine((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getLine():0)); + _localctx.functionDeclarationRet.setFunctionName(id_); + + setState(94); + ((FunctionDeclarationContext)_localctx).f = functionArgumentsDeclaration(); + _localctx.functionDeclarationRet.setArgs(((FunctionDeclarationContext)_localctx).f.argRet); + setState(96); + ((FunctionDeclarationContext)_localctx).b = body(); + _localctx.functionDeclarationRet.setBody(((FunctionDeclarationContext)_localctx).b.bodyRet); + setState(98); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsDeclarationContext extends ParserRuleContext { + public ArrayList argRet; + public Token id1; + public Token id2; + public Token id3; + public ExpressionContext e1; + public Token id4; + public ExpressionContext e2; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public FunctionArgumentsDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArgumentsDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArgumentsDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArgumentsDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArgumentsDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() throws RecognitionException { + FunctionArgumentsDeclarationContext _localctx = new FunctionArgumentsDeclarationContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_functionArgumentsDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((FunctionArgumentsDeclarationContext)_localctx).argRet = new ArrayList(); + + setState(101); + match(LPAR); + setState(135); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IDENTIFIER) { + { + setState(102); + ((FunctionArgumentsDeclarationContext)_localctx).id1 = match(IDENTIFIER); + + Identifier id_ = new Identifier(id1.text); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); + VarDeclaration = newVarDec(id_); + _localctx.argRet.add(newVarDec); + + setState(109); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(104); + match(COMMA); + setState(105); + ((FunctionArgumentsDeclarationContext)_localctx).id2 = match(IDENTIFIER); + + Identifier id_ = new Identifier(id2.text); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); + VarDeclaration = newVarDec(id_); + _localctx.argRet.add(newVarDec); + + } + } + } + setState(111); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + setState(133); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(112); + match(COMMA); + setState(113); + match(LBRACK); + setState(114); + ((FunctionArgumentsDeclarationContext)_localctx).id3 = match(IDENTIFIER); + + Identifier id_ = new Identifier(id3.text); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); + VarDeclaration = newVarDec(id_); + + setState(116); + match(ASSIGN); + setState(117); + ((FunctionArgumentsDeclarationContext)_localctx).e1 = expression(0); + + newVarDec.setDefaultVal(e1.expRet); + _localctx.argRet.add(newVarDec); + + setState(128); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(119); + match(COMMA); + setState(120); + ((FunctionArgumentsDeclarationContext)_localctx).id4 = match(IDENTIFIER); + + Identifier id_ = new Identifier(id4.text); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); + VarDeclaration = newVarDec(id_); + + setState(122); + match(ASSIGN); + setState(123); + ((FunctionArgumentsDeclarationContext)_localctx).e2 = expression(0); + + newVarDec.setDefaultVal(e2.expRet); + _localctx.argRet.add(newVarDec); + + } + } + setState(130); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(131); + match(RBRACK); + } + } + + } + } + + setState(137); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PatternMatchingContext extends ParserRuleContext { + public PatternDeclaration patternRet; + public Token pat; + public Token patternName; + public Token targetVar; + public ConditionContext c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PATTERN() { return getToken(FunctionCraftParser.PATTERN, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public List PATTERN_MATCHING_SEPARATOR() { return getTokens(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR); } + public TerminalNode PATTERN_MATCHING_SEPARATOR(int i) { + return getToken(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR, i); + } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PatternMatchingContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_patternMatching; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPatternMatching(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPatternMatching(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPatternMatching(this); + else return visitor.visitChildren(this); + } + } + + public final PatternMatchingContext patternMatching() throws RecognitionException { + PatternMatchingContext _localctx = new PatternMatchingContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_patternMatching); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(139); + ((PatternMatchingContext)_localctx).pat = match(PATTERN); + + int patternLine = (((PatternMatchingContext)_localctx).pat!=null?((PatternMatchingContext)_localctx).pat.getLine():0); + + setState(141); + ((PatternMatchingContext)_localctx).patternName = match(IDENTIFIER); + + Identifier patternNameId = new Identifier((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getText():null)); + patternNameId.setLine((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getLine():0)); + + setState(143); + match(LPAR); + setState(144); + ((PatternMatchingContext)_localctx).targetVar = match(IDENTIFIER); + + Identifier targetVariable = new Identifier((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getText():null)); + targetVariable.setLine((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getLine():0)); + ((PatternMatchingContext)_localctx).patternRet = new PatternDeclaration(patternNameId, targetVariable); + _localctx.patternRet.setLine(patternLine); + + setState(146); + match(RPAR); + setState(156); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PATTERN_MATCHING_SEPARATOR) { + { + { + setState(147); + match(PATTERN_MATCHING_SEPARATOR); + setState(148); + ((PatternMatchingContext)_localctx).c = condition(); + + _localctx.patternRet.setConditions(((PatternMatchingContext)_localctx).c.conditionRet); + + setState(150); + match(ASSIGN); + setState(151); + ((PatternMatchingContext)_localctx).e = expression(0); + + _localctx.patternRet.addReturnExp(((PatternMatchingContext)_localctx).e.expRet); + + } + } + setState(158); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(159); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MainContext extends ParserRuleContext { + public MainDeclaration mainRet; + public Token m; + public BodyContext b; + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode MAIN() { return getToken(FunctionCraftParser.MAIN, 0); } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public MainContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_main; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMain(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMain(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMain(this); + else return visitor.visitChildren(this); + } + } + + public final MainContext main() throws RecognitionException { + MainContext _localctx = new MainContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_main); + try { + enterOuterAlt(_localctx, 1); + { + + ((MainContext)_localctx).mainRet = new MainDeclaration(); + + setState(162); + match(DEF); + setState(163); + ((MainContext)_localctx).m = match(MAIN); + + _localctx.mainRet.setLine((((MainContext)_localctx).m!=null?((MainContext)_localctx).m.getLine():0)); + + setState(165); + match(LPAR); + setState(166); + match(RPAR); + setState(167); + ((MainContext)_localctx).b = body(); + _localctx.mainRet.setBody(((MainContext)_localctx).b.bodyRet); + setState(169); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsContext extends ParserRuleContext { + public ArrayList funcArgsRet; + public ExpressionContext e1; + public ExpressionContext e2; + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public FunctionArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArguments(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArguments(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsContext functionArguments() throws RecognitionException { + FunctionArgumentsContext _localctx = new FunctionArgumentsContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_functionArguments); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((FunctionArgumentsContext)_localctx).funcArgsRet = new ArrayList(); + + setState(183); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + case 1: + { + setState(172); + ((FunctionArgumentsContext)_localctx).e1 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e1.expRet); + + setState(180); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(174); + match(COMMA); + setState(175); + ((FunctionArgumentsContext)_localctx).e2 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e2.expRet); + + } + } + } + setState(182); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ReturnStatementContext extends ParserRuleContext { + public ReturnStatement returnStmtRet; + public ExpressionContext e; + public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterReturnStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitReturnStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitReturnStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_returnStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((ReturnStatementContext)_localctx).returnStmtRet = new ReturnStatement(); + + setState(186); + match(RETURN); + setState(190); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(187); + ((ReturnStatementContext)_localctx).e = expression(0); + _localctx.returnStmtRet.setReturnExp(e.expRet); + } + } + + setState(192); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IfStatementContext extends ParserRuleContext { + public IfStatement ifRet; + public Token if_; + public ConditionContext c1; + public BodyContext b; + public ConditionContext c2; + public BodyContext b1; + public BodyContext b2; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List body() { + return getRuleContexts(BodyContext.class); + } + public BodyContext body(int i) { + return getRuleContext(BodyContext.class,i); + } + public List ELSEIF() { return getTokens(FunctionCraftParser.ELSEIF); } + public TerminalNode ELSEIF(int i) { + return getToken(FunctionCraftParser.ELSEIF, i); + } + public TerminalNode ELSE() { return getToken(FunctionCraftParser.ELSE, 0); } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_ifStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((IfStatementContext)_localctx).ifRet = new IfStatement(); + + setState(195); + ((IfStatementContext)_localctx).if_ = match(IF); + + _localctx.ifRet.setLine((((IfStatementContext)_localctx).if!=null?((IfStatementContext)_localctx).if.getLine():0)); + + setState(197); + ((IfStatementContext)_localctx).c1 = condition(); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c1.conditionRet); + setState(199); + ((IfStatementContext)_localctx).b = body(); + _localctx.ifRet.setThenBody(((IfStatementContext)_localctx).b.bodyRet); + + ArrayList tempArray = new ArrayList(); + + setState(210); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ELSEIF) { + { + { + setState(202); + match(ELSEIF); + setState(203); + ((IfStatementContext)_localctx).c2 = condition(); + + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); + + setState(205); + ((IfStatementContext)_localctx).b1 = body(); + + tempArray.addAll(((IfStatementContext)_localctx).b1.bodyRet); + + } + } + setState(212); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(217); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(213); + match(ELSE); + setState(214); + ((IfStatementContext)_localctx).b2 = body(); + + tempArray.addAll(((IfStatementContext)_localctx).b2.bodyRet); + + } + } + + + _localctx.ifRet.setElseBody(tempArray); + + setState(220); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConditionContext extends ParserRuleContext { + public ArrayList conditionRet; + public ExpressionContext e; + public ConditionContext c; + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List AND() { return getTokens(FunctionCraftParser.AND); } + public TerminalNode AND(int i) { + return getToken(FunctionCraftParser.AND, i); + } + public List OR() { return getTokens(FunctionCraftParser.OR); } + public TerminalNode OR(int i) { + return getToken(FunctionCraftParser.OR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public ConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_condition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitCondition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitCondition(this); + else return visitor.visitChildren(this); + } + } + + public final ConditionContext condition() throws RecognitionException { + ConditionContext _localctx = new ConditionContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_condition); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((ConditionContext)_localctx).conditionRet = new ArrayList(); + + setState(243); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(223); + match(LPAR); + setState(224); + ((ConditionContext)_localctx).e = expression(0); + _localctx.conditionRet.add(((ConditionContext)_localctx).e.expRet); + setState(226); + match(RPAR); + setState(238); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(227); + _la = _input.LA(1); + if ( !(_la==AND || _la==OR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(229); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + case 1: + { + setState(228); + match(LPAR); + } + break; + } + setState(231); + ((ConditionContext)_localctx).c = condition(); + + _localctx.conditionRet.addAll(((ConditionContext)_localctx).c.conditionRet); + + setState(234); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + case 1: + { + setState(233); + match(RPAR); + } + break; + } + } + } + } + setState(240); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + } + } + } + } + setState(245); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PutsStatementContext extends ParserRuleContext { + public PutStatement putRet; + public Token p; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUTS() { return getToken(FunctionCraftParser.PUTS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public PutsStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_putsStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPutsStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPutsStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPutsStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PutsStatementContext putsStatement() throws RecognitionException { + PutsStatementContext _localctx = new PutsStatementContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_putsStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(246); + ((PutsStatementContext)_localctx).p = match(PUTS); + setState(247); + match(LPAR); + setState(248); + ((PutsStatementContext)_localctx).e = expression(0); + + ((PutsStatementContext)_localctx).putRet = new PutStatement(((PutsStatementContext)_localctx).e.expRet); + _localctx.putRet.setLine((((PutsStatementContext)_localctx).p!=null?((PutsStatementContext)_localctx).p.getLine():0)); + + setState(250); + match(RPAR); + setState(251); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LenStatementContext extends ParserRuleContext { + public LenStatement lenRet; + public Token l; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode LEN() { return getToken(FunctionCraftParser.LEN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public LenStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lenStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLenStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLenStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLenStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LenStatementContext lenStatement() throws RecognitionException { + LenStatementContext _localctx = new LenStatementContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_lenStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(253); + ((LenStatementContext)_localctx).l = match(LEN); + setState(254); + match(LPAR); + setState(255); + ((LenStatementContext)_localctx).e = expression(0); + + ((LenStatementContext)_localctx).lenRet = new LenStatement(((LenStatementContext)_localctx).e.expRet); + _localctx.lenRet.setLine((((LenStatementContext)_localctx).l!=null?((LenStatementContext)_localctx).l.getLine():0)); + + setState(257); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PushStatementContext extends ParserRuleContext { + public PushStatement pushRet; + public Token p; + public ExpressionContext e1; + public ExpressionContext e2; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COMMA() { return getToken(FunctionCraftParser.COMMA, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUSH() { return getToken(FunctionCraftParser.PUSH, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PushStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pushStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPushStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPushStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPushStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PushStatementContext pushStatement() throws RecognitionException { + PushStatementContext _localctx = new PushStatementContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_pushStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(259); + ((PushStatementContext)_localctx).p = match(PUSH); + setState(260); + match(LPAR); + setState(261); + ((PushStatementContext)_localctx).e1 = expression(0); + setState(262); + match(COMMA); + setState(263); + ((PushStatementContext)_localctx).e2 = expression(0); + setState(264); + match(RPAR); + setState(265); + match(SEMICOLLON); + + ((PushStatementContext)_localctx).pushRet = new PushStatement(((PushStatementContext)_localctx).e1.expRet, ((PushStatementContext)_localctx).e2.expRet); + _localctx.pushRet.setLine((((PushStatementContext)_localctx).p!=null?((PushStatementContext)_localctx).p.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopDoStatementContext extends ParserRuleContext { + public LoopDoStatement loopDoRet; + public Token l1; + public LoopBodyContext l2; + public TerminalNode DO() { return getToken(FunctionCraftParser.DO, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode LOOP() { return getToken(FunctionCraftParser.LOOP, 0); } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public LoopDoStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopDoStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopDoStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopDoStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopDoStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoopDoStatementContext loopDoStatement() throws RecognitionException { + LoopDoStatementContext _localctx = new LoopDoStatementContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_loopDoStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(268); + ((LoopDoStatementContext)_localctx).l1 = match(LOOP); + setState(269); + match(DO); + setState(270); + ((LoopDoStatementContext)_localctx).l2 = loopBody(); + + ((LoopDoStatementContext)_localctx).loopDoRet = new LoopDoStatement(l2.loopStmts, l2.loopExps, l2.loopRetStmt); + _localctx.loopDoRet.setLine((((LoopDoStatementContext)_localctx).l1!=null?((LoopDoStatementContext)_localctx).l1.getLine():0)); + + setState(272); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopBodyContext extends ParserRuleContext { + public ArrayList loopStmts; + public ArrayList loopExps; + public ReturnStatement loopRetStmt; + public StatementContext s; + public ConditionContext c1; + public ConditionContext c2; + public ReturnStatementContext r; + public List BREAK() { return getTokens(FunctionCraftParser.BREAK); } + public TerminalNode BREAK(int i) { + return getToken(FunctionCraftParser.BREAK, i); + } + public List SEMICOLLON() { return getTokens(FunctionCraftParser.SEMICOLLON); } + public TerminalNode SEMICOLLON(int i) { + return getToken(FunctionCraftParser.SEMICOLLON, i); + } + public List NEXT() { return getTokens(FunctionCraftParser.NEXT); } + public TerminalNode NEXT(int i) { + return getToken(FunctionCraftParser.NEXT, i); + } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public List IF() { return getTokens(FunctionCraftParser.IF); } + public TerminalNode IF(int i) { + return getToken(FunctionCraftParser.IF, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public LoopBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopBody(this); + else return visitor.visitChildren(this); + } + } + + public final LoopBodyContext loopBody() throws RecognitionException { + LoopBodyContext _localctx = new LoopBodyContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_loopBody); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((LoopBodyContext)_localctx).loopStmts = new ArrayList(); + ((LoopBodyContext)_localctx).loopExps = new ArrayList(); + ((LoopBodyContext)_localctx).loopRetStmt = new ReturnStatement(); + + setState(296); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { + { + setState(294); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PUTS: + case PUSH: + case LEN: + case IF: + case METHOD: + case LOOP: + case FOR: + case CHOP: + case CHOMP: + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + { + setState(275); + ((LoopBodyContext)_localctx).s = statement(); + _localctx.loopStmts.add(((LoopBodyContext)_localctx).s.stmtRet); + } + break; + case BREAK: + { + setState(278); + match(BREAK); + setState(283); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(279); + match(IF); + setState(280); + ((LoopBodyContext)_localctx).c1 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c1.conditionRet); + } + } + + setState(285); + match(SEMICOLLON); + } + break; + case NEXT: + { + setState(286); + match(NEXT); + setState(291); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(287); + match(IF); + setState(288); + ((LoopBodyContext)_localctx).c2 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c2.conditionRet); + } + } + + setState(293); + match(SEMICOLLON); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(298); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(302); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(299); + ((LoopBodyContext)_localctx).r = returnStatement(); + ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet; + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForStatementContext extends ParserRuleContext { + public ForStatement forStRet; + public Token f; + public Token id; + public RangeContext r; + public LoopBodyContext l; + public TerminalNode IN() { return getToken(FunctionCraftParser.IN, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode FOR() { return getToken(FunctionCraftParser.FOR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public ForStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterForStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitForStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitForStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ForStatementContext forStatement() throws RecognitionException { + ForStatementContext _localctx = new ForStatementContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_forStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(304); + ((ForStatementContext)_localctx).f = match(FOR); + setState(305); + ((ForStatementContext)_localctx).id = match(IDENTIFIER); + setState(306); + match(IN); + setState(307); + ((ForStatementContext)_localctx).r = range(); + setState(308); + ((ForStatementContext)_localctx).l = loopBody(); + setState(309); + match(END); + + ((ForStatementContext)_localctx).forStRet = new ForStatement(new Identifier((((ForStatementContext)_localctx).id!=null?((ForStatementContext)_localctx).id.getText():null)), + ((ForStatementContext)_localctx).r.rangeRet, ((ForStatementContext)_localctx).l.loopExps, ((ForStatementContext)_localctx).l.loopStmts, + ((ForStatementContext)_localctx).l.loopRetStmt); + _localctx.forStRet.setLine((((ForStatementContext)_localctx).f!=null?((ForStatementContext)_localctx).f.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RangeContext extends ParserRuleContext { + public ArrayList rangeRet; + public ExpressionContext e1; + public ExpressionContext e2; + public ExpressionContext e3; + public ExpressionContext e4; + public Token id; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode DOUBLEDOT() { return getToken(FunctionCraftParser.DOUBLEDOT, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_range; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRange(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRange(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRange(this); + else return visitor.visitChildren(this); + } + } + + public final RangeContext range() throws RecognitionException { + RangeContext _localctx = new RangeContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_range); + int _la; + try { + setState(337); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAR: + enterOuterAlt(_localctx, 1); + { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + + { + setState(313); + match(LPAR); + setState(314); + ((RangeContext)_localctx).e1 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e1.expRet); + + setState(316); + match(DOUBLEDOT); + setState(317); + ((RangeContext)_localctx).e2 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e2.expRet); + + setState(319); + match(RPAR); + } + } + break; + case LBRACK: + enterOuterAlt(_localctx, 2); + { + { + setState(321); + match(LBRACK); + { + setState(322); + ((RangeContext)_localctx).e3 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e3.expRet); + + setState(330); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(324); + match(COMMA); + setState(325); + ((RangeContext)_localctx).e4 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e4.expRet); + + } + } + setState(332); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + setState(333); + match(RBRACK); + } + } + break; + case IDENTIFIER: + enterOuterAlt(_localctx, 3); + { + setState(335); + ((RangeContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getText():null)); + _localctx.rangeRet.add(id_); + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FilterStatementContext extends ParserRuleContext { + public FilterStatement filterStatementRet; + public Token brack; + public ExpressionContext e1; + public Token id; + public RangeContext r; + public ExpressionContext e2; + public ExpressionContext e3; + public TerminalNode SEPARATOR() { return getToken(FunctionCraftParser.SEPARATOR, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public FilterStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_filterStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFilterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFilterStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFilterStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FilterStatementContext filterStatement() throws RecognitionException { + FilterStatementContext _localctx = new FilterStatementContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_filterStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ArrayList conditionExps = new ArrayList(); + + setState(340); + ((FilterStatementContext)_localctx).brack = match(LBRACK); + setState(341); + ((FilterStatementContext)_localctx).e1 = expression(0); + setState(342); + match(SEPARATOR); + setState(343); + ((FilterStatementContext)_localctx).id = match(IDENTIFIER); + setState(344); + match(ARROW); + setState(345); + ((FilterStatementContext)_localctx).r = range(); + setState(346); + match(COMMA); + setState(347); + ((FilterStatementContext)_localctx).e2 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e2.expRet); + + setState(355); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(349); + match(COMMA); + setState(350); + ((FilterStatementContext)_localctx).e3 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e3.expRet); + + } + } + setState(357); + _errHandler.sync(this); + _la = _input.LA(1); + } + + Identifier id_ = new Identifier((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getText():null)); + id_.setLine((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getLine():0)); + ((FilterStatementContext)_localctx).filterStatementRet = new FilterStatement(id_, ((FilterStatementContext)_localctx).e1.expRet, + conditionExps, ((FilterStatementContext)_localctx).r.rangeRet); + _localctx.filterStatementRet.setLine((((FilterStatementContext)_localctx).brack!=null?((FilterStatementContext)_localctx).brack.getLine():0)); + + setState(359); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MatchPatternStatementContext extends ParserRuleContext { + public MatchPatternStatement matchPatRet; + public Token id; + public Token m; + public ExpressionContext e; + public TerminalNode DOT() { return getToken(FunctionCraftParser.DOT, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode MATCH() { return getToken(FunctionCraftParser.MATCH, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public MatchPatternStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_matchPatternStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMatchPatternStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMatchPatternStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMatchPatternStatement(this); + else return visitor.visitChildren(this); + } + } + + public final MatchPatternStatementContext matchPatternStatement() throws RecognitionException { + MatchPatternStatementContext _localctx = new MatchPatternStatementContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_matchPatternStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(361); + ((MatchPatternStatementContext)_localctx).id = match(IDENTIFIER); + setState(362); + match(DOT); + setState(363); + ((MatchPatternStatementContext)_localctx).m = match(MATCH); + setState(364); + match(LPAR); + setState(365); + ((MatchPatternStatementContext)_localctx).e = expression(0); + setState(366); + match(RPAR); + + Identifier id_ = new Identifier((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getText():null)); + ((MatchPatternStatementContext)_localctx).matchPatRet = new MatchPatternStatement(id_, ((MatchPatternStatementContext)_localctx).e.expRet); + _localctx.matchPatRet.setLine((((MatchPatternStatementContext)_localctx).m!=null?((MatchPatternStatementContext)_localctx).m.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChopStatementContext extends ParserRuleContext { + public ChopStatement chopRet; + public Token c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOP() { return getToken(FunctionCraftParser.CHOP, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ChopStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chopStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChopStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChopStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChopStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChopStatementContext chopStatement() throws RecognitionException { + ChopStatementContext _localctx = new ChopStatementContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_chopStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(369); + ((ChopStatementContext)_localctx).c = match(CHOP); + setState(370); + match(LPAR); + setState(371); + ((ChopStatementContext)_localctx).e = expression(0); + setState(372); + match(RPAR); + + ((ChopStatementContext)_localctx).chopRet = new ChopStatement(((ChopStatementContext)_localctx).e.expRet); + _localctx.chopRet.setLine((((ChopStatementContext)_localctx).c!=null?((ChopStatementContext)_localctx).c.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChompStatementContext extends ParserRuleContext { + public ChompStatement chompRet; + public Token c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOMP() { return getToken(FunctionCraftParser.CHOMP, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ChompStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chompStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChompStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChompStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChompStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChompStatementContext chompStatement() throws RecognitionException { + ChompStatementContext _localctx = new ChompStatementContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_chompStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(375); + ((ChompStatementContext)_localctx).c = match(CHOMP); + setState(376); + match(LPAR); + setState(377); + ((ChompStatementContext)_localctx).e = expression(0); + setState(378); + match(RPAR); + + ((ChompStatementContext)_localctx).chompRet = new ChompStatement(((ChompStatementContext)_localctx).e.expRet); + _localctx.chompRet.setLine((((ChompStatementContext)_localctx).c!=null?((ChompStatementContext)_localctx).c.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignmentContext extends ParserRuleContext { + public AssignStatement assignRet; + public Token id; + public AccessListContext a; + public Token as; + public Token pl; + public Token mi; + public Token di; + public Token mu; + public Token mo; + public ExpressionContext e; + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } + public TerminalNode PLUS_ASSIGN() { return getToken(FunctionCraftParser.PLUS_ASSIGN, 0); } + public TerminalNode MINUS_ASSIGN() { return getToken(FunctionCraftParser.MINUS_ASSIGN, 0); } + public TerminalNode DIVIDE_ASSIGN() { return getToken(FunctionCraftParser.DIVIDE_ASSIGN, 0); } + public TerminalNode MULT_ASSIGN() { return getToken(FunctionCraftParser.MULT_ASSIGN, 0); } + public TerminalNode MOD_ASSIGN() { return getToken(FunctionCraftParser.MOD_ASSIGN, 0); } + public AccessListContext accessList() { + return getRuleContext(AccessListContext.class,0); + } + public AssignmentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAssignment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAssignment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAssignment(this); + else return visitor.visitChildren(this); + } + } + + public final AssignmentContext assignment() throws RecognitionException { + AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_assignment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + boolean access = false; + int line; + AssignOperator op; + + setState(382); + ((AssignmentContext)_localctx).id = match(IDENTIFIER); + setState(386); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LBRACK) { + { + setState(383); + ((AssignmentContext)_localctx).a = accessList(); + access = true; + } + } + + setState(400); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ASSIGN: + { + setState(388); + ((AssignmentContext)_localctx).as = match(ASSIGN); + op = AssignOperator.ASSIGN;line = (((AssignmentContext)_localctx).as!=null?((AssignmentContext)_localctx).as.getLine():0); + } + break; + case PLUS_ASSIGN: + { + setState(390); + ((AssignmentContext)_localctx).pl = match(PLUS_ASSIGN); + op = AssignOperator.PLUS_ASSIGN;line = (((AssignmentContext)_localctx).pl!=null?((AssignmentContext)_localctx).pl.getLine():0); + } + break; + case MINUS_ASSIGN: + { + setState(392); + ((AssignmentContext)_localctx).mi = match(MINUS_ASSIGN); + op = AssignOperator.MINUS_ASSIGN;line = (((AssignmentContext)_localctx).mi!=null?((AssignmentContext)_localctx).mi.getLine():0); + } + break; + case DIVIDE_ASSIGN: + { + setState(394); + ((AssignmentContext)_localctx).di = match(DIVIDE_ASSIGN); + op = AssignOperator.DIVIDE_ASSIGN;line = (((AssignmentContext)_localctx).di!=null?((AssignmentContext)_localctx).di.getLine():0); + } + break; + case MULT_ASSIGN: + { + setState(396); + ((AssignmentContext)_localctx).mu = match(MULT_ASSIGN); + op = AssignOperator.MULT_ASSIGN;line = (((AssignmentContext)_localctx).mu!=null?((AssignmentContext)_localctx).mu.getLine():0); + } + break; + case MOD_ASSIGN: + { + setState(398); + ((AssignmentContext)_localctx).mo = match(MOD_ASSIGN); + op = AssignOperator.MOD_ASSIGN;line = (((AssignmentContext)_localctx).mo!=null?((AssignmentContext)_localctx).mo.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(402); + ((AssignmentContext)_localctx).e = expression(0); + setState(403); + match(SEMICOLLON); + + Identifier id_ = new Identifier((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getText():null)); + id_.setLine((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getLine():0)); + ((AssignmentContext)_localctx).assignRet = new AssignStatement(access, id_, ((AssignmentContext)_localctx).e.expRet, op); + if(access){ + _localctx.assignRet.setAccessListExpression(((AssignmentContext)_localctx).a.accessListExp); + } + _localctx.assignRet.setLine(line); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessListContext extends ParserRuleContext { + public Expression accessListExp; + public ExpressionContext e; + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AccessListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessList(this); + else return visitor.visitChildren(this); + } + } + + public final AccessListContext accessList() throws RecognitionException { + AccessListContext _localctx = new AccessListContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_accessList); + try { + enterOuterAlt(_localctx, 1); + { + setState(406); + match(LBRACK); + setState(407); + ((AccessListContext)_localctx).e = expression(0); + ((AccessListContext)_localctx).accessListExp = ((AccessListContext)_localctx).e.expRet; + setState(409); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementContext extends ParserRuleContext { + public Statement stmtRet; + public IfStatementContext if_; + public LoopDoStatementContext loop; + public ForStatementContext for_; + public PutsStatementContext puts; + public PushStatementContext push; + public ExpressionContext e; + public AssignmentContext as; + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public LoopDoStatementContext loopDoStatement() { + return getRuleContext(LoopDoStatementContext.class,0); + } + public ForStatementContext forStatement() { + return getRuleContext(ForStatementContext.class,0); + } + public PutsStatementContext putsStatement() { + return getRuleContext(PutsStatementContext.class,0); + } + public PushStatementContext pushStatement() { + return getRuleContext(PushStatementContext.class,0); + } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AssignmentContext assignment() { + return getRuleContext(AssignmentContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitStatement(this); + else return visitor.visitChildren(this); + } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_statement); + try { + setState(433); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(411); + ((StatementContext)_localctx).if_ = ifStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).if.ifRet; + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(414); + ((StatementContext)_localctx).loop = loopDoStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).loop.loopDoRet; + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(417); + ((StatementContext)_localctx).for_ = forStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).for.forStRet; + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(420); + ((StatementContext)_localctx).puts = putsStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).puts.putRet; + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(423); + ((StatementContext)_localctx).push = pushStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).push.pushRet; + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(426); + ((StatementContext)_localctx).e = expression(0); + + ExpressionStatement expStmt = new ExpressionStatement(((StatementContext)_localctx).e.expRet); + ((StatementContext)_localctx).stmtRet = expStmt; + _localctx.stmtRet.setLine(((StatementContext)_localctx).e.expRet.getLine()); + + setState(428); + match(SEMICOLLON); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(430); + ((StatementContext)_localctx).as = assignment(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).as.assignRet; + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BodyContext extends ParserRuleContext { + public ArrayList bodyRet; + public StatementContext s; + public ReturnStatementContext r; + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public BodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_body; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBody(this); + else return visitor.visitChildren(this); + } + } + + public final BodyContext body() throws RecognitionException { + BodyContext _localctx = new BodyContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_body); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((BodyContext)_localctx).bodyRet = new ArrayList(); + + setState(441); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { + { + { + setState(436); + ((BodyContext)_localctx).s = statement(); + _localctx.bodyRet.add(((BodyContext)_localctx).s.stmtRet); + } + } + setState(443); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(447); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(444); + ((BodyContext)_localctx).r = returnStatement(); + _localctx.bodyRet.add(((BodyContext)_localctx).r.returnStmtRet); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends ParserRuleContext { + public Expression expRet; + public ExpressionContext e1; + public EqaulityExpressionContext e3; + public Token a; + public EqaulityExpressionContext e2; + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode APPEND() { return getToken(FunctionCraftParser.APPEND, 0); } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitExpression(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_expression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(450); + ((ExpressionContext)_localctx).e3 = eqaulityExpression(0); + ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; + } + _ctx.stop = _input.LT(-1); + setState(460); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.e1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(453); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(454); + ((ExpressionContext)_localctx).a = match(APPEND); + setState(455); + ((ExpressionContext)_localctx).e2 = eqaulityExpression(0); + + if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ + ((ExpressionContext)_localctx).expRet = new AppendExpression(((ExpressionContext)_localctx).e1.expRet); + _localctx.expRet.setLine((((ExpressionContext)_localctx).a!=null?((ExpressionContext)_localctx).a.getLine():0)); + } + else{ + ((ExpressionContext)_localctx).e1.expRet.addAppendedExpression(((ExpressionContext)_localctx).e2.expRet) + ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e1.expRet; + } + + } + } + } + setState(462); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EqaulityExpressionContext extends ParserRuleContext { + public Expression expRet; + public EqaulityExpressionContext e1; + public RelationalExpressionContext r2; + public Token op1; + public Token op2; + public RelationalExpressionContext r1; + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public TerminalNode EQUAL() { return getToken(FunctionCraftParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(FunctionCraftParser.NOT_EQUAL, 0); } + public EqaulityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_eqaulityExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterEqaulityExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitEqaulityExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitEqaulityExpression(this); + else return visitor.visitChildren(this); + } + } + + public final EqaulityExpressionContext eqaulityExpression() throws RecognitionException { + return eqaulityExpression(0); + } + + private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, _parentState); + EqaulityExpressionContext _prevctx = _localctx; + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_eqaulityExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(464); + ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; + } + _ctx.stop = _input.LT(-1); + setState(480); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new EqaulityExpressionContext(_parentctx, _parentState); + _localctx.e1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_eqaulityExpression); + setState(467); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + + setState(473); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL: + { + setState(469); + ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); + op = BinaryOperator.EQUAL; + } + break; + case NOT_EQUAL: + { + setState(471); + ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); + op = BinaryOperator.NOT_EQUAL; + } + break; + default: + throw new NoViableAltException(this); + } + setState(475); + ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op); + } + } + } + setState(482); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelationalExpressionContext extends ParserRuleContext { + public Expression expRet; + public RelationalExpressionContext r1; + public AdditiveExpressionContext a2; + public Token op; + public AdditiveExpressionContext a1; + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } + public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } + public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } + public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relationalExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRelationalExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRelationalExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRelationalExpression(this); + else return visitor.visitChildren(this); + } + } + + public final RelationalExpressionContext relationalExpression() throws RecognitionException { + return relationalExpression(0); + } + + private RelationalExpressionContext relationalExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); + RelationalExpressionContext _prevctx = _localctx; + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_relationalExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(484); + ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; + } + _ctx.stop = _input.LT(-1); + setState(504); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new RelationalExpressionContext(_parentctx, _parentState); + _localctx.r1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); + setState(487); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + + setState(497); + _errHandler.sync(this); + switch (_input.LA(1)) { + case GREATER_THAN: + { + setState(489); + ((RelationalExpressionContext)_localctx).op = match(GREATER_THAN); + op = BinaryOperator.GREATER_THAN; + } + break; + case LESS_THAN: + { + setState(491); + match(LESS_THAN); + op = BinaryOperator.LESS_THAN; + } + break; + case LESS_EQUAL_THAN: + { + setState(493); + match(LESS_EQUAL_THAN); + op = BinaryOperator.LESS_EQUAL_THAN; + } + break; + case GREATER_EQUAL_THAN: + { + setState(495); + match(GREATER_EQUAL_THAN); + op = BinaryOperator.GREATER_EQUAL_THAN; + } + break; + default: + throw new NoViableAltException(this); + } + setState(499); + ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op); + } + } + } + setState(506); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AdditiveExpressionContext extends ParserRuleContext { + public Expression expRet; + public AdditiveExpressionContext a1; + public MultiplicativeExpressionContext m2; + public MultiplicativeExpressionContext m1; + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public TerminalNode PLUS() { return getToken(FunctionCraftParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAdditiveExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAdditiveExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAdditiveExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + return additiveExpression(0); + } + + private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); + AdditiveExpressionContext _prevctx = _localctx; + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_additiveExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(508); + ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); + + ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; + + } + _ctx.stop = _input.LT(-1); + setState(524); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new AdditiveExpressionContext(_parentctx, _parentState); + _localctx.a1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); + setState(511); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + + setState(517); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PLUS: + { + setState(513); + match(PLUS); + op = BinaryOperator.PLUS; + } + break; + case MINUS: + { + setState(515); + match(MINUS); + op = BinaryOperator.MINUS; + } + break; + default: + throw new NoViableAltException(this); + } + setState(519); + ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); + ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op); + } + } + } + setState(526); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiplicativeExpressionContext extends ParserRuleContext { + public Expression expRet; + public MultiplicativeExpressionContext m1; + public PreUnaryExpressionContext p2; + public PreUnaryExpressionContext p1; + public PreUnaryExpressionContext preUnaryExpression() { + return getRuleContext(PreUnaryExpressionContext.class,0); + } + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public TerminalNode MULT() { return getToken(FunctionCraftParser.MULT, 0); } + public TerminalNode DIVIDE() { return getToken(FunctionCraftParser.DIVIDE, 0); } + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMultiplicativeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMultiplicativeExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMultiplicativeExpression(this); + else return visitor.visitChildren(this); + } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + return multiplicativeExpression(0); + } + + private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); + MultiplicativeExpressionContext _prevctx = _localctx; + int _startState = 56; + enterRecursionRule(_localctx, 56, RULE_multiplicativeExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(528); + ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; + } + _ctx.stop = _input.LT(-1); + setState(544); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); + _localctx.m1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); + setState(531); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + + setState(537); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MULT: + { + setState(533); + match(MULT); + op = BinaryOperator.MULT; + } + break; + case DIVIDE: + { + setState(535); + match(DIVIDE); + op = BinaryOperator.DIVIDE; + } + break; + default: + throw new NoViableAltException(this); + } + setState(539); + ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op); + } + } + } + setState(546); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PreUnaryExpressionContext extends ParserRuleContext { + public Expression expRet; + public AccessExpressionContext a1; + public AccessExpressionContext a2; + public AccessExpressionContext accessExpression() { + return getRuleContext(AccessExpressionContext.class,0); + } + public TerminalNode NOT() { return getToken(FunctionCraftParser.NOT, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public TerminalNode INCREMENT() { return getToken(FunctionCraftParser.INCREMENT, 0); } + public TerminalNode DECREMENT() { return getToken(FunctionCraftParser.DECREMENT, 0); } + public PreUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_preUnaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPreUnaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPreUnaryExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPreUnaryExpression(this); + else return visitor.visitChildren(this); + } + } + + public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionException { + PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_preUnaryExpression); + try { + setState(564); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + enterOuterAlt(_localctx, 1); + { + + UnaryOperator op; + + setState(556); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NOT: + { + setState(548); + match(NOT); + op = UnaryOperator.NOT; + } + break; + case MINUS: + { + setState(550); + match(MINUS); + op = UnaryOperator.MINUS; + } + break; + case INCREMENT: + { + setState(552); + match(INCREMENT); + op = UnaryOperator.INC; + } + break; + case DECREMENT: + { + setState(554); + match(DECREMENT); + op = UnaryOperator.DEC; + } + break; + default: + throw new NoViableAltException(this); + } + setState(558); + ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op); + } + break; + case LEN: + case METHOD: + case CHOP: + case CHOMP: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(561); + ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessExpressionContext extends ParserRuleContext { + public Expression expRet; + public OtherExpressionContext o; + public FunctionArgumentsContext f; + public AccessListContext a; + public OtherExpressionContext otherExpression() { + return getRuleContext(OtherExpressionContext.class,0); + } + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List functionArguments() { + return getRuleContexts(FunctionArgumentsContext.class); + } + public FunctionArgumentsContext functionArguments(int i) { + return getRuleContext(FunctionArgumentsContext.class,i); + } + public List accessList() { + return getRuleContexts(AccessListContext.class); + } + public AccessListContext accessList(int i) { + return getRuleContext(AccessListContext.class,i); + } + public AccessExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AccessExpressionContext accessExpression() throws RecognitionException { + AccessExpressionContext _localctx = new AccessExpressionContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_accessExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + boolean isAccessExpression = false; + boolean isMultiDimentional = false; + ArrayList args = new ArrayList(); + ArrayList dimentions = new ArrayList(); + + setState(567); + ((AccessExpressionContext)_localctx).o = otherExpression(); + setState(575); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(568); + match(LPAR); + setState(569); + ((AccessExpressionContext)_localctx).f = functionArguments(); + + isAccessExpression = true; + args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); + + setState(571); + match(RPAR); + } + } + } + setState(577); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + } + setState(583); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(578); + ((AccessExpressionContext)_localctx).a = accessList(); + + isMultiDimentional = true; + dimentions.add(((AccessExpressionContext)_localctx).a.accessListExp); + + } + } + } + setState(585); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + } + + if(!isAccessExpression){ + ((AccessExpressionContext)_localctx).expRet = ((AccessExpressionContext)_localctx).o.expRet; + } + else{ + ((AccessExpressionContext)_localctx).expRet = new AccessExpression(((AccessExpressionContext)_localctx).o.expRet, args); + if(isMultiDimentional){ + _localctx.expRet.setDimentionalAccess(dimentions); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OtherExpressionContext extends ParserRuleContext { + public Expression expRet; + public ValuesContext v; + public Token id; + public LambdaFunctionContext lambda; + public ChopStatementContext chop; + public ChompStatementContext chomp; + public MatchPatternStatementContext match; + public FilterStatementContext f; + public LenStatementContext len; + public ExpressionContext e; + public ValuesContext values() { + return getRuleContext(ValuesContext.class,0); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public LambdaFunctionContext lambdaFunction() { + return getRuleContext(LambdaFunctionContext.class,0); + } + public ChopStatementContext chopStatement() { + return getRuleContext(ChopStatementContext.class,0); + } + public ChompStatementContext chompStatement() { + return getRuleContext(ChompStatementContext.class,0); + } + public MatchPatternStatementContext matchPatternStatement() { + return getRuleContext(MatchPatternStatementContext.class,0); + } + public FilterStatementContext filterStatement() { + return getRuleContext(FilterStatementContext.class,0); + } + public LenStatementContext lenStatement() { + return getRuleContext(LenStatementContext.class,0); + } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public OtherExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_otherExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterOtherExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitOtherExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitOtherExpression(this); + else return visitor.visitChildren(this); + } + } + + public final OtherExpressionContext otherExpression() throws RecognitionException { + OtherExpressionContext _localctx = new OtherExpressionContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_otherExpression); + int _la; + try { + setState(618); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(588); + ((OtherExpressionContext)_localctx).v = values(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(591); + ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); + + ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); + _localctx.expRet.setLine((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getLine():0)); + + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(593); + ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(596); + ((OtherExpressionContext)_localctx).chop = chopStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(599); + ((OtherExpressionContext)_localctx).chomp = chompStatement(); + ((OtherExpressionContext)_localctx).expRet = chomp.chompRet; + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(602); + ((OtherExpressionContext)_localctx).match = matchPatternStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(605); + ((OtherExpressionContext)_localctx).f = filterStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(608); + ((OtherExpressionContext)_localctx).len = lenStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len.lenRet; + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(611); + match(LPAR); + setState(615); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(612); + ((OtherExpressionContext)_localctx).e = expression(0); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; + } + } + + setState(617); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LambdaFunctionContext extends ParserRuleContext { + public Expression lambdaRet; + public Token a; + public FunctionArgumentsDeclarationContext fd; + public BodyContext b; + public FunctionArgumentsContext fa; + public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } + public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public FunctionArgumentsContext functionArguments() { + return getRuleContext(FunctionArgumentsContext.class,0); + } + public LambdaFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLambdaFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLambdaFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLambdaFunction(this); + else return visitor.visitChildren(this); + } + } + + public final LambdaFunctionContext lambdaFunction() throws RecognitionException { + LambdaFunctionContext _localctx = new LambdaFunctionContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_lambdaFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(620); + ((LambdaFunctionContext)_localctx).a = match(ARROW); + setState(621); + ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); + setState(622); + match(LBRACE); + setState(623); + ((LambdaFunctionContext)_localctx).b = body(); + setState(624); + match(RBRACE); + setState(625); + ((LambdaFunctionContext)_localctx).fa = functionArguments(); + + ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet, ((LambdaFunctionContext)_localctx).fa.funcArgsRet); + _localctx.lambdaRet.setLine((((LambdaFunctionContext)_localctx).a!=null?((LambdaFunctionContext)_localctx).a.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValuesContext extends ParserRuleContext { + public Value valRet; + public BoolValueContext b; + public Token s; + public Token i; + public Token float_; + public ListValueContext l; + public FunctionPointerContext f; + public BoolValueContext boolValue() { + return getRuleContext(BoolValueContext.class,0); + } + public TerminalNode STRING_VALUE() { return getToken(FunctionCraftParser.STRING_VALUE, 0); } + public TerminalNode INT_VALUE() { return getToken(FunctionCraftParser.INT_VALUE, 0); } + public TerminalNode FLOAT_VALUE() { return getToken(FunctionCraftParser.FLOAT_VALUE, 0); } + public ListValueContext listValue() { + return getRuleContext(ListValueContext.class,0); + } + public FunctionPointerContext functionPointer() { + return getRuleContext(FunctionPointerContext.class,0); + } + public ValuesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_values; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterValues(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitValues(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitValues(this); + else return visitor.visitChildren(this); + } + } + + public final ValuesContext values() throws RecognitionException { + ValuesContext _localctx = new ValuesContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_values); + try { + setState(643); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + case FALSE: + enterOuterAlt(_localctx, 1); + { + setState(628); + ((ValuesContext)_localctx).b = boolValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; + } + break; + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(631); + ((ValuesContext)_localctx).s = match(STRING_VALUE); + ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); + } + break; + case INT_VALUE: + enterOuterAlt(_localctx, 3); + { + setState(633); + ((ValuesContext)_localctx).i = match(INT_VALUE); + ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); + } + break; + case FLOAT_VALUE: + enterOuterAlt(_localctx, 4); + { + setState(635); + ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); + ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float!=null?((ValuesContext)_localctx).float.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float!=null?((ValuesContext)_localctx).float.getLine():0)); + } + break; + case LBRACK: + enterOuterAlt(_localctx, 5); + { + setState(637); + ((ValuesContext)_localctx).l = listValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; + } + break; + case METHOD: + enterOuterAlt(_localctx, 6); + { + setState(640); + ((ValuesContext)_localctx).f = functionPointer(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ListValueContext extends ParserRuleContext { + public ListValue listValRet; + public Token l; + public FunctionArgumentsContext f; + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public FunctionArgumentsContext functionArguments() { + return getRuleContext(FunctionArgumentsContext.class,0); + } + public ListValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_listValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterListValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitListValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitListValue(this); + else return visitor.visitChildren(this); + } + } + + public final ListValueContext listValue() throws RecognitionException { + ListValueContext _localctx = new ListValueContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_listValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(645); + ((ListValueContext)_localctx).l = match(LBRACK); + setState(646); + ((ListValueContext)_localctx).f = functionArguments(); + setState(647); + match(RBRACK); + + ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); + _localctx.listValRet.setLine((((ListValueContext)_localctx).l!=null?((ListValueContext)_localctx).l.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BoolValueContext extends ParserRuleContext { + public BoolValue boolValRet; + public Token t; + public Token f; + public TerminalNode TRUE() { return getToken(FunctionCraftParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(FunctionCraftParser.FALSE, 0); } + public BoolValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBoolValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBoolValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBoolValue(this); + else return visitor.visitChildren(this); + } + } + + public final BoolValueContext boolValue() throws RecognitionException { + BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_boolValue); + try { + setState(654); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + enterOuterAlt(_localctx, 1); + { + setState(650); + ((BoolValueContext)_localctx).t = match(TRUE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); + } + break; + case FALSE: + enterOuterAlt(_localctx, 2); + { + setState(652); + ((BoolValueContext)_localctx).f = match(FALSE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionPointerContext extends ParserRuleContext { + public FunctionPointer fpRet; + public Token m; + public Token id; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COLON() { return getToken(FunctionCraftParser.COLON, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode METHOD() { return getToken(FunctionCraftParser.METHOD, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public FunctionPointerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionPointer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionPointer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionPointer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionPointer(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionPointerContext functionPointer() throws RecognitionException { + FunctionPointerContext _localctx = new FunctionPointerContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_functionPointer); + try { + enterOuterAlt(_localctx, 1); + { + setState(656); + ((FunctionPointerContext)_localctx).m = match(METHOD); + setState(657); + match(LPAR); + setState(658); + match(COLON); + setState(659); + ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); + setState(660); + match(RPAR); + + Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); + id_.setLine((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getLine():0)); + ((FunctionPointerContext)_localctx).fpRet = new FunctionPointer(id_); + _localctx.fpRet.setLine((((FunctionPointerContext)_localctx).m!=null?((FunctionPointerContext)_localctx).m.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 24: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 25: + return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); + case 26: + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + case 27: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 28: + return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean eqaulityExpression_sempred(EqaulityExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 2); + } + return true; + } + private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 2); + } + return true; + } + private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 4: + return precpred(_ctx, 2); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001A\u0298\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0002$\u0007$\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0005\u0000R\b\u0000\n\u0000\f\u0000"+ + "U\t\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002l\b\u0002"+ + "\n\u0002\f\u0002o\t\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u007f\b\u0002"+ + "\n\u0002\f\u0002\u0082\t\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u0086"+ + "\b\u0002\u0003\u0002\u0088\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0005\u0003\u009b\b\u0003\n\u0003\f\u0003\u009e"+ + "\t\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0005\u0005\u00b3\b\u0005\n\u0005\f\u0005\u00b6\t\u0005"+ + "\u0003\u0005\u00b8\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0003\u0006\u00bf\b\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0005\u0007\u00d1\b\u0007\n\u0007\f\u0007\u00d4\t\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00da\b\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\b\u0001\b\u0003\b\u00e6\b\b\u0001\b\u0001\b\u0001\b\u0003\b\u00eb"+ + "\b\b\u0005\b\u00ed\b\b\n\b\f\b\u00f0\t\b\u0005\b\u00f2\b\b\n\b\f\b\u00f5"+ + "\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u011c\b\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0124\b\r\u0001\r\u0005"+ + "\r\u0127\b\r\n\r\f\r\u012a\t\r\u0001\r\u0001\r\u0001\r\u0003\r\u012f\b"+ + "\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0005\u000f\u0149\b\u000f\n\u000f\f\u000f\u014c\t\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u0152\b\u000f\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0005\u0010\u0162\b\u0010\n\u0010\f\u0010\u0165\t\u0010\u0001\u0010"+ + "\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0183\b\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014"+ + "\u0191\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0003\u0016\u01b2\b\u0016\u0001\u0017\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0005\u0017\u01b8\b\u0017\n\u0017\f\u0017\u01bb"+ + "\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01c0\b\u0017"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01cb\b\u0018\n\u0018"+ + "\f\u0018\u01ce\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0003\u0019\u01da\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005\u0019"+ + "\u01df\b\u0019\n\u0019\f\u0019\u01e2\t\u0019\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0003"+ + "\u001a\u01f2\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a\u01f7"+ + "\b\u001a\n\u001a\f\u001a\u01fa\t\u001a\u0001\u001b\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0003\u001b\u0206\b\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ + "\u0005\u001b\u020b\b\u001b\n\u001b\f\u001b\u020e\t\u001b\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u021a\b\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0005\u001c\u021f\b\u001c\n\u001c\f\u001c\u0222\t\u001c"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u022d\b\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d"+ + "\u0235\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0005\u001e\u023e\b\u001e\n\u001e\f\u001e\u0241"+ + "\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0246\b\u001e"+ + "\n\u001e\f\u001e\u0249\t\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0003\u001f\u0268\b\u001f\u0001\u001f\u0003\u001f\u026b"+ + "\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0003!\u0284\b!\u0001\"\u0001\"\u0001\""+ + "\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0003#\u028f\b#\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0000\u000502468%\u0000\u0002"+ + "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ + " \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001\u0000\u001e\u001f\u02ba\u0000"+ + "J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000\u0000\u0000\u0004d\u0001"+ + "\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000\u0000\b\u00a1\u0001\u0000"+ + "\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000\f\u00b9\u0001\u0000\u0000"+ + "\u0000\u000e\u00c2\u0001\u0000\u0000\u0000\u0010\u00de\u0001\u0000\u0000"+ + "\u0000\u0012\u00f6\u0001\u0000\u0000\u0000\u0014\u00fd\u0001\u0000\u0000"+ + "\u0000\u0016\u0103\u0001\u0000\u0000\u0000\u0018\u010c\u0001\u0000\u0000"+ + "\u0000\u001a\u0112\u0001\u0000\u0000\u0000\u001c\u0130\u0001\u0000\u0000"+ + "\u0000\u001e\u0151\u0001\u0000\u0000\u0000 \u0153\u0001\u0000\u0000\u0000"+ + "\"\u0169\u0001\u0000\u0000\u0000$\u0171\u0001\u0000\u0000\u0000&\u0177"+ + "\u0001\u0000\u0000\u0000(\u017d\u0001\u0000\u0000\u0000*\u0196\u0001\u0000"+ + "\u0000\u0000,\u01b1\u0001\u0000\u0000\u0000.\u01b3\u0001\u0000\u0000\u0000"+ + "0\u01c1\u0001\u0000\u0000\u00002\u01cf\u0001\u0000\u0000\u00004\u01e3"+ + "\u0001\u0000\u0000\u00006\u01fb\u0001\u0000\u0000\u00008\u020f\u0001\u0000"+ + "\u0000\u0000:\u0234\u0001\u0000\u0000\u0000<\u0236\u0001\u0000\u0000\u0000"+ + ">\u026a\u0001\u0000\u0000\u0000@\u026c\u0001\u0000\u0000\u0000B\u0283"+ + "\u0001\u0000\u0000\u0000D\u0285\u0001\u0000\u0000\u0000F\u028e\u0001\u0000"+ + "\u0000\u0000H\u0290\u0001\u0000\u0000\u0000JS\u0006\u0000\uffff\uffff"+ + "\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000\uffff\uffff\u0000MR\u0001"+ + "\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000OP\u0006\u0000\uffff\uffff"+ + "\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000\u0000\u0000QN\u0001\u0000"+ + "\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001\u0000\u0000\u0000ST\u0001"+ + "\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000US\u0001\u0000\u0000\u0000"+ + "VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff\u0000X\u0001\u0001\u0000"+ + "\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000Z[\u0005\u0001\u0000\u0000"+ + "[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>\u0000\u0000]^\u0006\u0001"+ + "\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000_`\u0006\u0001\uffff\uffff"+ + "\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff\uffff\u0000bc\u0005\u0002"+ + "\u0000\u0000c\u0003\u0001\u0000\u0000\u0000de\u0006\u0002\uffff\uffff"+ + "\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000\u0000gm\u0006\u0002\uffff"+ + "\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000\u0000jl\u0006\u0002\uffff"+ + "\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000mk\u0001"+ + "\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0085\u0001\u0000\u0000"+ + "\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000\u0000qr\u00053\u0000\u0000"+ + "rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff\u0000tu\u00050\u0000\u0000"+ + "uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff\uffff\u0000wx\u00057\u0000"+ + "\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff\uffff\u0000z{\u00050\u0000"+ + "\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff\uffff\u0000}\u007f\u0001"+ + "\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000\u007f\u0082\u0001\u0000\u0000"+ + "\u0000\u0080~\u0001\u0000\u0000\u0000\u0080\u0081\u0001\u0000\u0000\u0000"+ + "\u0081\u0083\u0001\u0000\u0000\u0000\u0082\u0080\u0001\u0000\u0000\u0000"+ + "\u0083\u0084\u00054\u0000\u0000\u0084\u0086\u0001\u0000\u0000\u0000\u0085"+ + "p\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000\u0000\u0086\u0088"+ + "\u0001\u0000\u0000\u0000\u0087f\u0001\u0000\u0000\u0000\u0087\u0088\u0001"+ + "\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000\u0089\u008a\u0005"+ + "2\u0000\u0000\u008a\u0005\u0001\u0000\u0000\u0000\u008b\u008c\u0005\f"+ + "\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff\u0000\u008d\u008e\u0005"+ + ">\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff\u0000\u008f\u0090\u0005"+ + "1\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091\u0092\u0006\u0003\uffff"+ + "\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093\u0094\u0005#\u0000\u0000"+ + "\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096\u0006\u0003\uffff\uffff\u0000"+ + "\u0096\u0097\u00050\u0000\u0000\u0097\u0098\u00030\u0018\u0000\u0098\u0099"+ + "\u0006\u0003\uffff\uffff\u0000\u0099\u009b\u0001\u0000\u0000\u0000\u009a"+ + "\u0093\u0001\u0000\u0000\u0000\u009b\u009e\u0001\u0000\u0000\u0000\u009c"+ + "\u009a\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000\u0000\u0000\u009d"+ + "\u009f\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000\u0000\u0000\u009f"+ + "\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001\u0000\u0000\u0000\u00a1\u00a2"+ + "\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3\u0005\u0001\u0000\u0000\u00a3"+ + "\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5\u0006\u0004\uffff\uffff\u0000"+ + "\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7\u00052\u0000\u0000\u00a7\u00a8"+ + "\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004\uffff\uffff\u0000\u00a9\u00aa"+ + "\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000\u0000\u0000\u00ab\u00b7\u0006"+ + "\u0005\uffff\uffff\u0000\u00ac\u00ad\u00030\u0018\u0000\u00ad\u00b4\u0006"+ + "\u0005\uffff\uffff\u0000\u00ae\u00af\u00057\u0000\u0000\u00af\u00b0\u0003"+ + "0\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff\uffff\u0000\u00b1\u00b3\u0001"+ + "\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000\u0000\u0000\u00b3\u00b6\u0001"+ + "\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000\u00b4\u00b5\u0001"+ + "\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000\u00b6\u00b4\u0001"+ + "\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000\u0000\u0000\u00b7\u00b8\u0001"+ + "\u0000\u0000\u0000\u00b8\u000b\u0001\u0000\u0000\u0000\u00b9\u00ba\u0006"+ + "\u0006\uffff\uffff\u0000\u00ba\u00be\u0005\u0007\u0000\u0000\u00bb\u00bc"+ + "\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006\uffff\uffff\u0000\u00bd\u00bf"+ + "\u0001\u0000\u0000\u0000\u00be\u00bb\u0001\u0000\u0000\u0000\u00be\u00bf"+ + "\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000\u0000\u00c0\u00c1"+ + "\u0005;\u0000\u0000\u00c1\r\u0001\u0000\u0000\u0000\u00c2\u00c3\u0006"+ + "\u0007\uffff\uffff\u0000\u00c3\u00c4\u0005\b\u0000\u0000\u00c4\u00c5\u0006"+ + "\u0007\uffff\uffff\u0000\u00c5\u00c6\u0003\u0010\b\u0000\u00c6\u00c7\u0006"+ + "\u0007\uffff\uffff\u0000\u00c7\u00c8\u0003.\u0017\u0000\u00c8\u00c9\u0006"+ + "\u0007\uffff\uffff\u0000\u00c9\u00d2\u0006\u0007\uffff\uffff\u0000\u00ca"+ + "\u00cb\u0005\n\u0000\u0000\u00cb\u00cc\u0003\u0010\b\u0000\u00cc\u00cd"+ + "\u0006\u0007\uffff\uffff\u0000\u00cd\u00ce\u0003.\u0017\u0000\u00ce\u00cf"+ + "\u0006\u0007\uffff\uffff\u0000\u00cf\u00d1\u0001\u0000\u0000\u0000\u00d0"+ + "\u00ca\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001\u0000\u0000\u0000\u00d2"+ + "\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001\u0000\u0000\u0000\u00d3"+ + "\u00d9\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001\u0000\u0000\u0000\u00d5"+ + "\u00d6\u0005\t\u0000\u0000\u00d6\u00d7\u0003.\u0017\u0000\u00d7\u00d8"+ + "\u0006\u0007\uffff\uffff\u0000\u00d8\u00da\u0001\u0000\u0000\u0000\u00d9"+ + "\u00d5\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000\u00da"+ + "\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0006\u0007\uffff\uffff\u0000"+ + "\u00dc\u00dd\u0005\u0002\u0000\u0000\u00dd\u000f\u0001\u0000\u0000\u0000"+ + "\u00de\u00f3\u0006\b\uffff\uffff\u0000\u00df\u00e0\u00051\u0000\u0000"+ + "\u00e0\u00e1\u00030\u0018\u0000\u00e1\u00e2\u0006\b\uffff\uffff\u0000"+ + "\u00e2\u00ee\u00052\u0000\u0000\u00e3\u00e5\u0007\u0000\u0000\u0000\u00e4"+ + "\u00e6\u00051\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000\u0000\u00e5\u00e6"+ + "\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000\u0000\u00e7\u00e8"+ + "\u0003\u0010\b\u0000\u00e8\u00ea\u0006\b\uffff\uffff\u0000\u00e9\u00eb"+ + "\u00052\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000\u00ea\u00eb\u0001"+ + "\u0000\u0000\u0000\u00eb\u00ed\u0001\u0000\u0000\u0000\u00ec\u00e3\u0001"+ + "\u0000\u0000\u0000\u00ed\u00f0\u0001\u0000\u0000\u0000\u00ee\u00ec\u0001"+ + "\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f2\u0001"+ + "\u0000\u0000\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f1\u00df\u0001"+ + "\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000\u00f3\u00f1\u0001"+ + "\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4\u0011\u0001"+ + "\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000\u00f6\u00f7\u0005"+ + "\u0004\u0000\u0000\u00f7\u00f8\u00051\u0000\u0000\u00f8\u00f9\u00030\u0018"+ + "\u0000\u00f9\u00fa\u0006\t\uffff\uffff\u0000\u00fa\u00fb\u00052\u0000"+ + "\u0000\u00fb\u00fc\u0005;\u0000\u0000\u00fc\u0013\u0001\u0000\u0000\u0000"+ + "\u00fd\u00fe\u0005\u0006\u0000\u0000\u00fe\u00ff\u00051\u0000\u0000\u00ff"+ + "\u0100\u00030\u0018\u0000\u0100\u0101\u0006\n\uffff\uffff\u0000\u0101"+ + "\u0102\u00052\u0000\u0000\u0102\u0015\u0001\u0000\u0000\u0000\u0103\u0104"+ + "\u0005\u0005\u0000\u0000\u0104\u0105\u00051\u0000\u0000\u0105\u0106\u0003"+ + "0\u0018\u0000\u0106\u0107\u00057\u0000\u0000\u0107\u0108\u00030\u0018"+ + "\u0000\u0108\u0109\u00052\u0000\u0000\u0109\u010a\u0005;\u0000\u0000\u010a"+ + "\u010b\u0006\u000b\uffff\uffff\u0000\u010b\u0017\u0001\u0000\u0000\u0000"+ + "\u010c\u010d\u0005\u000e\u0000\u0000\u010d\u010e\u0005\u0011\u0000\u0000"+ + "\u010e\u010f\u0003\u001a\r\u0000\u010f\u0110\u0006\f\uffff\uffff\u0000"+ + "\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0019\u0001\u0000\u0000\u0000"+ + "\u0112\u0128\u0006\r\uffff\uffff\u0000\u0113\u0114\u0003,\u0016\u0000"+ + "\u0114\u0115\u0006\r\uffff\uffff\u0000\u0115\u0127\u0001\u0000\u0000\u0000"+ + "\u0116\u011b\u0005(\u0000\u0000\u0117\u0118\u0005\b\u0000\u0000\u0118"+ + "\u0119\u0003\u0010\b\u0000\u0119\u011a\u0006\r\uffff\uffff\u0000\u011a"+ + "\u011c\u0001\u0000\u0000\u0000\u011b\u0117\u0001\u0000\u0000\u0000\u011b"+ + "\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000\u0000\u0000\u011d"+ + "\u0127\u0005;\u0000\u0000\u011e\u0123\u0005)\u0000\u0000\u011f\u0120\u0005"+ + "\b\u0000\u0000\u0120\u0121\u0003\u0010\b\u0000\u0121\u0122\u0006\r\uffff"+ + "\uffff\u0000\u0122\u0124\u0001\u0000\u0000\u0000\u0123\u011f\u0001\u0000"+ + "\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0125\u0001\u0000"+ + "\u0000\u0000\u0125\u0127\u0005;\u0000\u0000\u0126\u0113\u0001\u0000\u0000"+ + "\u0000\u0126\u0116\u0001\u0000\u0000\u0000\u0126\u011e\u0001\u0000\u0000"+ + "\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128\u0126\u0001\u0000\u0000"+ + "\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012e\u0001\u0000\u0000"+ + "\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b\u012c\u0003\f\u0006\u0000"+ + "\u012c\u012d\u0006\r\uffff\uffff\u0000\u012d\u012f\u0001\u0000\u0000\u0000"+ + "\u012e\u012b\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000"+ + "\u012f\u001b\u0001\u0000\u0000\u0000\u0130\u0131\u0005\u000f\u0000\u0000"+ + "\u0131\u0132\u0005>\u0000\u0000\u0132\u0133\u0005\u0010\u0000\u0000\u0133"+ + "\u0134\u0003\u001e\u000f\u0000\u0134\u0135\u0003\u001a\r\u0000\u0135\u0136"+ + "\u0005\u0002\u0000\u0000\u0136\u0137\u0006\u000e\uffff\uffff\u0000\u0137"+ + "\u001d\u0001\u0000\u0000\u0000\u0138\u0139\u0006\u000f\uffff\uffff\u0000"+ + "\u0139\u013a\u00051\u0000\u0000\u013a\u013b\u00030\u0018\u0000\u013b\u013c"+ + "\u0006\u000f\uffff\uffff\u0000\u013c\u013d\u00059\u0000\u0000\u013d\u013e"+ + "\u00030\u0018\u0000\u013e\u013f\u0006\u000f\uffff\uffff\u0000\u013f\u0140"+ + "\u00052\u0000\u0000\u0140\u0152\u0001\u0000\u0000\u0000\u0141\u0142\u0005"+ + "3\u0000\u0000\u0142\u0143\u00030\u0018\u0000\u0143\u014a\u0006\u000f\uffff"+ + "\uffff\u0000\u0144\u0145\u00057\u0000\u0000\u0145\u0146\u00030\u0018\u0000"+ + "\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0149\u0001\u0000\u0000"+ + "\u0000\u0148\u0144\u0001\u0000\u0000\u0000\u0149\u014c\u0001\u0000\u0000"+ + "\u0000\u014a\u0148\u0001\u0000\u0000\u0000\u014a\u014b\u0001\u0000\u0000"+ + "\u0000\u014b\u014d\u0001\u0000\u0000\u0000\u014c\u014a\u0001\u0000\u0000"+ + "\u0000\u014d\u014e\u00054\u0000\u0000\u014e\u0152\u0001\u0000\u0000\u0000"+ + "\u014f\u0150\u0005>\u0000\u0000\u0150\u0152\u0006\u000f\uffff\uffff\u0000"+ + "\u0151\u0138\u0001\u0000\u0000\u0000\u0151\u0141\u0001\u0000\u0000\u0000"+ + "\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u001f\u0001\u0000\u0000\u0000"+ + "\u0153\u0154\u0006\u0010\uffff\uffff\u0000\u0154\u0155\u00053\u0000\u0000"+ + "\u0155\u0156\u00030\u0018\u0000\u0156\u0157\u0005$\u0000\u0000\u0157\u0158"+ + "\u0005>\u0000\u0000\u0158\u0159\u0005*\u0000\u0000\u0159\u015a\u0003\u001e"+ + "\u000f\u0000\u015a\u015b\u00057\u0000\u0000\u015b\u015c\u00030\u0018\u0000"+ + "\u015c\u0163\u0006\u0010\uffff\uffff\u0000\u015d\u015e\u00057\u0000\u0000"+ + "\u015e\u015f\u00030\u0018\u0000\u015f\u0160\u0006\u0010\uffff\uffff\u0000"+ + "\u0160\u0162\u0001\u0000\u0000\u0000\u0161\u015d\u0001\u0000\u0000\u0000"+ + "\u0162\u0165\u0001\u0000\u0000\u0000\u0163\u0161\u0001\u0000\u0000\u0000"+ + "\u0163\u0164\u0001\u0000\u0000\u0000\u0164\u0166\u0001\u0000\u0000\u0000"+ + "\u0165\u0163\u0001\u0000\u0000\u0000\u0166\u0167\u0006\u0010\uffff\uffff"+ + "\u0000\u0167\u0168\u00054\u0000\u0000\u0168!\u0001\u0000\u0000\u0000\u0169"+ + "\u016a\u0005>\u0000\u0000\u016a\u016b\u00058\u0000\u0000\u016b\u016c\u0005"+ + "\r\u0000\u0000\u016c\u016d\u00051\u0000\u0000\u016d\u016e\u00030\u0018"+ + "\u0000\u016e\u016f\u00052\u0000\u0000\u016f\u0170\u0006\u0011\uffff\uffff"+ + "\u0000\u0170#\u0001\u0000\u0000\u0000\u0171\u0172\u0005\u0012\u0000\u0000"+ + "\u0172\u0173\u00051\u0000\u0000\u0173\u0174\u00030\u0018\u0000\u0174\u0175"+ + "\u00052\u0000\u0000\u0175\u0176\u0006\u0012\uffff\uffff\u0000\u0176%\u0001"+ + "\u0000\u0000\u0000\u0177\u0178\u0005\u0013\u0000\u0000\u0178\u0179\u0005"+ + "1\u0000\u0000\u0179\u017a\u00030\u0018\u0000\u017a\u017b\u00052\u0000"+ + "\u0000\u017b\u017c\u0006\u0013\uffff\uffff\u0000\u017c\'\u0001\u0000\u0000"+ + "\u0000\u017d\u017e\u0006\u0014\uffff\uffff\u0000\u017e\u0182\u0005>\u0000"+ + "\u0000\u017f\u0180\u0003*\u0015\u0000\u0180\u0181\u0006\u0014\uffff\uffff"+ + "\u0000\u0181\u0183\u0001\u0000\u0000\u0000\u0182\u017f\u0001\u0000\u0000"+ + "\u0000\u0182\u0183\u0001\u0000\u0000\u0000\u0183\u0190\u0001\u0000\u0000"+ + "\u0000\u0184\u0185\u00050\u0000\u0000\u0185\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u0186\u0187\u0005+\u0000\u0000\u0187\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u0188\u0189\u0005,\u0000\u0000\u0189\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u018a\u018b\u0005.\u0000\u0000\u018b\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u018c\u018d\u0005-\u0000\u0000\u018d\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u018e\u018f\u0005/\u0000\u0000\u018f\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u0190\u0184\u0001\u0000\u0000\u0000\u0190\u0186\u0001\u0000\u0000"+ + "\u0000\u0190\u0188\u0001\u0000\u0000\u0000\u0190\u018a\u0001\u0000\u0000"+ + "\u0000\u0190\u018c\u0001\u0000\u0000\u0000\u0190\u018e\u0001\u0000\u0000"+ + "\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192\u0193\u00030\u0018\u0000"+ + "\u0193\u0194\u0005;\u0000\u0000\u0194\u0195\u0006\u0014\uffff\uffff\u0000"+ + "\u0195)\u0001\u0000\u0000\u0000\u0196\u0197\u00053\u0000\u0000\u0197\u0198"+ + "\u00030\u0018\u0000\u0198\u0199\u0006\u0015\uffff\uffff\u0000\u0199\u019a"+ + "\u00054\u0000\u0000\u019a+\u0001\u0000\u0000\u0000\u019b\u019c\u0003\u000e"+ + "\u0007\u0000\u019c\u019d\u0006\u0016\uffff\uffff\u0000\u019d\u01b2\u0001"+ + "\u0000\u0000\u0000\u019e\u019f\u0003\u0018\f\u0000\u019f\u01a0\u0006\u0016"+ + "\uffff\uffff\u0000\u01a0\u01b2\u0001\u0000\u0000\u0000\u01a1\u01a2\u0003"+ + "\u001c\u000e\u0000\u01a2\u01a3\u0006\u0016\uffff\uffff\u0000\u01a3\u01b2"+ + "\u0001\u0000\u0000\u0000\u01a4\u01a5\u0003\u0012\t\u0000\u01a5\u01a6\u0006"+ + "\u0016\uffff\uffff\u0000\u01a6\u01b2\u0001\u0000\u0000\u0000\u01a7\u01a8"+ + "\u0003\u0016\u000b\u0000\u01a8\u01a9\u0006\u0016\uffff\uffff\u0000\u01a9"+ + "\u01b2\u0001\u0000\u0000\u0000\u01aa\u01ab\u00030\u0018\u0000\u01ab\u01ac"+ + "\u0006\u0016\uffff\uffff\u0000\u01ac\u01ad\u0005;\u0000\u0000\u01ad\u01b2"+ + "\u0001\u0000\u0000\u0000\u01ae\u01af\u0003(\u0014\u0000\u01af\u01b0\u0006"+ + "\u0016\uffff\uffff\u0000\u01b0\u01b2\u0001\u0000\u0000\u0000\u01b1\u019b"+ + "\u0001\u0000\u0000\u0000\u01b1\u019e\u0001\u0000\u0000\u0000\u01b1\u01a1"+ + "\u0001\u0000\u0000\u0000\u01b1\u01a4\u0001\u0000\u0000\u0000\u01b1\u01a7"+ + "\u0001\u0000\u0000\u0000\u01b1\u01aa\u0001\u0000\u0000\u0000\u01b1\u01ae"+ + "\u0001\u0000\u0000\u0000\u01b2-\u0001\u0000\u0000\u0000\u01b3\u01b9\u0006"+ + "\u0017\uffff\uffff\u0000\u01b4\u01b5\u0003,\u0016\u0000\u01b5\u01b6\u0006"+ + "\u0017\uffff\uffff\u0000\u01b6\u01b8\u0001\u0000\u0000\u0000\u01b7\u01b4"+ + "\u0001\u0000\u0000\u0000\u01b8\u01bb\u0001\u0000\u0000\u0000\u01b9\u01b7"+ + "\u0001\u0000\u0000\u0000\u01b9\u01ba\u0001\u0000\u0000\u0000\u01ba\u01bf"+ + "\u0001\u0000\u0000\u0000\u01bb\u01b9\u0001\u0000\u0000\u0000\u01bc\u01bd"+ + "\u0003\f\u0006\u0000\u01bd\u01be\u0006\u0017\uffff\uffff\u0000\u01be\u01c0"+ + "\u0001\u0000\u0000\u0000\u01bf\u01bc\u0001\u0000\u0000\u0000\u01bf\u01c0"+ + "\u0001\u0000\u0000\u0000\u01c0/\u0001\u0000\u0000\u0000\u01c1\u01c2\u0006"+ + "\u0018\uffff\uffff\u0000\u01c2\u01c3\u00032\u0019\u0000\u01c3\u01c4\u0006"+ + "\u0018\uffff\uffff\u0000\u01c4\u01cc\u0001\u0000\u0000\u0000\u01c5\u01c6"+ + "\n\u0002\u0000\u0000\u01c6\u01c7\u0005%\u0000\u0000\u01c7\u01c8\u0003"+ + "2\u0019\u0000\u01c8\u01c9\u0006\u0018\uffff\uffff\u0000\u01c9\u01cb\u0001"+ + "\u0000\u0000\u0000\u01ca\u01c5\u0001\u0000\u0000\u0000\u01cb\u01ce\u0001"+ + "\u0000\u0000\u0000\u01cc\u01ca\u0001\u0000\u0000\u0000\u01cc\u01cd\u0001"+ + "\u0000\u0000\u0000\u01cd1\u0001\u0000\u0000\u0000\u01ce\u01cc\u0001\u0000"+ + "\u0000\u0000\u01cf\u01d0\u0006\u0019\uffff\uffff\u0000\u01d0\u01d1\u0003"+ + "4\u001a\u0000\u01d1\u01d2\u0006\u0019\uffff\uffff\u0000\u01d2\u01e0\u0001"+ + "\u0000\u0000\u0000\u01d3\u01d4\n\u0002\u0000\u0000\u01d4\u01d9\u0006\u0019"+ + "\uffff\uffff\u0000\u01d5\u01d6\u0005\u0018\u0000\u0000\u01d6\u01da\u0006"+ + "\u0019\uffff\uffff\u0000\u01d7\u01d8\u0005\u0019\u0000\u0000\u01d8\u01da"+ + "\u0006\u0019\uffff\uffff\u0000\u01d9\u01d5\u0001\u0000\u0000\u0000\u01d9"+ + "\u01d7\u0001\u0000\u0000\u0000\u01da\u01db\u0001\u0000\u0000\u0000\u01db"+ + "\u01dc\u00034\u001a\u0000\u01dc\u01dd\u0006\u0019\uffff\uffff\u0000\u01dd"+ + "\u01df\u0001\u0000\u0000\u0000\u01de\u01d3\u0001\u0000\u0000\u0000\u01df"+ + "\u01e2\u0001\u0000\u0000\u0000\u01e0\u01de\u0001\u0000\u0000\u0000\u01e0"+ + "\u01e1\u0001\u0000\u0000\u0000\u01e13\u0001\u0000\u0000\u0000\u01e2\u01e0"+ + "\u0001\u0000\u0000\u0000\u01e3\u01e4\u0006\u001a\uffff\uffff\u0000\u01e4"+ + "\u01e5\u00036\u001b\u0000\u01e5\u01e6\u0006\u001a\uffff\uffff\u0000\u01e6"+ + "\u01f8\u0001\u0000\u0000\u0000\u01e7\u01e8\n\u0002\u0000\u0000\u01e8\u01f1"+ + "\u0006\u001a\uffff\uffff\u0000\u01e9\u01ea\u0005\u001c\u0000\u0000\u01ea"+ + "\u01f2\u0006\u001a\uffff\uffff\u0000\u01eb\u01ec\u0005\u001d\u0000\u0000"+ + "\u01ec\u01f2\u0006\u001a\uffff\uffff\u0000\u01ed\u01ee\u0005\u001a\u0000"+ + "\u0000\u01ee\u01f2\u0006\u001a\uffff\uffff\u0000\u01ef\u01f0\u0005\u001b"+ + "\u0000\u0000\u01f0\u01f2\u0006\u001a\uffff\uffff\u0000\u01f1\u01e9\u0001"+ + "\u0000\u0000\u0000\u01f1\u01eb\u0001\u0000\u0000\u0000\u01f1\u01ed\u0001"+ + "\u0000\u0000\u0000\u01f1\u01ef\u0001\u0000\u0000\u0000\u01f2\u01f3\u0001"+ + "\u0000\u0000\u0000\u01f3\u01f4\u00036\u001b\u0000\u01f4\u01f5\u0006\u001a"+ + "\uffff\uffff\u0000\u01f5\u01f7\u0001\u0000\u0000\u0000\u01f6\u01e7\u0001"+ + "\u0000\u0000\u0000\u01f7\u01fa\u0001\u0000\u0000\u0000\u01f8\u01f6\u0001"+ + "\u0000\u0000\u0000\u01f8\u01f9\u0001\u0000\u0000\u0000\u01f95\u0001\u0000"+ + "\u0000\u0000\u01fa\u01f8\u0001\u0000\u0000\u0000\u01fb\u01fc\u0006\u001b"+ + "\uffff\uffff\u0000\u01fc\u01fd\u00038\u001c\u0000\u01fd\u01fe\u0006\u001b"+ + "\uffff\uffff\u0000\u01fe\u020c\u0001\u0000\u0000\u0000\u01ff\u0200\n\u0002"+ + "\u0000\u0000\u0200\u0205\u0006\u001b\uffff\uffff\u0000\u0201\u0202\u0005"+ + "\u0014\u0000\u0000\u0202\u0206\u0006\u001b\uffff\uffff\u0000\u0203\u0204"+ + "\u0005\u0015\u0000\u0000\u0204\u0206\u0006\u001b\uffff\uffff\u0000\u0205"+ + "\u0201\u0001\u0000\u0000\u0000\u0205\u0203\u0001\u0000\u0000\u0000\u0206"+ + "\u0207\u0001\u0000\u0000\u0000\u0207\u0208\u00038\u001c\u0000\u0208\u0209"+ + "\u0006\u001b\uffff\uffff\u0000\u0209\u020b\u0001\u0000\u0000\u0000\u020a"+ + "\u01ff\u0001\u0000\u0000\u0000\u020b\u020e\u0001\u0000\u0000\u0000\u020c"+ + "\u020a\u0001\u0000\u0000\u0000\u020c\u020d\u0001\u0000\u0000\u0000\u020d"+ + "7\u0001\u0000\u0000\u0000\u020e\u020c\u0001\u0000\u0000\u0000\u020f\u0210"+ + "\u0006\u001c\uffff\uffff\u0000\u0210\u0211\u0003:\u001d\u0000\u0211\u0212"+ + "\u0006\u001c\uffff\uffff\u0000\u0212\u0220\u0001\u0000\u0000\u0000\u0213"+ + "\u0214\n\u0002\u0000\u0000\u0214\u0219\u0006\u001c\uffff\uffff\u0000\u0215"+ + "\u0216\u0005\u0016\u0000\u0000\u0216\u021a\u0006\u001c\uffff\uffff\u0000"+ + "\u0217\u0218\u0005\u0017\u0000\u0000\u0218\u021a\u0006\u001c\uffff\uffff"+ + "\u0000\u0219\u0215\u0001\u0000\u0000\u0000\u0219\u0217\u0001\u0000\u0000"+ + "\u0000\u021a\u021b\u0001\u0000\u0000\u0000\u021b\u021c\u0003:\u001d\u0000"+ + "\u021c\u021d\u0006\u001c\uffff\uffff\u0000\u021d\u021f\u0001\u0000\u0000"+ + "\u0000\u021e\u0213\u0001\u0000\u0000\u0000\u021f\u0222\u0001\u0000\u0000"+ + "\u0000\u0220\u021e\u0001\u0000\u0000\u0000\u0220\u0221\u0001\u0000\u0000"+ + "\u0000\u02219\u0001\u0000\u0000\u0000\u0222\u0220\u0001\u0000\u0000\u0000"+ + "\u0223\u022c\u0006\u001d\uffff\uffff\u0000\u0224\u0225\u0005 \u0000\u0000"+ + "\u0225\u022d\u0006\u001d\uffff\uffff\u0000\u0226\u0227\u0005\u0015\u0000"+ + "\u0000\u0227\u022d\u0006\u001d\uffff\uffff\u0000\u0228\u0229\u0005!\u0000"+ + "\u0000\u0229\u022d\u0006\u001d\uffff\uffff\u0000\u022a\u022b\u0005\"\u0000"+ + "\u0000\u022b\u022d\u0006\u001d\uffff\uffff\u0000\u022c\u0224\u0001\u0000"+ + "\u0000\u0000\u022c\u0226\u0001\u0000\u0000\u0000\u022c\u0228\u0001\u0000"+ + "\u0000\u0000\u022c\u022a\u0001\u0000\u0000\u0000\u022d\u022e\u0001\u0000"+ + "\u0000\u0000\u022e\u022f\u0003<\u001e\u0000\u022f\u0230\u0006\u001d\uffff"+ + "\uffff\u0000\u0230\u0235\u0001\u0000\u0000\u0000\u0231\u0232\u0003<\u001e"+ + "\u0000\u0232\u0233\u0006\u001d\uffff\uffff\u0000\u0233\u0235\u0001\u0000"+ + "\u0000\u0000\u0234\u0223\u0001\u0000\u0000\u0000\u0234\u0231\u0001\u0000"+ + "\u0000\u0000\u0235;\u0001\u0000\u0000\u0000\u0236\u0237\u0006\u001e\uffff"+ + "\uffff\u0000\u0237\u023f\u0003>\u001f\u0000\u0238\u0239\u00051\u0000\u0000"+ + "\u0239\u023a\u0003\n\u0005\u0000\u023a\u023b\u0006\u001e\uffff\uffff\u0000"+ + "\u023b\u023c\u00052\u0000\u0000\u023c\u023e\u0001\u0000\u0000\u0000\u023d"+ + "\u0238\u0001\u0000\u0000\u0000\u023e\u0241\u0001\u0000\u0000\u0000\u023f"+ + "\u023d\u0001\u0000\u0000\u0000\u023f\u0240\u0001\u0000\u0000\u0000\u0240"+ + "\u0247\u0001\u0000\u0000\u0000\u0241\u023f\u0001\u0000\u0000\u0000\u0242"+ + "\u0243\u0003*\u0015\u0000\u0243\u0244\u0006\u001e\uffff\uffff\u0000\u0244"+ + "\u0246\u0001\u0000\u0000\u0000\u0245\u0242\u0001\u0000\u0000\u0000\u0246"+ + "\u0249\u0001\u0000\u0000\u0000\u0247\u0245\u0001\u0000\u0000\u0000\u0247"+ + "\u0248\u0001\u0000\u0000\u0000\u0248\u024a\u0001\u0000\u0000\u0000\u0249"+ + "\u0247\u0001\u0000\u0000\u0000\u024a\u024b\u0006\u001e\uffff\uffff\u0000"+ + "\u024b=\u0001\u0000\u0000\u0000\u024c\u024d\u0003B!\u0000\u024d\u024e"+ + "\u0006\u001f\uffff\uffff\u0000\u024e\u026b\u0001\u0000\u0000\u0000\u024f"+ + "\u0250\u0005>\u0000\u0000\u0250\u026b\u0006\u001f\uffff\uffff\u0000\u0251"+ + "\u0252\u0003@ \u0000\u0252\u0253\u0006\u001f\uffff\uffff\u0000\u0253\u026b"+ + "\u0001\u0000\u0000\u0000\u0254\u0255\u0003$\u0012\u0000\u0255\u0256\u0006"+ + "\u001f\uffff\uffff\u0000\u0256\u026b\u0001\u0000\u0000\u0000\u0257\u0258"+ + "\u0003&\u0013\u0000\u0258\u0259\u0006\u001f\uffff\uffff\u0000\u0259\u026b"+ + "\u0001\u0000\u0000\u0000\u025a\u025b\u0003\"\u0011\u0000\u025b\u025c\u0006"+ + "\u001f\uffff\uffff\u0000\u025c\u026b\u0001\u0000\u0000\u0000\u025d\u025e"+ + "\u0003 \u0010\u0000\u025e\u025f\u0006\u001f\uffff\uffff\u0000\u025f\u026b"+ + "\u0001\u0000\u0000\u0000\u0260\u0261\u0003\u0014\n\u0000\u0261\u0262\u0006"+ + "\u001f\uffff\uffff\u0000\u0262\u026b\u0001\u0000\u0000\u0000\u0263\u0267"+ + "\u00051\u0000\u0000\u0264\u0265\u00030\u0018\u0000\u0265\u0266\u0006\u001f"+ + "\uffff\uffff\u0000\u0266\u0268\u0001\u0000\u0000\u0000\u0267\u0264\u0001"+ + "\u0000\u0000\u0000\u0267\u0268\u0001\u0000\u0000\u0000\u0268\u0269\u0001"+ + "\u0000\u0000\u0000\u0269\u026b\u00052\u0000\u0000\u026a\u024c\u0001\u0000"+ + "\u0000\u0000\u026a\u024f\u0001\u0000\u0000\u0000\u026a\u0251\u0001\u0000"+ + "\u0000\u0000\u026a\u0254\u0001\u0000\u0000\u0000\u026a\u0257\u0001\u0000"+ + "\u0000\u0000\u026a\u025a\u0001\u0000\u0000\u0000\u026a\u025d\u0001\u0000"+ + "\u0000\u0000\u026a\u0260\u0001\u0000\u0000\u0000\u026a\u0263\u0001\u0000"+ + "\u0000\u0000\u026b?\u0001\u0000\u0000\u0000\u026c\u026d\u0005*\u0000\u0000"+ + "\u026d\u026e\u0003\u0004\u0002\u0000\u026e\u026f\u00055\u0000\u0000\u026f"+ + "\u0270\u0003.\u0017\u0000\u0270\u0271\u00056\u0000\u0000\u0271\u0272\u0003"+ + "\n\u0005\u0000\u0272\u0273\u0006 \uffff\uffff\u0000\u0273A\u0001\u0000"+ + "\u0000\u0000\u0274\u0275\u0003F#\u0000\u0275\u0276\u0006!\uffff\uffff"+ + "\u0000\u0276\u0284\u0001\u0000\u0000\u0000\u0277\u0278\u0005?\u0000\u0000"+ + "\u0278\u0284\u0006!\uffff\uffff\u0000\u0279\u027a\u0005<\u0000\u0000\u027a"+ + "\u0284\u0006!\uffff\uffff\u0000\u027b\u027c\u0005=\u0000\u0000\u027c\u0284"+ + "\u0006!\uffff\uffff\u0000\u027d\u027e\u0003D\"\u0000\u027e\u027f\u0006"+ + "!\uffff\uffff\u0000\u027f\u0284\u0001\u0000\u0000\u0000\u0280\u0281\u0003"+ + "H$\u0000\u0281\u0282\u0006!\uffff\uffff\u0000\u0282\u0284\u0001\u0000"+ + "\u0000\u0000\u0283\u0274\u0001\u0000\u0000\u0000\u0283\u0277\u0001\u0000"+ + "\u0000\u0000\u0283\u0279\u0001\u0000\u0000\u0000\u0283\u027b\u0001\u0000"+ + "\u0000\u0000\u0283\u027d\u0001\u0000\u0000\u0000\u0283\u0280\u0001\u0000"+ + "\u0000\u0000\u0284C\u0001\u0000\u0000\u0000\u0285\u0286\u00053\u0000\u0000"+ + "\u0286\u0287\u0003\n\u0005\u0000\u0287\u0288\u00054\u0000\u0000\u0288"+ + "\u0289\u0006\"\uffff\uffff\u0000\u0289E\u0001\u0000\u0000\u0000\u028a"+ + "\u028b\u0005&\u0000\u0000\u028b\u028f\u0006#\uffff\uffff\u0000\u028c\u028d"+ + "\u0005\'\u0000\u0000\u028d\u028f\u0006#\uffff\uffff\u0000\u028e\u028a"+ + "\u0001\u0000\u0000\u0000\u028e\u028c\u0001\u0000\u0000\u0000\u028fG\u0001"+ + "\u0000\u0000\u0000\u0290\u0291\u0005\u000b\u0000\u0000\u0291\u0292\u0005"+ + "1\u0000\u0000\u0292\u0293\u0005:\u0000\u0000\u0293\u0294\u0005>\u0000"+ + "\u0000\u0294\u0295\u00052\u0000\u0000\u0295\u0296\u0006$\uffff\uffff\u0000"+ + "\u0296I\u0001\u0000\u0000\u0000.QSm\u0080\u0085\u0087\u009c\u00b4\u00b7"+ + "\u00be\u00d2\u00d9\u00e5\u00ea\u00ee\u00f3\u011b\u0123\u0126\u0128\u012e"+ + "\u014a\u0151\u0163\u0182\u0190\u01b1\u01b9\u01bf\u01cc\u01d9\u01e0\u01f1"+ + "\u01f8\u0205\u020c\u0219\u0220\u022c\u0234\u023f\u0247\u0267\u026a\u0283"+ + "\u028e"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammer/FunctionCraftVisitor.java b/Phase2Template/gen/main/grammer/FunctionCraftVisitor.java new file mode 100644 index 0000000..623fe00 --- /dev/null +++ b/Phase2Template/gen/main/grammer/FunctionCraftVisitor.java @@ -0,0 +1,235 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammer; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link FunctionCraftParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface FunctionCraftVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMain(FunctionCraftParser.MainContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRange(FunctionCraftParser.RangeContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBody(FunctionCraftParser.BodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file From 5d13886168f97f971a713e8032085e95fe85746c Mon Sep 17 00:00:00 2001 From: javad Date: Sun, 14 Apr 2024 23:47:20 +0330 Subject: [PATCH 12/23] semantic rule bugs fixed --- .../src/parsers}/FunctionCraft.interp | 0 .../src/parsers}/FunctionCraft.tokens | 0 .../parsers}/FunctionCraftBaseListener.java | 11 +- .../parsers}/FunctionCraftBaseVisitor.java | 11 +- .../src/parsers}/FunctionCraftLexer.interp | 0 .../src/parsers}/FunctionCraftLexer.java | 11 +- .../src/parsers}/FunctionCraftLexer.tokens | 0 .../src/parsers}/FunctionCraftListener.java | 11 +- .../src/parsers}/FunctionCraftParser.java | 11 +- .../src/parsers}/FunctionCraftVisitor.java | 11 +- Phase2Template/.idea/misc.xml | 16 + .../Phase2/src/main/FLCompiler.java | 4 - .../Phase2/src/main/FunctionCraft.java | 20 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 70 +- .../Phase2/src/parsers/FunctionCraft.interp | 5 +- .../parsers/FunctionCraftBaseListener.java | 25 +- .../src/parsers/FunctionCraftBaseVisitor.java | 18 +- .../src/parsers/FunctionCraftLexer.java | 9 + .../src/parsers/FunctionCraftListener.java | 27 +- .../src/parsers/FunctionCraftParser.java | 2513 +++++++++++------ .../src/parsers/FunctionCraftVisitor.java | 19 +- 21 files changed, 1837 insertions(+), 955 deletions(-) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraft.interp (100%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraft.tokens (100%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftBaseListener.java (97%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftBaseVisitor.java (97%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftLexer.interp (100%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftLexer.java (98%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftLexer.tokens (100%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftListener.java (97%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftParser.java (99%) rename {Phase2Template/gen/main/grammer => Phase1Template/untitled/src/parsers}/FunctionCraftVisitor.java (96%) delete mode 100644 Phase2Template/Phase2/src/main/FLCompiler.java diff --git a/Phase2Template/gen/main/grammer/FunctionCraft.interp b/Phase1Template/untitled/src/parsers/FunctionCraft.interp similarity index 100% rename from Phase2Template/gen/main/grammer/FunctionCraft.interp rename to Phase1Template/untitled/src/parsers/FunctionCraft.interp diff --git a/Phase2Template/gen/main/grammer/FunctionCraft.tokens b/Phase1Template/untitled/src/parsers/FunctionCraft.tokens similarity index 100% rename from Phase2Template/gen/main/grammer/FunctionCraft.tokens rename to Phase1Template/untitled/src/parsers/FunctionCraft.tokens diff --git a/Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java b/Phase1Template/untitled/src/parsers/FunctionCraftBaseListener.java similarity index 97% rename from Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java rename to Phase1Template/untitled/src/parsers/FunctionCraftBaseListener.java index 5151a9b..2643eac 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftBaseListener.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftBaseListener.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; diff --git a/Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java b/Phase1Template/untitled/src/parsers/FunctionCraftBaseVisitor.java similarity index 97% rename from Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java rename to Phase1Template/untitled/src/parsers/FunctionCraftBaseVisitor.java index d33a9a1..8bcb71c 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftBaseVisitor.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftBaseVisitor.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.interp b/Phase1Template/untitled/src/parsers/FunctionCraftLexer.interp similarity index 100% rename from Phase2Template/gen/main/grammer/FunctionCraftLexer.interp rename to Phase1Template/untitled/src/parsers/FunctionCraftLexer.interp diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.java b/Phase1Template/untitled/src/parsers/FunctionCraftLexer.java similarity index 98% rename from Phase2Template/gen/main/grammer/FunctionCraftLexer.java rename to Phase1Template/untitled/src/parsers/FunctionCraftLexer.java index 638d90d..4c279d2 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftLexer.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftLexer.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; diff --git a/Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens b/Phase1Template/untitled/src/parsers/FunctionCraftLexer.tokens similarity index 100% rename from Phase2Template/gen/main/grammer/FunctionCraftLexer.tokens rename to Phase1Template/untitled/src/parsers/FunctionCraftLexer.tokens diff --git a/Phase2Template/gen/main/grammer/FunctionCraftListener.java b/Phase1Template/untitled/src/parsers/FunctionCraftListener.java similarity index 97% rename from Phase2Template/gen/main/grammer/FunctionCraftListener.java rename to Phase1Template/untitled/src/parsers/FunctionCraftListener.java index f84cf2b..b3efcdd 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftListener.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftListener.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.tree.ParseTreeListener; /** diff --git a/Phase2Template/gen/main/grammer/FunctionCraftParser.java b/Phase1Template/untitled/src/parsers/FunctionCraftParser.java similarity index 99% rename from Phase2Template/gen/main/grammer/FunctionCraftParser.java rename to Phase1Template/untitled/src/parsers/FunctionCraftParser.java index e459f4f..6ee277f 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftParser.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftParser.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; diff --git a/Phase2Template/gen/main/grammer/FunctionCraftVisitor.java b/Phase1Template/untitled/src/parsers/FunctionCraftVisitor.java similarity index 96% rename from Phase2Template/gen/main/grammer/FunctionCraftVisitor.java rename to Phase1Template/untitled/src/parsers/FunctionCraftVisitor.java index 623fe00..776a2ad 100644 --- a/Phase2Template/gen/main/grammer/FunctionCraftVisitor.java +++ b/Phase1Template/untitled/src/parsers/FunctionCraftVisitor.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 -package main.grammer; +package /parsers; + + import main.ast.node.*; + import main.ast.node.declaration.*; + import main.ast.node.statement.*; + import main.ast.node.expression.*; + import main.ast.node.expression.operators.*; + import main.ast.node.expression.value.*; + import main.ast.node.expression.primitive.*; + import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** diff --git a/Phase2Template/.idea/misc.xml b/Phase2Template/.idea/misc.xml index 6f29fee..83ee99c 100644 --- a/Phase2Template/.idea/misc.xml +++ b/Phase2Template/.idea/misc.xml @@ -1,5 +1,21 @@ + + + diff --git a/Phase2Template/Phase2/src/main/FLCompiler.java b/Phase2Template/Phase2/src/main/FLCompiler.java deleted file mode 100644 index 339ae28..0000000 --- a/Phase2Template/Phase2/src/main/FLCompiler.java +++ /dev/null @@ -1,4 +0,0 @@ -package main; - -public class FLCompiler { -} diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index 487b45a..73ba63c 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -1,4 +1,24 @@ package main; + + +import main.ast.nodes.Program; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import parsers.FunctionCraftLexer; +import parsers.FunctionCraftParser; + + +import java.io.IOException; + public class FunctionCraft { + public static void main(String[] args) throws IOException{ + CharStream reader = CharStreams.fromFileName(args[0]); + FunctionCraftLexer flLexer = new FunctionCraftLexer(reader); + CommonTokenStream tokens = new CommonTokenStream(flLexer); + FunctionCraftParser flParser = new FunctionCraftParser(tokens); + Program program = flParser.program().flProgram; + + } } diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 14537df..decdbb5 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -1,5 +1,14 @@ grammar FunctionCraft; +@header{ + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; +} program returns [Program flProgram]: @@ -34,41 +43,41 @@ functionArgumentsDeclaration returns [ArrayList argRet]: LPAR (id1 = IDENTIFIER { - Identifier id_ = new Identifier(id1.text); + Identifier id_ = new Identifier($id1.text); id_.setLine($id1.line); - VarDeclaration = newVarDec(id_); + VarDeclaration newVarDec = new VarDeclaration(id_); $argRet.add(newVarDec); } (COMMA id2 = IDENTIFIER { - Identifier id_ = new Identifier(id2.text); - id_.setLine($id2.line); - VarDeclaration = newVarDec(id_); - $argRet.add(newVarDec); + Identifier id_2 = new Identifier($id2.text); + id_2.setLine($id2.line); + VarDeclaration newVarDec2 = new VarDeclaration(id_2); + $argRet.add(newVarDec2); } )* ( COMMA LBRACK id3 = IDENTIFIER { - Identifier id_ = new Identifier(id3.text); + Identifier id_3 = new Identifier($id3.text); id_.setLine($id3.line); - VarDeclaration = newVarDec(id_); + VarDeclaration newVarDec3 = new VarDeclaration(id_3); } ASSIGN e1 = expression { - newVarDec.setDefaultVal(e1.expRet); - $argRet.add(newVarDec); + newVarDec3.setDefaultVal($e1.expRet); + $argRet.add(newVarDec3); } (COMMA id4 = IDENTIFIER { - Identifier id_ = new Identifier(id4.text); - id_.setLine($id4.line); - VarDeclaration = newVarDec(id_); + Identifier id_4 = new Identifier($id4.text); + id_4.setLine($id4.line); + VarDeclaration newVarDec4 = new VarDeclaration(id_); } ASSIGN e2 = expression { - newVarDec.setDefaultVal(e2.expRet); - $argRet.add(newVarDec); + newVarDec4.setDefaultVal($e2.expRet); + $argRet.add(newVarDec4); } )* RBRACK )? @@ -135,15 +144,15 @@ returnStatement returns [ReturnStatement returnStmtRet]: { $returnStmtRet = new ReturnStatement(); } - RETURN (e = expression{$returnStmtRet.setReturnExp(e.expRet);})? SEMICOLLON; + RETURN (e = expression{$returnStmtRet.setReturnExp($e.expRet);})? SEMICOLLON; ifStatement returns[IfStatement ifRet]: { $ifRet = new IfStatement(); } - if = IF + i = IF { - $ifRet.setLine($if.line); + $ifRet.setLine($i.line); } c1 = condition {$ifRet.addCondition($c1.conditionRet);} b = body {$ifRet.setThenBody($b.bodyRet);} @@ -209,7 +218,7 @@ loopDoStatement returns [LoopDoStatement loopDoRet]: l1 = LOOP DO l2 = loopBody { - $loopDoRet = new LoopDoStatement(l2.loopStmts, l2.loopExps, l2.loopRetStmt); + $loopDoRet = new LoopDoStatement($l2.loopStmts, $l2.loopExps, $l2.loopRetStmt); $loopDoRet.setLine($l1.line); } END; @@ -345,12 +354,12 @@ accessList returns [Expression accessListExp]: LBRACK e = expression {$accessListExp = $e.expRet;} RBRACK; statement returns [Statement stmtRet]: - if = ifStatement {$stmtRet = $if.ifRet;} + i = ifStatement {$stmtRet = $i.ifRet;} | loop = loopDoStatement {$stmtRet = $loop.loopDoRet;} - | for = forStatement {$stmtRet = $for.forStRet;} + | f = forStatement {$stmtRet = $f.forStRet;} | puts = putsStatement {$stmtRet = $puts.putRet;} | push = pushStatement {$stmtRet = $push.pushRet;} - | e = expression + | e = expression {$stmtRet = new ExpressionStatement($e.expRet);} { ExpressionStatement expStmt = new ExpressionStatement($e.expRet); $stmtRet = expStmt; @@ -379,8 +388,9 @@ expression returns [Expression expRet]: $expRet.setLine($a.line); } else{ - $e1.expRet.addAppendedExpression($e2.expRet) - $expRet = $e1.expRet; + AppendExpression appendExp = (AppendExpression) $e1.expRet; + appendExp.addAppendedExpression($e2.expRet); + $expRet = appendExp; } } | e3 = eqaulityExpression {$expRet = $e3.expRet;}; @@ -472,10 +482,12 @@ accessExpression returns [Expression expRet]: $expRet = $o.expRet; } else{ - $expRet = new AccessExpression($o.expRet, args); + AccessExpression accessExp = new AccessExpression($o.expRet, args); if(isMultiDimentional){ - $expRet.setDimentionalAccess(dimentions); + + accessExp.setDimentionalAccess(dimentions); } + $expRet = accessExp; } } ; @@ -489,10 +501,10 @@ otherExpression returns [Expression expRet]: } | lambda = lambdaFunction {$expRet = $lambda.lambdaRet;} | chop = chopStatement {$expRet = $chop.chopRet;} - | chomp = chompStatement {$expRet = chomp.chompRet;} + | chomp = chompStatement {$expRet = $chomp.chompRet;} | match = matchPatternStatement {$expRet = $match.matchPatRet;} | f = filterStatement {$expRet = $f.filterStatementRet;} - | len = lenStatement {$expRet = $len.lenRet;} + | len_ = lenStatement {$expRet = $len_.lenRet;} | LPAR (e = expression {$expRet = $e.expRet;})? RPAR; @@ -511,7 +523,7 @@ values returns [Value valRet]: b = boolValue {$valRet = $b.boolValRet;} | s = STRING_VALUE {$valRet = new StringValue($s.text); $valRet.setLine($s.line);} | i = INT_VALUE {$valRet = new IntValue($i.int);$valRet.setLine($i.line);} - | float = FLOAT_VALUE {$valRet = new FloatValue(Float.parseFloat($float.text));$valRet.setLine($float.line);} + | float_ = FLOAT_VALUE {$valRet = new FloatValue(Float.parseFloat($float_.text));$valRet.setLine($float_.line);} | l = listValue {$valRet = $l.listValRet;} | f = functionPointer {$valRet = $f.fpRet;}; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp index 9942363..23a5e52 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp @@ -153,7 +153,8 @@ forStatement range filterStatement matchPatternStatement -chopAndChompStatement +chopStatement +chompStatement assignment accessList statement @@ -174,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 503, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 1, 0, 1, 0, 5, 0, 75, 8, 0, 10, 0, 12, 0, 78, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 93, 8, 2, 10, 2, 12, 2, 96, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 107, 8, 2, 10, 2, 12, 2, 110, 9, 2, 1, 2, 1, 2, 3, 2, 114, 8, 2, 3, 2, 116, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 131, 8, 3, 10, 3, 12, 3, 134, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 5, 5, 149, 8, 5, 10, 5, 12, 5, 152, 9, 5, 3, 5, 154, 8, 5, 1, 6, 1, 6, 1, 6, 3, 6, 159, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 172, 8, 7, 10, 7, 12, 7, 175, 9, 7, 1, 7, 1, 7, 1, 7, 3, 7, 180, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 189, 8, 8, 1, 8, 1, 8, 3, 8, 193, 8, 8, 5, 8, 195, 8, 8, 10, 8, 12, 8, 198, 9, 8, 5, 8, 200, 8, 8, 10, 8, 12, 8, 203, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 238, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 245, 8, 13, 1, 13, 5, 13, 248, 8, 13, 10, 13, 12, 13, 251, 9, 13, 1, 13, 3, 13, 254, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 274, 8, 15, 10, 15, 12, 15, 277, 9, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 295, 8, 16, 10, 16, 12, 16, 298, 9, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 314, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 3, 19, 323, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 342, 8, 21, 1, 22, 5, 22, 345, 8, 22, 10, 22, 12, 22, 348, 9, 22, 1, 22, 3, 22, 351, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 361, 8, 23, 10, 23, 12, 23, 364, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 372, 8, 24, 1, 24, 1, 24, 1, 24, 5, 24, 377, 8, 24, 10, 24, 12, 24, 380, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 390, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 395, 8, 25, 10, 25, 12, 25, 398, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 406, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 411, 8, 26, 10, 26, 12, 26, 414, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 422, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 427, 8, 27, 10, 27, 12, 27, 430, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 436, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 442, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 450, 8, 29, 10, 29, 12, 29, 453, 9, 29, 1, 29, 5, 29, 456, 8, 29, 10, 29, 12, 29, 459, 9, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 470, 8, 30, 1, 30, 3, 30, 473, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 489, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 0, 5, 46, 48, 50, 52, 54, 36, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 0, 3, 1, 0, 30, 31, 1, 0, 43, 48, 1, 0, 38, 39, 532, 0, 76, 1, 0, 0, 0, 2, 81, 1, 0, 0, 0, 4, 88, 1, 0, 0, 0, 6, 119, 1, 0, 0, 0, 8, 137, 1, 0, 0, 0, 10, 153, 1, 0, 0, 0, 12, 155, 1, 0, 0, 0, 14, 162, 1, 0, 0, 0, 16, 201, 1, 0, 0, 0, 18, 204, 1, 0, 0, 0, 20, 211, 1, 0, 0, 0, 22, 217, 1, 0, 0, 0, 24, 226, 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 255, 1, 0, 0, 0, 30, 281, 1, 0, 0, 0, 32, 283, 1, 0, 0, 0, 34, 301, 1, 0, 0, 0, 36, 313, 1, 0, 0, 0, 38, 319, 1, 0, 0, 0, 40, 328, 1, 0, 0, 0, 42, 341, 1, 0, 0, 0, 44, 346, 1, 0, 0, 0, 46, 352, 1, 0, 0, 0, 48, 365, 1, 0, 0, 0, 50, 381, 1, 0, 0, 0, 52, 399, 1, 0, 0, 0, 54, 415, 1, 0, 0, 0, 56, 441, 1, 0, 0, 0, 58, 443, 1, 0, 0, 0, 60, 472, 1, 0, 0, 0, 62, 474, 1, 0, 0, 0, 64, 488, 1, 0, 0, 0, 66, 490, 1, 0, 0, 0, 68, 494, 1, 0, 0, 0, 70, 496, 1, 0, 0, 0, 72, 75, 3, 2, 1, 0, 73, 75, 3, 6, 3, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 80, 3, 8, 4, 0, 80, 1, 1, 0, 0, 0, 81, 82, 5, 1, 0, 0, 82, 83, 5, 62, 0, 0, 83, 84, 6, 1, -1, 0, 84, 85, 3, 4, 2, 0, 85, 86, 3, 44, 22, 0, 86, 87, 5, 2, 0, 0, 87, 3, 1, 0, 0, 0, 88, 115, 5, 49, 0, 0, 89, 94, 5, 62, 0, 0, 90, 91, 5, 55, 0, 0, 91, 93, 5, 62, 0, 0, 92, 90, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 98, 5, 55, 0, 0, 98, 99, 5, 51, 0, 0, 99, 100, 5, 62, 0, 0, 100, 101, 5, 48, 0, 0, 101, 108, 3, 46, 23, 0, 102, 103, 5, 55, 0, 0, 103, 104, 5, 62, 0, 0, 104, 105, 5, 48, 0, 0, 105, 107, 3, 46, 23, 0, 106, 102, 1, 0, 0, 0, 107, 110, 1, 0, 0, 0, 108, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 111, 1, 0, 0, 0, 110, 108, 1, 0, 0, 0, 111, 112, 5, 52, 0, 0, 112, 114, 1, 0, 0, 0, 113, 97, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 116, 1, 0, 0, 0, 115, 89, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 118, 5, 50, 0, 0, 118, 5, 1, 0, 0, 0, 119, 120, 5, 12, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 3, -1, 0, 122, 123, 5, 49, 0, 0, 123, 124, 5, 62, 0, 0, 124, 132, 5, 50, 0, 0, 125, 126, 5, 35, 0, 0, 126, 127, 3, 16, 8, 0, 127, 128, 5, 48, 0, 0, 128, 129, 3, 46, 23, 0, 129, 131, 1, 0, 0, 0, 130, 125, 1, 0, 0, 0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 132, 133, 1, 0, 0, 0, 133, 135, 1, 0, 0, 0, 134, 132, 1, 0, 0, 0, 135, 136, 5, 59, 0, 0, 136, 7, 1, 0, 0, 0, 137, 138, 5, 1, 0, 0, 138, 139, 5, 3, 0, 0, 139, 140, 6, 4, -1, 0, 140, 141, 5, 49, 0, 0, 141, 142, 5, 50, 0, 0, 142, 143, 3, 44, 22, 0, 143, 144, 5, 2, 0, 0, 144, 9, 1, 0, 0, 0, 145, 150, 3, 46, 23, 0, 146, 147, 5, 55, 0, 0, 147, 149, 3, 46, 23, 0, 148, 146, 1, 0, 0, 0, 149, 152, 1, 0, 0, 0, 150, 148, 1, 0, 0, 0, 150, 151, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 153, 145, 1, 0, 0, 0, 153, 154, 1, 0, 0, 0, 154, 11, 1, 0, 0, 0, 155, 156, 5, 7, 0, 0, 156, 158, 6, 6, -1, 0, 157, 159, 3, 46, 23, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 161, 5, 59, 0, 0, 161, 13, 1, 0, 0, 0, 162, 163, 5, 8, 0, 0, 163, 164, 6, 7, -1, 0, 164, 165, 3, 16, 8, 0, 165, 173, 3, 44, 22, 0, 166, 167, 5, 10, 0, 0, 167, 168, 6, 7, -1, 0, 168, 169, 3, 16, 8, 0, 169, 170, 3, 44, 22, 0, 170, 172, 1, 0, 0, 0, 171, 166, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 179, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 9, 0, 0, 177, 178, 6, 7, -1, 0, 178, 180, 3, 44, 22, 0, 179, 176, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 5, 2, 0, 0, 182, 15, 1, 0, 0, 0, 183, 184, 5, 49, 0, 0, 184, 185, 3, 46, 23, 0, 185, 196, 5, 50, 0, 0, 186, 188, 7, 0, 0, 0, 187, 189, 5, 49, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 3, 16, 8, 0, 191, 193, 5, 50, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 186, 1, 0, 0, 0, 195, 198, 1, 0, 0, 0, 196, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 200, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 199, 183, 1, 0, 0, 0, 200, 203, 1, 0, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 17, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 204, 205, 5, 4, 0, 0, 205, 206, 6, 9, -1, 0, 206, 207, 5, 49, 0, 0, 207, 208, 3, 46, 23, 0, 208, 209, 5, 50, 0, 0, 209, 210, 5, 59, 0, 0, 210, 19, 1, 0, 0, 0, 211, 212, 5, 6, 0, 0, 212, 213, 6, 10, -1, 0, 213, 214, 5, 49, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 5, 50, 0, 0, 216, 21, 1, 0, 0, 0, 217, 218, 5, 5, 0, 0, 218, 219, 6, 11, -1, 0, 219, 220, 5, 49, 0, 0, 220, 221, 3, 46, 23, 0, 221, 222, 5, 55, 0, 0, 222, 223, 3, 46, 23, 0, 223, 224, 5, 50, 0, 0, 224, 225, 5, 59, 0, 0, 225, 23, 1, 0, 0, 0, 226, 227, 5, 14, 0, 0, 227, 228, 5, 17, 0, 0, 228, 229, 6, 12, -1, 0, 229, 230, 3, 26, 13, 0, 230, 231, 5, 2, 0, 0, 231, 25, 1, 0, 0, 0, 232, 248, 3, 42, 21, 0, 233, 234, 5, 40, 0, 0, 234, 237, 6, 13, -1, 0, 235, 236, 5, 8, 0, 0, 236, 238, 3, 16, 8, 0, 237, 235, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 248, 5, 59, 0, 0, 240, 241, 5, 41, 0, 0, 241, 244, 6, 13, -1, 0, 242, 243, 5, 8, 0, 0, 243, 245, 3, 16, 8, 0, 244, 242, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 5, 59, 0, 0, 247, 232, 1, 0, 0, 0, 247, 233, 1, 0, 0, 0, 247, 240, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 254, 3, 12, 6, 0, 253, 252, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 27, 1, 0, 0, 0, 255, 256, 5, 15, 0, 0, 256, 257, 6, 14, -1, 0, 257, 258, 5, 62, 0, 0, 258, 259, 5, 16, 0, 0, 259, 260, 3, 30, 15, 0, 260, 261, 3, 26, 13, 0, 261, 262, 5, 2, 0, 0, 262, 29, 1, 0, 0, 0, 263, 264, 5, 49, 0, 0, 264, 265, 3, 46, 23, 0, 265, 266, 5, 57, 0, 0, 266, 267, 3, 46, 23, 0, 267, 268, 5, 50, 0, 0, 268, 282, 1, 0, 0, 0, 269, 270, 5, 51, 0, 0, 270, 275, 3, 46, 23, 0, 271, 272, 5, 55, 0, 0, 272, 274, 3, 46, 23, 0, 273, 271, 1, 0, 0, 0, 274, 277, 1, 0, 0, 0, 275, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 278, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 279, 5, 52, 0, 0, 279, 282, 1, 0, 0, 0, 280, 282, 5, 62, 0, 0, 281, 263, 1, 0, 0, 0, 281, 269, 1, 0, 0, 0, 281, 280, 1, 0, 0, 0, 282, 31, 1, 0, 0, 0, 283, 284, 6, 16, -1, 0, 284, 285, 5, 51, 0, 0, 285, 286, 3, 46, 23, 0, 286, 287, 5, 36, 0, 0, 287, 288, 5, 62, 0, 0, 288, 289, 5, 42, 0, 0, 289, 290, 3, 30, 15, 0, 290, 291, 5, 55, 0, 0, 291, 296, 3, 46, 23, 0, 292, 293, 5, 55, 0, 0, 293, 295, 3, 46, 23, 0, 294, 292, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 299, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 5, 52, 0, 0, 300, 33, 1, 0, 0, 0, 301, 302, 6, 17, -1, 0, 302, 303, 5, 62, 0, 0, 303, 304, 5, 56, 0, 0, 304, 305, 5, 13, 0, 0, 305, 306, 5, 49, 0, 0, 306, 307, 3, 46, 23, 0, 307, 308, 5, 50, 0, 0, 308, 35, 1, 0, 0, 0, 309, 310, 5, 18, 0, 0, 310, 314, 6, 18, -1, 0, 311, 312, 5, 19, 0, 0, 312, 314, 6, 18, -1, 0, 313, 309, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 316, 5, 49, 0, 0, 316, 317, 3, 46, 23, 0, 317, 318, 5, 50, 0, 0, 318, 37, 1, 0, 0, 0, 319, 320, 5, 62, 0, 0, 320, 322, 6, 19, -1, 0, 321, 323, 3, 40, 20, 0, 322, 321, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 7, 1, 0, 0, 325, 326, 3, 46, 23, 0, 326, 327, 5, 59, 0, 0, 327, 39, 1, 0, 0, 0, 328, 329, 5, 51, 0, 0, 329, 330, 3, 46, 23, 0, 330, 331, 5, 52, 0, 0, 331, 41, 1, 0, 0, 0, 332, 342, 3, 14, 7, 0, 333, 342, 3, 24, 12, 0, 334, 342, 3, 28, 14, 0, 335, 342, 3, 18, 9, 0, 336, 342, 3, 22, 11, 0, 337, 338, 3, 46, 23, 0, 338, 339, 5, 59, 0, 0, 339, 342, 1, 0, 0, 0, 340, 342, 3, 38, 19, 0, 341, 332, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 334, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 341, 336, 1, 0, 0, 0, 341, 337, 1, 0, 0, 0, 341, 340, 1, 0, 0, 0, 342, 43, 1, 0, 0, 0, 343, 345, 3, 42, 21, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 351, 3, 12, 6, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 45, 1, 0, 0, 0, 352, 353, 6, 23, -1, 0, 353, 354, 3, 48, 24, 0, 354, 362, 1, 0, 0, 0, 355, 356, 10, 2, 0, 0, 356, 357, 5, 37, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 6, 23, -1, 0, 359, 361, 1, 0, 0, 0, 360, 355, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 363, 1, 0, 0, 0, 363, 47, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 365, 366, 6, 24, -1, 0, 366, 367, 3, 50, 25, 0, 367, 378, 1, 0, 0, 0, 368, 371, 10, 2, 0, 0, 369, 372, 5, 24, 0, 0, 370, 372, 5, 25, 0, 0, 371, 369, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 374, 3, 50, 25, 0, 374, 375, 6, 24, -1, 0, 375, 377, 1, 0, 0, 0, 376, 368, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 49, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 382, 6, 25, -1, 0, 382, 383, 3, 52, 26, 0, 383, 396, 1, 0, 0, 0, 384, 389, 10, 2, 0, 0, 385, 390, 5, 28, 0, 0, 386, 390, 5, 29, 0, 0, 387, 390, 5, 26, 0, 0, 388, 390, 5, 27, 0, 0, 389, 385, 1, 0, 0, 0, 389, 386, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 389, 388, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 392, 3, 52, 26, 0, 392, 393, 6, 25, -1, 0, 393, 395, 1, 0, 0, 0, 394, 384, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 51, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 6, 26, -1, 0, 400, 401, 3, 54, 27, 0, 401, 412, 1, 0, 0, 0, 402, 405, 10, 2, 0, 0, 403, 406, 5, 20, 0, 0, 404, 406, 5, 21, 0, 0, 405, 403, 1, 0, 0, 0, 405, 404, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 3, 54, 27, 0, 408, 409, 6, 26, -1, 0, 409, 411, 1, 0, 0, 0, 410, 402, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 53, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 6, 27, -1, 0, 416, 417, 3, 56, 28, 0, 417, 428, 1, 0, 0, 0, 418, 421, 10, 2, 0, 0, 419, 422, 5, 22, 0, 0, 420, 422, 5, 23, 0, 0, 421, 419, 1, 0, 0, 0, 421, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 3, 56, 28, 0, 424, 425, 6, 27, -1, 0, 425, 427, 1, 0, 0, 0, 426, 418, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 55, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 436, 5, 32, 0, 0, 432, 436, 5, 21, 0, 0, 433, 436, 5, 33, 0, 0, 434, 436, 5, 34, 0, 0, 435, 431, 1, 0, 0, 0, 435, 432, 1, 0, 0, 0, 435, 433, 1, 0, 0, 0, 435, 434, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 3, 58, 29, 0, 438, 439, 6, 28, -1, 0, 439, 442, 1, 0, 0, 0, 440, 442, 3, 58, 29, 0, 441, 435, 1, 0, 0, 0, 441, 440, 1, 0, 0, 0, 442, 57, 1, 0, 0, 0, 443, 451, 3, 60, 30, 0, 444, 445, 5, 49, 0, 0, 445, 446, 6, 29, -1, 0, 446, 447, 3, 10, 5, 0, 447, 448, 5, 50, 0, 0, 448, 450, 1, 0, 0, 0, 449, 444, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 457, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 456, 3, 40, 20, 0, 455, 454, 1, 0, 0, 0, 456, 459, 1, 0, 0, 0, 457, 455, 1, 0, 0, 0, 457, 458, 1, 0, 0, 0, 458, 59, 1, 0, 0, 0, 459, 457, 1, 0, 0, 0, 460, 473, 3, 64, 32, 0, 461, 473, 5, 62, 0, 0, 462, 473, 3, 62, 31, 0, 463, 473, 3, 36, 18, 0, 464, 473, 3, 34, 17, 0, 465, 473, 3, 32, 16, 0, 466, 473, 3, 20, 10, 0, 467, 469, 5, 49, 0, 0, 468, 470, 3, 46, 23, 0, 469, 468, 1, 0, 0, 0, 469, 470, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 473, 5, 50, 0, 0, 472, 460, 1, 0, 0, 0, 472, 461, 1, 0, 0, 0, 472, 462, 1, 0, 0, 0, 472, 463, 1, 0, 0, 0, 472, 464, 1, 0, 0, 0, 472, 465, 1, 0, 0, 0, 472, 466, 1, 0, 0, 0, 472, 467, 1, 0, 0, 0, 473, 61, 1, 0, 0, 0, 474, 475, 5, 42, 0, 0, 475, 476, 6, 31, -1, 0, 476, 477, 3, 4, 2, 0, 477, 478, 5, 53, 0, 0, 478, 479, 3, 44, 22, 0, 479, 480, 5, 54, 0, 0, 480, 481, 3, 10, 5, 0, 481, 63, 1, 0, 0, 0, 482, 489, 3, 68, 34, 0, 483, 489, 5, 63, 0, 0, 484, 489, 5, 60, 0, 0, 485, 489, 5, 61, 0, 0, 486, 489, 3, 66, 33, 0, 487, 489, 3, 70, 35, 0, 488, 482, 1, 0, 0, 0, 488, 483, 1, 0, 0, 0, 488, 484, 1, 0, 0, 0, 488, 485, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 487, 1, 0, 0, 0, 489, 65, 1, 0, 0, 0, 490, 491, 5, 51, 0, 0, 491, 492, 3, 10, 5, 0, 492, 493, 5, 52, 0, 0, 493, 67, 1, 0, 0, 0, 494, 495, 7, 2, 0, 0, 495, 69, 1, 0, 0, 0, 496, 497, 5, 11, 0, 0, 497, 498, 5, 49, 0, 0, 498, 499, 5, 58, 0, 0, 499, 500, 5, 62, 0, 0, 500, 501, 5, 50, 0, 0, 501, 71, 1, 0, 0, 0, 45, 74, 76, 94, 108, 113, 115, 132, 150, 153, 158, 173, 179, 188, 192, 196, 201, 237, 244, 247, 249, 253, 275, 281, 296, 313, 322, 341, 346, 350, 362, 371, 378, 389, 396, 405, 412, 421, 428, 435, 441, 451, 457, 469, 472, 488] \ No newline at end of file +[4, 1, 65, 665, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 475, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 480, 8, 25, 10, 25, 12, 25, 483, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 499, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 504, 8, 26, 10, 26, 12, 26, 507, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 519, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 524, 8, 27, 10, 27, 12, 27, 527, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 539, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 544, 8, 28, 10, 28, 12, 28, 547, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 558, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 566, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 575, 8, 30, 10, 30, 12, 30, 578, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 583, 8, 30, 10, 30, 12, 30, 586, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 617, 8, 31, 1, 31, 3, 31, 620, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 645, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 656, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 5, 48, 50, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 699, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 464, 1, 0, 0, 0, 52, 484, 1, 0, 0, 0, 54, 508, 1, 0, 0, 0, 56, 528, 1, 0, 0, 0, 58, 565, 1, 0, 0, 0, 60, 567, 1, 0, 0, 0, 62, 619, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 644, 1, 0, 0, 0, 68, 646, 1, 0, 0, 0, 70, 655, 1, 0, 0, 0, 72, 657, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 6, 25, -1, 0, 465, 466, 3, 52, 26, 0, 466, 467, 6, 25, -1, 0, 467, 481, 1, 0, 0, 0, 468, 469, 10, 2, 0, 0, 469, 474, 6, 25, -1, 0, 470, 471, 5, 24, 0, 0, 471, 475, 6, 25, -1, 0, 472, 473, 5, 25, 0, 0, 473, 475, 6, 25, -1, 0, 474, 470, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 477, 3, 52, 26, 0, 477, 478, 6, 25, -1, 0, 478, 480, 1, 0, 0, 0, 479, 468, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 51, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 484, 485, 6, 26, -1, 0, 485, 486, 3, 54, 27, 0, 486, 487, 6, 26, -1, 0, 487, 505, 1, 0, 0, 0, 488, 489, 10, 2, 0, 0, 489, 498, 6, 26, -1, 0, 490, 491, 5, 28, 0, 0, 491, 499, 6, 26, -1, 0, 492, 493, 5, 29, 0, 0, 493, 499, 6, 26, -1, 0, 494, 495, 5, 26, 0, 0, 495, 499, 6, 26, -1, 0, 496, 497, 5, 27, 0, 0, 497, 499, 6, 26, -1, 0, 498, 490, 1, 0, 0, 0, 498, 492, 1, 0, 0, 0, 498, 494, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 3, 54, 27, 0, 501, 502, 6, 26, -1, 0, 502, 504, 1, 0, 0, 0, 503, 488, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 53, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 6, 27, -1, 0, 509, 510, 3, 56, 28, 0, 510, 511, 6, 27, -1, 0, 511, 525, 1, 0, 0, 0, 512, 513, 10, 2, 0, 0, 513, 518, 6, 27, -1, 0, 514, 515, 5, 20, 0, 0, 515, 519, 6, 27, -1, 0, 516, 517, 5, 21, 0, 0, 517, 519, 6, 27, -1, 0, 518, 514, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 3, 56, 28, 0, 521, 522, 6, 27, -1, 0, 522, 524, 1, 0, 0, 0, 523, 512, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 55, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 28, -1, 0, 529, 530, 3, 58, 29, 0, 530, 531, 6, 28, -1, 0, 531, 545, 1, 0, 0, 0, 532, 533, 10, 2, 0, 0, 533, 538, 6, 28, -1, 0, 534, 535, 5, 22, 0, 0, 535, 539, 6, 28, -1, 0, 536, 537, 5, 23, 0, 0, 537, 539, 6, 28, -1, 0, 538, 534, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 58, 29, 0, 541, 542, 6, 28, -1, 0, 542, 544, 1, 0, 0, 0, 543, 532, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 57, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 557, 6, 29, -1, 0, 549, 550, 5, 32, 0, 0, 550, 558, 6, 29, -1, 0, 551, 552, 5, 21, 0, 0, 552, 558, 6, 29, -1, 0, 553, 554, 5, 33, 0, 0, 554, 558, 6, 29, -1, 0, 555, 556, 5, 34, 0, 0, 556, 558, 6, 29, -1, 0, 557, 549, 1, 0, 0, 0, 557, 551, 1, 0, 0, 0, 557, 553, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 60, 30, 0, 560, 561, 6, 29, -1, 0, 561, 566, 1, 0, 0, 0, 562, 563, 3, 60, 30, 0, 563, 564, 6, 29, -1, 0, 564, 566, 1, 0, 0, 0, 565, 548, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 59, 1, 0, 0, 0, 567, 568, 6, 30, -1, 0, 568, 576, 3, 62, 31, 0, 569, 570, 5, 49, 0, 0, 570, 571, 3, 10, 5, 0, 571, 572, 6, 30, -1, 0, 572, 573, 5, 50, 0, 0, 573, 575, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 3, 42, 21, 0, 580, 581, 6, 30, -1, 0, 581, 583, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 587, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 588, 6, 30, -1, 0, 588, 61, 1, 0, 0, 0, 589, 590, 3, 66, 33, 0, 590, 591, 6, 31, -1, 0, 591, 620, 1, 0, 0, 0, 592, 593, 5, 62, 0, 0, 593, 620, 6, 31, -1, 0, 594, 595, 3, 64, 32, 0, 595, 596, 6, 31, -1, 0, 596, 620, 1, 0, 0, 0, 597, 598, 3, 36, 18, 0, 598, 599, 6, 31, -1, 0, 599, 620, 1, 0, 0, 0, 600, 601, 3, 38, 19, 0, 601, 602, 6, 31, -1, 0, 602, 620, 1, 0, 0, 0, 603, 604, 3, 34, 17, 0, 604, 605, 6, 31, -1, 0, 605, 620, 1, 0, 0, 0, 606, 607, 3, 32, 16, 0, 607, 608, 6, 31, -1, 0, 608, 620, 1, 0, 0, 0, 609, 610, 3, 20, 10, 0, 610, 611, 6, 31, -1, 0, 611, 620, 1, 0, 0, 0, 612, 616, 5, 49, 0, 0, 613, 614, 3, 48, 24, 0, 614, 615, 6, 31, -1, 0, 615, 617, 1, 0, 0, 0, 616, 613, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 5, 50, 0, 0, 619, 589, 1, 0, 0, 0, 619, 592, 1, 0, 0, 0, 619, 594, 1, 0, 0, 0, 619, 597, 1, 0, 0, 0, 619, 600, 1, 0, 0, 0, 619, 603, 1, 0, 0, 0, 619, 606, 1, 0, 0, 0, 619, 609, 1, 0, 0, 0, 619, 612, 1, 0, 0, 0, 620, 63, 1, 0, 0, 0, 621, 622, 5, 42, 0, 0, 622, 623, 3, 4, 2, 0, 623, 624, 5, 53, 0, 0, 624, 625, 3, 46, 23, 0, 625, 626, 5, 54, 0, 0, 626, 627, 3, 10, 5, 0, 627, 628, 6, 32, -1, 0, 628, 65, 1, 0, 0, 0, 629, 630, 3, 70, 35, 0, 630, 631, 6, 33, -1, 0, 631, 645, 1, 0, 0, 0, 632, 633, 5, 63, 0, 0, 633, 645, 6, 33, -1, 0, 634, 635, 5, 60, 0, 0, 635, 645, 6, 33, -1, 0, 636, 637, 5, 61, 0, 0, 637, 645, 6, 33, -1, 0, 638, 639, 3, 68, 34, 0, 639, 640, 6, 33, -1, 0, 640, 645, 1, 0, 0, 0, 641, 642, 3, 72, 36, 0, 642, 643, 6, 33, -1, 0, 643, 645, 1, 0, 0, 0, 644, 629, 1, 0, 0, 0, 644, 632, 1, 0, 0, 0, 644, 634, 1, 0, 0, 0, 644, 636, 1, 0, 0, 0, 644, 638, 1, 0, 0, 0, 644, 641, 1, 0, 0, 0, 645, 67, 1, 0, 0, 0, 646, 647, 5, 51, 0, 0, 647, 648, 3, 10, 5, 0, 648, 649, 5, 52, 0, 0, 649, 650, 6, 34, -1, 0, 650, 69, 1, 0, 0, 0, 651, 652, 5, 38, 0, 0, 652, 656, 6, 35, -1, 0, 653, 654, 5, 39, 0, 0, 654, 656, 6, 35, -1, 0, 655, 651, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 656, 71, 1, 0, 0, 0, 657, 658, 5, 11, 0, 0, 658, 659, 5, 49, 0, 0, 659, 660, 5, 58, 0, 0, 660, 661, 5, 62, 0, 0, 661, 662, 5, 50, 0, 0, 662, 663, 6, 36, -1, 0, 663, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 474, 481, 498, 505, 518, 525, 538, 545, 557, 565, 576, 584, 616, 619, 644, 655] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java index bce37ad..df2ed9f 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java @@ -1,6 +1,15 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + + import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; import org.antlr.v4.runtime.tree.TerminalNode; @@ -233,13 +242,25 @@ public class FunctionCraftBaseListener implements FunctionCraftListener { * *

The default implementation does nothing.

*/ - @Override public void enterChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { } + @Override public void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { } + @Override public void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } /** * {@inheritDoc} * diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java index dc61c14..0cf9463 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** @@ -144,7 +153,14 @@ public class FunctionCraftBaseVisitor extends AbstractParseTreeVisitor imp *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java index e98ce89..47512a5 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java index 9af4fd8..82b938a 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + import org.antlr.v4.runtime.tree.ParseTreeListener; /** @@ -188,15 +197,25 @@ public interface FunctionCraftListener extends ParseTreeListener { */ void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); /** - * Enter a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * Enter a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chompStatement}. * @param ctx the parse tree */ - void enterChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx); /** - * Exit a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * Exit a parse tree produced by {@link FunctionCraftParser#chompStatement}. * @param ctx the parse tree */ - void exitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx); /** * Enter a parse tree produced by {@link FunctionCraftParser#assignment}. * @param ctx the parse tree diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 1456a02..4a0579c 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; @@ -33,20 +42,20 @@ public class FunctionCraftParser extends Parser { RULE_ifStatement = 7, RULE_condition = 8, RULE_putsStatement = 9, RULE_lenStatement = 10, RULE_pushStatement = 11, RULE_loopDoStatement = 12, RULE_loopBody = 13, RULE_forStatement = 14, RULE_range = 15, RULE_filterStatement = 16, RULE_matchPatternStatement = 17, - RULE_chopAndChompStatement = 18, RULE_assignment = 19, RULE_accessList = 20, - RULE_statement = 21, RULE_body = 22, RULE_expression = 23, RULE_eqaulityExpression = 24, - RULE_relationalExpression = 25, RULE_additiveExpression = 26, RULE_multiplicativeExpression = 27, - RULE_preUnaryExpression = 28, RULE_accessExpression = 29, RULE_otherExpression = 30, - RULE_lambdaFunction = 31, RULE_values = 32, RULE_listValue = 33, RULE_boolValue = 34, - RULE_functionPointer = 35; + RULE_chopStatement = 18, RULE_chompStatement = 19, RULE_assignment = 20, + RULE_accessList = 21, RULE_statement = 22, RULE_body = 23, RULE_expression = 24, + RULE_eqaulityExpression = 25, RULE_relationalExpression = 26, RULE_additiveExpression = 27, + RULE_multiplicativeExpression = 28, RULE_preUnaryExpression = 29, RULE_accessExpression = 30, + RULE_otherExpression = 31, RULE_lambdaFunction = 32, RULE_values = 33, + RULE_listValue = 34, RULE_boolValue = 35, RULE_functionPointer = 36; private static String[] makeRuleNames() { return new String[] { "program", "functionDeclaration", "functionArgumentsDeclaration", "patternMatching", "main", "functionArguments", "returnStatement", "ifStatement", "condition", "putsStatement", "lenStatement", "pushStatement", "loopDoStatement", "loopBody", "forStatement", "range", "filterStatement", "matchPatternStatement", - "chopAndChompStatement", "assignment", "accessList", "statement", "body", - "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", + "chopStatement", "chompStatement", "assignment", "accessList", "statement", + "body", "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", "multiplicativeExpression", "preUnaryExpression", "accessExpression", "otherExpression", "lambdaFunction", "values", "listValue", "boolValue", "functionPointer" @@ -133,6 +142,10 @@ public FunctionCraftParser(TokenStream input) { @SuppressWarnings("CheckReturnValue") public static class ProgramContext extends ParserRuleContext { + public Program flProgram; + public FunctionDeclarationContext f; + public PatternMatchingContext p; + public MainContext m; public MainContext main() { return getRuleContext(MainContext.class,0); } @@ -174,25 +187,31 @@ public final ProgramContext program() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(76); + + ((ProgramContext)_localctx).flProgram = new Program(); + _localctx.flProgram.setLine(1); + + setState(83); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,1,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - setState(74); + setState(81); _errHandler.sync(this); switch (_input.LA(1)) { case DEF: { - setState(72); - functionDeclaration(); + setState(75); + ((ProgramContext)_localctx).f = functionDeclaration(); + _localctx.flProgram.addFunctionDeclaration(((ProgramContext)_localctx).f.functionDeclarationRet); } break; case PATTERN: { - setState(73); - patternMatching(); + setState(78); + ((ProgramContext)_localctx).p = patternMatching(); + _localctx.flProgram.addPatternDeclaration(((ProgramContext)_localctx).p.patternRet); } break; default: @@ -200,12 +219,13 @@ public final ProgramContext program() throws RecognitionException { } } } - setState(78); + setState(85); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,1,_ctx); } - setState(79); - main(); + setState(86); + ((ProgramContext)_localctx).m = main(); + _localctx.flProgram.setMain(((ProgramContext)_localctx).m.mainRet); } } catch (RecognitionException re) { @@ -221,7 +241,12 @@ public final ProgramContext program() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class FunctionDeclarationContext extends ParserRuleContext { - public Token IDENTIFIER; + public FunctionDeclaration functionDeclarationRet; + public Token def; + public Token id; + public FunctionArgumentsDeclarationContext f; + public BodyContext b; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { @@ -230,7 +255,6 @@ public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { public BodyContext body() { return getRuleContext(BodyContext.class,0); } - public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -256,16 +280,26 @@ public final FunctionDeclarationContext functionDeclaration() throws Recognition try { enterOuterAlt(_localctx, 1); { - setState(81); - match(DEF); - setState(82); - ((FunctionDeclarationContext)_localctx).IDENTIFIER = match(IDENTIFIER); - System.out.println("FuncDec: " + (((FunctionDeclarationContext)_localctx).IDENTIFIER!=null?((FunctionDeclarationContext)_localctx).IDENTIFIER.getText():null)); - setState(84); - functionArgumentsDeclaration(); - setState(85); - body(); - setState(86); + + ((FunctionDeclarationContext)_localctx).functionDeclarationRet = new FunctionDeclaration(); + + setState(90); + ((FunctionDeclarationContext)_localctx).def = match(DEF); + _localctx.functionDeclarationRet.setLine((((FunctionDeclarationContext)_localctx).def!=null?((FunctionDeclarationContext)_localctx).def.getLine():0)); + setState(92); + ((FunctionDeclarationContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getText():null)); + id_.setLine((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getLine():0)); + _localctx.functionDeclarationRet.setFunctionName(id_); + + setState(94); + ((FunctionDeclarationContext)_localctx).f = functionArgumentsDeclaration(); + _localctx.functionDeclarationRet.setArgs(((FunctionDeclarationContext)_localctx).f.argRet); + setState(96); + ((FunctionDeclarationContext)_localctx).b = body(); + _localctx.functionDeclarationRet.setBody(((FunctionDeclarationContext)_localctx).b.bodyRet); + setState(98); match(END); } } @@ -282,6 +316,13 @@ public final FunctionDeclarationContext functionDeclaration() throws Recognition @SuppressWarnings("CheckReturnValue") public static class FunctionArgumentsDeclarationContext extends ParserRuleContext { + public ArrayList argRet; + public Token id1; + public Token id2; + public Token id3; + public ExpressionContext e1; + public Token id4; + public ExpressionContext e2; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } @@ -297,13 +338,13 @@ public TerminalNode COMMA(int i) { public TerminalNode ASSIGN(int i) { return getToken(FunctionCraftParser.ASSIGN, i); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public List expression() { return getRuleContexts(ExpressionContext.class); } public ExpressionContext expression(int i) { return getRuleContext(ExpressionContext.class,i); } - public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public FunctionArgumentsDeclarationContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -331,69 +372,102 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() int _alt; enterOuterAlt(_localctx, 1); { - setState(88); + + ((FunctionArgumentsDeclarationContext)_localctx).argRet = new ArrayList(); + + setState(101); match(LPAR); - setState(115); + setState(135); _errHandler.sync(this); _la = _input.LA(1); if (_la==IDENTIFIER) { { - setState(89); - match(IDENTIFIER); - setState(94); + setState(102); + ((FunctionArgumentsDeclarationContext)_localctx).id1 = match(IDENTIFIER); + + Identifier id_ = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getText():null)); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); + VarDeclaration newVarDec = new VarDeclaration(id_); + _localctx.argRet.add(newVarDec); + + setState(109); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(90); + setState(104); match(COMMA); - setState(91); - match(IDENTIFIER); + setState(105); + ((FunctionArgumentsDeclarationContext)_localctx).id2 = match(IDENTIFIER); + + Identifier id_2 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getText():null)); + id_2.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); + VarDeclaration newVarDec2 = new VarDeclaration(id_2); + _localctx.argRet.add(newVarDec2); + } } } - setState(96); + setState(111); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); } - setState(113); + setState(133); _errHandler.sync(this); _la = _input.LA(1); if (_la==COMMA) { { - setState(97); + setState(112); match(COMMA); - setState(98); + setState(113); match(LBRACK); - setState(99); - match(IDENTIFIER); - setState(100); + setState(114); + ((FunctionArgumentsDeclarationContext)_localctx).id3 = match(IDENTIFIER); + + Identifier id_3 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getText():null)); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); + VarDeclaration newVarDec3 = new VarDeclaration(id_3); + + setState(116); match(ASSIGN); - setState(101); - expression(0); - setState(108); + setState(117); + ((FunctionArgumentsDeclarationContext)_localctx).e1 = expression(0); + + newVarDec3.setDefaultVal(((FunctionArgumentsDeclarationContext)_localctx).e1.expRet); + _localctx.argRet.add(newVarDec3); + + setState(128); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(102); + setState(119); match(COMMA); - setState(103); - match(IDENTIFIER); - setState(104); + setState(120); + ((FunctionArgumentsDeclarationContext)_localctx).id4 = match(IDENTIFIER); + + Identifier id_4 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getText():null)); + id_4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); + VarDeclaration newVarDec4 = new VarDeclaration(id_); + + setState(122); match(ASSIGN); - setState(105); - expression(0); + setState(123); + ((FunctionArgumentsDeclarationContext)_localctx).e2 = expression(0); + + newVarDec4.setDefaultVal(((FunctionArgumentsDeclarationContext)_localctx).e2.expRet); + _localctx.argRet.add(newVarDec4); + } } - setState(110); + setState(130); _errHandler.sync(this); _la = _input.LA(1); } - setState(111); + setState(131); match(RBRACK); } } @@ -401,7 +475,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() } } - setState(117); + setState(137); match(RPAR); } } @@ -418,29 +492,34 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() @SuppressWarnings("CheckReturnValue") public static class PatternMatchingContext extends ParserRuleContext { - public Token IDENTIFIER; + public PatternDeclaration patternRet; + public Token pat; + public Token patternName; + public Token targetVar; + public ConditionContext c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public TerminalNode PATTERN() { return getToken(FunctionCraftParser.PATTERN, 0); } public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } public TerminalNode IDENTIFIER(int i) { return getToken(FunctionCraftParser.IDENTIFIER, i); } - public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } - public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public List PATTERN_MATCHING_SEPARATOR() { return getTokens(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR); } public TerminalNode PATTERN_MATCHING_SEPARATOR(int i) { return getToken(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR, i); } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } public List condition() { return getRuleContexts(ConditionContext.class); } public ConditionContext condition(int i) { return getRuleContext(ConditionContext.class,i); } - public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } - public TerminalNode ASSIGN(int i) { - return getToken(FunctionCraftParser.ASSIGN, i); - } public List expression() { return getRuleContexts(ExpressionContext.class); } @@ -473,38 +552,56 @@ public final PatternMatchingContext patternMatching() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(119); - match(PATTERN); - setState(120); - ((PatternMatchingContext)_localctx).IDENTIFIER = match(IDENTIFIER); - System.out.println("PatternDec: " + (((PatternMatchingContext)_localctx).IDENTIFIER!=null?((PatternMatchingContext)_localctx).IDENTIFIER.getText():null)); - setState(122); + setState(139); + ((PatternMatchingContext)_localctx).pat = match(PATTERN); + + int patternLine = (((PatternMatchingContext)_localctx).pat!=null?((PatternMatchingContext)_localctx).pat.getLine():0); + + setState(141); + ((PatternMatchingContext)_localctx).patternName = match(IDENTIFIER); + + Identifier patternNameId = new Identifier((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getText():null)); + patternNameId.setLine((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getLine():0)); + + setState(143); match(LPAR); - setState(123); - ((PatternMatchingContext)_localctx).IDENTIFIER = match(IDENTIFIER); - setState(124); + setState(144); + ((PatternMatchingContext)_localctx).targetVar = match(IDENTIFIER); + + Identifier targetVariable = new Identifier((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getText():null)); + targetVariable.setLine((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getLine():0)); + ((PatternMatchingContext)_localctx).patternRet = new PatternDeclaration(patternNameId, targetVariable); + _localctx.patternRet.setLine(patternLine); + + setState(146); match(RPAR); - setState(132); + setState(156); _errHandler.sync(this); _la = _input.LA(1); while (_la==PATTERN_MATCHING_SEPARATOR) { { { - setState(125); + setState(147); match(PATTERN_MATCHING_SEPARATOR); - setState(126); - condition(); - setState(127); + setState(148); + ((PatternMatchingContext)_localctx).c = condition(); + + _localctx.patternRet.setConditions(((PatternMatchingContext)_localctx).c.conditionRet); + + setState(150); match(ASSIGN); - setState(128); - expression(0); + setState(151); + ((PatternMatchingContext)_localctx).e = expression(0); + + _localctx.patternRet.addReturnExp(((PatternMatchingContext)_localctx).e.expRet); + } } - setState(134); + setState(158); _errHandler.sync(this); _la = _input.LA(1); } - setState(135); + setState(159); match(SEMICOLLON); } } @@ -521,14 +618,17 @@ public final PatternMatchingContext patternMatching() throws RecognitionExceptio @SuppressWarnings("CheckReturnValue") public static class MainContext extends ParserRuleContext { + public MainDeclaration mainRet; + public Token m; + public BodyContext b; public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } - public TerminalNode MAIN() { return getToken(FunctionCraftParser.MAIN, 0); } public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode MAIN() { return getToken(FunctionCraftParser.MAIN, 0); } public BodyContext body() { return getRuleContext(BodyContext.class,0); } - public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public MainContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -554,18 +654,24 @@ public final MainContext main() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(137); + + ((MainContext)_localctx).mainRet = new MainDeclaration(); + + setState(162); match(DEF); - setState(138); - match(MAIN); - System.out.println("MAIN"); - setState(140); + setState(163); + ((MainContext)_localctx).m = match(MAIN); + + _localctx.mainRet.setLine((((MainContext)_localctx).m!=null?((MainContext)_localctx).m.getLine():0)); + + setState(165); match(LPAR); - setState(141); + setState(166); match(RPAR); - setState(142); - body(); - setState(143); + setState(167); + ((MainContext)_localctx).b = body(); + _localctx.mainRet.setBody(((MainContext)_localctx).b.bodyRet); + setState(169); match(END); } } @@ -582,6 +688,9 @@ public final MainContext main() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class FunctionArgumentsContext extends ParserRuleContext { + public ArrayList funcArgsRet; + public ExpressionContext e1; + public ExpressionContext e2; public List expression() { return getRuleContexts(ExpressionContext.class); } @@ -618,28 +727,37 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce int _alt; enterOuterAlt(_localctx, 1); { - setState(153); + + ((FunctionArgumentsContext)_localctx).funcArgsRet = new ArrayList(); + + setState(183); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: { - setState(145); - expression(0); - setState(150); + setState(172); + ((FunctionArgumentsContext)_localctx).e1 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e1.expRet); + + setState(180); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(146); + setState(174); match(COMMA); - setState(147); - expression(0); + setState(175); + ((FunctionArgumentsContext)_localctx).e2 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e2.expRet); + } } } - setState(152); + setState(182); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } @@ -661,6 +779,8 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce @SuppressWarnings("CheckReturnValue") public static class ReturnStatementContext extends ParserRuleContext { + public ReturnStatement returnStmtRet; + public ExpressionContext e; public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public ExpressionContext expression() { @@ -692,20 +812,23 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(155); + + ((ReturnStatementContext)_localctx).returnStmtRet = new ReturnStatement(); + + setState(186); match(RETURN); - System.out.println("RETURN"); - setState(158); + setState(190); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(157); - expression(0); + setState(187); + ((ReturnStatementContext)_localctx).e = expression(0); + _localctx.returnStmtRet.setReturnExp(((ReturnStatementContext)_localctx).e.expRet); } } - setState(160); + setState(192); match(SEMICOLLON); } } @@ -722,6 +845,14 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio @SuppressWarnings("CheckReturnValue") public static class IfStatementContext extends ParserRuleContext { + public IfStatement ifRet; + public Token i; + public ConditionContext c1; + public BodyContext b; + public ConditionContext c2; + public BodyContext b1; + public BodyContext b2; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } public List condition() { return getRuleContexts(ConditionContext.class); @@ -735,7 +866,6 @@ public List body() { public BodyContext body(int i) { return getRuleContext(BodyContext.class,i); } - public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public List ELSEIF() { return getTokens(FunctionCraftParser.ELSEIF); } public TerminalNode ELSEIF(int i) { return getToken(FunctionCraftParser.ELSEIF, i); @@ -767,46 +897,66 @@ public final IfStatementContext ifStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(162); - match(IF); - System.out.println("Decision: IF"); - setState(164); - condition(); - setState(165); - body(); - setState(173); + + ((IfStatementContext)_localctx).ifRet = new IfStatement(); + + setState(195); + ((IfStatementContext)_localctx).i = match(IF); + + _localctx.ifRet.setLine((((IfStatementContext)_localctx).i!=null?((IfStatementContext)_localctx).i.getLine():0)); + + setState(197); + ((IfStatementContext)_localctx).c1 = condition(); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c1.conditionRet); + setState(199); + ((IfStatementContext)_localctx).b = body(); + _localctx.ifRet.setThenBody(((IfStatementContext)_localctx).b.bodyRet); + + ArrayList tempArray = new ArrayList(); + + setState(210); _errHandler.sync(this); _la = _input.LA(1); while (_la==ELSEIF) { { { - setState(166); + setState(202); match(ELSEIF); - System.out.println("Decision: ELSE IF"); - setState(168); - condition(); - setState(169); - body(); + setState(203); + ((IfStatementContext)_localctx).c2 = condition(); + + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); + + setState(205); + ((IfStatementContext)_localctx).b1 = body(); + + tempArray.addAll(((IfStatementContext)_localctx).b1.bodyRet); + } } - setState(175); + setState(212); _errHandler.sync(this); _la = _input.LA(1); } - setState(179); + setState(217); _errHandler.sync(this); _la = _input.LA(1); if (_la==ELSE) { { - setState(176); + setState(213); match(ELSE); - System.out.println("Decision: ELSE"); - setState(178); - body(); + setState(214); + ((IfStatementContext)_localctx).b2 = body(); + + tempArray.addAll(((IfStatementContext)_localctx).b2.bodyRet); + } } - setState(181); + + _localctx.ifRet.setElseBody(tempArray); + + setState(220); match(END); } } @@ -823,25 +973,22 @@ public final IfStatementContext ifStatement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class ConditionContext extends ParserRuleContext { + public ArrayList conditionRet; + public ExpressionContext e; + public ConditionContext c; public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } public TerminalNode LPAR(int i) { return getToken(FunctionCraftParser.LPAR, i); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } public TerminalNode RPAR(int i) { return getToken(FunctionCraftParser.RPAR, i); } - public List condition() { - return getRuleContexts(ConditionContext.class); + public List expression() { + return getRuleContexts(ExpressionContext.class); } - public ConditionContext condition(int i) { - return getRuleContext(ConditionContext.class,i); + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); } public List AND() { return getTokens(FunctionCraftParser.AND); } public TerminalNode AND(int i) { @@ -851,6 +998,12 @@ public TerminalNode AND(int i) { public TerminalNode OR(int i) { return getToken(FunctionCraftParser.OR, i); } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } public ConditionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -878,27 +1031,31 @@ public final ConditionContext condition() throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(201); + + ((ConditionContext)_localctx).conditionRet = new ArrayList(); + + setState(243); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,15,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(183); + setState(223); match(LPAR); - setState(184); - expression(0); - setState(185); + setState(224); + ((ConditionContext)_localctx).e = expression(0); + _localctx.conditionRet.add(((ConditionContext)_localctx).e.expRet); + setState(226); match(RPAR); - setState(196); + setState(238); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,14,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(186); + setState(227); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -908,24 +1065,27 @@ public final ConditionContext condition() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(188); + setState(229); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: { - setState(187); + setState(228); match(LPAR); } break; } - setState(190); - condition(); - setState(192); + setState(231); + ((ConditionContext)_localctx).c = condition(); + + _localctx.conditionRet.addAll(((ConditionContext)_localctx).c.conditionRet); + + setState(234); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: { - setState(191); + setState(233); match(RPAR); } break; @@ -933,14 +1093,14 @@ public final ConditionContext condition() throws RecognitionException { } } } - setState(198); + setState(240); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,14,_ctx); } } } } - setState(203); + setState(245); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,15,_ctx); } @@ -959,13 +1119,16 @@ public final ConditionContext condition() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class PutsStatementContext extends ParserRuleContext { - public TerminalNode PUTS() { return getToken(FunctionCraftParser.PUTS, 0); } + public PutStatement putRet; + public Token p; + public ExpressionContext e; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUTS() { return getToken(FunctionCraftParser.PUTS, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } - public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public PutsStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -991,16 +1154,19 @@ public final PutsStatementContext putsStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(204); - match(PUTS); - System.out.println("Built-In: PUTS"); - setState(206); + setState(246); + ((PutsStatementContext)_localctx).p = match(PUTS); + setState(247); match(LPAR); - setState(207); - expression(0); - setState(208); + setState(248); + ((PutsStatementContext)_localctx).e = expression(0); + + ((PutsStatementContext)_localctx).putRet = new PutStatement(((PutsStatementContext)_localctx).e.expRet); + _localctx.putRet.setLine((((PutsStatementContext)_localctx).p!=null?((PutsStatementContext)_localctx).p.getLine():0)); + + setState(250); match(RPAR); - setState(209); + setState(251); match(SEMICOLLON); } } @@ -1017,12 +1183,15 @@ public final PutsStatementContext putsStatement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class LenStatementContext extends ParserRuleContext { - public TerminalNode LEN() { return getToken(FunctionCraftParser.LEN, 0); } + public LenStatement lenRet; + public Token l; + public ExpressionContext e; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode LEN() { return getToken(FunctionCraftParser.LEN, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public LenStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1048,14 +1217,17 @@ public final LenStatementContext lenStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(211); - match(LEN); - System.out.println("Built-In: LEN"); - setState(213); + setState(253); + ((LenStatementContext)_localctx).l = match(LEN); + setState(254); match(LPAR); - setState(214); - expression(0); - setState(215); + setState(255); + ((LenStatementContext)_localctx).e = expression(0); + + ((LenStatementContext)_localctx).lenRet = new LenStatement(((LenStatementContext)_localctx).e.expRet); + _localctx.lenRet.setLine((((LenStatementContext)_localctx).l!=null?((LenStatementContext)_localctx).l.getLine():0)); + + setState(257); match(RPAR); } } @@ -1072,17 +1244,21 @@ public final LenStatementContext lenStatement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class PushStatementContext extends ParserRuleContext { - public TerminalNode PUSH() { return getToken(FunctionCraftParser.PUSH, 0); } + public PushStatement pushRet; + public Token p; + public ExpressionContext e1; + public ExpressionContext e2; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COMMA() { return getToken(FunctionCraftParser.COMMA, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUSH() { return getToken(FunctionCraftParser.PUSH, 0); } public List expression() { return getRuleContexts(ExpressionContext.class); } public ExpressionContext expression(int i) { return getRuleContext(ExpressionContext.class,i); } - public TerminalNode COMMA() { return getToken(FunctionCraftParser.COMMA, 0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } - public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public PushStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1108,21 +1284,24 @@ public final PushStatementContext pushStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(217); - match(PUSH); - System.out.println("Built-In: PUSH"); - setState(219); + setState(259); + ((PushStatementContext)_localctx).p = match(PUSH); + setState(260); match(LPAR); - setState(220); - expression(0); - setState(221); + setState(261); + ((PushStatementContext)_localctx).e1 = expression(0); + setState(262); match(COMMA); - setState(222); - expression(0); - setState(223); + setState(263); + ((PushStatementContext)_localctx).e2 = expression(0); + setState(264); match(RPAR); - setState(224); + setState(265); match(SEMICOLLON); + + ((PushStatementContext)_localctx).pushRet = new PushStatement(((PushStatementContext)_localctx).e1.expRet, ((PushStatementContext)_localctx).e2.expRet); + _localctx.pushRet.setLine((((PushStatementContext)_localctx).p!=null?((PushStatementContext)_localctx).p.getLine():0)); + } } catch (RecognitionException re) { @@ -1138,12 +1317,15 @@ public final PushStatementContext pushStatement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class LoopDoStatementContext extends ParserRuleContext { - public TerminalNode LOOP() { return getToken(FunctionCraftParser.LOOP, 0); } + public LoopDoStatement loopDoRet; + public Token l1; + public LoopBodyContext l2; public TerminalNode DO() { return getToken(FunctionCraftParser.DO, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode LOOP() { return getToken(FunctionCraftParser.LOOP, 0); } public LoopBodyContext loopBody() { return getRuleContext(LoopBodyContext.class,0); } - public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public LoopDoStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1169,14 +1351,17 @@ public final LoopDoStatementContext loopDoStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(226); - match(LOOP); - setState(227); + setState(268); + ((LoopDoStatementContext)_localctx).l1 = match(LOOP); + setState(269); match(DO); - System.out.println("Loop: DO"); - setState(229); - loopBody(); - setState(230); + setState(270); + ((LoopDoStatementContext)_localctx).l2 = loopBody(); + + ((LoopDoStatementContext)_localctx).loopDoRet = new LoopDoStatement(((LoopDoStatementContext)_localctx).l2.loopStmts, ((LoopDoStatementContext)_localctx).l2.loopExps, ((LoopDoStatementContext)_localctx).l2.loopRetStmt); + _localctx.loopDoRet.setLine((((LoopDoStatementContext)_localctx).l1!=null?((LoopDoStatementContext)_localctx).l1.getLine():0)); + + setState(272); match(END); } } @@ -1193,12 +1378,13 @@ public final LoopDoStatementContext loopDoStatement() throws RecognitionExceptio @SuppressWarnings("CheckReturnValue") public static class LoopBodyContext extends ParserRuleContext { - public List statement() { - return getRuleContexts(StatementContext.class); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } + public ArrayList loopStmts; + public ArrayList loopExps; + public ReturnStatement loopRetStmt; + public StatementContext s; + public ConditionContext c1; + public ConditionContext c2; + public ReturnStatementContext r; public List BREAK() { return getTokens(FunctionCraftParser.BREAK); } public TerminalNode BREAK(int i) { return getToken(FunctionCraftParser.BREAK, i); @@ -1211,6 +1397,12 @@ public TerminalNode SEMICOLLON(int i) { public TerminalNode NEXT(int i) { return getToken(FunctionCraftParser.NEXT, i); } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } public ReturnStatementContext returnStatement() { return getRuleContext(ReturnStatementContext.class,0); } @@ -1250,12 +1442,17 @@ public final LoopBodyContext loopBody() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(249); + + ((LoopBodyContext)_localctx).loopStmts = new ArrayList(); + ((LoopBodyContext)_localctx).loopExps = new ArrayList(); + ((LoopBodyContext)_localctx).loopRetStmt = new ReturnStatement(); + + setState(296); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { { - setState(247); + setState(294); _errHandler.sync(this); switch (_input.LA(1)) { case PUTS: @@ -1281,49 +1478,50 @@ public final LoopBodyContext loopBody() throws RecognitionException { case IDENTIFIER: case STRING_VALUE: { - setState(232); - statement(); + setState(275); + ((LoopBodyContext)_localctx).s = statement(); + _localctx.loopStmts.add(((LoopBodyContext)_localctx).s.stmtRet); } break; case BREAK: { - setState(233); + setState(278); match(BREAK); - System.out.println("Control: BREAK"); - setState(237); + setState(283); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(235); + setState(279); match(IF); - setState(236); - condition(); + setState(280); + ((LoopBodyContext)_localctx).c1 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c1.conditionRet); } } - setState(239); + setState(285); match(SEMICOLLON); } break; case NEXT: { - setState(240); + setState(286); match(NEXT); - System.out.println("Control: NEXT"); - setState(244); + setState(291); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(242); + setState(287); match(IF); - setState(243); - condition(); + setState(288); + ((LoopBodyContext)_localctx).c2 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c2.conditionRet); } } - setState(246); + setState(293); match(SEMICOLLON); } break; @@ -1331,17 +1529,18 @@ public final LoopBodyContext loopBody() throws RecognitionException { throw new NoViableAltException(this); } } - setState(251); + setState(298); _errHandler.sync(this); _la = _input.LA(1); } - setState(253); + setState(302); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(252); - returnStatement(); + setState(299); + ((LoopBodyContext)_localctx).r = returnStatement(); + ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet; } } @@ -1360,16 +1559,21 @@ public final LoopBodyContext loopBody() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class ForStatementContext extends ParserRuleContext { + public ForStatement forStRet; + public Token f; + public Token id; + public RangeContext r; + public LoopBodyContext l; + public TerminalNode IN() { return getToken(FunctionCraftParser.IN, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public TerminalNode FOR() { return getToken(FunctionCraftParser.FOR, 0); } public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } - public TerminalNode IN() { return getToken(FunctionCraftParser.IN, 0); } public RangeContext range() { return getRuleContext(RangeContext.class,0); } public LoopBodyContext loopBody() { return getRuleContext(LoopBodyContext.class,0); } - public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public ForStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1395,19 +1599,24 @@ public final ForStatementContext forStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(255); - match(FOR); - System.out.println("Loop: FOR"); - setState(257); - match(IDENTIFIER); - setState(258); + setState(304); + ((ForStatementContext)_localctx).f = match(FOR); + setState(305); + ((ForStatementContext)_localctx).id = match(IDENTIFIER); + setState(306); match(IN); - setState(259); - range(); - setState(260); - loopBody(); - setState(261); + setState(307); + ((ForStatementContext)_localctx).r = range(); + setState(308); + ((ForStatementContext)_localctx).l = loopBody(); + setState(309); match(END); + + ((ForStatementContext)_localctx).forStRet = new ForStatement(new Identifier((((ForStatementContext)_localctx).id!=null?((ForStatementContext)_localctx).id.getText():null)), + ((ForStatementContext)_localctx).r.rangeRet, ((ForStatementContext)_localctx).l.loopExps, ((ForStatementContext)_localctx).l.loopStmts, + ((ForStatementContext)_localctx).l.loopRetStmt); + _localctx.forStRet.setLine((((ForStatementContext)_localctx).f!=null?((ForStatementContext)_localctx).f.getLine():0)); + } } catch (RecognitionException re) { @@ -1423,15 +1632,21 @@ public final ForStatementContext forStatement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class RangeContext extends ParserRuleContext { + public ArrayList rangeRet; + public ExpressionContext e1; + public ExpressionContext e2; + public ExpressionContext e3; + public ExpressionContext e4; + public Token id; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode DOUBLEDOT() { return getToken(FunctionCraftParser.DOUBLEDOT, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public List expression() { return getRuleContexts(ExpressionContext.class); } public ExpressionContext expression(int i) { return getRuleContext(ExpressionContext.class,i); } - public TerminalNode DOUBLEDOT() { return getToken(FunctionCraftParser.DOUBLEDOT, 0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } @@ -1463,22 +1678,31 @@ public final RangeContext range() throws RecognitionException { enterRule(_localctx, 30, RULE_range); int _la; try { - setState(281); + setState(337); _errHandler.sync(this); switch (_input.LA(1)) { case LPAR: enterOuterAlt(_localctx, 1); { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + { - setState(263); + setState(313); match(LPAR); - setState(264); - expression(0); - setState(265); + setState(314); + ((RangeContext)_localctx).e1 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e1.expRet); + + setState(316); match(DOUBLEDOT); - setState(266); - expression(0); - setState(267); + setState(317); + ((RangeContext)_localctx).e2 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e2.expRet); + + setState(319); match(RPAR); } } @@ -1487,29 +1711,35 @@ public final RangeContext range() throws RecognitionException { enterOuterAlt(_localctx, 2); { { - setState(269); + setState(321); match(LBRACK); { - setState(270); - expression(0); - setState(275); + setState(322); + ((RangeContext)_localctx).e3 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e3.expRet); + + setState(330); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(271); + setState(324); match(COMMA); - setState(272); - expression(0); + setState(325); + ((RangeContext)_localctx).e4 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e4.expRet); + } } - setState(277); + setState(332); _errHandler.sync(this); _la = _input.LA(1); } } - setState(278); + setState(333); match(RBRACK); } } @@ -1517,8 +1747,12 @@ public final RangeContext range() throws RecognitionException { case IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(280); - match(IDENTIFIER); + setState(335); + ((RangeContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getText():null)); + _localctx.rangeRet.add(id_); + } break; default: @@ -1538,6 +1772,20 @@ public final RangeContext range() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class FilterStatementContext extends ParserRuleContext { + public FilterStatement filterStatementRet; + public Token brack; + public ExpressionContext e1; + public Token id; + public RangeContext r; + public ExpressionContext e2; + public ExpressionContext e3; + public TerminalNode SEPARATOR() { return getToken(FunctionCraftParser.SEPARATOR, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } public List expression() { return getRuleContexts(ExpressionContext.class); @@ -1545,17 +1793,10 @@ public List expression() { public ExpressionContext expression(int i) { return getRuleContext(ExpressionContext.class,i); } - public TerminalNode SEPARATOR() { return getToken(FunctionCraftParser.SEPARATOR, 0); } public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } - public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } public RangeContext range() { return getRuleContext(RangeContext.class,0); } - public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(FunctionCraftParser.COMMA, i); - } - public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public FilterStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1582,40 +1823,55 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - System.out.println("Structure: FILTER"); - setState(284); - match(LBRACK); - setState(285); - expression(0); - setState(286); + + ArrayList conditionExps = new ArrayList(); + + setState(340); + ((FilterStatementContext)_localctx).brack = match(LBRACK); + setState(341); + ((FilterStatementContext)_localctx).e1 = expression(0); + setState(342); match(SEPARATOR); - setState(287); - match(IDENTIFIER); - setState(288); + setState(343); + ((FilterStatementContext)_localctx).id = match(IDENTIFIER); + setState(344); match(ARROW); - setState(289); - range(); - setState(290); + setState(345); + ((FilterStatementContext)_localctx).r = range(); + setState(346); match(COMMA); - setState(291); - expression(0); - setState(296); + setState(347); + ((FilterStatementContext)_localctx).e2 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e2.expRet); + + setState(355); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(292); + setState(349); match(COMMA); - setState(293); - expression(0); + setState(350); + ((FilterStatementContext)_localctx).e3 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e3.expRet); + } } - setState(298); + setState(357); _errHandler.sync(this); _la = _input.LA(1); } - setState(299); + + Identifier id_ = new Identifier((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getText():null)); + id_.setLine((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getLine():0)); + ((FilterStatementContext)_localctx).filterStatementRet = new FilterStatement(id_, ((FilterStatementContext)_localctx).e1.expRet, + conditionExps, ((FilterStatementContext)_localctx).r.rangeRet); + _localctx.filterStatementRet.setLine((((FilterStatementContext)_localctx).brack!=null?((FilterStatementContext)_localctx).brack.getLine():0)); + + setState(359); match(RBRACK); } } @@ -1632,14 +1888,18 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio @SuppressWarnings("CheckReturnValue") public static class MatchPatternStatementContext extends ParserRuleContext { - public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public MatchPatternStatement matchPatRet; + public Token id; + public Token m; + public ExpressionContext e; public TerminalNode DOT() { return getToken(FunctionCraftParser.DOT, 0); } - public TerminalNode MATCH() { return getToken(FunctionCraftParser.MATCH, 0); } public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode MATCH() { return getToken(FunctionCraftParser.MATCH, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } public MatchPatternStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1665,19 +1925,23 @@ public final MatchPatternStatementContext matchPatternStatement() throws Recogni try { enterOuterAlt(_localctx, 1); { - System.out.println("Built-In: MATCH"); - setState(302); - match(IDENTIFIER); - setState(303); + setState(361); + ((MatchPatternStatementContext)_localctx).id = match(IDENTIFIER); + setState(362); match(DOT); - setState(304); - match(MATCH); - setState(305); + setState(363); + ((MatchPatternStatementContext)_localctx).m = match(MATCH); + setState(364); match(LPAR); - setState(306); - expression(0); - setState(307); + setState(365); + ((MatchPatternStatementContext)_localctx).e = expression(0); + setState(366); match(RPAR); + + Identifier id_ = new Identifier((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getText():null)); + ((MatchPatternStatementContext)_localctx).matchPatRet = new MatchPatternStatement(id_, ((MatchPatternStatementContext)_localctx).e.expRet); + _localctx.matchPatRet.setLine((((MatchPatternStatementContext)_localctx).m!=null?((MatchPatternStatementContext)_localctx).m.getLine():0)); + } } catch (RecognitionException re) { @@ -1692,65 +1956,114 @@ public final MatchPatternStatementContext matchPatternStatement() throws Recogni } @SuppressWarnings("CheckReturnValue") - public static class ChopAndChompStatementContext extends ParserRuleContext { + public static class ChopStatementContext extends ParserRuleContext { + public ChopStatement chopRet; + public Token c; + public ExpressionContext e; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOP() { return getToken(FunctionCraftParser.CHOP, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } + public ChopStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chopStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChopStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChopStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChopStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChopStatementContext chopStatement() throws RecognitionException { + ChopStatementContext _localctx = new ChopStatementContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_chopStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(369); + ((ChopStatementContext)_localctx).c = match(CHOP); + setState(370); + match(LPAR); + setState(371); + ((ChopStatementContext)_localctx).e = expression(0); + setState(372); + match(RPAR); + + ((ChopStatementContext)_localctx).chopRet = new ChopStatement(((ChopStatementContext)_localctx).e.expRet); + _localctx.chopRet.setLine((((ChopStatementContext)_localctx).c!=null?((ChopStatementContext)_localctx).c.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChompStatementContext extends ParserRuleContext { + public ChompStatement chompRet; + public Token c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } - public TerminalNode CHOP() { return getToken(FunctionCraftParser.CHOP, 0); } public TerminalNode CHOMP() { return getToken(FunctionCraftParser.CHOMP, 0); } - public ChopAndChompStatementContext(ParserRuleContext parent, int invokingState) { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ChompStatementContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_chopAndChompStatement; } + @Override public int getRuleIndex() { return RULE_chompStatement; } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChopAndChompStatement(this); + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChompStatement(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChopAndChompStatement(this); + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChompStatement(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChopAndChompStatement(this); + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChompStatement(this); else return visitor.visitChildren(this); } } - public final ChopAndChompStatementContext chopAndChompStatement() throws RecognitionException { - ChopAndChompStatementContext _localctx = new ChopAndChompStatementContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_chopAndChompStatement); + public final ChompStatementContext chompStatement() throws RecognitionException { + ChompStatementContext _localctx = new ChompStatementContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_chompStatement); try { enterOuterAlt(_localctx, 1); { - setState(313); - _errHandler.sync(this); - switch (_input.LA(1)) { - case CHOP: - { - setState(309); - match(CHOP); - System.out.println("Built-In: CHOP"); - } - break; - case CHOMP: - { - setState(311); - match(CHOMP); - System.out.println("Built-In: CHOMP"); - } - break; - default: - throw new NoViableAltException(this); - } - setState(315); + setState(375); + ((ChompStatementContext)_localctx).c = match(CHOMP); + setState(376); match(LPAR); - setState(316); - expression(0); - setState(317); + setState(377); + ((ChompStatementContext)_localctx).e = expression(0); + setState(378); match(RPAR); + + ((ChompStatementContext)_localctx).chompRet = new ChompStatement(((ChompStatementContext)_localctx).e.expRet); + _localctx.chompRet.setLine((((ChompStatementContext)_localctx).c!=null?((ChompStatementContext)_localctx).c.getLine():0)); + } } catch (RecognitionException re) { @@ -1766,12 +2079,21 @@ public final ChopAndChompStatementContext chopAndChompStatement() throws Recogni @SuppressWarnings("CheckReturnValue") public static class AssignmentContext extends ParserRuleContext { - public Token IDENTIFIER; + public AssignStatement assignRet; + public Token id; + public AccessListContext a; + public Token as; + public Token pl; + public Token mi; + public Token di; + public Token mu; + public Token mo; + public ExpressionContext e; + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } public TerminalNode PLUS_ASSIGN() { return getToken(FunctionCraftParser.PLUS_ASSIGN, 0); } public TerminalNode MINUS_ASSIGN() { return getToken(FunctionCraftParser.MINUS_ASSIGN, 0); } @@ -1802,38 +2124,90 @@ public T accept(ParseTreeVisitor visitor) { public final AssignmentContext assignment() throws RecognitionException { AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_assignment); + enterRule(_localctx, 40, RULE_assignment); int _la; try { enterOuterAlt(_localctx, 1); { - setState(319); - ((AssignmentContext)_localctx).IDENTIFIER = match(IDENTIFIER); - System.out.println("Assignment: " + (((AssignmentContext)_localctx).IDENTIFIER!=null?((AssignmentContext)_localctx).IDENTIFIER.getText():null)); - setState(322); + + boolean access = false; + int line; + AssignOperator op; + + setState(382); + ((AssignmentContext)_localctx).id = match(IDENTIFIER); + setState(386); _errHandler.sync(this); _la = _input.LA(1); if (_la==LBRACK) { { - setState(321); - accessList(); + setState(383); + ((AssignmentContext)_localctx).a = accessList(); + access = true; } } - setState(324); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 554153860399104L) != 0)) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); + setState(400); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ASSIGN: + { + setState(388); + ((AssignmentContext)_localctx).as = match(ASSIGN); + op = AssignOperator.ASSIGN;line = (((AssignmentContext)_localctx).as!=null?((AssignmentContext)_localctx).as.getLine():0); + } + break; + case PLUS_ASSIGN: + { + setState(390); + ((AssignmentContext)_localctx).pl = match(PLUS_ASSIGN); + op = AssignOperator.PLUS_ASSIGN;line = (((AssignmentContext)_localctx).pl!=null?((AssignmentContext)_localctx).pl.getLine():0); + } + break; + case MINUS_ASSIGN: + { + setState(392); + ((AssignmentContext)_localctx).mi = match(MINUS_ASSIGN); + op = AssignOperator.MINUS_ASSIGN;line = (((AssignmentContext)_localctx).mi!=null?((AssignmentContext)_localctx).mi.getLine():0); + } + break; + case DIVIDE_ASSIGN: + { + setState(394); + ((AssignmentContext)_localctx).di = match(DIVIDE_ASSIGN); + op = AssignOperator.DIVIDE_ASSIGN;line = (((AssignmentContext)_localctx).di!=null?((AssignmentContext)_localctx).di.getLine():0); + } + break; + case MULT_ASSIGN: + { + setState(396); + ((AssignmentContext)_localctx).mu = match(MULT_ASSIGN); + op = AssignOperator.MULT_ASSIGN;line = (((AssignmentContext)_localctx).mu!=null?((AssignmentContext)_localctx).mu.getLine():0); + } + break; + case MOD_ASSIGN: + { + setState(398); + ((AssignmentContext)_localctx).mo = match(MOD_ASSIGN); + op = AssignOperator.MOD_ASSIGN;line = (((AssignmentContext)_localctx).mo!=null?((AssignmentContext)_localctx).mo.getLine():0); + } + break; + default: + throw new NoViableAltException(this); } - setState(325); - expression(0); - setState(326); + setState(402); + ((AssignmentContext)_localctx).e = expression(0); + setState(403); match(SEMICOLLON); + + Identifier id_ = new Identifier((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getText():null)); + id_.setLine((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getLine():0)); + ((AssignmentContext)_localctx).assignRet = new AssignStatement(access, id_, ((AssignmentContext)_localctx).e.expRet, op); + if(access){ + _localctx.assignRet.setAccessListExpression(((AssignmentContext)_localctx).a.accessListExp); + } + _localctx.assignRet.setLine(line); + } } catch (RecognitionException re) { @@ -1849,11 +2223,13 @@ public final AssignmentContext assignment() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class AccessListContext extends ParserRuleContext { + public Expression accessListExp; + public ExpressionContext e; public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public AccessListContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1875,15 +2251,16 @@ public T accept(ParseTreeVisitor visitor) { public final AccessListContext accessList() throws RecognitionException { AccessListContext _localctx = new AccessListContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_accessList); + enterRule(_localctx, 42, RULE_accessList); try { enterOuterAlt(_localctx, 1); { - setState(328); + setState(406); match(LBRACK); - setState(329); - expression(0); - setState(330); + setState(407); + ((AccessListContext)_localctx).e = expression(0); + ((AccessListContext)_localctx).accessListExp = ((AccessListContext)_localctx).e.expRet; + setState(409); match(RBRACK); } } @@ -1900,6 +2277,14 @@ public final AccessListContext accessList() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class StatementContext extends ParserRuleContext { + public Statement stmtRet; + public IfStatementContext i; + public LoopDoStatementContext loop; + public ForStatementContext f; + public PutsStatementContext puts; + public PushStatementContext push; + public ExpressionContext e; + public AssignmentContext as; public IfStatementContext ifStatement() { return getRuleContext(IfStatementContext.class,0); } @@ -1915,10 +2300,10 @@ public PutsStatementContext putsStatement() { public PushStatementContext pushStatement() { return getRuleContext(PushStatementContext.class,0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } - public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } public AssignmentContext assignment() { return getRuleContext(AssignmentContext.class,0); } @@ -1943,60 +2328,72 @@ public T accept(ParseTreeVisitor visitor) { public final StatementContext statement() throws RecognitionException { StatementContext _localctx = new StatementContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_statement); + enterRule(_localctx, 44, RULE_statement); try { - setState(341); + setState(434); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(332); - ifStatement(); + setState(411); + ((StatementContext)_localctx).i = ifStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).i.ifRet; } break; case 2: enterOuterAlt(_localctx, 2); { - setState(333); - loopDoStatement(); + setState(414); + ((StatementContext)_localctx).loop = loopDoStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).loop.loopDoRet; } break; case 3: enterOuterAlt(_localctx, 3); { - setState(334); - forStatement(); + setState(417); + ((StatementContext)_localctx).f = forStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).f.forStRet; } break; case 4: enterOuterAlt(_localctx, 4); { - setState(335); - putsStatement(); + setState(420); + ((StatementContext)_localctx).puts = putsStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).puts.putRet; } break; case 5: enterOuterAlt(_localctx, 5); { - setState(336); - pushStatement(); + setState(423); + ((StatementContext)_localctx).push = pushStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).push.pushRet; } break; case 6: enterOuterAlt(_localctx, 6); { - setState(337); - expression(0); - setState(338); + setState(426); + ((StatementContext)_localctx).e = expression(0); + ((StatementContext)_localctx).stmtRet = new ExpressionStatement(((StatementContext)_localctx).e.expRet); + + ExpressionStatement expStmt = new ExpressionStatement(((StatementContext)_localctx).e.expRet); + ((StatementContext)_localctx).stmtRet = expStmt; + _localctx.stmtRet.setLine(((StatementContext)_localctx).e.expRet.getLine()); + + setState(429); match(SEMICOLLON); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(340); - assignment(); + setState(431); + ((StatementContext)_localctx).as = assignment(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).as.assignRet; } break; } @@ -2014,6 +2411,9 @@ public final StatementContext statement() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class BodyContext extends ParserRuleContext { + public ArrayList bodyRet; + public StatementContext s; + public ReturnStatementContext r; public List statement() { return getRuleContexts(StatementContext.class); } @@ -2044,32 +2444,37 @@ public T accept(ParseTreeVisitor visitor) { public final BodyContext body() throws RecognitionException { BodyContext _localctx = new BodyContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_body); + enterRule(_localctx, 46, RULE_body); int _la; try { enterOuterAlt(_localctx, 1); { - setState(346); + + ((BodyContext)_localctx).bodyRet = new ArrayList(); + + setState(442); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { { { - setState(343); - statement(); + setState(437); + ((BodyContext)_localctx).s = statement(); + _localctx.bodyRet.add(((BodyContext)_localctx).s.stmtRet); } } - setState(348); + setState(444); _errHandler.sync(this); _la = _input.LA(1); } - setState(350); + setState(448); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(349); - returnStatement(); + setState(445); + ((BodyContext)_localctx).r = returnStatement(); + _localctx.bodyRet.add(((BodyContext)_localctx).r.returnStmtRet); } } @@ -2088,7 +2493,11 @@ public final BodyContext body() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class ExpressionContext extends ParserRuleContext { - public Token APPEND; + public Expression expRet; + public ExpressionContext e1; + public EqaulityExpressionContext e3; + public Token a; + public EqaulityExpressionContext e2; public EqaulityExpressionContext eqaulityExpression() { return getRuleContext(EqaulityExpressionContext.class,0); } @@ -2124,18 +2533,19 @@ private ExpressionContext expression(int _p) throws RecognitionException { int _parentState = getState(); ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); ExpressionContext _prevctx = _localctx; - int _startState = 46; - enterRecursionRule(_localctx, 46, RULE_expression, _p); + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_expression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(353); - eqaulityExpression(0); + setState(451); + ((ExpressionContext)_localctx).e3 = eqaulityExpression(0); + ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; } _ctx.stop = _input.LT(-1); - setState(362); + setState(461); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,29,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2145,18 +2555,29 @@ private ExpressionContext expression(int _p) throws RecognitionException { { { _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.e1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(355); + setState(454); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(356); - ((ExpressionContext)_localctx).APPEND = match(APPEND); - setState(357); - eqaulityExpression(0); - System.out.println("Operator: " + (((ExpressionContext)_localctx).APPEND!=null?((ExpressionContext)_localctx).APPEND.getText():null)); + setState(455); + ((ExpressionContext)_localctx).a = match(APPEND); + setState(456); + ((ExpressionContext)_localctx).e2 = eqaulityExpression(0); + + if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ + ((ExpressionContext)_localctx).expRet = new AppendExpression(((ExpressionContext)_localctx).e1.expRet); + _localctx.expRet.setLine((((ExpressionContext)_localctx).a!=null?((ExpressionContext)_localctx).a.getLine():0)); + } + else{ + AppendExpression appendExp = (AppendExpression) ((ExpressionContext)_localctx).e1.expRet; + appendExp.addAppendedExpression(((ExpressionContext)_localctx).e2.expRet); + ((ExpressionContext)_localctx).expRet = appendExp; + } + } } } - setState(364); + setState(463); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,29,_ctx); } @@ -2175,7 +2596,12 @@ private ExpressionContext expression(int _p) throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class EqaulityExpressionContext extends ParserRuleContext { - public Token op; + public Expression expRet; + public EqaulityExpressionContext e1; + public RelationalExpressionContext r2; + public Token op1; + public Token op2; + public RelationalExpressionContext r1; public RelationalExpressionContext relationalExpression() { return getRuleContext(RelationalExpressionContext.class,0); } @@ -2212,18 +2638,19 @@ private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionE int _parentState = getState(); EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, _parentState); EqaulityExpressionContext _prevctx = _localctx; - int _startState = 48; - enterRecursionRule(_localctx, 48, RULE_eqaulityExpression, _p); + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_eqaulityExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(366); - relationalExpression(0); + setState(465); + ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; } _ctx.stop = _input.LT(-1); - setState(378); + setState(481); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,31,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2233,34 +2660,40 @@ private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionE { { _localctx = new EqaulityExpressionContext(_parentctx, _parentState); + _localctx.e1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_eqaulityExpression); - setState(368); + setState(468); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(371); + + BinaryOperator op; + + setState(474); _errHandler.sync(this); switch (_input.LA(1)) { case EQUAL: { - setState(369); - ((EqaulityExpressionContext)_localctx).op = match(EQUAL); + setState(470); + ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); + op = BinaryOperator.EQUAL; } break; case NOT_EQUAL: { - setState(370); - ((EqaulityExpressionContext)_localctx).op = match(NOT_EQUAL); + setState(472); + ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); + op = BinaryOperator.NOT_EQUAL; } break; default: throw new NoViableAltException(this); } - setState(373); - relationalExpression(0); - System.out.println("Operator: " + (((EqaulityExpressionContext)_localctx).op!=null?((EqaulityExpressionContext)_localctx).op.getText():null)); + setState(476); + ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op); } } } - setState(380); + setState(483); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,31,_ctx); } @@ -2279,17 +2712,21 @@ private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionE @SuppressWarnings("CheckReturnValue") public static class RelationalExpressionContext extends ParserRuleContext { + public Expression expRet; + public RelationalExpressionContext r1; + public AdditiveExpressionContext a2; public Token op; + public AdditiveExpressionContext a1; public AdditiveExpressionContext additiveExpression() { return getRuleContext(AdditiveExpressionContext.class,0); } public RelationalExpressionContext relationalExpression() { return getRuleContext(RelationalExpressionContext.class,0); } - public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2318,18 +2755,19 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit int _parentState = getState(); RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); RelationalExpressionContext _prevctx = _localctx; - int _startState = 50; - enterRecursionRule(_localctx, 50, RULE_relationalExpression, _p); + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_relationalExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(382); - additiveExpression(0); + setState(485); + ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; } _ctx.stop = _input.LT(-1); - setState(396); + setState(505); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2339,46 +2777,54 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit { { _localctx = new RelationalExpressionContext(_parentctx, _parentState); + _localctx.r1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); - setState(384); + setState(488); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(389); + + BinaryOperator op; + + setState(498); _errHandler.sync(this); switch (_input.LA(1)) { case GREATER_THAN: { - setState(385); + setState(490); ((RelationalExpressionContext)_localctx).op = match(GREATER_THAN); + op = BinaryOperator.GREATER_THAN; } break; case LESS_THAN: { - setState(386); - ((RelationalExpressionContext)_localctx).op = match(LESS_THAN); + setState(492); + match(LESS_THAN); + op = BinaryOperator.LESS_THAN; } break; case LESS_EQUAL_THAN: { - setState(387); - ((RelationalExpressionContext)_localctx).op = match(LESS_EQUAL_THAN); + setState(494); + match(LESS_EQUAL_THAN); + op = BinaryOperator.LESS_EQUAL_THAN; } break; case GREATER_EQUAL_THAN: { - setState(388); - ((RelationalExpressionContext)_localctx).op = match(GREATER_EQUAL_THAN); + setState(496); + match(GREATER_EQUAL_THAN); + op = BinaryOperator.GREATER_EQUAL_THAN; } break; default: throw new NoViableAltException(this); } - setState(391); - additiveExpression(0); - System.out.println("Operator: " + (((RelationalExpressionContext)_localctx).op!=null?((RelationalExpressionContext)_localctx).op.getText():null)); + setState(500); + ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op); } } } - setState(398); + setState(507); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); } @@ -2397,7 +2843,10 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit @SuppressWarnings("CheckReturnValue") public static class AdditiveExpressionContext extends ParserRuleContext { - public Token op; + public Expression expRet; + public AdditiveExpressionContext a1; + public MultiplicativeExpressionContext m2; + public MultiplicativeExpressionContext m1; public MultiplicativeExpressionContext multiplicativeExpression() { return getRuleContext(MultiplicativeExpressionContext.class,0); } @@ -2434,18 +2883,21 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE int _parentState = getState(); AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); AdditiveExpressionContext _prevctx = _localctx; - int _startState = 52; - enterRecursionRule(_localctx, 52, RULE_additiveExpression, _p); + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_additiveExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(400); - multiplicativeExpression(0); + setState(509); + ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); + + ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; + } _ctx.stop = _input.LT(-1); - setState(412); + setState(525); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2455,34 +2907,40 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE { { _localctx = new AdditiveExpressionContext(_parentctx, _parentState); + _localctx.a1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); - setState(402); + setState(512); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(405); + + BinaryOperator op; + + setState(518); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: { - setState(403); - ((AdditiveExpressionContext)_localctx).op = match(PLUS); + setState(514); + match(PLUS); + op = BinaryOperator.PLUS; } break; case MINUS: { - setState(404); - ((AdditiveExpressionContext)_localctx).op = match(MINUS); + setState(516); + match(MINUS); + op = BinaryOperator.MINUS; } break; default: throw new NoViableAltException(this); } - setState(407); - multiplicativeExpression(0); - System.out.println("Operator: " + (((AdditiveExpressionContext)_localctx).op!=null?((AdditiveExpressionContext)_localctx).op.getText():null)); + setState(520); + ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); + ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op); } } } - setState(414); + setState(527); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } @@ -2501,7 +2959,10 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE @SuppressWarnings("CheckReturnValue") public static class MultiplicativeExpressionContext extends ParserRuleContext { - public Token op; + public Expression expRet; + public MultiplicativeExpressionContext m1; + public PreUnaryExpressionContext p2; + public PreUnaryExpressionContext p1; public PreUnaryExpressionContext preUnaryExpression() { return getRuleContext(PreUnaryExpressionContext.class,0); } @@ -2538,18 +2999,19 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws int _parentState = getState(); MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); MultiplicativeExpressionContext _prevctx = _localctx; - int _startState = 54; - enterRecursionRule(_localctx, 54, RULE_multiplicativeExpression, _p); + int _startState = 56; + enterRecursionRule(_localctx, 56, RULE_multiplicativeExpression, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(416); - preUnaryExpression(); + setState(529); + ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; } _ctx.stop = _input.LT(-1); - setState(428); + setState(545); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,37,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2559,34 +3021,40 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws { { _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); + _localctx.m1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); - setState(418); + setState(532); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(421); + + BinaryOperator op; + + setState(538); _errHandler.sync(this); switch (_input.LA(1)) { case MULT: { - setState(419); - ((MultiplicativeExpressionContext)_localctx).op = match(MULT); + setState(534); + match(MULT); + op = BinaryOperator.MULT; } break; case DIVIDE: { - setState(420); - ((MultiplicativeExpressionContext)_localctx).op = match(DIVIDE); + setState(536); + match(DIVIDE); + op = BinaryOperator.DIVIDE; } break; default: throw new NoViableAltException(this); } - setState(423); - preUnaryExpression(); - System.out.println("Operator: " + (((MultiplicativeExpressionContext)_localctx).op!=null?((MultiplicativeExpressionContext)_localctx).op.getText():null)); + setState(540); + ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op); } } } - setState(430); + setState(547); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,37,_ctx); } @@ -2605,7 +3073,9 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws @SuppressWarnings("CheckReturnValue") public static class PreUnaryExpressionContext extends ParserRuleContext { - public Token op; + public Expression expRet; + public AccessExpressionContext a1; + public AccessExpressionContext a2; public AccessExpressionContext accessExpression() { return getRuleContext(AccessExpressionContext.class,0); } @@ -2634,9 +3104,9 @@ public T accept(ParseTreeVisitor visitor) { public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionException { PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_preUnaryExpression); + enterRule(_localctx, 58, RULE_preUnaryExpression); try { - setState(441); + setState(565); _errHandler.sync(this); switch (_input.LA(1)) { case MINUS: @@ -2645,39 +3115,46 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case DECREMENT: enterOuterAlt(_localctx, 1); { - setState(435); + + UnaryOperator op; + + setState(557); _errHandler.sync(this); switch (_input.LA(1)) { case NOT: { - setState(431); - ((PreUnaryExpressionContext)_localctx).op = match(NOT); + setState(549); + match(NOT); + op = UnaryOperator.NOT; } break; case MINUS: { - setState(432); - ((PreUnaryExpressionContext)_localctx).op = match(MINUS); + setState(551); + match(MINUS); + op = UnaryOperator.MINUS; } break; case INCREMENT: { - setState(433); - ((PreUnaryExpressionContext)_localctx).op = match(INCREMENT); + setState(553); + match(INCREMENT); + op = UnaryOperator.INC; } break; case DECREMENT: { - setState(434); - ((PreUnaryExpressionContext)_localctx).op = match(DECREMENT); + setState(555); + match(DECREMENT); + op = UnaryOperator.DEC; } break; default: throw new NoViableAltException(this); } - setState(437); - accessExpression(); - System.out.println("Operator: " + (((PreUnaryExpressionContext)_localctx).op!=null?((PreUnaryExpressionContext)_localctx).op.getText():null)); + setState(559); + ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op); } break; case LEN: @@ -2695,8 +3172,9 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(440); - accessExpression(); + setState(562); + ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; } break; default: @@ -2716,6 +3194,10 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx @SuppressWarnings("CheckReturnValue") public static class AccessExpressionContext extends ParserRuleContext { + public Expression expRet; + public OtherExpressionContext o; + public FunctionArgumentsContext f; + public AccessListContext a; public OtherExpressionContext otherExpression() { return getRuleContext(OtherExpressionContext.class,0); } @@ -2723,16 +3205,16 @@ public OtherExpressionContext otherExpression() { public TerminalNode LPAR(int i) { return getToken(FunctionCraftParser.LPAR, i); } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } public List functionArguments() { return getRuleContexts(FunctionArgumentsContext.class); } public FunctionArgumentsContext functionArguments(int i) { return getRuleContext(FunctionArgumentsContext.class,i); } - public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } - public TerminalNode RPAR(int i) { - return getToken(FunctionCraftParser.RPAR, i); - } public List accessList() { return getRuleContexts(AccessListContext.class); } @@ -2760,50 +3242,76 @@ public T accept(ParseTreeVisitor visitor) { public final AccessExpressionContext accessExpression() throws RecognitionException { AccessExpressionContext _localctx = new AccessExpressionContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_accessExpression); + enterRule(_localctx, 60, RULE_accessExpression); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(443); - otherExpression(); - setState(451); + + boolean isAccessExpression = false; + boolean isMultiDimentional = false; + ArrayList args = new ArrayList(); + ArrayList dimentions = new ArrayList(); + + setState(568); + ((AccessExpressionContext)_localctx).o = otherExpression(); + setState(576); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(444); + setState(569); match(LPAR); - System.out.println("FunctionCall"); - setState(446); - functionArguments(); - setState(447); + setState(570); + ((AccessExpressionContext)_localctx).f = functionArguments(); + + isAccessExpression = true; + args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); + + setState(572); match(RPAR); } } } - setState(453); + setState(578); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } - setState(457); + setState(584); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(454); - accessList(); + setState(579); + ((AccessExpressionContext)_localctx).a = accessList(); + + isMultiDimentional = true; + dimentions.add(((AccessExpressionContext)_localctx).a.accessListExp); + } } } - setState(459); + setState(586); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); } + + if(!isAccessExpression){ + ((AccessExpressionContext)_localctx).expRet = ((AccessExpressionContext)_localctx).o.expRet; + } + else{ + AccessExpression accessExp = new AccessExpression(((AccessExpressionContext)_localctx).o.expRet, args); + if(isMultiDimentional){ + + accessExp.setDimentionalAccess(dimentions); + } + ((AccessExpressionContext)_localctx).expRet = accessExp; + } + } } catch (RecognitionException re) { @@ -2819,6 +3327,16 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept @SuppressWarnings("CheckReturnValue") public static class OtherExpressionContext extends ParserRuleContext { + public Expression expRet; + public ValuesContext v; + public Token id; + public LambdaFunctionContext lambda; + public ChopStatementContext chop; + public ChompStatementContext chomp; + public MatchPatternStatementContext match; + public FilterStatementContext f; + public LenStatementContext len_; + public ExpressionContext e; public ValuesContext values() { return getRuleContext(ValuesContext.class,0); } @@ -2826,8 +3344,11 @@ public ValuesContext values() { public LambdaFunctionContext lambdaFunction() { return getRuleContext(LambdaFunctionContext.class,0); } - public ChopAndChompStatementContext chopAndChompStatement() { - return getRuleContext(ChopAndChompStatementContext.class,0); + public ChopStatementContext chopStatement() { + return getRuleContext(ChopStatementContext.class,0); + } + public ChompStatementContext chompStatement() { + return getRuleContext(ChompStatementContext.class,0); } public MatchPatternStatementContext matchPatternStatement() { return getRuleContext(MatchPatternStatementContext.class,0); @@ -2864,77 +3385,96 @@ public T accept(ParseTreeVisitor visitor) { public final OtherExpressionContext otherExpression() throws RecognitionException { OtherExpressionContext _localctx = new OtherExpressionContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_otherExpression); + enterRule(_localctx, 62, RULE_otherExpression); int _la; try { - setState(472); + setState(619); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(460); - values(); + setState(589); + ((OtherExpressionContext)_localctx).v = values(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; } break; case 2: enterOuterAlt(_localctx, 2); { - setState(461); - match(IDENTIFIER); + setState(592); + ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); + + ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); + _localctx.expRet.setLine((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getLine():0)); + } break; case 3: enterOuterAlt(_localctx, 3); { - setState(462); - lambdaFunction(); + setState(594); + ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; } break; case 4: enterOuterAlt(_localctx, 4); { - setState(463); - chopAndChompStatement(); + setState(597); + ((OtherExpressionContext)_localctx).chop = chopStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; } break; case 5: enterOuterAlt(_localctx, 5); { - setState(464); - matchPatternStatement(); + setState(600); + ((OtherExpressionContext)_localctx).chomp = chompStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chomp.chompRet; } break; case 6: enterOuterAlt(_localctx, 6); { - setState(465); - filterStatement(); + setState(603); + ((OtherExpressionContext)_localctx).match = matchPatternStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; } break; case 7: enterOuterAlt(_localctx, 7); { - setState(466); - lenStatement(); + setState(606); + ((OtherExpressionContext)_localctx).f = filterStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; } break; case 8: enterOuterAlt(_localctx, 8); { - setState(467); + setState(609); + ((OtherExpressionContext)_localctx).len_ = lenStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len_.lenRet; + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(612); match(LPAR); - setState(469); + setState(616); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(468); - expression(0); + setState(613); + ((OtherExpressionContext)_localctx).e = expression(0); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; } } - setState(471); + setState(618); match(RPAR); } break; @@ -2953,15 +3493,20 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio @SuppressWarnings("CheckReturnValue") public static class LambdaFunctionContext extends ParserRuleContext { + public Expression lambdaRet; + public Token a; + public FunctionArgumentsDeclarationContext fd; + public BodyContext b; + public FunctionArgumentsContext fa; + public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } + public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { return getRuleContext(FunctionArgumentsDeclarationContext.class,0); } - public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } public BodyContext body() { return getRuleContext(BodyContext.class,0); } - public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } public FunctionArgumentsContext functionArguments() { return getRuleContext(FunctionArgumentsContext.class,0); } @@ -2986,23 +3531,26 @@ public T accept(ParseTreeVisitor visitor) { public final LambdaFunctionContext lambdaFunction() throws RecognitionException { LambdaFunctionContext _localctx = new LambdaFunctionContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_lambdaFunction); + enterRule(_localctx, 64, RULE_lambdaFunction); try { enterOuterAlt(_localctx, 1); { - setState(474); - match(ARROW); - System.out.println("Structure: LAMBDA"); - setState(476); - functionArgumentsDeclaration(); - setState(477); + setState(621); + ((LambdaFunctionContext)_localctx).a = match(ARROW); + setState(622); + ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); + setState(623); match(LBRACE); - setState(478); - body(); - setState(479); + setState(624); + ((LambdaFunctionContext)_localctx).b = body(); + setState(625); match(RBRACE); - setState(480); - functionArguments(); + setState(626); + ((LambdaFunctionContext)_localctx).fa = functionArguments(); + + ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet, ((LambdaFunctionContext)_localctx).fa.funcArgsRet); + _localctx.lambdaRet.setLine((((LambdaFunctionContext)_localctx).a!=null?((LambdaFunctionContext)_localctx).a.getLine():0)); + } } catch (RecognitionException re) { @@ -3018,6 +3566,13 @@ public final LambdaFunctionContext lambdaFunction() throws RecognitionException @SuppressWarnings("CheckReturnValue") public static class ValuesContext extends ParserRuleContext { + public Value valRet; + public BoolValueContext b; + public Token s; + public Token i; + public Token float_; + public ListValueContext l; + public FunctionPointerContext f; public BoolValueContext boolValue() { return getRuleContext(BoolValueContext.class,0); } @@ -3051,52 +3606,58 @@ public T accept(ParseTreeVisitor visitor) { public final ValuesContext values() throws RecognitionException { ValuesContext _localctx = new ValuesContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_values); + enterRule(_localctx, 66, RULE_values); try { - setState(488); + setState(644); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: case FALSE: enterOuterAlt(_localctx, 1); { - setState(482); - boolValue(); + setState(629); + ((ValuesContext)_localctx).b = boolValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; } break; case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(483); - match(STRING_VALUE); + setState(632); + ((ValuesContext)_localctx).s = match(STRING_VALUE); + ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); } break; case INT_VALUE: enterOuterAlt(_localctx, 3); { - setState(484); - match(INT_VALUE); + setState(634); + ((ValuesContext)_localctx).i = match(INT_VALUE); + ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); } break; case FLOAT_VALUE: enterOuterAlt(_localctx, 4); { - setState(485); - match(FLOAT_VALUE); + setState(636); + ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); + ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getLine():0)); } break; case LBRACK: enterOuterAlt(_localctx, 5); { - setState(486); - listValue(); + setState(638); + ((ValuesContext)_localctx).l = listValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; } break; case METHOD: enterOuterAlt(_localctx, 6); { - setState(487); - functionPointer(); + setState(641); + ((ValuesContext)_localctx).f = functionPointer(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; } break; default: @@ -3116,11 +3677,14 @@ public final ValuesContext values() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class ListValueContext extends ParserRuleContext { + public ListValue listValRet; + public Token l; + public FunctionArgumentsContext f; + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } public FunctionArgumentsContext functionArguments() { return getRuleContext(FunctionArgumentsContext.class,0); } - public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } public ListValueContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -3142,16 +3706,20 @@ public T accept(ParseTreeVisitor visitor) { public final ListValueContext listValue() throws RecognitionException { ListValueContext _localctx = new ListValueContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_listValue); + enterRule(_localctx, 68, RULE_listValue); try { enterOuterAlt(_localctx, 1); { - setState(490); - match(LBRACK); - setState(491); - functionArguments(); - setState(492); + setState(646); + ((ListValueContext)_localctx).l = match(LBRACK); + setState(647); + ((ListValueContext)_localctx).f = functionArguments(); + setState(648); match(RBRACK); + + ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); + _localctx.listValRet.setLine((((ListValueContext)_localctx).l!=null?((ListValueContext)_localctx).l.getLine():0)); + } } catch (RecognitionException re) { @@ -3167,6 +3735,9 @@ public final ListValueContext listValue() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class BoolValueContext extends ParserRuleContext { + public BoolValue boolValRet; + public Token t; + public Token f; public TerminalNode TRUE() { return getToken(FunctionCraftParser.TRUE, 0); } public TerminalNode FALSE() { return getToken(FunctionCraftParser.FALSE, 0); } public BoolValueContext(ParserRuleContext parent, int invokingState) { @@ -3190,21 +3761,29 @@ public T accept(ParseTreeVisitor visitor) { public final BoolValueContext boolValue() throws RecognitionException { BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_boolValue); - int _la; + enterRule(_localctx, 70, RULE_boolValue); try { - enterOuterAlt(_localctx, 1); - { - setState(494); - _la = _input.LA(1); - if ( !(_la==TRUE || _la==FALSE) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } + setState(655); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + enterOuterAlt(_localctx, 1); + { + setState(651); + ((BoolValueContext)_localctx).t = match(TRUE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); + } + break; + case FALSE: + enterOuterAlt(_localctx, 2); + { + setState(653); + ((BoolValueContext)_localctx).f = match(FALSE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); + } + break; + default: + throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -3220,11 +3799,14 @@ public final BoolValueContext boolValue() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class FunctionPointerContext extends ParserRuleContext { - public TerminalNode METHOD() { return getToken(FunctionCraftParser.METHOD, 0); } + public FunctionPointer fpRet; + public Token m; + public Token id; public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } public TerminalNode COLON() { return getToken(FunctionCraftParser.COLON, 0); } - public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode METHOD() { return getToken(FunctionCraftParser.METHOD, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } public FunctionPointerContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -3246,20 +3828,26 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionPointerContext functionPointer() throws RecognitionException { FunctionPointerContext _localctx = new FunctionPointerContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_functionPointer); + enterRule(_localctx, 72, RULE_functionPointer); try { enterOuterAlt(_localctx, 1); { - setState(496); - match(METHOD); - setState(497); + setState(657); + ((FunctionPointerContext)_localctx).m = match(METHOD); + setState(658); match(LPAR); - setState(498); + setState(659); match(COLON); - setState(499); - match(IDENTIFIER); - setState(500); + setState(660); + ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); + setState(661); match(RPAR); + + Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); + id_.setLine((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getLine():0)); + ((FunctionPointerContext)_localctx).fpRet = new FunctionPointer(id_); + _localctx.fpRet.setLine((((FunctionPointerContext)_localctx).m!=null?((FunctionPointerContext)_localctx).m.getLine():0)); + } } catch (RecognitionException re) { @@ -3275,15 +3863,15 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 23: - return expression_sempred((ExpressionContext)_localctx, predIndex); case 24: - return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); + return expression_sempred((ExpressionContext)_localctx, predIndex); case 25: - return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); case 26: - return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); case 27: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 28: return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); } return true; @@ -3325,7 +3913,7 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext } public static final String _serializedATN = - "\u0004\u0001A\u01f7\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001A\u0299\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -3336,323 +3924,438 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ - "#\u0007#\u0001\u0000\u0001\u0000\u0005\u0000K\b\u0000\n\u0000\f\u0000"+ - "N\t\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ - "\u0001\u0002\u0001\u0002\u0005\u0002]\b\u0002\n\u0002\f\u0002`\t\u0002"+ + "#\u0007#\u0002$\u0007$\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0005\u0000R\b\u0000\n\u0000\f\u0000"+ + "U\t\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002l\b\u0002"+ + "\n\u0002\f\u0002o\t\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ - "\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002k\b\u0002\n\u0002\f\u0002"+ - "n\t\u0002\u0001\u0002\u0001\u0002\u0003\u0002r\b\u0002\u0003\u0002t\b"+ - "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ - "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ - "\u0003\u0001\u0003\u0005\u0003\u0083\b\u0003\n\u0003\f\u0003\u0086\t\u0003"+ - "\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0005\u0005\u0095\b\u0005\n\u0005\f\u0005\u0098\t\u0005\u0003"+ - "\u0005\u009a\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0003\u0006\u009f"+ - "\b\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0005"+ - "\u0007\u00ac\b\u0007\n\u0007\f\u0007\u00af\t\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0003\u0007\u00b4\b\u0007\u0001\u0007\u0001\u0007\u0001\b"+ - "\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00bd\b\b\u0001\b\u0001\b\u0003"+ - "\b\u00c1\b\b\u0005\b\u00c3\b\b\n\b\f\b\u00c6\t\b\u0005\b\u00c8\b\b\n\b"+ - "\f\b\u00cb\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t"+ - "\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u007f\b\u0002"+ + "\n\u0002\f\u0002\u0082\t\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u0086"+ + "\b\u0002\u0003\u0002\u0088\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0005\u0003\u009b\b\u0003\n\u0003\f\u0003\u009e"+ + "\t\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0005\u0005\u00b3\b\u0005\n\u0005\f\u0005\u00b6\t\u0005"+ + "\u0003\u0005\u00b8\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0003\u0006\u00bf\b\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0005\u0007\u00d1\b\u0007\n\u0007\f\u0007\u00d4\t\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00da\b\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\b\u0001\b\u0003\b\u00e6\b\b\u0001\b\u0001\b\u0001\b\u0003\b\u00eb"+ + "\b\b\u0005\b\u00ed\b\b\n\b\f\b\u00f0\t\b\u0005\b\u00f2\b\b\n\b\f\b\u00f5"+ + "\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+ "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ - "\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0003\r\u00ee\b\r\u0001\r\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0003\r\u00f5\b\r\u0001\r\u0005\r\u00f8\b\r\n\r\f\r\u00fb\t"+ - "\r\u0001\r\u0003\r\u00fe\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ - "\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001"+ - "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ - "\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0112\b\u000f\n\u000f\f\u000f"+ - "\u0115\t\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u011a\b"+ - "\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ - "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ - "\u0010\u0127\b\u0010\n\u0010\f\u0010\u012a\t\u0010\u0001\u0010\u0001\u0010"+ - "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ - "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ - "\u0003\u0012\u013a\b\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u0143\b\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+ - "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u0156\b\u0015"+ - "\u0001\u0016\u0005\u0016\u0159\b\u0016\n\u0016\f\u0016\u015c\t\u0016\u0001"+ - "\u0016\u0003\u0016\u015f\b\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u0169"+ - "\b\u0017\n\u0017\f\u0017\u016c\t\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0001\u0018\u0003\u0018\u0174\b\u0018\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0005\u0018\u0179\b\u0018\n\u0018\f\u0018\u017c"+ - "\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u0186\b\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0005\u0019\u018b\b\u0019\n\u0019\f\u0019\u018e\t\u0019"+ + "\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u011c\b\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0124\b\r\u0001\r\u0005"+ + "\r\u0127\b\r\n\r\f\r\u012a\t\r\u0001\r\u0001\r\u0001\r\u0003\r\u012f\b"+ + "\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0005\u000f\u0149\b\u000f\n\u000f\f\u000f\u014c\t\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u0152\b\u000f\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0005\u0010\u0162\b\u0010\n\u0010\f\u0010\u0165\t\u0010\u0001\u0010"+ + "\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0183\b\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014"+ + "\u0191\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016\u01b3\b\u0016\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u01b9\b\u0017\n\u0017"+ + "\f\u0017\u01bc\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017"+ + "\u01c1\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01cc\b\u0018"+ + "\n\u0018\f\u0018\u01cf\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0003\u0019\u01db\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005"+ + "\u0019\u01e0\b\u0019\n\u0019\f\u0019\u01e3\t\u0019\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0003\u001a\u0196\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a"+ - "\u019b\b\u001a\n\u001a\f\u001a\u019e\t\u001a\u0001\u001b\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u01a6\b\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u01ab\b\u001b\n\u001b\f\u001b"+ - "\u01ae\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ - "\u01b4\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ - "\u01ba\b\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ - "\u0001\u001d\u0005\u001d\u01c2\b\u001d\n\u001d\f\u001d\u01c5\t\u001d\u0001"+ - "\u001d\u0005\u001d\u01c8\b\u001d\n\u001d\f\u001d\u01cb\t\u001d\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0003\u001e\u01d6\b\u001e\u0001\u001e\u0003\u001e"+ - "\u01d9\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001 \u0003 \u01e9\b \u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001"+ - "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0000\u0005.0246$\u0000\u0002"+ - "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ - " \"$&(*,.02468:<>@BDF\u0000\u0003\u0001\u0000\u001e\u001f\u0001\u0000"+ - "+0\u0001\u0000&\'\u0214\u0000L\u0001\u0000\u0000\u0000\u0002Q\u0001\u0000"+ - "\u0000\u0000\u0004X\u0001\u0000\u0000\u0000\u0006w\u0001\u0000\u0000\u0000"+ - "\b\u0089\u0001\u0000\u0000\u0000\n\u0099\u0001\u0000\u0000\u0000\f\u009b"+ - "\u0001\u0000\u0000\u0000\u000e\u00a2\u0001\u0000\u0000\u0000\u0010\u00c9"+ - "\u0001\u0000\u0000\u0000\u0012\u00cc\u0001\u0000\u0000\u0000\u0014\u00d3"+ - "\u0001\u0000\u0000\u0000\u0016\u00d9\u0001\u0000\u0000\u0000\u0018\u00e2"+ - "\u0001\u0000\u0000\u0000\u001a\u00f9\u0001\u0000\u0000\u0000\u001c\u00ff"+ - "\u0001\u0000\u0000\u0000\u001e\u0119\u0001\u0000\u0000\u0000 \u011b\u0001"+ - "\u0000\u0000\u0000\"\u012d\u0001\u0000\u0000\u0000$\u0139\u0001\u0000"+ - "\u0000\u0000&\u013f\u0001\u0000\u0000\u0000(\u0148\u0001\u0000\u0000\u0000"+ - "*\u0155\u0001\u0000\u0000\u0000,\u015a\u0001\u0000\u0000\u0000.\u0160"+ - "\u0001\u0000\u0000\u00000\u016d\u0001\u0000\u0000\u00002\u017d\u0001\u0000"+ - "\u0000\u00004\u018f\u0001\u0000\u0000\u00006\u019f\u0001\u0000\u0000\u0000"+ - "8\u01b9\u0001\u0000\u0000\u0000:\u01bb\u0001\u0000\u0000\u0000<\u01d8"+ - "\u0001\u0000\u0000\u0000>\u01da\u0001\u0000\u0000\u0000@\u01e8\u0001\u0000"+ - "\u0000\u0000B\u01ea\u0001\u0000\u0000\u0000D\u01ee\u0001\u0000\u0000\u0000"+ - "F\u01f0\u0001\u0000\u0000\u0000HK\u0003\u0002\u0001\u0000IK\u0003\u0006"+ - "\u0003\u0000JH\u0001\u0000\u0000\u0000JI\u0001\u0000\u0000\u0000KN\u0001"+ - "\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000LM\u0001\u0000\u0000\u0000"+ - "MO\u0001\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000OP\u0003\b\u0004\u0000"+ - "P\u0001\u0001\u0000\u0000\u0000QR\u0005\u0001\u0000\u0000RS\u0005>\u0000"+ - "\u0000ST\u0006\u0001\uffff\uffff\u0000TU\u0003\u0004\u0002\u0000UV\u0003"+ - ",\u0016\u0000VW\u0005\u0002\u0000\u0000W\u0003\u0001\u0000\u0000\u0000"+ - "Xs\u00051\u0000\u0000Y^\u0005>\u0000\u0000Z[\u00057\u0000\u0000[]\u0005"+ - ">\u0000\u0000\\Z\u0001\u0000\u0000\u0000]`\u0001\u0000\u0000\u0000^\\"+ - "\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_q\u0001\u0000\u0000"+ - "\u0000`^\u0001\u0000\u0000\u0000ab\u00057\u0000\u0000bc\u00053\u0000\u0000"+ - "cd\u0005>\u0000\u0000de\u00050\u0000\u0000el\u0003.\u0017\u0000fg\u0005"+ - "7\u0000\u0000gh\u0005>\u0000\u0000hi\u00050\u0000\u0000ik\u0003.\u0017"+ - "\u0000jf\u0001\u0000\u0000\u0000kn\u0001\u0000\u0000\u0000lj\u0001\u0000"+ - "\u0000\u0000lm\u0001\u0000\u0000\u0000mo\u0001\u0000\u0000\u0000nl\u0001"+ - "\u0000\u0000\u0000op\u00054\u0000\u0000pr\u0001\u0000\u0000\u0000qa\u0001"+ - "\u0000\u0000\u0000qr\u0001\u0000\u0000\u0000rt\u0001\u0000\u0000\u0000"+ - "sY\u0001\u0000\u0000\u0000st\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000"+ - "\u0000uv\u00052\u0000\u0000v\u0005\u0001\u0000\u0000\u0000wx\u0005\f\u0000"+ - "\u0000xy\u0005>\u0000\u0000yz\u0006\u0003\uffff\uffff\u0000z{\u00051\u0000"+ - "\u0000{|\u0005>\u0000\u0000|\u0084\u00052\u0000\u0000}~\u0005#\u0000\u0000"+ - "~\u007f\u0003\u0010\b\u0000\u007f\u0080\u00050\u0000\u0000\u0080\u0081"+ - "\u0003.\u0017\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082}\u0001\u0000"+ - "\u0000\u0000\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001\u0000"+ - "\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000"+ - "\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u0088\u0005;\u0000"+ - "\u0000\u0088\u0007\u0001\u0000\u0000\u0000\u0089\u008a\u0005\u0001\u0000"+ - "\u0000\u008a\u008b\u0005\u0003\u0000\u0000\u008b\u008c\u0006\u0004\uffff"+ - "\uffff\u0000\u008c\u008d\u00051\u0000\u0000\u008d\u008e\u00052\u0000\u0000"+ - "\u008e\u008f\u0003,\u0016\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090"+ - "\t\u0001\u0000\u0000\u0000\u0091\u0096\u0003.\u0017\u0000\u0092\u0093"+ - "\u00057\u0000\u0000\u0093\u0095\u0003.\u0017\u0000\u0094\u0092\u0001\u0000"+ - "\u0000\u0000\u0095\u0098\u0001\u0000\u0000\u0000\u0096\u0094\u0001\u0000"+ - "\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u009a\u0001\u0000"+ - "\u0000\u0000\u0098\u0096\u0001\u0000\u0000\u0000\u0099\u0091\u0001\u0000"+ - "\u0000\u0000\u0099\u009a\u0001\u0000\u0000\u0000\u009a\u000b\u0001\u0000"+ - "\u0000\u0000\u009b\u009c\u0005\u0007\u0000\u0000\u009c\u009e\u0006\u0006"+ - "\uffff\uffff\u0000\u009d\u009f\u0003.\u0017\u0000\u009e\u009d\u0001\u0000"+ - "\u0000\u0000\u009e\u009f\u0001\u0000\u0000\u0000\u009f\u00a0\u0001\u0000"+ - "\u0000\u0000\u00a0\u00a1\u0005;\u0000\u0000\u00a1\r\u0001\u0000\u0000"+ - "\u0000\u00a2\u00a3\u0005\b\u0000\u0000\u00a3\u00a4\u0006\u0007\uffff\uffff"+ - "\u0000\u00a4\u00a5\u0003\u0010\b\u0000\u00a5\u00ad\u0003,\u0016\u0000"+ - "\u00a6\u00a7\u0005\n\u0000\u0000\u00a7\u00a8\u0006\u0007\uffff\uffff\u0000"+ - "\u00a8\u00a9\u0003\u0010\b\u0000\u00a9\u00aa\u0003,\u0016\u0000\u00aa"+ - "\u00ac\u0001\u0000\u0000\u0000\u00ab\u00a6\u0001\u0000\u0000\u0000\u00ac"+ - "\u00af\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001\u0000\u0000\u0000\u00ad"+ - "\u00ae\u0001\u0000\u0000\u0000\u00ae\u00b3\u0001\u0000\u0000\u0000\u00af"+ - "\u00ad\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005\t\u0000\u0000\u00b1\u00b2"+ - "\u0006\u0007\uffff\uffff\u0000\u00b2\u00b4\u0003,\u0016\u0000\u00b3\u00b0"+ - "\u0001\u0000\u0000\u0000\u00b3\u00b4\u0001\u0000\u0000\u0000\u00b4\u00b5"+ - "\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005\u0002\u0000\u0000\u00b6\u000f"+ - "\u0001\u0000\u0000\u0000\u00b7\u00b8\u00051\u0000\u0000\u00b8\u00b9\u0003"+ - ".\u0017\u0000\u00b9\u00c4\u00052\u0000\u0000\u00ba\u00bc\u0007\u0000\u0000"+ - "\u0000\u00bb\u00bd\u00051\u0000\u0000\u00bc\u00bb\u0001\u0000\u0000\u0000"+ - "\u00bc\u00bd\u0001\u0000\u0000\u0000\u00bd\u00be\u0001\u0000\u0000\u0000"+ - "\u00be\u00c0\u0003\u0010\b\u0000\u00bf\u00c1\u00052\u0000\u0000\u00c0"+ - "\u00bf\u0001\u0000\u0000\u0000\u00c0\u00c1\u0001\u0000\u0000\u0000\u00c1"+ - "\u00c3\u0001\u0000\u0000\u0000\u00c2\u00ba\u0001\u0000\u0000\u0000\u00c3"+ - "\u00c6\u0001\u0000\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4"+ - "\u00c5\u0001\u0000\u0000\u0000\u00c5\u00c8\u0001\u0000\u0000\u0000\u00c6"+ - "\u00c4\u0001\u0000\u0000\u0000\u00c7\u00b7\u0001\u0000\u0000\u0000\u00c8"+ - "\u00cb\u0001\u0000\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00c9"+ - "\u00ca\u0001\u0000\u0000\u0000\u00ca\u0011\u0001\u0000\u0000\u0000\u00cb"+ - "\u00c9\u0001\u0000\u0000\u0000\u00cc\u00cd\u0005\u0004\u0000\u0000\u00cd"+ - "\u00ce\u0006\t\uffff\uffff\u0000\u00ce\u00cf\u00051\u0000\u0000\u00cf"+ - "\u00d0\u0003.\u0017\u0000\u00d0\u00d1\u00052\u0000\u0000\u00d1\u00d2\u0005"+ - ";\u0000\u0000\u00d2\u0013\u0001\u0000\u0000\u0000\u00d3\u00d4\u0005\u0006"+ - "\u0000\u0000\u00d4\u00d5\u0006\n\uffff\uffff\u0000\u00d5\u00d6\u00051"+ - "\u0000\u0000\u00d6\u00d7\u0003.\u0017\u0000\u00d7\u00d8\u00052\u0000\u0000"+ - "\u00d8\u0015\u0001\u0000\u0000\u0000\u00d9\u00da\u0005\u0005\u0000\u0000"+ - "\u00da\u00db\u0006\u000b\uffff\uffff\u0000\u00db\u00dc\u00051\u0000\u0000"+ - "\u00dc\u00dd\u0003.\u0017\u0000\u00dd\u00de\u00057\u0000\u0000\u00de\u00df"+ - "\u0003.\u0017\u0000\u00df\u00e0\u00052\u0000\u0000\u00e0\u00e1\u0005;"+ - "\u0000\u0000\u00e1\u0017\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005\u000e"+ - "\u0000\u0000\u00e3\u00e4\u0005\u0011\u0000\u0000\u00e4\u00e5\u0006\f\uffff"+ - "\uffff\u0000\u00e5\u00e6\u0003\u001a\r\u0000\u00e6\u00e7\u0005\u0002\u0000"+ - "\u0000\u00e7\u0019\u0001\u0000\u0000\u0000\u00e8\u00f8\u0003*\u0015\u0000"+ - "\u00e9\u00ea\u0005(\u0000\u0000\u00ea\u00ed\u0006\r\uffff\uffff\u0000"+ - "\u00eb\u00ec\u0005\b\u0000\u0000\u00ec\u00ee\u0003\u0010\b\u0000\u00ed"+ - "\u00eb\u0001\u0000\u0000\u0000\u00ed\u00ee\u0001\u0000\u0000\u0000\u00ee"+ - "\u00ef\u0001\u0000\u0000\u0000\u00ef\u00f8\u0005;\u0000\u0000\u00f0\u00f1"+ - "\u0005)\u0000\u0000\u00f1\u00f4\u0006\r\uffff\uffff\u0000\u00f2\u00f3"+ - "\u0005\b\u0000\u0000\u00f3\u00f5\u0003\u0010\b\u0000\u00f4\u00f2\u0001"+ - "\u0000\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f6\u0001"+ - "\u0000\u0000\u0000\u00f6\u00f8\u0005;\u0000\u0000\u00f7\u00e8\u0001\u0000"+ - "\u0000\u0000\u00f7\u00e9\u0001\u0000\u0000\u0000\u00f7\u00f0\u0001\u0000"+ - "\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9\u00f7\u0001\u0000"+ - "\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fd\u0001\u0000"+ - "\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc\u00fe\u0003\f\u0006"+ - "\u0000\u00fd\u00fc\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000"+ - "\u0000\u00fe\u001b\u0001\u0000\u0000\u0000\u00ff\u0100\u0005\u000f\u0000"+ - "\u0000\u0100\u0101\u0006\u000e\uffff\uffff\u0000\u0101\u0102\u0005>\u0000"+ - "\u0000\u0102\u0103\u0005\u0010\u0000\u0000\u0103\u0104\u0003\u001e\u000f"+ - "\u0000\u0104\u0105\u0003\u001a\r\u0000\u0105\u0106\u0005\u0002\u0000\u0000"+ - "\u0106\u001d\u0001\u0000\u0000\u0000\u0107\u0108\u00051\u0000\u0000\u0108"+ - "\u0109\u0003.\u0017\u0000\u0109\u010a\u00059\u0000\u0000\u010a\u010b\u0003"+ - ".\u0017\u0000\u010b\u010c\u00052\u0000\u0000\u010c\u011a\u0001\u0000\u0000"+ - "\u0000\u010d\u010e\u00053\u0000\u0000\u010e\u0113\u0003.\u0017\u0000\u010f"+ - "\u0110\u00057\u0000\u0000\u0110\u0112\u0003.\u0017\u0000\u0111\u010f\u0001"+ - "\u0000\u0000\u0000\u0112\u0115\u0001\u0000\u0000\u0000\u0113\u0111\u0001"+ - "\u0000\u0000\u0000\u0113\u0114\u0001\u0000\u0000\u0000\u0114\u0116\u0001"+ - "\u0000\u0000\u0000\u0115\u0113\u0001\u0000\u0000\u0000\u0116\u0117\u0005"+ - "4\u0000\u0000\u0117\u011a\u0001\u0000\u0000\u0000\u0118\u011a\u0005>\u0000"+ - "\u0000\u0119\u0107\u0001\u0000\u0000\u0000\u0119\u010d\u0001\u0000\u0000"+ - "\u0000\u0119\u0118\u0001\u0000\u0000\u0000\u011a\u001f\u0001\u0000\u0000"+ - "\u0000\u011b\u011c\u0006\u0010\uffff\uffff\u0000\u011c\u011d\u00053\u0000"+ - "\u0000\u011d\u011e\u0003.\u0017\u0000\u011e\u011f\u0005$\u0000\u0000\u011f"+ - "\u0120\u0005>\u0000\u0000\u0120\u0121\u0005*\u0000\u0000\u0121\u0122\u0003"+ - "\u001e\u000f\u0000\u0122\u0123\u00057\u0000\u0000\u0123\u0128\u0003.\u0017"+ - "\u0000\u0124\u0125\u00057\u0000\u0000\u0125\u0127\u0003.\u0017\u0000\u0126"+ - "\u0124\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128"+ - "\u0126\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129"+ - "\u012b\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b"+ - "\u012c\u00054\u0000\u0000\u012c!\u0001\u0000\u0000\u0000\u012d\u012e\u0006"+ - "\u0011\uffff\uffff\u0000\u012e\u012f\u0005>\u0000\u0000\u012f\u0130\u0005"+ - "8\u0000\u0000\u0130\u0131\u0005\r\u0000\u0000\u0131\u0132\u00051\u0000"+ - "\u0000\u0132\u0133\u0003.\u0017\u0000\u0133\u0134\u00052\u0000\u0000\u0134"+ - "#\u0001\u0000\u0000\u0000\u0135\u0136\u0005\u0012\u0000\u0000\u0136\u013a"+ - "\u0006\u0012\uffff\uffff\u0000\u0137\u0138\u0005\u0013\u0000\u0000\u0138"+ - "\u013a\u0006\u0012\uffff\uffff\u0000\u0139\u0135\u0001\u0000\u0000\u0000"+ - "\u0139\u0137\u0001\u0000\u0000\u0000\u013a\u013b\u0001\u0000\u0000\u0000"+ - "\u013b\u013c\u00051\u0000\u0000\u013c\u013d\u0003.\u0017\u0000\u013d\u013e"+ - "\u00052\u0000\u0000\u013e%\u0001\u0000\u0000\u0000\u013f\u0140\u0005>"+ - "\u0000\u0000\u0140\u0142\u0006\u0013\uffff\uffff\u0000\u0141\u0143\u0003"+ - "(\u0014\u0000\u0142\u0141\u0001\u0000\u0000\u0000\u0142\u0143\u0001\u0000"+ - "\u0000\u0000\u0143\u0144\u0001\u0000\u0000\u0000\u0144\u0145\u0007\u0001"+ - "\u0000\u0000\u0145\u0146\u0003.\u0017\u0000\u0146\u0147\u0005;\u0000\u0000"+ - "\u0147\'\u0001\u0000\u0000\u0000\u0148\u0149\u00053\u0000\u0000\u0149"+ - "\u014a\u0003.\u0017\u0000\u014a\u014b\u00054\u0000\u0000\u014b)\u0001"+ - "\u0000\u0000\u0000\u014c\u0156\u0003\u000e\u0007\u0000\u014d\u0156\u0003"+ - "\u0018\f\u0000\u014e\u0156\u0003\u001c\u000e\u0000\u014f\u0156\u0003\u0012"+ - "\t\u0000\u0150\u0156\u0003\u0016\u000b\u0000\u0151\u0152\u0003.\u0017"+ - "\u0000\u0152\u0153\u0005;\u0000\u0000\u0153\u0156\u0001\u0000\u0000\u0000"+ - "\u0154\u0156\u0003&\u0013\u0000\u0155\u014c\u0001\u0000\u0000\u0000\u0155"+ - "\u014d\u0001\u0000\u0000\u0000\u0155\u014e\u0001\u0000\u0000\u0000\u0155"+ - "\u014f\u0001\u0000\u0000\u0000\u0155\u0150\u0001\u0000\u0000\u0000\u0155"+ - "\u0151\u0001\u0000\u0000\u0000\u0155\u0154\u0001\u0000\u0000\u0000\u0156"+ - "+\u0001\u0000\u0000\u0000\u0157\u0159\u0003*\u0015\u0000\u0158\u0157\u0001"+ - "\u0000\u0000\u0000\u0159\u015c\u0001\u0000\u0000\u0000\u015a\u0158\u0001"+ - "\u0000\u0000\u0000\u015a\u015b\u0001\u0000\u0000\u0000\u015b\u015e\u0001"+ - "\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u015f\u0003"+ - "\f\u0006\u0000\u015e\u015d\u0001\u0000\u0000\u0000\u015e\u015f\u0001\u0000"+ - "\u0000\u0000\u015f-\u0001\u0000\u0000\u0000\u0160\u0161\u0006\u0017\uffff"+ - "\uffff\u0000\u0161\u0162\u00030\u0018\u0000\u0162\u016a\u0001\u0000\u0000"+ - "\u0000\u0163\u0164\n\u0002\u0000\u0000\u0164\u0165\u0005%\u0000\u0000"+ - "\u0165\u0166\u00030\u0018\u0000\u0166\u0167\u0006\u0017\uffff\uffff\u0000"+ - "\u0167\u0169\u0001\u0000\u0000\u0000\u0168\u0163\u0001\u0000\u0000\u0000"+ - "\u0169\u016c\u0001\u0000\u0000\u0000\u016a\u0168\u0001\u0000\u0000\u0000"+ - "\u016a\u016b\u0001\u0000\u0000\u0000\u016b/\u0001\u0000\u0000\u0000\u016c"+ - "\u016a\u0001\u0000\u0000\u0000\u016d\u016e\u0006\u0018\uffff\uffff\u0000"+ - "\u016e\u016f\u00032\u0019\u0000\u016f\u017a\u0001\u0000\u0000\u0000\u0170"+ - "\u0173\n\u0002\u0000\u0000\u0171\u0174\u0005\u0018\u0000\u0000\u0172\u0174"+ - "\u0005\u0019\u0000\u0000\u0173\u0171\u0001\u0000\u0000\u0000\u0173\u0172"+ - "\u0001\u0000\u0000\u0000\u0174\u0175\u0001\u0000\u0000\u0000\u0175\u0176"+ - "\u00032\u0019\u0000\u0176\u0177\u0006\u0018\uffff\uffff\u0000\u0177\u0179"+ - "\u0001\u0000\u0000\u0000\u0178\u0170\u0001\u0000\u0000\u0000\u0179\u017c"+ - "\u0001\u0000\u0000\u0000\u017a\u0178\u0001\u0000\u0000\u0000\u017a\u017b"+ - "\u0001\u0000\u0000\u0000\u017b1\u0001\u0000\u0000\u0000\u017c\u017a\u0001"+ - "\u0000\u0000\u0000\u017d\u017e\u0006\u0019\uffff\uffff\u0000\u017e\u017f"+ - "\u00034\u001a\u0000\u017f\u018c\u0001\u0000\u0000\u0000\u0180\u0185\n"+ - "\u0002\u0000\u0000\u0181\u0186\u0005\u001c\u0000\u0000\u0182\u0186\u0005"+ - "\u001d\u0000\u0000\u0183\u0186\u0005\u001a\u0000\u0000\u0184\u0186\u0005"+ - "\u001b\u0000\u0000\u0185\u0181\u0001\u0000\u0000\u0000\u0185\u0182\u0001"+ - "\u0000\u0000\u0000\u0185\u0183\u0001\u0000\u0000\u0000\u0185\u0184\u0001"+ - "\u0000\u0000\u0000\u0186\u0187\u0001\u0000\u0000\u0000\u0187\u0188\u0003"+ - "4\u001a\u0000\u0188\u0189\u0006\u0019\uffff\uffff\u0000\u0189\u018b\u0001"+ - "\u0000\u0000\u0000\u018a\u0180\u0001\u0000\u0000\u0000\u018b\u018e\u0001"+ - "\u0000\u0000\u0000\u018c\u018a\u0001\u0000\u0000\u0000\u018c\u018d\u0001"+ - "\u0000\u0000\u0000\u018d3\u0001\u0000\u0000\u0000\u018e\u018c\u0001\u0000"+ - "\u0000\u0000\u018f\u0190\u0006\u001a\uffff\uffff\u0000\u0190\u0191\u0003"+ - "6\u001b\u0000\u0191\u019c\u0001\u0000\u0000\u0000\u0192\u0195\n\u0002"+ - "\u0000\u0000\u0193\u0196\u0005\u0014\u0000\u0000\u0194\u0196\u0005\u0015"+ - "\u0000\u0000\u0195\u0193\u0001\u0000\u0000\u0000\u0195\u0194\u0001\u0000"+ - "\u0000\u0000\u0196\u0197\u0001\u0000\u0000\u0000\u0197\u0198\u00036\u001b"+ - "\u0000\u0198\u0199\u0006\u001a\uffff\uffff\u0000\u0199\u019b\u0001\u0000"+ - "\u0000\u0000\u019a\u0192\u0001\u0000\u0000\u0000\u019b\u019e\u0001\u0000"+ - "\u0000\u0000\u019c\u019a\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000"+ - "\u0000\u0000\u019d5\u0001\u0000\u0000\u0000\u019e\u019c\u0001\u0000\u0000"+ - "\u0000\u019f\u01a0\u0006\u001b\uffff\uffff\u0000\u01a0\u01a1\u00038\u001c"+ - "\u0000\u01a1\u01ac\u0001\u0000\u0000\u0000\u01a2\u01a5\n\u0002\u0000\u0000"+ - "\u01a3\u01a6\u0005\u0016\u0000\u0000\u01a4\u01a6\u0005\u0017\u0000\u0000"+ - "\u01a5\u01a3\u0001\u0000\u0000\u0000\u01a5\u01a4\u0001\u0000\u0000\u0000"+ - "\u01a6\u01a7\u0001\u0000\u0000\u0000\u01a7\u01a8\u00038\u001c\u0000\u01a8"+ - "\u01a9\u0006\u001b\uffff\uffff\u0000\u01a9\u01ab\u0001\u0000\u0000\u0000"+ - "\u01aa\u01a2\u0001\u0000\u0000\u0000\u01ab\u01ae\u0001\u0000\u0000\u0000"+ - "\u01ac\u01aa\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000\u0000\u0000"+ - "\u01ad7\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000\u0000\u01af"+ - "\u01b4\u0005 \u0000\u0000\u01b0\u01b4\u0005\u0015\u0000\u0000\u01b1\u01b4"+ - "\u0005!\u0000\u0000\u01b2\u01b4\u0005\"\u0000\u0000\u01b3\u01af\u0001"+ - "\u0000\u0000\u0000\u01b3\u01b0\u0001\u0000\u0000\u0000\u01b3\u01b1\u0001"+ - "\u0000\u0000\u0000\u01b3\u01b2\u0001\u0000\u0000\u0000\u01b4\u01b5\u0001"+ - "\u0000\u0000\u0000\u01b5\u01b6\u0003:\u001d\u0000\u01b6\u01b7\u0006\u001c"+ - "\uffff\uffff\u0000\u01b7\u01ba\u0001\u0000\u0000\u0000\u01b8\u01ba\u0003"+ - ":\u001d\u0000\u01b9\u01b3\u0001\u0000\u0000\u0000\u01b9\u01b8\u0001\u0000"+ - "\u0000\u0000\u01ba9\u0001\u0000\u0000\u0000\u01bb\u01c3\u0003<\u001e\u0000"+ - "\u01bc\u01bd\u00051\u0000\u0000\u01bd\u01be\u0006\u001d\uffff\uffff\u0000"+ - "\u01be\u01bf\u0003\n\u0005\u0000\u01bf\u01c0\u00052\u0000\u0000\u01c0"+ - "\u01c2\u0001\u0000\u0000\u0000\u01c1\u01bc\u0001\u0000\u0000\u0000\u01c2"+ - "\u01c5\u0001\u0000\u0000\u0000\u01c3\u01c1\u0001\u0000\u0000\u0000\u01c3"+ - "\u01c4\u0001\u0000\u0000\u0000\u01c4\u01c9\u0001\u0000\u0000\u0000\u01c5"+ - "\u01c3\u0001\u0000\u0000\u0000\u01c6\u01c8\u0003(\u0014\u0000\u01c7\u01c6"+ - "\u0001\u0000\u0000\u0000\u01c8\u01cb\u0001\u0000\u0000\u0000\u01c9\u01c7"+ - "\u0001\u0000\u0000\u0000\u01c9\u01ca\u0001\u0000\u0000\u0000\u01ca;\u0001"+ - "\u0000\u0000\u0000\u01cb\u01c9\u0001\u0000\u0000\u0000\u01cc\u01d9\u0003"+ - "@ \u0000\u01cd\u01d9\u0005>\u0000\u0000\u01ce\u01d9\u0003>\u001f\u0000"+ - "\u01cf\u01d9\u0003$\u0012\u0000\u01d0\u01d9\u0003\"\u0011\u0000\u01d1"+ - "\u01d9\u0003 \u0010\u0000\u01d2\u01d9\u0003\u0014\n\u0000\u01d3\u01d5"+ - "\u00051\u0000\u0000\u01d4\u01d6\u0003.\u0017\u0000\u01d5\u01d4\u0001\u0000"+ - "\u0000\u0000\u01d5\u01d6\u0001\u0000\u0000\u0000\u01d6\u01d7\u0001\u0000"+ - "\u0000\u0000\u01d7\u01d9\u00052\u0000\u0000\u01d8\u01cc\u0001\u0000\u0000"+ - "\u0000\u01d8\u01cd\u0001\u0000\u0000\u0000\u01d8\u01ce\u0001\u0000\u0000"+ - "\u0000\u01d8\u01cf\u0001\u0000\u0000\u0000\u01d8\u01d0\u0001\u0000\u0000"+ - "\u0000\u01d8\u01d1\u0001\u0000\u0000\u0000\u01d8\u01d2\u0001\u0000\u0000"+ - "\u0000\u01d8\u01d3\u0001\u0000\u0000\u0000\u01d9=\u0001\u0000\u0000\u0000"+ - "\u01da\u01db\u0005*\u0000\u0000\u01db\u01dc\u0006\u001f\uffff\uffff\u0000"+ - "\u01dc\u01dd\u0003\u0004\u0002\u0000\u01dd\u01de\u00055\u0000\u0000\u01de"+ - "\u01df\u0003,\u0016\u0000\u01df\u01e0\u00056\u0000\u0000\u01e0\u01e1\u0003"+ - "\n\u0005\u0000\u01e1?\u0001\u0000\u0000\u0000\u01e2\u01e9\u0003D\"\u0000"+ - "\u01e3\u01e9\u0005?\u0000\u0000\u01e4\u01e9\u0005<\u0000\u0000\u01e5\u01e9"+ - "\u0005=\u0000\u0000\u01e6\u01e9\u0003B!\u0000\u01e7\u01e9\u0003F#\u0000"+ - "\u01e8\u01e2\u0001\u0000\u0000\u0000\u01e8\u01e3\u0001\u0000\u0000\u0000"+ - "\u01e8\u01e4\u0001\u0000\u0000\u0000\u01e8\u01e5\u0001\u0000\u0000\u0000"+ - "\u01e8\u01e6\u0001\u0000\u0000\u0000\u01e8\u01e7\u0001\u0000\u0000\u0000"+ - "\u01e9A\u0001\u0000\u0000\u0000\u01ea\u01eb\u00053\u0000\u0000\u01eb\u01ec"+ - "\u0003\n\u0005\u0000\u01ec\u01ed\u00054\u0000\u0000\u01edC\u0001\u0000"+ - "\u0000\u0000\u01ee\u01ef\u0007\u0002\u0000\u0000\u01efE\u0001\u0000\u0000"+ - "\u0000\u01f0\u01f1\u0005\u000b\u0000\u0000\u01f1\u01f2\u00051\u0000\u0000"+ - "\u01f2\u01f3\u0005:\u0000\u0000\u01f3\u01f4\u0005>\u0000\u0000\u01f4\u01f5"+ - "\u00052\u0000\u0000\u01f5G\u0001\u0000\u0000\u0000-JL^lqs\u0084\u0096"+ - "\u0099\u009e\u00ad\u00b3\u00bc\u00c0\u00c4\u00c9\u00ed\u00f4\u00f7\u00f9"+ - "\u00fd\u0113\u0119\u0128\u0139\u0142\u0155\u015a\u015e\u016a\u0173\u017a"+ - "\u0185\u018c\u0195\u019c\u01a5\u01ac\u01b3\u01b9\u01c3\u01c9\u01d5\u01d8"+ - "\u01e8"; + "\u0003\u001a\u01f3\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a"+ + "\u01f8\b\u001a\n\u001a\f\u001a\u01fb\t\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0003\u001b\u0207\b\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0005\u001b\u020c\b\u001b\n\u001b\f\u001b\u020f\t\u001b\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u021b\b\u001c\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0005\u001c\u0220\b\u001c\n\u001c\f\u001c\u0223"+ + "\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u022e\b\u001d\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003"+ + "\u001d\u0236\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u023f\b\u001e\n\u001e\f\u001e"+ + "\u0242\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0247\b"+ + "\u001e\n\u001e\f\u001e\u024a\t\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0003\u001f\u0269\b\u001f\u0001\u001f\u0003\u001f"+ + "\u026c\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0285\b!\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0003#\u0290\b#\u0001$"+ + "\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0000\u000502468%\u0000"+ + "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c"+ + "\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001\u0000\u001e\u001f\u02bb"+ + "\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000\u0000\u0000\u0004d"+ + "\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000\u0000\b\u00a1\u0001"+ + "\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000\f\u00b9\u0001\u0000"+ + "\u0000\u0000\u000e\u00c2\u0001\u0000\u0000\u0000\u0010\u00de\u0001\u0000"+ + "\u0000\u0000\u0012\u00f6\u0001\u0000\u0000\u0000\u0014\u00fd\u0001\u0000"+ + "\u0000\u0000\u0016\u0103\u0001\u0000\u0000\u0000\u0018\u010c\u0001\u0000"+ + "\u0000\u0000\u001a\u0112\u0001\u0000\u0000\u0000\u001c\u0130\u0001\u0000"+ + "\u0000\u0000\u001e\u0151\u0001\u0000\u0000\u0000 \u0153\u0001\u0000\u0000"+ + "\u0000\"\u0169\u0001\u0000\u0000\u0000$\u0171\u0001\u0000\u0000\u0000"+ + "&\u0177\u0001\u0000\u0000\u0000(\u017d\u0001\u0000\u0000\u0000*\u0196"+ + "\u0001\u0000\u0000\u0000,\u01b2\u0001\u0000\u0000\u0000.\u01b4\u0001\u0000"+ + "\u0000\u00000\u01c2\u0001\u0000\u0000\u00002\u01d0\u0001\u0000\u0000\u0000"+ + "4\u01e4\u0001\u0000\u0000\u00006\u01fc\u0001\u0000\u0000\u00008\u0210"+ + "\u0001\u0000\u0000\u0000:\u0235\u0001\u0000\u0000\u0000<\u0237\u0001\u0000"+ + "\u0000\u0000>\u026b\u0001\u0000\u0000\u0000@\u026d\u0001\u0000\u0000\u0000"+ + "B\u0284\u0001\u0000\u0000\u0000D\u0286\u0001\u0000\u0000\u0000F\u028f"+ + "\u0001\u0000\u0000\u0000H\u0291\u0001\u0000\u0000\u0000JS\u0006\u0000"+ + "\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000\uffff\uffff"+ + "\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000OP\u0006\u0000"+ + "\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000\u0000\u0000"+ + "QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001\u0000\u0000"+ + "\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000US\u0001\u0000"+ + "\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff\u0000X\u0001"+ + "\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000Z[\u0005\u0001"+ + "\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>\u0000\u0000]^"+ + "\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000_`\u0006\u0001"+ + "\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff\uffff\u0000"+ + "bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000de\u0006\u0002"+ + "\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000\u0000gm\u0006"+ + "\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000\u0000jl\u0006"+ + "\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000"+ + "\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0085\u0001"+ + "\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000\u0000qr\u0005"+ + "3\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff\u0000tu\u0005"+ + "0\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff\uffff\u0000"+ + "wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff\uffff\u0000"+ + "z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff\uffff\u0000"+ + "}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000\u007f\u0082"+ + "\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080\u0081\u0001"+ + "\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082\u0080\u0001"+ + "\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086\u0001\u0000"+ + "\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000"+ + "\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000\u0000\u0000"+ + "\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000"+ + "\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000\u0000\u008b"+ + "\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff\u0000\u008d"+ + "\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff\u0000\u008f"+ + "\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091\u0092\u0006"+ + "\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093\u0094\u0005"+ + "#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096\u0006\u0003"+ + "\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098\u00030\u0018"+ + "\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b\u0001\u0000"+ + "\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e\u0001\u0000"+ + "\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+ + "\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000"+ + "\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001\u0000\u0000"+ + "\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3\u0005\u0001"+ + "\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5\u0006\u0004"+ + "\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7\u00052\u0000"+ + "\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004\uffff\uffff"+ + "\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000\u0000\u0000"+ + "\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u00030\u0018\u0000"+ + "\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u00057\u0000\u0000"+ + "\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff\uffff\u0000"+ + "\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000\u0000\u0000"+ + "\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000"+ + "\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000"+ + "\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000\u0000\u0000"+ + "\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000\u0000\u0000"+ + "\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005\u0007\u0000"+ + "\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006\uffff\uffff"+ + "\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001\u0000\u0000"+ + "\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000"+ + "\u0000\u00c0\u00c1\u0005;\u0000\u0000\u00c1\r\u0001\u0000\u0000\u0000"+ + "\u00c2\u00c3\u0006\u0007\uffff\uffff\u0000\u00c3\u00c4\u0005\b\u0000\u0000"+ + "\u00c4\u00c5\u0006\u0007\uffff\uffff\u0000\u00c5\u00c6\u0003\u0010\b\u0000"+ + "\u00c6\u00c7\u0006\u0007\uffff\uffff\u0000\u00c7\u00c8\u0003.\u0017\u0000"+ + "\u00c8\u00c9\u0006\u0007\uffff\uffff\u0000\u00c9\u00d2\u0006\u0007\uffff"+ + "\uffff\u0000\u00ca\u00cb\u0005\n\u0000\u0000\u00cb\u00cc\u0003\u0010\b"+ + "\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00ce\u0003.\u0017"+ + "\u0000\u00ce\u00cf\u0006\u0007\uffff\uffff\u0000\u00cf\u00d1\u0001\u0000"+ + "\u0000\u0000\u00d0\u00ca\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001\u0000"+ + "\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001\u0000"+ + "\u0000\u0000\u00d3\u00d9\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001\u0000"+ + "\u0000\u0000\u00d5\u00d6\u0005\t\u0000\u0000\u00d6\u00d7\u0003.\u0017"+ + "\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00da\u0001\u0000"+ + "\u0000\u0000\u00d9\u00d5\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000"+ + "\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0006\u0007"+ + "\uffff\uffff\u0000\u00dc\u00dd\u0005\u0002\u0000\u0000\u00dd\u000f\u0001"+ + "\u0000\u0000\u0000\u00de\u00f3\u0006\b\uffff\uffff\u0000\u00df\u00e0\u0005"+ + "1\u0000\u0000\u00e0\u00e1\u00030\u0018\u0000\u00e1\u00e2\u0006\b\uffff"+ + "\uffff\u0000\u00e2\u00ee\u00052\u0000\u0000\u00e3\u00e5\u0007\u0000\u0000"+ + "\u0000\u00e4\u00e6\u00051\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000\u0000"+ + "\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000\u0000"+ + "\u00e7\u00e8\u0003\u0010\b\u0000\u00e8\u00ea\u0006\b\uffff\uffff\u0000"+ + "\u00e9\u00eb\u00052\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000\u00ea"+ + "\u00eb\u0001\u0000\u0000\u0000\u00eb\u00ed\u0001\u0000\u0000\u0000\u00ec"+ + "\u00e3\u0001\u0000\u0000\u0000\u00ed\u00f0\u0001\u0000\u0000\u0000\u00ee"+ + "\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000\u00ef"+ + "\u00f2\u0001\u0000\u0000\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f1"+ + "\u00df\u0001\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000\u00f3"+ + "\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4"+ + "\u0011\u0001\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000\u00f6"+ + "\u00f7\u0005\u0004\u0000\u0000\u00f7\u00f8\u00051\u0000\u0000\u00f8\u00f9"+ + "\u00030\u0018\u0000\u00f9\u00fa\u0006\t\uffff\uffff\u0000\u00fa\u00fb"+ + "\u00052\u0000\u0000\u00fb\u00fc\u0005;\u0000\u0000\u00fc\u0013\u0001\u0000"+ + "\u0000\u0000\u00fd\u00fe\u0005\u0006\u0000\u0000\u00fe\u00ff\u00051\u0000"+ + "\u0000\u00ff\u0100\u00030\u0018\u0000\u0100\u0101\u0006\n\uffff\uffff"+ + "\u0000\u0101\u0102\u00052\u0000\u0000\u0102\u0015\u0001\u0000\u0000\u0000"+ + "\u0103\u0104\u0005\u0005\u0000\u0000\u0104\u0105\u00051\u0000\u0000\u0105"+ + "\u0106\u00030\u0018\u0000\u0106\u0107\u00057\u0000\u0000\u0107\u0108\u0003"+ + "0\u0018\u0000\u0108\u0109\u00052\u0000\u0000\u0109\u010a\u0005;\u0000"+ + "\u0000\u010a\u010b\u0006\u000b\uffff\uffff\u0000\u010b\u0017\u0001\u0000"+ + "\u0000\u0000\u010c\u010d\u0005\u000e\u0000\u0000\u010d\u010e\u0005\u0011"+ + "\u0000\u0000\u010e\u010f\u0003\u001a\r\u0000\u010f\u0110\u0006\f\uffff"+ + "\uffff\u0000\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0019\u0001\u0000"+ + "\u0000\u0000\u0112\u0128\u0006\r\uffff\uffff\u0000\u0113\u0114\u0003,"+ + "\u0016\u0000\u0114\u0115\u0006\r\uffff\uffff\u0000\u0115\u0127\u0001\u0000"+ + "\u0000\u0000\u0116\u011b\u0005(\u0000\u0000\u0117\u0118\u0005\b\u0000"+ + "\u0000\u0118\u0119\u0003\u0010\b\u0000\u0119\u011a\u0006\r\uffff\uffff"+ + "\u0000\u011a\u011c\u0001\u0000\u0000\u0000\u011b\u0117\u0001\u0000\u0000"+ + "\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000\u0000"+ + "\u0000\u011d\u0127\u0005;\u0000\u0000\u011e\u0123\u0005)\u0000\u0000\u011f"+ + "\u0120\u0005\b\u0000\u0000\u0120\u0121\u0003\u0010\b\u0000\u0121\u0122"+ + "\u0006\r\uffff\uffff\u0000\u0122\u0124\u0001\u0000\u0000\u0000\u0123\u011f"+ + "\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0125"+ + "\u0001\u0000\u0000\u0000\u0125\u0127\u0005;\u0000\u0000\u0126\u0113\u0001"+ + "\u0000\u0000\u0000\u0126\u0116\u0001\u0000\u0000\u0000\u0126\u011e\u0001"+ + "\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128\u0126\u0001"+ + "\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012e\u0001"+ + "\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b\u012c\u0003"+ + "\f\u0006\u0000\u012c\u012d\u0006\r\uffff\uffff\u0000\u012d\u012f\u0001"+ + "\u0000\u0000\u0000\u012e\u012b\u0001\u0000\u0000\u0000\u012e\u012f\u0001"+ + "\u0000\u0000\u0000\u012f\u001b\u0001\u0000\u0000\u0000\u0130\u0131\u0005"+ + "\u000f\u0000\u0000\u0131\u0132\u0005>\u0000\u0000\u0132\u0133\u0005\u0010"+ + "\u0000\u0000\u0133\u0134\u0003\u001e\u000f\u0000\u0134\u0135\u0003\u001a"+ + "\r\u0000\u0135\u0136\u0005\u0002\u0000\u0000\u0136\u0137\u0006\u000e\uffff"+ + "\uffff\u0000\u0137\u001d\u0001\u0000\u0000\u0000\u0138\u0139\u0006\u000f"+ + "\uffff\uffff\u0000\u0139\u013a\u00051\u0000\u0000\u013a\u013b\u00030\u0018"+ + "\u0000\u013b\u013c\u0006\u000f\uffff\uffff\u0000\u013c\u013d\u00059\u0000"+ + "\u0000\u013d\u013e\u00030\u0018\u0000\u013e\u013f\u0006\u000f\uffff\uffff"+ + "\u0000\u013f\u0140\u00052\u0000\u0000\u0140\u0152\u0001\u0000\u0000\u0000"+ + "\u0141\u0142\u00053\u0000\u0000\u0142\u0143\u00030\u0018\u0000\u0143\u014a"+ + "\u0006\u000f\uffff\uffff\u0000\u0144\u0145\u00057\u0000\u0000\u0145\u0146"+ + "\u00030\u0018\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0149"+ + "\u0001\u0000\u0000\u0000\u0148\u0144\u0001\u0000\u0000\u0000\u0149\u014c"+ + "\u0001\u0000\u0000\u0000\u014a\u0148\u0001\u0000\u0000\u0000\u014a\u014b"+ + "\u0001\u0000\u0000\u0000\u014b\u014d\u0001\u0000\u0000\u0000\u014c\u014a"+ + "\u0001\u0000\u0000\u0000\u014d\u014e\u00054\u0000\u0000\u014e\u0152\u0001"+ + "\u0000\u0000\u0000\u014f\u0150\u0005>\u0000\u0000\u0150\u0152\u0006\u000f"+ + "\uffff\uffff\u0000\u0151\u0138\u0001\u0000\u0000\u0000\u0151\u0141\u0001"+ + "\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u001f\u0001"+ + "\u0000\u0000\u0000\u0153\u0154\u0006\u0010\uffff\uffff\u0000\u0154\u0155"+ + "\u00053\u0000\u0000\u0155\u0156\u00030\u0018\u0000\u0156\u0157\u0005$"+ + "\u0000\u0000\u0157\u0158\u0005>\u0000\u0000\u0158\u0159\u0005*\u0000\u0000"+ + "\u0159\u015a\u0003\u001e\u000f\u0000\u015a\u015b\u00057\u0000\u0000\u015b"+ + "\u015c\u00030\u0018\u0000\u015c\u0163\u0006\u0010\uffff\uffff\u0000\u015d"+ + "\u015e\u00057\u0000\u0000\u015e\u015f\u00030\u0018\u0000\u015f\u0160\u0006"+ + "\u0010\uffff\uffff\u0000\u0160\u0162\u0001\u0000\u0000\u0000\u0161\u015d"+ + "\u0001\u0000\u0000\u0000\u0162\u0165\u0001\u0000\u0000\u0000\u0163\u0161"+ + "\u0001\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164\u0166"+ + "\u0001\u0000\u0000\u0000\u0165\u0163\u0001\u0000\u0000\u0000\u0166\u0167"+ + "\u0006\u0010\uffff\uffff\u0000\u0167\u0168\u00054\u0000\u0000\u0168!\u0001"+ + "\u0000\u0000\u0000\u0169\u016a\u0005>\u0000\u0000\u016a\u016b\u00058\u0000"+ + "\u0000\u016b\u016c\u0005\r\u0000\u0000\u016c\u016d\u00051\u0000\u0000"+ + "\u016d\u016e\u00030\u0018\u0000\u016e\u016f\u00052\u0000\u0000\u016f\u0170"+ + "\u0006\u0011\uffff\uffff\u0000\u0170#\u0001\u0000\u0000\u0000\u0171\u0172"+ + "\u0005\u0012\u0000\u0000\u0172\u0173\u00051\u0000\u0000\u0173\u0174\u0003"+ + "0\u0018\u0000\u0174\u0175\u00052\u0000\u0000\u0175\u0176\u0006\u0012\uffff"+ + "\uffff\u0000\u0176%\u0001\u0000\u0000\u0000\u0177\u0178\u0005\u0013\u0000"+ + "\u0000\u0178\u0179\u00051\u0000\u0000\u0179\u017a\u00030\u0018\u0000\u017a"+ + "\u017b\u00052\u0000\u0000\u017b\u017c\u0006\u0013\uffff\uffff\u0000\u017c"+ + "\'\u0001\u0000\u0000\u0000\u017d\u017e\u0006\u0014\uffff\uffff\u0000\u017e"+ + "\u0182\u0005>\u0000\u0000\u017f\u0180\u0003*\u0015\u0000\u0180\u0181\u0006"+ + "\u0014\uffff\uffff\u0000\u0181\u0183\u0001\u0000\u0000\u0000\u0182\u017f"+ + "\u0001\u0000\u0000\u0000\u0182\u0183\u0001\u0000\u0000\u0000\u0183\u0190"+ + "\u0001\u0000\u0000\u0000\u0184\u0185\u00050\u0000\u0000\u0185\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u0186\u0187\u0005+\u0000\u0000\u0187\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u0188\u0189\u0005,\u0000\u0000\u0189\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u018a\u018b\u0005.\u0000\u0000\u018b\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u018c\u018d\u0005-\u0000\u0000\u018d\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u018e\u018f\u0005/\u0000\u0000\u018f\u0191\u0006"+ + "\u0014\uffff\uffff\u0000\u0190\u0184\u0001\u0000\u0000\u0000\u0190\u0186"+ + "\u0001\u0000\u0000\u0000\u0190\u0188\u0001\u0000\u0000\u0000\u0190\u018a"+ + "\u0001\u0000\u0000\u0000\u0190\u018c\u0001\u0000\u0000\u0000\u0190\u018e"+ + "\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192\u0193"+ + "\u00030\u0018\u0000\u0193\u0194\u0005;\u0000\u0000\u0194\u0195\u0006\u0014"+ + "\uffff\uffff\u0000\u0195)\u0001\u0000\u0000\u0000\u0196\u0197\u00053\u0000"+ + "\u0000\u0197\u0198\u00030\u0018\u0000\u0198\u0199\u0006\u0015\uffff\uffff"+ + "\u0000\u0199\u019a\u00054\u0000\u0000\u019a+\u0001\u0000\u0000\u0000\u019b"+ + "\u019c\u0003\u000e\u0007\u0000\u019c\u019d\u0006\u0016\uffff\uffff\u0000"+ + "\u019d\u01b3\u0001\u0000\u0000\u0000\u019e\u019f\u0003\u0018\f\u0000\u019f"+ + "\u01a0\u0006\u0016\uffff\uffff\u0000\u01a0\u01b3\u0001\u0000\u0000\u0000"+ + "\u01a1\u01a2\u0003\u001c\u000e\u0000\u01a2\u01a3\u0006\u0016\uffff\uffff"+ + "\u0000\u01a3\u01b3\u0001\u0000\u0000\u0000\u01a4\u01a5\u0003\u0012\t\u0000"+ + "\u01a5\u01a6\u0006\u0016\uffff\uffff\u0000\u01a6\u01b3\u0001\u0000\u0000"+ + "\u0000\u01a7\u01a8\u0003\u0016\u000b\u0000\u01a8\u01a9\u0006\u0016\uffff"+ + "\uffff\u0000\u01a9\u01b3\u0001\u0000\u0000\u0000\u01aa\u01ab\u00030\u0018"+ + "\u0000\u01ab\u01ac\u0006\u0016\uffff\uffff\u0000\u01ac\u01ad\u0006\u0016"+ + "\uffff\uffff\u0000\u01ad\u01ae\u0005;\u0000\u0000\u01ae\u01b3\u0001\u0000"+ + "\u0000\u0000\u01af\u01b0\u0003(\u0014\u0000\u01b0\u01b1\u0006\u0016\uffff"+ + "\uffff\u0000\u01b1\u01b3\u0001\u0000\u0000\u0000\u01b2\u019b\u0001\u0000"+ + "\u0000\u0000\u01b2\u019e\u0001\u0000\u0000\u0000\u01b2\u01a1\u0001\u0000"+ + "\u0000\u0000\u01b2\u01a4\u0001\u0000\u0000\u0000\u01b2\u01a7\u0001\u0000"+ + "\u0000\u0000\u01b2\u01aa\u0001\u0000\u0000\u0000\u01b2\u01af\u0001\u0000"+ + "\u0000\u0000\u01b3-\u0001\u0000\u0000\u0000\u01b4\u01ba\u0006\u0017\uffff"+ + "\uffff\u0000\u01b5\u01b6\u0003,\u0016\u0000\u01b6\u01b7\u0006\u0017\uffff"+ + "\uffff\u0000\u01b7\u01b9\u0001\u0000\u0000\u0000\u01b8\u01b5\u0001\u0000"+ + "\u0000\u0000\u01b9\u01bc\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001\u0000"+ + "\u0000\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb\u01c0\u0001\u0000"+ + "\u0000\u0000\u01bc\u01ba\u0001\u0000\u0000\u0000\u01bd\u01be\u0003\f\u0006"+ + "\u0000\u01be\u01bf\u0006\u0017\uffff\uffff\u0000\u01bf\u01c1\u0001\u0000"+ + "\u0000\u0000\u01c0\u01bd\u0001\u0000\u0000\u0000\u01c0\u01c1\u0001\u0000"+ + "\u0000\u0000\u01c1/\u0001\u0000\u0000\u0000\u01c2\u01c3\u0006\u0018\uffff"+ + "\uffff\u0000\u01c3\u01c4\u00032\u0019\u0000\u01c4\u01c5\u0006\u0018\uffff"+ + "\uffff\u0000\u01c5\u01cd\u0001\u0000\u0000\u0000\u01c6\u01c7\n\u0002\u0000"+ + "\u0000\u01c7\u01c8\u0005%\u0000\u0000\u01c8\u01c9\u00032\u0019\u0000\u01c9"+ + "\u01ca\u0006\u0018\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000\u0000\u0000"+ + "\u01cb\u01c6\u0001\u0000\u0000\u0000\u01cc\u01cf\u0001\u0000\u0000\u0000"+ + "\u01cd\u01cb\u0001\u0000\u0000\u0000\u01cd\u01ce\u0001\u0000\u0000\u0000"+ + "\u01ce1\u0001\u0000\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000\u01d0"+ + "\u01d1\u0006\u0019\uffff\uffff\u0000\u01d1\u01d2\u00034\u001a\u0000\u01d2"+ + "\u01d3\u0006\u0019\uffff\uffff\u0000\u01d3\u01e1\u0001\u0000\u0000\u0000"+ + "\u01d4\u01d5\n\u0002\u0000\u0000\u01d5\u01da\u0006\u0019\uffff\uffff\u0000"+ + "\u01d6\u01d7\u0005\u0018\u0000\u0000\u01d7\u01db\u0006\u0019\uffff\uffff"+ + "\u0000\u01d8\u01d9\u0005\u0019\u0000\u0000\u01d9\u01db\u0006\u0019\uffff"+ + "\uffff\u0000\u01da\u01d6\u0001\u0000\u0000\u0000\u01da\u01d8\u0001\u0000"+ + "\u0000\u0000\u01db\u01dc\u0001\u0000\u0000\u0000\u01dc\u01dd\u00034\u001a"+ + "\u0000\u01dd\u01de\u0006\u0019\uffff\uffff\u0000\u01de\u01e0\u0001\u0000"+ + "\u0000\u0000\u01df\u01d4\u0001\u0000\u0000\u0000\u01e0\u01e3\u0001\u0000"+ + "\u0000\u0000\u01e1\u01df\u0001\u0000\u0000\u0000\u01e1\u01e2\u0001\u0000"+ + "\u0000\u0000\u01e23\u0001\u0000\u0000\u0000\u01e3\u01e1\u0001\u0000\u0000"+ + "\u0000\u01e4\u01e5\u0006\u001a\uffff\uffff\u0000\u01e5\u01e6\u00036\u001b"+ + "\u0000\u01e6\u01e7\u0006\u001a\uffff\uffff\u0000\u01e7\u01f9\u0001\u0000"+ + "\u0000\u0000\u01e8\u01e9\n\u0002\u0000\u0000\u01e9\u01f2\u0006\u001a\uffff"+ + "\uffff\u0000\u01ea\u01eb\u0005\u001c\u0000\u0000\u01eb\u01f3\u0006\u001a"+ + "\uffff\uffff\u0000\u01ec\u01ed\u0005\u001d\u0000\u0000\u01ed\u01f3\u0006"+ + "\u001a\uffff\uffff\u0000\u01ee\u01ef\u0005\u001a\u0000\u0000\u01ef\u01f3"+ + "\u0006\u001a\uffff\uffff\u0000\u01f0\u01f1\u0005\u001b\u0000\u0000\u01f1"+ + "\u01f3\u0006\u001a\uffff\uffff\u0000\u01f2\u01ea\u0001\u0000\u0000\u0000"+ + "\u01f2\u01ec\u0001\u0000\u0000\u0000\u01f2\u01ee\u0001\u0000\u0000\u0000"+ + "\u01f2\u01f0\u0001\u0000\u0000\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000"+ + "\u01f4\u01f5\u00036\u001b\u0000\u01f5\u01f6\u0006\u001a\uffff\uffff\u0000"+ + "\u01f6\u01f8\u0001\u0000\u0000\u0000\u01f7\u01e8\u0001\u0000\u0000\u0000"+ + "\u01f8\u01fb\u0001\u0000\u0000\u0000\u01f9\u01f7\u0001\u0000\u0000\u0000"+ + "\u01f9\u01fa\u0001\u0000\u0000\u0000\u01fa5\u0001\u0000\u0000\u0000\u01fb"+ + "\u01f9\u0001\u0000\u0000\u0000\u01fc\u01fd\u0006\u001b\uffff\uffff\u0000"+ + "\u01fd\u01fe\u00038\u001c\u0000\u01fe\u01ff\u0006\u001b\uffff\uffff\u0000"+ + "\u01ff\u020d\u0001\u0000\u0000\u0000\u0200\u0201\n\u0002\u0000\u0000\u0201"+ + "\u0206\u0006\u001b\uffff\uffff\u0000\u0202\u0203\u0005\u0014\u0000\u0000"+ + "\u0203\u0207\u0006\u001b\uffff\uffff\u0000\u0204\u0205\u0005\u0015\u0000"+ + "\u0000\u0205\u0207\u0006\u001b\uffff\uffff\u0000\u0206\u0202\u0001\u0000"+ + "\u0000\u0000\u0206\u0204\u0001\u0000\u0000\u0000\u0207\u0208\u0001\u0000"+ + "\u0000\u0000\u0208\u0209\u00038\u001c\u0000\u0209\u020a\u0006\u001b\uffff"+ + "\uffff\u0000\u020a\u020c\u0001\u0000\u0000\u0000\u020b\u0200\u0001\u0000"+ + "\u0000\u0000\u020c\u020f\u0001\u0000\u0000\u0000\u020d\u020b\u0001\u0000"+ + "\u0000\u0000\u020d\u020e\u0001\u0000\u0000\u0000\u020e7\u0001\u0000\u0000"+ + "\u0000\u020f\u020d\u0001\u0000\u0000\u0000\u0210\u0211\u0006\u001c\uffff"+ + "\uffff\u0000\u0211\u0212\u0003:\u001d\u0000\u0212\u0213\u0006\u001c\uffff"+ + "\uffff\u0000\u0213\u0221\u0001\u0000\u0000\u0000\u0214\u0215\n\u0002\u0000"+ + "\u0000\u0215\u021a\u0006\u001c\uffff\uffff\u0000\u0216\u0217\u0005\u0016"+ + "\u0000\u0000\u0217\u021b\u0006\u001c\uffff\uffff\u0000\u0218\u0219\u0005"+ + "\u0017\u0000\u0000\u0219\u021b\u0006\u001c\uffff\uffff\u0000\u021a\u0216"+ + "\u0001\u0000\u0000\u0000\u021a\u0218\u0001\u0000\u0000\u0000\u021b\u021c"+ + "\u0001\u0000\u0000\u0000\u021c\u021d\u0003:\u001d\u0000\u021d\u021e\u0006"+ + "\u001c\uffff\uffff\u0000\u021e\u0220\u0001\u0000\u0000\u0000\u021f\u0214"+ + "\u0001\u0000\u0000\u0000\u0220\u0223\u0001\u0000\u0000\u0000\u0221\u021f"+ + "\u0001\u0000\u0000\u0000\u0221\u0222\u0001\u0000\u0000\u0000\u02229\u0001"+ + "\u0000\u0000\u0000\u0223\u0221\u0001\u0000\u0000\u0000\u0224\u022d\u0006"+ + "\u001d\uffff\uffff\u0000\u0225\u0226\u0005 \u0000\u0000\u0226\u022e\u0006"+ + "\u001d\uffff\uffff\u0000\u0227\u0228\u0005\u0015\u0000\u0000\u0228\u022e"+ + "\u0006\u001d\uffff\uffff\u0000\u0229\u022a\u0005!\u0000\u0000\u022a\u022e"+ + "\u0006\u001d\uffff\uffff\u0000\u022b\u022c\u0005\"\u0000\u0000\u022c\u022e"+ + "\u0006\u001d\uffff\uffff\u0000\u022d\u0225\u0001\u0000\u0000\u0000\u022d"+ + "\u0227\u0001\u0000\u0000\u0000\u022d\u0229\u0001\u0000\u0000\u0000\u022d"+ + "\u022b\u0001\u0000\u0000\u0000\u022e\u022f\u0001\u0000\u0000\u0000\u022f"+ + "\u0230\u0003<\u001e\u0000\u0230\u0231\u0006\u001d\uffff\uffff\u0000\u0231"+ + "\u0236\u0001\u0000\u0000\u0000\u0232\u0233\u0003<\u001e\u0000\u0233\u0234"+ + "\u0006\u001d\uffff\uffff\u0000\u0234\u0236\u0001\u0000\u0000\u0000\u0235"+ + "\u0224\u0001\u0000\u0000\u0000\u0235\u0232\u0001\u0000\u0000\u0000\u0236"+ + ";\u0001\u0000\u0000\u0000\u0237\u0238\u0006\u001e\uffff\uffff\u0000\u0238"+ + "\u0240\u0003>\u001f\u0000\u0239\u023a\u00051\u0000\u0000\u023a\u023b\u0003"+ + "\n\u0005\u0000\u023b\u023c\u0006\u001e\uffff\uffff\u0000\u023c\u023d\u0005"+ + "2\u0000\u0000\u023d\u023f\u0001\u0000\u0000\u0000\u023e\u0239\u0001\u0000"+ + "\u0000\u0000\u023f\u0242\u0001\u0000\u0000\u0000\u0240\u023e\u0001\u0000"+ + "\u0000\u0000\u0240\u0241\u0001\u0000\u0000\u0000\u0241\u0248\u0001\u0000"+ + "\u0000\u0000\u0242\u0240\u0001\u0000\u0000\u0000\u0243\u0244\u0003*\u0015"+ + "\u0000\u0244\u0245\u0006\u001e\uffff\uffff\u0000\u0245\u0247\u0001\u0000"+ + "\u0000\u0000\u0246\u0243\u0001\u0000\u0000\u0000\u0247\u024a\u0001\u0000"+ + "\u0000\u0000\u0248\u0246\u0001\u0000\u0000\u0000\u0248\u0249\u0001\u0000"+ + "\u0000\u0000\u0249\u024b\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000"+ + "\u0000\u0000\u024b\u024c\u0006\u001e\uffff\uffff\u0000\u024c=\u0001\u0000"+ + "\u0000\u0000\u024d\u024e\u0003B!\u0000\u024e\u024f\u0006\u001f\uffff\uffff"+ + "\u0000\u024f\u026c\u0001\u0000\u0000\u0000\u0250\u0251\u0005>\u0000\u0000"+ + "\u0251\u026c\u0006\u001f\uffff\uffff\u0000\u0252\u0253\u0003@ \u0000\u0253"+ + "\u0254\u0006\u001f\uffff\uffff\u0000\u0254\u026c\u0001\u0000\u0000\u0000"+ + "\u0255\u0256\u0003$\u0012\u0000\u0256\u0257\u0006\u001f\uffff\uffff\u0000"+ + "\u0257\u026c\u0001\u0000\u0000\u0000\u0258\u0259\u0003&\u0013\u0000\u0259"+ + "\u025a\u0006\u001f\uffff\uffff\u0000\u025a\u026c\u0001\u0000\u0000\u0000"+ + "\u025b\u025c\u0003\"\u0011\u0000\u025c\u025d\u0006\u001f\uffff\uffff\u0000"+ + "\u025d\u026c\u0001\u0000\u0000\u0000\u025e\u025f\u0003 \u0010\u0000\u025f"+ + "\u0260\u0006\u001f\uffff\uffff\u0000\u0260\u026c\u0001\u0000\u0000\u0000"+ + "\u0261\u0262\u0003\u0014\n\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000"+ + "\u0263\u026c\u0001\u0000\u0000\u0000\u0264\u0268\u00051\u0000\u0000\u0265"+ + "\u0266\u00030\u0018\u0000\u0266\u0267\u0006\u001f\uffff\uffff\u0000\u0267"+ + "\u0269\u0001\u0000\u0000\u0000\u0268\u0265\u0001\u0000\u0000\u0000\u0268"+ + "\u0269\u0001\u0000\u0000\u0000\u0269\u026a\u0001\u0000\u0000\u0000\u026a"+ + "\u026c\u00052\u0000\u0000\u026b\u024d\u0001\u0000\u0000\u0000\u026b\u0250"+ + "\u0001\u0000\u0000\u0000\u026b\u0252\u0001\u0000\u0000\u0000\u026b\u0255"+ + "\u0001\u0000\u0000\u0000\u026b\u0258\u0001\u0000\u0000\u0000\u026b\u025b"+ + "\u0001\u0000\u0000\u0000\u026b\u025e\u0001\u0000\u0000\u0000\u026b\u0261"+ + "\u0001\u0000\u0000\u0000\u026b\u0264\u0001\u0000\u0000\u0000\u026c?\u0001"+ + "\u0000\u0000\u0000\u026d\u026e\u0005*\u0000\u0000\u026e\u026f\u0003\u0004"+ + "\u0002\u0000\u026f\u0270\u00055\u0000\u0000\u0270\u0271\u0003.\u0017\u0000"+ + "\u0271\u0272\u00056\u0000\u0000\u0272\u0273\u0003\n\u0005\u0000\u0273"+ + "\u0274\u0006 \uffff\uffff\u0000\u0274A\u0001\u0000\u0000\u0000\u0275\u0276"+ + "\u0003F#\u0000\u0276\u0277\u0006!\uffff\uffff\u0000\u0277\u0285\u0001"+ + "\u0000\u0000\u0000\u0278\u0279\u0005?\u0000\u0000\u0279\u0285\u0006!\uffff"+ + "\uffff\u0000\u027a\u027b\u0005<\u0000\u0000\u027b\u0285\u0006!\uffff\uffff"+ + "\u0000\u027c\u027d\u0005=\u0000\u0000\u027d\u0285\u0006!\uffff\uffff\u0000"+ + "\u027e\u027f\u0003D\"\u0000\u027f\u0280\u0006!\uffff\uffff\u0000\u0280"+ + "\u0285\u0001\u0000\u0000\u0000\u0281\u0282\u0003H$\u0000\u0282\u0283\u0006"+ + "!\uffff\uffff\u0000\u0283\u0285\u0001\u0000\u0000\u0000\u0284\u0275\u0001"+ + "\u0000\u0000\u0000\u0284\u0278\u0001\u0000\u0000\u0000\u0284\u027a\u0001"+ + "\u0000\u0000\u0000\u0284\u027c\u0001\u0000\u0000\u0000\u0284\u027e\u0001"+ + "\u0000\u0000\u0000\u0284\u0281\u0001\u0000\u0000\u0000\u0285C\u0001\u0000"+ + "\u0000\u0000\u0286\u0287\u00053\u0000\u0000\u0287\u0288\u0003\n\u0005"+ + "\u0000\u0288\u0289\u00054\u0000\u0000\u0289\u028a\u0006\"\uffff\uffff"+ + "\u0000\u028aE\u0001\u0000\u0000\u0000\u028b\u028c\u0005&\u0000\u0000\u028c"+ + "\u0290\u0006#\uffff\uffff\u0000\u028d\u028e\u0005\'\u0000\u0000\u028e"+ + "\u0290\u0006#\uffff\uffff\u0000\u028f\u028b\u0001\u0000\u0000\u0000\u028f"+ + "\u028d\u0001\u0000\u0000\u0000\u0290G\u0001\u0000\u0000\u0000\u0291\u0292"+ + "\u0005\u000b\u0000\u0000\u0292\u0293\u00051\u0000\u0000\u0293\u0294\u0005"+ + ":\u0000\u0000\u0294\u0295\u0005>\u0000\u0000\u0295\u0296\u00052\u0000"+ + "\u0000\u0296\u0297\u0006$\uffff\uffff\u0000\u0297I\u0001\u0000\u0000\u0000"+ + ".QSm\u0080\u0085\u0087\u009c\u00b4\u00b7\u00be\u00d2\u00d9\u00e5\u00ea"+ + "\u00ee\u00f3\u011b\u0123\u0126\u0128\u012e\u014a\u0151\u0163\u0182\u0190"+ + "\u01b2\u01ba\u01c0\u01cd\u01da\u01e1\u01f2\u01f9\u0206\u020d\u021a\u0221"+ + "\u022d\u0235\u0240\u0248\u0268\u026b\u0284\u028f"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java index 1cb127c..5e33f9e 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java @@ -1,5 +1,14 @@ // Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** @@ -119,11 +128,17 @@ public interface FunctionCraftVisitor extends ParseTreeVisitor { */ T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); /** - * Visit a parse tree produced by {@link FunctionCraftParser#chopAndChompStatement}. + * Visit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chompStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitChopAndChompStatement(FunctionCraftParser.ChopAndChompStatementContext ctx); + T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx); /** * Visit a parse tree produced by {@link FunctionCraftParser#assignment}. * @param ctx the parse tree From b5fa9310055bf6b772aba4c40aa7eb83894c9ed7 Mon Sep 17 00:00:00 2001 From: javad Date: Mon, 15 Apr 2024 00:01:33 +0330 Subject: [PATCH 13/23] started AST printer --- .../Phase2/src/main/FunctionCraft.java | 2 + .../ast/nodes/declaration/VarDeclaration.java | 5 ++- .../main/visitor/astPrinter/AstPrinter.java | 40 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index 73ba63c..d8ac08d 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -3,6 +3,7 @@ import main.ast.nodes.Program; +import main.visitor.astPrinter.AstPrinter; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -19,6 +20,7 @@ public static void main(String[] args) throws IOException{ CommonTokenStream tokens = new CommonTokenStream(flLexer); FunctionCraftParser flParser = new FunctionCraftParser(tokens); Program program = flParser.program().flProgram; + AstPrinter astPrinter = new AstPrinter(); } } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java index 1174565..2053d2a 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/VarDeclaration.java @@ -8,7 +8,10 @@ public class VarDeclaration extends Declaration{ private Identifier name; private Expression defaultVal; - public VarDeclaration(Identifier name){this.name = name;} + public VarDeclaration(Identifier name){ + this.name = name; + this.defaultVal = null; + } public Identifier getName(){return this.name;} public void setName(Identifier name){this.name = name;} public Expression getDefaultVal(){return this.defaultVal;} diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java new file mode 100644 index 0000000..cf170a5 --- /dev/null +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -0,0 +1,40 @@ +package main.visitor.astPrinter; + +import main.ast.nodes.Program; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.PatternDeclaration; +import main.ast.nodes.declaration.VarDeclaration; +import main.ast.nodes.expression.Identifier; +import main.visitor.Visitor; + +public class AstPrinter extends Visitor { + public void printMessage(int line, String message){ + System.out.println("line:" + String.valueOf(line) + message); + } + + @Override + public Void visit(Program program) { + printMessage(program.getLine(), program.toString()); + for(FunctionDeclaration functionDeclaration : program.getFunctionDeclarations()){ + functionDeclaration.accept(this); + } + for(PatternDeclaration patternDeclaration : program.getPatternDeclarations()){ + patternDeclaration.accept(this); + } + program.getMain().accept(this); + return null; + } + @Override + public Void visit(Identifier identifier){ + printMessage(identifier.getLine(), identifier.toString()); + return null; + } + @Override + public Void visit(VarDeclaration varDeclaration){ + printMessage(varDeclaration.getLine(), varDeclaration.toString()); + if(varDeclaration.getDefaultVal() != null){ + varDeclaration.getDefaultVal().accept(this); + } + return null; + } +} From 8d63e17959e347413a7d3980b25c219062b2d7dc Mon Sep 17 00:00:00 2001 From: javad Date: Mon, 15 Apr 2024 02:04:41 +0330 Subject: [PATCH 14/23] astPrinter done --- Phase2Template/Phase2/samples/1.fl | 11 + .../Phase2/src/main/FunctionCraft.java | 1 + .../nodes/declaration/PatternDeclaration.java | 2 +- .../ast/nodes/statement/AssignStatement.java | 2 +- .../Phase2/src/main/grammer/FunctionCraft.g4 | 2 +- .../Phase2/src/main/visitor/Visitor.java | 74 ++ .../main/visitor/astPrinter/AstPrinter.java | 237 ++++++- .../src/parsers/FunctionCraftParser.java | 2 +- .../Phase2Template/main/FunctionCraft.class | Bin 0 -> 1522 bytes .../Phase2Template/main/ast/nodes/Node.class | Bin 0 -> 645 bytes .../main/ast/nodes/Program.class | Bin 0 -> 2835 bytes .../ast/nodes/declaration/Declaration.class | Bin 0 -> 315 bytes .../declaration/FunctionDeclaration.class | Bin 0 -> 3133 bytes .../nodes/declaration/MainDeclaration.class | Bin 0 -> 1636 bytes .../declaration/PatternDeclaration.class | Bin 0 -> 3332 bytes .../nodes/declaration/VarDeclaration.class | Bin 0 -> 2081 bytes .../nodes/expression/AccessExpression.class | Bin 0 -> 2315 bytes .../nodes/expression/AppendExpression.class | Bin 0 -> 1941 bytes .../nodes/expression/BinaryExpression.class | Bin 0 -> 2533 bytes .../ast/nodes/expression/ChompStatement.class | Bin 0 -> 1237 bytes .../ast/nodes/expression/ChopStatement.class | Bin 0 -> 1225 bytes .../ast/nodes/expression/Expression.class | Bin 0 -> 310 bytes .../nodes/expression/FilterStatement.class | Bin 0 -> 3382 bytes .../ast/nodes/expression/Identifier.class | Bin 0 -> 1546 bytes .../nodes/expression/LambdaExpression.class | Bin 0 -> 2714 bytes .../ast/nodes/expression/LenStatement.class | Bin 0 -> 1208 bytes .../expression/MatchPatternStatement.class | Bin 0 -> 2205 bytes .../nodes/expression/UnaryExpression.class | Bin 0 -> 2216 bytes .../expression/operators/BinaryOperator.class | Bin 0 -> 1652 bytes .../expression/operators/UnaryOperator.class | Bin 0 -> 1305 bytes .../expression/value/FunctionPointer.class | Bin 0 -> 1736 bytes .../nodes/expression/value/ListValue.class | Bin 0 -> 1424 bytes .../ast/nodes/expression/value/Value.class | Bin 0 -> 324 bytes .../value/primitive/BoolValue.class | Bin 0 -> 1621 bytes .../value/primitive/FloatValue.class | Bin 0 -> 1645 bytes .../expression/value/primitive/IntValue.class | Bin 0 -> 1636 bytes .../value/primitive/StringValue.class | Bin 0 -> 1601 bytes .../ast/nodes/statement/AssignOperator.class | Bin 0 -> 1382 bytes .../ast/nodes/statement/AssignStatement.class | Bin 0 -> 3050 bytes .../nodes/statement/ExpressionStatement.class | Bin 0 -> 1242 bytes .../ast/nodes/statement/ForStatement.class | Bin 0 -> 3939 bytes .../ast/nodes/statement/IfStatement.class | Bin 0 -> 2163 bytes .../ast/nodes/statement/LoopDoStatement.class | Bin 0 -> 2595 bytes .../ast/nodes/statement/PushStatement.class | Bin 0 -> 1501 bytes .../ast/nodes/statement/PutStatement.class | Bin 0 -> 1203 bytes .../ast/nodes/statement/ReturnStatement.class | Bin 0 -> 1338 bytes .../main/ast/nodes/statement/Statement.class | Bin 0 -> 305 bytes .../main/compileError/CompileError.class | Bin 0 -> 1018 bytes .../main/grammer/FunctionCraft.g4 | 635 ++++++++++++++++++ .../main/visitor/IVisitor.class | Bin 0 -> 4215 bytes .../Phase2Template/main/visitor/Visitor.class | Bin 0 -> 8750 bytes .../main/visitor/astPrinter/AstPrinter.class | Bin 0 -> 17699 bytes .../parsers/FunctionCraft.interp | 178 +++++ .../parsers/FunctionCraft.tokens | 124 ++++ .../parsers/FunctionCraftBaseListener.class | Bin 0 -> 14730 bytes .../parsers/FunctionCraftBaseVisitor.class | Bin 0 -> 15168 bytes .../parsers/FunctionCraftLexer.class | Bin 0 -> 12928 bytes .../parsers/FunctionCraftLexer.interp | 212 ++++++ .../parsers/FunctionCraftLexer.tokens | 124 ++++ .../parsers/FunctionCraftListener.class | Bin 0 -> 7614 bytes ...nCraftParser$AccessExpressionContext.class | Bin 0 -> 3865 bytes ...unctionCraftParser$AccessListContext.class | Bin 0 -> 2550 bytes ...raftParser$AdditiveExpressionContext.class | Bin 0 -> 2849 bytes ...unctionCraftParser$AssignmentContext.class | Bin 0 -> 3418 bytes .../FunctionCraftParser$BodyContext.class | Bin 0 -> 2825 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 0 -> 2243 bytes ...ionCraftParser$ChompStatementContext.class | Bin 0 -> 2692 bytes ...tionCraftParser$ChopStatementContext.class | Bin 0 -> 2681 bytes ...FunctionCraftParser$ConditionContext.class | Bin 0 -> 3699 bytes ...raftParser$EqaulityExpressionContext.class | Bin 0 -> 2893 bytes ...unctionCraftParser$ExpressionContext.class | Bin 0 -> 2712 bytes ...onCraftParser$FilterStatementContext.class | Bin 0 -> 3709 bytes ...ctionCraftParser$ForStatementContext.class | Bin 0 -> 2995 bytes ...CraftParser$FunctionArgumentsContext.class | Bin 0 -> 3030 bytes ...$FunctionArgumentsDeclarationContext.class | Bin 0 -> 3850 bytes ...aftParser$FunctionDeclarationContext.class | Bin 0 -> 3100 bytes ...onCraftParser$FunctionPointerContext.class | Bin 0 -> 2504 bytes ...nctionCraftParser$IfStatementContext.class | Bin 0 -> 3625 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 0 -> 3336 bytes ...ctionCraftParser$LenStatementContext.class | Bin 0 -> 2670 bytes ...FunctionCraftParser$ListValueContext.class | Bin 0 -> 2622 bytes .../FunctionCraftParser$LoopBodyContext.class | Bin 0 -> 4284 bytes ...onCraftParser$LoopDoStatementContext.class | Bin 0 -> 2688 bytes .../FunctionCraftParser$MainContext.class | Bin 0 -> 2718 bytes ...tParser$MatchPatternStatementContext.class | Bin 0 -> 2918 bytes ...rser$MultiplicativeExpressionContext.class | Bin 0 -> 2880 bytes ...onCraftParser$OtherExpressionContext.class | Bin 0 -> 4755 bytes ...onCraftParser$PatternMatchingContext.class | Bin 0 -> 4130 bytes ...raftParser$PreUnaryExpressionContext.class | Bin 0 -> 2799 bytes .../FunctionCraftParser$ProgramContext.class | Bin 0 -> 3243 bytes ...tionCraftParser$PushStatementContext.class | Bin 0 -> 3085 bytes ...tionCraftParser$PutsStatementContext.class | Bin 0 -> 2754 bytes .../FunctionCraftParser$RangeContext.class | Bin 0 -> 3488 bytes ...ftParser$RelationalExpressionContext.class | Bin 0 -> 3062 bytes ...onCraftParser$ReturnStatementContext.class | Bin 0 -> 2598 bytes ...FunctionCraftParser$StatementContext.class | Bin 0 -> 4183 bytes .../FunctionCraftParser$ValuesContext.class | Bin 0 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 0 -> 68245 bytes .../parsers/FunctionCraftVisitor.class | Bin 0 -> 9758 bytes 99 files changed, 1599 insertions(+), 5 deletions(-) create mode 100644 Phase2Template/Phase2/samples/1.fl create mode 100644 Phase2Template/out/production/Phase2Template/main/FunctionCraft.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/Node.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/Program.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/Declaration.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/FunctionDeclaration.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/MainDeclaration.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/PatternDeclaration.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/VarDeclaration.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/AccessExpression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/AppendExpression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/BinaryExpression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/ChompStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/ChopStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/Expression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/FilterStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/Identifier.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LambdaExpression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LenStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/MatchPatternStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/UnaryExpression.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/operators/BinaryOperator.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/operators/UnaryOperator.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/FunctionPointer.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/ListValue.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/Value.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/BoolValue.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/FloatValue.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/IntValue.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/StringValue.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/AssignOperator.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/AssignStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ExpressionStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ForStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/IfStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/LoopDoStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/PushStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/PutStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ReturnStatement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/Statement.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/CompileError.class create mode 100644 Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 create mode 100644 Phase2Template/out/production/Phase2Template/main/visitor/IVisitor.class create mode 100644 Phase2Template/out/production/Phase2Template/main/visitor/Visitor.class create mode 100644 Phase2Template/out/production/Phase2Template/main/visitor/astPrinter/AstPrinter.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.tokens create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseListener.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseVisitor.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.interp create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.tokens create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftListener.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessListContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AssignmentContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionArgumentsContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionArgumentsDeclarationContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionDeclarationContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PatternMatchingContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PreUnaryExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ProgramContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RelationalExpressionContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ReturnStatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$StatementContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser.class create mode 100644 Phase2Template/out/production/Phase2Template/parsers/FunctionCraftVisitor.class diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/1.fl new file mode 100644 index 0000000..e712289 --- /dev/null +++ b/Phase2Template/Phase2/samples/1.fl @@ -0,0 +1,11 @@ +def compare() + if (a > b) + return "true"; + else + return false; + end +end + +def main() + puts("salam"); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index d8ac08d..a399334 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -21,6 +21,7 @@ public static void main(String[] args) throws IOException{ FunctionCraftParser flParser = new FunctionCraftParser(tokens); Program program = flParser.program().flProgram; AstPrinter astPrinter = new AstPrinter(); + astPrinter.visit(program); } } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java index 0045da4..362c8c4 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java @@ -29,7 +29,7 @@ public PatternDeclaration(Identifier name, Identifier targetVariable){ public void setReturnExp(ArrayList returnExp){this.returnExp = returnExp;} public void addReturnExp(Expression returnExp){this.returnExp.add(returnExp);} @Override - public String toString(){return "PatternDeclaration:" + patternName;} + public String toString(){return "PatternDeclaration:" + patternName + " on variable:" + targetVariable.getName();} @Override public T accept(IVisitorvisitor){return visitor.visit(this);} diff --git a/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java index 7caae5c..6d86a25 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/statement/AssignStatement.java @@ -59,7 +59,7 @@ public Expression getAssignExpression() { return assignExpression; } @Override - public String toString(){return "Assign:"+ this.assignedId.toString();} + public String toString(){return "AssignTo:"+ this.assignedId.toString();} @Override public T accept(IVisitor visitor){return visitor.visit(this);} } diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index decdbb5..ec7f546 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -227,7 +227,7 @@ loopBody returns [ArrayList loopStmts, ArrayList loopExps { $loopStmts = new ArrayList(); $loopExps = new ArrayList(); - $loopRetStmt = new ReturnStatement(); + $loopRetStmt = null; } (s = statement {$loopStmts.add($s.stmtRet);} | BREAK (IF c1 = condition{$loopExps.addAll($c1.conditionRet);})? SEMICOLLON diff --git a/Phase2Template/Phase2/src/main/visitor/Visitor.java b/Phase2Template/Phase2/src/main/visitor/Visitor.java index d8dc171..0f3b09e 100644 --- a/Phase2Template/Phase2/src/main/visitor/Visitor.java +++ b/Phase2Template/Phase2/src/main/visitor/Visitor.java @@ -1,4 +1,78 @@ package main.visitor; +import main.ast.nodes.Program; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.MainDeclaration; +import main.ast.nodes.declaration.PatternDeclaration; +import main.ast.nodes.declaration.VarDeclaration; +import main.ast.nodes.expression.*; +import main.ast.nodes.expression.value.FunctionPointer; +import main.ast.nodes.expression.value.ListValue; +import main.ast.nodes.expression.value.primitive.BoolValue; +import main.ast.nodes.expression.value.primitive.FloatValue; +import main.ast.nodes.expression.value.primitive.IntValue; +import main.ast.nodes.expression.value.primitive.StringValue; +import main.ast.nodes.statement.*; + public class Visitor implements IVisitor { + @Override + public T visit(Program program){return null;} + @Override + public T visit(Identifier identifier){return null;} + @Override + public T visit(VarDeclaration varDeclaration){return null;} + @Override + public T visit(FunctionDeclaration functionDeclaration){return null;} + @Override + public T visit(PatternDeclaration patternDeclaration){return null;} + @Override + public T visit(MainDeclaration mainDeclaration){return null;} + @Override + public T visit(ReturnStatement returnStatement){return null;} + @Override + public T visit(IfStatement ifStatement){return null;} + @Override + public T visit(PutStatement putStatement){return null;} + @Override + public T visit(LenStatement lenStatement){return null;} + @Override + public T visit(PushStatement pushStatement){return null;} + @Override + public T visit(LoopDoStatement loopDoStatement){return null;} + @Override + public T visit(ForStatement forStatement){return null;} + @Override + public T visit(FilterStatement filterStatement){return null;} + @Override + public T visit(MatchPatternStatement matchPatternStatement){return null;} + @Override + public T visit(ChopStatement chopStatement){return null;} + @Override + public T visit(ChompStatement chompStatement){return null;} + @Override + public T visit(AssignStatement assignStatement){return null;} + @Override + public T visit(ExpressionStatement expressionStatement){return null;} + @Override + public T visit(AppendExpression appendExpression){return null;} + @Override + public T visit(BinaryExpression binaryExpression){return null;} + @Override + public T visit(UnaryExpression unaryExpression){return null;} + @Override + public T visit(AccessExpression accessExpression){return null;} + @Override + public T visit(LambdaExpression lambdaExpression){return null;} + @Override + public T visit(ListValue listValue){return null;} + @Override + public T visit(FunctionPointer functionPointer){return null;} + @Override + public T visit(BoolValue boolValue){return null;} + @Override + public T visit(IntValue intValue){return null;} + @Override + public T visit(StringValue stringValue){return null;} + @Override + public T visit(FloatValue floatValue){return null;} } diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java index cf170a5..b8e8521 100644 --- a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -2,9 +2,17 @@ import main.ast.nodes.Program; import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.MainDeclaration; import main.ast.nodes.declaration.PatternDeclaration; import main.ast.nodes.declaration.VarDeclaration; -import main.ast.nodes.expression.Identifier; +import main.ast.nodes.expression.*; +import main.ast.nodes.expression.value.FunctionPointer; +import main.ast.nodes.expression.value.ListValue; +import main.ast.nodes.expression.value.primitive.BoolValue; +import main.ast.nodes.expression.value.primitive.FloatValue; +import main.ast.nodes.expression.value.primitive.IntValue; +import main.ast.nodes.expression.value.primitive.StringValue; +import main.ast.nodes.statement.*; import main.visitor.Visitor; public class AstPrinter extends Visitor { @@ -37,4 +45,231 @@ public Void visit(VarDeclaration varDeclaration){ } return null; } + @Override + public Void visit(FunctionDeclaration functionDeclaration){ + printMessage(functionDeclaration.getLine(), functionDeclaration.toString()); + for(VarDeclaration varDeclaration : functionDeclaration.getArgs()){ + varDeclaration.accept(this); + } + for(Statement statement : functionDeclaration.getBody()){ + statement.accept(this); + } + return null; + } + @Override + public Void visit(PatternDeclaration patternDeclaration){ + printMessage(patternDeclaration.getLine(), patternDeclaration.toString()); + for(Expression expression:patternDeclaration.getConditions()){ + expression.accept(this); + } + for(Expression expression:patternDeclaration.getReturnExp()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(MainDeclaration mainDeclaration){ + printMessage(mainDeclaration.getLine(), mainDeclaration.toString()); + for(Statement statement : mainDeclaration.getBody()){ + statement.accept(this); + } + return null; + } + @Override + public Void visit(ReturnStatement returnStatement){ + printMessage(returnStatement.getLine(), returnStatement.toString()); + if(returnStatement.hasRetExpression()){ + returnStatement.getReturnExp().accept(this); + } + return null; + } + @Override + public Void visit(IfStatement ifStatement){ + printMessage(ifStatement.getLine(), ifStatement.toString()); + for(Expression expression: ifStatement.getConditions()){ + expression.accept(this); + } + for(Statement statement: ifStatement.getThenBody()){ + statement.accept(this); + } + for(Statement statement: ifStatement.getElseBody()){ + statement.accept(this); + } + return null; + } + @Override + public Void visit(PutStatement putStatement){ + printMessage(putStatement.getLine(), putStatement.toString()); + putStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(LenStatement lenStatement){ + printMessage(lenStatement.getLine(), lenStatement.toString()); + lenStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(PushStatement pushStatement){ + printMessage(pushStatement.getLine(), pushStatement.toString()); + pushStatement.getInitial().accept(this); + pushStatement.getToBeAdded().accept(this); + return null; + } + @Override + public Void visit(LoopDoStatement loopDoStatement){ + printMessage(loopDoStatement.getLine(), loopDoStatement.toString()); + for(Statement statement: loopDoStatement.getLoopBodyStmts()){ + statement.accept(this); + } + for(Expression expression : loopDoStatement.getLoopConditions()){ + expression.accept(this); + } + loopDoStatement.getLoopRetStmt().accept(this); + return null; + } + @Override + public Void visit(ForStatement forStatement){ + printMessage(forStatement.getLine(), forStatement.toString()); + for(Expression expression: forStatement.getRangeExpressions()){ + expression.accept(this); + } + for(Statement statement: forStatement.getLoopBody()){ + statement.accept(this); + } + for(Expression expression: forStatement.getLoopBodyExpressions()){ + expression.accept(this); + } + if(forStatement.getReturnStatement() != null){ + forStatement.getReturnStatement().accept(this); + } + return null; + } + + @Override + public Void visit(FilterStatement filterStatement){ + printMessage(filterStatement.getLine(), filterStatement.toString()); + filterStatement.getFilterExpression().accept(this); + for(Expression expression: filterStatement.getConditionalExpressions()){ + expression.accept(this); + } + for(Expression expression: filterStatement.getRangeExpressions()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(MatchPatternStatement matchPatternStatement){ + printMessage(matchPatternStatement.getLine(), matchPatternStatement.toString()); + matchPatternStatement.getMatchArgument().accept(this); + return null; + } + @Override + public Void visit(ChopStatement chopStatement){ + printMessage(chopStatement.getLine(), chopStatement.toString()); + chopStatement.getChopExpression().accept(this); + return null; + } + @Override + public Void visit(ChompStatement chompStatement){ + printMessage(chompStatement.getLine(), chompStatement.toString()); + chompStatement.getChompExpression().accept(this); + return null; + } + @Override + public Void visit(AssignStatement assignStatement){ + printMessage(assignStatement.getLine(), assignStatement.toString()); + if(assignStatement.isAccessList()){ + assignStatement.getAccessListExpression().accept(this); + } + assignStatement.getAssignExpression().accept(this); + return null; + } + @Override + public Void visit(ExpressionStatement expressionStatement){ + printMessage(expressionStatement.getLine(), expressionStatement.toString()); + expressionStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(AppendExpression appendExpression){ + printMessage(appendExpression.getLine(), appendExpression.toString()); + appendExpression.getAppendee().accept(this); + for(Expression expression : appendExpression.getAppendeds()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(BinaryExpression binaryExpression){ + printMessage(binaryExpression.getLine(), binaryExpression.toString()); + binaryExpression.getFirstOperand().accept(this); + binaryExpression.getSecondOperand().accept(this); + return null; + } + @Override + public Void visit(UnaryExpression unaryExpression){ + printMessage(unaryExpression.getLine(), unaryExpression.toString()); + unaryExpression.getExpression().accept(this); + return null; + } + @Override + public Void visit(AccessExpression accessExpression){ + printMessage(accessExpression.getLine(), accessExpression.toString()); + accessExpression.getAccessedExpression().accept(this); + for(Expression expression : accessExpression.getArguments()){ + expression.accept(this); + } + for(Expression expression: accessExpression.getDimentionalAccess()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(LambdaExpression lambdaExpression){ + printMessage(lambdaExpression.getLine(), lambdaExpression.toString()); + for(VarDeclaration varDeclaration : lambdaExpression.getDeclarationArgs()){ + varDeclaration.accept(this); + } + for(Statement statement : lambdaExpression.getBody()){ + statement.accept(this); + } + for(Expression expression: lambdaExpression.getArgs()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(ListValue listValue){ + printMessage(listValue.getLine(), listValue.toString()); + for(Expression expression : listValue.getElements()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(FunctionPointer functionPointer){ + printMessage(functionPointer.getLine(), functionPointer.toString()); + return null; + } + @Override + public Void visit(BoolValue boolValue){ + printMessage(boolValue.getLine(), boolValue.toString()); + return null; + } + @Override + public Void visit(IntValue intValue){ + printMessage(intValue.getLine(), intValue.toString()); + return null; + } + @Override + public Void visit(StringValue stringValue){ + printMessage(stringValue.getLine(), stringValue.toString()); + return null; + } + @Override + public Void visit(FloatValue floatValue){ + printMessage(floatValue.getLine(), floatValue.toString()); + return null; + } } diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 4a0579c..4b8e0c2 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -1445,7 +1445,7 @@ public final LoopBodyContext loopBody() throws RecognitionException { ((LoopBodyContext)_localctx).loopStmts = new ArrayList(); ((LoopBodyContext)_localctx).loopExps = new ArrayList(); - ((LoopBodyContext)_localctx).loopRetStmt = new ReturnStatement(); + ((LoopBodyContext)_localctx).loopRetStmt = null; setState(296); _errHandler.sync(this); diff --git a/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class b/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class new file mode 100644 index 0000000000000000000000000000000000000000..bb4411adb09e7cdf8628462473f229dbeec06593 GIT binary patch literal 1522 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 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/Declaration.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/Declaration.class new file mode 100644 index 0000000000000000000000000000000000000000..5ad92d48127cf8fa06e791eba3513791d6faad2a GIT binary patch literal 315 zcma)%!D_-l5QhJW(bP26V4uK?q#oP{uoQ~oDR`-PpCk)zNj8wgzL%$h2OpphRXPzt z@zfponE&75ALi%xcmnW_(1(ML2RA?$J;HOr#wxBGWy?(0YAq!6UX3-)8=(`uY&|>> zCU*RUWy<-ME7R(W={7r46QcNk@pFRz zQSPf$uS}a6-mIQ|@)x^fcyeI-NJ>r=_C=|)2D;O4&_N6bzOelk6OY2+(g%1FMHmPj G4F3S-Vo3u4 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/FunctionDeclaration.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/FunctionDeclaration.class new file mode 100644 index 0000000000000000000000000000000000000000..52fca1e74f911833dc8475636f3f0cb1457959c7 GIT binary patch literal 3133 zcmb7GYg5}s6g_Jj%P1ly5MCus)0Pn1BshK2VnWL!G_($BYZscNufwg{vCxMs!*rWF zZkY$7?0QW*C^zj!i~C$So?Bi$8Z%@U9M=(x4Cz8~(?E`4_$fc&<&JP#q&&S!P_>8tH!A9-}ikx2&B06rtJ#niDUZ}>GZgT3A{z>c(X~=1;yRs?oRo^_EWnd zD#b@8uHbD0S1r7QYYbE80cS9FY@yt_TqtU=HQ_t%PGyMF@}7nFF~u;}=6m*v=Qg<5 za>Oo;0>NEDv6$8!iYybrE?^or3=}LBQ6d?khX+pJ2+uFCZ>j-9U%14uT8IZoPk%yg zDmrHr7l!_tv*U8n@hRlXNl9Bci)NGiTJ|f86^6>WKqxlCZc`S^weBdi&a6-+Gvup| zYj1Sg+qPfl+bvods(KCHB0fjXqs5Habtu5M&vG#-5=20W?S4@SE>MEcQxqgIAH6@pDKFtI1#9G#3Urs;I`J8jLYXe@2f-_He%&-Mfi4Z{~v} z$kMSSFQ}QEh>~8iv09RrX=)}6Gx5BfVWq;mOs$3C&N+j4S}n@xDWt{oMIsp}%sGXi zCfb7G#)%jtSxK8r5E@Ly)hF#|$O%ui78&nG!`>&ZnTRXiM3Os!5pAPZrYKLCFXiuw^DLjmmWdzn(7+?vq#sk;4{xRLW^mjCZ_lRoBRje3+iSc*y_PEH z54~eY8x`L@?lxO?Fje)uz0Q8r>q5M!v1{^=8P@4sC2W7J?eE@I+EN6u!dtDHBWwzk zweGsMztZACU%Uy_}-UElp3loN1Jj{|7)d6^?Jx zoNn>n{1)w}s|i_p&eD$iWXb3~S$Y9h`WME-7wCTm^JqBuR|r(5=SA8K^dmzcd04nj zGfSD{1AIs`hL7-Z1YM@LgzhW-jp09Okb(q}%o6IzxUXmY2|kUC=V`apl`YLY!|;&{ z$~qrfkE$J!wM3Q?kfd|?jJ`>Ix)WyHiAxDisIYxbAoHk1AXR$zoH3;{X-&$|DbA=g zEYNNhqb!NONw|vP4viM^1wEykixGoKu`*|#V{9ufd01mHdy-9jNq;w`S`%J!i5}rRkD~aEox20)ShGVC7lbzrB7(m2YMy<4PJax!K$$cXB<^IXXfc qM1Le&t~{U>CHh;cmG1~Wh3`?LcaFYn(yxx6XlByrXZ#9|iT?pXsQwB7 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/MainDeclaration.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/MainDeclaration.class new file mode 100644 index 0000000000000000000000000000000000000000..cdc6d88df30a3f8102e661631085dca869798281 GIT binary patch literal 1636 zcma)6+iuf95Iq|wvEzoe^bWL8ptQM^ntKrm5iJM_DU^pqLGZRotl%nfDtl9@e+3dy z0TLg;MdSg|Jaf*R+1dT`_vdc_dw6Oh0Zm6Tixkofn?3Hh7Waka_S?2^ zwe41ydt5ku*LrnkGo;Io>xc@2mdiJE7!31={Fqw<;dHG%&*LXm#}_7aXc{D`EYuT?IIdTh;(b7o?<(yQSVNj@dTMCBPM!)hvVhsbDOlkb^be=Ve1rKVh`vFqe4qdW zNo252R#wFm!!6n|+{Ok)NGywX5-U~s3iC4=2}l4*C1KWSRmrI^S(S8${%>L{1gX+j z5~d5quncVsWhy{fQV}7FWKa@wBL?YNBV5IhC#!%WtxB?DFlCv=@0fjmCRWv&9b+*^ zEGD*bmoON10;v*9?E!6WAu4!!Ot3cU);-)0g&u@Ljbh;kmJ*Qp<5FkGiZDh+73KvRCG{~`PY5Z2-G8Fmes%x= literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/PatternDeclaration.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/PatternDeclaration.class new file mode 100644 index 0000000000000000000000000000000000000000..6b250fc76bb7773d8feddd13b18da8204c10b806 GIT binary patch literal 3332 zcmb7Gi&EQ06g_LeGD5uHlu$w;#U_dSN|RzjlaSERI*S}9%-TBPx=|{ zOi9vorXSFc>h!K8%vu(d4uiD2+I#M~_ny7$zyEpr7l6C4O{CCbpw&Vf(hOJjx$We+ zFY}ID5q`cR%2n=hX}eDT{^^(@ypy?JU%e+p@om|G36@Yd}#Z&biMq_MmS(-3zis`X5$6Y zb=WMDg6=ZPJt<+`-f=jIfhvAGq}iy>g}4_@2Be=z5rxG9!&(y~ZLcPoa}c#%*$sx) zB|2aX-9_6Gs|WjA!Ye6ZG4vJPGOwNpEm~}qyEYXdAIJZXypS6wP<)p!WR$m11=$M* zq^Ne0b{dRlNkSKq9VM=p9G4o74y_She65q#NNM$hK769m#*z`@=gD9GM=?8zlkRII zl6B0L3Vo=t7)Lb`735B$&4o!QY>WCvod(0X7189VOxw#RsXD)zX=db)QvBqkIntD} zpiha7HqA))q(h~7xh!guVJ^~4{NN@ZKO@>k4J8yylNrN!@|T5DDL8dE7fSP5e~C`^ z;u$nTt1Q_vnCtF=R~E~*I#I*T9pk!c#MF=Pxvuo3$7_#-+;uB{2H!DEHSeEilddy) z7l)7SrH~l~W!zaP`2CdVLuFX4X+=fr- zd6Rbhj28L>W^%8=a(}{j`Wo%WFi(d)xw&KX=dK=O__qM^7Cpz1re_zqw+OtG=G}Bh z_h1^m_>8_xhM<^7fo24c1tQ0Sk)oNR@og+dB<5+Zf=LIiPQ9c9i@pF++0c$UVmd;k zR)#wfPM+S%M_cZ9^#4kO6cpJIrayqO!VM7&qaSaHB(zXN>%lWfs9==Sdx<25<0OU> zNi5+$QB~#8BQWE}BMHV~l^+m;Wqc8V6zN@0r>WA}qUB-qj7UP&Jfz)Wj?z@#8-yEr zSfSCE_==v2=3?Z*q(qx@uQ0Y5FWQ*q#jF?2L=le&gJCr>h~U1WCP9h&LJ*fAN>zjhQt`p3CTXBym`TlaDESjVL#wo0 z9{d15%JR-a(g|a#tW;*Y@ANtM^treD_n)7?0KC9T1__K9NSYW$isAYmmv)(Zs%$$g z;gwsWX>pe;>Dc9^-k2e^AZ@7@8Ab}l#u(BVGmtSc4wIocgrvdUKAxn__XOpw4PeBF zwktf(&%4qRwvwAtxD`LqF%vmVFl1U{lXooD;MQ>bt1eX~gFH?cm^5(`Qw$S3e4m#s zZf}*>l`HKn24kOF9kI4al!aRF^V-IaXsSw43x$YEo_suI;xx`MOz-hsQFZJlSMQ|S zrje((t-JxU2pK~*j&nF~;DU*ZxWsTWFlAqQQaNsUr4bGoMuQN;v%;WldcFFs?$aJ^ zhe~yXA>R06gCSX^mSD)$q%BrEdmF;7^9_q4`I^(@7NwK^JPIb&wxo^E{)a+xe@m#< zpdku{;vh0!8G*b*P?q3JT2~Aw(fWcROC&mUs4*JSHzuu|!}ggZ*}blb3QeblH=ClZ z$d1VG!J5Wb$B33uXN6`QfiX<=n}5(gEWo*V$U?ndS*$ROt;;Q&tBy+re6&!X*JMZC zvG@lTO6}!$-bj>n3)iCYo4PlV=5C?fw45x&v> z&gX*UzKBP`9LV}ke8=&hm<9&LOlo4XT}N)?4mshItVWKcXG=eDHWA=QG)Jd2Iq9w^ wY23vC034S5T!{hDJ+R#v7de3*OxQD*ylh literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/AccessExpression.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/AccessExpression.class new file mode 100644 index 0000000000000000000000000000000000000000..7b81949b8432fc2d13d23e8e2c73b1badf8c139c GIT binary patch literal 2315 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 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/ChopStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/ChopStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..aba5fddb4252429a6ff979ac1f1dda4570753eb9 GIT binary patch literal 1225 zcma)5+iuf95Iq|wwsUJ~Xj3kQaw%<`2>giDgh;3Y2`MTMiSoWNt8}Zxj_geZe+3c< z!2=(_MRs|HZcn&7 zw%?B~g`?UG)+T&LsWoKCpOKRc+db)u^Z9fn`~e?Ls8Z{B4xbFUFT*@3=GBD^XuyB# zW7r9V3NEU7%?{Q+a*mOLxq$OQ?kdag{oB?l@vbm)J_IxNi1pcOl{gmr8;nG*~m>C{D<*x2$%uDqv%}q)z3Q0`L z0h%b}lb@WJ6P8$%3F1QqSxPc8iy0Zze26jJnvsDkIKQ+gIn^x_WFkMpUcIcuvP2d| z26mv|K!6blfxZKhoIsvFn9sn#sGQ;05v+8Tf!C H69Yd0T|-Ck literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/FilterStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/FilterStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..809811df0c74a7c3539d9fb0bd8407b79fb3cdbc GIT binary patch literal 3382 zcmcImZBrXn7(F-SjSyZ+T2k8DR!T7mlwfT|3B^(@Hkv|hBDGdOEXfwOgk5HLVdS6q zGjvAmh%qgVn?W(J}`o3`dQ6D#Y{Q z_NE+&ms*l?H!YK{rScuCk5;ei2P_b?zLK5!DLm68{AJ9NO2czz0@uQ4mTR?=OfZYf zwIy}Jy#(whv6U_~lvSR#tT|Qd(5~y0N2c+PyFD+<8SBa;%W@sp)()QP?yl8vl6Xc- zwRqE95~FcEPoauh0^i7l&*L}kRYH%AVIEm~x?dGk4OrLe%-hETKLxYDzfgfZ(ac6u zccv?rwRd>n=eJ;a3B-HGu*UooviwzGy{}I&@B1#+v}Uu)GE8OCWz*E{wWj7cx|6_5 zf!pU|3Zt69D}n31m-4KrxbQyfe}siH$}b-QY(-=-_kQ^>0S}Ycp5r)Q5P|*>+cDhX z_&isfVt_qhq3{->@COnv-(v6tsdjU$FnfYbVeSOk!W}s?89l++FSHpzk>4pK`5hsX z6mf>gVU(|dF-+qEYwkGLWU#;$_Y@93#9j7?=6dgI>1uC3#F$RvK|}dGu~no_f?X3X?mmwj?A@mTV(4K ze9Es>Z6%13ky=DNEfmTXqFn8QBKJ!0Zz-H{s;#T?b)CL$bn&J3ImmdVgK-JVVT`k# zjHifls|$+U8_D~t{EE!at>EJv2A^AUvz3G~UtT6-JfuWYx}fn`r*R>~ zSncvEoj<}_2!m{=llc%Q0-uL6NOc-EDSniTo3P zh9(*#5B>mulyUZhcAlS?r>?D+*PJ! zH-&48&s|5juCy)lP2XflZb?h35<@(@R!<{^vm1u=2pwBDo0wa;uLju#Xts=409cRD9X0g;Oc`^`((L_Tgqiv%?@X-4ZFrMg=-q7 z4a{JcVaDfoBweX&$K0t021CMkF%+_uixn8OUyN3Izjq)Ssz~6YTB;M(GHJ<>sYpxg z_BwmQsqwwGPu_0ucAY!YyNAv(wJ$w>|JMkE<_fjzYpJzPt?6vE!BAI*l(GYxCdeBN z(Nzrjknwp8A@w7MyQ3u ziFnQ=)=0h);U6RMp*YcrhY)4nZdaueB#W_QS;8r|x$6p7!*hm}Ax@)O)$oF0@$yjG zrhpfg=u;4*zb~VcJ_ckZ$WCC6&g*n5k>7i-=YE3a@;{(`qgxE~bS5bV&~Ss!*&qrx zu|PM9_t6+d-0EW$LagLSoKyrS*~dxtaTakq?8&63S2>aU4(%%$(RR{4j1dHcFbsG4 z$s1v^?j@gK0yvK_9zoFi2urw2bv#LSLmH`k?ia4c{QP)CkckM9RG&x+_pnU0R|p~K l&hxC2=f2M%i#XPND~CKiQ}kw?eh;ugH=V3!*u+cB{{wG;bqoLi literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LambdaExpression.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LambdaExpression.class new file mode 100644 index 0000000000000000000000000000000000000000..a66182028eccfabf7fe20fbe38e1587ae00f989c GIT binary patch literal 2714 zcmb7GYi|=r6g^|dk2o$dHc24m5d$gq=CP$E&|)W$6e=NEfRrdwKdzmXS>&vv-3@B~ z6_pyHwkrMJA650t&e~o!W4is|-8*;Yo^$V+JG1`#pWi`=0hXoV`YHzJ~mU$XD19R8&th0{e z2PG7coy8o=1$9cP& zRjLEa?VGQt5}4h0`mPn6dbYrxu9kL^A|`=(XnD^jinMkJ*h&TB2UcJo+iqa) zkE}3yJ5{u{3Bvfjh7LfRlit}p9N#^PT;4P5}V

+`hn-5n^~9DKC}CTfLrr5(unC zS6lM()8Ar+Xqmv0I))d*1g`66+6M>W&GD#x@K`lv{DNd}Y42ba)nu$dX@7X?_3R%V zc||NF&-$ipbkuqOXZV53^2g5(1a8vG;1-|!N{q)V9P=YF9@jBTJBQm`dxvv>5n+b! zE#m`(@dpY&eZcHFN)xj(F>A(}oZ2`?%~(H2yq=by|vLoz{k)C8mX9xki@dDJ*J( z;w)8GI%3(RW$IZ<$y#oZ<>nL?)fRCUrJ}0kYqH$OH&j5jfyt57H)s5c+It$Aa9i`C zvmO#CL2{8;3glbPKhT0yk|3*7LAD6;PzzE@f;6XsJR-<<_?}N$&IaGIoNRS539%l7 z$VSBoJVq;0;w9g*ONwj8Z@8L)j8{Fb#MlhuRp%7Pol`^`+oYVREj>H*D50LvdP<}W GcK-!0s)8;6 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LenStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LenStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..5be4945a5d89604df9f035a5694bd9a379824047 GIT binary patch literal 1208 zcmaKrU60a06o%iS&=x4Ji@U5J>-W0S678kQLP(6!#DuID5blRM!P!7d+F_&rN)wII z3x9w=%6R%=DJyU@oO3wmooC*e{{Hjx7l4;=YA8W7P_|Hk&Tum4(sy~JTt9d(B3FD| zgd&P$;JdH$kU{TBU#dQX*0#r0n5Y`4S*XKeINdHW5dKhcCFa6c47HUwO%1k>t#6?MDz;DTRrcgFpx`)+a} zJk@2eca0Y~?J-076U_AfK*loPpdScbI%hCy0uP5c-7*~ei>OC!%@oi z-xxz{-HuO-f0i6?9_fun-98~zhjQw3wG7G97roJ00Xw^|{ub6$!6qGgg~MPOdg6_Y zZ)U$}@$=XQJfzoMqHl%KO7EMZ3dI#1(%Pb|Pxbi!n)4mZ>3oCng|ZTkXw|6)FmRLB zR@#MIxJ?=LCu)p3?%+7na_Kjos5oC?e5Rl%V^MKLS3*3m6`W`kAj}-X#3MYWO;4yh TJziXSLY33Rf~ORvG#f6#mvpEZdcHanqEP5JE|d?W9%9Ef57mYLdn?Zpw^3VLJV_vA51Pw&ao4 z8TuwX2Fy?x`hy4PLv=VSiCA@H4WsdD_jteW+>hSAd-D%~eKZQlV8+0#i8*8$HV0ff z7Wb9qxLx5};+LT(d|$ebb#S?5$nHr;sv5&gxpI<64tWCw6W3reSkozM zr=_?O1K}u!;y}yyz1}E1-)&B(7+Ya$z4Im(u*i@fhOCV)LmIr%C5`fh6rNo`3D*rQ zo4A3MRL{pC2BRm`F&_wq<#MI@l3#GE&z+vtQl4~rc8Q|;fr(YzVz@cr=c4X99j<Wp^2;*Rpk!tzyQ0@*dJ;Ufd;hxmzNI0v` zBn9bV3V*UU45lwsRA0IhD*w|HZQ~+A1KM#Nroty&G^s9Pn#)ui(~CG3L{d!13B~E? zm}Z8Ya>LT2rsSQD7*aoNMQ%@)N^-i5=o%GlXz~>p!^-=4dNuqnS8K_Ty>{EKQ7PqH zvgdF$@+j9kd+ps=*+=D8n__FoP$3?MLdzX_9dRgi$=piJ{e9hu6w61ht9<40;S-_G z+^(O)9>aVbvdb2-s1@)%elW1FTlEn&|G1H*bK#zgsGq~`J>(tgxK|9n#``w97%DpA zPPZ@o&8F*~kA`;4&uB2jB<}&+6w8F`&tvzaNX2_KqNwwJza^ER7?};n5njE|eP8$n z4jArS@hQnv1CJTj)2~u#g?`}^8o3!7aT$7O?$Qo==+kO|1`++waGOrg^jC%63)R2C zs@tz&RJUHE_&bR*_>|TXW@*jQny06Ld7{}Q$wmmn9o(f85d>;ju+xe%q~J4@BQ-TT zYjd&_?E0ey6v?3ZfORFjb;+8ISZP9_n#5&{Ee*Mrh^sV(OWVch*}`_jWd&zouKEXx zzmX}S(^(ROzBbxX4WSE>NeuUJKLKn^f>#s47FHtg4!t#TQEUDaOK)%!m?T+?krXd2 zcz}mwr_SCny>$R{Th+huVJ5)O1ZfLBSdRrFcNx?iKF1fN{7XWH-f78KB>9>o8SGGM bzX^8VVpp@%Ki|>MMx9Ot+Wm+_9AWieVmT_r literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/UnaryExpression.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/UnaryExpression.class new file mode 100644 index 0000000000000000000000000000000000000000..56e76f8596ec4da62d5ae61cb960c0070b039d9e GIT binary patch literal 2216 zcma)7?QR=I6g}g_UdLHCZJH*OhLD!D*iPwEN*m|~m)0~il4*X#1R;>n#2F>qIJ?&F zBqDFZV}L|K^al^XLm|%WZsU#PwUFiAnd>>{-g7_3|NQ&rZvaoRSwR647A9>JQ4&}= zlAiC#NIQP8ry@uF+z(Y0d4cadKU)fv);-_TO@WD8eP;?~Oj)Sdn1(G-&!_m-m*Hua zr!wFdxYN!@4nVGPcge;KE(;WbzQBVqxS+2>se>?bV&7Zo)~#R`S1ruhxQ2Ow`}v-8 z7z8GLd87p9YW4Ojc_N*j^!J@@9eV!0JImz0W8*sB6<9cuhpH9$U8%qG^Z{3qmcEWC zxONdaf@~U#c+bL;jrXxEa4nAY#EU%YayEC8g+MVj2|THd$;VIy+^oB;-B+rsU4b9R zF=Q$+#!pVx-1-g^*J5i4%(OjUy*xhJRbfZ&_Gp=H2VL3Qk)dbysc}*tc+A!67-z$x z1geqJgFxAn|5K3(ueyI8TVsLq+hgE`i7OJi#g2S97Lu16;u*HVKN=Tq9^AxU)H{f8HJ^v&)ROw776TBh2oVrtiU$V2C9!z|_kp5mzMJw$f zI6UsV8IkGbkg=Qtc9_T!$A8G2Pt%m0+LWRtd%bN>D<;U^^nDe!dNPVsWZ}8M?F*Vl zg=*nzfu-?B*;k1!+~hS};5Ap^hxdNG;+@R51$Huj7r4dU_vR0V@0rG*5RKK>uo`z? zqxxG6_<+w@O!7I!XNAvcTq4;DEz1cEw{eF%62xvqyfTgobnqc+shegT2vCY$4A{;8 zo52=|Fs$?OzI4V~N?CbFppkMpd>cQ-#_zCx<)Q!+Xel;cjcM%UKuW_Q!(Cd8-YmE} z3|<%s{s{L{@HrKk93?7lP{m@73X>5NwL^tTAZzg+s8U7s4_tYJ1z2NN5IxRj$6TmM7bujiY)M&6OIcG&Lz~ioo3wQrDMF%hgDFO-gB%CJ8&ACP zA-qA50D(Y#=A#gECjn9c4>Xc}d}ijJnLGDRzJ34n6+jNQiim=VO~><1rx}`lzS(%<22R)rn&vIfcY^1oE>A*1OdyVgf_Q#;HD@W9wEkZwD}^+Hq!daP zOXW2dlh$1VLR!V`m3*$8Us)?J=~+Kwwb%Qa`1( zyY~s~m+sh-wQ9=@2LujELwvDN>{t#79OjV4RjVvRjtU%;hQwTjo?<*8F|xuu6xOS)(EY~5)#vpoho3_O1$+nYfOu>OR=MNHCGr##;a zrxgtKN_AHjG8GMRo!T&=A*n%V=+ltWFsNa_hJzXoYd9wTIe}Z4m2KkMnhLI@GdpS& zmGo00HcK~G9=_+h#n$G!8r$V>KYSf&1#R)tq-PMoz&L*Wv{n<+e z#-bZOYCKqS0*VRUfVLV7A9(~x+uQJ+uockKXgX7&8JMcoyX~Ft(UONSwUctEvkG*( z(F$tryeAvczkPtu%bPMYPUmr!{t0%?49i&t2x$}%Io1R5pQZ#gVgDIul(tX6}4a^(*7bw+e8&SI&YeTiG@irYnHPOayyQ;Qf*j25K ze!FUrX^4Pq!vtg;AxO4y#Qw7#8cHa3bG`27di9wyr7lH3;PN{}nOuo6QJGwgGtrq` zOEB5ZIeu7GT QNo|gFo3(^xvPH1+121@FSpWb4 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/operators/UnaryOperator.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/operators/UnaryOperator.class new file mode 100644 index 0000000000000000000000000000000000000000..7dcf3a2691cd3d29074502b372d53c370b82dc2f GIT binary patch literal 1305 zcmbVLZBNrs6n^g7u3IfK$BTlXh^QMVbu#c}gh+52lChZ-W)?qPMun2DC2dFan?FfM zB1EI%vp>ps?q$Xi^@D42d+u}YInQ~y=YIe3`5S;$lyoE*3N7yX7LQ`f4|bf$a^4<< zP87L;Zv_WV$m1Z4tSz61?`mC`27_usLy|$M);1XyD*sJV5-cebX~CjxtXH>ep}Anf zl)UTJHGwah7?k)~S>j73vKV5}XX>k!t+LHfeBDQI10xvKF=XO0u2B4@7x)gta4uij z=ZD<#xW8-Fw)dT8Trx0@t2!o3OyU}4^xL59w_B9TA@|x&?G3|XuE%@L<55)VQP^?l z`n#px2!cTJPno!ZX@=yo>$~v^!)Py6*K<8zPeC)ND^n??Q!rB)6ew?E7IUH}GLwj5 zDVOi3D-{11gStk;z%W>GeW%)PZ9Cy6-}XrJ;xCEi`?vvyY$a%Nug*hPFn8%ypSLJV z_RqdCWHy|5FW7m>L$ZmTkP21fJ(onssA(_$%Du?#87NyHl#t_p;Aw@}x zQ0Wg$>R-VcN(YMFP&?4=hSs5mHj*6-*dpumRi^L|OI?arU5e5dV#wZ9jxlotMS@$Z q1iA#bH3|R8Bxqx0E3DG5f-V|L^tC{cucwkp8N#U=pt(X literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/FunctionPointer.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/FunctionPointer.class new file mode 100644 index 0000000000000000000000000000000000000000..6e3f92c3a810e2114cf1f9a4d2e4db56ceeb4b9e GIT binary patch literal 1736 zcmb7E+j0^?5IqBdC4`s+b1@q4F#^%7@fHn;7s`~W!e|u~KKL|&kxT-!)b2o;Kk+lP z%1fCCKfsT&>}6Nn0EzKoXM1|P&zwHf+dqFD`~dJ2PvQt6Y+xjT2%-$vnp`TAJK9uM zO*p1_-?D|{NK2U=-e?Q6;;szQoK#Zh8N#V_WfU=t8i*$_h6IE8FN}@0s%nCKZAqnt z%@C3`hNa@sd7Cw%w0tLposHuZCJam_Foh(;;z^PijJnWUyh+TbQ|aO^?{KrhRoyIU zTdI0CNn%VVFoRi!xhCHe1xr=Aek1h`S&rsPJH#+Gm^lP&3}-NJ;A{ftu)r|WW!RC9 z)Rt{-Ry>0t(seOBPaRXZCwiY?+2EnCws%EUXBpDR;RFOsR~SYLbh``_MXAJAySXjw zGT&~HCt0+ryiwt{boah{oNRB8DGEcj_HJkj5~3xZwTPpQ0Crr{v1zY@S$-mSkOV-L^@zwOn~U&>8-X z4FL<3zL~$>U z`&cvZz-{G+^mF`ebg4Slp78tK>+TI+rH)CKhQht1y{9(a2AV}wbyQC14a5j zPQY_0u}ne^34a@i_hkz9vJX+{Tl)pJ*4tMOvd21IoWd>#P?= zcvomg@m(}V5m&M3W0~}JGa{MKFg}tIgc<9?B)kA0hDshF673`5PH|v@C{G56M0-S{ zJt9j;`b5@zBI7QRuNXhTX`r7_GC*j&N9a0IbfBxu7QNl0W6PQEm literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/ListValue.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/ListValue.class new file mode 100644 index 0000000000000000000000000000000000000000..136359e0e6054b2bfa5c3fb1e5910a940e8595e9 GIT binary patch literal 1424 zcma)6+iuf95IviV?OfW@kR}DnrCj5L;zuMB0u?F}QdE!<<=qLZu$5y+_9mi#1ri9s z10TRgA!cLOxQQu!*`1x8Ip^%m?*97y<0pVa92Aj3R!6RkJT!&}Q(L%}9Z1Xd-t)lX zA7?%f0^zyV!gl7|8mf^&>j+oKEt)6iC z@q9Ys{=gnN?IIp}kC%b?I{{`K1Y$ zM{y_Xji{6>y;S{3-MKUuF$GB`LwbGb3wOd$J%e8MFZ9x>HG4efGfBmYuEOeNNpHIz zg)!8_BCn+}?4|E?27_g{pLPb%)^AkzA2Px$lX4k~eQ)lM`D>vrz-HXTC+dA*pB`I= z-Y%n&o*T_Ow924H511}K>SXVd=N-)|uGstr)@*%+{+U);T%%E=NZP@58f#$`ZeWjA z${V8IBwL|}o?6Uvi>%wY6R}vdQZf1F7wDhJ$Rr3hmINV4J|YOk?o-m;HL2Q)O!YSb z+jOW(LaG)^)z+jc&v~i$aG$tTK@K9R*~-SM&}u?xHiDwT?VAcTiT06#(#Ey8#swGq-*!W1iIh1&g;%356*@%i5pT5sCu z>YdPdd`bee36tA{Tbb8NB#s3CgL4V}SQ|C3H>oO@GR@f;#ziLcM3&m=tLay3Z3)x( zuJl(zxG3r}Q(xLehL@c$-*PMc5dyx{J>ue9nH^T*qJie~0kmhsL&$XBY@*AIu6=|D KR)ikYL;nvZT}>tc literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/BoolValue.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/BoolValue.class new file mode 100644 index 0000000000000000000000000000000000000000..a9e48036a952647a08d6efe65a3b4bf29839fa90 GIT binary patch literal 1621 zcmbVMTTc@~6#k~SE!zrMZlZVx=|x!;5T%4fn-EDVKD4P1K26J{3~YCs-DxBL#Gj#w z#>j&|z#nBi(_QKURTEy$o;mZKGvE2J+E>_{d1!g}Sp zc33gdB%fibddU0Svbob9>okQ|=S`a;xvJaZB#|feIt(V%fux4lFGY;OXbYuANGmsxjbZu>I24m6fwx+ss~Ae5Q0Ju_Erk)n=thG!E~JrMXPZCno(ixqI%TU~ zFK-k5v6^faAT{!8JU6bDz^W^HKv$0I?Kh{XkG!t4OjDQ{jQ8KKL}00S30a&F-|3f8wt& znrKuW`~m(bt%V1M zWZ+_Wov)lneldRY`sSXft0F@$$*a+}LcL%Zs7PC^wHlkkt@2HaJVOh zUbQPp-op8KP-}ODGW}LiYfUn}$V@Ber~$+IINi`obW^-u7fs5Xjf!x(Ox;y#Q5ZEV zQb!bQI*So;Tj^$5Dr6T!)dv7 zVM@Q~1II%<=Z_wZ=u5{@o^pBfjZnMJmY2pngKk!ihI@$(q_B{|BA#e?>QCkp!_@KI zO1tgsi)g;XVKsT32JC?0Lwro5!0?(^+}^T;H&t<*{Z_LWlNNO(<~fmArSf$Ne;137 ziW6^h1hK*`YeOnQWzkn{TevG0_dMZgct+318BN`&YIx2t@$XQYrcf7d((BSgzi37) zy)Sf1(m9E1v`&y^lHdQHDSQJfOn!y-nXDdMr}Y97w5HLEKKjex23ff>Y%616lF+)*4$Qteb)#=&74~+H%`H7%D zp`cuhPP#)UjRI!r^1GB7iuFDB$TJt*Z%}RT2d4*k=%dq@$MpXQMY1wu=B8rlTVyY-o72zSN_~6qJ#xStiP3=xn@+W?T z4_c+A^56&fQI@@zgf)p;`jDBP-tIH!ba&?akJE1ewy>2%1Vb8zQ-~tQaI?XssdGo^ zrgb13UA$@9!f~W!>TPbcgkE)5hFD&jQf)E}WtOT5#F5aDOko5mhSk4eG;P_CO16bw zG*t&sdL{!aCUFj<8pcvMk8y^vBi`n^!Ogl}R<<!77=}q)m9_%4f?>2IO|jc*>kFZ2I49T+9vTI^n zx`j`7=61y$JsQ#HmZcnJ^X3bo4y^+xjx|c@L~XFq7#=3Ejz=0EyK}k0uy8iD(rjDD zBA9M}RJVDJ#_NRPZFoq7K>v~*ZXOuIStwc7ajTgN$qKp=^8Aumq0$Wqe-(-k3KMQ| z08!wEQI<+jNm51A6n4Sjjw2imPw4gN(=>>xhNleke-5Qd@^#@FJuVUYKQmhCc_AxG zb`+Osou|_#`Q7iy>}Rm->?dd+=oG;fT4NLg%D+nMlpjTS*Xcy@9vZzjxPgTLOQ+q< zh-N=Rdq+kXX2gR@`2hh8N$w*O>mlL3u)ru$9t#nPb&15fL>6%?AhI41NxMY8AbpAp z!22FT;~_%nE};yT=t8$LyR^Gk$CtBTF&**pheCCk2+@gm>BN!6GF^Y0GJUbG=MH&R fy!&+w;jU-h!>Wr;Umno!K5}$Ql9i{PJj2XS&lQcH literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/StringValue.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/value/primitive/StringValue.class new file mode 100644 index 0000000000000000000000000000000000000000..117ab0fa84682314fe9a3f6f998a6baee06d80a1 GIT binary patch literal 1601 zcmbVMTTc@~6#k~AyJabYm5V4|P{3Z4^#Y=lG|?tRV#S9x^}(m1OkiNU+w4pm`6vDi zO*BRx`~m(bX?rFjApz zGfY&aD|R}qUE$aHu0u$+>NUC3;Jys@5jdg`Bo(}VL1lD%`$ALe8K!b^nc;1aOhZNI zY3+p|VZ7NCZOu@OI&!{e!z(r;H@dk{?m!sB%-JH3+oy%j4-eU_*GpxRIa-tZF4rBO z8nwPz--umy)ba9Pw1y0M;$g6AUdL~WEgAHCGAy?@kt@L<67J`%ZmUl?K1#v?Ko>8zYY!xEXQT^bI0Xg)cBakrAgE>(OLFhlqyZ)_@S>oQU8B z1>JcHlQAJiUx?8ca=R~NH4QM7I25M1#Q`(Z;&@#EPTi1L@z!W zYsyqiOS-Qmjk{Q++)ET0RvIA7gxn(}fgF;^_pAbn0Xv$L6o>`&5> z2+?Tx?2j^@dzrBWO}3;xea=1Sxjj#xyPvMBB47w=2qDZ6&gpvob%`NS=&?J^+Z7EF-rl!YsOWF6IC#EK zgU0h(F<-j2FrZU&}2GF+o+V6!v}jVGScZuNKQYzVvMkcQD2v&sKAV z%C63keADx*tC+x~j4=&&agQNXZ?tTaVK|;BoEWD@s$tkisq(>zS@+T^rtm<d0B>0 zKUKFgpQtJbsif|lf`|f5!JvYef)Sou*6;)?To3U+F2iCx(YqqF_n*GtHo1mjuwdC{ zsogvrb*?imi%c&0-` z1-)a7LPRGY8(!O?RwRjSX&%Vf}$!B`2?bOXz79V-&`iWWMAAfV1 z0n5|IkJKcWV?JHx_p&y#1>0P=SZGG5?~=HfGogb xNB~uUM_~c_1z3^=hzgKW1Q@!&<1>u%nXlAVX?D<7C6Xl29c+{SSGguzzX99DC5!+7 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/AssignStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/AssignStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..d820241385b29f6a07db4165ae439c3de76d9454 GIT binary patch literal 3050 zcma)8+jiST6y4+a7FSN{T*-xA)7F=?1_}h?5Spe94Y&%n+ z;3If|wFoTwzz6VAtnQIyOOa)l2Wv*7v-de?&zUp+_rF*F0NB6}8N@J>LR>)tNr4;3 zs&153%Pt#cQ?tsJt=ihLX4vIgcP5Zr(+%BT7Z}MGc1MxMXbKqxm!Jsb2NG;pmVRIa zXfkS}p;=Z{w`>8iCyB-sjN`IEMsLo=^nK?XDB=jl7j z;B8z<;i`gbxGu2te^L}k+h)z~=*9tA^M&e5^;9jlRO5iVBUdXE+|-*2mT*g8_E=Z&l|Xi0GYqU;0M@Bsg!zkr zy{AvGO?ecXYO7V#ZH>w(+lHZaHe0G?X;uo~3Eb+-DJs+yUI<(nZpwmk^TKsrYcaO< z1fRTNIg80V(iwTzIU}zbXXLHLF$*?jEc1DnZ$HyM!EwI$7esO49I4{+IkLsO=g1Z3 z;^&zD-ND|IHc0Y0jyU;8k;51!c%M#Uj{IeQdEaHiJ9w9G(q2X+oSBSC#yKxx;B7IYA?Ayiss6Nxo(ncX#kg0PI7&WRX*kJ`Fb(Oz)rb(-62b1wlJx*dwkO;p zJf^&I2cL12wVf^%|Hkc@gC7Y9|G>e!^`7q4dm3B#jLx4B>28W#+2+dUT#4Zep0KJj ZdrA*v=a;Ye+re|bWjOm5d-xu6uL1O-!RG(~ literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ExpressionStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ExpressionStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..544c8e199b29e25e8b0de15e1f65ab6c0bd897cb GIT binary patch literal 1242 zcmb7@-EPxB5QWb;iS7K9lr&8X6bc1OoIrhvM50K5KthVjMWWn0!3tX?c4TiVcq@=V z2rhU49ttu3sqMPy1vl&2*_pH7o?ZX>`|CG=m*`ZWprD~xLkTM3XlV(@w0vng?g!g9 zeQ8O1X*<#!T|@-6FB~BUghJbxl%b=np;AK?HNw+t1>SsGdA9Eh*U3m#>?BJ#9_E_U zMKkU0>9|4INfU`&72CL}p;5yQnuOg@?Ogamx}N!N5(R`(m?FGt=l4rbyFtBY49~1{ z%UoE_+3(ho#?#xB3HJjNhN$AEt6Q~Kl`bl$zwYS+`t2V{R;m{#3R3dj!GPtu*+kMX9La$>y^$AP^bGH+E<<_ z*yB;<8gTzUkFBT*w{V+hTpy|tSKPrttYz{y=qPo*LHoi%R;C)t)S`k|hH&=^h?;{4 z{(qp($lDnZH33l*kb5|cL7v4Rg~nDMqmjWVBpCPECnfabl)u4-dbjfvbp=6xA>&3f g1ED7nI*#y=H+{s_(Gi2pW6m6NM!^$~+F@k;1EEMFxBvhE literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ForStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ForStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..77a8de6a4abca336335d4a2b2e76a6568a71de5d GIT binary patch literal 3939 zcmb_fYf~Fl7=8|r3t?#~fwZ)>_X`BtR9i&}rBEyuO{o^7)_PmQmTnt%ncbx$f5T7y z44n}>)){|*f5d;`_?)ww>}GS~WJW)*IhXf+-uwF={`~vR9{`r{tbjiB=P+O(gRH=X zUDI|drXN%sciZwSeqaXHuH^)k_2x<-J8wI7uprPsIklNXUZD8Gd}UVl1G`aK@;vjP zX8S<_IrI-=2u2RW29DsUz~!#+E3TK2Fyficj&<+*Juw(;_~iYVfpK}CZ{Ewp;|5M(LZDy=mS+a8x4JEGrIymqYH3he-KH1pXSU@j zp{ER-##;hMJuBGvoP_S>G)U~jNA0xL0?y)G4(APAz(s*ey+{|x?O4H@xoZiGO-_Yg zY0zDakY_tP)lmlavVkkODsX()d}%GaPTdS1+re|LsEiZPomVD1IW=HIm_j*+X#+F3 z#vmvSU)jD*k5yJT!-YUb9SKw?yBnX3a5X9F;noYQ9#jPe*X{f=$S}3)H9_&THBL5$J({liI zj{Sd`V?V4nI~zma-CMedlvs(i&Zfh3C3DP;s^2-|Zqu~kZp zjutzVFozY`qo#UC3Jeo%HPKurJ5|&d66XckWk_zGX=@Qoak z-*WJ(r-jnQc3!zJt!S2plXJzabJ`sU{Ft1X5n(9fzUgc?EdLTEyxiZ5ntgI8Cv0tF z++bhTkUve(N4`l;%m`xHY&6#SexX;4RmZWs<%a3|mY>5GpIRL@=~T^ut^UlvlQK_2 zyKtTlr#?O}GW_!O#8sbs*FoUAT35K|Q><;zr&nu#gZF$jk#?A88NAK?JKX(+eq{N( zRDKOn{vEj|uQ7OtLcAP_m&Nk*Axh;Ld4KH?Bjt&KLlnysnM0iXnIQeR$!{42en&9? zg9;4eBo)1kBG1QA;d}5FN|?iOEYgfyq+AFUz`J;lJNY!8<&97)X`(cHNg3C#R?@5i zwUP#9@IKe)C|gn;p@b%VB|00&4bq2h`hd7|s7A(DxRY`+iu{Q6kLQH!94y7!1ks=F7dVdWUBdl4qXP00}lzzpT zH@F0((_vY`g-#xhf+_G&g-$B87KJcBUH%P|eTqNq4Pj~BOQ@4?B|{#c;St5hM$40R io`eD1U_F0M^ge9jF@N*C`I3KM;5+ULT$!lD!o)x8dB*_& literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/IfStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/IfStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..f088f364a6cd0df4a7f32ac93e10e180a49c037b GIT binary patch literal 2163 zcma)6`%lwQ6#ni8dlnfRZ}EX3?jh7S%En_5Oh^_q*)pT?m$FqTDJ^L)ME)yHM4~4C z0sc|ObK9;fqnQ2B+jCEQzVDpxoO}QL{rMX}6`LtU5RGF%!XRP{_l^|JkQJNDhS^qa z+2#sYk5q%p^^V05t7wMC*BGMtLNks8L+(&HRpb+{>2lSwl(U*<^AzHUCXt2|$B={@ z7-pEi7JlbbfFRW}jkd-$)36!FY9Zid0X!lhD^L^sKs7ea_L*>wN*HsTs&1>oDe{<* zFo`M3Txqwfy3R0_51?+Dx~{eaUAgcfftw8JKsssM!tFTjNVtnxO2;YTRI@d1TJlcQ zH5djR7sE=v)=!b;f}4P@82j>@y+h(JGbHQUzM=3FOJ!IMWax`p=>=CmA6u$zQ||J% zZ(3@Qs zJs>FMCQ%=@Iz48X40gk>wOnYDBK{~aj9;ccJMPeLgvR%+mEcL+DsOmW#IV*MV7I(_ z=X8*G9k^|802zk%RqmHdI!)xg?q5DJB+PpFm%dA(LWrwd$ZDT>;gz^(-8vH7taD2< z_8CSyz|H`>UdlhFv|8#hXDE5cp!cAJ&wbqcjihl$=t>yFO!${dqu~tfa;33y^+-`8 zL(i)lRiIdgRNXwWTIy>}jCUq5s7vDF!7N=W5xOj+w9+L8x+G~A!5lqw{rLNN+SAPw z*eA)RTb0)P6!DP|7`+#Y7huI-h`+x;@*JtIndzFjuMWootyv7vnxr*F=xIzt!UOV1 zE*kPE(2k*q5@jHm-qKrSoGN}ps`MS>?*v*D0!?HCszV@*yMK8I^gkXt`7hEp7hQPf zD8j9Hi7eS?sd+51V(A>2UWVZSL(FH0d5U!zglFDoctqCYa0W+_U=5jT7~CEN8OC}T zp5Q6vE|ijqPv|iyl=?zOBp}jAK;}WO1XqY>6!bh4B-0C$y%yvJfh>oDS){ipCz_q^g%}G!ME#jrLD^Gc*Xw4YRQ!RN2t<5P?FlE|otT8*&jc!1CCaYa R!m~ymSEzNeHV7$#>OVe3)t&$V literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/LoopDoStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/LoopDoStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..5e8706a81bb454b3d8dd1ca3f9d1bbb0c9f12479 GIT binary patch literal 2595 zcmb7FX>Zd&5Ph4wX=u~C94)k5iQ8iC%W0up5>iwoS{3opO|9Z8wJY02^asIbkf;zK z@dNl#h#BuDaa|h)MX`5hJ@3uDot^#t=f^Jqt9VjI2H7HV735J6nBOyPM>qXIcie5u z*Zsf@tUb#K^!3h2pwO@#J6I9O*6N!@lmy0h&G)8$5ZG;f)$`25rtJr16p;0AF9XNx#j!3<_8vJmaP?c0It=`T0s zKp-EQ1XgP4d@*FBF0*W#&W`?SYu9Q8hQPqOz2le^m?dB&$YG{5JJn^{s%@iX4jR#Lx{El&UV_ zz?=xp?;Pvi0jHg2fDuL4J5d6U`vXnOmtlt#Z1*%S{o{BfRZ4Z|gbY(Pb#9J#ATIdi zl|E%45foWeghzd1rl~+0DAcY7iv-zsPZB5v)G0mN*%27;1QWIlX{EdiW~*iGQ?FZ4 z>c-nsa;GV(&jhAqJSW@)&LyujHa5Z*aj&uQP*z^FiFJBl98Y@H$ycDf?jCq8>xIq7 zemr)7uW>PBj(U2AF0L#+=|X|Pd75Q#f&O#{bmwz4r^Zif17yo%p5_;6_K7@m^wzX* z5ZX@^-+sfu5z4(`Ra@Zs;t{Ia(hr`qv h6Z*?~D0S3Dvh zhfXM6$uGGlo%VRfkZTH0$U}xq)$SIMN5MqV!ZIv|-Gu}nN8x#b#8e!@9TKE9gW;dA z0v?9K_nh~WX+sIESSTx%g7n|=qkf0m2@iy$%g?sHfL)RNPr)L+uCmRf>bMW-`XGPL?*D zOvp$e4P2T9ucU&vu|ssq-~magAadH=t*=PBtkE0Mj)|9C?1kZ3I!_{>h-Y;Hk4i#0 ze~uS%KdA@=}FZg6zle&0s|EtriC?FgyUNc-p^Ie!xW!pfe1tCdxVqjl4|kL zd7aI*3~Ugryw4i8u&twN;SP2PyRprs45jh|=j|XV2<5m%Xw{crv^ZbhwqZ1$^ zr~gSuSRV_u2!>Fv+soS3Y%C40OAY1sR3N=EVTWB7=T5qOZp|Hy#7q&IX#mRsuZ~Mk z#|V1~+YK3^c0G;Hv#Uh*S4-OceyhVsm7W}Xu9^p&=!0IpgUFL|X}A z<{-2TLdzf?;UI;0mO>P(>&pmM4xyMKJm!oFaTez(g3)aJ#AX4JzL-m5BL`t*5C#r$ Y#4mly)5-Co&M|jR;s{Q;s>hZ651xt>kpKVy literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ReturnStatement.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/statement/ReturnStatement.class new file mode 100644 index 0000000000000000000000000000000000000000..9bd64a0712f2cac012ab22c32d2965789184d65a GIT binary patch literal 1338 zcma)6U60a06g@-vD5bzI%d&o~U#qUP=+*}l6CotVs4*dHB7}#1E7-8zKq2k0S^tv{ znz%9g;1BRe8ShLBlrAQQq;u!?o^#JVGv)W6pT7XS#8V9^C^@8cWRPVznAomo*#Wn_ z=|?B90&a6>;&|NZE+U3(%k^B|W>D%zKMxi895fvT=nVCL5`1v@-1lNM`BOWfDIn;FQ;TprPWIA^P zmrs4`T|W#MGBU-`t|xn~#!oOejn0{UZd+s98(HrMXU>o}8Pc!FG?LMAJ?D5n8908= z9*ikd=}d?AxNrNe*hk4UKXn5J^Z%PN=p%=RQlvTcx{*Y0wug|x8q&Bj>t>+QXV_XE zROGfi`4a|}PrKZAy%9r|l&l;Hv*bwD9uA!uXJ|zIlJ0LdG8dIG?1l4Pficw9J^eIW z_`1It((3h^ZIYDlx+Bk~yGZBqyw!UVlN}x8;vOWMh71PrFlgQB+#fn`TyebB#O*i| zPT(Hh=oEcrDf-d1mJxj;v}QqG?isyjv})#eFjKii?yIc55mf?t+@x3!tFVt- zv}3r9JMmT(sc_ht=3wtRH+55<<*EWQPM^dY9DAY#;0MKz?5Z%><*3n6F)#q*e^sH&RLSmLXlKc9)RDk_FqrT{sNeV=h(Q)#Hiu#G&tNzurtZ3>i-XHpYA;np(Nse3E8JR$#a?0mELU zHJ@6Y4>8&7*^hEZ35%-$+0j)-4AluVX(u7ORV&|#0ptF zvr)#bh3BDUdkp0pL8Us^BT=8}I#cn8yGHvL4BsjVtzzJe3PCp3yM`X}yzMu)u5;eSGVq4pE3wsi%owtt1?9}#ea z)*>YWSz0YblTPacij-z)*u+Efs6a%+A}b_H5y2K7#Wb%XAIR4(iQy8<*H{I<6FP;E nB}+I^g|M;{+4;C~8jmB?HlEO)qqC> argRet]: + { + $argRet = new ArrayList(); + } + LPAR + (id1 = IDENTIFIER + { + Identifier id_ = new Identifier($id1.text); + id_.setLine($id1.line); + VarDeclaration newVarDec = new VarDeclaration(id_); + $argRet.add(newVarDec); + } + (COMMA id2 = IDENTIFIER + { + Identifier id_2 = new Identifier($id2.text); + id_2.setLine($id2.line); + VarDeclaration newVarDec2 = new VarDeclaration(id_2); + $argRet.add(newVarDec2); + } + )* + ( + COMMA LBRACK id3 = IDENTIFIER + { + Identifier id_3 = new Identifier($id3.text); + id_.setLine($id3.line); + VarDeclaration newVarDec3 = new VarDeclaration(id_3); + } + ASSIGN e1 = expression + { + newVarDec3.setDefaultVal($e1.expRet); + $argRet.add(newVarDec3); + } + (COMMA id4 = IDENTIFIER + { + Identifier id_4 = new Identifier($id4.text); + id_4.setLine($id4.line); + VarDeclaration newVarDec4 = new VarDeclaration(id_); + } + ASSIGN e2 = expression + { + newVarDec4.setDefaultVal($e2.expRet); + $argRet.add(newVarDec4); + } + )* RBRACK + )? + )? RPAR; + +patternMatching returns [PatternDeclaration patternRet]: + pat = PATTERN + { + int patternLine = $pat.line; + } + patternName = IDENTIFIER + { + Identifier patternNameId = new Identifier($patternName.text); + patternNameId.setLine($patternName.line); + } + LPAR targetVar = IDENTIFIER + { + Identifier targetVariable = new Identifier($targetVar.text); + targetVariable.setLine($targetVar.line); + $patternRet = new PatternDeclaration(patternNameId, targetVariable); + $patternRet.setLine(patternLine); + } + RPAR + (PATTERN_MATCHING_SEPARATOR c = condition + { + $patternRet.setConditions($c.conditionRet); + } + ASSIGN e = expression + { + $patternRet.addReturnExp($e.expRet); + } + )* + SEMICOLLON; + +main returns [MainDeclaration mainRet]: + { + $mainRet = new MainDeclaration(); + } + DEF m = MAIN + { + $mainRet.setLine($m.line); + } + LPAR RPAR + b = body + {$mainRet.setBody($b.bodyRet);} + END; + +functionArguments returns [ArrayList funcArgsRet]: + { + $funcArgsRet = new ArrayList(); + } + (e1 = expression + { + $funcArgsRet.add($e1.expRet); + } + (COMMA e2 = expression + { + $funcArgsRet.add($e2.expRet); + } + )* )?; + + +returnStatement returns [ReturnStatement returnStmtRet]: + { + $returnStmtRet = new ReturnStatement(); + } + RETURN (e = expression{$returnStmtRet.setReturnExp($e.expRet);})? SEMICOLLON; + +ifStatement returns[IfStatement ifRet]: + { + $ifRet = new IfStatement(); + } + i = IF + { + $ifRet.setLine($i.line); + } + c1 = condition {$ifRet.addCondition($c1.conditionRet);} + b = body {$ifRet.setThenBody($b.bodyRet);} + { + ArrayList tempArray = new ArrayList(); + } + (ELSEIF c2 = condition + { + $ifRet.addCondition($c2.conditionRet); + } + b1 = body + { + tempArray.addAll($b1.bodyRet); + } + )* + (ELSE b2 = body + { + tempArray.addAll($b2.bodyRet); + } + )? + { + $ifRet.setElseBody(tempArray); + } + END; + +condition returns [ArrayList conditionRet]: + { + $conditionRet = new ArrayList(); + } + (LPAR e = expression + {$conditionRet.add($e.expRet);} + RPAR ((AND | OR) (LPAR)? c = condition + { + $conditionRet.addAll($c.conditionRet); + } + (RPAR)?)*)*; + +putsStatement returns [PutStatement putRet]: + p = PUTS LPAR e = expression + { + $putRet = new PutStatement($e.expRet); + $putRet.setLine($p.line); + } + RPAR SEMICOLLON; + +lenStatement returns [LenStatement lenRet]: + l = LEN LPAR e = expression + { + $lenRet = new LenStatement($e.expRet); + $lenRet.setLine($l.line); + } + RPAR; + +pushStatement returns [PushStatement pushRet]: + p = PUSH LPAR e1 = expression COMMA e2 = expression RPAR SEMICOLLON + { + $pushRet = new PushStatement($e1.expRet, $e2.expRet); + $pushRet.setLine($p.line); + } + ; + +loopDoStatement returns [LoopDoStatement loopDoRet]: + l1 = LOOP DO + l2 = loopBody + { + $loopDoRet = new LoopDoStatement($l2.loopStmts, $l2.loopExps, $l2.loopRetStmt); + $loopDoRet.setLine($l1.line); + } + END; + +loopBody returns [ArrayList loopStmts, ArrayList loopExps, ReturnStatement loopRetStmt]: + { + $loopStmts = new ArrayList(); + $loopExps = new ArrayList(); + $loopRetStmt = null; + } + (s = statement {$loopStmts.add($s.stmtRet);} + | BREAK (IF c1 = condition{$loopExps.addAll($c1.conditionRet);})? SEMICOLLON + | NEXT (IF c2 = condition{$loopExps.addAll($c2.conditionRet);})? SEMICOLLON + )* + ( + r = returnStatement {$loopRetStmt = $r.returnStmtRet;} + )?; + +forStatement returns [ForStatement forStRet]: + f = FOR id = IDENTIFIER IN r = range + l = loopBody + END + { + $forStRet = new ForStatement(new Identifier($id.text), + $r.rangeRet, $l.loopExps, $l.loopStmts, + $l.loopRetStmt); + $forStRet.setLine($f.line); + } + ; + +range returns [ArrayList rangeRet]: + { + $rangeRet = new ArrayList(); + } + (LPAR e1 = expression + { + $rangeRet.add($e1.expRet); + } + DOUBLEDOT e2 = expression + { + $rangeRet.add($e2.expRet); + } + RPAR) + | (LBRACK (e3 = expression + { + $rangeRet.add($e3.expRet); + } + (COMMA e4 = expression + { + $rangeRet.add($e4.expRet); + } + )*) RBRACK) + | id = IDENTIFIER + { + Identifier id_ = new Identifier($id.text); + $rangeRet.add(id_); + } + ; + +filterStatement returns [FilterStatement filterStatementRet]: + { + ArrayList conditionExps = new ArrayList(); + } + brack = LBRACK e1 = expression SEPARATOR id = IDENTIFIER + ARROW r = range COMMA e2 = expression + { + conditionExps.add($e2.expRet); + } + (COMMA e3 = expression + { + conditionExps.add($e3.expRet); + } + )* + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $filterStatementRet = new FilterStatement(id_, $e1.expRet, + conditionExps, $r.rangeRet); + $filterStatementRet.setLine($brack.line); + } + RBRACK; + +matchPatternStatement returns [MatchPatternStatement matchPatRet]: + id = IDENTIFIER DOT m = MATCH LPAR e = expression RPAR + { + Identifier id_ = new Identifier($id.text); + $matchPatRet = new MatchPatternStatement(id_, $e.expRet); + $matchPatRet.setLine($m.line); + } + ; + +chopStatement returns [ChopStatement chopRet]: + + c = CHOP LPAR e = expression RPAR + { + $chopRet = new ChopStatement($e.expRet); + $chopRet.setLine($c.line); + } + ; +chompStatement returns [ChompStatement chompRet]: + c = CHOMP LPAR e = expression RPAR + { + $chompRet = new ChompStatement($e.expRet); + $chompRet.setLine($c.line); + } + ; + +assignment returns [AssignStatement assignRet]: + { + boolean access = false; + int line; + AssignOperator op; + } + id = IDENTIFIER (a = accessList {access = true;})? + (as = ASSIGN {op = AssignOperator.ASSIGN;line = $as.line;} + | pl = PLUS_ASSIGN {op = AssignOperator.PLUS_ASSIGN;line = $pl.line;} + | mi = MINUS_ASSIGN {op = AssignOperator.MINUS_ASSIGN;line = $mi.line;} + | di = DIVIDE_ASSIGN {op = AssignOperator.DIVIDE_ASSIGN;line = $di.line;} + | mu = MULT_ASSIGN {op = AssignOperator.MULT_ASSIGN;line = $mu.line;} + | mo = MOD_ASSIGN {op = AssignOperator.MOD_ASSIGN;line = $mo.line;}) + e = expression SEMICOLLON + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $assignRet = new AssignStatement(access, id_, $e.expRet, op); + if(access){ + $assignRet.setAccessListExpression($a.accessListExp); + } + $assignRet.setLine(line); + }; + +accessList returns [Expression accessListExp]: + LBRACK e = expression {$accessListExp = $e.expRet;} RBRACK; + +statement returns [Statement stmtRet]: + i = ifStatement {$stmtRet = $i.ifRet;} + | loop = loopDoStatement {$stmtRet = $loop.loopDoRet;} + | f = forStatement {$stmtRet = $f.forStRet;} + | puts = putsStatement {$stmtRet = $puts.putRet;} + | push = pushStatement {$stmtRet = $push.pushRet;} + | e = expression {$stmtRet = new ExpressionStatement($e.expRet);} + { + ExpressionStatement expStmt = new ExpressionStatement($e.expRet); + $stmtRet = expStmt; + $stmtRet.setLine($e.expRet.getLine()); + } + SEMICOLLON + | as = assignment {$stmtRet = $as.assignRet;} + ; + + +body returns [ArrayList bodyRet]: + { + $bodyRet = new ArrayList(); + } + (s = statement {$bodyRet.add($s.stmtRet);})* + ( + r = returnStatement {$bodyRet.add($r.returnStmtRet);} + )?; + + +expression returns [Expression expRet]: + e1 = expression a = APPEND e2 = eqaulityExpression + { + if(!($e1.expRet instanceof AppendExpression)){ + $expRet = new AppendExpression($e1.expRet); + $expRet.setLine($a.line); + } + else{ + AppendExpression appendExp = (AppendExpression) $e1.expRet; + appendExp.addAppendedExpression($e2.expRet); + $expRet = appendExp; + } + } + | e3 = eqaulityExpression {$expRet = $e3.expRet;}; + + +eqaulityExpression returns[Expression expRet]: + e1 = eqaulityExpression + { + BinaryOperator op; + } + (op1 = EQUAL {op = BinaryOperator.EQUAL;} + | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;} + ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);} + | r2 = relationalExpression {$expRet = $r2.expRet;}; + +relationalExpression returns [Expression expRet]: + r1 = relationalExpression + { + BinaryOperator op; + } + (op = GREATER_THAN {op = BinaryOperator.GREATER_THAN;} + | LESS_THAN {op = BinaryOperator.LESS_THAN;} + | LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;} + | GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;} + ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);} + | a2 = additiveExpression {$expRet = $a2.expRet;}; + + +additiveExpression returns [Expression expRet]: + a1 = additiveExpression + { + BinaryOperator op; + } + (PLUS {op = BinaryOperator.PLUS;} + | MINUS {op = BinaryOperator.MINUS;} + ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);} + | m2 = multiplicativeExpression + { + $expRet = $m2.expRet; + } + ; + + +multiplicativeExpression returns [Expression expRet]: + m1 = multiplicativeExpression + { + BinaryOperator op; + } + (MULT {op = BinaryOperator.MULT;} + |DIVIDE {op = BinaryOperator.DIVIDE;} + ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);} + | p2 = preUnaryExpression {$expRet = $p2.expRet;}; + + +preUnaryExpression returns [Expression expRet]: + { + UnaryOperator op; + } + (NOT {op = UnaryOperator.NOT;} + |MINUS {op = UnaryOperator.MINUS;} + |INCREMENT {op = UnaryOperator.INC;} + |DECREMENT {op = UnaryOperator.DEC;} + ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);} + | a2 = accessExpression {$expRet = $a2.expRet;}; + + +accessExpression returns [Expression expRet]: + { + boolean isAccessExpression = false; + boolean isMultiDimentional = false; + ArrayList args = new ArrayList(); + ArrayList dimentions = new ArrayList(); + } + o = otherExpression + (LPAR f = functionArguments //arrayList of expression + { + isAccessExpression = true; + args.addAll($f.funcArgsRet); + } + RPAR)* + (a = accessList //single expression + { + isMultiDimentional = true; + dimentions.add($a.accessListExp); + } + )* + { + if(!isAccessExpression){ + $expRet = $o.expRet; + } + else{ + AccessExpression accessExp = new AccessExpression($o.expRet, args); + if(isMultiDimentional){ + + accessExp.setDimentionalAccess(dimentions); + } + $expRet = accessExp; + } + } + ; + +otherExpression returns [Expression expRet]: + v = values {$expRet = $v.valRet;} + | id = IDENTIFIER + { + $expRet = new Identifier($id.text); + $expRet.setLine($id.line); + } + | lambda = lambdaFunction {$expRet = $lambda.lambdaRet;} + | chop = chopStatement {$expRet = $chop.chopRet;} + | chomp = chompStatement {$expRet = $chomp.chompRet;} + | match = matchPatternStatement {$expRet = $match.matchPatRet;} + | f = filterStatement {$expRet = $f.filterStatementRet;} + | len_ = lenStatement {$expRet = $len_.lenRet;} + | LPAR (e = expression {$expRet = $e.expRet;})? RPAR; + + + +lambdaFunction returns [Expression lambdaRet]: + a = ARROW fd = functionArgumentsDeclaration + LBRACE b = body RBRACE fa = functionArguments + { + $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); + $lambdaRet.setLine($a.line); + } + ; + + +values returns [Value valRet]: + b = boolValue {$valRet = $b.boolValRet;} + | s = STRING_VALUE {$valRet = new StringValue($s.text); $valRet.setLine($s.line);} + | i = INT_VALUE {$valRet = new IntValue($i.int);$valRet.setLine($i.line);} + | float_ = FLOAT_VALUE {$valRet = new FloatValue(Float.parseFloat($float_.text));$valRet.setLine($float_.line);} + | l = listValue {$valRet = $l.listValRet;} + | f = functionPointer {$valRet = $f.fpRet;}; + +listValue returns [ListValue listValRet]: + l = LBRACK f = functionArguments + RBRACK + { + $listValRet = new ListValue($f.funcArgsRet); + $listValRet.setLine($l.line); + } + ; + +boolValue returns [BoolValue boolValRet]: + t = TRUE {$boolValRet = new BoolValue(true); $boolValRet.setLine($t.line);} + | f = FALSE {$boolValRet = new BoolValue(false); $boolValRet.setLine($f.line);} + ; + +functionPointer returns [FunctionPointer fpRet]: + m = METHOD LPAR COLON id = IDENTIFIER RPAR + { + Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); + $fpRet = new FunctionPointer(id_); + $fpRet.setLine($m.line); + } + ; + + +DEF: 'def'; +END: 'end'; +MAIN: 'main'; + +PUTS: 'puts'; +PUSH: 'push'; +LEN: 'len'; +RETURN: 'return'; + +IF: 'if'; +ELSE: 'else'; +ELSEIF: 'elseif'; + +METHOD: 'method'; + +PATTERN: 'pattern'; +MATCH: 'match'; +LOOP: 'loop'; +FOR: 'for'; +IN: 'in'; +DO: 'do'; + +CHOP: 'chop'; +CHOMP: 'chomp'; + +PLUS: '+'; +MINUS: '-'; +MULT: '*'; +DIVIDE: '/'; + +EQUAL: '=='; +NOT_EQUAL: '!='; +LESS_EQUAL_THAN: '<='; +GREATER_EQUAL_THAN: '>='; +GREATER_THAN: '>'; +LESS_THAN: '<'; + +AND: '&&'; +OR: '||'; +NOT: '!'; +INCREMENT: '++'; +DECREMENT: '--'; + +PATTERN_MATCHING_SEPARATOR: ' |'; +SEPARATOR: '|'; +APPEND: '<<'; + +TRUE: 'true'; +FALSE: 'false'; + +BREAK: 'break'; +NEXT: 'next'; + +ARROW: '->'; + +PLUS_ASSIGN: '+='; +MINUS_ASSIGN: '-='; +MULT_ASSIGN: '*='; +DIVIDE_ASSIGN: '/='; +MOD_ASSIGN: '%='; +ASSIGN: '='; + +LPAR: '('; +RPAR: ')'; +LBRACK: '['; +RBRACK: ']'; +LBRACE: '{'; +RBRACE: '}'; + +COMMA: ','; +DOT: '.'; +DOUBLEDOT: '..'; +COLON: ':'; +SEMICOLLON: ';'; + +INT_VALUE: '0' | [1-9][0-9]*; +FLOAT_VALUE: [0-9]* '.' [0-9]+; +IDENTIFIER: [a-zA-Z_][A-Za-z0-9_]*; +STRING_VALUE: '"'~["]*'"'; +COMMENT: ('#' ~( '\r' | '\n')* | ('=begin' .*? '=end')) -> skip; +WS: ([ \t\n\r]) -> skip; \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/IVisitor.class b/Phase2Template/out/production/Phase2Template/main/visitor/IVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..b1abccb76cd12cae17846ee71d78e88cff64e07e GIT binary patch literal 4215 zcmbuCSyvM=6o4}*ASj9p?zk@?%YZBjWos!tR?D%+V&B6wlyKUao=n=Kf6WJffIrG( zdTVb7(k2~v>(`lkzngWEKYxGyCWItOW|#~(WTHyB?>2bIWgy&avGrq^Tz1I#32jif zLjAJ)_3(sw(jkNJqC;kH0y5g>GI1WkIWn>D<|C~+t>%^ZX+XbgjLTCgnXucJV`l;RjxlUs%|vUv7vrS>?Uoi3N-9}Z%_a96Q`6Ef zw7L5*yKxeLQlG^gW%kIT(`RvyU{ECt#pUbL;?h@g$8|ayWE+|+vO06j){%4lhxgD$ zs|$}Ujnj2K!$D`7D7hf0r2~u5G*Pq!*3ruZ!s0WH-sxzN=^I{T^fJ7n*1kokZ+NB* zAl);K`9782@&8@NqFy~m9w=bb6u5gF)GXrp81W#~r%|Mnl(1?u>eI-OpocPSZ)t8) zeLKsxm8mNY2|$_Bx}_7bho5Xq-!8>X0&4v`66v30t;YOPr-JTVy8az8rm$;M+^6E_ zg|vDK&>C0m_kOI#RjXyNw>9Z`>Ogj(w(2SD+8nJOmgt4FdJ20NH)y5K+#C;OvH7d} zd@^>imI0*3jjkE#TY8cYr65?*iXLz7PBW`62Klz)9qk8q?Ou?vgZ&@ZLXfkS|*R literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/Visitor.class b/Phase2Template/out/production/Phase2Template/main/visitor/Visitor.class new file mode 100644 index 0000000000000000000000000000000000000000..5e2dfb1262ae50f9c9efd75348f68fb0ef05a9d9 GIT binary patch literal 8750 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 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp new file mode 100644 index 0000000..23a5e52 --- /dev/null +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp @@ -0,0 +1,178 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +program +functionDeclaration +functionArgumentsDeclaration +patternMatching +main +functionArguments +returnStatement +ifStatement +condition +putsStatement +lenStatement +pushStatement +loopDoStatement +loopBody +forStatement +range +filterStatement +matchPatternStatement +chopStatement +chompStatement +assignment +accessList +statement +body +expression +eqaulityExpression +relationalExpression +additiveExpression +multiplicativeExpression +preUnaryExpression +accessExpression +otherExpression +lambdaFunction +values +listValue +boolValue +functionPointer + + +atn: +[4, 1, 65, 665, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 475, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 480, 8, 25, 10, 25, 12, 25, 483, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 499, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 504, 8, 26, 10, 26, 12, 26, 507, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 519, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 524, 8, 27, 10, 27, 12, 27, 527, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 539, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 544, 8, 28, 10, 28, 12, 28, 547, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 558, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 566, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 575, 8, 30, 10, 30, 12, 30, 578, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 583, 8, 30, 10, 30, 12, 30, 586, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 617, 8, 31, 1, 31, 3, 31, 620, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 645, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 656, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 5, 48, 50, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 699, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 464, 1, 0, 0, 0, 52, 484, 1, 0, 0, 0, 54, 508, 1, 0, 0, 0, 56, 528, 1, 0, 0, 0, 58, 565, 1, 0, 0, 0, 60, 567, 1, 0, 0, 0, 62, 619, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 644, 1, 0, 0, 0, 68, 646, 1, 0, 0, 0, 70, 655, 1, 0, 0, 0, 72, 657, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 6, 25, -1, 0, 465, 466, 3, 52, 26, 0, 466, 467, 6, 25, -1, 0, 467, 481, 1, 0, 0, 0, 468, 469, 10, 2, 0, 0, 469, 474, 6, 25, -1, 0, 470, 471, 5, 24, 0, 0, 471, 475, 6, 25, -1, 0, 472, 473, 5, 25, 0, 0, 473, 475, 6, 25, -1, 0, 474, 470, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 477, 3, 52, 26, 0, 477, 478, 6, 25, -1, 0, 478, 480, 1, 0, 0, 0, 479, 468, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 51, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 484, 485, 6, 26, -1, 0, 485, 486, 3, 54, 27, 0, 486, 487, 6, 26, -1, 0, 487, 505, 1, 0, 0, 0, 488, 489, 10, 2, 0, 0, 489, 498, 6, 26, -1, 0, 490, 491, 5, 28, 0, 0, 491, 499, 6, 26, -1, 0, 492, 493, 5, 29, 0, 0, 493, 499, 6, 26, -1, 0, 494, 495, 5, 26, 0, 0, 495, 499, 6, 26, -1, 0, 496, 497, 5, 27, 0, 0, 497, 499, 6, 26, -1, 0, 498, 490, 1, 0, 0, 0, 498, 492, 1, 0, 0, 0, 498, 494, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 3, 54, 27, 0, 501, 502, 6, 26, -1, 0, 502, 504, 1, 0, 0, 0, 503, 488, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 53, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 6, 27, -1, 0, 509, 510, 3, 56, 28, 0, 510, 511, 6, 27, -1, 0, 511, 525, 1, 0, 0, 0, 512, 513, 10, 2, 0, 0, 513, 518, 6, 27, -1, 0, 514, 515, 5, 20, 0, 0, 515, 519, 6, 27, -1, 0, 516, 517, 5, 21, 0, 0, 517, 519, 6, 27, -1, 0, 518, 514, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 3, 56, 28, 0, 521, 522, 6, 27, -1, 0, 522, 524, 1, 0, 0, 0, 523, 512, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 55, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 28, -1, 0, 529, 530, 3, 58, 29, 0, 530, 531, 6, 28, -1, 0, 531, 545, 1, 0, 0, 0, 532, 533, 10, 2, 0, 0, 533, 538, 6, 28, -1, 0, 534, 535, 5, 22, 0, 0, 535, 539, 6, 28, -1, 0, 536, 537, 5, 23, 0, 0, 537, 539, 6, 28, -1, 0, 538, 534, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 58, 29, 0, 541, 542, 6, 28, -1, 0, 542, 544, 1, 0, 0, 0, 543, 532, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 57, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 557, 6, 29, -1, 0, 549, 550, 5, 32, 0, 0, 550, 558, 6, 29, -1, 0, 551, 552, 5, 21, 0, 0, 552, 558, 6, 29, -1, 0, 553, 554, 5, 33, 0, 0, 554, 558, 6, 29, -1, 0, 555, 556, 5, 34, 0, 0, 556, 558, 6, 29, -1, 0, 557, 549, 1, 0, 0, 0, 557, 551, 1, 0, 0, 0, 557, 553, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 60, 30, 0, 560, 561, 6, 29, -1, 0, 561, 566, 1, 0, 0, 0, 562, 563, 3, 60, 30, 0, 563, 564, 6, 29, -1, 0, 564, 566, 1, 0, 0, 0, 565, 548, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 59, 1, 0, 0, 0, 567, 568, 6, 30, -1, 0, 568, 576, 3, 62, 31, 0, 569, 570, 5, 49, 0, 0, 570, 571, 3, 10, 5, 0, 571, 572, 6, 30, -1, 0, 572, 573, 5, 50, 0, 0, 573, 575, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 3, 42, 21, 0, 580, 581, 6, 30, -1, 0, 581, 583, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 587, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 588, 6, 30, -1, 0, 588, 61, 1, 0, 0, 0, 589, 590, 3, 66, 33, 0, 590, 591, 6, 31, -1, 0, 591, 620, 1, 0, 0, 0, 592, 593, 5, 62, 0, 0, 593, 620, 6, 31, -1, 0, 594, 595, 3, 64, 32, 0, 595, 596, 6, 31, -1, 0, 596, 620, 1, 0, 0, 0, 597, 598, 3, 36, 18, 0, 598, 599, 6, 31, -1, 0, 599, 620, 1, 0, 0, 0, 600, 601, 3, 38, 19, 0, 601, 602, 6, 31, -1, 0, 602, 620, 1, 0, 0, 0, 603, 604, 3, 34, 17, 0, 604, 605, 6, 31, -1, 0, 605, 620, 1, 0, 0, 0, 606, 607, 3, 32, 16, 0, 607, 608, 6, 31, -1, 0, 608, 620, 1, 0, 0, 0, 609, 610, 3, 20, 10, 0, 610, 611, 6, 31, -1, 0, 611, 620, 1, 0, 0, 0, 612, 616, 5, 49, 0, 0, 613, 614, 3, 48, 24, 0, 614, 615, 6, 31, -1, 0, 615, 617, 1, 0, 0, 0, 616, 613, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 5, 50, 0, 0, 619, 589, 1, 0, 0, 0, 619, 592, 1, 0, 0, 0, 619, 594, 1, 0, 0, 0, 619, 597, 1, 0, 0, 0, 619, 600, 1, 0, 0, 0, 619, 603, 1, 0, 0, 0, 619, 606, 1, 0, 0, 0, 619, 609, 1, 0, 0, 0, 619, 612, 1, 0, 0, 0, 620, 63, 1, 0, 0, 0, 621, 622, 5, 42, 0, 0, 622, 623, 3, 4, 2, 0, 623, 624, 5, 53, 0, 0, 624, 625, 3, 46, 23, 0, 625, 626, 5, 54, 0, 0, 626, 627, 3, 10, 5, 0, 627, 628, 6, 32, -1, 0, 628, 65, 1, 0, 0, 0, 629, 630, 3, 70, 35, 0, 630, 631, 6, 33, -1, 0, 631, 645, 1, 0, 0, 0, 632, 633, 5, 63, 0, 0, 633, 645, 6, 33, -1, 0, 634, 635, 5, 60, 0, 0, 635, 645, 6, 33, -1, 0, 636, 637, 5, 61, 0, 0, 637, 645, 6, 33, -1, 0, 638, 639, 3, 68, 34, 0, 639, 640, 6, 33, -1, 0, 640, 645, 1, 0, 0, 0, 641, 642, 3, 72, 36, 0, 642, 643, 6, 33, -1, 0, 643, 645, 1, 0, 0, 0, 644, 629, 1, 0, 0, 0, 644, 632, 1, 0, 0, 0, 644, 634, 1, 0, 0, 0, 644, 636, 1, 0, 0, 0, 644, 638, 1, 0, 0, 0, 644, 641, 1, 0, 0, 0, 645, 67, 1, 0, 0, 0, 646, 647, 5, 51, 0, 0, 647, 648, 3, 10, 5, 0, 648, 649, 5, 52, 0, 0, 649, 650, 6, 34, -1, 0, 650, 69, 1, 0, 0, 0, 651, 652, 5, 38, 0, 0, 652, 656, 6, 35, -1, 0, 653, 654, 5, 39, 0, 0, 654, 656, 6, 35, -1, 0, 655, 651, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 656, 71, 1, 0, 0, 0, 657, 658, 5, 11, 0, 0, 658, 659, 5, 49, 0, 0, 659, 660, 5, 58, 0, 0, 660, 661, 5, 62, 0, 0, 661, 662, 5, 50, 0, 0, 662, 663, 6, 36, -1, 0, 663, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 474, 481, 498, 505, 518, 525, 538, 545, 557, 565, 576, 584, 616, 619, 644, 655] \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.tokens b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseListener.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseListener.class new file mode 100644 index 0000000000000000000000000000000000000000..07430da26127968895c6df05e1a05ad5febe897c GIT binary patch literal 14730 zcmb7~dteHGRL*rcK|atu*Q5_LaWU0%_V}HEm;Gim14~*(O_V?oIdZ4Xui( zh=8bwil~T+sECS)SP@VV6;TisQBf2{Q4~e-g)bC6Gk13~yE`+d{i8X(Gv|Es+cR@# zXHIh8bGP3K0PSqyXcz)RISd;M!(jx2iHE%buTb*JJ%!x|5BtT4!H7*kIfzbUFm!SA z0S+S>%j;=*89N2S|mFrhOj z`@3p=2mNrLcd&#llRGO#uXMl*1MxX-92WHkRR#+>jjH)dOc+?GHF4RTeaWf_c;bUVEOm%~ywl5o;Fnw=cFH-nL4 z@cJl?<{4(N!99GkTvV2ImbFe6Ybb-M#tBSjZI2(-!t&n8i+r&R$yv+z>xAxEvjoPo zmg&XqQRZ;RA&qRcJA0b1PPM|BH$xEalOkhU4}$`RX{D3N6eSi4 zBI#X&d8+oFOrA7vor%hmAxz~->r1|Gos~-e){4eO?2;LOoy`4xvjoQ9w@j~CYjPHm zZcC;67=snW491Q+&ocMyWg^7ULCl;QvA&MBS3)g0#5&TQbrSbFGDXGfNbh1WTIOUA z9?|fqw9K6l>7_HYIJ1#*7w;%cMLbabZMr=u;kQal1+h*t{yK?!omc|nb&~02Fhk}< zzU1Tgu*SIAog-tEPP);VGiNx1CXqvIFTAmTe?%c0R>rmwHox4>&JpsZmL07ov7d>%EyQoEz%5j zD3W5)uU5r{h5<#QTu*`|7n6{vj^qrWtsmkHpgeUB_Zc7;5}yH7dvcns@6p6*RygTn zyHB&acYK=h_|{=Q{5o?vC<3Aa_B1O{{n4xIGh~Q?@#DYl{@eXYppp z2q&lN-BB-Y4B8e&oR%{FI-mQrWC@H?(>4WD+`+1zh3CpJUKsEXNxQ>l{AMV5Y+# zpEzBL=WrYDOOA+z39weDjwc&0h4xMkUu1Cli3qEzr)h)*$p{WF4tL@0z%`V)a*Xdk za|eg7FgVpEsFi?mOVvJcxQD?SS7`2mR5qvEx;T7;c)&~2rd%ufPtAZ-A z$@xYO-^Sv)O9-RuwNoWCG26u9L99EuL{gPUB{ap<%;Ed^+bEZqUNcl$4Te?@50hM4 zrB7)gSH79UBg7nLN^?rC(cHn|QQRM$51OvLiQfaJTR1#MJD~HE%^K{YZ zl`q`p^p6~#Aaau_M=6v>a|eef8LW5F80$q!c9yG~!&Ahvz^ck%VMmEhF*S2|8jm0@ z(sYSNsZBMubNCBZEM0PgH5Mf`Dc8o~8A?VKNHm#j8;5@qyMrolD3yuXCJxUMo3U2G zz|C0u#Nj#OF$S*=3Sd&MjWfoe)s@tIDL~0JS^GE}h9^Fktm($Cgl9T>IpYLz{(`N9 zo2-4D;olszxrl9dUnM@5@ZfA5L7u;^D)A<3A7>L8tag!SZS-{q9vRAW15O$?e{kDR)#;aNQOnX_5McUN7i6v)JE6K8V?5p^dT6v;Mm zb_$W`IFpc=52sKRJFOB6 zB*j8nVlN@F2%bk#oMn|bRZ=XbCC(uvnxTcF@U0R{B*ju%;#@*v87!wLj#wq?JHrZE z;yglPC9I+-&bLaembq9%OI%1uw8C17;!>-`I!Upfmbjdd*Z>)f`Lx7cgv1Vb z0Y!0-RpNz`qLY@mpODxIyC{kWtrFr~!Jvzlc$koQ5$vHT9<@sBl@$AEiN^_v{cwPy zc+x8IVoC85THB{I&Xp7;T4D(y(FbLUVx?80 zA}RW5iFJg;5eO-Y%~px3q=;yV4nm>^0~Ey$tHgPd;wUY#n~*pLuc9dSTP0pCDPBWM zoJ~la53i*tJgdY7lHzr=L=PeHdUyjx(Px#oP*S{+mZ%aE7r~n-iepxZizUS+w8RC3 z#HH|NisB-x#ATA=EwsdCgv49nZ4|{7R*B0c#oK9#s|blJ;2jjjHCBmtN{V;U64wzD zSHim~iW{sFS4oQZ&=NNh67PlgQ546m5?4!#_tO%05E9qG2PlfWtr8!U6d$4`?j`>{Szo*vK8v-(7FYzgz;U=0iIW literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseVisitor.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftBaseVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..f5d9fc0363f0c15febe08d6cd94870c068d7d473 GIT binary patch literal 15168 zcmb_jXJ8z~6@DX^iDcQ9ZMn%EOl-;J+?#BHBwN^UvV|=xl_aavT3U0u6MK7#ok|Lj zN-C+Ol1dsT2@sM%DoIF4C6!cCNhOt3C*SR!PP?}=Z&q@C;HR5czW2?W*`2c7bM}rq ziKtzys-qg3B57(pO{3|8w&dNxl$G2nH>mv;qC-|OTYuT9XDwatBX^a!ezR984>r57@2E>66x|mC9PV!PJrdlXk{yl{8DxQYBy| z*QuRw7BoBUXn@lr zV?ov!z4!L^wzeTez26f(Zhp|Uh6P=;R_*Cmz+GLo>&)jo`;@2Z5L6`Nof5QuB5?%O z9&-kBmREGqEt@Bn1BeJ(y|yP&u=-+Y`~|!V2p8Kjh|jL}M^$Ezh&vT({+AhMe4>po4t;o~S)b zcNM7pRA!piB5jV{@Z2 zNLUIxSPI%$f?6k=MQCUpwecv*9rG;DE=@7x(5kX$iSa{A6UjKVG=4$F8vKeKIuRnY zpYNrRElXw-TO~ylLE9&e>{n)%PXgHtIKhLxgAY`(WC?6!3B+Ou+B#8GKl!qv@CvFDycE;<{K)=%h>qc8W(n|fL>0z3M^sKh1?v3CeiVBi zEX~{auJEnc)LYoTkN68pO$5#F^A{pm^#xJNqlV1UU znOk0XhNvCp`$*}<65PX9h>a)c!gI+c^hoX;%8!Id8eWtUYnB}UNLI!%K9ZGQLFMN8 zm4m@>n9ap}Cq>O!I$POVsRQ|k9m=zX@*ZF977&{46KXFMuv-rn#+^KwaZ{E^iX{>c zB52!$asA;{CXmV4g+kgXU}bM2P%%9h0LUcG&c;Z;EE-iKEDc%#W1dd zV;({B!4@}olN+|UB_lRvev2D+H*Rsm#^G^(;M9nVapIpM8HUNYDVsDu&f`Ih!zAt! z5LoC>)B{&q#jN9<9=8&7DL--IE-ay)?8Mav6SQ~IdH54~u}|=*o%K)otZbNKHy>K% z#FE_2lH|gfS4;{5m0WzHK_%Mm6F7qqd zUCesUNY=@qo>7{Y@zvBhvSjzMWKAIj86LW(0O2{>T8XUnTjQwHovxu#W1ezVjkh-JMwv4XrjlB$yY4T zA^BJgWAZVNAo=pSLHWM8C-2~X6SvHU2|YGT%JwV~enM*^87H*HFCgXa?cEc9)3-4< z-Mahs;Iddf{QH6{`LX-tx?}mGo3U}Afg!MLEWhd-_>HBDbX-0k%H?dgGiwzJc0tk^ zK`q?QG4SonF!q9GReRiugD}Qp^;o{4E7fvU1vTlFl0Je5Op?HryDt^O`C|x- zm86g1M3RG2Uryp<0kuNXU4qtd0Yf){f@Xw%N%|BvD4c7IP^C8)=~R+FYapn;>HcP(|-Yn_ch8n65{rxXmBKH^Nj+FF0LF-te(PR74=Qhz6Nk1_3 zmEsH>eWhrX^kYG5xopA**?7!_e@gnPp>NcO!RQ;cLeej=OyaWP4sG%E5~r5*pkY|x zxN!V%voh`*Rn3xqi?4gQOqFMkg61pRCH+Cr1}RjHI|POMGRSzOU`ovJ<55wuvVlS1H# zfeXtVqu@2qXr-8H$XI&}}5lN2iq9X+;gif%eeZ-?mar98)J6+VuwAuz_rw~vIxH@EnAcIi`G zNC7#m z6^^&ukGCMOD90;dEuzJUG9Gz4bfw5m_^*bRK(~~Z;jdD{Ji-N9gyjsv3g}j%lae5; z*CL$9Ae;}~YPuj1!d5LpsdTztS_9o$YEFc(M~l$HAgqIKJ#9#Y(5^+;$RMPk+eDia zAso~qY+(?#Lbr{!Cqg))McBb0?1XL??M{Tyr$yMqAhbfam-Zz>xLk|S#voh>-9>mb zB$*EbT7(V;p%c3ObRZGJ63AZ9Yqbb{48o(Jdo(>J5yEv^gvT-nkAv>$M0^U=W@N z-IK^lgm8lvp`Ss>KsP{kB7_^Y2qzeXLFk6aNrZ5d7U3j=a0PT(8cu|8MvIVR5c1HC z(3Oc0Zr38X3_<}qkBW&9?$RQRG6+wG?i8I)gmAYO;VBHlQ=xkrJv|Y^y;_84FbL0t z?kaj#B82<22+w8^o&();>FPuX_iGWZVGyo`?s@e5L;ei|}#=;T6!mlCDpL@URx)RSd$bp?eLzHW9*EEyC*k0Je`U*caVQx6p^EmOc!58|3YfcR+p=^5c+qLVg1BlaQZ={0!vX zke`G60^~iAUxK_B@+**Eh5S0?Hz2HZ{kpG1IH{^dH|4X&lJl`T}Ag4f1gPabD q|36jKLe7A!hnxjD8*&chT*yYq`H%}C7eO{bE`eMIxg2sO)&36^2JOoL literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.class new file mode 100644 index 0000000000000000000000000000000000000000..9cfb3c1c0b6918b914a65d204dd5b225db342cba GIT binary patch literal 12928 zcmaia2S63cnr>G^(+4;R7A7zeM3RD-k>n9jnISlU%rM>==7>jSBshqZgE{A%^Oz%; zp!!K3)Ce|9JddQIr7r zU0qR$lJI`;!(e`Uuya{{Lr-^G=Q5uXNtB3+%DFxz3Z$~O!l(F%5?K?ds`V)`U<(#D zHuw}jXASdx${-Z0u0&=6QKITA8yD7tQ=+IMH~2>bLB(h~k%ar(`i|*V0hAAW$D@WYxTe;vQLzp#>H! z;7eAE0XNn!#2^=7kaGik3F<-TU;wZClt$#&R=$Ncn_vvo*Vn!2Q{EynNQdB9#LXy>MC5lnDtB4xCHH1V*oy7DOf#c%aLC_ zr#?`Qe!UM~FL=AOV-%gz4!#mSF0ZSp3HX$5Ok@R{$R0LxbqnWIS919wFH&8HF?@{P zG*s49mDg2s{VAXF#+If)HJhH#F`&8CbphA#CCX!W)HYVlt*S&n*I*7B8td8A3zv1+ zv8;W*WE-%gZ(@gSLW`M8LQ6A!$`(dLol8Ksq1%}q!M0BD9gMGB-LndOm%~>r2j9br zw})7feMIqPc87XacQbVWGnCoJYCOb>huT+#z>lypjPsmhOm&2MmUpq{PGD@AD}y~f zAzr~LbQG=kw6bQ-usYhix>kapV@)pY>IS{Q8)3~|WNb+n*kx9!Thdc zx-)Y@ZZa|vr3MIir+k#|7;j*-tm{(+G%K>jZy6F~lnkvx$9&#KO2>|dB^ z7RXN-Dawpiey04puKb5z`8iQ=kysh*UKQ$Il|OfNXKPPeS7&*5aA{9<=;Kf~Hgiwc zicn{5up_jJD2a=zU%ucMp)#WSNd$>R;ikIsz?_BEf%;~mq*ixzFUt>h_Oy5Be>gS2 zdv#||TSq9rsjD@(cy)WQ`;(#=5=C^K`1~ZA#GoGomKXhqDsJm+>nSD5xU7NeEngn& z#&=LC*in?-q!T|;at5p~*wdNM>kKs3Hner1Cp}%=Y!HL|B%UN-(pr#1lraN0!`zY2 zhfVz?kqjZqpq3?}*0xocxyG)FxdEb#T{N)slBL0X6yVOo{A4&8fjMnig`S6&ly`OZ zU>B7KTbGB3QZR4@tn~#b+~%y4#|4uaOOn}4jwH&?SIiL~chRe>W&`_gy8deCSM)2p ziB0ZkKN&;DB5qpRFwE|iM9F-0P2QC$@{v^BXMAgG<}I7b>P+{Oacuuacdu>_@g3?T zL`7bI$9sCj?u@cWA(9Wik_mT>Zxj)o~EYj>FPLroSLC$sN?nV zYNnp4X6adKww|r#=s9Yxo~usKC#VzkiE5snr{?SV>Lh)VTA&xGll95!6n%<1RiCO( z)2FG^_37#ieTF(ypQ#q=h3YJQmRh72sl|G+TB4VzrFyAarkAO+_1WZ`HU0mH_*02Y z5eQ!=MIwxyq!A}YAxQg^j)_FXx+xkPu0O>fjQdk8cBD7?5tK5;5t#-NC&eTBSp2ax z*iDr5r$ioYL[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' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 65, 411, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 345, 8, 59, 10, 59, 12, 59, 348, 9, 59, 3, 59, 350, 8, 59, 1, 60, 5, 60, 353, 8, 60, 10, 60, 12, 60, 356, 9, 60, 1, 60, 1, 60, 4, 60, 360, 8, 60, 11, 60, 12, 60, 361, 1, 61, 1, 61, 5, 61, 366, 8, 61, 10, 61, 12, 61, 369, 9, 61, 1, 62, 1, 62, 5, 62, 373, 8, 62, 10, 62, 12, 62, 376, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 382, 8, 63, 10, 63, 12, 63, 385, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 395, 8, 63, 10, 63, 12, 63, 398, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 404, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 396, 0, 65, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 419, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 1, 131, 1, 0, 0, 0, 3, 135, 1, 0, 0, 0, 5, 139, 1, 0, 0, 0, 7, 144, 1, 0, 0, 0, 9, 149, 1, 0, 0, 0, 11, 154, 1, 0, 0, 0, 13, 158, 1, 0, 0, 0, 15, 165, 1, 0, 0, 0, 17, 168, 1, 0, 0, 0, 19, 173, 1, 0, 0, 0, 21, 180, 1, 0, 0, 0, 23, 187, 1, 0, 0, 0, 25, 195, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 210, 1, 0, 0, 0, 33, 213, 1, 0, 0, 0, 35, 216, 1, 0, 0, 0, 37, 221, 1, 0, 0, 0, 39, 227, 1, 0, 0, 0, 41, 229, 1, 0, 0, 0, 43, 231, 1, 0, 0, 0, 45, 233, 1, 0, 0, 0, 47, 235, 1, 0, 0, 0, 49, 238, 1, 0, 0, 0, 51, 241, 1, 0, 0, 0, 53, 244, 1, 0, 0, 0, 55, 247, 1, 0, 0, 0, 57, 249, 1, 0, 0, 0, 59, 251, 1, 0, 0, 0, 61, 254, 1, 0, 0, 0, 63, 257, 1, 0, 0, 0, 65, 259, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 265, 1, 0, 0, 0, 71, 271, 1, 0, 0, 0, 73, 273, 1, 0, 0, 0, 75, 276, 1, 0, 0, 0, 77, 281, 1, 0, 0, 0, 79, 287, 1, 0, 0, 0, 81, 293, 1, 0, 0, 0, 83, 298, 1, 0, 0, 0, 85, 301, 1, 0, 0, 0, 87, 304, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 310, 1, 0, 0, 0, 93, 313, 1, 0, 0, 0, 95, 316, 1, 0, 0, 0, 97, 318, 1, 0, 0, 0, 99, 320, 1, 0, 0, 0, 101, 322, 1, 0, 0, 0, 103, 324, 1, 0, 0, 0, 105, 326, 1, 0, 0, 0, 107, 328, 1, 0, 0, 0, 109, 330, 1, 0, 0, 0, 111, 332, 1, 0, 0, 0, 113, 334, 1, 0, 0, 0, 115, 337, 1, 0, 0, 0, 117, 339, 1, 0, 0, 0, 119, 349, 1, 0, 0, 0, 121, 354, 1, 0, 0, 0, 123, 363, 1, 0, 0, 0, 125, 370, 1, 0, 0, 0, 127, 403, 1, 0, 0, 0, 129, 407, 1, 0, 0, 0, 131, 132, 5, 100, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 102, 0, 0, 134, 2, 1, 0, 0, 0, 135, 136, 5, 101, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 100, 0, 0, 138, 4, 1, 0, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 6, 1, 0, 0, 0, 144, 145, 5, 112, 0, 0, 145, 146, 5, 117, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 115, 0, 0, 148, 8, 1, 0, 0, 0, 149, 150, 5, 112, 0, 0, 150, 151, 5, 117, 0, 0, 151, 152, 5, 115, 0, 0, 152, 153, 5, 104, 0, 0, 153, 10, 1, 0, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 157, 5, 110, 0, 0, 157, 12, 1, 0, 0, 0, 158, 159, 5, 114, 0, 0, 159, 160, 5, 101, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 117, 0, 0, 162, 163, 5, 114, 0, 0, 163, 164, 5, 110, 0, 0, 164, 14, 1, 0, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 16, 1, 0, 0, 0, 168, 169, 5, 101, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 115, 0, 0, 171, 172, 5, 101, 0, 0, 172, 18, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 115, 0, 0, 176, 177, 5, 101, 0, 0, 177, 178, 5, 105, 0, 0, 178, 179, 5, 102, 0, 0, 179, 20, 1, 0, 0, 0, 180, 181, 5, 109, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 116, 0, 0, 183, 184, 5, 104, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 22, 1, 0, 0, 0, 187, 188, 5, 112, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 116, 0, 0, 190, 191, 5, 116, 0, 0, 191, 192, 5, 101, 0, 0, 192, 193, 5, 114, 0, 0, 193, 194, 5, 110, 0, 0, 194, 24, 1, 0, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 99, 0, 0, 199, 200, 5, 104, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 108, 0, 0, 202, 203, 5, 111, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 112, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 102, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 114, 0, 0, 209, 30, 1, 0, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 32, 1, 0, 0, 0, 213, 214, 5, 100, 0, 0, 214, 215, 5, 111, 0, 0, 215, 34, 1, 0, 0, 0, 216, 217, 5, 99, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 112, 0, 0, 220, 36, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 104, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 109, 0, 0, 225, 226, 5, 112, 0, 0, 226, 38, 1, 0, 0, 0, 227, 228, 5, 43, 0, 0, 228, 40, 1, 0, 0, 0, 229, 230, 5, 45, 0, 0, 230, 42, 1, 0, 0, 0, 231, 232, 5, 42, 0, 0, 232, 44, 1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 46, 1, 0, 0, 0, 235, 236, 5, 61, 0, 0, 236, 237, 5, 61, 0, 0, 237, 48, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 50, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 243, 5, 61, 0, 0, 243, 52, 1, 0, 0, 0, 244, 245, 5, 62, 0, 0, 245, 246, 5, 61, 0, 0, 246, 54, 1, 0, 0, 0, 247, 248, 5, 62, 0, 0, 248, 56, 1, 0, 0, 0, 249, 250, 5, 60, 0, 0, 250, 58, 1, 0, 0, 0, 251, 252, 5, 38, 0, 0, 252, 253, 5, 38, 0, 0, 253, 60, 1, 0, 0, 0, 254, 255, 5, 124, 0, 0, 255, 256, 5, 124, 0, 0, 256, 62, 1, 0, 0, 0, 257, 258, 5, 33, 0, 0, 258, 64, 1, 0, 0, 0, 259, 260, 5, 43, 0, 0, 260, 261, 5, 43, 0, 0, 261, 66, 1, 0, 0, 0, 262, 263, 5, 45, 0, 0, 263, 264, 5, 45, 0, 0, 264, 68, 1, 0, 0, 0, 265, 266, 5, 32, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 5, 32, 0, 0, 268, 269, 5, 32, 0, 0, 269, 270, 5, 124, 0, 0, 270, 70, 1, 0, 0, 0, 271, 272, 5, 124, 0, 0, 272, 72, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 60, 0, 0, 275, 74, 1, 0, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 117, 0, 0, 279, 280, 5, 101, 0, 0, 280, 76, 1, 0, 0, 0, 281, 282, 5, 102, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 108, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 101, 0, 0, 286, 78, 1, 0, 0, 0, 287, 288, 5, 98, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 101, 0, 0, 290, 291, 5, 97, 0, 0, 291, 292, 5, 107, 0, 0, 292, 80, 1, 0, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 101, 0, 0, 295, 296, 5, 120, 0, 0, 296, 297, 5, 116, 0, 0, 297, 82, 1, 0, 0, 0, 298, 299, 5, 45, 0, 0, 299, 300, 5, 62, 0, 0, 300, 84, 1, 0, 0, 0, 301, 302, 5, 43, 0, 0, 302, 303, 5, 61, 0, 0, 303, 86, 1, 0, 0, 0, 304, 305, 5, 45, 0, 0, 305, 306, 5, 61, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 5, 42, 0, 0, 308, 309, 5, 61, 0, 0, 309, 90, 1, 0, 0, 0, 310, 311, 5, 47, 0, 0, 311, 312, 5, 61, 0, 0, 312, 92, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 315, 5, 61, 0, 0, 315, 94, 1, 0, 0, 0, 316, 317, 5, 61, 0, 0, 317, 96, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 98, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 100, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 102, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 104, 1, 0, 0, 0, 326, 327, 5, 123, 0, 0, 327, 106, 1, 0, 0, 0, 328, 329, 5, 125, 0, 0, 329, 108, 1, 0, 0, 0, 330, 331, 5, 44, 0, 0, 331, 110, 1, 0, 0, 0, 332, 333, 5, 46, 0, 0, 333, 112, 1, 0, 0, 0, 334, 335, 5, 46, 0, 0, 335, 336, 5, 46, 0, 0, 336, 114, 1, 0, 0, 0, 337, 338, 5, 58, 0, 0, 338, 116, 1, 0, 0, 0, 339, 340, 5, 59, 0, 0, 340, 118, 1, 0, 0, 0, 341, 350, 5, 48, 0, 0, 342, 346, 7, 0, 0, 0, 343, 345, 7, 1, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 342, 1, 0, 0, 0, 350, 120, 1, 0, 0, 0, 351, 353, 7, 1, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 46, 0, 0, 358, 360, 7, 1, 0, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 122, 1, 0, 0, 0, 363, 367, 7, 2, 0, 0, 364, 366, 7, 3, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 124, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 374, 5, 34, 0, 0, 371, 373, 8, 4, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 378, 5, 34, 0, 0, 378, 126, 1, 0, 0, 0, 379, 383, 5, 35, 0, 0, 380, 382, 8, 5, 0, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 404, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 388, 5, 98, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 110, 0, 0, 392, 396, 1, 0, 0, 0, 393, 395, 9, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 61, 0, 0, 400, 401, 5, 101, 0, 0, 401, 402, 5, 110, 0, 0, 402, 404, 5, 100, 0, 0, 403, 379, 1, 0, 0, 0, 403, 386, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 6, 63, 0, 0, 406, 128, 1, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 64, 0, 0, 410, 130, 1, 0, 0, 0, 10, 0, 346, 349, 354, 361, 367, 374, 383, 396, 403, 1, 6, 0, 0] \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.tokens b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftLexer.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftListener.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftListener.class new file mode 100644 index 0000000000000000000000000000000000000000..9efc86cae499dd0e0e390c17cd7d32a482e40eee GIT binary patch literal 7614 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 XBc(SM|0PugctATuyGA=gTSD*uI#S)w literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessListContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessListContext.class new file mode 100644 index 0000000000000000000000000000000000000000..069ed160f5b729776cdb6c7ccec3aad9d5eb39ea GIT binary patch literal 2550 zcmb7Ge^VP(6g@AA+5A{2M8QfawpwdKq}x)ewTW1o78@IAg$(~M;hAm;yUgx}!H?4K z;2(8H?N}Yf(V04aD97`5mn3bL0+X4%w>R&ed+xpGzRkb?z4#r#64o>%1kUZ6t|wj3 zSnk>_-*W7lYkuoL3XD0V@Ro+O4hAvA1BjUE8;Iq~W_#8cpf$Shm?&b+%+hL++Sh_x5*PMpJCVV2Y`( zV+5lDqYS&&?Z_UFYO(Re+%t`iX}679$Mn3)QDnlr2fQmejA2|uLC4#8N8oa74nuAN z>8fR0{-R1fKJOtPlG@NPDR4fv&Z@N1mTn#sIIH75ObMKkEVbJ&y}*325$hdB8}3r2 zw4nf}b(~j#qjKN!`*<4O7nqI(+^{^$cgSW27j=Aq56Nav+4|lBwNtYh=+wi_C$i;N z^7sgsHGHh2h?2l;Yy$!j1vxe;r-+-tNWiG}*y?P#N`^O&=tbbJx*q7SG)#g}W>4T$ zABE7^F)iCLJ>Re?TF;O@O&Wc9Rs@6;Fy7dd{_#k%^h!7GtS!|ZFyG>d=SCn^BNaBH zVcBxEyR#|Xrn%XnrO&03Y7f8X&~SiNrZnhfrFNqLVCDVVk)E#e~IAY*(lCcv3PnLAb$ zb6hjrU4g;xt9+VAk~>;w$F3)TM)Dc=30&iMTG=x{@&urVXK)=0d=j`3=f4o=|5L30 zr}&I0D*lZqetx!)rGNea+1DvNAArdBDDd?aLDUJ6B$PH=o_>xqKX4mnkmHKX3#2o@ z1`rp*V-W-$a1);gnQ6F%N>HmRzKCGwxT?w|$0ok-L54;7ZGcg-$7m5>My~6GVrUe~ ze`4Y(M#=}6nEeIsCZNbAgYt&t{=j(VAV8Z8J$mE{xXnK`0(SxrG0tu6xB%yd1N_AR zf1fnKUECuJ)s~$ogDGY(^Aw}ZV1^l7NZ?tS>m{x{l^V$8B?_5;1_Dj>GMU0Mz9Rkm r^azEdEcJeF1$@n)5_rJUG=kjv%AD#Hh}uFvpX~QyWhR{yEFUme}DZA;4uyoh%n5w49De;tM9a} zx)ipx?HE7HJ#R9B7(?Nl4fDHgQ;L=;>V^~@{^X?PaMx8Jwk7$A97Y_81co#uG0d=b z9@OJTLxh4bj2>~h-!^%G%23RdUmG1mHx27Z-!=``EtIll+d0w=OPY?}S=F7kB}J3# zek48C1w~5JFoIErAwsU%$J}DLmnjXxkPhd1jXOMe&m~-)|CR zypTOm4rVpnR1PNjiIDx96S&1N8|vUdxI)^*at?Pie2KfnvZLnuQ5c?oGRq!Syf}Q# z>#~r-S6E2kYYiD>8FHb8^6Km5phlGrxH61*47Xniv*9R(tPiM}XRZ|HNh8}&g6hss zTKim*Qp!z3Si0d#-6A2mIxPe}qrY#T0z<@DW_a+4`c-LqJ zsUK1;?-Pj|^*V1+#NS(7s4`EoM7(AYO*xDHa_;XZ7(*>r^8vAAwWM*J_0= z5_+;Kjx0mA9m?}=v9{UY!do8`Yk-?2bcW%o-FE7HN2nrBh1|0D)m28ts&H36vt3H8 zRz$kQ9;8jId|AG$X#d1I1Rma#(5Z)kQ6 zQF;SXxpXx8JFdJ#^eufxuu9LkT1wreO@QWa!?ywG1FZK$#C?ePhY$;)5F6MGAXWkv zL%FeQ1d;mCKGS1A)TK}ev!4jF&xYF5ogVlvk^d+KnaJg5|G?GXx)~UzOdypn4<`8NANaJ<2;SDE7lXqI?}0)9!JyNNT%^4o)i5t rS@=R!GrR9&OQS+d5xk((?0IiLVc#1Wsx+o)O$oh5f2gVeFOmEopo--H literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AssignmentContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AssignmentContext.class new file mode 100644 index 0000000000000000000000000000000000000000..06252f745f3632cc3bff44e30d8284049a45bf1d GIT binary patch literal 3418 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 W=b;tYqBZzin#Z@PeWm^yvi|_KSE?!i literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class new file mode 100644 index 0000000000000000000000000000000000000000..67584bc5b9cdbcf53b0d4cc2c7b79c68c0a02fec GIT binary patch literal 3699 zcmb7GTW=dh7(HW~tetGq#HFF+T4)J&++>?jZnc{>&4su)7ZMZhmyI)|+c@iJcO9ia zrT>A4@)86OsJ!xu5JEyi2q7dSBtQZQBr3kyU9X+&*hwDjS&!#CbH4M<`DVX*^!XP6 zrok0N82Wd0%jTA?%~#EmV^qu;OaI7OaVOgm!($5CR49luTyC-S(oDtNG~D=#>F|Ar zA+g1sVr83~HpAIeK3%x0@9A3AG0IxOu$`rnc*x{OEajq4)wPToid8x9=vkJNx##-^3+uyagZHvS_Vq)8F6+K8YoS|)3t7Y#0 zMMN*AJepk5V#2BqSO0&$aD9T>y~6;I)5N|jS#t)R{f6RCnU*xM|0 zBC_dq0e4BoGXk!Y?;B2lrr=qI0V&+NVH-|`sEi=3ViXyovM1((V1`?#rP5I4<&C?% zfxnqROr9yOl? zgIcN?X_b?S&NaAZ+OqU}u64*h+jJJ#m>QfJj6;`HK8Iq}xsTg82#FIQ(FigHw-Pzz)QQs)j zOtMfZ>E(6ZGQ@9xGUnVd$gjB&QcmuGaPJVQXGC9WUg<-rcSl%K!DmwNIb9e-bb4u)A+k)uCW6x=JaJUyTubOsxdfq!;|PVKs2foN)GHX8 zxWH4OvG0+C40ErtZJ1kYj_y#+Rll$1%}u^fDW=k-d&2ENB9P%q6Y#?ht@SbLJ#@*G z{jNq=MvJ1m^n|^GV4_E~O52P2u7CRCqIr2l+VoP1?^3omPsGUY8MRyGu=y3Yk5nvb z9m!(!+?Y>|7rHJePH0wR`rT=pDYl22bqcYk(ae(LpdW_&YeYc6}=+~H{XVqJR8!mtceA9)Q zrf&h0qm3gp#tEkX0EweG-?%uv-Wnf=R^t|C2!UZ%Mrcw(=-ZZrX6fB7L}*e*=(}SG z%}EF)I}dQ?XlCCxB{WY|=J1M7=!UOQ$7r&X2%UY1&ZAI2G;rz&MCu4cT99z+9+HUk zV^dC|Y6~)vhGZiB)Ica65UN)#FC#Q8A@p-gLU|dXVHu%cjv;hgLMR!NRPEQMgkB|u zZle&cTFk3j>}b_~Yv3fS8okc?V0k(MQ8I}#ni=>MPkcg;p4ZxiFQUJrE&7KGcEMW~ zD6U`;O9VopSSH5^%dX%xA9jpJ@n5t%{&4{5+4s+eG^0Ko!z$MN&^3Y*woPWf#Nd5& zW*%a2^fL@cAjn1CM&ObA3q8@l8!}A>WR*r+eaqz`Z79ism(MR+Yw n%)D36E$KJa_eq)$Xi)?oLU%`o4H}a)6QkuNB+yCYCKCSxYR+E- literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class new file mode 100644 index 0000000000000000000000000000000000000000..3d28c739ba3403e7b1e46fb009b00eafd297c1d7 GIT binary patch literal 2893 zcmbtWU02&i5WQ;?%Qk|58wg*aNlQ~37ZeBtf?Y!DK;y=k1RUBv^$4>i3PN(FHOKiW z`44?aU)s|?^rWx-Q8}HJgkvJvA?b@(-rc!#XXegG|GxR_Zvgl4qk2YCZmz%mY(#_3Q!{M$g0c=a~mPjK3ML|+U3TcMrUND=# z=uOiQFG3&;gGXHKHccL&G8D6w=lZFxnYwkPl}z1r3*}tJc8)aN5~ib_E@@8F62=MF z{3trC3zC$oVgQ2-NkXpK$J}E0DqHS`Aso)N8h1_%3bJY+a>5wGu!4+=PjH3d=EYny zB#MS*h;`}hqIAo-eFdWo*CLZwFV=Bfm!ElvR@||!#8P>9uNEAOwGhve; zdZz!#s4PLRP!f%rln?^Q4grlc2iu zR%4e7QcC4SH!Mweg=UeET#XKbp3&YazrYaV3)FWXSuQen78&mLH1E;3~| zO1+lxFOi#=LpQHD5o3U%kj?!M5`87g5yRz*VexA7y6flMd|*gbcWOTch6(Bk>Pdz!0`l9h zb4HQ)4C~ZBHmsvPp$m$bl^N7v4wkJ$-l7s^bF`WAx?LJG-0I@syui<926Z(}Kr@&i z40AoAYj;Q6m?#pp`ti2j2=bqlW5Fkq(Cc;Hpoljv#3*RFLS*kKUK`pD4b6)XJj0?f zbzUSd8fQXT`~aL{zE&%&lh#vv#*w9qrbBt&F4oq$1-pM%M;gL~v)g$N4giQKDhogyhBoo+1mFVw~g)c<8^Z0FS89bq*72P z2OsK-jy^c`#Tj+f89P&F^nYOVsI#pr0PQf$35SwaI!w|#rF&pMrzcib+C7!Id8Xot3Y3@3Lx5O}F&@{w# zBrwddcr3_KV}`LB7h6r6hiDA>ROzv~ZyL7g)Qo~{`hKpMF1cRKFdbog#{Lb%YdXTJ zb0gs1Wu22`bRDA@V~7)S+1=v~!@H^CAPnJgZj`xKw;a>naCbRjjAKGWQpam}o#D#K zTrFuO+i|LAnDTWJulUA~P!5!|6U=q_h&S8e(ET^PDJvL2~9h zTf+?J(iI6ftK)(M9OErZbT(;tlVP?mV8!w+;S!rUT+;Ct-X=Eta;;;{P&hT4u4+Hr zdCaRKH-gK!qTwAKDWn+|`W8UdO~qKI3WnSmMiryNBg@|PWaV!SsD(0@%26dx_mZG` z@>XMu3sOL-Zd#6E`oeHXAihB#!X7X>vF8{fe2Kw0WjUnTb%vYAn+@td^2$uASbxPS z`72^sh9vI+VYr=2|8K`b1lwif{X`C<4{YJ6-k;}hhcyof^O+PN=QqVv+wR%PHkJ5 zg2G}&20c8kiq0-?F+@{oT1=>>l*SC#1~@pZ*MrukW~7744jY|L&toELi@j}36p31O zZ{2K!Nsh~I4v56eYLz!A;=3ne6n0RqZ!2i3t6Y!Hwv!M%z+#v>tb`|x12tq%fs@aa z%efVjabnx5Ii_fOl;`z)`A%=wuAC;;5I0Teq|0r$=~elfC5t%S=Zd^4ZzU?$2KU7S z*QdnlMTbsjbwzPf_PK#qB*R4KoCuYSOLSF@)Af7?BxPi1M%l%p8n41o<25X)F{|F= zwBtH%&~uqqml35IFtU)0M!&(C=ZHR|*9hLDXH0%d{Dhk{*Mn`i6@uT!onDAo01-P1 z@pE5@9P%MVHe?ZB7{5#qBS-Cj?Xr)zDbU3l+84<_N+h*~%F3!24KHk!kn=a^jh4sS#t$wgIq19E?2BJo0@O$8Qha!IUWjqpBF7Hop14_@Wqe6NF- z*>3_d}L t=&zGSASAi6(TOdIhx93eO-jwDYPN-KH8PZGOwuM~u literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..190b8dff25489e0a4554133295395c35992d8eb7 GIT binary patch literal 3709 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 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionDeclarationContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionDeclarationContext.class new file mode 100644 index 0000000000000000000000000000000000000000..70886e0dfb6247c30ecbe396d26f376aeb46f597 GIT binary patch literal 3100 zcmbVOU2_vv7=BKYHlL+!)V7AAMG*1UU-vF%O`zS&JXZKaplBT7s zcl5fg8G6Z7ckRdSW&#n6MKPX26fuF@LylhTsjtdYSL_Ly4tE54OxsLA#iULt1D)+)0Vnz4VrhH zNTo1=GXiHwWV6$fr5>}TY~`tXpeij@Zz`phYFWk8=ygNl(!h;_OcVX;IIwo(1YzL<^;|KQmbf|Ep=%oF^fzJXE84@ z$IwYLAcX?OY$Xt;Yj#N5i@9yb#5*ax>zJ68hngK=A&TCx|DUL@1|ID^m36zA#ARfo$fb}+K_DNPEw^CZIMi6W9$SG4mt*OP)@qne z$=^98ajv>kPj0Q}21y9a?0QY`Uzq(tupCM%jQtDW|a zG;8Wki#zFxQCC~rs;N28-e$ypqFGGHP)-5G<+ZRwadmB7AW>djtJccv<+V*lw3nlx zUb{rN zm@`?rM8?&6UGCH4`y(;(TDBP2dr`NI4U?016oNf0Htq4!d$!*zzs1+USt`_O#bs7p zd`oNUs@*Xe=Z&S>-N7-j{5rmRxH+P;j<<}CS(odYlf=1R;rl)St~r+@lU0?L{m`%& z*i>2P-QnJplC6~KDfwni|8l+1dpV@G1(Lp^#d%)VX?~rIfnmp0t^}?@apiSS-oT>! z`~hxKCV1i&Zu9>`KHWf=DWiNBSbl0bNdIr2eyneP8TUxSVSmfhPv+Bc>L*_!e$s<~d=SY##C?9w4M0qG zAtp~iFg!;=ID+6;i3d?8i!j+l^M(1JG5sT#-54e)A;K6J5f@^id(2}&1w25BAkJzP zYdkHmj!!(;E0oT=P~?X`qMH>l<|7p9`}7cHPjib%w2XA&cg#M=MByc7^S|Kj5FBn{ zH@{tOF-(iNi#F5M=yOZsQ+!6eimM@}x!ib_fpdcfQZz6zs(~sVk%g1kw&y{H9xOb^ z8G5il58eymMS=1XB~L|so=hQ4l1`$!o@Dx-WbhcDll~^(bt~D~**fwqjT&Et@C8G& f?XJGWSFRNJnli)v2# literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class new file mode 100644 index 0000000000000000000000000000000000000000..14a8c1fab55b8e1bc69d2006dfb030005ac28588 GIT binary patch literal 2504 zcmbVOU31$+6g_LZmg6W+;+7E76j})2kES9fP>4flaS|d>oJ``$yW(tJHL~Q9WKZ}h z{SQ2p7Z`Y8;FbTt*8npxLubk#V7OYz#!1$Y_QAUA>pl0Ld+*tmzx(^EuL0b}wt@u1 z)sE@;-1D`~uG0)G*Qt5tyxGhHKLL49gF=!@Y4#BCp~yt}tBTVU1@>X1HB2 zq#>e|BU)4~9)zK1R6HMszRXXo;7nu%FEGqYLmyba6}Uuh7FSiw;~J6cg}yT(7`C2` zobkZynVM}nEp6xU0dEG?alC}<3T~))8Lu#uq>~W?6?Hdgv@uJD3Bj#)-?ERqP!jKq z7?Oa8a}`=Bo+rU@>0W1#lfagYwrM$<=?9ua!tphJ(($bCm9`|TBZic*dv}jYEL>Q&gsBk=hDpP6c)i;`w0vdT!dgh7Q@Wxaevb3 zkG%2}aaPNXMs)80w(0wvd)fl=@p(r)- z?h5EJEZFj@K%(+Py+l473T7W7M-|Lc1#<~JDwBPYEb&SWRq_P+++Rb9<_49_;RDo& o{yHHd6^EXUe{0KQlYUCzLu$>ISn2pkScZ?uhQ}pE9|L3m037{XMF0Q* literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..ffe60843a2db7c0a9977367c4a0234206a4d8f90 GIT binary patch literal 3625 zcmb7GU3U{z6x}x|oumz=q>5NTKoIf)3@xZgLis2yL_iOs24VuoHZ8X$-Ilr7 zc50s8bmm=a&3mLb$1s8e21ZjbkPx^u!+Y?BvORv)0kdDBG zOsSMDH{Es9a=f~0Ze2Cqw&U3iX?m`dW<|OU+p+3P%~e@2Fh+}E-soc0)@*%WifJl^ zgP0IFM6ZwAbs5lT37pB4Us+q0S+|^ZbG~l1T7|5?)AsDTS+-kVK_N`0a2RQUiQNbS z#eRT6(fFAQ`DZjA2%H}l&7J1z>wvAIaU_M0a8w}KNgqR)%Fv+>B20N2#|#`#;RHSr zI2W1SK0X4YMcc8xIaQSCiuBnOO4$_yrvy$!hM^KD9qEqaBtA{y49*HnvJs>k>I#7? znR2AL?=GT)3fUC}c`k+X3i6QLw!ILdfvmvsNXQktWqVB$${?S@1zaSdEwvXi7r48B zLZL=_SbZgHUSS+2E*qFhVHQ^ea*d4Xz#a<8)Hj@`!f2~;_iPdJP`k_VZ z6`}&J3S@^Gh5B84nWd{LUB#+=iZ3kPWg0Vko)!Wl^Nf`JQMMhq)NWLzTd}Hj?xf4j znpI!1TwA>dn&zbFlVy)6d0^RIcPy{%lE9t51I3|k z`_ef_w=+unk!>C*r_YK-C^0Qn&J}?h`{WR=j&je@J=}fRfYW86yu6?iRgCaESRA`9 z0OdBX-0tx_V^v=1oN40V5f~sOKVjkNOcC17R&&F4*7XG@kP4=M$yt@#?8i)&xlHPD zrVQCR1HgBSyfYLz#CQ|dgAplkaY#^_o|+I{W6~q7+QtKGGicw0nu0!&QL9#yn~e6> zo)`sVr*rr1o*#xDMNOCW-V4DFmcWtS8hgFj(b?=iaEkd#rJ$<*pjf%yKV#?i6JLOp zC8EICaJml>O6?eWGiB5BKTCcOMJfr;|Gv z?{)tyWNrlJB~9^bn%%=U{8cbFNh8K}JeN)$+rgoCNcKWK*HB0NV*wNmn7lGU*dI}x zrXo1K7|3Z!!#wQgH05)e>g7~>52r^FoF>P1@L?~I9LVWgvU!BZ0jFY+CzflBochYW z9wO8!7m(;CX*sI!$*98HAx0e}e&yklfJuo=;;fjF%OC$8AOEI{s`_qBRVcoJ(Rf`$ zobr!#D`udA?+BtKu)^A@{&|9@0qjMt>VNS`+t(QQDyP?5O|F{8ZC-82 zx@`O4n78=HVu)jiVTg#7S`D6WGh0d)AIkf()R5J>lyAs}kv)!{6Ah0x(Hmj7+>73d zR(s^y3M0WV-|Mi?7guu-ui$JLV==sna||=W;Q81wgq9RlF_*2Fiv#Y{A>X&dm|(ad z zo|2Bob8>@b1;a7L?l|Nfuhb}ty07gjYJJO;P09x=FvQ#uUQlcNfFY1f(PqS+LY6Ya zTgMpaZpQX3qp3spQ^TEX471|CI7XQ$61D2?y1eIB$AC4q93mmPTIGA>@vRdva>qkf z*ymw;WN11K^OF#4V=;_%m++&#b{Wr|0%s{xE@zjizam>oU6sw2PH|peD&O>vq~+82 z>f)vdondfGYw1BJ4ZL(iM^ zHirPMfPwVLLf{7kp3u4vS$c-7{rI<7qIJwUgLkn^Z}b%;(q9zme<#$xCDKoe^uHJC z=deO7EdC2F|7bc9A^qqfB1c_#>Vb%MT*%|LA7a>n7(NQ|ObD@xH9y3t12K9O;<*rl zzM))*0yz>Ohr;R18)C{i<~l+OxP!X{Vyy~zpH4G;fT9aK zOVau;Ff#Q`2hvIH&mKmBPF&Wp;i_&C6q!aM^Bcw=Bc3_Lc=|`2?}J4yU>Au)?pKV) z4{fwDN25b7flb^aybo;+HcHFV%M85kH}E?d_~WDowooP(R&g|44<^Wi>Bkr%52ne3 zOMQ5fA(lqorspt8nWPn$3L^gkCbDe@ literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..91ee733c0aa5b8f5c93cd3af9cbf953765498f70 GIT binary patch literal 2670 zcmbVN?^7E^7=D(-Tz(uBQo%|owzbxTNUtE(+8`Dq*yuqKBHxd&(kqv}%-w~-Kc#??|uBg48eBz0E%FKF|9;@9y9KJo^*CGQKr1#Bjdr1R)PX zYqclZk?V^_;CvTtsKp|(c*8)>gn>MRb;8ywHWyow6Y&lgQNtGzKa3didpv6S`&=-5 zP-!-+wjbucC+X4K99wUecw57EYA^pR>O0`uznnwSa}LvFJcs92FfPR;!TFDS`7m* zhTNhn+-ONk*Xtg@5UFhg6ATx$(rq`4xZptv<2YyHZA>zZQM!4MPCmmz#n$5E^K_M} zSGQ%*DH9iD&{2NqM(LOa-eH*12Hkc;H}Z+oG%lIAjCYCCfm}=D8CL!Wr&P`E?%e0? zs9wT*xN6{i6BSe$X0)YHc2ZhfWUPcA!?0r2xaWGifi&dJW2&Oyvi{16)j<+eS&xfN zPX4ag9mf@x6GoOG--Z_N+tNzwuQM=@GN|`~>JYhwQ;(fkx&hY{Dr;{nZ&EHQr|vGo zG>9$38QT?nz1P{{LCe|kXr*lXZO7Yo0#|+~i`nR&8#2tDNG&Zl={reoQ<2NqE9(r! z7ulg`#8+#m#HBi^IRcR1W!|-wkD=+_rLw!?z~6Vpp1PeV$xQ|`xgVNhmme}@Dpgu6 zs7{h#hU>>1@Updz`jNVat~xL2PP(}C?2Z8wMWWW;Uvs)izVovEVj?-G-R50VeEU?4 z60_H}t~FEx_yJu=ry+P0i(%qrQ+(e&GRFLC#96GhTJw)ty_Z) zw)8q$lekriP7d4hdqJD8y0VDpG%wmU`3z98)_EA+@k2_i*%Wl8syBg?$jb@Zr%&PGkEE)^6avgK@J5OKpYA2AN8J){KLFN&y4dFxj&Cw2I zf4~CGO*uy%H}DaS3?J+8^E&*GTKr8NKBvR~q{V-NTM7Rg3IEbexj^{Ra}-{c@N+6e zsV{*Z%_KyVLS#smF;koR17{x7G|oVgMr0o%m;FVBxEOCsLJ$CTEUL^H_!LXDo8dFu zPQuR8D6^IsEk5jrjFb9niczM|Xc?a;&@Bo@N26T(3*!$kTzii3nWuPb2$Ebzl_w_m z7-QMrRJ4g0(I;0%17A?Q6@_49G+q6#1I`Z~@H-vwY&NKl1Vi27195i5U~;Eiv2=c8Ef>{5Y{O*chzhI X->8vclg2Xrm!<7n77G6Yt%Ic| literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class new file mode 100644 index 0000000000000000000000000000000000000000..7aff372f7ed257f0f058aba1e305764915ab3047 GIT binary patch literal 2622 zcmb7G(Nfz+6g`Wng+Vyr7Mc>0CTW`5IG}`(G>s_@xTSGpND3a_g;^YdEHRSo(oe}h z^dWs|r+w(8ul=Y_&q_jZV%df9jCXat_ug~vJy+|0{{8bW0PARI7!kN~VtT&xd}FiY zGy}_Zs-Afmyad2wM!=YUpBzih$cQ$s` ztIt@Q;<=|xV6;l)0+;HRBey&4ed#sKeVdj--EErop6OZYIW~?4FD+kSX(+~obUcs> zTRp}$eHg!BlBregC=HD_j58%k-3tupXr%St8KxR6r|TYDPHQ(X0}>TA0X=?C)SLr( zDv&9bXv~EZrJM!s4oL8>;uLc=mz*WO`IJ=DlfYtn+XpxkBB3>px6G5c>|<&eBOqC` z*_0<_{N!AS;u)x~v=K**YOJMe0ZTx(4rjO+d#91vj8kIGQBe!d{95d*6 ztn=1t<8lAotzCp`9Jj>ioY!5q<2B``rJ8v8Oi4Yr+mgBt*sN{o2Txs}h1F{gn-<;; zl3Jg7U(P*o5)sEr#|_>+Q@mF*;25IJ9czola9x7Ib&Qs~xX15hJ}rkQX~Dj_ostN5Cy1=jFQ z9CnebVx5_~`AZTqD#~#WqD+G53IEJQMcrj6rbeOsH)dX8vit@!3xD9_5h!q(u)GmC z2h({sj5Zs2B;X3zK$Y>n4L!s(x8MC=f-C(AJSOnZn_v^)6NQpRJ7zFP2G?F8PX^b> z;Q9z&m$}~J%2T5~Ou8uKf9gpzmoS;bQ`89m2YN(8QkG|LxfM|7Pb1i3X|}`NbG!&w UfgiaR_}eIt?;yvIz%FwC0c;DUTL1t6 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class new file mode 100644 index 0000000000000000000000000000000000000000..c7d7bb9b540a91c626aa73ea6e3203ef6aa80e36 GIT binary patch literal 4284 zcmb7HYj4|B7=BLD*1e=#m$6H`4R&MXvdwGRU@Td;Hnc1(ZMQabt_WnCh|OM*=wq1x@BA4xT@MU z(={r(>e{-l7InK~m|A(>TGcZO4$z_-ttD4;^@?t~0WaxwB!)wX3ml}^#adYp{zRVV z5f`hv(46+6pZbX z1xC1Pc*XUrGl-KorQqclUcqUB3!&+5BPh_9HB7^ulvN5ZQJYOBpIlaOR^U`_rU@?8uaO+qK(gG(#!Illj za4qsk;Zh8jp_0djd{?&>nA#_grdC>5d7_ux%n-&gq2ToxuHu?NDm3k0mwT}l+3x|b zI-A^Mqr7VCroixbg$RX0SQiKnX|g&R$O-ck*2YnvTbe4n@yfsGS*Cu z-KGmw170obJ&2d$eqv)tkebUrMe`Y2#oNeiCX0u9XH}?djZ&q#HaVSM9&4Nb{ zYDhwH1|)Z;uQP*|IUx%{_m{i&QG<0L2Q-S5#&@%7oh;94g8poQt6lxIaNPFVJH0qF zbypysXwx2no*a`+=_(keK3}V>=yp+CDf3OdV3oA;vSu4{AH3{w9~%t(Qdc7N4&P>w zZS$NBANO`emK9G+weQ^9I~1ImGWahqFt{``m(MK}3JdcLbAIMwkzLqmDuL+`QlX<9 z=t5gPCAD!$ZC_T*wY^hy1>PW)ZXg{?8_CZys8U^x_a9VSyX`5cHY+MQ`BP^FI>?Bh z#OB+H5@eVg*1BP?d8wtg2De|{T-7%PqKPESIN+(bH1w3aa~pUbq{P+l04ldsi{M6( zUArG+(j%?X`kYn`n!jI4zfYu3E0y#rqrKfBT(6NEi~`ZE-~Bt)Q}M0^i}QVPF9hpY z0!MdF=vK8pr4#$W$)<}%PYdU=#T)H6%;bLJ3$T(zl;daB?2!2L1-tW-Y`@IKt+CSC^P{D`z z$SaY8k2!R5>OaA!0qiBNvV75z;olmNz5@Kv6lOGl6Zi~TV7f#oIr;JQKRELg!|4|| zlll|qB9P>wo|gFJe#D{PpPC|#H^{}Yf)epoJqvM&kNR#7UTb&oGadZ0R|k)dw*?mG}ee@43A-u{u5gGswv;BZ^sr7 nKpP$=~WLBxcTVmAaF(wI7S8oPN{oUIYDB_B!72|tDZ z&7teaNcjnH_o!!6x`QuLj&+(&z5X1GZZads|w4I*W zbPdZa+4@iJzTBKb1W^Ss6$;`E`Tsb2w_;h{ZL99;F7I&DEm@|^&s>Ihi@Oc$gqsZa z)8%reV%aTCH{G_aovv$k&vcCr*Ib)(t-8I{P7p5?Wc?BsIS8$c#USI|zFosys zFb#K8Bp#gg2!==L7_L&Wxjj^Uh9~Jtpo@OUG2JR; z4u$Jw6*q+IEBwrGhde8|$*>&g`p|F;*CKK&xUJ#~+#zzOVsFR=!|wkh=WAi@=nZeW zg(SYjJq2H>NF&3L4eX56mdv|BD)U$}OiOO1*GBu;7V6v>(F9>3>5i+Jq+>^O&PPHUszZSx)Lx@%28%-ujXaZQSiQ8HzDW?E?HW-@Pdsf5 zkrJ_Gn5`Hlul71e+-~ScZQ4mytft;R)NMoj_ckN$Yr|n!zm(SKl|bymFRR-Wu~Mt; z(*+@lC)hJ+L^x1dKGj~#Ge*a002szJuMhMOGd12YPpuQfY{|=tft49l@4_gX$NY>4 zrZcpekfSBQ3=hWyxG1jk0i{6_iFxBH+BbnR2VkN|)S4%Ide6BRkwO}lkXU!iPr+&xCi20pk`IM^qbjQj^f|JH6*Wj0J zR($Zu5x40Dnxm&R44OUUXhns^s6#ih3@}!Se*6reb1fbXzNEQG2$ zUIt5)!OA<#PzEcM!L1P9=g8hAOQ#~fOr9YX-SP!m8f3DBGF}n=?+MY@q1dT>%q@jI f`V>NyN>h`oef%IT!vWb8eT&fXI!RxMzk$TR%vz+f literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class new file mode 100644 index 0000000000000000000000000000000000000000..36ae0beff57b887b2752493aec0416ce541a810e GIT binary patch literal 2718 zcmb7GZBrXn6n^d|O$Z4TqF|*ITdi$gXt!XiwMnrwfQ^O}A>!vHTRD~iw5^(BeC@6Hn}bN=TpFny(ijl9e!|hK%Z6#yY|E2-p1{DC^jh||v;?LL z^?I>kJ6pP8c^yaJy{$Vv%QL%D_Z%tpmUOzNWptYMrmUnfcuJUu_U3*VMzPD~Foa=& zVFq07b!4AGwa|EK>>7Hsj6w2 z-keH0KI0=8l3Gt=T;Nh{Z5yWRNlQ9ejNw8KZ(~9rBUxlemD`UKiwojJdr~Q`D<_jV zTvAR3XQX6z|k$>CkR$Jo1SFNl4=(1?Y_#g6pi@y1ix_9|Jt zk85dM&!K>#KqZ55A_5J-1fgH=h% zPB+w2H(XD*C`DJ_lWCM9s?#tQfqH78#`g8{qYKj zq>Of3?l9vAXJQnJyb`ZgU--78)Oz-TVH?K}%VB@#l_X|g!%wx`YE|awEwg5BS%%kh zSm)(x>)z49ntPpGL%&6O7Z_Z#drn&}nW~8wV(z4y>b1^hHKpr4vRxK7SGV|z^xyH4 z^3FyS%%_O{aD_L<2=BfGIA%cHM1P<92r|XVFnY-VCor$nZXn@xUAuMnf59zPbDLn{EWQzOC-=l yKa&Z3jt1#36A?^-+G!r-md9iMq+x}n`NChVV$HV#E!sSPOY-=a$nYbuj?8~+oQ3QF literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..f3343a1ee2ad343f3c267c54a6f8498e1f705fea GIT binary patch literal 2918 zcmbtWT~`}b6x}yTGvosbQLv>HTdg%A(ka*~5{ktD5={a^L|=z+4Fky}&P-U;we)}V zKlo5zbm@buzV=7C-19-2noFe1#Ul64ox9K3=bU}+ofm)q@h5;ae5)ZMaHC_`j3# zhIDJ~6KM&2kS&#R<+k0>4a;rX`soAR?pm(dlDcb4sn?|4GA*N7Z6C^lhNQs!FuxmT z9a}n%M?7%mkxr*EiZOvPy4~$IWsk>7wtQ@y8hX>P8hWv5I8NarGC>OZ(1j$%F`*%o z#v6E3;I1-;0hmC1#k5R!)eBu6_W*{Z_BBii+*F2MHXT=5(oSI#*V4F-X@O~`TiVJh z2t3M`m4*VxLu*&a?R#!!(zxllxh~I4SLsE=+X6F6H~Xezx^2>(#qBiS!Mmh;>a8ga z2~__N-M#{E9~{fNTS(zO+|}@Y8d>B7=9G2wwdd!fMiqvP1x9_I#UrzMXnX2ix}bzU z+!Kp0+uR@tfmADOkzL7-SSYs))6xyc)h#OB(PdA_x-u;Vfrxp?6stAlcNh1F7XPJy zKD6QkT|;DaeY?i&WG~&E0V6w6iKaqQZYJVIYzuz4v55!dR=xH@#9M|3cI7Al)2`2OxxyhcNv1` zwgjeL)y$L5xo#F;!_G>+Rx7MhD2Y9@VHs}MW}Yi6wdKK%Tz#EbL%TUzr^5EyUArzf zO|OX86c^_`?~-A$s?u?{+71(&E?GRV{ToNJ2WE!JTwr2AmblGpZJhUZ4D3u z#t3E^!L10MD^-bT5)=lu;r5DiJ{=cq`j4W6NNNuOj%0soC{s Yd#L%Nz}FlzeCPG$J`(&B_y&o804-0{ApigX literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class new file mode 100644 index 0000000000000000000000000000000000000000..fd8f4aff68cd73aef804a9527d7ca1f483acd912 GIT binary patch literal 2880 zcmbtWTXWk)6#mvWmJ=&!Vn~{%Y1%?4zL2U7ExkBRfn2D-Nz>TLyW%YAHnQZA)}Hj2 zFlAtX8JK~YGE-h);DITx{3wRAlHxjvl?#3G%Bwx!`OZ1tIjevE{qrvXA7ev9g5iAA z@_g?3#!}0vOW`{6p7n)X4K_8T7;YYMU~1Ll>yG6;UEFPY-1n8a>qx#U`;msGA)})Y z{S4)!K$cs!6ir*yEh*ak5ER4UHkWHHn@89Tv-!#st8E#!|0S>Xsdr@Wn%u34Z$jWS&5nZk{-U3`ay1Lq=Sez!$81x{;{yPJf)x8F%=EW zmHq2dz&6IpB ze1@?`%m`t)e+-v6x$UW)A+@|-sgXDcC|)1?rUO-U!Q3zx7U_Y+PwmJMqmHoWy2leK zOE_(JM>yM6X-SHlnGAX~0!?R&?=mFw1={Qj8eJJPT#IqAU%h+df|{6ypB)VkhUp_h z>qx(2OcaS)eP`KfMs>)jDG(A#TlG3`Qp7Z7;`7x3jrytFvoW-w$6Sx*(67GpE3rE!Aq}IZ}FGRct$!Y$PC*qc_(vL%$!;?oA}=3CI?6$>eW%<0XzGJ)*3NN2wbATEW+A_`=HS=cuJkuXo?)Q$5+lVwa5e!&E*X?3B=-Y`vp)uCqoGBITn-CZ zB)p}-f(_H-r^h)sf7roK@Qu8#ygRW<1>6t^ebc$3Q_GWzltq~6?&DxLrTqR@bn04!OBpjHAnB1&};M= Ks|v7=zW)F=;rOQj literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class new file mode 100644 index 0000000000000000000000000000000000000000..86adc76dd6d05a8a45ec5fa9aeda9e5543519a62 GIT binary patch literal 4755 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 m3?-UKFBk~_gy}NV( literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ProgramContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ProgramContext.class new file mode 100644 index 0000000000000000000000000000000000000000..f0067a8e164654b3f5a3f6fc25d05deb102719fe GIT binary patch literal 3243 zcmb7HYf~Fl7=BKIERcmtT9I3|Qfw1KyB6uiCeqeaBpN7|i1*79mauKI$!sEv@_~x)tNf_!Kq*UQI5|!S;7XAKt7Q7?CyD=^E~fumw*5J>u&&eU}^{nOjJy_ zYPnTovF7AGyX>T0bIV&*H#PJKTm^-FXG@XKxE}GS9G8501-GX5{UePsn<_)*zcy`G$>Qn>X zNe#NdwNB^nYrSjbi>7NT*#|0ybezJo0;if;RRzu;r4_Fet$B9Q$l6tpr$+_mI-S01 zdY^_A<(~7Y-k$Ime^5-S@jHu4pqZ{k`xeI zJf&mU+gG)8uL#U{bZ=dj(zPTI@8}vB1Ki&uH3%ePT{)$xmpzxY9c!gl+OXW5xl!bu zXtta;i|eLq%WMB;kGE~JA7?wV@?+=s7m1zT@@HJ2?|A@us$p}`!%WJWU2sgV=8{47 z$c9wMb35c=fh>|Sj<|fJkw*mb${+=oK0(2ARLQRZ@-#A(ox`*HsH;@xX`~=TDMffo39lclaw|ZjnidmP{fOib>=!)Yl4X zq`u9Eq66MQnjivqTX7n0!Rec}oZeJ0i$^&P*EtOz=Jf3`ocQhIgJmc%tm2fI`~#WXyPA??O`zS6k{`gVj={|Ev!nQ&g};bD)Fhm7YR4^UF;{w8=?K2R>tKE G^#2cN7E?z6 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..43627bdbb8103492f28c63c22e2d0a3421be568f GIT binary patch literal 3085 zcmbVOYf~Fl7=BKYvIG_iv0}MYE3Gw`(v{fS+8~8Skmv@GqSMrU+J9p7_yNfUBF>M-m%oITI;KJRt;`kyZ!0GP)|8X^qi z4a@bo>luqpr{ddnC+}Jx`>XP>4>6q5(4#{`FT)GRT)nv3^tMaB?my?A;%B;IvhUNHG*Vw&kxJ}2mYuxZ%&W$p6Yqn!mm+PB6r=gEw>NtA~ zdkvR+o)8=u6Jm880~lmDO=j1cRUW?b7%n8uyVkB{R4r%A$X6}T%cX*orf*jb)AszF zU>MRdj0D4ACj-MwH^EWv1i@>wPt0fVq=pe4PvI=XC1n)4U<^GowqyIVB6#Y^bzyRa z)VhW-hI7i`2|u~R-F}Q>LdQ8g&5)pkaknFX4A+vTk{~ds%yurdE@;o|cvjF3^F7<| zVAXJeVM0l}ZhN+0Cs~ttPRAuYPqKE!SqA~b;{TD=mid*9yS(D(`jJ9fLq^ACOfjUD z`H)p9{Vh{{h6))5q^|t7UEOp=UEeq&H4-k0Ko)dZY_j}95e!;`nr4ktpCrwiWjluD z`G!OF?-|}fD;XUT$T6@61yNlMveW2FgikXV$0o3=eIzW)5HnZj*C-^(6Za}%@}!x% z&a@rA+^lVIw`^@x=_Fy+D^_*ga&7T3iDkTW{%a>9k*GMl}*wt zP!@LBFWoRoq)opCYH|Wn3yLC8)?q-=K2E3zZD+T>V>?@N^_3Lv&av|1GO^E?rJzJXcDWH9RVhJB&)Jhv>IW`d&MjWg!EXI3U83Nb0<<1 zw%x(7KGZ+573(g|$CC&=;9?l*tjkXt2ep}f44#=xxttT(FV2*2cF&mE$MG-ZN)aPf zaH-yOD}2!wi94(KE?*HPO$l1&p1)N0D42S|p{XvvYn*!PjH-QTBzKh|jp`VEn?O&7 zD==tBwSsB6X7Qq2ugX=YH`nkIJ+ISg7E#&(z3HLp=su$NX&=E2diIF(*f)5Y_5wq9 za1%LN=_9JbUsvJ3RpMV!;j=3IcS`)M3ZGNqzgOaKweZuS|600N1^=N9uC?5sqyM@h zGJMmtiqL53M0_9phokqS0)CsWN02Aj9A2fT$igjB5uvr8XvX((`XS1K6B+Fj;MmXTiTxtU&Ii|8WEx(>5|NNQC=ji1 z?RC5n(oWGT-bIJ{KW$M4Me=K#o6%O3OcX{5z%o{dZ&f1LFm2!bF9XkX8~B3^{CQFXYY@ssf@+}$W8}f)Jq(fu zljOn02<~TSP0~uYVr`!Mg+%P{HbY}APsUKj9g@FJh@i2=$y<+nOW-!Wir{Su%{y}U YF5Z(X!~3)*=$+{E4-lsxh7S?{7ayYe00000 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class new file mode 100644 index 0000000000000000000000000000000000000000..1fe621523d925a644b2b210c7dcfa7abb36a5a91 GIT binary patch literal 2754 zcmbVOT~`}b6y2A^3<(2;Sg=xxt=2Xl(kWQ9Hb|`zY&3jGQr?Gf8wQe@teG1`{U!Ym zKGYXo`rxXs{wSAwK8T5#Aa$`;?#;>F=j?ONKKJtHU%&kh;0g9Mj0s%tn64*X&)DqR z4P`lY*)^Z5-N2YZ5^rco>CiAPaQ}j%w|BeBt0_~-wzO5*v6Vbi0^?1o>duL@1wP1C zD*3A8HVxBOE!Q}GV7OgdS#4=3S4yKU-L_?$t!?K}mNaApmM)67an^CA=lO)gU_M!0 z$0Vi%rWkgw+mbyVYq{#Nd1@Lh({38&mg#w=QDnl@`_QEfrZJ--tK&^v6}S_d!w^g$ zwPx9tTK7|r&wB_%QtZl{z>V0{tCpvvE!_#s;+l@PF)xs1xurW$eSy_nHP%5GFt%5v z{J!sYLB|c>?TkFL)PPqF?+7f!y4|-tOF5*qh+8_|#e1Z6>e~h!2yFfzT78Y%IXIRL zRhq#2xTE2&jvVp=h1h-snhNr*Q(X~5fysbZ`N(P=y1ptOj%ZB)_eBuMF+WU#?d^2c zo}|d{R@XiWo8t8h?|cpn7N9p2B>~Z43FEa8Oo@L)3K$o5Z%Fw>C9Atn_E?JC zr6-J-GRX>Dsam$&?zRu4TQ?6{v}CJJ!))!FuH}D^j7fE5c>*gJQXA-ZG<-h0y?|Y& zwy{+y?^LTh+qCUItJefFvNy*9%cLJGut>LYnWqTg2ndX5WC-maXNthGPn{FXZU((! z%_{1X_G?80%eyST>m$IVNNSCfEwdAq zf83wPkVwjGG-QVve|9NGk@QQk8rFhwa9rL|mmzrWOJHtLBj0t-b+Ymre%6ZhdTE^k zN!P5VZK|%zI&ZDj9}SP&`s?Hx`OVWi6;^Y)ZbNQbeiN_7ymI&amx0aNmY#a*cr2`5 zv3bh|&xEArug1xmSLBc!af@%zG#}RlIEyH9$HHPMSnt8$nxW-Bmif8DZ!5t`V7xHB zocI}um$Z%HLw=@s0!fJn-0S`x<5`2QpU2`K#^FnG_+~8rlOBFK;;$97 zIQUT?TRMHMy+zgLJE(pLHJ`D=1VI7ZonghlEio(V$arKLym`?xLa~bx;>0^}WG5Q?k z2wI~nhDNsd2WDSjviJ(Kgz~}R*yc}T*kNgQgWWgS3s!*|*DQZa@^~F-{s}xo`fqm@t+W6D literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class new file mode 100644 index 0000000000000000000000000000000000000000..9d846cabfb5fe8f90a21ad8e4abd3ce084a237c9 GIT binary patch literal 3488 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 ac7zA1S~K|nKwZEFZ69rwR_U^d?*9OxiZulQ literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser.class new file mode 100644 index 0000000000000000000000000000000000000000..66338b6ac160603da80a2de9dbae100ec1daa4da GIT binary patch literal 68245 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 M58^+G|HhpE0cd*vF#rGn literal 0 HcmV?d00001 From fef9d601c206fc567cf4272458e49abacdef46cc Mon Sep 17 00:00:00 2001 From: javad Date: Mon, 15 Apr 2024 18:20:31 +0330 Subject: [PATCH 15/23] astPrinter bug fixed --- .../Phase2/src/main/grammer/FunctionCraft.g4 | 52 +- .../main/visitor/astPrinter/AstPrinter.java | 2 +- .../Phase2/src/parsers/FunctionCraft.interp | 2 +- .../src/parsers/FunctionCraftParser.java | 1116 ++++++++--------- .../main/grammer/FunctionCraft.g4 | 52 +- .../main/visitor/astPrinter/AstPrinter.class | Bin 17699 -> 17701 bytes .../parsers/FunctionCraft.interp | 2 +- ...nCraftParser$AccessExpressionContext.class | Bin 3865 -> 3865 bytes ...unctionCraftParser$AccessListContext.class | Bin 2550 -> 2550 bytes ...raftParser$AdditiveExpressionContext.class | Bin 2849 -> 2904 bytes ...unctionCraftParser$AssignmentContext.class | Bin 3418 -> 3418 bytes .../FunctionCraftParser$BodyContext.class | Bin 2825 -> 2825 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...ionCraftParser$ChompStatementContext.class | Bin 2692 -> 2692 bytes ...tionCraftParser$ChopStatementContext.class | Bin 2681 -> 2681 bytes ...FunctionCraftParser$ConditionContext.class | Bin 3699 -> 3699 bytes ...raftParser$EqaulityExpressionContext.class | Bin 2893 -> 2998 bytes ...unctionCraftParser$ExpressionContext.class | Bin 2712 -> 2712 bytes ...onCraftParser$FilterStatementContext.class | Bin 3709 -> 3709 bytes ...ctionCraftParser$ForStatementContext.class | Bin 2995 -> 2995 bytes ...CraftParser$FunctionArgumentsContext.class | Bin 3030 -> 3030 bytes ...$FunctionArgumentsDeclarationContext.class | Bin 3850 -> 3850 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...nctionCraftParser$IfStatementContext.class | Bin 3625 -> 3625 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3336 -> 3336 bytes ...ctionCraftParser$LenStatementContext.class | Bin 2670 -> 2670 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes .../FunctionCraftParser$LoopBodyContext.class | Bin 4284 -> 4284 bytes ...onCraftParser$LoopDoStatementContext.class | Bin 2688 -> 2688 bytes .../FunctionCraftParser$MainContext.class | Bin 2718 -> 2718 bytes ...tParser$MatchPatternStatementContext.class | Bin 2918 -> 2918 bytes ...rser$MultiplicativeExpressionContext.class | Bin 2880 -> 2935 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes ...onCraftParser$PatternMatchingContext.class | Bin 4130 -> 4130 bytes ...raftParser$PreUnaryExpressionContext.class | Bin 2799 -> 2878 bytes ...tionCraftParser$PushStatementContext.class | Bin 3085 -> 3085 bytes ...tionCraftParser$PutsStatementContext.class | Bin 2754 -> 2754 bytes .../FunctionCraftParser$RangeContext.class | Bin 3488 -> 3488 bytes ...ftParser$RelationalExpressionContext.class | Bin 3062 -> 3103 bytes ...onCraftParser$ReturnStatementContext.class | Bin 2598 -> 2641 bytes ...FunctionCraftParser$StatementContext.class | Bin 4183 -> 4183 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 68245 -> 68551 bytes 43 files changed, 618 insertions(+), 608 deletions(-) diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index ec7f546..cb96762 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -30,6 +30,7 @@ functionDeclaration returns [FunctionDeclaration functionDeclarationRet]: Identifier id_ = new Identifier($id.text); id_.setLine($id.line); $functionDeclarationRet.setFunctionName(id_); + $functionDeclarationRet.setLine($def.line); } f = functionArgumentsDeclaration {$functionDeclarationRet.setArgs($f.argRet);} b = body {$functionDeclarationRet.setBody($b.bodyRet);} @@ -144,7 +145,10 @@ returnStatement returns [ReturnStatement returnStmtRet]: { $returnStmtRet = new ReturnStatement(); } - RETURN (e = expression{$returnStmtRet.setReturnExp($e.expRet);})? SEMICOLLON; + r = RETURN (e = expression{ + $returnStmtRet.setReturnExp($e.expRet); + $returnStmtRet.setLine($r.line); + })? SEMICOLLON; ifStatement returns[IfStatement ifRet]: { @@ -397,25 +401,27 @@ expression returns [Expression expRet]: eqaulityExpression returns[Expression expRet]: - e1 = eqaulityExpression + e1 = relationalExpression { BinaryOperator op; + int line; } - (op1 = EQUAL {op = BinaryOperator.EQUAL;} - | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;} - ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);} + (op1 = EQUAL {op = BinaryOperator.EQUAL;line = $op1.line;} + | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;line = $op2.line;} + ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);$expRet.setLine(line);} | r2 = relationalExpression {$expRet = $r2.expRet;}; relationalExpression returns [Expression expRet]: r1 = relationalExpression { BinaryOperator op; + int line; } - (op = GREATER_THAN {op = BinaryOperator.GREATER_THAN;} - | LESS_THAN {op = BinaryOperator.LESS_THAN;} - | LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;} - | GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;} - ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);} + (gt = GREATER_THAN {op = BinaryOperator.GREATER_THAN;line = $gt.line;} + | lt = LESS_THAN {op = BinaryOperator.LESS_THAN;line = $lt.line;} + | let = LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;line = $let.line;} + | get = GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;line = $get.line;} + ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);$expRet.setLine(line);} | a2 = additiveExpression {$expRet = $a2.expRet;}; @@ -423,10 +429,11 @@ additiveExpression returns [Expression expRet]: a1 = additiveExpression { BinaryOperator op; + int line; } - (PLUS {op = BinaryOperator.PLUS;} - | MINUS {op = BinaryOperator.MINUS;} - ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);} + (p = PLUS {op = BinaryOperator.PLUS;line = $p.line;} + | m = MINUS {op = BinaryOperator.MINUS;line = $m.line;} + ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);$expRet.setLine(line);} | m2 = multiplicativeExpression { $expRet = $m2.expRet; @@ -438,22 +445,24 @@ multiplicativeExpression returns [Expression expRet]: m1 = multiplicativeExpression { BinaryOperator op; + int line; } - (MULT {op = BinaryOperator.MULT;} - |DIVIDE {op = BinaryOperator.DIVIDE;} - ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);} + (m = MULT {op = BinaryOperator.MULT;line = $m.line;} + |d = DIVIDE {op = BinaryOperator.DIVIDE;line = $d.line;} + ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);$expRet.setLine(line);} | p2 = preUnaryExpression {$expRet = $p2.expRet;}; preUnaryExpression returns [Expression expRet]: { UnaryOperator op; + int line; } - (NOT {op = UnaryOperator.NOT;} - |MINUS {op = UnaryOperator.MINUS;} - |INCREMENT {op = UnaryOperator.INC;} - |DECREMENT {op = UnaryOperator.DEC;} - ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);} + (n = NOT {op = UnaryOperator.NOT;line = $n.line;} + |m = MINUS {op = UnaryOperator.MINUS;line = $m.line;} + |i = INCREMENT {op = UnaryOperator.INC;line = $i.line;} + |d = DECREMENT {op = UnaryOperator.DEC;line = $d.line;} + ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);$expRet.setLine(line);} | a2 = accessExpression {$expRet = $a2.expRet;}; @@ -488,6 +497,7 @@ accessExpression returns [Expression expRet]: accessExp.setDimentionalAccess(dimentions); } $expRet = accessExp; + $expRet.setLine($o.expRet.getLine()); } } ; diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java index b8e8521..6bbf2f7 100644 --- a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -17,7 +17,7 @@ public class AstPrinter extends Visitor { public void printMessage(int line, String message){ - System.out.println("line:" + String.valueOf(line) + message); + System.out.println("line:" + String.valueOf(line) + "->" + message); } @Override diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp index 23a5e52..cc411c8 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 665, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 475, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 480, 8, 25, 10, 25, 12, 25, 483, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 499, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 504, 8, 26, 10, 26, 12, 26, 507, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 519, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 524, 8, 27, 10, 27, 12, 27, 527, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 539, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 544, 8, 28, 10, 28, 12, 28, 547, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 558, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 566, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 575, 8, 30, 10, 30, 12, 30, 578, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 583, 8, 30, 10, 30, 12, 30, 586, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 617, 8, 31, 1, 31, 3, 31, 620, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 645, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 656, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 5, 48, 50, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 699, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 464, 1, 0, 0, 0, 52, 484, 1, 0, 0, 0, 54, 508, 1, 0, 0, 0, 56, 528, 1, 0, 0, 0, 58, 565, 1, 0, 0, 0, 60, 567, 1, 0, 0, 0, 62, 619, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 644, 1, 0, 0, 0, 68, 646, 1, 0, 0, 0, 70, 655, 1, 0, 0, 0, 72, 657, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 6, 25, -1, 0, 465, 466, 3, 52, 26, 0, 466, 467, 6, 25, -1, 0, 467, 481, 1, 0, 0, 0, 468, 469, 10, 2, 0, 0, 469, 474, 6, 25, -1, 0, 470, 471, 5, 24, 0, 0, 471, 475, 6, 25, -1, 0, 472, 473, 5, 25, 0, 0, 473, 475, 6, 25, -1, 0, 474, 470, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 477, 3, 52, 26, 0, 477, 478, 6, 25, -1, 0, 478, 480, 1, 0, 0, 0, 479, 468, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 51, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 484, 485, 6, 26, -1, 0, 485, 486, 3, 54, 27, 0, 486, 487, 6, 26, -1, 0, 487, 505, 1, 0, 0, 0, 488, 489, 10, 2, 0, 0, 489, 498, 6, 26, -1, 0, 490, 491, 5, 28, 0, 0, 491, 499, 6, 26, -1, 0, 492, 493, 5, 29, 0, 0, 493, 499, 6, 26, -1, 0, 494, 495, 5, 26, 0, 0, 495, 499, 6, 26, -1, 0, 496, 497, 5, 27, 0, 0, 497, 499, 6, 26, -1, 0, 498, 490, 1, 0, 0, 0, 498, 492, 1, 0, 0, 0, 498, 494, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 3, 54, 27, 0, 501, 502, 6, 26, -1, 0, 502, 504, 1, 0, 0, 0, 503, 488, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 53, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 6, 27, -1, 0, 509, 510, 3, 56, 28, 0, 510, 511, 6, 27, -1, 0, 511, 525, 1, 0, 0, 0, 512, 513, 10, 2, 0, 0, 513, 518, 6, 27, -1, 0, 514, 515, 5, 20, 0, 0, 515, 519, 6, 27, -1, 0, 516, 517, 5, 21, 0, 0, 517, 519, 6, 27, -1, 0, 518, 514, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 3, 56, 28, 0, 521, 522, 6, 27, -1, 0, 522, 524, 1, 0, 0, 0, 523, 512, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 55, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 28, -1, 0, 529, 530, 3, 58, 29, 0, 530, 531, 6, 28, -1, 0, 531, 545, 1, 0, 0, 0, 532, 533, 10, 2, 0, 0, 533, 538, 6, 28, -1, 0, 534, 535, 5, 22, 0, 0, 535, 539, 6, 28, -1, 0, 536, 537, 5, 23, 0, 0, 537, 539, 6, 28, -1, 0, 538, 534, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 58, 29, 0, 541, 542, 6, 28, -1, 0, 542, 544, 1, 0, 0, 0, 543, 532, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 57, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 557, 6, 29, -1, 0, 549, 550, 5, 32, 0, 0, 550, 558, 6, 29, -1, 0, 551, 552, 5, 21, 0, 0, 552, 558, 6, 29, -1, 0, 553, 554, 5, 33, 0, 0, 554, 558, 6, 29, -1, 0, 555, 556, 5, 34, 0, 0, 556, 558, 6, 29, -1, 0, 557, 549, 1, 0, 0, 0, 557, 551, 1, 0, 0, 0, 557, 553, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 60, 30, 0, 560, 561, 6, 29, -1, 0, 561, 566, 1, 0, 0, 0, 562, 563, 3, 60, 30, 0, 563, 564, 6, 29, -1, 0, 564, 566, 1, 0, 0, 0, 565, 548, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 59, 1, 0, 0, 0, 567, 568, 6, 30, -1, 0, 568, 576, 3, 62, 31, 0, 569, 570, 5, 49, 0, 0, 570, 571, 3, 10, 5, 0, 571, 572, 6, 30, -1, 0, 572, 573, 5, 50, 0, 0, 573, 575, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 3, 42, 21, 0, 580, 581, 6, 30, -1, 0, 581, 583, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 587, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 588, 6, 30, -1, 0, 588, 61, 1, 0, 0, 0, 589, 590, 3, 66, 33, 0, 590, 591, 6, 31, -1, 0, 591, 620, 1, 0, 0, 0, 592, 593, 5, 62, 0, 0, 593, 620, 6, 31, -1, 0, 594, 595, 3, 64, 32, 0, 595, 596, 6, 31, -1, 0, 596, 620, 1, 0, 0, 0, 597, 598, 3, 36, 18, 0, 598, 599, 6, 31, -1, 0, 599, 620, 1, 0, 0, 0, 600, 601, 3, 38, 19, 0, 601, 602, 6, 31, -1, 0, 602, 620, 1, 0, 0, 0, 603, 604, 3, 34, 17, 0, 604, 605, 6, 31, -1, 0, 605, 620, 1, 0, 0, 0, 606, 607, 3, 32, 16, 0, 607, 608, 6, 31, -1, 0, 608, 620, 1, 0, 0, 0, 609, 610, 3, 20, 10, 0, 610, 611, 6, 31, -1, 0, 611, 620, 1, 0, 0, 0, 612, 616, 5, 49, 0, 0, 613, 614, 3, 48, 24, 0, 614, 615, 6, 31, -1, 0, 615, 617, 1, 0, 0, 0, 616, 613, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 5, 50, 0, 0, 619, 589, 1, 0, 0, 0, 619, 592, 1, 0, 0, 0, 619, 594, 1, 0, 0, 0, 619, 597, 1, 0, 0, 0, 619, 600, 1, 0, 0, 0, 619, 603, 1, 0, 0, 0, 619, 606, 1, 0, 0, 0, 619, 609, 1, 0, 0, 0, 619, 612, 1, 0, 0, 0, 620, 63, 1, 0, 0, 0, 621, 622, 5, 42, 0, 0, 622, 623, 3, 4, 2, 0, 623, 624, 5, 53, 0, 0, 624, 625, 3, 46, 23, 0, 625, 626, 5, 54, 0, 0, 626, 627, 3, 10, 5, 0, 627, 628, 6, 32, -1, 0, 628, 65, 1, 0, 0, 0, 629, 630, 3, 70, 35, 0, 630, 631, 6, 33, -1, 0, 631, 645, 1, 0, 0, 0, 632, 633, 5, 63, 0, 0, 633, 645, 6, 33, -1, 0, 634, 635, 5, 60, 0, 0, 635, 645, 6, 33, -1, 0, 636, 637, 5, 61, 0, 0, 637, 645, 6, 33, -1, 0, 638, 639, 3, 68, 34, 0, 639, 640, 6, 33, -1, 0, 640, 645, 1, 0, 0, 0, 641, 642, 3, 72, 36, 0, 642, 643, 6, 33, -1, 0, 643, 645, 1, 0, 0, 0, 644, 629, 1, 0, 0, 0, 644, 632, 1, 0, 0, 0, 644, 634, 1, 0, 0, 0, 644, 636, 1, 0, 0, 0, 644, 638, 1, 0, 0, 0, 644, 641, 1, 0, 0, 0, 645, 67, 1, 0, 0, 0, 646, 647, 5, 51, 0, 0, 647, 648, 3, 10, 5, 0, 648, 649, 5, 52, 0, 0, 649, 650, 6, 34, -1, 0, 650, 69, 1, 0, 0, 0, 651, 652, 5, 38, 0, 0, 652, 656, 6, 35, -1, 0, 653, 654, 5, 39, 0, 0, 654, 656, 6, 35, -1, 0, 655, 651, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 656, 71, 1, 0, 0, 0, 657, 658, 5, 11, 0, 0, 658, 659, 5, 49, 0, 0, 659, 660, 5, 58, 0, 0, 660, 661, 5, 62, 0, 0, 661, 662, 5, 50, 0, 0, 662, 663, 6, 36, -1, 0, 663, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 474, 481, 498, 505, 518, 525, 538, 545, 557, 565, 576, 584, 616, 619, 644, 655] \ No newline at end of file +[4, 1, 65, 661, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 471, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 479, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 495, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 500, 8, 26, 10, 26, 12, 26, 503, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 515, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 520, 8, 27, 10, 27, 12, 27, 523, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 535, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 540, 8, 28, 10, 28, 12, 28, 543, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 554, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 562, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 571, 8, 30, 10, 30, 12, 30, 574, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 579, 8, 30, 10, 30, 12, 30, 582, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 613, 8, 31, 1, 31, 3, 31, 616, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 641, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 652, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 695, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 478, 1, 0, 0, 0, 52, 480, 1, 0, 0, 0, 54, 504, 1, 0, 0, 0, 56, 524, 1, 0, 0, 0, 58, 561, 1, 0, 0, 0, 60, 563, 1, 0, 0, 0, 62, 615, 1, 0, 0, 0, 64, 617, 1, 0, 0, 0, 66, 640, 1, 0, 0, 0, 68, 642, 1, 0, 0, 0, 70, 651, 1, 0, 0, 0, 72, 653, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 3, 52, 26, 0, 465, 470, 6, 25, -1, 0, 466, 467, 5, 24, 0, 0, 467, 471, 6, 25, -1, 0, 468, 469, 5, 25, 0, 0, 469, 471, 6, 25, -1, 0, 470, 466, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 3, 52, 26, 0, 473, 474, 6, 25, -1, 0, 474, 479, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 477, 6, 25, -1, 0, 477, 479, 1, 0, 0, 0, 478, 464, 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 479, 51, 1, 0, 0, 0, 480, 481, 6, 26, -1, 0, 481, 482, 3, 54, 27, 0, 482, 483, 6, 26, -1, 0, 483, 501, 1, 0, 0, 0, 484, 485, 10, 2, 0, 0, 485, 494, 6, 26, -1, 0, 486, 487, 5, 28, 0, 0, 487, 495, 6, 26, -1, 0, 488, 489, 5, 29, 0, 0, 489, 495, 6, 26, -1, 0, 490, 491, 5, 26, 0, 0, 491, 495, 6, 26, -1, 0, 492, 493, 5, 27, 0, 0, 493, 495, 6, 26, -1, 0, 494, 486, 1, 0, 0, 0, 494, 488, 1, 0, 0, 0, 494, 490, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 3, 54, 27, 0, 497, 498, 6, 26, -1, 0, 498, 500, 1, 0, 0, 0, 499, 484, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 53, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 505, 6, 27, -1, 0, 505, 506, 3, 56, 28, 0, 506, 507, 6, 27, -1, 0, 507, 521, 1, 0, 0, 0, 508, 509, 10, 2, 0, 0, 509, 514, 6, 27, -1, 0, 510, 511, 5, 20, 0, 0, 511, 515, 6, 27, -1, 0, 512, 513, 5, 21, 0, 0, 513, 515, 6, 27, -1, 0, 514, 510, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 520, 1, 0, 0, 0, 519, 508, 1, 0, 0, 0, 520, 523, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 55, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 524, 525, 6, 28, -1, 0, 525, 526, 3, 58, 29, 0, 526, 527, 6, 28, -1, 0, 527, 541, 1, 0, 0, 0, 528, 529, 10, 2, 0, 0, 529, 534, 6, 28, -1, 0, 530, 531, 5, 22, 0, 0, 531, 535, 6, 28, -1, 0, 532, 533, 5, 23, 0, 0, 533, 535, 6, 28, -1, 0, 534, 530, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 540, 1, 0, 0, 0, 539, 528, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 57, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 553, 6, 29, -1, 0, 545, 546, 5, 32, 0, 0, 546, 554, 6, 29, -1, 0, 547, 548, 5, 21, 0, 0, 548, 554, 6, 29, -1, 0, 549, 550, 5, 33, 0, 0, 550, 554, 6, 29, -1, 0, 551, 552, 5, 34, 0, 0, 552, 554, 6, 29, -1, 0, 553, 545, 1, 0, 0, 0, 553, 547, 1, 0, 0, 0, 553, 549, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 3, 60, 30, 0, 556, 557, 6, 29, -1, 0, 557, 562, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 6, 29, -1, 0, 560, 562, 1, 0, 0, 0, 561, 544, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 562, 59, 1, 0, 0, 0, 563, 564, 6, 30, -1, 0, 564, 572, 3, 62, 31, 0, 565, 566, 5, 49, 0, 0, 566, 567, 3, 10, 5, 0, 567, 568, 6, 30, -1, 0, 568, 569, 5, 50, 0, 0, 569, 571, 1, 0, 0, 0, 570, 565, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 580, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 576, 3, 42, 21, 0, 576, 577, 6, 30, -1, 0, 577, 579, 1, 0, 0, 0, 578, 575, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 583, 584, 6, 30, -1, 0, 584, 61, 1, 0, 0, 0, 585, 586, 3, 66, 33, 0, 586, 587, 6, 31, -1, 0, 587, 616, 1, 0, 0, 0, 588, 589, 5, 62, 0, 0, 589, 616, 6, 31, -1, 0, 590, 591, 3, 64, 32, 0, 591, 592, 6, 31, -1, 0, 592, 616, 1, 0, 0, 0, 593, 594, 3, 36, 18, 0, 594, 595, 6, 31, -1, 0, 595, 616, 1, 0, 0, 0, 596, 597, 3, 38, 19, 0, 597, 598, 6, 31, -1, 0, 598, 616, 1, 0, 0, 0, 599, 600, 3, 34, 17, 0, 600, 601, 6, 31, -1, 0, 601, 616, 1, 0, 0, 0, 602, 603, 3, 32, 16, 0, 603, 604, 6, 31, -1, 0, 604, 616, 1, 0, 0, 0, 605, 606, 3, 20, 10, 0, 606, 607, 6, 31, -1, 0, 607, 616, 1, 0, 0, 0, 608, 612, 5, 49, 0, 0, 609, 610, 3, 48, 24, 0, 610, 611, 6, 31, -1, 0, 611, 613, 1, 0, 0, 0, 612, 609, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 5, 50, 0, 0, 615, 585, 1, 0, 0, 0, 615, 588, 1, 0, 0, 0, 615, 590, 1, 0, 0, 0, 615, 593, 1, 0, 0, 0, 615, 596, 1, 0, 0, 0, 615, 599, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 615, 608, 1, 0, 0, 0, 616, 63, 1, 0, 0, 0, 617, 618, 5, 42, 0, 0, 618, 619, 3, 4, 2, 0, 619, 620, 5, 53, 0, 0, 620, 621, 3, 46, 23, 0, 621, 622, 5, 54, 0, 0, 622, 623, 3, 10, 5, 0, 623, 624, 6, 32, -1, 0, 624, 65, 1, 0, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 6, 33, -1, 0, 627, 641, 1, 0, 0, 0, 628, 629, 5, 63, 0, 0, 629, 641, 6, 33, -1, 0, 630, 631, 5, 60, 0, 0, 631, 641, 6, 33, -1, 0, 632, 633, 5, 61, 0, 0, 633, 641, 6, 33, -1, 0, 634, 635, 3, 68, 34, 0, 635, 636, 6, 33, -1, 0, 636, 641, 1, 0, 0, 0, 637, 638, 3, 72, 36, 0, 638, 639, 6, 33, -1, 0, 639, 641, 1, 0, 0, 0, 640, 625, 1, 0, 0, 0, 640, 628, 1, 0, 0, 0, 640, 630, 1, 0, 0, 0, 640, 632, 1, 0, 0, 0, 640, 634, 1, 0, 0, 0, 640, 637, 1, 0, 0, 0, 641, 67, 1, 0, 0, 0, 642, 643, 5, 51, 0, 0, 643, 644, 3, 10, 5, 0, 644, 645, 5, 52, 0, 0, 645, 646, 6, 34, -1, 0, 646, 69, 1, 0, 0, 0, 647, 648, 5, 38, 0, 0, 648, 652, 6, 35, -1, 0, 649, 650, 5, 39, 0, 0, 650, 652, 6, 35, -1, 0, 651, 647, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 71, 1, 0, 0, 0, 653, 654, 5, 11, 0, 0, 654, 655, 5, 49, 0, 0, 655, 656, 5, 58, 0, 0, 656, 657, 5, 62, 0, 0, 657, 658, 5, 50, 0, 0, 658, 659, 6, 36, -1, 0, 659, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 470, 478, 494, 501, 514, 521, 534, 541, 553, 561, 572, 580, 612, 615, 640, 651] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 4b8e0c2..cba041b 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -292,6 +292,7 @@ public final FunctionDeclarationContext functionDeclaration() throws Recognition Identifier id_ = new Identifier((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getText():null)); id_.setLine((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getLine():0)); _localctx.functionDeclarationRet.setFunctionName(id_); + _localctx.functionDeclarationRet.setLine((((FunctionDeclarationContext)_localctx).def!=null?((FunctionDeclarationContext)_localctx).def.getLine():0)); setState(94); ((FunctionDeclarationContext)_localctx).f = functionArgumentsDeclaration(); @@ -780,9 +781,10 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce @SuppressWarnings("CheckReturnValue") public static class ReturnStatementContext extends ParserRuleContext { public ReturnStatement returnStmtRet; + public Token r; public ExpressionContext e; - public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } public ExpressionContext expression() { return getRuleContext(ExpressionContext.class,0); } @@ -816,7 +818,7 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio ((ReturnStatementContext)_localctx).returnStmtRet = new ReturnStatement(); setState(186); - match(RETURN); + ((ReturnStatementContext)_localctx).r = match(RETURN); setState(190); _errHandler.sync(this); _la = _input.LA(1); @@ -824,7 +826,10 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio { setState(187); ((ReturnStatementContext)_localctx).e = expression(0); - _localctx.returnStmtRet.setReturnExp(((ReturnStatementContext)_localctx).e.expRet); + + _localctx.returnStmtRet.setReturnExp(((ReturnStatementContext)_localctx).e.expRet); + _localctx.returnStmtRet.setLine((((ReturnStatementContext)_localctx).r!=null?((ReturnStatementContext)_localctx).r.getLine():0)); + } } @@ -2541,7 +2546,7 @@ private ExpressionContext expression(int _p) throws RecognitionException { { { setState(451); - ((ExpressionContext)_localctx).e3 = eqaulityExpression(0); + ((ExpressionContext)_localctx).e3 = eqaulityExpression(); ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; } _ctx.stop = _input.LT(-1); @@ -2562,7 +2567,7 @@ private ExpressionContext expression(int _p) throws RecognitionException { setState(455); ((ExpressionContext)_localctx).a = match(APPEND); setState(456); - ((ExpressionContext)_localctx).e2 = eqaulityExpression(0); + ((ExpressionContext)_localctx).e2 = eqaulityExpression(); if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ ((ExpressionContext)_localctx).expRet = new AppendExpression(((ExpressionContext)_localctx).e1.expRet); @@ -2597,16 +2602,16 @@ private ExpressionContext expression(int _p) throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class EqaulityExpressionContext extends ParserRuleContext { public Expression expRet; - public EqaulityExpressionContext e1; - public RelationalExpressionContext r2; + public RelationalExpressionContext e1; public Token op1; public Token op2; public RelationalExpressionContext r1; - public RelationalExpressionContext relationalExpression() { - return getRuleContext(RelationalExpressionContext.class,0); + public RelationalExpressionContext r2; + public List relationalExpression() { + return getRuleContexts(RelationalExpressionContext.class); } - public EqaulityExpressionContext eqaulityExpression() { - return getRuleContext(EqaulityExpressionContext.class,0); + public RelationalExpressionContext relationalExpression(int i) { + return getRuleContext(RelationalExpressionContext.class,i); } public TerminalNode EQUAL() { return getToken(FunctionCraftParser.EQUAL, 0); } public TerminalNode NOT_EQUAL() { return getToken(FunctionCraftParser.NOT_EQUAL, 0); } @@ -2630,73 +2635,54 @@ public T accept(ParseTreeVisitor visitor) { } public final EqaulityExpressionContext eqaulityExpression() throws RecognitionException { - return eqaulityExpression(0); - } - - private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionException { - ParserRuleContext _parentctx = _ctx; - int _parentState = getState(); - EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, _parentState); - EqaulityExpressionContext _prevctx = _localctx; - int _startState = 50; - enterRecursionRule(_localctx, 50, RULE_eqaulityExpression, _p); + EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_eqaulityExpression); try { - int _alt; - enterOuterAlt(_localctx, 1); - { - { - setState(465); - ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); - ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; - } - _ctx.stop = _input.LT(-1); - setState(481); + setState(478); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,31,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - if ( _parseListeners!=null ) triggerExitRuleEvent(); - _prevctx = _localctx; + switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(464); + ((EqaulityExpressionContext)_localctx).e1 = relationalExpression(0); + + BinaryOperator op; + int line; + + setState(470); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL: { + setState(466); + ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); + op = BinaryOperator.EQUAL;line = (((EqaulityExpressionContext)_localctx).op1!=null?((EqaulityExpressionContext)_localctx).op1.getLine():0); + } + break; + case NOT_EQUAL: { - _localctx = new EqaulityExpressionContext(_parentctx, _parentState); - _localctx.e1 = _prevctx; - pushNewRecursionContext(_localctx, _startState, RULE_eqaulityExpression); setState(468); - if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - - BinaryOperator op; - - setState(474); - _errHandler.sync(this); - switch (_input.LA(1)) { - case EQUAL: - { - setState(470); - ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); - op = BinaryOperator.EQUAL; - } - break; - case NOT_EQUAL: - { - setState(472); - ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); - op = BinaryOperator.NOT_EQUAL; - } - break; - default: - throw new NoViableAltException(this); - } - setState(476); - ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); - ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op); + ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); + op = BinaryOperator.NOT_EQUAL;line = (((EqaulityExpressionContext)_localctx).op2!=null?((EqaulityExpressionContext)_localctx).op2.getLine():0); } - } + break; + default: + throw new NoViableAltException(this); } - setState(483); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,31,_ctx); - } + setState(472); + ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op);_localctx.expRet.setLine(line); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(475); + ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; + } + break; } } catch (RecognitionException re) { @@ -2705,7 +2691,7 @@ private EqaulityExpressionContext eqaulityExpression(int _p) throws RecognitionE _errHandler.recover(this, re); } finally { - unrollRecursionContexts(_parentctx); + exitRule(); } return _localctx; } @@ -2715,7 +2701,10 @@ public static class RelationalExpressionContext extends ParserRuleContext { public Expression expRet; public RelationalExpressionContext r1; public AdditiveExpressionContext a2; - public Token op; + public Token gt; + public Token lt; + public Token let; + public Token get; public AdditiveExpressionContext a1; public AdditiveExpressionContext additiveExpression() { return getRuleContext(AdditiveExpressionContext.class,0); @@ -2723,10 +2712,10 @@ public AdditiveExpressionContext additiveExpression() { public RelationalExpressionContext relationalExpression() { return getRuleContext(RelationalExpressionContext.class,0); } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } - public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -2762,12 +2751,12 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit enterOuterAlt(_localctx, 1); { { - setState(485); + setState(481); ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; } _ctx.stop = _input.LT(-1); - setState(505); + setState(501); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2779,52 +2768,53 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit _localctx = new RelationalExpressionContext(_parentctx, _parentState); _localctx.r1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); - setState(488); + setState(484); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; + int line; - setState(498); + setState(494); _errHandler.sync(this); switch (_input.LA(1)) { case GREATER_THAN: { - setState(490); - ((RelationalExpressionContext)_localctx).op = match(GREATER_THAN); - op = BinaryOperator.GREATER_THAN; + setState(486); + ((RelationalExpressionContext)_localctx).gt = match(GREATER_THAN); + op = BinaryOperator.GREATER_THAN;line = (((RelationalExpressionContext)_localctx).gt!=null?((RelationalExpressionContext)_localctx).gt.getLine():0); } break; case LESS_THAN: { - setState(492); - match(LESS_THAN); - op = BinaryOperator.LESS_THAN; + setState(488); + ((RelationalExpressionContext)_localctx).lt = match(LESS_THAN); + op = BinaryOperator.LESS_THAN;line = (((RelationalExpressionContext)_localctx).lt!=null?((RelationalExpressionContext)_localctx).lt.getLine():0); } break; case LESS_EQUAL_THAN: { - setState(494); - match(LESS_EQUAL_THAN); - op = BinaryOperator.LESS_EQUAL_THAN; + setState(490); + ((RelationalExpressionContext)_localctx).let = match(LESS_EQUAL_THAN); + op = BinaryOperator.LESS_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).let!=null?((RelationalExpressionContext)_localctx).let.getLine():0); } break; case GREATER_EQUAL_THAN: { - setState(496); - match(GREATER_EQUAL_THAN); - op = BinaryOperator.GREATER_EQUAL_THAN; + setState(492); + ((RelationalExpressionContext)_localctx).get = match(GREATER_EQUAL_THAN); + op = BinaryOperator.GREATER_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).get!=null?((RelationalExpressionContext)_localctx).get.getLine():0); } break; default: throw new NoViableAltException(this); } - setState(500); + setState(496); ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); - ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op); + ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(507); + setState(503); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,33,_ctx); } @@ -2846,6 +2836,8 @@ public static class AdditiveExpressionContext extends ParserRuleContext { public Expression expRet; public AdditiveExpressionContext a1; public MultiplicativeExpressionContext m2; + public Token p; + public Token m; public MultiplicativeExpressionContext m1; public MultiplicativeExpressionContext multiplicativeExpression() { return getRuleContext(MultiplicativeExpressionContext.class,0); @@ -2890,14 +2882,14 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE enterOuterAlt(_localctx, 1); { { - setState(509); + setState(505); ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; } _ctx.stop = _input.LT(-1); - setState(525); + setState(521); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -2909,38 +2901,39 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE _localctx = new AdditiveExpressionContext(_parentctx, _parentState); _localctx.a1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); - setState(512); + setState(508); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; + int line; - setState(518); + setState(514); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: { - setState(514); - match(PLUS); - op = BinaryOperator.PLUS; + setState(510); + ((AdditiveExpressionContext)_localctx).p = match(PLUS); + op = BinaryOperator.PLUS;line = (((AdditiveExpressionContext)_localctx).p!=null?((AdditiveExpressionContext)_localctx).p.getLine():0); } break; case MINUS: { - setState(516); - match(MINUS); - op = BinaryOperator.MINUS; + setState(512); + ((AdditiveExpressionContext)_localctx).m = match(MINUS); + op = BinaryOperator.MINUS;line = (((AdditiveExpressionContext)_localctx).m!=null?((AdditiveExpressionContext)_localctx).m.getLine():0); } break; default: throw new NoViableAltException(this); } - setState(520); + setState(516); ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); - ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op); + ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(527); + setState(523); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } @@ -2962,6 +2955,8 @@ public static class MultiplicativeExpressionContext extends ParserRuleContext { public Expression expRet; public MultiplicativeExpressionContext m1; public PreUnaryExpressionContext p2; + public Token m; + public Token d; public PreUnaryExpressionContext p1; public PreUnaryExpressionContext preUnaryExpression() { return getRuleContext(PreUnaryExpressionContext.class,0); @@ -3006,12 +3001,12 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws enterOuterAlt(_localctx, 1); { { - setState(529); + setState(525); ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; } _ctx.stop = _input.LT(-1); - setState(545); + setState(541); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,37,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3023,38 +3018,39 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); _localctx.m1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); - setState(532); + setState(528); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; + int line; - setState(538); + setState(534); _errHandler.sync(this); switch (_input.LA(1)) { case MULT: { - setState(534); - match(MULT); - op = BinaryOperator.MULT; + setState(530); + ((MultiplicativeExpressionContext)_localctx).m = match(MULT); + op = BinaryOperator.MULT;line = (((MultiplicativeExpressionContext)_localctx).m!=null?((MultiplicativeExpressionContext)_localctx).m.getLine():0); } break; case DIVIDE: { - setState(536); - match(DIVIDE); - op = BinaryOperator.DIVIDE; + setState(532); + ((MultiplicativeExpressionContext)_localctx).d = match(DIVIDE); + op = BinaryOperator.DIVIDE;line = (((MultiplicativeExpressionContext)_localctx).d!=null?((MultiplicativeExpressionContext)_localctx).d.getLine():0); } break; default: throw new NoViableAltException(this); } - setState(540); + setState(536); ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); - ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op); + ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(547); + setState(543); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,37,_ctx); } @@ -3074,6 +3070,10 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws @SuppressWarnings("CheckReturnValue") public static class PreUnaryExpressionContext extends ParserRuleContext { public Expression expRet; + public Token n; + public Token m; + public Token i; + public Token d; public AccessExpressionContext a1; public AccessExpressionContext a2; public AccessExpressionContext accessExpression() { @@ -3106,7 +3106,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); enterRule(_localctx, 58, RULE_preUnaryExpression); try { - setState(565); + setState(561); _errHandler.sync(this); switch (_input.LA(1)) { case MINUS: @@ -3117,44 +3117,45 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx { UnaryOperator op; + int line; - setState(557); + setState(553); _errHandler.sync(this); switch (_input.LA(1)) { case NOT: { - setState(549); - match(NOT); - op = UnaryOperator.NOT; + setState(545); + ((PreUnaryExpressionContext)_localctx).n = match(NOT); + op = UnaryOperator.NOT;line = (((PreUnaryExpressionContext)_localctx).n!=null?((PreUnaryExpressionContext)_localctx).n.getLine():0); } break; case MINUS: { - setState(551); - match(MINUS); - op = UnaryOperator.MINUS; + setState(547); + ((PreUnaryExpressionContext)_localctx).m = match(MINUS); + op = UnaryOperator.MINUS;line = (((PreUnaryExpressionContext)_localctx).m!=null?((PreUnaryExpressionContext)_localctx).m.getLine():0); } break; case INCREMENT: { - setState(553); - match(INCREMENT); - op = UnaryOperator.INC; + setState(549); + ((PreUnaryExpressionContext)_localctx).i = match(INCREMENT); + op = UnaryOperator.INC;line = (((PreUnaryExpressionContext)_localctx).i!=null?((PreUnaryExpressionContext)_localctx).i.getLine():0); } break; case DECREMENT: { - setState(555); - match(DECREMENT); - op = UnaryOperator.DEC; + setState(551); + ((PreUnaryExpressionContext)_localctx).d = match(DECREMENT); + op = UnaryOperator.DEC;line = (((PreUnaryExpressionContext)_localctx).d!=null?((PreUnaryExpressionContext)_localctx).d.getLine():0); } break; default: throw new NoViableAltException(this); } - setState(559); + setState(555); ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); - ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op); + ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } break; case LEN: @@ -3172,7 +3173,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(562); + setState(558); ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; } @@ -3253,40 +3254,40 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); - setState(568); + setState(564); ((AccessExpressionContext)_localctx).o = otherExpression(); - setState(576); + setState(572); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(569); + setState(565); match(LPAR); - setState(570); + setState(566); ((AccessExpressionContext)_localctx).f = functionArguments(); isAccessExpression = true; args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); - setState(572); + setState(568); match(RPAR); } } } - setState(578); + setState(574); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,40,_ctx); } - setState(584); + setState(580); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(579); + setState(575); ((AccessExpressionContext)_localctx).a = accessList(); isMultiDimentional = true; @@ -3295,7 +3296,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept } } } - setState(586); + setState(582); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,41,_ctx); } @@ -3310,6 +3311,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept accessExp.setDimentionalAccess(dimentions); } ((AccessExpressionContext)_localctx).expRet = accessExp; + _localctx.expRet.setLine(((AccessExpressionContext)_localctx).o.expRet.getLine()); } } @@ -3388,13 +3390,13 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio enterRule(_localctx, 62, RULE_otherExpression); int _la; try { - setState(619); + setState(615); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(589); + setState(585); ((OtherExpressionContext)_localctx).v = values(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; } @@ -3402,7 +3404,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 2: enterOuterAlt(_localctx, 2); { - setState(592); + setState(588); ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); @@ -3413,7 +3415,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 3: enterOuterAlt(_localctx, 3); { - setState(594); + setState(590); ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; } @@ -3421,7 +3423,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 4: enterOuterAlt(_localctx, 4); { - setState(597); + setState(593); ((OtherExpressionContext)_localctx).chop = chopStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; } @@ -3429,7 +3431,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 5: enterOuterAlt(_localctx, 5); { - setState(600); + setState(596); ((OtherExpressionContext)_localctx).chomp = chompStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chomp.chompRet; } @@ -3437,7 +3439,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 6: enterOuterAlt(_localctx, 6); { - setState(603); + setState(599); ((OtherExpressionContext)_localctx).match = matchPatternStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; } @@ -3445,7 +3447,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 7: enterOuterAlt(_localctx, 7); { - setState(606); + setState(602); ((OtherExpressionContext)_localctx).f = filterStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; } @@ -3453,7 +3455,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 8: enterOuterAlt(_localctx, 8); { - setState(609); + setState(605); ((OtherExpressionContext)_localctx).len_ = lenStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len_.lenRet; } @@ -3461,20 +3463,20 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 9: enterOuterAlt(_localctx, 9); { - setState(612); + setState(608); match(LPAR); - setState(616); + setState(612); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(613); + setState(609); ((OtherExpressionContext)_localctx).e = expression(0); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; } } - setState(618); + setState(614); match(RPAR); } break; @@ -3535,17 +3537,17 @@ public final LambdaFunctionContext lambdaFunction() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(621); + setState(617); ((LambdaFunctionContext)_localctx).a = match(ARROW); - setState(622); + setState(618); ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); - setState(623); + setState(619); match(LBRACE); - setState(624); + setState(620); ((LambdaFunctionContext)_localctx).b = body(); - setState(625); + setState(621); match(RBRACE); - setState(626); + setState(622); ((LambdaFunctionContext)_localctx).fa = functionArguments(); ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet, ((LambdaFunctionContext)_localctx).fa.funcArgsRet); @@ -3608,14 +3610,14 @@ public final ValuesContext values() throws RecognitionException { ValuesContext _localctx = new ValuesContext(_ctx, getState()); enterRule(_localctx, 66, RULE_values); try { - setState(644); + setState(640); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: case FALSE: enterOuterAlt(_localctx, 1); { - setState(629); + setState(625); ((ValuesContext)_localctx).b = boolValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; } @@ -3623,7 +3625,7 @@ public final ValuesContext values() throws RecognitionException { case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(632); + setState(628); ((ValuesContext)_localctx).s = match(STRING_VALUE); ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); } @@ -3631,7 +3633,7 @@ public final ValuesContext values() throws RecognitionException { case INT_VALUE: enterOuterAlt(_localctx, 3); { - setState(634); + setState(630); ((ValuesContext)_localctx).i = match(INT_VALUE); ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); } @@ -3639,7 +3641,7 @@ public final ValuesContext values() throws RecognitionException { case FLOAT_VALUE: enterOuterAlt(_localctx, 4); { - setState(636); + setState(632); ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getLine():0)); } @@ -3647,7 +3649,7 @@ public final ValuesContext values() throws RecognitionException { case LBRACK: enterOuterAlt(_localctx, 5); { - setState(638); + setState(634); ((ValuesContext)_localctx).l = listValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; } @@ -3655,7 +3657,7 @@ public final ValuesContext values() throws RecognitionException { case METHOD: enterOuterAlt(_localctx, 6); { - setState(641); + setState(637); ((ValuesContext)_localctx).f = functionPointer(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; } @@ -3710,11 +3712,11 @@ public final ListValueContext listValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(646); + setState(642); ((ListValueContext)_localctx).l = match(LBRACK); - setState(647); + setState(643); ((ListValueContext)_localctx).f = functionArguments(); - setState(648); + setState(644); match(RBRACK); ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); @@ -3763,13 +3765,13 @@ public final BoolValueContext boolValue() throws RecognitionException { BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); enterRule(_localctx, 70, RULE_boolValue); try { - setState(655); + setState(651); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: enterOuterAlt(_localctx, 1); { - setState(651); + setState(647); ((BoolValueContext)_localctx).t = match(TRUE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); } @@ -3777,7 +3779,7 @@ public final BoolValueContext boolValue() throws RecognitionException { case FALSE: enterOuterAlt(_localctx, 2); { - setState(653); + setState(649); ((BoolValueContext)_localctx).f = match(FALSE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); } @@ -3832,15 +3834,15 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(657); + setState(653); ((FunctionPointerContext)_localctx).m = match(METHOD); - setState(658); + setState(654); match(LPAR); - setState(659); + setState(655); match(COLON); - setState(660); + setState(656); ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); - setState(661); + setState(657); match(RPAR); Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); @@ -3865,8 +3867,6 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { case 24: return expression_sempred((ExpressionContext)_localctx, predIndex); - case 25: - return eqaulityExpression_sempred((EqaulityExpressionContext)_localctx, predIndex); case 26: return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); case 27: @@ -3883,37 +3883,30 @@ private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { } return true; } - private boolean eqaulityExpression_sempred(EqaulityExpressionContext _localctx, int predIndex) { - switch (predIndex) { - case 1: - return precpred(_ctx, 2); - } - return true; - } private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { switch (predIndex) { - case 2: + case 1: return precpred(_ctx, 2); } return true; } private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { switch (predIndex) { - case 3: + case 2: return precpred(_ctx, 2); } return true; } private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { switch (predIndex) { - case 4: + case 3: return precpred(_ctx, 2); } return true; } public static final String _serializedATN = - "\u0004\u0001A\u0299\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001A\u0295\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -3985,377 +3978,374 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext "\u01c1\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01cc\b\u0018"+ "\n\u0018\f\u0018\u01cf\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0003\u0019\u01db\b\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0005"+ - "\u0019\u01e0\b\u0019\n\u0019\f\u0019\u01e3\t\u0019\u0001\u001a\u0001\u001a"+ - "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0003\u001a\u01f3\b\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0005\u001a"+ - "\u01f8\b\u001a\n\u001a\f\u001a\u01fb\t\u001a\u0001\u001b\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0003\u001b\u0207\b\u001b\u0001\u001b\u0001\u001b\u0001"+ - "\u001b\u0005\u001b\u020c\b\u001b\n\u001b\f\u001b\u020f\t\u001b\u0001\u001c"+ + "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01d7\b\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01df"+ + "\b\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u01ef\b\u001a\u0001\u001a\u0001"+ + "\u001a\u0001\u001a\u0005\u001a\u01f4\b\u001a\n\u001a\f\u001a\u01f7\t\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u0203\b\u001b"+ + "\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0208\b\u001b\n\u001b"+ + "\f\u001b\u020b\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u021b\b\u001c\u0001\u001c"+ - "\u0001\u001c\u0001\u001c\u0005\u001c\u0220\b\u001c\n\u001c\f\u001c\u0223"+ - "\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u022e\b\u001d\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0003"+ - "\u001d\u0236\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u023f\b\u001e\n\u001e\f\u001e"+ - "\u0242\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0247\b"+ - "\u001e\n\u001e\f\u001e\u024a\t\u001e\u0001\u001e\u0001\u001e\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0003\u001f\u0269\b\u001f\u0001\u001f\u0003\u001f"+ - "\u026c\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0285\b!\u0001\"\u0001\"\u0001"+ - "\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0003#\u0290\b#\u0001$"+ - "\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0000\u000502468%\u0000"+ - "\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c"+ - "\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001\u0000\u001e\u001f\u02bb"+ - "\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000\u0000\u0000\u0004d"+ - "\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000\u0000\b\u00a1\u0001"+ - "\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000\f\u00b9\u0001\u0000"+ - "\u0000\u0000\u000e\u00c2\u0001\u0000\u0000\u0000\u0010\u00de\u0001\u0000"+ - "\u0000\u0000\u0012\u00f6\u0001\u0000\u0000\u0000\u0014\u00fd\u0001\u0000"+ - "\u0000\u0000\u0016\u0103\u0001\u0000\u0000\u0000\u0018\u010c\u0001\u0000"+ - "\u0000\u0000\u001a\u0112\u0001\u0000\u0000\u0000\u001c\u0130\u0001\u0000"+ - "\u0000\u0000\u001e\u0151\u0001\u0000\u0000\u0000 \u0153\u0001\u0000\u0000"+ - "\u0000\"\u0169\u0001\u0000\u0000\u0000$\u0171\u0001\u0000\u0000\u0000"+ - "&\u0177\u0001\u0000\u0000\u0000(\u017d\u0001\u0000\u0000\u0000*\u0196"+ - "\u0001\u0000\u0000\u0000,\u01b2\u0001\u0000\u0000\u0000.\u01b4\u0001\u0000"+ - "\u0000\u00000\u01c2\u0001\u0000\u0000\u00002\u01d0\u0001\u0000\u0000\u0000"+ - "4\u01e4\u0001\u0000\u0000\u00006\u01fc\u0001\u0000\u0000\u00008\u0210"+ - "\u0001\u0000\u0000\u0000:\u0235\u0001\u0000\u0000\u0000<\u0237\u0001\u0000"+ - "\u0000\u0000>\u026b\u0001\u0000\u0000\u0000@\u026d\u0001\u0000\u0000\u0000"+ - "B\u0284\u0001\u0000\u0000\u0000D\u0286\u0001\u0000\u0000\u0000F\u028f"+ - "\u0001\u0000\u0000\u0000H\u0291\u0001\u0000\u0000\u0000JS\u0006\u0000"+ - "\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000\uffff\uffff"+ - "\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000OP\u0006\u0000"+ - "\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000\u0000\u0000"+ - "QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001\u0000\u0000"+ - "\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000US\u0001\u0000"+ - "\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff\u0000X\u0001"+ - "\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000Z[\u0005\u0001"+ - "\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>\u0000\u0000]^"+ - "\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000_`\u0006\u0001"+ - "\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff\uffff\u0000"+ - "bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000de\u0006\u0002"+ - "\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000\u0000gm\u0006"+ - "\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000\u0000jl\u0006"+ - "\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000"+ - "\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0085\u0001"+ - "\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000\u0000qr\u0005"+ - "3\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff\u0000tu\u0005"+ - "0\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff\uffff\u0000"+ - "wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff\uffff\u0000"+ - "z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff\uffff\u0000"+ - "}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000\u007f\u0082"+ - "\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080\u0081\u0001"+ - "\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082\u0080\u0001"+ - "\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086\u0001\u0000"+ - "\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000"+ - "\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000\u0000\u0000"+ - "\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000"+ - "\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000\u0000\u008b"+ - "\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff\u0000\u008d"+ - "\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff\u0000\u008f"+ - "\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091\u0092\u0006"+ - "\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093\u0094\u0005"+ - "#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096\u0006\u0003"+ - "\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098\u00030\u0018"+ - "\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b\u0001\u0000"+ - "\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e\u0001\u0000"+ - "\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+ - "\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000"+ - "\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001\u0000\u0000"+ - "\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3\u0005\u0001"+ - "\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5\u0006\u0004"+ - "\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7\u00052\u0000"+ - "\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004\uffff\uffff"+ - "\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000\u0000\u0000"+ - "\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u00030\u0018\u0000"+ - "\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u00057\u0000\u0000"+ - "\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff\uffff\u0000"+ - "\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000\u0000\u0000"+ - "\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000"+ - "\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000"+ - "\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000\u0000\u0000"+ - "\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000\u0000\u0000"+ - "\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005\u0007\u0000"+ - "\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006\uffff\uffff"+ - "\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001\u0000\u0000"+ - "\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000"+ - "\u0000\u00c0\u00c1\u0005;\u0000\u0000\u00c1\r\u0001\u0000\u0000\u0000"+ - "\u00c2\u00c3\u0006\u0007\uffff\uffff\u0000\u00c3\u00c4\u0005\b\u0000\u0000"+ - "\u00c4\u00c5\u0006\u0007\uffff\uffff\u0000\u00c5\u00c6\u0003\u0010\b\u0000"+ - "\u00c6\u00c7\u0006\u0007\uffff\uffff\u0000\u00c7\u00c8\u0003.\u0017\u0000"+ - "\u00c8\u00c9\u0006\u0007\uffff\uffff\u0000\u00c9\u00d2\u0006\u0007\uffff"+ - "\uffff\u0000\u00ca\u00cb\u0005\n\u0000\u0000\u00cb\u00cc\u0003\u0010\b"+ - "\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00ce\u0003.\u0017"+ - "\u0000\u00ce\u00cf\u0006\u0007\uffff\uffff\u0000\u00cf\u00d1\u0001\u0000"+ - "\u0000\u0000\u00d0\u00ca\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001\u0000"+ - "\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001\u0000"+ - "\u0000\u0000\u00d3\u00d9\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001\u0000"+ - "\u0000\u0000\u00d5\u00d6\u0005\t\u0000\u0000\u00d6\u00d7\u0003.\u0017"+ - "\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00da\u0001\u0000"+ - "\u0000\u0000\u00d9\u00d5\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000"+ - "\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0006\u0007"+ - "\uffff\uffff\u0000\u00dc\u00dd\u0005\u0002\u0000\u0000\u00dd\u000f\u0001"+ - "\u0000\u0000\u0000\u00de\u00f3\u0006\b\uffff\uffff\u0000\u00df\u00e0\u0005"+ - "1\u0000\u0000\u00e0\u00e1\u00030\u0018\u0000\u00e1\u00e2\u0006\b\uffff"+ - "\uffff\u0000\u00e2\u00ee\u00052\u0000\u0000\u00e3\u00e5\u0007\u0000\u0000"+ - "\u0000\u00e4\u00e6\u00051\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000\u0000"+ - "\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000\u0000"+ - "\u00e7\u00e8\u0003\u0010\b\u0000\u00e8\u00ea\u0006\b\uffff\uffff\u0000"+ - "\u00e9\u00eb\u00052\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000\u00ea"+ - "\u00eb\u0001\u0000\u0000\u0000\u00eb\u00ed\u0001\u0000\u0000\u0000\u00ec"+ - "\u00e3\u0001\u0000\u0000\u0000\u00ed\u00f0\u0001\u0000\u0000\u0000\u00ee"+ - "\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000\u00ef"+ - "\u00f2\u0001\u0000\u0000\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f1"+ - "\u00df\u0001\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000\u00f3"+ - "\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000\u00f4"+ - "\u0011\u0001\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000\u00f6"+ - "\u00f7\u0005\u0004\u0000\u0000\u00f7\u00f8\u00051\u0000\u0000\u00f8\u00f9"+ - "\u00030\u0018\u0000\u00f9\u00fa\u0006\t\uffff\uffff\u0000\u00fa\u00fb"+ - "\u00052\u0000\u0000\u00fb\u00fc\u0005;\u0000\u0000\u00fc\u0013\u0001\u0000"+ - "\u0000\u0000\u00fd\u00fe\u0005\u0006\u0000\u0000\u00fe\u00ff\u00051\u0000"+ - "\u0000\u00ff\u0100\u00030\u0018\u0000\u0100\u0101\u0006\n\uffff\uffff"+ - "\u0000\u0101\u0102\u00052\u0000\u0000\u0102\u0015\u0001\u0000\u0000\u0000"+ - "\u0103\u0104\u0005\u0005\u0000\u0000\u0104\u0105\u00051\u0000\u0000\u0105"+ - "\u0106\u00030\u0018\u0000\u0106\u0107\u00057\u0000\u0000\u0107\u0108\u0003"+ - "0\u0018\u0000\u0108\u0109\u00052\u0000\u0000\u0109\u010a\u0005;\u0000"+ - "\u0000\u010a\u010b\u0006\u000b\uffff\uffff\u0000\u010b\u0017\u0001\u0000"+ - "\u0000\u0000\u010c\u010d\u0005\u000e\u0000\u0000\u010d\u010e\u0005\u0011"+ - "\u0000\u0000\u010e\u010f\u0003\u001a\r\u0000\u010f\u0110\u0006\f\uffff"+ - "\uffff\u0000\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0019\u0001\u0000"+ - "\u0000\u0000\u0112\u0128\u0006\r\uffff\uffff\u0000\u0113\u0114\u0003,"+ - "\u0016\u0000\u0114\u0115\u0006\r\uffff\uffff\u0000\u0115\u0127\u0001\u0000"+ - "\u0000\u0000\u0116\u011b\u0005(\u0000\u0000\u0117\u0118\u0005\b\u0000"+ - "\u0000\u0118\u0119\u0003\u0010\b\u0000\u0119\u011a\u0006\r\uffff\uffff"+ - "\u0000\u011a\u011c\u0001\u0000\u0000\u0000\u011b\u0117\u0001\u0000\u0000"+ - "\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000\u0000"+ - "\u0000\u011d\u0127\u0005;\u0000\u0000\u011e\u0123\u0005)\u0000\u0000\u011f"+ - "\u0120\u0005\b\u0000\u0000\u0120\u0121\u0003\u0010\b\u0000\u0121\u0122"+ - "\u0006\r\uffff\uffff\u0000\u0122\u0124\u0001\u0000\u0000\u0000\u0123\u011f"+ - "\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124\u0125"+ - "\u0001\u0000\u0000\u0000\u0125\u0127\u0005;\u0000\u0000\u0126\u0113\u0001"+ - "\u0000\u0000\u0000\u0126\u0116\u0001\u0000\u0000\u0000\u0126\u011e\u0001"+ - "\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128\u0126\u0001"+ - "\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012e\u0001"+ - "\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b\u012c\u0003"+ - "\f\u0006\u0000\u012c\u012d\u0006\r\uffff\uffff\u0000\u012d\u012f\u0001"+ - "\u0000\u0000\u0000\u012e\u012b\u0001\u0000\u0000\u0000\u012e\u012f\u0001"+ - "\u0000\u0000\u0000\u012f\u001b\u0001\u0000\u0000\u0000\u0130\u0131\u0005"+ - "\u000f\u0000\u0000\u0131\u0132\u0005>\u0000\u0000\u0132\u0133\u0005\u0010"+ - "\u0000\u0000\u0133\u0134\u0003\u001e\u000f\u0000\u0134\u0135\u0003\u001a"+ - "\r\u0000\u0135\u0136\u0005\u0002\u0000\u0000\u0136\u0137\u0006\u000e\uffff"+ - "\uffff\u0000\u0137\u001d\u0001\u0000\u0000\u0000\u0138\u0139\u0006\u000f"+ - "\uffff\uffff\u0000\u0139\u013a\u00051\u0000\u0000\u013a\u013b\u00030\u0018"+ - "\u0000\u013b\u013c\u0006\u000f\uffff\uffff\u0000\u013c\u013d\u00059\u0000"+ - "\u0000\u013d\u013e\u00030\u0018\u0000\u013e\u013f\u0006\u000f\uffff\uffff"+ - "\u0000\u013f\u0140\u00052\u0000\u0000\u0140\u0152\u0001\u0000\u0000\u0000"+ - "\u0141\u0142\u00053\u0000\u0000\u0142\u0143\u00030\u0018\u0000\u0143\u014a"+ - "\u0006\u000f\uffff\uffff\u0000\u0144\u0145\u00057\u0000\u0000\u0145\u0146"+ - "\u00030\u0018\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0149"+ - "\u0001\u0000\u0000\u0000\u0148\u0144\u0001\u0000\u0000\u0000\u0149\u014c"+ - "\u0001\u0000\u0000\u0000\u014a\u0148\u0001\u0000\u0000\u0000\u014a\u014b"+ - "\u0001\u0000\u0000\u0000\u014b\u014d\u0001\u0000\u0000\u0000\u014c\u014a"+ - "\u0001\u0000\u0000\u0000\u014d\u014e\u00054\u0000\u0000\u014e\u0152\u0001"+ - "\u0000\u0000\u0000\u014f\u0150\u0005>\u0000\u0000\u0150\u0152\u0006\u000f"+ - "\uffff\uffff\u0000\u0151\u0138\u0001\u0000\u0000\u0000\u0151\u0141\u0001"+ - "\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u001f\u0001"+ - "\u0000\u0000\u0000\u0153\u0154\u0006\u0010\uffff\uffff\u0000\u0154\u0155"+ - "\u00053\u0000\u0000\u0155\u0156\u00030\u0018\u0000\u0156\u0157\u0005$"+ - "\u0000\u0000\u0157\u0158\u0005>\u0000\u0000\u0158\u0159\u0005*\u0000\u0000"+ - "\u0159\u015a\u0003\u001e\u000f\u0000\u015a\u015b\u00057\u0000\u0000\u015b"+ - "\u015c\u00030\u0018\u0000\u015c\u0163\u0006\u0010\uffff\uffff\u0000\u015d"+ - "\u015e\u00057\u0000\u0000\u015e\u015f\u00030\u0018\u0000\u015f\u0160\u0006"+ - "\u0010\uffff\uffff\u0000\u0160\u0162\u0001\u0000\u0000\u0000\u0161\u015d"+ - "\u0001\u0000\u0000\u0000\u0162\u0165\u0001\u0000\u0000\u0000\u0163\u0161"+ - "\u0001\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164\u0166"+ - "\u0001\u0000\u0000\u0000\u0165\u0163\u0001\u0000\u0000\u0000\u0166\u0167"+ - "\u0006\u0010\uffff\uffff\u0000\u0167\u0168\u00054\u0000\u0000\u0168!\u0001"+ - "\u0000\u0000\u0000\u0169\u016a\u0005>\u0000\u0000\u016a\u016b\u00058\u0000"+ - "\u0000\u016b\u016c\u0005\r\u0000\u0000\u016c\u016d\u00051\u0000\u0000"+ - "\u016d\u016e\u00030\u0018\u0000\u016e\u016f\u00052\u0000\u0000\u016f\u0170"+ - "\u0006\u0011\uffff\uffff\u0000\u0170#\u0001\u0000\u0000\u0000\u0171\u0172"+ - "\u0005\u0012\u0000\u0000\u0172\u0173\u00051\u0000\u0000\u0173\u0174\u0003"+ - "0\u0018\u0000\u0174\u0175\u00052\u0000\u0000\u0175\u0176\u0006\u0012\uffff"+ - "\uffff\u0000\u0176%\u0001\u0000\u0000\u0000\u0177\u0178\u0005\u0013\u0000"+ - "\u0000\u0178\u0179\u00051\u0000\u0000\u0179\u017a\u00030\u0018\u0000\u017a"+ - "\u017b\u00052\u0000\u0000\u017b\u017c\u0006\u0013\uffff\uffff\u0000\u017c"+ - "\'\u0001\u0000\u0000\u0000\u017d\u017e\u0006\u0014\uffff\uffff\u0000\u017e"+ - "\u0182\u0005>\u0000\u0000\u017f\u0180\u0003*\u0015\u0000\u0180\u0181\u0006"+ - "\u0014\uffff\uffff\u0000\u0181\u0183\u0001\u0000\u0000\u0000\u0182\u017f"+ - "\u0001\u0000\u0000\u0000\u0182\u0183\u0001\u0000\u0000\u0000\u0183\u0190"+ - "\u0001\u0000\u0000\u0000\u0184\u0185\u00050\u0000\u0000\u0185\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u0186\u0187\u0005+\u0000\u0000\u0187\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u0188\u0189\u0005,\u0000\u0000\u0189\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u018a\u018b\u0005.\u0000\u0000\u018b\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u018c\u018d\u0005-\u0000\u0000\u018d\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u018e\u018f\u0005/\u0000\u0000\u018f\u0191\u0006"+ - "\u0014\uffff\uffff\u0000\u0190\u0184\u0001\u0000\u0000\u0000\u0190\u0186"+ - "\u0001\u0000\u0000\u0000\u0190\u0188\u0001\u0000\u0000\u0000\u0190\u018a"+ - "\u0001\u0000\u0000\u0000\u0190\u018c\u0001\u0000\u0000\u0000\u0190\u018e"+ - "\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192\u0193"+ - "\u00030\u0018\u0000\u0193\u0194\u0005;\u0000\u0000\u0194\u0195\u0006\u0014"+ - "\uffff\uffff\u0000\u0195)\u0001\u0000\u0000\u0000\u0196\u0197\u00053\u0000"+ - "\u0000\u0197\u0198\u00030\u0018\u0000\u0198\u0199\u0006\u0015\uffff\uffff"+ - "\u0000\u0199\u019a\u00054\u0000\u0000\u019a+\u0001\u0000\u0000\u0000\u019b"+ - "\u019c\u0003\u000e\u0007\u0000\u019c\u019d\u0006\u0016\uffff\uffff\u0000"+ - "\u019d\u01b3\u0001\u0000\u0000\u0000\u019e\u019f\u0003\u0018\f\u0000\u019f"+ - "\u01a0\u0006\u0016\uffff\uffff\u0000\u01a0\u01b3\u0001\u0000\u0000\u0000"+ - "\u01a1\u01a2\u0003\u001c\u000e\u0000\u01a2\u01a3\u0006\u0016\uffff\uffff"+ - "\u0000\u01a3\u01b3\u0001\u0000\u0000\u0000\u01a4\u01a5\u0003\u0012\t\u0000"+ - "\u01a5\u01a6\u0006\u0016\uffff\uffff\u0000\u01a6\u01b3\u0001\u0000\u0000"+ - "\u0000\u01a7\u01a8\u0003\u0016\u000b\u0000\u01a8\u01a9\u0006\u0016\uffff"+ - "\uffff\u0000\u01a9\u01b3\u0001\u0000\u0000\u0000\u01aa\u01ab\u00030\u0018"+ - "\u0000\u01ab\u01ac\u0006\u0016\uffff\uffff\u0000\u01ac\u01ad\u0006\u0016"+ - "\uffff\uffff\u0000\u01ad\u01ae\u0005;\u0000\u0000\u01ae\u01b3\u0001\u0000"+ - "\u0000\u0000\u01af\u01b0\u0003(\u0014\u0000\u01b0\u01b1\u0006\u0016\uffff"+ - "\uffff\u0000\u01b1\u01b3\u0001\u0000\u0000\u0000\u01b2\u019b\u0001\u0000"+ - "\u0000\u0000\u01b2\u019e\u0001\u0000\u0000\u0000\u01b2\u01a1\u0001\u0000"+ - "\u0000\u0000\u01b2\u01a4\u0001\u0000\u0000\u0000\u01b2\u01a7\u0001\u0000"+ - "\u0000\u0000\u01b2\u01aa\u0001\u0000\u0000\u0000\u01b2\u01af\u0001\u0000"+ - "\u0000\u0000\u01b3-\u0001\u0000\u0000\u0000\u01b4\u01ba\u0006\u0017\uffff"+ - "\uffff\u0000\u01b5\u01b6\u0003,\u0016\u0000\u01b6\u01b7\u0006\u0017\uffff"+ - "\uffff\u0000\u01b7\u01b9\u0001\u0000\u0000\u0000\u01b8\u01b5\u0001\u0000"+ - "\u0000\u0000\u01b9\u01bc\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001\u0000"+ - "\u0000\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb\u01c0\u0001\u0000"+ - "\u0000\u0000\u01bc\u01ba\u0001\u0000\u0000\u0000\u01bd\u01be\u0003\f\u0006"+ - "\u0000\u01be\u01bf\u0006\u0017\uffff\uffff\u0000\u01bf\u01c1\u0001\u0000"+ - "\u0000\u0000\u01c0\u01bd\u0001\u0000\u0000\u0000\u01c0\u01c1\u0001\u0000"+ - "\u0000\u0000\u01c1/\u0001\u0000\u0000\u0000\u01c2\u01c3\u0006\u0018\uffff"+ - "\uffff\u0000\u01c3\u01c4\u00032\u0019\u0000\u01c4\u01c5\u0006\u0018\uffff"+ - "\uffff\u0000\u01c5\u01cd\u0001\u0000\u0000\u0000\u01c6\u01c7\n\u0002\u0000"+ - "\u0000\u01c7\u01c8\u0005%\u0000\u0000\u01c8\u01c9\u00032\u0019\u0000\u01c9"+ - "\u01ca\u0006\u0018\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000\u0000\u0000"+ - "\u01cb\u01c6\u0001\u0000\u0000\u0000\u01cc\u01cf\u0001\u0000\u0000\u0000"+ - "\u01cd\u01cb\u0001\u0000\u0000\u0000\u01cd\u01ce\u0001\u0000\u0000\u0000"+ - "\u01ce1\u0001\u0000\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000\u01d0"+ - "\u01d1\u0006\u0019\uffff\uffff\u0000\u01d1\u01d2\u00034\u001a\u0000\u01d2"+ - "\u01d3\u0006\u0019\uffff\uffff\u0000\u01d3\u01e1\u0001\u0000\u0000\u0000"+ - "\u01d4\u01d5\n\u0002\u0000\u0000\u01d5\u01da\u0006\u0019\uffff\uffff\u0000"+ - "\u01d6\u01d7\u0005\u0018\u0000\u0000\u01d7\u01db\u0006\u0019\uffff\uffff"+ - "\u0000\u01d8\u01d9\u0005\u0019\u0000\u0000\u01d9\u01db\u0006\u0019\uffff"+ - "\uffff\u0000\u01da\u01d6\u0001\u0000\u0000\u0000\u01da\u01d8\u0001\u0000"+ - "\u0000\u0000\u01db\u01dc\u0001\u0000\u0000\u0000\u01dc\u01dd\u00034\u001a"+ - "\u0000\u01dd\u01de\u0006\u0019\uffff\uffff\u0000\u01de\u01e0\u0001\u0000"+ - "\u0000\u0000\u01df\u01d4\u0001\u0000\u0000\u0000\u01e0\u01e3\u0001\u0000"+ - "\u0000\u0000\u01e1\u01df\u0001\u0000\u0000\u0000\u01e1\u01e2\u0001\u0000"+ - "\u0000\u0000\u01e23\u0001\u0000\u0000\u0000\u01e3\u01e1\u0001\u0000\u0000"+ - "\u0000\u01e4\u01e5\u0006\u001a\uffff\uffff\u0000\u01e5\u01e6\u00036\u001b"+ - "\u0000\u01e6\u01e7\u0006\u001a\uffff\uffff\u0000\u01e7\u01f9\u0001\u0000"+ - "\u0000\u0000\u01e8\u01e9\n\u0002\u0000\u0000\u01e9\u01f2\u0006\u001a\uffff"+ - "\uffff\u0000\u01ea\u01eb\u0005\u001c\u0000\u0000\u01eb\u01f3\u0006\u001a"+ - "\uffff\uffff\u0000\u01ec\u01ed\u0005\u001d\u0000\u0000\u01ed\u01f3\u0006"+ - "\u001a\uffff\uffff\u0000\u01ee\u01ef\u0005\u001a\u0000\u0000\u01ef\u01f3"+ - "\u0006\u001a\uffff\uffff\u0000\u01f0\u01f1\u0005\u001b\u0000\u0000\u01f1"+ - "\u01f3\u0006\u001a\uffff\uffff\u0000\u01f2\u01ea\u0001\u0000\u0000\u0000"+ - "\u01f2\u01ec\u0001\u0000\u0000\u0000\u01f2\u01ee\u0001\u0000\u0000\u0000"+ - "\u01f2\u01f0\u0001\u0000\u0000\u0000\u01f3\u01f4\u0001\u0000\u0000\u0000"+ - "\u01f4\u01f5\u00036\u001b\u0000\u01f5\u01f6\u0006\u001a\uffff\uffff\u0000"+ - "\u01f6\u01f8\u0001\u0000\u0000\u0000\u01f7\u01e8\u0001\u0000\u0000\u0000"+ - "\u01f8\u01fb\u0001\u0000\u0000\u0000\u01f9\u01f7\u0001\u0000\u0000\u0000"+ - "\u01f9\u01fa\u0001\u0000\u0000\u0000\u01fa5\u0001\u0000\u0000\u0000\u01fb"+ - "\u01f9\u0001\u0000\u0000\u0000\u01fc\u01fd\u0006\u001b\uffff\uffff\u0000"+ - "\u01fd\u01fe\u00038\u001c\u0000\u01fe\u01ff\u0006\u001b\uffff\uffff\u0000"+ - "\u01ff\u020d\u0001\u0000\u0000\u0000\u0200\u0201\n\u0002\u0000\u0000\u0201"+ - "\u0206\u0006\u001b\uffff\uffff\u0000\u0202\u0203\u0005\u0014\u0000\u0000"+ - "\u0203\u0207\u0006\u001b\uffff\uffff\u0000\u0204\u0205\u0005\u0015\u0000"+ - "\u0000\u0205\u0207\u0006\u001b\uffff\uffff\u0000\u0206\u0202\u0001\u0000"+ - "\u0000\u0000\u0206\u0204\u0001\u0000\u0000\u0000\u0207\u0208\u0001\u0000"+ - "\u0000\u0000\u0208\u0209\u00038\u001c\u0000\u0209\u020a\u0006\u001b\uffff"+ - "\uffff\u0000\u020a\u020c\u0001\u0000\u0000\u0000\u020b\u0200\u0001\u0000"+ - "\u0000\u0000\u020c\u020f\u0001\u0000\u0000\u0000\u020d\u020b\u0001\u0000"+ - "\u0000\u0000\u020d\u020e\u0001\u0000\u0000\u0000\u020e7\u0001\u0000\u0000"+ - "\u0000\u020f\u020d\u0001\u0000\u0000\u0000\u0210\u0211\u0006\u001c\uffff"+ - "\uffff\u0000\u0211\u0212\u0003:\u001d\u0000\u0212\u0213\u0006\u001c\uffff"+ - "\uffff\u0000\u0213\u0221\u0001\u0000\u0000\u0000\u0214\u0215\n\u0002\u0000"+ - "\u0000\u0215\u021a\u0006\u001c\uffff\uffff\u0000\u0216\u0217\u0005\u0016"+ - "\u0000\u0000\u0217\u021b\u0006\u001c\uffff\uffff\u0000\u0218\u0219\u0005"+ - "\u0017\u0000\u0000\u0219\u021b\u0006\u001c\uffff\uffff\u0000\u021a\u0216"+ - "\u0001\u0000\u0000\u0000\u021a\u0218\u0001\u0000\u0000\u0000\u021b\u021c"+ - "\u0001\u0000\u0000\u0000\u021c\u021d\u0003:\u001d\u0000\u021d\u021e\u0006"+ - "\u001c\uffff\uffff\u0000\u021e\u0220\u0001\u0000\u0000\u0000\u021f\u0214"+ - "\u0001\u0000\u0000\u0000\u0220\u0223\u0001\u0000\u0000\u0000\u0221\u021f"+ - "\u0001\u0000\u0000\u0000\u0221\u0222\u0001\u0000\u0000\u0000\u02229\u0001"+ - "\u0000\u0000\u0000\u0223\u0221\u0001\u0000\u0000\u0000\u0224\u022d\u0006"+ - "\u001d\uffff\uffff\u0000\u0225\u0226\u0005 \u0000\u0000\u0226\u022e\u0006"+ - "\u001d\uffff\uffff\u0000\u0227\u0228\u0005\u0015\u0000\u0000\u0228\u022e"+ - "\u0006\u001d\uffff\uffff\u0000\u0229\u022a\u0005!\u0000\u0000\u022a\u022e"+ - "\u0006\u001d\uffff\uffff\u0000\u022b\u022c\u0005\"\u0000\u0000\u022c\u022e"+ - "\u0006\u001d\uffff\uffff\u0000\u022d\u0225\u0001\u0000\u0000\u0000\u022d"+ - "\u0227\u0001\u0000\u0000\u0000\u022d\u0229\u0001\u0000\u0000\u0000\u022d"+ - "\u022b\u0001\u0000\u0000\u0000\u022e\u022f\u0001\u0000\u0000\u0000\u022f"+ - "\u0230\u0003<\u001e\u0000\u0230\u0231\u0006\u001d\uffff\uffff\u0000\u0231"+ - "\u0236\u0001\u0000\u0000\u0000\u0232\u0233\u0003<\u001e\u0000\u0233\u0234"+ - "\u0006\u001d\uffff\uffff\u0000\u0234\u0236\u0001\u0000\u0000\u0000\u0235"+ - "\u0224\u0001\u0000\u0000\u0000\u0235\u0232\u0001\u0000\u0000\u0000\u0236"+ - ";\u0001\u0000\u0000\u0000\u0237\u0238\u0006\u001e\uffff\uffff\u0000\u0238"+ - "\u0240\u0003>\u001f\u0000\u0239\u023a\u00051\u0000\u0000\u023a\u023b\u0003"+ - "\n\u0005\u0000\u023b\u023c\u0006\u001e\uffff\uffff\u0000\u023c\u023d\u0005"+ - "2\u0000\u0000\u023d\u023f\u0001\u0000\u0000\u0000\u023e\u0239\u0001\u0000"+ - "\u0000\u0000\u023f\u0242\u0001\u0000\u0000\u0000\u0240\u023e\u0001\u0000"+ - "\u0000\u0000\u0240\u0241\u0001\u0000\u0000\u0000\u0241\u0248\u0001\u0000"+ - "\u0000\u0000\u0242\u0240\u0001\u0000\u0000\u0000\u0243\u0244\u0003*\u0015"+ - "\u0000\u0244\u0245\u0006\u001e\uffff\uffff\u0000\u0245\u0247\u0001\u0000"+ - "\u0000\u0000\u0246\u0243\u0001\u0000\u0000\u0000\u0247\u024a\u0001\u0000"+ - "\u0000\u0000\u0248\u0246\u0001\u0000\u0000\u0000\u0248\u0249\u0001\u0000"+ - "\u0000\u0000\u0249\u024b\u0001\u0000\u0000\u0000\u024a\u0248\u0001\u0000"+ - "\u0000\u0000\u024b\u024c\u0006\u001e\uffff\uffff\u0000\u024c=\u0001\u0000"+ - "\u0000\u0000\u024d\u024e\u0003B!\u0000\u024e\u024f\u0006\u001f\uffff\uffff"+ - "\u0000\u024f\u026c\u0001\u0000\u0000\u0000\u0250\u0251\u0005>\u0000\u0000"+ - "\u0251\u026c\u0006\u001f\uffff\uffff\u0000\u0252\u0253\u0003@ \u0000\u0253"+ - "\u0254\u0006\u001f\uffff\uffff\u0000\u0254\u026c\u0001\u0000\u0000\u0000"+ - "\u0255\u0256\u0003$\u0012\u0000\u0256\u0257\u0006\u001f\uffff\uffff\u0000"+ - "\u0257\u026c\u0001\u0000\u0000\u0000\u0258\u0259\u0003&\u0013\u0000\u0259"+ - "\u025a\u0006\u001f\uffff\uffff\u0000\u025a\u026c\u0001\u0000\u0000\u0000"+ - "\u025b\u025c\u0003\"\u0011\u0000\u025c\u025d\u0006\u001f\uffff\uffff\u0000"+ - "\u025d\u026c\u0001\u0000\u0000\u0000\u025e\u025f\u0003 \u0010\u0000\u025f"+ - "\u0260\u0006\u001f\uffff\uffff\u0000\u0260\u026c\u0001\u0000\u0000\u0000"+ - "\u0261\u0262\u0003\u0014\n\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000"+ - "\u0263\u026c\u0001\u0000\u0000\u0000\u0264\u0268\u00051\u0000\u0000\u0265"+ - "\u0266\u00030\u0018\u0000\u0266\u0267\u0006\u001f\uffff\uffff\u0000\u0267"+ - "\u0269\u0001\u0000\u0000\u0000\u0268\u0265\u0001\u0000\u0000\u0000\u0268"+ - "\u0269\u0001\u0000\u0000\u0000\u0269\u026a\u0001\u0000\u0000\u0000\u026a"+ - "\u026c\u00052\u0000\u0000\u026b\u024d\u0001\u0000\u0000\u0000\u026b\u0250"+ - "\u0001\u0000\u0000\u0000\u026b\u0252\u0001\u0000\u0000\u0000\u026b\u0255"+ - "\u0001\u0000\u0000\u0000\u026b\u0258\u0001\u0000\u0000\u0000\u026b\u025b"+ - "\u0001\u0000\u0000\u0000\u026b\u025e\u0001\u0000\u0000\u0000\u026b\u0261"+ - "\u0001\u0000\u0000\u0000\u026b\u0264\u0001\u0000\u0000\u0000\u026c?\u0001"+ - "\u0000\u0000\u0000\u026d\u026e\u0005*\u0000\u0000\u026e\u026f\u0003\u0004"+ - "\u0002\u0000\u026f\u0270\u00055\u0000\u0000\u0270\u0271\u0003.\u0017\u0000"+ - "\u0271\u0272\u00056\u0000\u0000\u0272\u0273\u0003\n\u0005\u0000\u0273"+ - "\u0274\u0006 \uffff\uffff\u0000\u0274A\u0001\u0000\u0000\u0000\u0275\u0276"+ - "\u0003F#\u0000\u0276\u0277\u0006!\uffff\uffff\u0000\u0277\u0285\u0001"+ - "\u0000\u0000\u0000\u0278\u0279\u0005?\u0000\u0000\u0279\u0285\u0006!\uffff"+ - "\uffff\u0000\u027a\u027b\u0005<\u0000\u0000\u027b\u0285\u0006!\uffff\uffff"+ - "\u0000\u027c\u027d\u0005=\u0000\u0000\u027d\u0285\u0006!\uffff\uffff\u0000"+ - "\u027e\u027f\u0003D\"\u0000\u027f\u0280\u0006!\uffff\uffff\u0000\u0280"+ - "\u0285\u0001\u0000\u0000\u0000\u0281\u0282\u0003H$\u0000\u0282\u0283\u0006"+ - "!\uffff\uffff\u0000\u0283\u0285\u0001\u0000\u0000\u0000\u0284\u0275\u0001"+ - "\u0000\u0000\u0000\u0284\u0278\u0001\u0000\u0000\u0000\u0284\u027a\u0001"+ - "\u0000\u0000\u0000\u0284\u027c\u0001\u0000\u0000\u0000\u0284\u027e\u0001"+ - "\u0000\u0000\u0000\u0284\u0281\u0001\u0000\u0000\u0000\u0285C\u0001\u0000"+ - "\u0000\u0000\u0286\u0287\u00053\u0000\u0000\u0287\u0288\u0003\n\u0005"+ - "\u0000\u0288\u0289\u00054\u0000\u0000\u0289\u028a\u0006\"\uffff\uffff"+ - "\u0000\u028aE\u0001\u0000\u0000\u0000\u028b\u028c\u0005&\u0000\u0000\u028c"+ - "\u0290\u0006#\uffff\uffff\u0000\u028d\u028e\u0005\'\u0000\u0000\u028e"+ - "\u0290\u0006#\uffff\uffff\u0000\u028f\u028b\u0001\u0000\u0000\u0000\u028f"+ - "\u028d\u0001\u0000\u0000\u0000\u0290G\u0001\u0000\u0000\u0000\u0291\u0292"+ - "\u0005\u000b\u0000\u0000\u0292\u0293\u00051\u0000\u0000\u0293\u0294\u0005"+ - ":\u0000\u0000\u0294\u0295\u0005>\u0000\u0000\u0295\u0296\u00052\u0000"+ - "\u0000\u0296\u0297\u0006$\uffff\uffff\u0000\u0297I\u0001\u0000\u0000\u0000"+ + "\u0003\u001c\u0217\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c"+ + "\u021c\b\u001c\n\u001c\f\u001c\u021f\t\u001c\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0003\u001d\u022a\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0232\b\u001d\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ + "\u001e\u023b\b\u001e\n\u001e\f\u001e\u023e\t\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0005\u001e\u0243\b\u001e\n\u001e\f\u001e\u0246\t\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0265"+ + "\b\u001f\u0001\u001f\u0003\u001f\u0268\b\u001f\u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003"+ + "!\u0281\b!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001"+ + "#\u0001#\u0003#\u028c\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0000\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012"+ + "\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001"+ + "\u0001\u0000\u001e\u001f\u02b7\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001"+ + "\u0000\u0000\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000"+ + "\u0000\u0000\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000"+ + "\u0000\f\u00b9\u0001\u0000\u0000\u0000\u000e\u00c2\u0001\u0000\u0000\u0000"+ + "\u0010\u00de\u0001\u0000\u0000\u0000\u0012\u00f6\u0001\u0000\u0000\u0000"+ + "\u0014\u00fd\u0001\u0000\u0000\u0000\u0016\u0103\u0001\u0000\u0000\u0000"+ + "\u0018\u010c\u0001\u0000\u0000\u0000\u001a\u0112\u0001\u0000\u0000\u0000"+ + "\u001c\u0130\u0001\u0000\u0000\u0000\u001e\u0151\u0001\u0000\u0000\u0000"+ + " \u0153\u0001\u0000\u0000\u0000\"\u0169\u0001\u0000\u0000\u0000$\u0171"+ + "\u0001\u0000\u0000\u0000&\u0177\u0001\u0000\u0000\u0000(\u017d\u0001\u0000"+ + "\u0000\u0000*\u0196\u0001\u0000\u0000\u0000,\u01b2\u0001\u0000\u0000\u0000"+ + ".\u01b4\u0001\u0000\u0000\u00000\u01c2\u0001\u0000\u0000\u00002\u01de"+ + "\u0001\u0000\u0000\u00004\u01e0\u0001\u0000\u0000\u00006\u01f8\u0001\u0000"+ + "\u0000\u00008\u020c\u0001\u0000\u0000\u0000:\u0231\u0001\u0000\u0000\u0000"+ + "<\u0233\u0001\u0000\u0000\u0000>\u0267\u0001\u0000\u0000\u0000@\u0269"+ + "\u0001\u0000\u0000\u0000B\u0280\u0001\u0000\u0000\u0000D\u0282\u0001\u0000"+ + "\u0000\u0000F\u028b\u0001\u0000\u0000\u0000H\u028d\u0001\u0000\u0000\u0000"+ + "JS\u0006\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000"+ + "\uffff\uffff\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000"+ + "OP\u0006\u0000\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000"+ + "\u0000\u0000QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001"+ + "\u0000\u0000\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000"+ + "US\u0001\u0000\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff"+ + "\u0000X\u0001\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000"+ + "Z[\u0005\u0001\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>"+ + "\u0000\u0000]^\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000"+ + "_`\u0006\u0001\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff"+ + "\uffff\u0000bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000"+ + "de\u0006\u0002\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000"+ + "\u0000gm\u0006\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000"+ + "\u0000jl\u0006\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001"+ + "\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000"+ + "n\u0085\u0001\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000"+ + "\u0000qr\u00053\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff"+ + "\u0000tu\u00050\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff"+ + "\uffff\u0000wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff"+ + "\uffff\u0000z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff"+ + "\uffff\u0000}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000"+ + "\u007f\u0082\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080"+ + "\u0081\u0001\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082"+ + "\u0080\u0001\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086"+ + "\u0001\u0000\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001"+ + "\u0000\u0000\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000"+ + "\u0000\u0000\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000"+ + "\u0000\u0000\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000"+ + "\u0000\u008b\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff"+ + "\u0000\u008d\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff"+ + "\u0000\u008f\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091"+ + "\u0092\u0006\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093"+ + "\u0094\u0005#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096"+ + "\u0006\u0003\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098"+ + "\u00030\u0018\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b"+ + "\u0001\u0000\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e"+ + "\u0001\u0000\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d"+ + "\u0001\u0000\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c"+ + "\u0001\u0000\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001"+ + "\u0000\u0000\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3"+ + "\u0005\u0001\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5"+ + "\u0006\u0004\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7"+ + "\u00052\u0000\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004"+ + "\uffff\uffff\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000"+ + "\u0000\u0000\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u0003"+ + "0\u0018\u0000\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u0005"+ + "7\u0000\u0000\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff"+ + "\uffff\u0000\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000"+ + "\u0000\u0000\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000"+ + "\u0000\u0000\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000"+ + "\u0000\u0000\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000"+ + "\u0000\u0000\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000"+ + "\u0000\u0000\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005"+ + "\u0007\u0000\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006"+ + "\uffff\uffff\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001"+ + "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001"+ + "\u0000\u0000\u0000\u00c0\u00c1\u0005;\u0000\u0000\u00c1\r\u0001\u0000"+ + "\u0000\u0000\u00c2\u00c3\u0006\u0007\uffff\uffff\u0000\u00c3\u00c4\u0005"+ + "\b\u0000\u0000\u00c4\u00c5\u0006\u0007\uffff\uffff\u0000\u00c5\u00c6\u0003"+ + "\u0010\b\u0000\u00c6\u00c7\u0006\u0007\uffff\uffff\u0000\u00c7\u00c8\u0003"+ + ".\u0017\u0000\u00c8\u00c9\u0006\u0007\uffff\uffff\u0000\u00c9\u00d2\u0006"+ + "\u0007\uffff\uffff\u0000\u00ca\u00cb\u0005\n\u0000\u0000\u00cb\u00cc\u0003"+ + "\u0010\b\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00ce\u0003"+ + ".\u0017\u0000\u00ce\u00cf\u0006\u0007\uffff\uffff\u0000\u00cf\u00d1\u0001"+ + "\u0000\u0000\u0000\u00d0\u00ca\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001"+ + "\u0000\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001"+ + "\u0000\u0000\u0000\u00d3\u00d9\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001"+ + "\u0000\u0000\u0000\u00d5\u00d6\u0005\t\u0000\u0000\u00d6\u00d7\u0003."+ + "\u0017\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00da\u0001"+ + "\u0000\u0000\u0000\u00d9\u00d5\u0001\u0000\u0000\u0000\u00d9\u00da\u0001"+ + "\u0000\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0006"+ + "\u0007\uffff\uffff\u0000\u00dc\u00dd\u0005\u0002\u0000\u0000\u00dd\u000f"+ + "\u0001\u0000\u0000\u0000\u00de\u00f3\u0006\b\uffff\uffff\u0000\u00df\u00e0"+ + "\u00051\u0000\u0000\u00e0\u00e1\u00030\u0018\u0000\u00e1\u00e2\u0006\b"+ + "\uffff\uffff\u0000\u00e2\u00ee\u00052\u0000\u0000\u00e3\u00e5\u0007\u0000"+ + "\u0000\u0000\u00e4\u00e6\u00051\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000"+ + "\u0000\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000"+ + "\u0000\u00e7\u00e8\u0003\u0010\b\u0000\u00e8\u00ea\u0006\b\uffff\uffff"+ + "\u0000\u00e9\u00eb\u00052\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000"+ + "\u00ea\u00eb\u0001\u0000\u0000\u0000\u00eb\u00ed\u0001\u0000\u0000\u0000"+ + "\u00ec\u00e3\u0001\u0000\u0000\u0000\u00ed\u00f0\u0001\u0000\u0000\u0000"+ + "\u00ee\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000"+ + "\u00ef\u00f2\u0001\u0000\u0000\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000"+ + "\u00f1\u00df\u0001\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000"+ + "\u00f3\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000"+ + "\u00f4\u0011\u0001\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000"+ + "\u00f6\u00f7\u0005\u0004\u0000\u0000\u00f7\u00f8\u00051\u0000\u0000\u00f8"+ + "\u00f9\u00030\u0018\u0000\u00f9\u00fa\u0006\t\uffff\uffff\u0000\u00fa"+ + "\u00fb\u00052\u0000\u0000\u00fb\u00fc\u0005;\u0000\u0000\u00fc\u0013\u0001"+ + "\u0000\u0000\u0000\u00fd\u00fe\u0005\u0006\u0000\u0000\u00fe\u00ff\u0005"+ + "1\u0000\u0000\u00ff\u0100\u00030\u0018\u0000\u0100\u0101\u0006\n\uffff"+ + "\uffff\u0000\u0101\u0102\u00052\u0000\u0000\u0102\u0015\u0001\u0000\u0000"+ + "\u0000\u0103\u0104\u0005\u0005\u0000\u0000\u0104\u0105\u00051\u0000\u0000"+ + "\u0105\u0106\u00030\u0018\u0000\u0106\u0107\u00057\u0000\u0000\u0107\u0108"+ + "\u00030\u0018\u0000\u0108\u0109\u00052\u0000\u0000\u0109\u010a\u0005;"+ + "\u0000\u0000\u010a\u010b\u0006\u000b\uffff\uffff\u0000\u010b\u0017\u0001"+ + "\u0000\u0000\u0000\u010c\u010d\u0005\u000e\u0000\u0000\u010d\u010e\u0005"+ + "\u0011\u0000\u0000\u010e\u010f\u0003\u001a\r\u0000\u010f\u0110\u0006\f"+ + "\uffff\uffff\u0000\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0019\u0001"+ + "\u0000\u0000\u0000\u0112\u0128\u0006\r\uffff\uffff\u0000\u0113\u0114\u0003"+ + ",\u0016\u0000\u0114\u0115\u0006\r\uffff\uffff\u0000\u0115\u0127\u0001"+ + "\u0000\u0000\u0000\u0116\u011b\u0005(\u0000\u0000\u0117\u0118\u0005\b"+ + "\u0000\u0000\u0118\u0119\u0003\u0010\b\u0000\u0119\u011a\u0006\r\uffff"+ + "\uffff\u0000\u011a\u011c\u0001\u0000\u0000\u0000\u011b\u0117\u0001\u0000"+ + "\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000"+ + "\u0000\u0000\u011d\u0127\u0005;\u0000\u0000\u011e\u0123\u0005)\u0000\u0000"+ + "\u011f\u0120\u0005\b\u0000\u0000\u0120\u0121\u0003\u0010\b\u0000\u0121"+ + "\u0122\u0006\r\uffff\uffff\u0000\u0122\u0124\u0001\u0000\u0000\u0000\u0123"+ + "\u011f\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124"+ + "\u0125\u0001\u0000\u0000\u0000\u0125\u0127\u0005;\u0000\u0000\u0126\u0113"+ + "\u0001\u0000\u0000\u0000\u0126\u0116\u0001\u0000\u0000\u0000\u0126\u011e"+ + "\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128\u0126"+ + "\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012e"+ + "\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b\u012c"+ + "\u0003\f\u0006\u0000\u012c\u012d\u0006\r\uffff\uffff\u0000\u012d\u012f"+ + "\u0001\u0000\u0000\u0000\u012e\u012b\u0001\u0000\u0000\u0000\u012e\u012f"+ + "\u0001\u0000\u0000\u0000\u012f\u001b\u0001\u0000\u0000\u0000\u0130\u0131"+ + "\u0005\u000f\u0000\u0000\u0131\u0132\u0005>\u0000\u0000\u0132\u0133\u0005"+ + "\u0010\u0000\u0000\u0133\u0134\u0003\u001e\u000f\u0000\u0134\u0135\u0003"+ + "\u001a\r\u0000\u0135\u0136\u0005\u0002\u0000\u0000\u0136\u0137\u0006\u000e"+ + "\uffff\uffff\u0000\u0137\u001d\u0001\u0000\u0000\u0000\u0138\u0139\u0006"+ + "\u000f\uffff\uffff\u0000\u0139\u013a\u00051\u0000\u0000\u013a\u013b\u0003"+ + "0\u0018\u0000\u013b\u013c\u0006\u000f\uffff\uffff\u0000\u013c\u013d\u0005"+ + "9\u0000\u0000\u013d\u013e\u00030\u0018\u0000\u013e\u013f\u0006\u000f\uffff"+ + "\uffff\u0000\u013f\u0140\u00052\u0000\u0000\u0140\u0152\u0001\u0000\u0000"+ + "\u0000\u0141\u0142\u00053\u0000\u0000\u0142\u0143\u00030\u0018\u0000\u0143"+ + "\u014a\u0006\u000f\uffff\uffff\u0000\u0144\u0145\u00057\u0000\u0000\u0145"+ + "\u0146\u00030\u0018\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147"+ + "\u0149\u0001\u0000\u0000\u0000\u0148\u0144\u0001\u0000\u0000\u0000\u0149"+ + "\u014c\u0001\u0000\u0000\u0000\u014a\u0148\u0001\u0000\u0000\u0000\u014a"+ + "\u014b\u0001\u0000\u0000\u0000\u014b\u014d\u0001\u0000\u0000\u0000\u014c"+ + "\u014a\u0001\u0000\u0000\u0000\u014d\u014e\u00054\u0000\u0000\u014e\u0152"+ + "\u0001\u0000\u0000\u0000\u014f\u0150\u0005>\u0000\u0000\u0150\u0152\u0006"+ + "\u000f\uffff\uffff\u0000\u0151\u0138\u0001\u0000\u0000\u0000\u0151\u0141"+ + "\u0001\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u001f"+ + "\u0001\u0000\u0000\u0000\u0153\u0154\u0006\u0010\uffff\uffff\u0000\u0154"+ + "\u0155\u00053\u0000\u0000\u0155\u0156\u00030\u0018\u0000\u0156\u0157\u0005"+ + "$\u0000\u0000\u0157\u0158\u0005>\u0000\u0000\u0158\u0159\u0005*\u0000"+ + "\u0000\u0159\u015a\u0003\u001e\u000f\u0000\u015a\u015b\u00057\u0000\u0000"+ + "\u015b\u015c\u00030\u0018\u0000\u015c\u0163\u0006\u0010\uffff\uffff\u0000"+ + "\u015d\u015e\u00057\u0000\u0000\u015e\u015f\u00030\u0018\u0000\u015f\u0160"+ + "\u0006\u0010\uffff\uffff\u0000\u0160\u0162\u0001\u0000\u0000\u0000\u0161"+ + "\u015d\u0001\u0000\u0000\u0000\u0162\u0165\u0001\u0000\u0000\u0000\u0163"+ + "\u0161\u0001\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164"+ + "\u0166\u0001\u0000\u0000\u0000\u0165\u0163\u0001\u0000\u0000\u0000\u0166"+ + "\u0167\u0006\u0010\uffff\uffff\u0000\u0167\u0168\u00054\u0000\u0000\u0168"+ + "!\u0001\u0000\u0000\u0000\u0169\u016a\u0005>\u0000\u0000\u016a\u016b\u0005"+ + "8\u0000\u0000\u016b\u016c\u0005\r\u0000\u0000\u016c\u016d\u00051\u0000"+ + "\u0000\u016d\u016e\u00030\u0018\u0000\u016e\u016f\u00052\u0000\u0000\u016f"+ + "\u0170\u0006\u0011\uffff\uffff\u0000\u0170#\u0001\u0000\u0000\u0000\u0171"+ + "\u0172\u0005\u0012\u0000\u0000\u0172\u0173\u00051\u0000\u0000\u0173\u0174"+ + "\u00030\u0018\u0000\u0174\u0175\u00052\u0000\u0000\u0175\u0176\u0006\u0012"+ + "\uffff\uffff\u0000\u0176%\u0001\u0000\u0000\u0000\u0177\u0178\u0005\u0013"+ + "\u0000\u0000\u0178\u0179\u00051\u0000\u0000\u0179\u017a\u00030\u0018\u0000"+ + "\u017a\u017b\u00052\u0000\u0000\u017b\u017c\u0006\u0013\uffff\uffff\u0000"+ + "\u017c\'\u0001\u0000\u0000\u0000\u017d\u017e\u0006\u0014\uffff\uffff\u0000"+ + "\u017e\u0182\u0005>\u0000\u0000\u017f\u0180\u0003*\u0015\u0000\u0180\u0181"+ + "\u0006\u0014\uffff\uffff\u0000\u0181\u0183\u0001\u0000\u0000\u0000\u0182"+ + "\u017f\u0001\u0000\u0000\u0000\u0182\u0183\u0001\u0000\u0000\u0000\u0183"+ + "\u0190\u0001\u0000\u0000\u0000\u0184\u0185\u00050\u0000\u0000\u0185\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u0186\u0187\u0005+\u0000\u0000\u0187\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u0188\u0189\u0005,\u0000\u0000\u0189\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u018a\u018b\u0005.\u0000\u0000\u018b\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u018c\u018d\u0005-\u0000\u0000\u018d\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u018e\u018f\u0005/\u0000\u0000\u018f\u0191"+ + "\u0006\u0014\uffff\uffff\u0000\u0190\u0184\u0001\u0000\u0000\u0000\u0190"+ + "\u0186\u0001\u0000\u0000\u0000\u0190\u0188\u0001\u0000\u0000\u0000\u0190"+ + "\u018a\u0001\u0000\u0000\u0000\u0190\u018c\u0001\u0000\u0000\u0000\u0190"+ + "\u018e\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192"+ + "\u0193\u00030\u0018\u0000\u0193\u0194\u0005;\u0000\u0000\u0194\u0195\u0006"+ + "\u0014\uffff\uffff\u0000\u0195)\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ + "3\u0000\u0000\u0197\u0198\u00030\u0018\u0000\u0198\u0199\u0006\u0015\uffff"+ + "\uffff\u0000\u0199\u019a\u00054\u0000\u0000\u019a+\u0001\u0000\u0000\u0000"+ + "\u019b\u019c\u0003\u000e\u0007\u0000\u019c\u019d\u0006\u0016\uffff\uffff"+ + "\u0000\u019d\u01b3\u0001\u0000\u0000\u0000\u019e\u019f\u0003\u0018\f\u0000"+ + "\u019f\u01a0\u0006\u0016\uffff\uffff\u0000\u01a0\u01b3\u0001\u0000\u0000"+ + "\u0000\u01a1\u01a2\u0003\u001c\u000e\u0000\u01a2\u01a3\u0006\u0016\uffff"+ + "\uffff\u0000\u01a3\u01b3\u0001\u0000\u0000\u0000\u01a4\u01a5\u0003\u0012"+ + "\t\u0000\u01a5\u01a6\u0006\u0016\uffff\uffff\u0000\u01a6\u01b3\u0001\u0000"+ + "\u0000\u0000\u01a7\u01a8\u0003\u0016\u000b\u0000\u01a8\u01a9\u0006\u0016"+ + "\uffff\uffff\u0000\u01a9\u01b3\u0001\u0000\u0000\u0000\u01aa\u01ab\u0003"+ + "0\u0018\u0000\u01ab\u01ac\u0006\u0016\uffff\uffff\u0000\u01ac\u01ad\u0006"+ + "\u0016\uffff\uffff\u0000\u01ad\u01ae\u0005;\u0000\u0000\u01ae\u01b3\u0001"+ + "\u0000\u0000\u0000\u01af\u01b0\u0003(\u0014\u0000\u01b0\u01b1\u0006\u0016"+ + "\uffff\uffff\u0000\u01b1\u01b3\u0001\u0000\u0000\u0000\u01b2\u019b\u0001"+ + "\u0000\u0000\u0000\u01b2\u019e\u0001\u0000\u0000\u0000\u01b2\u01a1\u0001"+ + "\u0000\u0000\u0000\u01b2\u01a4\u0001\u0000\u0000\u0000\u01b2\u01a7\u0001"+ + "\u0000\u0000\u0000\u01b2\u01aa\u0001\u0000\u0000\u0000\u01b2\u01af\u0001"+ + "\u0000\u0000\u0000\u01b3-\u0001\u0000\u0000\u0000\u01b4\u01ba\u0006\u0017"+ + "\uffff\uffff\u0000\u01b5\u01b6\u0003,\u0016\u0000\u01b6\u01b7\u0006\u0017"+ + "\uffff\uffff\u0000\u01b7\u01b9\u0001\u0000\u0000\u0000\u01b8\u01b5\u0001"+ + "\u0000\u0000\u0000\u01b9\u01bc\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001"+ + "\u0000\u0000\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb\u01c0\u0001"+ + "\u0000\u0000\u0000\u01bc\u01ba\u0001\u0000\u0000\u0000\u01bd\u01be\u0003"+ + "\f\u0006\u0000\u01be\u01bf\u0006\u0017\uffff\uffff\u0000\u01bf\u01c1\u0001"+ + "\u0000\u0000\u0000\u01c0\u01bd\u0001\u0000\u0000\u0000\u01c0\u01c1\u0001"+ + "\u0000\u0000\u0000\u01c1/\u0001\u0000\u0000\u0000\u01c2\u01c3\u0006\u0018"+ + "\uffff\uffff\u0000\u01c3\u01c4\u00032\u0019\u0000\u01c4\u01c5\u0006\u0018"+ + "\uffff\uffff\u0000\u01c5\u01cd\u0001\u0000\u0000\u0000\u01c6\u01c7\n\u0002"+ + "\u0000\u0000\u01c7\u01c8\u0005%\u0000\u0000\u01c8\u01c9\u00032\u0019\u0000"+ + "\u01c9\u01ca\u0006\u0018\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000\u0000"+ + "\u0000\u01cb\u01c6\u0001\u0000\u0000\u0000\u01cc\u01cf\u0001\u0000\u0000"+ + "\u0000\u01cd\u01cb\u0001\u0000\u0000\u0000\u01cd\u01ce\u0001\u0000\u0000"+ + "\u0000\u01ce1\u0001\u0000\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000"+ + "\u01d0\u01d1\u00034\u001a\u0000\u01d1\u01d6\u0006\u0019\uffff\uffff\u0000"+ + "\u01d2\u01d3\u0005\u0018\u0000\u0000\u01d3\u01d7\u0006\u0019\uffff\uffff"+ + "\u0000\u01d4\u01d5\u0005\u0019\u0000\u0000\u01d5\u01d7\u0006\u0019\uffff"+ + "\uffff\u0000\u01d6\u01d2\u0001\u0000\u0000\u0000\u01d6\u01d4\u0001\u0000"+ + "\u0000\u0000\u01d7\u01d8\u0001\u0000\u0000\u0000\u01d8\u01d9\u00034\u001a"+ + "\u0000\u01d9\u01da\u0006\u0019\uffff\uffff\u0000\u01da\u01df\u0001\u0000"+ + "\u0000\u0000\u01db\u01dc\u00034\u001a\u0000\u01dc\u01dd\u0006\u0019\uffff"+ + "\uffff\u0000\u01dd\u01df\u0001\u0000\u0000\u0000\u01de\u01d0\u0001\u0000"+ + "\u0000\u0000\u01de\u01db\u0001\u0000\u0000\u0000\u01df3\u0001\u0000\u0000"+ + "\u0000\u01e0\u01e1\u0006\u001a\uffff\uffff\u0000\u01e1\u01e2\u00036\u001b"+ + "\u0000\u01e2\u01e3\u0006\u001a\uffff\uffff\u0000\u01e3\u01f5\u0001\u0000"+ + "\u0000\u0000\u01e4\u01e5\n\u0002\u0000\u0000\u01e5\u01ee\u0006\u001a\uffff"+ + "\uffff\u0000\u01e6\u01e7\u0005\u001c\u0000\u0000\u01e7\u01ef\u0006\u001a"+ + "\uffff\uffff\u0000\u01e8\u01e9\u0005\u001d\u0000\u0000\u01e9\u01ef\u0006"+ + "\u001a\uffff\uffff\u0000\u01ea\u01eb\u0005\u001a\u0000\u0000\u01eb\u01ef"+ + "\u0006\u001a\uffff\uffff\u0000\u01ec\u01ed\u0005\u001b\u0000\u0000\u01ed"+ + "\u01ef\u0006\u001a\uffff\uffff\u0000\u01ee\u01e6\u0001\u0000\u0000\u0000"+ + "\u01ee\u01e8\u0001\u0000\u0000\u0000\u01ee\u01ea\u0001\u0000\u0000\u0000"+ + "\u01ee\u01ec\u0001\u0000\u0000\u0000\u01ef\u01f0\u0001\u0000\u0000\u0000"+ + "\u01f0\u01f1\u00036\u001b\u0000\u01f1\u01f2\u0006\u001a\uffff\uffff\u0000"+ + "\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01e4\u0001\u0000\u0000\u0000"+ + "\u01f4\u01f7\u0001\u0000\u0000\u0000\u01f5\u01f3\u0001\u0000\u0000\u0000"+ + "\u01f5\u01f6\u0001\u0000\u0000\u0000\u01f65\u0001\u0000\u0000\u0000\u01f7"+ + "\u01f5\u0001\u0000\u0000\u0000\u01f8\u01f9\u0006\u001b\uffff\uffff\u0000"+ + "\u01f9\u01fa\u00038\u001c\u0000\u01fa\u01fb\u0006\u001b\uffff\uffff\u0000"+ + "\u01fb\u0209\u0001\u0000\u0000\u0000\u01fc\u01fd\n\u0002\u0000\u0000\u01fd"+ + "\u0202\u0006\u001b\uffff\uffff\u0000\u01fe\u01ff\u0005\u0014\u0000\u0000"+ + "\u01ff\u0203\u0006\u001b\uffff\uffff\u0000\u0200\u0201\u0005\u0015\u0000"+ + "\u0000\u0201\u0203\u0006\u001b\uffff\uffff\u0000\u0202\u01fe\u0001\u0000"+ + "\u0000\u0000\u0202\u0200\u0001\u0000\u0000\u0000\u0203\u0204\u0001\u0000"+ + "\u0000\u0000\u0204\u0205\u00038\u001c\u0000\u0205\u0206\u0006\u001b\uffff"+ + "\uffff\u0000\u0206\u0208\u0001\u0000\u0000\u0000\u0207\u01fc\u0001\u0000"+ + "\u0000\u0000\u0208\u020b\u0001\u0000\u0000\u0000\u0209\u0207\u0001\u0000"+ + "\u0000\u0000\u0209\u020a\u0001\u0000\u0000\u0000\u020a7\u0001\u0000\u0000"+ + "\u0000\u020b\u0209\u0001\u0000\u0000\u0000\u020c\u020d\u0006\u001c\uffff"+ + "\uffff\u0000\u020d\u020e\u0003:\u001d\u0000\u020e\u020f\u0006\u001c\uffff"+ + "\uffff\u0000\u020f\u021d\u0001\u0000\u0000\u0000\u0210\u0211\n\u0002\u0000"+ + "\u0000\u0211\u0216\u0006\u001c\uffff\uffff\u0000\u0212\u0213\u0005\u0016"+ + "\u0000\u0000\u0213\u0217\u0006\u001c\uffff\uffff\u0000\u0214\u0215\u0005"+ + "\u0017\u0000\u0000\u0215\u0217\u0006\u001c\uffff\uffff\u0000\u0216\u0212"+ + "\u0001\u0000\u0000\u0000\u0216\u0214\u0001\u0000\u0000\u0000\u0217\u0218"+ + "\u0001\u0000\u0000\u0000\u0218\u0219\u0003:\u001d\u0000\u0219\u021a\u0006"+ + "\u001c\uffff\uffff\u0000\u021a\u021c\u0001\u0000\u0000\u0000\u021b\u0210"+ + "\u0001\u0000\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b"+ + "\u0001\u0000\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021e9\u0001"+ + "\u0000\u0000\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0229\u0006"+ + "\u001d\uffff\uffff\u0000\u0221\u0222\u0005 \u0000\u0000\u0222\u022a\u0006"+ + "\u001d\uffff\uffff\u0000\u0223\u0224\u0005\u0015\u0000\u0000\u0224\u022a"+ + "\u0006\u001d\uffff\uffff\u0000\u0225\u0226\u0005!\u0000\u0000\u0226\u022a"+ + "\u0006\u001d\uffff\uffff\u0000\u0227\u0228\u0005\"\u0000\u0000\u0228\u022a"+ + "\u0006\u001d\uffff\uffff\u0000\u0229\u0221\u0001\u0000\u0000\u0000\u0229"+ + "\u0223\u0001\u0000\u0000\u0000\u0229\u0225\u0001\u0000\u0000\u0000\u0229"+ + "\u0227\u0001\u0000\u0000\u0000\u022a\u022b\u0001\u0000\u0000\u0000\u022b"+ + "\u022c\u0003<\u001e\u0000\u022c\u022d\u0006\u001d\uffff\uffff\u0000\u022d"+ + "\u0232\u0001\u0000\u0000\u0000\u022e\u022f\u0003<\u001e\u0000\u022f\u0230"+ + "\u0006\u001d\uffff\uffff\u0000\u0230\u0232\u0001\u0000\u0000\u0000\u0231"+ + "\u0220\u0001\u0000\u0000\u0000\u0231\u022e\u0001\u0000\u0000\u0000\u0232"+ + ";\u0001\u0000\u0000\u0000\u0233\u0234\u0006\u001e\uffff\uffff\u0000\u0234"+ + "\u023c\u0003>\u001f\u0000\u0235\u0236\u00051\u0000\u0000\u0236\u0237\u0003"+ + "\n\u0005\u0000\u0237\u0238\u0006\u001e\uffff\uffff\u0000\u0238\u0239\u0005"+ + "2\u0000\u0000\u0239\u023b\u0001\u0000\u0000\u0000\u023a\u0235\u0001\u0000"+ + "\u0000\u0000\u023b\u023e\u0001\u0000\u0000\u0000\u023c\u023a\u0001\u0000"+ + "\u0000\u0000\u023c\u023d\u0001\u0000\u0000\u0000\u023d\u0244\u0001\u0000"+ + "\u0000\u0000\u023e\u023c\u0001\u0000\u0000\u0000\u023f\u0240\u0003*\u0015"+ + "\u0000\u0240\u0241\u0006\u001e\uffff\uffff\u0000\u0241\u0243\u0001\u0000"+ + "\u0000\u0000\u0242\u023f\u0001\u0000\u0000\u0000\u0243\u0246\u0001\u0000"+ + "\u0000\u0000\u0244\u0242\u0001\u0000\u0000\u0000\u0244\u0245\u0001\u0000"+ + "\u0000\u0000\u0245\u0247\u0001\u0000\u0000\u0000\u0246\u0244\u0001\u0000"+ + "\u0000\u0000\u0247\u0248\u0006\u001e\uffff\uffff\u0000\u0248=\u0001\u0000"+ + "\u0000\u0000\u0249\u024a\u0003B!\u0000\u024a\u024b\u0006\u001f\uffff\uffff"+ + "\u0000\u024b\u0268\u0001\u0000\u0000\u0000\u024c\u024d\u0005>\u0000\u0000"+ + "\u024d\u0268\u0006\u001f\uffff\uffff\u0000\u024e\u024f\u0003@ \u0000\u024f"+ + "\u0250\u0006\u001f\uffff\uffff\u0000\u0250\u0268\u0001\u0000\u0000\u0000"+ + "\u0251\u0252\u0003$\u0012\u0000\u0252\u0253\u0006\u001f\uffff\uffff\u0000"+ + "\u0253\u0268\u0001\u0000\u0000\u0000\u0254\u0255\u0003&\u0013\u0000\u0255"+ + "\u0256\u0006\u001f\uffff\uffff\u0000\u0256\u0268\u0001\u0000\u0000\u0000"+ + "\u0257\u0258\u0003\"\u0011\u0000\u0258\u0259\u0006\u001f\uffff\uffff\u0000"+ + "\u0259\u0268\u0001\u0000\u0000\u0000\u025a\u025b\u0003 \u0010\u0000\u025b"+ + "\u025c\u0006\u001f\uffff\uffff\u0000\u025c\u0268\u0001\u0000\u0000\u0000"+ + "\u025d\u025e\u0003\u0014\n\u0000\u025e\u025f\u0006\u001f\uffff\uffff\u0000"+ + "\u025f\u0268\u0001\u0000\u0000\u0000\u0260\u0264\u00051\u0000\u0000\u0261"+ + "\u0262\u00030\u0018\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000\u0263"+ + "\u0265\u0001\u0000\u0000\u0000\u0264\u0261\u0001\u0000\u0000\u0000\u0264"+ + "\u0265\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266"+ + "\u0268\u00052\u0000\u0000\u0267\u0249\u0001\u0000\u0000\u0000\u0267\u024c"+ + "\u0001\u0000\u0000\u0000\u0267\u024e\u0001\u0000\u0000\u0000\u0267\u0251"+ + "\u0001\u0000\u0000\u0000\u0267\u0254\u0001\u0000\u0000\u0000\u0267\u0257"+ + "\u0001\u0000\u0000\u0000\u0267\u025a\u0001\u0000\u0000\u0000\u0267\u025d"+ + "\u0001\u0000\u0000\u0000\u0267\u0260\u0001\u0000\u0000\u0000\u0268?\u0001"+ + "\u0000\u0000\u0000\u0269\u026a\u0005*\u0000\u0000\u026a\u026b\u0003\u0004"+ + "\u0002\u0000\u026b\u026c\u00055\u0000\u0000\u026c\u026d\u0003.\u0017\u0000"+ + "\u026d\u026e\u00056\u0000\u0000\u026e\u026f\u0003\n\u0005\u0000\u026f"+ + "\u0270\u0006 \uffff\uffff\u0000\u0270A\u0001\u0000\u0000\u0000\u0271\u0272"+ + "\u0003F#\u0000\u0272\u0273\u0006!\uffff\uffff\u0000\u0273\u0281\u0001"+ + "\u0000\u0000\u0000\u0274\u0275\u0005?\u0000\u0000\u0275\u0281\u0006!\uffff"+ + "\uffff\u0000\u0276\u0277\u0005<\u0000\u0000\u0277\u0281\u0006!\uffff\uffff"+ + "\u0000\u0278\u0279\u0005=\u0000\u0000\u0279\u0281\u0006!\uffff\uffff\u0000"+ + "\u027a\u027b\u0003D\"\u0000\u027b\u027c\u0006!\uffff\uffff\u0000\u027c"+ + "\u0281\u0001\u0000\u0000\u0000\u027d\u027e\u0003H$\u0000\u027e\u027f\u0006"+ + "!\uffff\uffff\u0000\u027f\u0281\u0001\u0000\u0000\u0000\u0280\u0271\u0001"+ + "\u0000\u0000\u0000\u0280\u0274\u0001\u0000\u0000\u0000\u0280\u0276\u0001"+ + "\u0000\u0000\u0000\u0280\u0278\u0001\u0000\u0000\u0000\u0280\u027a\u0001"+ + "\u0000\u0000\u0000\u0280\u027d\u0001\u0000\u0000\u0000\u0281C\u0001\u0000"+ + "\u0000\u0000\u0282\u0283\u00053\u0000\u0000\u0283\u0284\u0003\n\u0005"+ + "\u0000\u0284\u0285\u00054\u0000\u0000\u0285\u0286\u0006\"\uffff\uffff"+ + "\u0000\u0286E\u0001\u0000\u0000\u0000\u0287\u0288\u0005&\u0000\u0000\u0288"+ + "\u028c\u0006#\uffff\uffff\u0000\u0289\u028a\u0005\'\u0000\u0000\u028a"+ + "\u028c\u0006#\uffff\uffff\u0000\u028b\u0287\u0001\u0000\u0000\u0000\u028b"+ + "\u0289\u0001\u0000\u0000\u0000\u028cG\u0001\u0000\u0000\u0000\u028d\u028e"+ + "\u0005\u000b\u0000\u0000\u028e\u028f\u00051\u0000\u0000\u028f\u0290\u0005"+ + ":\u0000\u0000\u0290\u0291\u0005>\u0000\u0000\u0291\u0292\u00052\u0000"+ + "\u0000\u0292\u0293\u0006$\uffff\uffff\u0000\u0293I\u0001\u0000\u0000\u0000"+ ".QSm\u0080\u0085\u0087\u009c\u00b4\u00b7\u00be\u00d2\u00d9\u00e5\u00ea"+ "\u00ee\u00f3\u011b\u0123\u0126\u0128\u012e\u014a\u0151\u0163\u0182\u0190"+ - "\u01b2\u01ba\u01c0\u01cd\u01da\u01e1\u01f2\u01f9\u0206\u020d\u021a\u0221"+ - "\u022d\u0235\u0240\u0248\u0268\u026b\u0284\u028f"; + "\u01b2\u01ba\u01c0\u01cd\u01d6\u01de\u01ee\u01f5\u0202\u0209\u0216\u021d"+ + "\u0229\u0231\u023c\u0244\u0264\u0267\u0280\u028b"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 index ec7f546..cb96762 100644 --- a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 @@ -30,6 +30,7 @@ functionDeclaration returns [FunctionDeclaration functionDeclarationRet]: Identifier id_ = new Identifier($id.text); id_.setLine($id.line); $functionDeclarationRet.setFunctionName(id_); + $functionDeclarationRet.setLine($def.line); } f = functionArgumentsDeclaration {$functionDeclarationRet.setArgs($f.argRet);} b = body {$functionDeclarationRet.setBody($b.bodyRet);} @@ -144,7 +145,10 @@ returnStatement returns [ReturnStatement returnStmtRet]: { $returnStmtRet = new ReturnStatement(); } - RETURN (e = expression{$returnStmtRet.setReturnExp($e.expRet);})? SEMICOLLON; + r = RETURN (e = expression{ + $returnStmtRet.setReturnExp($e.expRet); + $returnStmtRet.setLine($r.line); + })? SEMICOLLON; ifStatement returns[IfStatement ifRet]: { @@ -397,25 +401,27 @@ expression returns [Expression expRet]: eqaulityExpression returns[Expression expRet]: - e1 = eqaulityExpression + e1 = relationalExpression { BinaryOperator op; + int line; } - (op1 = EQUAL {op = BinaryOperator.EQUAL;} - | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;} - ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);} + (op1 = EQUAL {op = BinaryOperator.EQUAL;line = $op1.line;} + | op2 = NOT_EQUAL {op = BinaryOperator.NOT_EQUAL;line = $op2.line;} + ) r1 = relationalExpression {$expRet = new BinaryExpression($e1.expRet, $r1.expRet, op);$expRet.setLine(line);} | r2 = relationalExpression {$expRet = $r2.expRet;}; relationalExpression returns [Expression expRet]: r1 = relationalExpression { BinaryOperator op; + int line; } - (op = GREATER_THAN {op = BinaryOperator.GREATER_THAN;} - | LESS_THAN {op = BinaryOperator.LESS_THAN;} - | LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;} - | GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;} - ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);} + (gt = GREATER_THAN {op = BinaryOperator.GREATER_THAN;line = $gt.line;} + | lt = LESS_THAN {op = BinaryOperator.LESS_THAN;line = $lt.line;} + | let = LESS_EQUAL_THAN {op = BinaryOperator.LESS_EQUAL_THAN;line = $let.line;} + | get = GREATER_EQUAL_THAN {op = BinaryOperator.GREATER_EQUAL_THAN;line = $get.line;} + ) a1 = additiveExpression {$expRet = new BinaryExpression($r1.expRet, $a1.expRet, op);$expRet.setLine(line);} | a2 = additiveExpression {$expRet = $a2.expRet;}; @@ -423,10 +429,11 @@ additiveExpression returns [Expression expRet]: a1 = additiveExpression { BinaryOperator op; + int line; } - (PLUS {op = BinaryOperator.PLUS;} - | MINUS {op = BinaryOperator.MINUS;} - ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);} + (p = PLUS {op = BinaryOperator.PLUS;line = $p.line;} + | m = MINUS {op = BinaryOperator.MINUS;line = $m.line;} + ) m1 = multiplicativeExpression {$expRet = new BinaryExpression($a1.expRet, $m1.expRet, op);$expRet.setLine(line);} | m2 = multiplicativeExpression { $expRet = $m2.expRet; @@ -438,22 +445,24 @@ multiplicativeExpression returns [Expression expRet]: m1 = multiplicativeExpression { BinaryOperator op; + int line; } - (MULT {op = BinaryOperator.MULT;} - |DIVIDE {op = BinaryOperator.DIVIDE;} - ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);} + (m = MULT {op = BinaryOperator.MULT;line = $m.line;} + |d = DIVIDE {op = BinaryOperator.DIVIDE;line = $d.line;} + ) p1 = preUnaryExpression {$expRet = new BinaryExpression($m1.expRet, $p1.expRet, op);$expRet.setLine(line);} | p2 = preUnaryExpression {$expRet = $p2.expRet;}; preUnaryExpression returns [Expression expRet]: { UnaryOperator op; + int line; } - (NOT {op = UnaryOperator.NOT;} - |MINUS {op = UnaryOperator.MINUS;} - |INCREMENT {op = UnaryOperator.INC;} - |DECREMENT {op = UnaryOperator.DEC;} - ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);} + (n = NOT {op = UnaryOperator.NOT;line = $n.line;} + |m = MINUS {op = UnaryOperator.MINUS;line = $m.line;} + |i = INCREMENT {op = UnaryOperator.INC;line = $i.line;} + |d = DECREMENT {op = UnaryOperator.DEC;line = $d.line;} + ) a1 = accessExpression {$expRet = new UnaryExpression($a1.expRet, op);$expRet.setLine(line);} | a2 = accessExpression {$expRet = $a2.expRet;}; @@ -488,6 +497,7 @@ accessExpression returns [Expression expRet]: accessExp.setDimentionalAccess(dimentions); } $expRet = accessExp; + $expRet.setLine($o.expRet.getLine()); } } ; diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/astPrinter/AstPrinter.class b/Phase2Template/out/production/Phase2Template/main/visitor/astPrinter/AstPrinter.class index c2bf1feb5aed2fd35c472c70825db30c3d1fd6ed..389201699c116127be978898f2274240d60a1168 100644 GIT binary patch delta 24 fcmZ47#kjPKal--)PR^Xnyi_YjUAxW8HELu4Zb1l9 delta 22 dcmZ45#kjbOal--)cJ`diyi_a3%_}u(WB^~*2jl<% diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp index 23a5e52..cc411c8 100644 --- a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 665, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 475, 8, 25, 1, 25, 1, 25, 1, 25, 5, 25, 480, 8, 25, 10, 25, 12, 25, 483, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 499, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 504, 8, 26, 10, 26, 12, 26, 507, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 519, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 524, 8, 27, 10, 27, 12, 27, 527, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 539, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 544, 8, 28, 10, 28, 12, 28, 547, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 558, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 566, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 575, 8, 30, 10, 30, 12, 30, 578, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 583, 8, 30, 10, 30, 12, 30, 586, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 617, 8, 31, 1, 31, 3, 31, 620, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 645, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 656, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 5, 48, 50, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 699, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 464, 1, 0, 0, 0, 52, 484, 1, 0, 0, 0, 54, 508, 1, 0, 0, 0, 56, 528, 1, 0, 0, 0, 58, 565, 1, 0, 0, 0, 60, 567, 1, 0, 0, 0, 62, 619, 1, 0, 0, 0, 64, 621, 1, 0, 0, 0, 66, 644, 1, 0, 0, 0, 68, 646, 1, 0, 0, 0, 70, 655, 1, 0, 0, 0, 72, 657, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 6, 25, -1, 0, 465, 466, 3, 52, 26, 0, 466, 467, 6, 25, -1, 0, 467, 481, 1, 0, 0, 0, 468, 469, 10, 2, 0, 0, 469, 474, 6, 25, -1, 0, 470, 471, 5, 24, 0, 0, 471, 475, 6, 25, -1, 0, 472, 473, 5, 25, 0, 0, 473, 475, 6, 25, -1, 0, 474, 470, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 477, 3, 52, 26, 0, 477, 478, 6, 25, -1, 0, 478, 480, 1, 0, 0, 0, 479, 468, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 51, 1, 0, 0, 0, 483, 481, 1, 0, 0, 0, 484, 485, 6, 26, -1, 0, 485, 486, 3, 54, 27, 0, 486, 487, 6, 26, -1, 0, 487, 505, 1, 0, 0, 0, 488, 489, 10, 2, 0, 0, 489, 498, 6, 26, -1, 0, 490, 491, 5, 28, 0, 0, 491, 499, 6, 26, -1, 0, 492, 493, 5, 29, 0, 0, 493, 499, 6, 26, -1, 0, 494, 495, 5, 26, 0, 0, 495, 499, 6, 26, -1, 0, 496, 497, 5, 27, 0, 0, 497, 499, 6, 26, -1, 0, 498, 490, 1, 0, 0, 0, 498, 492, 1, 0, 0, 0, 498, 494, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 3, 54, 27, 0, 501, 502, 6, 26, -1, 0, 502, 504, 1, 0, 0, 0, 503, 488, 1, 0, 0, 0, 504, 507, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 506, 1, 0, 0, 0, 506, 53, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 508, 509, 6, 27, -1, 0, 509, 510, 3, 56, 28, 0, 510, 511, 6, 27, -1, 0, 511, 525, 1, 0, 0, 0, 512, 513, 10, 2, 0, 0, 513, 518, 6, 27, -1, 0, 514, 515, 5, 20, 0, 0, 515, 519, 6, 27, -1, 0, 516, 517, 5, 21, 0, 0, 517, 519, 6, 27, -1, 0, 518, 514, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 3, 56, 28, 0, 521, 522, 6, 27, -1, 0, 522, 524, 1, 0, 0, 0, 523, 512, 1, 0, 0, 0, 524, 527, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 55, 1, 0, 0, 0, 527, 525, 1, 0, 0, 0, 528, 529, 6, 28, -1, 0, 529, 530, 3, 58, 29, 0, 530, 531, 6, 28, -1, 0, 531, 545, 1, 0, 0, 0, 532, 533, 10, 2, 0, 0, 533, 538, 6, 28, -1, 0, 534, 535, 5, 22, 0, 0, 535, 539, 6, 28, -1, 0, 536, 537, 5, 23, 0, 0, 537, 539, 6, 28, -1, 0, 538, 534, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 539, 540, 1, 0, 0, 0, 540, 541, 3, 58, 29, 0, 541, 542, 6, 28, -1, 0, 542, 544, 1, 0, 0, 0, 543, 532, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 57, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 548, 557, 6, 29, -1, 0, 549, 550, 5, 32, 0, 0, 550, 558, 6, 29, -1, 0, 551, 552, 5, 21, 0, 0, 552, 558, 6, 29, -1, 0, 553, 554, 5, 33, 0, 0, 554, 558, 6, 29, -1, 0, 555, 556, 5, 34, 0, 0, 556, 558, 6, 29, -1, 0, 557, 549, 1, 0, 0, 0, 557, 551, 1, 0, 0, 0, 557, 553, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 60, 30, 0, 560, 561, 6, 29, -1, 0, 561, 566, 1, 0, 0, 0, 562, 563, 3, 60, 30, 0, 563, 564, 6, 29, -1, 0, 564, 566, 1, 0, 0, 0, 565, 548, 1, 0, 0, 0, 565, 562, 1, 0, 0, 0, 566, 59, 1, 0, 0, 0, 567, 568, 6, 30, -1, 0, 568, 576, 3, 62, 31, 0, 569, 570, 5, 49, 0, 0, 570, 571, 3, 10, 5, 0, 571, 572, 6, 30, -1, 0, 572, 573, 5, 50, 0, 0, 573, 575, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 584, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 3, 42, 21, 0, 580, 581, 6, 30, -1, 0, 581, 583, 1, 0, 0, 0, 582, 579, 1, 0, 0, 0, 583, 586, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 584, 585, 1, 0, 0, 0, 585, 587, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 587, 588, 6, 30, -1, 0, 588, 61, 1, 0, 0, 0, 589, 590, 3, 66, 33, 0, 590, 591, 6, 31, -1, 0, 591, 620, 1, 0, 0, 0, 592, 593, 5, 62, 0, 0, 593, 620, 6, 31, -1, 0, 594, 595, 3, 64, 32, 0, 595, 596, 6, 31, -1, 0, 596, 620, 1, 0, 0, 0, 597, 598, 3, 36, 18, 0, 598, 599, 6, 31, -1, 0, 599, 620, 1, 0, 0, 0, 600, 601, 3, 38, 19, 0, 601, 602, 6, 31, -1, 0, 602, 620, 1, 0, 0, 0, 603, 604, 3, 34, 17, 0, 604, 605, 6, 31, -1, 0, 605, 620, 1, 0, 0, 0, 606, 607, 3, 32, 16, 0, 607, 608, 6, 31, -1, 0, 608, 620, 1, 0, 0, 0, 609, 610, 3, 20, 10, 0, 610, 611, 6, 31, -1, 0, 611, 620, 1, 0, 0, 0, 612, 616, 5, 49, 0, 0, 613, 614, 3, 48, 24, 0, 614, 615, 6, 31, -1, 0, 615, 617, 1, 0, 0, 0, 616, 613, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 620, 5, 50, 0, 0, 619, 589, 1, 0, 0, 0, 619, 592, 1, 0, 0, 0, 619, 594, 1, 0, 0, 0, 619, 597, 1, 0, 0, 0, 619, 600, 1, 0, 0, 0, 619, 603, 1, 0, 0, 0, 619, 606, 1, 0, 0, 0, 619, 609, 1, 0, 0, 0, 619, 612, 1, 0, 0, 0, 620, 63, 1, 0, 0, 0, 621, 622, 5, 42, 0, 0, 622, 623, 3, 4, 2, 0, 623, 624, 5, 53, 0, 0, 624, 625, 3, 46, 23, 0, 625, 626, 5, 54, 0, 0, 626, 627, 3, 10, 5, 0, 627, 628, 6, 32, -1, 0, 628, 65, 1, 0, 0, 0, 629, 630, 3, 70, 35, 0, 630, 631, 6, 33, -1, 0, 631, 645, 1, 0, 0, 0, 632, 633, 5, 63, 0, 0, 633, 645, 6, 33, -1, 0, 634, 635, 5, 60, 0, 0, 635, 645, 6, 33, -1, 0, 636, 637, 5, 61, 0, 0, 637, 645, 6, 33, -1, 0, 638, 639, 3, 68, 34, 0, 639, 640, 6, 33, -1, 0, 640, 645, 1, 0, 0, 0, 641, 642, 3, 72, 36, 0, 642, 643, 6, 33, -1, 0, 643, 645, 1, 0, 0, 0, 644, 629, 1, 0, 0, 0, 644, 632, 1, 0, 0, 0, 644, 634, 1, 0, 0, 0, 644, 636, 1, 0, 0, 0, 644, 638, 1, 0, 0, 0, 644, 641, 1, 0, 0, 0, 645, 67, 1, 0, 0, 0, 646, 647, 5, 51, 0, 0, 647, 648, 3, 10, 5, 0, 648, 649, 5, 52, 0, 0, 649, 650, 6, 34, -1, 0, 650, 69, 1, 0, 0, 0, 651, 652, 5, 38, 0, 0, 652, 656, 6, 35, -1, 0, 653, 654, 5, 39, 0, 0, 654, 656, 6, 35, -1, 0, 655, 651, 1, 0, 0, 0, 655, 653, 1, 0, 0, 0, 656, 71, 1, 0, 0, 0, 657, 658, 5, 11, 0, 0, 658, 659, 5, 49, 0, 0, 659, 660, 5, 58, 0, 0, 660, 661, 5, 62, 0, 0, 661, 662, 5, 50, 0, 0, 662, 663, 6, 36, -1, 0, 663, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 474, 481, 498, 505, 518, 525, 538, 545, 557, 565, 576, 584, 616, 619, 644, 655] \ No newline at end of file +[4, 1, 65, 661, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 471, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 479, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 495, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 500, 8, 26, 10, 26, 12, 26, 503, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 515, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 520, 8, 27, 10, 27, 12, 27, 523, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 535, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 540, 8, 28, 10, 28, 12, 28, 543, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 554, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 562, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 571, 8, 30, 10, 30, 12, 30, 574, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 579, 8, 30, 10, 30, 12, 30, 582, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 613, 8, 31, 1, 31, 3, 31, 616, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 641, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 652, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 695, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 478, 1, 0, 0, 0, 52, 480, 1, 0, 0, 0, 54, 504, 1, 0, 0, 0, 56, 524, 1, 0, 0, 0, 58, 561, 1, 0, 0, 0, 60, 563, 1, 0, 0, 0, 62, 615, 1, 0, 0, 0, 64, 617, 1, 0, 0, 0, 66, 640, 1, 0, 0, 0, 68, 642, 1, 0, 0, 0, 70, 651, 1, 0, 0, 0, 72, 653, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 3, 52, 26, 0, 465, 470, 6, 25, -1, 0, 466, 467, 5, 24, 0, 0, 467, 471, 6, 25, -1, 0, 468, 469, 5, 25, 0, 0, 469, 471, 6, 25, -1, 0, 470, 466, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 3, 52, 26, 0, 473, 474, 6, 25, -1, 0, 474, 479, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 477, 6, 25, -1, 0, 477, 479, 1, 0, 0, 0, 478, 464, 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 479, 51, 1, 0, 0, 0, 480, 481, 6, 26, -1, 0, 481, 482, 3, 54, 27, 0, 482, 483, 6, 26, -1, 0, 483, 501, 1, 0, 0, 0, 484, 485, 10, 2, 0, 0, 485, 494, 6, 26, -1, 0, 486, 487, 5, 28, 0, 0, 487, 495, 6, 26, -1, 0, 488, 489, 5, 29, 0, 0, 489, 495, 6, 26, -1, 0, 490, 491, 5, 26, 0, 0, 491, 495, 6, 26, -1, 0, 492, 493, 5, 27, 0, 0, 493, 495, 6, 26, -1, 0, 494, 486, 1, 0, 0, 0, 494, 488, 1, 0, 0, 0, 494, 490, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 3, 54, 27, 0, 497, 498, 6, 26, -1, 0, 498, 500, 1, 0, 0, 0, 499, 484, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 53, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 505, 6, 27, -1, 0, 505, 506, 3, 56, 28, 0, 506, 507, 6, 27, -1, 0, 507, 521, 1, 0, 0, 0, 508, 509, 10, 2, 0, 0, 509, 514, 6, 27, -1, 0, 510, 511, 5, 20, 0, 0, 511, 515, 6, 27, -1, 0, 512, 513, 5, 21, 0, 0, 513, 515, 6, 27, -1, 0, 514, 510, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 520, 1, 0, 0, 0, 519, 508, 1, 0, 0, 0, 520, 523, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 55, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 524, 525, 6, 28, -1, 0, 525, 526, 3, 58, 29, 0, 526, 527, 6, 28, -1, 0, 527, 541, 1, 0, 0, 0, 528, 529, 10, 2, 0, 0, 529, 534, 6, 28, -1, 0, 530, 531, 5, 22, 0, 0, 531, 535, 6, 28, -1, 0, 532, 533, 5, 23, 0, 0, 533, 535, 6, 28, -1, 0, 534, 530, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 540, 1, 0, 0, 0, 539, 528, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 57, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 553, 6, 29, -1, 0, 545, 546, 5, 32, 0, 0, 546, 554, 6, 29, -1, 0, 547, 548, 5, 21, 0, 0, 548, 554, 6, 29, -1, 0, 549, 550, 5, 33, 0, 0, 550, 554, 6, 29, -1, 0, 551, 552, 5, 34, 0, 0, 552, 554, 6, 29, -1, 0, 553, 545, 1, 0, 0, 0, 553, 547, 1, 0, 0, 0, 553, 549, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 3, 60, 30, 0, 556, 557, 6, 29, -1, 0, 557, 562, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 6, 29, -1, 0, 560, 562, 1, 0, 0, 0, 561, 544, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 562, 59, 1, 0, 0, 0, 563, 564, 6, 30, -1, 0, 564, 572, 3, 62, 31, 0, 565, 566, 5, 49, 0, 0, 566, 567, 3, 10, 5, 0, 567, 568, 6, 30, -1, 0, 568, 569, 5, 50, 0, 0, 569, 571, 1, 0, 0, 0, 570, 565, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 580, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 576, 3, 42, 21, 0, 576, 577, 6, 30, -1, 0, 577, 579, 1, 0, 0, 0, 578, 575, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 583, 584, 6, 30, -1, 0, 584, 61, 1, 0, 0, 0, 585, 586, 3, 66, 33, 0, 586, 587, 6, 31, -1, 0, 587, 616, 1, 0, 0, 0, 588, 589, 5, 62, 0, 0, 589, 616, 6, 31, -1, 0, 590, 591, 3, 64, 32, 0, 591, 592, 6, 31, -1, 0, 592, 616, 1, 0, 0, 0, 593, 594, 3, 36, 18, 0, 594, 595, 6, 31, -1, 0, 595, 616, 1, 0, 0, 0, 596, 597, 3, 38, 19, 0, 597, 598, 6, 31, -1, 0, 598, 616, 1, 0, 0, 0, 599, 600, 3, 34, 17, 0, 600, 601, 6, 31, -1, 0, 601, 616, 1, 0, 0, 0, 602, 603, 3, 32, 16, 0, 603, 604, 6, 31, -1, 0, 604, 616, 1, 0, 0, 0, 605, 606, 3, 20, 10, 0, 606, 607, 6, 31, -1, 0, 607, 616, 1, 0, 0, 0, 608, 612, 5, 49, 0, 0, 609, 610, 3, 48, 24, 0, 610, 611, 6, 31, -1, 0, 611, 613, 1, 0, 0, 0, 612, 609, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 5, 50, 0, 0, 615, 585, 1, 0, 0, 0, 615, 588, 1, 0, 0, 0, 615, 590, 1, 0, 0, 0, 615, 593, 1, 0, 0, 0, 615, 596, 1, 0, 0, 0, 615, 599, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 615, 608, 1, 0, 0, 0, 616, 63, 1, 0, 0, 0, 617, 618, 5, 42, 0, 0, 618, 619, 3, 4, 2, 0, 619, 620, 5, 53, 0, 0, 620, 621, 3, 46, 23, 0, 621, 622, 5, 54, 0, 0, 622, 623, 3, 10, 5, 0, 623, 624, 6, 32, -1, 0, 624, 65, 1, 0, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 6, 33, -1, 0, 627, 641, 1, 0, 0, 0, 628, 629, 5, 63, 0, 0, 629, 641, 6, 33, -1, 0, 630, 631, 5, 60, 0, 0, 631, 641, 6, 33, -1, 0, 632, 633, 5, 61, 0, 0, 633, 641, 6, 33, -1, 0, 634, 635, 3, 68, 34, 0, 635, 636, 6, 33, -1, 0, 636, 641, 1, 0, 0, 0, 637, 638, 3, 72, 36, 0, 638, 639, 6, 33, -1, 0, 639, 641, 1, 0, 0, 0, 640, 625, 1, 0, 0, 0, 640, 628, 1, 0, 0, 0, 640, 630, 1, 0, 0, 0, 640, 632, 1, 0, 0, 0, 640, 634, 1, 0, 0, 0, 640, 637, 1, 0, 0, 0, 641, 67, 1, 0, 0, 0, 642, 643, 5, 51, 0, 0, 643, 644, 3, 10, 5, 0, 644, 645, 5, 52, 0, 0, 645, 646, 6, 34, -1, 0, 646, 69, 1, 0, 0, 0, 647, 648, 5, 38, 0, 0, 648, 652, 6, 35, -1, 0, 649, 650, 5, 39, 0, 0, 650, 652, 6, 35, -1, 0, 651, 647, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 71, 1, 0, 0, 0, 653, 654, 5, 11, 0, 0, 654, 655, 5, 49, 0, 0, 655, 656, 5, 58, 0, 0, 656, 657, 5, 62, 0, 0, 657, 658, 5, 50, 0, 0, 658, 659, 6, 36, -1, 0, 659, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 470, 478, 494, 501, 514, 521, 534, 541, 553, 561, 572, 580, 612, 615, 640, 651] \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class index ff6c43b7f3ccde94320909a9dd05f4d44df61404..0e8c68899a3a36107557c0a9e334723e59a0967c 100644 GIT binary patch delta 127 zcmbO!H&brIYA(j+$!oam7+WVVHKG~StgRv9Lp9HHrbflgRuk5p9lp?ijv0AljuVr6IWqy=&=|1* diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class index 0cb9c13c5bbee432b94b39da48e79ce5c6b5ef2d..2cac1a22e589f56fa96bf3d0837ae5177d3b2f91 100644 GIT binary patch delta 755 zcma))$xZ@65QhJzVSpJEVZbqAF&H!oNE8%YP!u=BeZlPkJQYWUQW<%n-uCOIKBQ|6l#xsiyX&1wMXX-vCr_>V=CTdY_9nGj0#NW{BzE zk|x)$&d)AO4D8}5<^JSM(to`1MvgQLd6;n=qg4B8X95LUi&PcBDFc+W%K0-q@8Azq zx-dzrB#x9QrYP?+uVETlsu*TaqO}bnnFz^3G;Bs+N5(AXEJoh4;Y$a?#8BEjBwF-7 z+e5jNzQ@rwoJaI`1cVT_4AjT~C%fKsCia5vM@r2Nh`nHvW&235(mAR@Ml2)3|It#_!MIU{0c k*YTxdkB(f}r)M1)SsjN)WH_Rz(wUgSW137ca3}Ep0TMJl*Z=?k delta 621 zcma))xlY4S5Jm5ct;7owi9r!0tct`U6M;zr2}{_Qu#*HDD*l3wZ$R#m($gUt3O)ew z0kr%D72>`Z%QjL98qav%ojb?l_nGZv)9*j8ZveJ%okBt&|KR02uKwKAKQy8Hg#-~@B<(q+pMb_{D)5%s8rIn%vpP1Y7TDxs_|2>p z8ReOl&Ob3E5UrpX8?S|^+t>+OTkyZlv3kU?fQ;>_rmSRw6EZm1#U9)CRd0s$X3ac-J5QpF7mpp|4J1i$& delta 133 zcmca5bxUf)4-Q71$v-*l8FeRHayl{UPqyb4ojj3KYw`~cvB?*Kv<0WwWI--1M&rpg zT=tWzIe8|xbD1!jPTm9L?FPwl>rS@j;+gElZOm%Tz{X)Sxry6vvK=?ilE7%%E4GZIgG=Lv1;-{4xh>OoII0%au~BVFtBkpPB!H9V{Dq-!0E}_${@(u fHd&ubWAZmn6V^^3uM5aaVeMrQ;_RC|gR2k#dwLcx delta 77 zcmeAa>lE7%%E4GPIgG=Lv2^l64j;yf$?rJqSgRS>IBO;wa{5hv%fU0bo70Z9fkBY7 fak4&_#^i6DCaf($UMrB7!rH+g#MwD{23H{fg2onL diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class index 2fc730c3ea989b5ee44d82572cfde17bc91e0d29..eb9c4d65a79ffafcc053d13c0d626963bbfdd5b9 100644 GIT binary patch delta 69 zcmX>scvx^lIUD2r$rWt&j0-03V6$Ug#K6Y4c=B&HKgK1Kz1Tfjmoo_Rt(g3iU1RbA Yb`#dsK;9Z4FNJkIgAm__$w?fE06aq%7ytkO delta 69 zcmX>scvx^lIUD2L$rWt&jPoY%V6$Ugz`(}0aPn_9KgLCqz1TfjmofK;9}KFNJk2gAm`k$w?fE06BFR0ssI2 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class index 46f7d9ee9b3a0a5b41191e5353f8088bd9e17563..b2a5d96fa9a52c8d3afe73783ccc2c511c31761c 100644 GIT binary patch delta 82 zcmZn>Z4uqDmYwnKv1?Sewn0$-VnvH{zL5PECvNTsF0NTbH^8f$< delta 84 zcmZn>Z4uqDmYwm%v1?SzL{LeVaNKOfsOsc$kLd6i_@Bo{SSi>``^jZT$um{3mnw| diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class index 108541ab53e5082810bece17ef7a4029064f41d9..9f35725d84caa75de37697cfa75d7bdea2f0af7e 100644 GIT binary patch delta 81 zcmew<@>68PB6h|NlNYnwGj5#x7)WlKtjyuWxMgx0haKy71~&E`lUH*1G47oFgTs?` k4}&24-pR{3H74hAny?-K@(u!dDXd2rgxHTx7U0SR0JxGHpa1{> delta 81 zcmew<@>68PB6h~rlNYnwGp?EZ7)Y+2tjyuWxPEdPhaKxC1~&H1lUH*1F>aasgTs?` kJA)wmj>*e8H74hAny~H$^7a6EDXjY$gxC*E7U0SR0It&;UjP6A diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class index 67584bc5b9cdbcf53b0d4cc2c7b79c68c0a02fec..c00780edaaa0c42d5685679756a81187f8ec6eb9 100644 GIT binary patch delta 160 zcmew?^I2wt5hvq~$=p1WlYKb#7;jBBMAQj=A93>n`7)yq#V<!#;(&o|Z@ zPA#xpr{tMG1&`#Wh8~8wE(fNzxorv~(_THPd))U0fa?VOBuF9wO+&AaJ|r3Lbc0#_ z*=*QW@H_&-aPfc#+YOs5RG;Bmrt-`@HVxZ!4vdm*`hFoB?lc0+HY%1M6ohkK#{dQy z2G1fe6r%v;Y{m5s4ATj0&p5tqcnv48j<^x#p~b&M9?~(46hki|SKUMIFx<$LJ7EMK z=SG!#M;4`N)7|HUaS88h7}0SVqYT&2=b9l=v>Yo~65h^Bx18P8Fvf7DZTdy7xWm1E zq%oo63O-=C%&B}{v?2_PnMzxfFiBHU6IHW9c2_vKs^cT!V1%DoLG-YOYYY=@9qd}Z z6}ZH55+Cchj!%f?vDk~EFg*OO1dTQDGo>0hqhnh)qp)e^8rDUmXMS|+iPwLw|Af;4}Ov^D$KQJ5;l5fyIRM#1A zdZ)k;<1-8kUCY&_bqOHu)(K&vz09QM!$Y&=%cGMqkKQhMZN>pZDii5XhMp1yK{#@6HqG~u5AVc4db>Nsm!y^wH5kAGP zxZN_fL}@5ysP)?lS9L}=00w5!Uzy>;>fnyZ0gM{MR+^YVl3=_nGnwO!2 z(n2<^!;DmFImhmy0qJOr!i@( zF~cz3B{E4*v{2KS=n<{j;f7gPI_MR%BP5bAYc*b{XqV5$NcH9ERdKe#G})`JN0aqD z1W&POmYo&r^ZKb^XWs#*n6Fj~LP#6M>SA;VExk*83M)&949Ok0;nnz>B?>p%=7PT| zE>bGcCijDN*QaFaWrywqd8=}2xbZI1Wk`4IIGXecy5vAlhMO?xjiiGaxz6I2TyLxO zj@rK~*FHKqhk3-XK&NJCWwdI!RQwe#yrkC{7U?N~k-UWhz3br-6mgG!Ey*+YCCoBC z1*=S z^(rKW)pqvjcJ>Qx?delN`7e|IIQiFd`HA1~-mml;<|HY|Cksd(<;J>52b%;LWXI+*TN{?jOZaM%5;aIM0!*CzmR@`f&6QvbH8Ie z20<<^3l@@F#&B{)qJ^1GHOZy0flb2Ok``>3ULXCJgAbz)9*~38^E!BpZQ?Bia-<>{ zqX;HnV2~o1qzI;Bc$ud)Lo1!?X^CVVsbsmu(O5H*G3=m9^q-JLC{3}m`zE%O(&(3z eny=_k3}53LxiWl9Yl?P+#J;0XXHkIf(f2Qn7z(HW delta 1091 zcmah|O>YuW6g}?^9blMN7(28K6w&(8g4Iyk0)n=+t%}yKqSY>mL4(1fKoecfhQzI8 z7KZ=eqQ;~~7p5kznz-<%_y^QGA0bGIZr(ljy?f6+=gphFvF}0u!LQF>04!t64bBj5 zC&TSTtNn9Blw}NK#3-=5&yRo`ij1QeHQumCt{}riJEba27LwQS+#J(#lgfPti*! zbC{=ffwFlBgaBV$5rjPq?L*k5lp{^6Ne1a0GK6Kj3|W(u@CD>(?V}KF3bBtumy!cH z^0?@5%sMhWasN1R`1%N>R8POBtKrh1{?Orm9n#!D0(uUPfC32+$e25xh6K zMdG5_P!eCEb}*dShZ_HcF%DCmV0|H5T@C>$Z?OgKj;=ZdS8)wGL&0ic0ph;?zX{>P z6BcR0(my8rHQ)x;Nrw3}p4k?3XyhTGEda_<(5ahf( e`533h^H*lWPfo_)ljV6tC-ZY@P3Gbjo9xe}IoXSwXL1Xd4degG2e~|$*crhJ6u32+ z*qOl01a6JVvOK(#r*hjfvQNIs?a9aq6nA3eo}9#E$I8dR#?C)^DUTncz~nDHo~*(Q hg6txb7xQXN&f+y;6$kPpfV>n|X$B#7naMnSg#Z=1A#nfz delta 137 zcmew>^H*lWPfo^fljV6tC-ZY@F@6WL{JAt4e@w3Aa%cQC`5>3aWD73w$qL+>lgqhy zCu{L=O-|s}n7p5heR4myDVqT5OS-d8!LO`A{ke9+L#vsHlKADHF5CC%`B`N>_ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class index 3c7ad65745350ed39c186756fea93d8287774ca2..d7644fbb988f1d50f0a9a0aa058ecf14ba6731bd 100644 GIT binary patch delta 95 zcmdlizFB-j5C@~mXU^yoftJIhjKbi*5u-uyqMFNRiA;4 w&0z9vPCrJ&$y!{VtR@VCY^IZMa%oInz-7W}0pwW%c`2+m3_@(SlbyH=0h99=X8-^I delta 93 zcmdlizFB-j5C^0Dyq2>fpf9}m)K-BF0IM=Ts)I)xQrP+Co^)(PVVK>V)ULY#UnrYI+rG+FHp># z(I3pu;MQUcocxhfbn*&rO~xRw>i0mg5TL9lV;ESbl1Gy<0w^Onc@K{vWAx;AJRYoZ z3~Y??ldXAu851UV@_Mo+GYB%KOt#?DnEapDgf$(=%K-9HShE>~7;`2syq2>fs@f~@<&el$sahyCcANIPB!4;nasm2G`W{ci_vSc6p#Gm>s*?QK9d=_ z-5LGB{0wd_#sHum(a9^gH5mheGP0B31I2=YvYw2gV3|rDO~!DbjO64!Jcf)>li%@p zu*Nd5F~&`{=JjQapWMmo$(qC<$e29Yf=^@ee_j*TG$1b>$V*|(Vi01?p1hDR69Bxb BESdlS diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index 14a8c1fab55b8e1bc69d2006dfb030005ac28588..95db725c037691cd840284dae364e456dd8bc8fc 100644 GIT binary patch delta 92 zcmX>hd_s7`9=6Fg>|&EIv1v`N0n$S3T9fwx=^%D3#z&KD+3gu0Pu|OJ$NH3kjqlkc t4nM}{ll?h7Szj>-^1Yt?k3(bfQ4SNhd_s7`9yZ3illQXOGv1s0m(70i9yYPbLF`(S{{ZPpK-z{~Z1N>`P1eT@Ye;gWz5(*y0(mK{9~gxAK2A>OOauT?JR#x$ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class index ffe60843a2db7c0a9977367c4a0234206a4d8f90..0e6ff9cc1b6049f369e8a54c9b87fb9d11caddfa 100644 GIT binary patch delta 123 zcmZ1}vr=Zm6;8&O$yYh;C(q+zn=Hj;$rwMmhFfxSE|(!=(&YJE9+RuNr6x0S8!~19 zdGeEkxHTEGfGXS>b0#0*_GHYP%*SKLTEM`@TsS$9$B(gS@&X=D)=~yR=CaBDyc(0m YcuiOh$0+`RpZOE7mh2OJS{G5Mr*Jyo0w802dA-^Z)<= diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class index c743b9801beb2219c2368ef18844ad0cfda3c73a..d4756d8a7abc7fb186f9682df7321f8dcce60d64 100644 GIT binary patch delta 105 zcmeB>>X6znn{%=>m)PWuoLY<oN@EycrGW#Z9r0V@^&s=#+_i+ zFD^~iJq&ETdnapf`!VjDT+Z#udXPbo_t0cD9*xOwxlLG)0(r-PycE`x3_`r8CinAH F0s#9YAy)tZ delta 105 zcmeB>>X6zno0DtP`82#}Y;dYnOs_r&CW Go=N}|upxB- diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class index 91ee733c0aa5b8f5c93cd3af9cbf953765498f70..3669e8f8bcd5b10d29b465c2e3e4f27fa66583a8 100644 GIT binary patch delta 83 zcmaDS@=j#Kbauv7lV`BoGp?R|14yo!EWzP4`3(opqdhaKx01~!(pljm{xO^)K=nfwDN lvXMcMWz*z2oEnppIZar%0(skjycE`*3_>isCbM#70syi}8pr?u diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class index 7aff372f7ed257f0f058aba1e305764915ab3047..099917d65b59c816fc342df07263c85dad9101b4 100644 GIT binary patch delta 77 zcmdldvQK2ga(2el$t&3HCu?!=O#aMn&X_S-o5PMZn}LllXL25gA7k$1y&Rsb1q_0G fg_CnQH6|N#ny{7td8I&J3Tp*}5MSlwtDKntgX$II delta 75 zcmdldvQK2ga(2e#$t&3H8B->|V0U6no2<=Y$C}B&#+NlYkHe2Kd-7fmPu4sJLB9OS dIh-1kjX6zNi-5dhATNcrj6sO6eDYP!OaNO}6=47X diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class index c7d7bb9b540a91c626aa73ea6e3203ef6aa80e36..579e7294c0cfec8440a9533284d0235a038d77b2 100644 GIT binary patch delta 167 zcmdm^xJPk=1~+5jg$ta(ghAg87$${Bj^)ezGEu=H%NvQj=47^cbtb zBAa+L8S8+mycioN_w&h5cH`A$Y?)lbYd6`MPipcRUOmPRusSI|O~!7pX|a5UjD0}0 z9;_1?*jOh`zQgCoIC-)*zbET720_;8lW*~BOkT)u!a57cn+@cpu+C!;Vx2$PS)dXC Davd}o delta 173 zcmdm^xJPk=1~+5Q ziAQs?7mw8BuRMl~HIw`KN3_(F5$IfYy_)4!>h;G3|1?}r#X2OuhisNK10S% zpjr>s9tJkn-pP0P{3iGDu}wDMcVV5#Ajmpt@-2Ri$qV^SSf>Jc(}27b)|m`Ktg|LN H3seFCpFcIi diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class index f2dc81f7d6e22c6259338bd60e6f07ddbec6d43e..8bfad393b2cb7d2933e239c541f71564c0ab8426 100644 GIT binary patch delta 83 zcmZn=Z4lkCik;D5@@jTFM#IUk*zFmOCTnpxP5#HhGr5ApnAMztjn!iE1`a<)%gO&a lJXviR1X*n-ujAC1T*_&}>Hy?90(mK{E(}7fu9L;NG6CWx73Kf{ delta 83 zcmZn=Z4lkCik(q=@@jTFMxDv8*zFm0Cu?yyG3rmw<*;KlVqjx6p1gs>Z*mR?&txu6 lJ63ZBK~{^&>o_$gmvWl0S_64DKwb)~J%bRd!(?%;OaP1$6chje diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class index 36ae0beff57b887b2752493aec0416ce541a810e..344edca38c1bd58b3589e470e3e95d316a9a5e65 100644 GIT binary patch delta 101 zcmbOyI!|?V^>v5QS!z^*l!lY?jSHFo349votme#UJ7eFgAh~4WK*t8 E0P-Uo(f|Me delta 101 zcmbOyI!|WAbE96V@gmuNlZoVQpg&Vrrjk%9RNK D>QWrU diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class index f3343a1ee2ad343f3c267c54a6f8498e1f705fea..7c4c71868946f16cb91fb9b1ee7937752b0cc7f9 100644 GIT binary patch delta 93 zcmaDR_DpO8KL=yZWC0F)#@xvPKr(Og1R$9|`2vtEm@L5Q#8@;rnA486l!1-CZ1OZt sKgROOPdPnVs~7~?t0zz4(wH30Wx`qq3(>8++m8 uX`FtHMU$U$da{->2(p(=p2DRuIhxCawGzmy0`gK=YZ-*t>n8u@$^-x&h8qb0 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class index fd8f4aff68cd73aef804a9527d7ca1f483acd912..5bc4f8321e0897bdac10c55cf747d25d36552d24 100644 GIT binary patch delta 756 zcma))%S!@L6vn^n=%_P6I>rcU5wr-D2rccQS@tq}KkT)yRaDz{{tY!m(SwSDS|&k3 zi*VhhKc`)F?%ZKU#6_EX&bjw~zw_P8sp;Q(;PdDG13&@WUbq;d$H{0l(c$*6eTJCv zE9*-6aBue@%fNPCitaCo$wt`MUP+ROAq5fp&`Y(ScKVT~HA7Vz5@moI*Cgo`o*JZQ zDqR?$Rpv+P2?i-|5!Wz;9;z6Ik)^c(Aq#|TAu2ZGv?(Kp5sQ(sZ1~~_<#tnqM|@N~9Qefp?b7-xr;45L9nXq0XH^vpZ`j zVuqw8Q^A6i&f2W5Jnt(I_k?)(FJcb!)F)$HD~Tfq@d!gp!A+V>K5$#`{{e@NL?HkG delta 621 zcma))OH0F05QWceLfa&QZIr5QErJUdrAV#sN38Gnv+C~<+=v_f3z~%>iV6w}bs_Eq z#kJth|Kd(O_ogH%bm1m5ckY=pACvo&`bZ@{e_!7LOkppEh(PAFn0e0U^p}18OB1^5 z#5!3J(a<24_38Z))l3fwj`=L8IQNLu%*DJ7X;`wTW_F~_!fISC@k zbiwm+56te6#RDxK|7)>`CC(|i-)8?HN@kvkEvds)I#i1vFW;7}$8VCwB|@G3rddCE&@b&mhQa fFu7AuV{(9?39B)XX9DDu$nRm@tRHkB)AX&(2FZa diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PatternMatchingContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PatternMatchingContext.class index 3805d766e127f5639c8e84c1a959700b1cd441be..4bddda53e0e9cc97efb9628ecacf10e504e0c81a 100644 GIT binary patch delta 178 zcmZ3aut;G;4%g&0Tw;@(xU?p}0n&$nv<|n}WF~H{$=TdIlP$Q78GlWd=arn?%B{!v zXYw^3`N@~LH5vbb#l(1YnV1;Bf+;+jj7(s`x($N&HU delta 178 zcmZ3aut;G;4j1Fs$+=wilXJMlCLiL`n!E-`GjVH8egmYPxHTv1aPv&o;^mv%%B{!v zd-63N`N@~LH5va-mgkk6EXJeD#P}a9n8KsU$Osl(&ZEc33>5QVWCQZO7&#~Z z$*al81C~F-YsknC6!TyeVqjwup6t!%%P2B=CZ8v(ID;UQ#AFYCjmiA{Calsxo(zze P!Ya=o#H28JBYze9E&p@bs0}F`>CKkln z&gZbOus5EW-7G}6u-G|g=FI=izh~w%&<=XvzF*n^7ICJ)#t^BeBhBP3x3elkwEiB{ zDmPab)jR{crtgxz^QU|M#hKEmE1??0C{m14Nx9xZ7e%NZ^r~LT zi0k`|CXfOPbkX7h6f9wxb~CJC)!?QmiW>LE9!#WuDZVaC-0bNZiakQx_;7}c12zaF zTwbMa#1EeukjkJi2F*00VI3usZb$|5QM!qu!5S%u*PtT?2@(1)qKqv%C)X&ul6M_M z6q*|ALWE5hVQgcE4&9~W^am$a_By^a>{H2x1NyCs%norRBf~L8jcVdSpTH?!?-U-g*%?Xu=EvNNK7^3eIwnr zpkWqsw3exI5sWe*R&*G9!AKwMi9U5yXpM+1ZepHt?v-JIB%pi=%d`qa#YdP$yFiH8 zU%eI3n`jRJD`5aP3=sPT80c5S^pjzF9@Mwh4XR;)sW8B35TNv9NctUUQU@4y!YGz< zuZVXk^%`hV1dk)aZHXv=-H1A$A+j~B%g!3uK#j^ZY+}pj&QKJO!|eQ{VtS8~2v}mu zQXShu+NoNZ#<&h)gvpomj3klZt`w$(F*wSHgB|RWbWbX@1f~0mHC+?K;2|amk^V2D zfde|H+n&w=FY$?BYTlizc)P0r@DWPCSyDW@0X$H^Z! zJy^dmu(5odY|G`x_-%3zmnZ8_20@lzldZWmCNpuHu>J+|{sDQ(Y^;n7Laa=amvCnS E0DiI}Gynhq delta 102 zcmeB`=#|)z#=-b_ayo}Sh0m+w>mvVYBzM1@i(}VRr z0~^bS$+ld6lizc)O`gc*!uo|lkmc)SYi^CnOxz}{KY+ZSKwdH%%O3_ImcNsiaAyJl Df2t$h diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class index 1fe621523d925a644b2b210c7dcfa7abb36a5a91..c04d793797299494c552e44ac96b070db0bcbdfd 100644 GIT binary patch delta 91 zcmX>kdPsD`8urQSICv)SU^ijRp8S^Go-t>#E{7ds?&KT}r^ybSJd<~E7_$~Ju(1?R u{>0(OSTfm>)04HFL6D_l@&`_h$=f+iSgV1&8Xzx)wVpwUrD1X;S0(^TL>u7% delta 91 zcmX>kdPsD`8g|Ci$!po|8Pg`e1(NBLbvf)9GbZP7I89!|&NF!zhcRm|0~<@;?n890dRX diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class index 9d846cabfb5fe8f90a21ad8e4abd3ce084a237c9..69abf8957634a6d4e3d89a24d363bf8f189ad335 100644 GIT binary patch delta 124 zcmZ1=y+C?{Iwxb^WDQPx#{9_{K(b)+3QoJp)m%K2*|_;8aTzj}PB!B5WGtUt!(~6Y zhg)p&MJ`Ro%E`aE+!?DUJ9B$7)=uu_wqvblU}I~Te1Y4Kv2n6Ik0)yjgCJY$oj_g+YY&4ETkm9Z-b?`C2qYK) delta 122 zcmZ1=y+C?{Iwxc1WDQPx#;nO1Kr(ys3Qjx5+{wSWBqwnhG8RlW;__rHnq0$W&saQp z50@Qd2~f(Nv23z4x98;DTw;?KacicLx-%pb$iYijP4!oQ{ZsUJ(Rp$1=g;dqfC$!oP#8i7;m~uP>QT1hywOvU zy%T3pcQ(bjwHfC#o-Z>n615^RE4mRIjZ8DtR@d;bFT_{9Ifg!I*|x0nZEwxXh4)%v z8n?8{sxZx9XhI@3JFx`~RQJ zFrd(Jfh^-v^5sye>T^7cY!E}#Aun@o)lDYq{%nW8} zRy()-b-O7ik1&lVmqak>B#1dgX}nEN60b&7VkvJX=H(t1$mpWXmar@%!wN-{#?dce L6}o(aYta7yVnkHZ delta 897 zcma)*$w~u36h&`$r89H_CatJ+B8VbFLU4@p6g9?ZoRTPfXf&!Z z_5|ev?2fuJ2B>xODfJYCln2Bz3?WWE3Bwqnwg%xA2zM>wOdyIij8TkPj9$xzHyUgq zhQAhYUgg1Sdl+}p>rVO$Q(qK^r~oFM0AVM(xsAsQP@ReTFg|3`5A$Aj2?nN=J|)$n6ez+r8Wa#U&GLkHN+=R%mQhZUT!?S#fj3o9T#>Wd&mTD5n3vF>6?-T?KJ#Wv_jb3~W9S xh;Td-2OHR=^;<;Z{xR9v_StOgsC(EY&^=Y{<3K6HA*oI4G_qG=(Zf)K^#dIkHueAj delta 688 zcma)(y-or_6ot?1Ah3%+ux!8pi6oe)pn^ZBh~mG90xHo*u(h_5+LCPN16Ue~i6$1t z(%9Mg4!(o&>@Hb|p)i}w+_`(tch8;qH0})T#4>X&#ahv+1BuK0!V( zRxroaYvpB-6~LfVg9R+|B#`f?FZR(lWvDM;3CqM-2J#&PfwZm?5O{<7*F(4m5pX?( zVRR4`A|z41bSCkPkv2nT1Puj+GeqE(QJax;>N*T6u!4d;n-8lfQYNs5b&G4Z{l-N1 z9!7gSNY_IN8+L6?jg_Mctj^NDJdG&GI6^XE3nSJUy4zUCCSOxv+g6AW!yT8EDp`FU z#269D{~~s=$38jpUd>!}5h>_$yay3;UBs}DGFu<8o%6(2rqcDLI{$fCegc)Bz$w&UtHL?i diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$StatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$StatementContext.class index 63c84dc0a54f04b4367aa0a7743ebab33b59c340..233db114ad260f64bcf85851165a12ce464c96c5 100644 GIT binary patch delta 133 zcmcbva9v@8BM;-Z$rpJ=Cx`RsGX4a!W&v4$z^uDGx|4f(c_!cC<(jO(tHZ>}1Qt%_ z)nwvincTH3v2Revhpynaq>!K}ML)-Nzifmer#<1d(*%&R$>lb3h$ zOkQ(FMxcn(yB)lfQ9_P43~;V*EFGJCJ9|#WR_S%Z!PSak3Sc6C=yyS}r?Q zb_O;+j>!kO{1`bW^K*N$@-PVU@lM{ytueWk+k{mB$P)zeQdmV8g!n`!tMgO>05;DT Awg3PC delta 96 zcmZ1=xj=G*87Je<$>yB)jK3$B1Ia&=w{zN0F5?uN%)_O_#QT4;6_*nu)8tw%J62W( yHa@n=2e|wg*(dXJd$Mvd2=Z}H-p8#mxs}_5l@G|{2l7%_g&2hRgeR->R004#(HJ!V diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser.class index 66338b6ac160603da80a2de9dbae100ec1daa4da..cc6f452eddb24168bdd9eb8966b81309d3f50455 100644 GIT binary patch literal 68551 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%0Aw~IF838B#9AyUY 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 Date: Mon, 15 Apr 2024 21:47:35 +0330 Subject: [PATCH 16/23] start name analasys --- .../main/visitor/ASTErrorDetector.class | Bin 16166 -> 16400 bytes .../Jepeto-Compiler-main/samples/sample1.jp | 4 +- .../src/main/visitor/ASTErrorDetector.java | 20 ++-- .../src/main/compileError/CompileError.java | 12 +- .../nameErrors/RedefinitionOfFunction.java | 13 +++ .../nameErrors/RedefinitionOfPattern.java | 14 +++ .../src/main/symbolTable/SymbolTable.java | 39 +++++++ .../exceptions/ItemAlreadyExists.java | 4 + .../symbolTable/exceptions/ItemNotFound.java | 4 + .../main/symbolTable/item/FunctionItem.java | 34 ++++++ .../main/symbolTable/item/PatternItem.java | 32 ++++++ .../symbolTable/item/SymbolTableItem.java | 14 +++ .../src/main/symbolTable/item/VarItem.java | 12 ++ .../src/main/symbolTable/utils/Stack.java | 25 +++++ .../visitor/nameAnalyzer/NameAnalyzer.java | 104 ++++++++++++++++++ 15 files changed, 310 insertions(+), 21 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfFunction.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemAlreadyExists.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemNotFound.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/item/FunctionItem.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/item/PatternItem.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/item/SymbolTableItem.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/item/VarItem.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/utils/Stack.java create mode 100644 Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java diff --git a/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTErrorDetector.class b/Phase2/Jepeto-Compiler-main/out/production/Jepeto-Phase2/main/visitor/ASTErrorDetector.class index 4c2cdd138087554c79fc85484d25eec4a0a17631..0d1b2fbb2e122ee58b5ca148e907d5888361eb56 100644 GIT binary patch delta 5374 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 Redefinition of function " + this.name;} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java new file mode 100644 index 0000000..b9c2a35 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java @@ -0,0 +1,14 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class RedefinitionOfPattern extends CompileError { + int line; + String name; + public RedefinitionOfPattern(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> Redefinition of pattern " + this.name;} +} + diff --git a/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java b/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java new file mode 100644 index 0000000..ca13817 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java @@ -0,0 +1,39 @@ +package main.symbolTable; + +import main.symbolTable.exceptions.ItemAlreadyExists; +import main.symbolTable.exceptions.ItemNotFound; +import main.symbolTable.item.SymbolTableItem; +import main.symbolTable.utils.Stack; + +import java.util.HashMap; +import java.util.Map; + +public class SymbolTable { + public static SymbolTable top; + public static SymbolTable root; + private static Stack stack = new Stack<>(); + private Map items; + public static void push(SymbolTable symbolTable) { + if (top != null) + stack.push(top); + top = symbolTable; + } + public static void pop() { + top = stack.pop(); + } + public SymbolTable() { + this.items = new HashMap<>(); + } + public void put(SymbolTableItem item) throws ItemAlreadyExists { + if (items.containsKey(item.getKey())) + throw new ItemAlreadyExists(); + items.put(item.getKey(), item); + } + public SymbolTableItem getItem(String key) throws ItemNotFound { + SymbolTableItem symbolTableItem = this.items.get(key); + if( symbolTableItem != null ){ + return symbolTableItem; + } + throw new ItemNotFound(); + } +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemAlreadyExists.java b/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemAlreadyExists.java new file mode 100644 index 0000000..af72af5 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemAlreadyExists.java @@ -0,0 +1,4 @@ +package main.symbolTable.exceptions; + +public class ItemAlreadyExists extends Exception{ +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemNotFound.java b/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemNotFound.java new file mode 100644 index 0000000..1be6f1c --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/exceptions/ItemNotFound.java @@ -0,0 +1,4 @@ +package main.symbolTable.exceptions; + +public class ItemNotFound extends Exception{ +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/item/FunctionItem.java b/Phase2Template/Phase2/src/main/symbolTable/item/FunctionItem.java new file mode 100644 index 0000000..5e41e90 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/item/FunctionItem.java @@ -0,0 +1,34 @@ +package main.symbolTable.item; + +import main.ast.nodes.declaration.FunctionDeclaration; +import main.symbolTable.SymbolTable; + +public class FunctionItem extends SymbolTableItem{ + public static final String START_KEY = "Function:"; + private SymbolTable functionSymbolTable; + private FunctionDeclaration functionDeclaration; + + public FunctionItem(FunctionDeclaration functionDeclaration){ + this.functionDeclaration = functionDeclaration; + this.name = this.functionDeclaration.getFunctionName().getName(); + } + + public SymbolTable getFunctionSymbolTable() { + return functionSymbolTable; + } + + public void setFunctionSymbolTable(SymbolTable functionSymbolTable) { + this.functionSymbolTable = functionSymbolTable; + } + + public FunctionDeclaration getFunctionDeclaration() { + return functionDeclaration; + } + + public void setFunctionDeclaration(FunctionDeclaration functionDeclaration) { + this.functionDeclaration = functionDeclaration; + } + @Override + public String getKey() {return START_KEY + this.name;} + +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/item/PatternItem.java b/Phase2Template/Phase2/src/main/symbolTable/item/PatternItem.java new file mode 100644 index 0000000..27fcf90 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/item/PatternItem.java @@ -0,0 +1,32 @@ +package main.symbolTable.item; + +import main.ast.nodes.declaration.PatternDeclaration; +import main.symbolTable.SymbolTable; + +public class PatternItem extends SymbolTableItem{ + public static final String START_KEY = "Pattern:"; + private SymbolTable patternSymbolTable; + private PatternDeclaration patternDeclaration; + public PatternItem(PatternDeclaration patternDeclaration){ + this.patternDeclaration = patternDeclaration; + this.name = this.patternDeclaration.getPatternName().getName(); + } + + public SymbolTable getPatternSymbolTable() { + return patternSymbolTable; + } + + public PatternDeclaration getPatternDeclaration() { + return patternDeclaration; + } + + public void setPatternDeclaration(PatternDeclaration patternDeclaration) { + this.patternDeclaration = patternDeclaration; + } + + public void setPatternSymbolTable(SymbolTable patternSymbolTable) { + this.patternSymbolTable = patternSymbolTable; + } + @Override + public String getKey(){return START_KEY + this.name;} +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/item/SymbolTableItem.java b/Phase2Template/Phase2/src/main/symbolTable/item/SymbolTableItem.java new file mode 100644 index 0000000..cca7cf1 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/item/SymbolTableItem.java @@ -0,0 +1,14 @@ +package main.symbolTable.item; + +public abstract class SymbolTableItem { + protected String name; + public abstract String getKey(); + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/item/VarItem.java b/Phase2Template/Phase2/src/main/symbolTable/item/VarItem.java new file mode 100644 index 0000000..cef8b61 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/item/VarItem.java @@ -0,0 +1,12 @@ +package main.symbolTable.item; + +import main.ast.nodes.expression.Identifier; + +public class VarItem extends SymbolTableItem{ + public static String START_KEY = "VAR:"; + public VarItem(Identifier identifier){ + this.name = identifier.getName(); + } + @Override + public String getKey(){return START_KEY + this.name;} +} diff --git a/Phase2Template/Phase2/src/main/symbolTable/utils/Stack.java b/Phase2Template/Phase2/src/main/symbolTable/utils/Stack.java new file mode 100644 index 0000000..48bfd82 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/utils/Stack.java @@ -0,0 +1,25 @@ +package main.symbolTable.utils; + +import java.util.ArrayList; + +public class Stack { + private int top; + private ArrayList elements; + public Stack(){ + this.top = -1; + elements = new ArrayList<>(); + } + public void push(T toBePushed){ + this.elements.add(toBePushed); + ++this.top; + } + public T pop(){ + if(this.top == -1){ + return null; + } + --this.top; + T popped = elements.get(this.top + 1); + elements.remove(this.top + 1); + return popped; + } +} diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java new file mode 100644 index 0000000..3b06929 --- /dev/null +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -0,0 +1,104 @@ +package main.visitor.nameAnalyzer; + +import main.ast.nodes.Program; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.PatternDeclaration; +import main.ast.nodes.expression.Identifier; +import main.compileError.CompileError; +import main.compileError.nameErrors.RedefinitionOfFunction; +import main.compileError.nameErrors.RedefinitionOfPattern; +import main.symbolTable.SymbolTable; +import main.symbolTable.exceptions.ItemAlreadyExists; +import main.symbolTable.item.FunctionItem; +import main.symbolTable.item.PatternItem; +import main.visitor.Visitor; + +import java.util.ArrayList; + +public class NameAnalyzer extends Visitor { + public ArrayList nameErrors = new ArrayList<>(); + + @Override + public Void visit(Program program){ + SymbolTable.root = new SymbolTable(); + SymbolTable.top = new SymbolTable(); + + //addFunctions + ArrayList functionItems = new ArrayList<>(); + int duplicateFunctionId = 0; + for(FunctionDeclaration functionDeclaration: program.getFunctionDeclarations()){ + FunctionItem functionItem = new FunctionItem(functionDeclaration); + try { + SymbolTable.root.put(functionItem); + functionItems.add(functionItem); + }catch (ItemAlreadyExists e){ + nameErrors.add(new RedefinitionOfFunction(functionDeclaration.getLine(), + functionDeclaration.getFunctionName().getName())); + duplicateFunctionId += 1; + String freshName = functionItem.getName() + "#" + String.valueOf(duplicateFunctionId); + Identifier newId = functionDeclaration.getFunctionName(); + newId.setName(freshName); + functionDeclaration.setFunctionName(newId); + FunctionItem newItem = new FunctionItem(functionDeclaration); + functionItems.add(newItem); + try { + SymbolTable.root.put(newItem); + }catch (ItemAlreadyExists ignored){} + } + } + //addPatterns + int duplicatePatternId = 0; + ArrayList patternItems = new ArrayList<>(); + for(PatternDeclaration patternDeclaration : program.getPatternDeclarations()){ + PatternItem patternItem = new PatternItem(patternDeclaration); + try{ + SymbolTable.root.put(patternItem); + patternItems.add(patternItem); + }catch (ItemAlreadyExists e){ + nameErrors.add(new RedefinitionOfPattern(patternDeclaration.getLine(), + patternDeclaration.getPatternName().getName())); + duplicatePatternId += 1; + String freshName = patternItem.getName() + "#" + String.valueOf(duplicatePatternId); + Identifier newId = patternDeclaration.getPatternName(); + newId.setName(freshName); + patternDeclaration.setPatternName(newId); + PatternItem newItem = new PatternItem(patternDeclaration); + try{ + SymbolTable.root.put(newItem); + }catch (ItemAlreadyExists ignored){} + } + } + //visitFunctions + int visitingFunctionIndex = 0; + for(FunctionDeclaration functionDeclaration : program.getFunctionDeclarations()){ + FunctionItem functionItem = functionItems.get(visitingFunctionIndex); + SymbolTable functionSymboleTable = new SymbolTable(); + functionItem.setFunctionSymbolTable(functionSymboleTable); + SymbolTable.push(functionSymboleTable); + functionDeclaration.accept(this); + SymbolTable.pop(); + visitingFunctionIndex += 1; + } + //visitPatterns + int visitingPatternIndex = 0; + for(PatternDeclaration patternDeclaration : program.getPatternDeclarations()){ + PatternItem patternItem = patternItems.get(visitingPatternIndex); + SymbolTable patternSymbolTable = new SymbolTable(); + patternItem.setPatternSymbolTable(patternSymbolTable); + SymbolTable.push(patternSymbolTable); + patternDeclaration.accept(this); + SymbolTable.pop(); + visitingPatternIndex += 1; + } + //visitMain + program.getMain().accept(this); + return null; + } + @Override + public Void visit(Identifier identifier){ + + + + return null; + } +} From ed6344fd7cc08c45413c9da2cc1f47efc9e9b135 Mon Sep 17 00:00:00 2001 From: javad Date: Tue, 16 Apr 2024 01:42:31 +0330 Subject: [PATCH 17/23] symbolTable not working --- Phase2Template/Phase2/samples/1.fl | 10 +- .../Phase2/src/main/FunctionCraft.java | 12 +- .../compileError/nameErrors/DuplicateArg.java | 13 + .../nameErrors/FunctionNotDeclared.java | 13 + .../nameErrors/IdenticalArgFunctionName.java | 13 + .../nameErrors/IdenticalArgPatternName.java | 13 + .../nameErrors/PatternNotDeclared.java | 14 + .../nameErrors/VariableNotDeclared.java | 13 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 4 + .../visitor/nameAnalyzer/NameAnalyzer.java | 324 +++++++++++++++++- .../src/parsers/FunctionCraftParser.java | 4 + .../Phase2Template/main/FunctionCraft.class | Bin 1522 -> 2202 bytes .../main/compileError/CompileError.class | Bin 1018 -> 346 bytes .../nameErrors/DuplicateArg.class | Bin 0 -> 1066 bytes .../nameErrors/FunctionNotDeclared.class | Bin 0 -> 1089 bytes .../nameErrors/IdenticalArgFunctionName.class | Bin 0 -> 1116 bytes .../nameErrors/IdenticalArgPatternName.class | Bin 0 -> 1119 bytes .../nameErrors/PatternNotDeclared.class | Bin 0 -> 1085 bytes .../nameErrors/RedefinitionOfFunction.class | Bin 0 -> 1098 bytes .../nameErrors/RedefinitionOfPattern.class | Bin 0 -> 1094 bytes .../nameErrors/VariableNotDeclared.class | Bin 0 -> 1089 bytes .../main/grammer/FunctionCraft.g4 | 4 + .../main/symbolTable/SymbolTable.class | Bin 0 -> 1940 bytes .../exceptions/ItemAlreadyExists.class | Bin 0 -> 335 bytes .../symbolTable/exceptions/ItemNotFound.class | Bin 0 -> 320 bytes .../main/symbolTable/item/FunctionItem.class | Bin 0 -> 1919 bytes .../main/symbolTable/item/PatternItem.class | Bin 0 -> 1903 bytes .../symbolTable/item/SymbolTableItem.class | Bin 0 -> 581 bytes .../main/symbolTable/item/VarItem.class | Bin 0 -> 1197 bytes .../main/symbolTable/utils/Stack.class | Bin 0 -> 1158 bytes .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 0 -> 21882 bytes ...nCraftParser$AccessExpressionContext.class | Bin 3865 -> 3865 bytes ...unctionCraftParser$AccessListContext.class | Bin 2550 -> 2550 bytes ...raftParser$AdditiveExpressionContext.class | Bin 2904 -> 2904 bytes ...unctionCraftParser$AssignmentContext.class | Bin 3418 -> 3418 bytes .../FunctionCraftParser$BodyContext.class | Bin 2825 -> 2825 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...ionCraftParser$ChompStatementContext.class | Bin 2692 -> 2692 bytes ...tionCraftParser$ChopStatementContext.class | Bin 2681 -> 2681 bytes ...FunctionCraftParser$ConditionContext.class | Bin 3699 -> 3699 bytes ...raftParser$EqaulityExpressionContext.class | Bin 2998 -> 2998 bytes ...unctionCraftParser$ExpressionContext.class | Bin 2712 -> 2712 bytes ...onCraftParser$FilterStatementContext.class | Bin 3709 -> 3709 bytes ...ctionCraftParser$ForStatementContext.class | Bin 2995 -> 2995 bytes ...CraftParser$FunctionArgumentsContext.class | Bin 3030 -> 3030 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...nctionCraftParser$IfStatementContext.class | Bin 3625 -> 3625 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3336 -> 3336 bytes ...ctionCraftParser$LenStatementContext.class | Bin 2670 -> 2670 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes .../FunctionCraftParser$LoopBodyContext.class | Bin 4284 -> 4284 bytes ...onCraftParser$LoopDoStatementContext.class | Bin 2688 -> 2688 bytes .../FunctionCraftParser$MainContext.class | Bin 2718 -> 2718 bytes ...tParser$MatchPatternStatementContext.class | Bin 2918 -> 2918 bytes ...rser$MultiplicativeExpressionContext.class | Bin 2935 -> 2935 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes ...onCraftParser$PatternMatchingContext.class | Bin 4130 -> 4130 bytes ...raftParser$PreUnaryExpressionContext.class | Bin 2878 -> 2878 bytes ...tionCraftParser$PushStatementContext.class | Bin 3085 -> 3085 bytes ...tionCraftParser$PutsStatementContext.class | Bin 2754 -> 2754 bytes .../FunctionCraftParser$RangeContext.class | Bin 3488 -> 3488 bytes ...ftParser$RelationalExpressionContext.class | Bin 3103 -> 3103 bytes ...onCraftParser$ReturnStatementContext.class | Bin 2641 -> 2641 bytes ...FunctionCraftParser$StatementContext.class | Bin 4183 -> 4183 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 68551 -> 68913 bytes 66 files changed, 423 insertions(+), 14 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/DuplicateArg.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/FunctionNotDeclared.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/IdenticalArgFunctionName.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/IdenticalArgPatternName.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/PatternNotDeclared.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfFunction.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfPattern.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/VariableNotDeclared.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/SymbolTable.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemAlreadyExists.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemNotFound.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/item/FunctionItem.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/item/PatternItem.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/item/SymbolTableItem.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/item/VarItem.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/utils/Stack.class create mode 100644 Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/1.fl index e712289..abefafd 100644 --- a/Phase2Template/Phase2/samples/1.fl +++ b/Phase2Template/Phase2/samples/1.fl @@ -1,9 +1,7 @@ -def compare() - if (a > b) - return "true"; - else - return false; - end + + +def compare(a, b) + return a+b; end def main() diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index a399334..acf5e1c 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -3,7 +3,9 @@ import main.ast.nodes.Program; +import main.compileError.CompileError; import main.visitor.astPrinter.AstPrinter; +import main.visitor.nameAnalyzer.NameAnalyzer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -20,8 +22,12 @@ public static void main(String[] args) throws IOException{ CommonTokenStream tokens = new CommonTokenStream(flLexer); FunctionCraftParser flParser = new FunctionCraftParser(tokens); Program program = flParser.program().flProgram; - AstPrinter astPrinter = new AstPrinter(); - astPrinter.visit(program); - +// AstPrinter astPrinter = new AstPrinter(); +// astPrinter.visit(program); + NameAnalyzer nameAnalyzer = new NameAnalyzer(); + nameAnalyzer.visit(program); + for(CompileError compileError : nameAnalyzer.nameErrors){ + System.out.println(compileError.getErrorMessage()); + } } } diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java new file mode 100644 index 0000000..4c778fb --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class DuplicateArg extends CompileError { + private int line; + private String name; + public DuplicateArg(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> argument " + this.name + " is duplicated";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java new file mode 100644 index 0000000..d6d1df1 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class FunctionNotDeclared extends CompileError { + private int line; + private String name; + public FunctionNotDeclared(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> function " + this.name + " is not declared";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java new file mode 100644 index 0000000..d908d35 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class IdenticalArgFunctionName extends CompileError { + private int line; + private String name; + public IdenticalArgFunctionName(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> argument " + this.name + " has same name with function";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java new file mode 100644 index 0000000..05f2429 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class IdenticalArgPatternName extends CompileError { + private int line; + private String name; + public IdenticalArgPatternName(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> target variable " + this.name + " has same name with pattern";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java new file mode 100644 index 0000000..fcea50d --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java @@ -0,0 +1,14 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; +import main.symbolTable.item.PatternItem; + +public class PatternNotDeclared extends CompileError { + private int line; + private String name; + public PatternNotDeclared(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> pattern " + this.name + " is not declared";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java new file mode 100644 index 0000000..8ec1072 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class VariableNotDeclared extends CompileError { + private int line; + private String name; + public VariableNotDeclared(int line, String name){ + this.line = line; + this.name = name; + } + public String getErrorMessage(){return "Line:" + this.line + "-> variable " + this.name + " is not declared";} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index cb96762..9b169da 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -47,6 +47,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_ = new Identifier($id1.text); id_.setLine($id1.line); VarDeclaration newVarDec = new VarDeclaration(id_); + newVarDec.setLine($id1.line); $argRet.add(newVarDec); } (COMMA id2 = IDENTIFIER @@ -54,6 +55,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_2 = new Identifier($id2.text); id_2.setLine($id2.line); VarDeclaration newVarDec2 = new VarDeclaration(id_2); + newVarDec2.setLine($id2.line); $argRet.add(newVarDec2); } )* @@ -63,6 +65,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_3 = new Identifier($id3.text); id_.setLine($id3.line); VarDeclaration newVarDec3 = new VarDeclaration(id_3); + newVarDec3.setLine($id3.line); } ASSIGN e1 = expression { @@ -74,6 +77,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_4 = new Identifier($id4.text); id_4.setLine($id4.line); VarDeclaration newVarDec4 = new VarDeclaration(id_); + newVarDec4.setLine($id4.line); } ASSIGN e2 = expression { diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index 3b06929..1053591 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -2,22 +2,33 @@ import main.ast.nodes.Program; import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.declaration.MainDeclaration; import main.ast.nodes.declaration.PatternDeclaration; -import main.ast.nodes.expression.Identifier; +import main.ast.nodes.declaration.VarDeclaration; +import main.ast.nodes.expression.*; +import main.ast.nodes.expression.value.FunctionPointer; +import main.ast.nodes.expression.value.ListValue; +import main.ast.nodes.expression.value.primitive.BoolValue; +import main.ast.nodes.expression.value.primitive.FloatValue; +import main.ast.nodes.expression.value.primitive.IntValue; +import main.ast.nodes.expression.value.primitive.StringValue; +import main.ast.nodes.statement.*; import main.compileError.CompileError; -import main.compileError.nameErrors.RedefinitionOfFunction; -import main.compileError.nameErrors.RedefinitionOfPattern; +import main.compileError.nameErrors.*; import main.symbolTable.SymbolTable; import main.symbolTable.exceptions.ItemAlreadyExists; +import main.symbolTable.exceptions.ItemNotFound; import main.symbolTable.item.FunctionItem; import main.symbolTable.item.PatternItem; +import main.symbolTable.item.VarItem; import main.visitor.Visitor; import java.util.ArrayList; public class NameAnalyzer extends Visitor { public ArrayList nameErrors = new ArrayList<>(); - + boolean isFunctionCallId = false; + boolean isPatternMatchId = false; @Override public Void visit(Program program){ SymbolTable.root = new SymbolTable(); @@ -96,9 +107,312 @@ public Void visit(Program program){ } @Override public Void visit(Identifier identifier){ - + if(isFunctionCallId){ + try{ + SymbolTable.root.getItem(FunctionItem.START_KEY + identifier.getName()); + }catch (ItemNotFound e){ + nameErrors.add(new FunctionNotDeclared(identifier.getLine(), identifier.getName())); + } + } else if (isPatternMatchId) { + try{ + SymbolTable.root.getItem(PatternItem.START_KEY + identifier.getName()); + }catch (ItemNotFound e){ + nameErrors.add(new PatternNotDeclared(identifier.getLine(), identifier.getName())); + } + } else{ + try{ + SymbolTable.root.getItem(VarItem.START_KEY + identifier.getName()); + }catch (ItemNotFound e){ + nameErrors.add(new VariableNotDeclared(identifier.getLine(), identifier.getName())); + } + } + isFunctionCallId = false; + isPatternMatchId = false; + return null; + } + @Override + public Void visit(VarDeclaration varDeclaration){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + VarItem varItem = new VarItem(varDeclaration.getName()); + try{ + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists ignored){ + } return null; } + @Override + public Void visit(FunctionDeclaration functionDeclaration){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + for(VarDeclaration varDeclaration : functionDeclaration.getArgs()){ + if(varDeclaration.getName().getName().equals(functionDeclaration.getFunctionName().getName())){ + nameErrors.add(new IdenticalArgFunctionName(varDeclaration.getLine(), varDeclaration.getName().getName())); + } + VarItem varItem = new VarItem(varDeclaration.getName()); + try{ + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists e){ + nameErrors.add(new DuplicateArg(varDeclaration.getLine(), varDeclaration.getName().getName())); + } + } + SymbolTable.push(currentScopeSymbolTable); + for(Statement statement : functionDeclaration.getBody()){ + statement.accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(PatternDeclaration patternDeclaration){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + if(patternDeclaration.getPatternName().getName().equals(patternDeclaration.getTargetVariable().getName())){ + nameErrors.add(new IdenticalArgPatternName(patternDeclaration.getTargetVariable().getLine(), + patternDeclaration.getTargetVariable().getName())); + } + VarItem varItem = new VarItem(patternDeclaration.getTargetVariable()); + try{ + currentScopeSymbolTable.put(varItem); + } + catch (ItemAlreadyExists ignored){ + + } + SymbolTable.push(currentScopeSymbolTable); + for(Expression expression : patternDeclaration.getConditions()){ + expression.accept(this); + } + for(Expression expression : patternDeclaration.getReturnExp()){ + expression.accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(MainDeclaration mainDeclaration){ + for(Statement statement : mainDeclaration.getBody()){ + statement.accept(this); + } + return null; + } + @Override + public Void visit(ReturnStatement returnStatement){ + if(returnStatement.hasRetExpression()){ + returnStatement.getReturnExp().accept(this); + } + return null; + } + @Override + public Void visit(IfStatement ifStatement){ + for(Expression expression : ifStatement.getConditions()){ + expression.accept(this); + } + for(Statement statement : ifStatement.getThenBody()){ + statement.accept(this); + } + for(Statement statement : ifStatement.getElseBody()){ + statement.accept(this); + } + return null; + } + @Override + public Void visit(PutStatement putStatement){ + putStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(PushStatement pushStatement){ + pushStatement.getInitial().accept(this); + pushStatement.getToBeAdded().accept(this); + return null; + } + @Override + public Void visit(LenStatement lenStatement){ + lenStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(LoopDoStatement loopDoStatement){ + for(Statement statement : loopDoStatement.getLoopBodyStmts()){ + statement.accept(this); + } + for(Expression expression : loopDoStatement.getLoopConditions()){ + expression.accept(this); + } + if(loopDoStatement.getLoopRetStmt() != null){ + loopDoStatement.getLoopRetStmt().accept(this); + } + return null; + } + @Override + public Void visit(ForStatement forStatement){ + SymbolTable currenctScopeSymbolTable = SymbolTable.top; + VarItem varItem = new VarItem(forStatement.getIteratorId()); + try{ + currenctScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists ignored){ + + } + SymbolTable.push(currenctScopeSymbolTable); + for(Expression expression : forStatement.getRangeExpressions()){ + expression.accept(this); + } + for(Statement statement : forStatement.getLoopBody()){ + statement.accept(this); + } + for(Expression expression : forStatement.getLoopBodyExpressions()){ + expression.accept(this); + } + if(forStatement.getReturnStatement() != null){ + forStatement.getReturnStatement().accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(FilterStatement filterStatement){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + VarItem varItem = new VarItem(filterStatement.getIteratorId()); + try{ + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists ignored){ + + } + SymbolTable.push(currentScopeSymbolTable); + filterStatement.getFilterExpression().accept(this); + for(Expression expression : filterStatement.getRangeExpressions()){ + expression.accept(this); + } + for(Expression expression : filterStatement.getConditionalExpressions()){ + expression.accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(MatchPatternStatement matchPatternStatement){ + isPatternMatchId = true; + matchPatternStatement.getPatternId().accept(this); + matchPatternStatement.getMatchArgument().accept(this); + return null; + } + @Override + public Void visit(ChompStatement chompStatement){ + chompStatement.getChompExpression().accept(this); + return null; + } + @Override + public Void visit(ChopStatement chopStatement){ + chopStatement.getChopExpression().accept(this); + return null; + } + @Override + public Void visit(AssignStatement assignStatement){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + VarItem varItem = new VarItem(assignStatement.getAssignedId()); + try{ + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists ignored){ + + } + SymbolTable.push(currentScopeSymbolTable); + assignStatement.getAssignExpression().accept(this); + if(assignStatement.isAccessList()){ + assignStatement.getAccessListExpression().accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(ExpressionStatement expressionStatement){ + expressionStatement.getExpression().accept(this); + return null; + } + @Override + public Void visit(AppendExpression appendExpression){ + appendExpression.getAppendee().accept(this); + for(Expression expression : appendExpression.getAppendeds()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(BinaryExpression binaryExpression){ + binaryExpression.getFirstOperand().accept(this); + binaryExpression.getSecondOperand().accept(this); + return null; + } + @Override + public Void visit(UnaryExpression unaryExpression){ + unaryExpression.getExpression().accept(this); + return null; + } + @Override + public Void visit(AccessExpression accessExpression){ + if(!accessExpression.getArguments().isEmpty()){ + isFunctionCallId = true; + accessExpression.getAccessedExpression().accept(this); + } + else{ + accessExpression.getAccessedExpression().accept(this); + } + for(Expression expression : accessExpression.getArguments()){ + expression.accept(this); + } + for(Expression expression : accessExpression.getDimentionalAccess()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(LambdaExpression lambdaExpression){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + for(VarDeclaration varDeclaration : lambdaExpression.getDeclarationArgs()){ + VarItem varItem = new VarItem(varDeclaration.getName()); + try{ + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists e){ + nameErrors.add(new DuplicateArg(varDeclaration.getLine(), varDeclaration.getName().getName())); + } + } + SymbolTable.push(currentScopeSymbolTable); + for(Statement statement : lambdaExpression.getBody()){ + statement.accept(this); + } + for(Expression expression : lambdaExpression.getArgs()){ + expression.accept(this); + } + SymbolTable.pop(); + return null; + } + @Override + public Void visit(ListValue listValue){ + for(Expression expression : listValue.getElements()){ + expression.accept(this); + } + return null; + } + @Override + public Void visit(FunctionPointer functionPointer){ + SymbolTable currentScopeSymbolTable = SymbolTable.top; + VarItem varItem = new VarItem(functionPointer.getId()); + try { + currentScopeSymbolTable.put(varItem); + }catch (ItemAlreadyExists ignored){ + + } + return null; + } + @Override + public Void visit(BoolValue boolValue){ + return null; + } + @Override + public Void visit(IntValue intValue){ + return null; + } + @Override + public Void visit(StringValue stringValue){return null;} + @Override + public Void visit(FloatValue floatValue){return null;} + } diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index cba041b..1d773f0 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -389,6 +389,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() Identifier id_ = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getText():null)); id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); VarDeclaration newVarDec = new VarDeclaration(id_); + newVarDec.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); _localctx.argRet.add(newVarDec); setState(109); @@ -406,6 +407,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() Identifier id_2 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getText():null)); id_2.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); VarDeclaration newVarDec2 = new VarDeclaration(id_2); + newVarDec2.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); _localctx.argRet.add(newVarDec2); } @@ -430,6 +432,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() Identifier id_3 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getText():null)); id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); VarDeclaration newVarDec3 = new VarDeclaration(id_3); + newVarDec3.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); setState(116); match(ASSIGN); @@ -453,6 +456,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() Identifier id_4 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getText():null)); id_4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); VarDeclaration newVarDec4 = new VarDeclaration(id_); + newVarDec4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); setState(122); match(ASSIGN); diff --git a/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class b/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class index bb4411adb09e7cdf8628462473f229dbeec06593..257a4f4f5c2c6a5435be3b1657870828047bf1c2 100644 GIT binary patch delta 1037 zcmaiyOHUI~6vuzJJZ>pNKoqd?0Y)WYf`czqsz_B35Kt+iqJl#m>tH*rGXshXyYLHW zy3#M;8e=fJFz!rTyZ1Y|bRnL$qBSwPIrlvO|8vegU+Z6NihTP1?mZCa!D=KC+S{42 z9M@cSd?(0yrfX&FxND_X9@(Bb`O7Fg4h`q)=w!cvNv|SOOdRsOtmi9Q#uu$+%UlYa zv>Eq2Yh~Q=gII)v9MT*%I6|Ld^IvilVJEOXOPCd{UELKpqd)zzdX8~i({JR7aYE7j z8)qX&q3>G$r2Q~ZRCRUF7E1;UPBEycc1!Lp8{lcnO_>)K7VTsZ)0|f9EX|+HW^zut zJdt^(!l>gcLz-cO{5eJxO(psgN@B$i?2J%mmxTD|5}d4g(R17&5qP$hktM_#GdRz< zqA_I$rIk(CzHg;$#h+bCiQ}fEWReS-iw2jN+Sr@G_EzA^#JM6%+7;ri^4iKhl`*I;!7tRPmf0MeU^G z1M&XwE6zm2YmBZj@pAo3k*kU#*M90nZb8#R6RkvPV>esrVHE-v5>HVr;DZ9WS2oedQSJ(O zEsIjWhtN7Bgf;gxX-$KsS<|L*HJw@xpKpSalgw)2xG(6w=ph0cmqdw(bC>kLOx+Js CXYpeI delta 398 zcmaiw%Su8~7=^!cyqr8WFuNKNsntNR)737PrKK4J1r2K=;ouC?I9fCd>JiQ)dJ9KE zgP>`{9;F9}mKr#W4gcEzWv%t^{WAPLXn+2^y#ob~+xEGcNM2Xnx^w3?-B!bMs?FA! z=hj;_&nf&}{YSGLuvqkOgHL`s^i{O`Lk4pv|M6>H&cH6+U)63}Zlm6`IP{;x7nd1K zt%0IJh_Irg%n=&GQ2G_4-EA)^cG?hSS#hX0zzVC%BCN44kq-HT0G4piKeh4?eRh%o zRb%RnNMn>ZW26`-!vt9-$ureeuJqWdZD`(NQ)f$VQK@f}lS`ZhcG#6qifQro2udZ! i4D)(KR@?0BXTua>RxN`AkxCLXDRU&WRZGaWLgW`fxk11H diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/CompileError.class b/Phase2Template/out/production/Phase2Template/main/compileError/CompileError.class index 3a88c4619143fc92c56c5a077df22302057e4693..f3a0ff7ac934766a071df413abaf316ec8ed3b41 100644 GIT binary patch delta 164 zcmeyxev8TG)W2Q(7#J8F8HBhPm>8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(CVHw&=4G58&7#P_4%7?+Obm=5?Ld+f$kPYXj6j-IYdZtu oMzAy&kOWCHFfcQ414$l;0wB%Hz`(-Dz{kK36a`ujB$*fl0a_Lm5dZ)H literal 1018 zcmaJ=(QXn!6g>mT(sc_ht=3wtRH+55<<*EWQPM^dY9DAY#;0MKz?5Z%><*3n6F)#q*e^sH&RLSmLXlKc9)RDk_FqrT{sNeV=h(Q)#Hiu#G&tNzurtZ3>i-XHpYA;np(Nse3E8JR$#a?0mELU zHJ@6Y4>8&7*^hEZ35%-$+0j)-4AluVX(u7ORV&|#0ptF zvr)#bh3BDUdkp0pL8Us^BT=8}I#cn8yGHvL4BsjVtzzJe3PCp3yM`X}yzMu)u5;eSGVq4pE3wsi%owtt1?9}#ea z)*>YWSz0YblTPacij-z)*u+Efs6a%+A}b_H5y2K7#Wb%XAIR4(iQy8<*H{I<6FP;E nB}+I^g|M;{+4;C~8jmB?HlEO)qqC>mT$GU|UtF=}uD78R8cr{|0RJ4(V>H`hN_%tjNn6k`}-JwbUi9bV= zHYR=W2l%6mcb7G;ffzH{nS1Y^Irq+)J3oHjdw zJ2)zFZ#bI>WlF3h{nFs~1q=#lJhf24P6p2cQFj?Cewl<%@{1Y!dT?5jc1oru>}4phJW8b7mjJhMT#g|+;zLs2$I!q zDmLAK;UI?uk`_`nZXnIDIpR{)Ts;~~ zPrUVg?bjMJ3Pbv(RMH$WB+Hdf78ztM{Oi*i1lxw6`C)&IbuE%}R zV@P>Y2?ll)hRWM0V3~}e7eldi#?N`pn-9_q zND2&BCScetAI-Z~=1mND7a}{9LPPf`g+hzcJDH5S!awC*FG@>A6(~H|tNMk#P5_T*+4vW0YQ2NsXsm}FK#GRPdy~$mp z{R@UK<(cZnz$yDXu6mvbN-eF2lW~0p7PoZ9@|WZ3#aJwWf11I+@16OwgiPh$MQ;(aC7E z?tmT}X&=LJqq9)`4p!Z`f>qtS!qT@0xJr8wDcUo%XKCe-r*Lazai(rq$34<0Kt#hL zDI`h|!3OTfG|wX)$X73k;Sx*NxCMMAbOIqunsA^r!^n0d=i|spJcv-6ct~f4{yn14 PL7B81NfkW7KGuH&6^RxE literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/IdenticalArgFunctionName.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/IdenticalArgFunctionName.class new file mode 100644 index 0000000000000000000000000000000000000000..1afd11a2b0ff8f53676d6d437ddd99d646157cd9 GIT binary patch literal 1116 zcmbVL-EI;=6#j-HP~1YrYOS^HR$B|$mMfzX)1(rKB(z@8V2oG8GQzaW4A~iK`X)Yx zCT&c5;REsE=%7-YP#97#rIPl5VXjze&m)8RG_nqE!eMwi?X37<9L7`{U7@V>xPKV*>LcY@ zsnszZGbDYfXk(2qUd}-ti)0L484Ar)e$FdCSG`Kh22%B^1**K@;5L>RmIwSy)U@)r zeJ5?7BxAXE)RO60d>Y@Zl4?15bJJ8z59vybU((8%BS!si!E%Y@i?S@hhgh? zW28FQXCm&;xEpouSsh$3d@fFK9s|dfyy2?r3$xYK`fN0;PQcQ(8SoDi z__v)?;o0gWeQ}5y_x+Z%f(UmSN{OK6b7O=_qs*{9b*EXSrm;(t@^2_j%J^Q`q(_~g zC!3&;#w3#Hg-1K1sk;Muf~36>|VEOHd? z9$DP68&+_iGzt)GATJc!dgk8~hczN8G7Sh&V5;0vJ>2(zRJ2P!j+>_l=d djy#982(^w4+B0p&+FK{i4QLLxPROCIwAOYK)(jcGDhQcbnY>!$0w7 zXaX_egFnC@Wt@9StZDUwx!mr|?#w(h&+Pp8dG#H@F1B4{Fy$cY;Tm!b%L5+BYDW!* zK`35pt#q|MqA=uM1~RZa3{&Ne_B8UCcHnxr4v*obtOC8 zz7K4lBxAX>hGD(j7=Bbw}(`gBX_n!s>QJ8^i1?rL3`<5BG)b ztFFmoh2d#b(F?Y<<6Eu?);~*2@tNP}#y3R0AMx*hB2xWf(yU?*4_&Nc&B3FH{&j}c z-^~f+nK}_^kCKk;@s3scoZ)kMg!j}i$>$B1-B6g-rcx)T!`g^h+U${&KO7Iwhhl>H z#}WItN5`ULYoi>dA?iE~TY(kCy4R3W=z7SF5ynAy%fu130AEIHTy;%7MR$07+Q`x-4%-7g(p4JkwwB~7@rq4xz z!rh@0KXJnX?vh3UVi*=n5m1Hz7O|AVJdbstP`Mz43(Q>M2JnTfGl)=fWCuz!itNR5 eA&oqRd$H9r?$e&9y9f09D3j)rw1LOi!on|ltsyo5 literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/PatternNotDeclared.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/PatternNotDeclared.class new file mode 100644 index 0000000000000000000000000000000000000000..a459e6cf8071aacb4a58d7c635cd208602c30a82 GIT binary patch literal 1085 zcmb7DZEq4m5PlYrgX;kmtF>0!Yo!*jE%BQX(?rq6CbXK+V2q!ZV*^)?U2?ZH=|Ayj zXwt@{AN&FSDC68qA_ih&2)i?L&&)F~J3oKj`~dI@2PRTT8^~C=g)GCyn7gv!sPV-0 z#9QB2exo&`Fl1l4($$9y>1wT;M-F)driCR~42^kb$;WY+pz(ogEqr;Z^c&%L+!uX@ zjOR+hz>dR6MGGY?lQDE+D7Vk~1#fs<4jLWpyK>MhQ_f`zcd){+I_4wMQqtl2qpOD` z1)578Fzi;3=Ur>_CWde@LXAW+hPdfR+|kOv zWcX5@X>9_G$=`9=_e4->D>a%xe9M3K%VgdZ~4E}xZTsXQp+p8o*i+f(j z)q=Wf9ZMU`%+qPoxr8DGyH6H7cEcJTkVXL_8Wu?* zQHluG@i3uz9_c`_enkvdDBR#S@RiUhge+OY0fi{C70JaUavF~!)CM-`&e6AR`rD|I MW|CCHQ|x2yH_9XwWdHyG literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfFunction.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..23fcaa8829a0b5e6f5ebc12e1b1b99432409cb0b GIT binary patch literal 1098 zcmbVLQBM;=5dOB*UV9!bRs<2nLyD9N^ud@IYe=+_NKzmXf-ycV*KK?By4&1sN%$xJ z3{4;=Jop3rQO4QpC7x;HgSp(?%-lEg&Ccxn{B`pKz#Ht?$Y91o*1;|07*+<{mvv7K zhJGO4g`o=T&6L5Ad+keK?=s9(H%|-5qhP^ya2pQ8^T}Yz2jetR{ex(WjtTaaJnHO? zq-QjSY~V}5!1hhHqJt9V$Y}x@%B^#L!RrB+-TJW(ec5f4sqV6ayO?KK9PqwqD(P|k z(bqlFBF&|a7&fZ=lcAfFE{27v$WtnzsoGRRsYT@-js|BUJmF_ST$J*7aLPm9*oiZ% zdp_~LX#GbI8pP5SI&SxYh$7x4mig+`a_wU^3O%t$<6&5y-qRh^G={miO6f?4e0U&q zPqm{wRvFgJd0w&YT{j)~8Ene)SK!IzP)vb;PT`Nv&V{EN>4qgKnmh=O zeJ!ZP&c2i)Yz91vL}a1Hus(67X{B1&qP_Sxl=fnLF09fe&d?P#FD(U0m>W$p14cV` zkK_VbpUmEwf3@#mwdHGAwXJK+ev5&NB+JN>%#$q8W1~pv?vuwIhhYg1$TG?N@i-oimQzGK8Nis>c+02C9Nuh7z zV<@x;{ow=nP~x541y>RTS@!PS*>mr?bMD-qzixg2c#ZumVu+`Zuy6}WhK(_|Wv#2m z6WbAQU01oaM#N!AzOtpQ4;bR*N;`uzGAU#&+=j*QY&KZ(agfHVeGom-H^H`&r~UU_ zYvD?Ugkwv=z>Z9^oP|6VY170p6q@J!g4Y}_2ep=VZ8@kHsO*A;yI5ja8S{~7DB0!u zqpgRu@-&y)W7sJl&4yNHw-}b^BHL6#L-nYHe3QyMnT|WcJ>wn6FG_W})8?*i{BSd& zhc@v(Z~ngobs`xE?TdXZJdY2EWT`y2+H6Zr-L5#K<}j?yRdnA-#<2KCDeY;OPmYBi zs-Bm|Cc~CF%}cg-P>jYFRlhh1`cY*0Bpzo`!gdNzjLtg@r9WM;<%JrFuo;2$hrFwm zd&%&n91%DK2ITL!>^Z_KHI*7oC-n#{>}q7^ufVg*iI@Zb9KoM<&P7+(qjH5Q8r*SO zwiYC?btI*58xHq8;iXVz*q%Alyi!xxrJ49Qlx8A07dGhz$LM~Vmj;3?%ylLk1Ecx6 zM|PRKPiE%Kzv_3e>iRWO)!l0>eDi@TWD7`;O_R;glSPiw-KU*m5QbH(k!O+{8s@JI zk)c_~gOKKh?*qB&6){|4;RbhruY``luq6FR%g-ES$%UEYc<7@x@QA)?!fnx8M47xS LttxnmJ*@r)c90l} literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/VariableNotDeclared.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/VariableNotDeclared.class new file mode 100644 index 0000000000000000000000000000000000000000..cdf6a8307ce161e844ece76d13139bcc36e68976 GIT binary patch literal 1089 zcmb7D(QXn!6g>mT0&byVwXM~5YpDfni}A^bX`*N&39Sz_7~|8hOkm40Lv{y}{)wNV zNgIbI_FbfbGhu-+S+quzg{HKMH6?i!mv8xL(x#u=K7iqUZ}97Wzc^KJOF7N_nByTw6^%TO3nk7}jnS#Hx81l#5~cjZ)gz9v`0wJy1PA zgKdVL;3hBG!I3qM`d~53@hz#e)r;CuNMk355_Szd35vYOQ2NsXM^4pHM4gz`{g~TY zc^3>{%CYK3z#02{E_<%w+!>A5 zJ argRet]: Identifier id_ = new Identifier($id1.text); id_.setLine($id1.line); VarDeclaration newVarDec = new VarDeclaration(id_); + newVarDec.setLine($id1.line); $argRet.add(newVarDec); } (COMMA id2 = IDENTIFIER @@ -54,6 +55,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_2 = new Identifier($id2.text); id_2.setLine($id2.line); VarDeclaration newVarDec2 = new VarDeclaration(id_2); + newVarDec2.setLine($id2.line); $argRet.add(newVarDec2); } )* @@ -63,6 +65,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_3 = new Identifier($id3.text); id_.setLine($id3.line); VarDeclaration newVarDec3 = new VarDeclaration(id_3); + newVarDec3.setLine($id3.line); } ASSIGN e1 = expression { @@ -74,6 +77,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: Identifier id_4 = new Identifier($id4.text); id_4.setLine($id4.line); VarDeclaration newVarDec4 = new VarDeclaration(id_); + newVarDec4.setLine($id4.line); } ASSIGN e2 = expression { diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/SymbolTable.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/SymbolTable.class new file mode 100644 index 0000000000000000000000000000000000000000..5898fc1631af4bba3e6c7a01b10454959f22c4fd GIT binary patch literal 1940 zcma)6ZBr9h7(F)$EZHm&0uscCB1Mvbq_0*?ibV^G25cLLPWx>MJFpsd)9l8PpVEKf zON)cdR6qH_-_+^!+?y4*?2heZHh1^l=Q-y*Z};8bul@wEf(L0NkkpVe(1(73!oF!c z74Kkw+ig8Cw_8@F@!?${>AP)#srtvPsuFU*KpMJ0pXZy+N3kwl-)?!8hCHw8FfgcL z$iOhNaVkQ_0;zV_+Y>lbtUoj#o0XR7>{jk?KeU>DwX`Lnat1~*M!9V%cdS^78tNEF zUc-cevzQdfo<{c@R9H^!Riy+^F1Al$V=+a z4SazwWtO|Xz_plaMAIHq2?=%8z}L7&D8?&rIR+}mQNwkC;(ux1bp18A>+I-QLS8mU zo(_NGr7;!~cVAI8@ahR~Q z#UO6EI}|=#w;gMTc6)ZJ8Zg4sfuU3C%QHMU5T1Bsfj^dp5ha977wc zQSr+Yfw`#CSQi0(^`xr=G*)_D0aU})4pLS6-=N7yay)X;Y%?>Vkb6`EwPq_AYQ5oh zJ56iNZZU`1P;M9H6k(b(J6I6DVnkGYfvbe4E2#)_9TFW?prL|-#mVd|8{2?wKp_ssL$Q)yl(4W43zdwJ3 z&yx7*bnFFWah_~bn8O9dHQvJuxQL8(+@7DhH0NwO~&1;Og~o;PT)tb2{irza?`_S literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemAlreadyExists.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemAlreadyExists.class new file mode 100644 index 0000000000000000000000000000000000000000..847a68572245db7b887e2dfb3fe55df3d4f0cd78 GIT binary patch literal 335 zcmb79%SyvQ6g@YOrp9W;Lig@e(D?vGC{jTPZYrCEf&G zx$+L2JLkU7=hyoOfEf;QM2IsaBcvD*CQtfBE34gunr|w84#qpe;LtoXOQRkwlbnQd6Fw)2f?LrX}m{fY_W!Z^NL*CjW77vZq*m9|UW zm~P5XFbR)FnpE+xEf<9R-mjaAZ;X{?(?55dcj|D2Ohk7^@b literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemNotFound.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/exceptions/ItemNotFound.class new file mode 100644 index 0000000000000000000000000000000000000000..36c0841fb94ece69846f703e3968d1d7e08f8e73 GIT binary patch literal 320 zcma)1%TB{E5S-1Uflz1*U%;*OfIpxJ387Z16!lWnyOUbr%CW1&LGW3ekT~!G{V2pH zDpHTw((KOIyQA6ve0>9Wz%WICFhSHuj2_`?D_^BB(mspXTcLJdJ4@)@X{-G`AspYV z6PysnrPNl`?`7`Hlgy10>hF6k7G9N0=jX1m8$$HxHi|IFv{lQd%vIG55H2%UNVAre zZWkQH$iL{CFvr?mK}%Jl;3q{C3RMQg8OxxKKb)mqAd)6bvSs8=d<>lt zoZ*KL;6pjyZ4;W7;>V9{v)OykJ@@R{?ayDwKLE_*MFJ5-HMHqyM~q>-%uU>5DtmOot- zMT@&!tuWkKt>$u18n#mso>8i=8Ua8kBb&fEbZh9*aUMyA$^T1d=-w7Gz+K~I!H`Z* zG?NgY_FUn4#L!qS30s<5rf{kB1@vj?*KrY-7{;1Pw@hNts9>$o1uFEB?{mZA_O?-w zu4!*)m6VrtT)_ZCn_VT8Y#lYE<0^(3PJ|5Y5yMcehww&**0V|4{81g(Fvf7P%y&i3 zv5Q>3G35@ud6L`GW4N9^UAhHlhK|De{Ok1(D@*Sfx&nX=ZdF7aX<7~xo?)0yH>>-% zEuPpQDRSfn+O1X77HgIArf{p~WJs<$MQ&|y*HmWpKeovoljx6~)}U(UfQ>R@mZ3jn zfsjTF!+{gdQjv1Kx_ugQNBlO=N>xpT3x_<-FclR3_jAxlr2#EQ{jG=thD5=sxJ8jS zEt2wlScOUDLx!FO$B~|N`QA$*cbt+J2kDatB4=243{Mi6!&4274yJlrG9zUl^f-9idYfMGE5> z0G%$HMR0>2I>*&_x;^PPMr-YupfN+Ux3sSEE@i%hWo{lq%VfSmJ3`kHdJmEMTFtyk zV-jsNcG9S$16_10ox?5q(qGHRZA{XPkkl%l%G83Q;aEkgLOjcuLbC%oc<7z*a?wXwQ)sc8uxsxFcGbpNU9}~`zKm8 z5Yd{63=)x{Gl&F=JRo&yx+_Ae;RGp?I;QPIGn?TMn}pv~6b~sUf=75vzi~pCrDp~U N3W?rwSi*CpegiDg-n9S# literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/item/PatternItem.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/item/PatternItem.class new file mode 100644 index 0000000000000000000000000000000000000000..5a9ccb2ab2dfbfb946fdfcac99009dc254b97380 GIT binary patch literal 1903 zcmb7FYg5xe6g^v@X-jxmc`8oQC9Y+jt1ql_+P#K2nbG+hG3fuJY$&w!}iM+vW zE_KUf&^A0Iccf-o1>tCg%2zFbhX9!bTG6JUUBwk787BV=&Ct3lWWc(~i-IAQ8n3ND zd@9+(ai~0PtsqRPf7FFdi967#pi4zJdKgA)64wPWD3s4n)Io{%`4QI)ZtiM1Y3t^0 z##Ql}itFfOXf(ZolJ!>&s2Ic$!?}o|-C-E;TL^Dq=zAtf+kQjE2u2yYi~K-jEi=#M z8(r?vn#M4;b1ubW>~|7I%d0nUY%Hu=3p4=CmsRJg7NyqK#W6!7XC2ykv7#F! zVtc6nDc5~8wP;z=kv1>A5OU8dI5Chi@$#m%Me!toc|29{%=OFydA;IW-8`}mL||Xv zMk_ooEt@ib4jU*~=;v7FX2B57=!Rt-9F{T{eHNOj0&X3bM4jdDL+fAe?2Ek2gq<2t zWVvDF$OY7%x@MZf&Klftgri`IF1-sq)hkuO3Z1S$FD32$zA#LuIYMWx0lgSQALvX` z6u~We=>>q&nHOHZ6YNvFR-IYrAUuAZRxtB0JRF^NVR z6Erp>PE6fs!EKu9^6{9&6h*}3-pa&I_bcuMSu`&Onuxpq3oVMkrF2UH+C3T8{fR$QsM_ur}a)0wde^IZuN;mHRkXvgL=~d|>TJ9oR?qUY_gF>pf`fIuRh^zk+ zE_Vl9MIKN_U-ua=COt`!-ZR=h)OI!)>MRk|)qsaobp(&_n0{l#F-OlV7AZ>5TNcZB Gj^5u-OxPX( literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/item/SymbolTableItem.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/item/SymbolTableItem.class new file mode 100644 index 0000000000000000000000000000000000000000..d35915f4140a4d515630a3f2c0132ad117212a37 GIT binary patch literal 581 zcma)4T}uK%6g{)9yJ}lnsnuf-ks7o=pb#PmBC!X<_gNckWIteC1OHV)5%kax=to6o z)G)M%UgmzCd+xcH`TTnS0C0hW5-j9g*dFq51S%u>DE&~zL;p4ysX->-oa0u-pL?TzRpzS_m+uk#sYRMBPFoYSPm+cTwU4n)a+&-@<0|(%e~Br=-KpnTfUo&d|E-9Z@oc0)3LC{ z*OY-A%6z>!02OSrn|Hu2vm8jfO7a5tiN)U}g>@3P)lgqFw~00ioz}@K+@%Eb6U^{D Wbs8D# literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/item/VarItem.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/item/VarItem.class new file mode 100644 index 0000000000000000000000000000000000000000..e3310f7b6a6bb563910719d535b1817313d15e17 GIT binary patch literal 1197 zcma)5>rN9v7(G);w=7$V1w~ZA3t(H6^^UQ`1RIGB6%*Rj7=M^)JHo(rw%HkoyorzD z-Gm=LfDdK-wz~;6Z48_2?0mPgXTCGv?>{HM0Bm5*Mgk)ik`6|ZVp!^Msa$>BY5HEB zH$CA>BRX#F)KMXuA+;`*G*1~u@`Z+tG{!904#wdyEcP(CHm>s9Lc8KaHxOD&U%8dG zP)5F&B4Ds~h1upE!7!aKRQLH2cRj9l-I@uc+AWP?0$B@_4$dLRFgKi7g9j0zr0PNC zh67DII3J>n)#@8N^>*vqw8^xH6jIaefeQ&@+U6 z8kZT8jg6fr42694EFCEo8dOrImN8_jQi<)uPE!Ou6&P|=zr{T|t_)R)ok_DNiRD6s zKcHINoDzdA`x?J|Haa9SDYPYy8Pe-5FV@?x`G-MEY)X%4I`JP?L-iOYpZUJgCg9zd z!tD8Noko!%!B{qhTQ+WE)q)%L{0?1`Q^BP=@()C;dnCgqZy7(JKY#2OAWn?HUvSm- zgkG%r{=s3lG^k3S=bys*aaRmUf7_S;s<|&(rqr)%3{mEuSEG@jo;nq!L{Rp))v*9ffn*Arff0-fWDe{@+j8yp zp7p+dARB?e=&I9pf;EApS=>rv4Cxef1J_^(%(ZN%ZFT#ty64vHx+|?-;J96DGq4+< znGtv$0kM(7gurx2t>V_Y@7w*V(+zZtBdIv23}i7aFeY8ulI@@?kgpC&sHlv*fdXbo zZ#SF7nGx`U=t}XU!rd@1i<`vlN%oO9H;RKug}Y^7Ug1W4+42shKzh^JYuiE3=YDpW zjMZALvQ`n$UVBYqCaX?czU#H>(hpq_$X30E?QYq=qg;tEwP4?2WAoLkTqA4Ya&o`( zmtg72%zvUfz3%>heAyDv1MijmK!~Jy*+EC>7rUbyCVxdHBs=OAbLJ5Dh+?p#n8w35 ze`|N*W=G6oNMo+nUJe#n8@!^jO|R!SWmvI-FR_9ZDo7>1VniH85}K-Ss#5pb?kTQUFP`SM z%SU9^LMLWv9WX^NvY`(-cE3m!k1=yW>q@M35gA4V_(!Qm_b literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class new file mode 100644 index 0000000000000000000000000000000000000000..73e73537a16b731d517d714447ce31373f7a7f0d GIT binary patch literal 21882 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 B-)8^- literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class index 0e8c68899a3a36107557c0a9e334723e59a0967c..2d47b13a0dde827f56dbaf7e363e12ed77667b54 100644 GIT binary patch delta 121 zcmbO!H&brIYA(k1$!oamCRcOIP3GX%ntYgBVR8_+CS&j9g*=jzr*i8t_D?>-?ZG$+ z%va+vWSlzr4Uhcfavn{_89*^F#@Rr=2kSfrHlF#DEqVPI7fkNp^_*HKG~StWAZC5xyduRwI&;JD@=aOt;yI2 zmRI93WSltp4Uhcfavn{_DL^qV#_2%52kR^bHlEp&EqVPI=S=S4^<|vN@l| bPLAiZVO`E3#Is`Z0=`NB4NfR* diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessListContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessListContext.class index c27da736bc7de0e034db97b688556d2666987d5b..10aa083d6f7eee01245e4c6f1460df7a63fc69b3 100644 GIT binary patch delta 69 zcmV-L0J{J76ZR9ZUk3rblVArw0lt%<2SNeBlj8?I1;YRa2*i^n2u=aTlXVD5lOG8! blj{gH1!U(gqB delta 73 zcmV-P0Ji`36ZR9ZUk3rXlVArw0lJf*2SNe7lj8?I1-}3W2*8sj2u=aPlXVD51;hXm f2*r~m2`H262sD$v2rZLL2|NYN01^nzlZ^>!y+s(r diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class index 2cac1a22e589f56fa96bf3d0837ae5177d3b2f91..77f2af637c65df53654cf7e833937c5380214dfd 100644 GIT binary patch delta 75 zcmV-R0JQ(u7T6ZBfd~N~lY$6B0V0#d2tNTNlLZMs0VR_~2|fiU00s*vlZXjU0V$K$ h2}zTI3N4dO3N!^U01*o@lZFap1vCH>3pJDP3TgjX6HovE delta 79 zcmV-V0I>hq7T6ZBfd~N`lY$6B0UndZ2tNTJlLZMs0U?t`2|fiQ00s*rlZXjU0VR{y l2}uPg01*o*lZFZ?lT8XVlOPH$ldcLp1uy^-3o(=L3TZl26b1kQ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AssignmentContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AssignmentContext.class index c7437a94f539ee7454f71c72e0008801a0836d3d..9e8f4c29fd002b7152fa6a40eff80ac9a9730134 100644 GIT binary patch delta 125 zcmca5bxUf)4-Q7t$v-*lC-3GIo9xG_JK36xXR;SJ*W`(uT9bEkiA}x;q<;fxK`t#u zo5?m@_LJ?nc_z1WnK0T--os_jXg~Q6mlLDoWP5HqRu={~4%f*|+0(U|PcV=`HaM|biH9vfC)1|bf=$uD^d0U@#_vj6}9 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class index 2b773b896ba6d5bcbc797197192bc948804d813d..9fccf650dff288e0cec8edcebb1fbac16142c65f 100644 GIT binary patch delta 69 zcmV-L0J{H)7Ks+HRR{rllU4{y0e+LA2uuNilkNyU1%v_C2Q&fllkNvU0rQhC2ton%lW_<>1^5642l1@r(02lbP*2u=a^ jlLHA!1^ECG2l|sy30sp(2`-b`2|NV>01^lSlN$ h2uYKo2`!Uu2{Z-701*eplcxz}1;_vr2g#EV3TY)u8a4m` delta 79 zcmV-V0I>i06!{deq6Y!6lcNVe0kMR3TcD<8w>yd diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class index c00780edaaa0c42d5685679756a81187f8ec6eb9..a636aea987b01729d33e9d41673b754ecf186d89 100644 GIT binary patch delta 158 zcmew?^I2wt5$EK?oN|)`IJG8ob16)o#i_~oU@|w41)>$qTsT zCztYQvi@XXWBxUHF^?bP@5!HdJSWfL)t#KdYs|*N#30DRJb58+3M(6f5DWWcF1}0v DpSCZ~ delta 157 zcmW;Cy$XU*7zSWJ&EWh6wFRP%9fL#K7PePJ*HKGbOSkb3K}$t9&~0=F(I!N+1xf|A zB#sX}g;#i|gwX{;wlQUfu82i|Ez?MtkBmiFvk+abDXY$s$8^Jl=!p=S(DW?Fgz|C+SV`@^th)2YQO@XtT#ntZ)pUM1s1D|;kAX5ctJJlvR?Pu# FEdH(5F}45z diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class index 3f540352d76473c881591ca093f90f1fbb2477b9..ce57f71e47fa7c07c4c9dc1e2cf749a2f42fa5d1 100644 GIT binary patch delta 75 zcmdlczD<0?Sq?_?$>%t{7_BBta(Xh_Oit#sXSAKXnA48co`H?aVe&IhKSsyNrd*zr f?{n!+Ud?5~>cJoghI7q%C$%?JTAlgs7 l3P}Y(01*m7ljI60ldB3elYR;91>XP>3E-2)31kK101^r0lP?Ns6ImA4 delta 73 zcmV-P0Ji^_6_^#U0SE!hlL81r0nU>}2tNVPlZ6OA1=0Wp3Dc9v2u=ailNSj|1=j!( f3D}dy2`H0|2{e;n2`!WE2|NYg01^q{lP?NsW-1rY diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class index 8efe25812c0f4db89d010039a2593961245c7c7d..a48211cd5e231b7c211a2275dbc51c7fff2bab7e 100644 GIT binary patch delta 133 zcmew>^H*lWPtM5)xY#DE@CZ!i=h9?iXP7L{BRbiiOJg!8H}B*YE^8)s=E(=SJQ-QR z5(?Z}jBH?50=Fh3$K)<^H*lWPfo_)ljV6tC-ZY@GO_&uGyST0C5n z6}Yt+nZRlixHTDBCU2^4i=$Jz{bu$c`1({qrl`ZJf5t= j41(+;lNa-9OwQspnQY6eJNY!P4XZSR5WCD|9=<{ViuWU{ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class index d7644fbb988f1d50f0a9a0aa058ecf14ba6731bd..cd2ab19479db612a25c0ef02e74cabf5efe2e546 100644 GIT binary patch delta 87 zcmdlizFB-j5C@~iIr$2g?&JkrCag9Lf^4>vZ*rxuIxq;aIZk%sE(8Gi(-v_6 delta 91 zcmdlizFB-j5C@~mXU^yoftJIhXP5R$ul_ZSoIm$*bFA$ u=JaDUoUFy=$!fwN$YwhECYQ$K1zaYRi@9_sGjiLo+As*Q*-m!iE(8EI4i<9& diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionArgumentsContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionArgumentsContext.class index c8382a5ed01fd7e0ce3459469fcb635a014fea24..2ae14e9934da539d60e366db8da79aee6fa1ea42 100644 GIT binary patch delta 81 zcmV-X0IvVm7uFZB-3S4^limnQleq~DlQaoE0l|~r2pN-$2`&M{le!5=1;zjd0>_gF n3QYmXlT`{ylm7}WlgkP;1hIB r3QYmTlT`{y1;+pp0?3mD3n-Jz3N(|R3N4c?3p@qS01^VwlWhxW1+^RU diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index 95db725c037691cd840284dae364e456dd8bc8fc..b1a0c967dc7513152e4312ee5cebd24ec23e920c 100644 GIT binary patch delta 84 zcmV-a0IUDV6UY;=yatoJ2Nsjk1}XvMll=xi0p*iD2R{MklYIw2lTHW>lgI}%1?d0= q4(gH!P66waPY6kq`3NnO#RxP7@&FMI^OODvWCivB5)Sv1X9;0ehaYPI delta 88 zcmV-e0H^=R6UY;=yaoZ^lf4E%0pOGU20sDelRXDN0pgQ=2S1a%1{Raj2Pp;R00s`` uk_b+dyax=ES_nP`>HrZA>y!QnD3iqqG?SPJEt4h*JO%Oq5)Si|X9;24upj^c diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$IfStatementContext.class index 0e6ff9cc1b6049f369e8a54c9b87fb9d11caddfa..094d10cd3d7d4172620a64c7da10a3b4a259189b 100644 GIT binary patch delta 121 zcmZ1}vr=Zm6;8&4$yYh;851Xqa@jE^Pp;vXoSe&L$e1>HK9>h$CYaC2ZOE7dh$Dwxm6ZOE7bSU>X6znn{#p;7tiG7oFCDlgqh1CoA&kPJYX6!g`WHkoVMNHJ%jKvkXGK=O*{_R004n${)o5 delta 101 zcmeB>>X6zno0D<<LDy`*|t> D!!RLG diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class index 3669e8f8bcd5b10d29b465c2e3e4f27fa66583a8..8b76af5fe718310f9ddc3103a0b2d59c75bad187 100644 GIT binary patch delta 77 zcmV-T0J8t?6z&wTmj{zt2n>^>2Q&e%lh_A80kD%82tom}lUoQr1+@SM1h$i&2u=aF jlkEsela~oClVb@q1-<|g1izD<31kJr01^bllLZQCAv77T delta 79 zcmV-V0I>h=6z&wTmj?l=lb8oT0jrbP2R{L0j`r<2tEa|00soIlb#4p0kf0s l2uTID01*VYlbi`ClVb@qlQs!0lf(%;1-<|h1izC73Ta)v8Ych% diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class index 099917d65b59c816fc342df07263c85dad9101b4..f467e1874a0d2873a4cc657e13ba5a868198c7c2 100644 GIT binary patch delta 69 zcmV-L0J{Ia6uuO&rw0LPlc)zj0cw-z2SNdClPd^51#bWb4serh2u=ZUlf4K@lV=Gn blQRi41$Y1v4tbMo31kI)01^&;lhp}n_XiZ5 delta 73 zcmV-P0Ji_W6uuO&rw0LLlc)zj0cMlv2SNd8lPd^51#18X4s4Td2u=ZQlf4K@1#kcn f4snxg2`G~@2{e-i2`!V92|NXO01^&)lhp}nI_(uZ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class index 579e7294c0cfec8440a9533284d0235a038d77b2..fd0002799b52adba7b5271d034b1fb2abf40b5d5 100644 GIT binary patch delta 161 zcmdm^xJPk=2KVHh+;WrMxV0uT@+eH6z^ysii$`wqbs&Edkgv$2$yhu24v*yI6dpas z`pJdd@{>0K#hQR(UW~1i`}yQ2yYcEWc1$kewPWl8t31Q2$Jhf_DaEJB*bf$qoJ9#0$3F|xtLDu<`Z}F$FE@BX3T|C)Ypb`K* Cl`{(f delta 161 zcmdm^xJPk=1~+5jg$ta(hhH;Fgi0k^_rMIOz`JAwQR9<9lY zJPMOH@n|yE0o8jkHcsy6lb`IytIOCjxrEn_u?=j>8D2fc4xlOWlco4H8N0z^v3!P% zeL&S7tP>g7SSL-s!{^61d9pUYC+jo@LDuP$Z}DqPUdV4UxrASLGLwJ}>pTV_*7=j2 G1u6mm<1vE( diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class index 8bfad393b2cb7d2933e239c541f71564c0ab8426..a1f68de1b687632bbb20be38207031dd2a514b99 100644 GIT binary patch delta 77 zcmV-T0J8sp6@V46st1#72n>_92QvXRlj;XQ0XCB=2tolklWhn-1v>x+1w50m2u=Y# jlm7@wlc@2|NWv01^d7lNSnUv}_gz diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MainContext.class index 344edca38c1bd58b3589e470e3e95d316a9a5e65..6d8f4e1da7670ebaea60cb4f5ec2ef075eadf185 100644 GIT binary patch delta 91 zcmV-h0Hpt(6`mEaN(Ylj2o{rI2Py$}lZyvGlZyxplhy|_0eF)N2tEOMlSv3d0eh2- x2tEaV00sholg|iE0f3Vo2}zU32`!V82{Z+V01*O+lgtTZ1&aU@0*sS23TfjI8m9mN delta 95 zcmbOyI!|#U{sb=uSSx&NF#BhcRmv z0~=HIXllwV%CdY9avz9Wj yv6oGr#_7jcKKUu9Cuv8E$-os_X+QcBl-aPp)S0(^6x*NOz diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class index 5bc4f8321e0897bdac10c55cf747d25d36552d24..b7a4738e7ae1e30dc2095ee28b40e2f935400b3f 100644 GIT binary patch delta 79 zcmV-V0I>h}7WWpgpa=n$lc5Mg0hyDb2o;n02r2=alOzd00i2U$2|fj$00s-6lcxzz l0icui2}zTn3N4dt3N!_$01*qQlcfq|1*-rO3#^k43u$H78d3lN delta 83 zcmV-Z0IdJ_7WWpgpa=nylc5Mg0hN=X2o;n02r2=WlOzd00hp6y2|fjy00s-2lcxzz p0i2We2}uQ?01*qIlcfqMlWYn!lRpYAlg$b|1*ZTK3#gM03u(jy8z%q& diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class index 411c5c93b01d5f3daa9e40df99e6bbbf0c708fd7..2d95f6b1f2936fea9b67c4690f73ce24b451ae7c 100644 GIT binary patch delta 143 zcmbQNI$3qYCf>=Wd}5PN@M9RgZy)#p6ii{YW)R}Fnfys`Apni|Dp&vj delta 147 zcmbQNI$3qYCSFGV$^ZF8C!gTeVicVGnb&FZCSI}0-h8@@Vqoz;AWIU=x(H;+09j6q z@?d^Azb>N^m^F)Ei&16rQGR^PK@ec(O3aZRxJiLUhT=<0)C7-lWz%lvg$Jk i@)}I;6x5g;AZRjKSx|TKMnM}^a|R(^i^-n^7XkoQWGi?8 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PatternMatchingContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PatternMatchingContext.class index 4bddda53e0e9cc97efb9628ecacf10e504e0c81a..b9a8e3ecd4240d2f00257352bbc169d2deaf5776 100644 GIT binary patch delta 157 zcmZ3aut;G;4%g&tZl1{%TqcaaC$HtQXZ$nyEs*>>S(n>x@*i%w$(`Jqlbv}KCtv2) znB2o7KUs=LYw}edg~=&Anv86d<#{D1FXz!?@D3u z#AzOUFSofpWQ;tqU<2~P-t~>U>jw$%BVz)wR9N$bk}s~p;KD=9xj|FJIB|=ai16ht z?3{9m;4C|&7RTgQ96XcFI7}G%CTDZlGxASf4I~97zvi%?yoVDg!)eSa%)rJYGC7aa ok5P2;UQW-+>0G*#jk!!%Wf%l`WGClvrLZb62=ORRzRHye0QLYC(*OVf delta 89 zcmdldwohz>76&88WNi+6My|=(K$3g%Y7YC!S{yu+zj2r_@=n&~v}5IGVB-;(oX6=m sS&Nfr@(G}b2!kMx=;RzOjmgGbCX?B?bSF>YvSF2B5aN-Ye3dH`0ML;Y82|tP diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class index 7c51fe8346903210ace51d8d3dd013366f46fdb1..792f3180254ba75ec709e2415cc48bc3ff049ef7 100644 GIT binary patch delta 94 zcmeB`=#|)z#=-bzayo}Sn&w=FY$?BYTjBh5V0m*lhmvVYBew_S)(}VR3 z0~^cN$+ld6jNc~raCx%+WDsQeHQAb5V=@!B@#HI9dXtm6ZCDu@gjks-FX7Gv0N3&% A6aWAK diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class index c04d793797299494c552e44ac96b070db0bcbdfd..cea288315a9150fc6c5d4d5e3a3582e5ede311d1 100644 GIT binary patch delta 83 zcmV-Z0IdJQ6~Yy;tOo&ZldT6oldcF1llTWT0dSKo2tEOElWYh=0dteD2tEaN00sni plkx~o0eF)^2}zUd2`!Vi2{Z+N01*U$lkf>-1%m(*1cZ}W3TctY8jAn` delta 87 zcmX>kdPsD`8g|C4$!po|8M7z91(G?Fbvf)9b0_C;I8A=T&NF!zhcRmr0~<^6CV$}6n7p0SWO5g$?qmrr8`gRTA(n>8kzAPo=tvsm diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class index 69abf8957634a6d4e3d89a24d363bf8f189ad335..89441708b08b7ea1c8cc6fe2cecffe2a93e6a5ff 100644 GIT binary patch delta 118 zcmV-+0Ez#g8=xDoCkX*^lPC#40dtdR2|odJlc)(k0d|x73K^0LF#&m#G73ondy{+$ zKLLD`yb3;(j0+5t1`9j^f0IKCNs}H743n4(GX;YH1_p$a&@r?5Z9*3+qg3UVtgEy delta 95 zcmV-l0HFV$7@ruh$Or+JlgS7|0hyBw2|odwlS~Oe0i2VJ2|tqy2@I3h2{ZwolMD(z z1)u;13Zauv3Qm&?3JjB}3O)s;01*nNlT8aKlN1XyljjO8lXVL`1+4%Q3a*p33u%d9 B9Jv4h diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ReturnStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ReturnStatementContext.class index 1588be96207c3b87ba0854a4289fbed4d083203a..2792d851830fb3b79e38e867ef824d6919225720 100644 GIT binary patch delta 69 zcmV-L0J{It6wws0x(5Lkle-5$0T+||2SNcElRgMO1snhd109or2u=YWlh6oBlX?j) blSTZYD#;+oDK$BiKZRA6 ML5Nds@;?5V05J6-)Bpeg delta 131 zcmcbva9v@8BM;-Z$rpJ=Cx`RsGX4a!X7T7Sar^-@?}C{B!Au2ST}CD_E16e|k!5lp zuhV2-Ua`r~fa08BaZNr=Rvrd6PTtAke1434lb7*%vI;T?atcij<=2=j!*4SAJ)iF6 ST7DZ=Nd_TKsmc5JX958G1SU=Z diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class index 586f8d0769572be0da584951d494d8c84bf9e879..d3563ee868861192b38896ad5c4bef4646a59527 100644 GIT binary patch delta 91 zcmV-h0Hpt*8K4=kHVFa$lQ#)IlQ;?ulY$8|0uBO`w+TK14g-_-2|@t{lR64Q0SJ?Q x3O)r300s^WlfVj20S%K63rUl?3oVm{3p52301*xqlfDaN1sDJl4jGdt40%Z)77YLZ delta 94 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·x+M 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 Date: Tue, 16 Apr 2024 01:44:13 +0330 Subject: [PATCH 18/23] bug fixed --- Phase2Template/Phase2/samples/1.fl | 2 +- .../visitor/nameAnalyzer/NameAnalyzer.java | 2 +- .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 21882 -> 21862 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/1.fl index abefafd..54fa8eb 100644 --- a/Phase2Template/Phase2/samples/1.fl +++ b/Phase2Template/Phase2/samples/1.fl @@ -1,6 +1,6 @@ -def compare(a, b) +def compare(b) return a+b; end diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index 1053591..5bec23c 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -122,7 +122,7 @@ public Void visit(Identifier identifier){ } else{ try{ - SymbolTable.root.getItem(VarItem.START_KEY + identifier.getName()); + SymbolTable.top.getItem(VarItem.START_KEY + identifier.getName()); }catch (ItemNotFound e){ nameErrors.add(new VariableNotDeclared(identifier.getLine(), identifier.getName())); } diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class index 73e73537a16b731d517d714447ce31373f7a7f0d..f96268ef87c360ef8597136749cceed323b9fde9 100644 GIT binary patch delta 4774 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 delta 5040 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 RLw$}spx^Ajz5Y$t{{cAvuh;+p From daff7ddfe467591a2652bc0a041f153b397abfbf Mon Sep 17 00:00:00 2001 From: javad Date: Tue, 16 Apr 2024 19:43:40 +0330 Subject: [PATCH 19/23] circular depencancy and funcArgMismatch added --- Phase2Template/Phase2/samples/1.fl | 33 ++++++++- .../Phase2/src/main/FunctionCraft.java | 7 ++ .../nodes/expression/AccessExpression.java | 7 ++ .../compileError/nameErrors/ArgMisMatch.java | 13 ++++ .../nameErrors/CircularDependency.java | 27 +++++++ .../Phase2/src/main/grammer/FunctionCraft.g4 | 2 + .../src/main/symbolTable/utils/Graph.java | 64 +++++++++++++++++ .../main/visitor/astPrinter/AstPrinter.java | 1 + .../nameAnalyzer/DependencyDetector.java | 68 ++++++++++++++++++ .../visitor/nameAnalyzer/NameAnalyzer.java | 22 +++++- .../src/parsers/FunctionCraftParser.java | 2 + .../Phase2Template/main/FunctionCraft.class | Bin 2202 -> 2554 bytes .../nodes/expression/AccessExpression.class | Bin 2315 -> 2529 bytes .../compileError/nameErrors/ArgMisMatch.class | Bin 0 -> 1126 bytes .../nameErrors/CircularDependency.class | Bin 0 -> 1757 bytes .../main/grammer/FunctionCraft.g4 | 2 + .../main/symbolTable/utils/Graph.class | Bin 0 -> 4066 bytes .../main/visitor/astPrinter/AstPrinter.class | Bin 17701 -> 17721 bytes .../nameAnalyzer/DependencyDetector.class | Bin 0 -> 3614 bytes .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 21862 -> 22491 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3336 -> 3336 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 68913 -> 68960 bytes 27 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java create mode 100644 Phase2Template/Phase2/src/main/compileError/nameErrors/CircularDependency.java create mode 100644 Phase2Template/Phase2/src/main/symbolTable/utils/Graph.java create mode 100644 Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/ArgMisMatch.class create mode 100644 Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/CircularDependency.class create mode 100644 Phase2Template/out/production/Phase2Template/main/symbolTable/utils/Graph.class create mode 100644 Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/DependencyDetector.class diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/1.fl index 54fa8eb..004a4ca 100644 --- a/Phase2Template/Phase2/samples/1.fl +++ b/Phase2Template/Phase2/samples/1.fl @@ -1,9 +1,38 @@ -def compare(b) - return a+b; +def y() + return z(); end +def z() + return hh(); +end + +def hh() + y(); +end + +def f() + g(); +end + +def g() + return h(); +end + +def h() + return f(); +end + + +def abbas(a, b, [c = 2]) + return a + b + c; +end + + def main() + a = 5; + b = 6; puts("salam"); + abbas(a, b); end \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index acf5e1c..67ea3cb 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -5,6 +5,7 @@ import main.ast.nodes.Program; import main.compileError.CompileError; import main.visitor.astPrinter.AstPrinter; +import main.visitor.nameAnalyzer.DependencyDetector; import main.visitor.nameAnalyzer.NameAnalyzer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; @@ -29,5 +30,11 @@ public static void main(String[] args) throws IOException{ for(CompileError compileError : nameAnalyzer.nameErrors){ System.out.println(compileError.getErrorMessage()); } + DependencyDetector dependencyDetector = new DependencyDetector(); + dependencyDetector.visit(program); + dependencyDetector.findDependency(); + for(CompileError circularDependency : dependencyDetector.dependencyError){ + System.out.println(circularDependency.getErrorMessage()); + } } } diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java index 238cefc..044df49 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/AccessExpression.java @@ -6,12 +6,19 @@ public class AccessExpression extends Expression{ private Expression accessedExpression; + private boolean isFunctionCall; private ArrayList arguments = new ArrayList<>(); private ArrayList dimentionalAccess = new ArrayList<>(); + public void setIsFunctionCall(boolean isFunctionCall){this.isFunctionCall = isFunctionCall;} + + public boolean isFunctionCall() { + return isFunctionCall; + } public AccessExpression(Expression accessedExpression, ArrayList arguments){ this.accessedExpression = accessedExpression; this.arguments = arguments; + this.isFunctionCall = false; } public Expression getAccessedExpression() { diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java new file mode 100644 index 0000000..8d3dd6c --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java @@ -0,0 +1,13 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +public class ArgMisMatch extends CompileError { + int line; + String functionName; + public ArgMisMatch(int line, String functionName){ + this.line = line; + this.functionName = functionName; + } + public String getErrorMessage(){return "Line:" + this.line + "-> number of arguments provided for function " + this.functionName + " does not match with its declaration";} +} diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/CircularDependency.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/CircularDependency.java new file mode 100644 index 0000000..ebd75a8 --- /dev/null +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/CircularDependency.java @@ -0,0 +1,27 @@ +package main.compileError.nameErrors; + +import main.compileError.CompileError; + +import java.util.List; + +public class CircularDependency extends CompileError { + private List nodes; + private String functions; + public CircularDependency(List nodes){ + this.nodes = nodes; + String s = ""; + int nodeIndex = 0; + int finalIndex = nodes.size()-1; + for(String x : nodes){ + if(nodeIndex != finalIndex){ + s = s.concat(x + ", "); + } + else{ + s = s.concat(x); + } + nodeIndex += 1; + } + this.functions = s; + } + public String getErrorMessage(){return "*-> defenition of functions " + this.functions + " contains circular dependency";} +} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 9b169da..c57c189 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -496,12 +496,14 @@ accessExpression returns [Expression expRet]: } else{ AccessExpression accessExp = new AccessExpression($o.expRet, args); + accessExp.setIsFunctionCall(isAccessExpression); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); } $expRet = accessExp; $expRet.setLine($o.expRet.getLine()); + } } ; diff --git a/Phase2Template/Phase2/src/main/symbolTable/utils/Graph.java b/Phase2Template/Phase2/src/main/symbolTable/utils/Graph.java new file mode 100644 index 0000000..706e955 --- /dev/null +++ b/Phase2Template/Phase2/src/main/symbolTable/utils/Graph.java @@ -0,0 +1,64 @@ +package main.symbolTable.utils; + +import java.util.*; + +public class Graph { + private final Map> adjacencyList; + + public Graph() { + adjacencyList = new HashMap<>(); + } + + public void addEdge(String a, String b) { + adjacencyList.computeIfAbsent(a, k -> new ArrayList<>()).add(b); + } + + public ArrayList> findCycles() { + Set visited = new HashSet<>(); + Set beingVisited = new HashSet<>(); + ArrayList> cycles = new ArrayList<>(); + + for (String vertex : adjacencyList.keySet()) { + if (!visited.contains(vertex)) { + List result = new ArrayList<>(); + if (hasCycle(vertex, visited, beingVisited, result)) { + cycles.add(result); + } + } + } + + return cycles; + } + + private boolean hasCycle(String vertex, Set visited, Set beingVisited, List result) { + visited.add(vertex); + beingVisited.add(vertex); + + for (String neighbor : adjacencyList.getOrDefault(vertex, Collections.emptyList())) { + if (beingVisited.contains(neighbor)) { + result.add(neighbor); + return true; + } + if (!visited.contains(neighbor) && hasCycle(neighbor, visited, beingVisited, result)) { + result.add(neighbor); + return true; + } + } + + beingVisited.remove(vertex); + return false; + } + public Void printGraph(){ + for(String vertex : adjacencyList.keySet()){ + System.out.println(vertex + "----"); + for(String adj : adjacencyList.get(vertex)){ + System.out.println(adj); + } + System.out.println("--------"); + } + return null; + } + + +} + diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java index 6bbf2f7..7fa41c2 100644 --- a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -18,6 +18,7 @@ public class AstPrinter extends Visitor { public void printMessage(int line, String message){ System.out.println("line:" + String.valueOf(line) + "->" + message); + System.out.println("line:" + String.valueOf(line) + "->" + message); } @Override diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java new file mode 100644 index 0000000..2b59c89 --- /dev/null +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java @@ -0,0 +1,68 @@ +package main.visitor.nameAnalyzer; + +import main.ast.nodes.Program; +import main.ast.nodes.declaration.FunctionDeclaration; +import main.ast.nodes.expression.AccessExpression; +import main.ast.nodes.expression.Expression; +import main.ast.nodes.expression.Identifier; +import main.ast.nodes.statement.ExpressionStatement; +import main.ast.nodes.statement.ReturnStatement; +import main.ast.nodes.statement.Statement; +import main.compileError.CompileError; +import main.compileError.nameErrors.CircularDependency; +import main.visitor.Visitor; +import main.symbolTable.utils.Graph; + +import java.util.ArrayList; +import java.util.List; + +public class DependencyDetector extends Visitor { + public ArrayList dependencyError = new ArrayList<>(); + private Graph dependencyGraph = new Graph(); + @Override + public Void visit(Program program){ + for(FunctionDeclaration functionDeclaration : program.getFunctionDeclarations()){ + functionDeclaration.accept(this); + } + + return null; + } + @Override + public Void visit(FunctionDeclaration functionDeclaration){ + for(Statement statement : functionDeclaration.getBody()){ + if(statement instanceof ExpressionStatement){ + ExpressionStatement exp = (ExpressionStatement) statement; + if(exp.getExpression() instanceof AccessExpression){ + AccessExpression accessExpression = (AccessExpression) exp.getExpression(); + if(accessExpression.isFunctionCall()){ + Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); + dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName(), + id_.getName()); + } + } + } + else if(statement instanceof ReturnStatement){ + ReturnStatement returnStatement = (ReturnStatement) statement; + if(returnStatement.hasRetExpression()){ + if(returnStatement.getReturnExp() instanceof AccessExpression){ + AccessExpression accessExpression = (AccessExpression) returnStatement.getReturnExp(); + if(accessExpression.isFunctionCall()){ + Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); + dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName() + , id_.getName()); + } + } + } + } + } + return null; + } + public Void findDependency(){ + ArrayList> cycles = dependencyGraph.findCycles(); + for(List cycle : cycles){ + dependencyError.add(new CircularDependency(cycle)); + } + return null; + } + +} diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index 5bec23c..2574bc8 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -348,16 +348,36 @@ public Void visit(UnaryExpression unaryExpression){ } @Override public Void visit(AccessExpression accessExpression){ - if(!accessExpression.getArguments().isEmpty()){ + int minArgRequired = 0; + int maxArgRequired = 0; + if(accessExpression.isFunctionCall()){ isFunctionCallId = true; accessExpression.getAccessedExpression().accept(this); + Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); + try{ + FunctionItem functionItem = (FunctionItem) SymbolTable.root.getItem(FunctionItem.START_KEY + functionName.getName()); + maxArgRequired = functionItem.getFunctionDeclaration().getArgs().size(); + for(VarDeclaration varDeclaration : functionItem.getFunctionDeclaration().getArgs()){ + if(varDeclaration.getDefaultVal() != null){ + minArgRequired += 1; + } + } + minArgRequired = maxArgRequired - minArgRequired; + }catch (ItemNotFound ignored){} + } else{ accessExpression.getAccessedExpression().accept(this); } + int numberOfProvidedArgs = 0; for(Expression expression : accessExpression.getArguments()){ + numberOfProvidedArgs += 1; expression.accept(this); } + if((numberOfProvidedArgs < minArgRequired) || (numberOfProvidedArgs > maxArgRequired)){ + Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); + nameErrors.add(new ArgMisMatch(accessExpression.getLine(), functionName.getName())); + } for(Expression expression : accessExpression.getDimentionalAccess()){ expression.accept(this); } diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 1d773f0..918c600 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -3310,12 +3310,14 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept } else{ AccessExpression accessExp = new AccessExpression(((AccessExpressionContext)_localctx).o.expRet, args); + accessExp.setIsFunctionCall(isAccessExpression); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); } ((AccessExpressionContext)_localctx).expRet = accessExp; _localctx.expRet.setLine(((AccessExpressionContext)_localctx).o.expRet.getLine()); + } } diff --git a/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class b/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class index 257a4f4f5c2c6a5435be3b1657870828047bf1c2..8f682c379571e59f29bf5a989895ddbb38e5492a 100644 GIT binary patch delta 720 zcmYL_%}-NN5XFC&w%oRS2qjvd5kV0|f)+PuAea!4XaaFj1re+~USFY5Uh&zYC|JK( zxKh)Nx>FY}G$x=aQ4{0Zf5QKRL~$MlyE${`&dix}=2iVxL-^;Puit@w*4D!de$`n_ zR2(P_+KaZ6v>j`C(9YRbF6)Mg6ZCF zwFhcdG*TwnRi`*P>V;kBr1u4j!o41PT3Un%Fw{HVD-NSERvFiut^EY6sQmQ2+Q9_ z@uJQYz7ZeaMMXav7-TJe%b@71UHL4QwZg8?H{;zEg$ zciX=_2|hdtL(~iIMYE4Oq8RL_Meqa%>86ph93nvzX`0D!m_nW-tV+uxj`EgPKGMcI z$96oVL}!93W|$=?)hZdA6)&QlIp!s5-V4owc&+0N4q5SNh}K1Jh@cjp;&KzetY4GG zt#ZO{R>+Z;Tjl9vDZwovxh+&(__sMvP_wMLqp8tEG*QiprcHAOwrKfHvnDQ?ytyY+ Yepy|Rr4Qs?!9%fuh*sh(%40%*0oZAh(EtDd delta 394 zcmXAkxlV#n6okJYe!Q#^5kcb~(82^sEYQkGXH0AqS5P)_0~8gtu<#-N&bJ^GCKk3P zJ`#mGU^8>(oO@=@?Tx;T_`iQXK7lOH9e>kye(i4e%M-Msq1|@5THh|Wa^*^+W+)n( zPRbJb;X>z8Mf}77n3jS;*teI3lBrWJ*l+V5_^{3u{wkCzOX-r2nWL8{{s#= zlJap(UM5<$(zvBj=8CuR+TV85-(DsljA9rgOpFQQBp4^fBpIeyXPQ%HxMG$DbAyx} zyy^ugaH2|{Qbn=hoDyZ-5Z0tZRoN5dIHRVt1Y4S4V3R7bAQuIa;BV~j z*bl5kg?3ls2k@g1GxxfUaW7FMR4Mm0_sp3yGuQq0{lBjOR#~6gTTkz~Y)fSAu8M_E&l)&~^8!U%hUe_XdCj#(;a|_=qQF#Ap9x&X zl^m`bxQ6RQP(r-1<0aWROy-XyH)zzH`J>CIGkYTE*tRVodE$(HLmFZ%ntj=yE^c4?>B>b33e zw(YyTjy5ylTbJ^)FvRtV=wu=62sDRj5+kgOwa!#4KQsDxaK!4(Zy=AXA~Ps=oKVI0 zb7@tpwIPbcViPD4#PekB3d|6KuI2@v=ubxGEnqO~SaVS^=z^$?s3HqtFvbA#Y*kC1 zEvXYUagEHLAxh*-BUwJ|ZHB(@BfX^%xFP4Wv`?>PY&}8qo0y~DTV%0J=P4Sq=7mFuf8?Diujw2xP@~_9 zvVe(sTJafsqOSvu3lWYb*T9(h8RBm;N?`yqDPasUA%h4;& zDJ5ezCVzN{#S+aGKi*-{lzbf4ZQRiWIrE9G#DhGi4e~DTMM1_DDkU#p(p**y{vhA? zwIEYTkZVIh{=|bQj3zNsIcHG^IWNfFo0OtCiF7jWTxp#5hjwU&mHSniJtw3T G)_wr3jw;sx literal 2315 zcmbtV+fLg+5It+>j)4$Jpp*jTnhV9f(~=O1dXXwcv=ULIKAPaBM!`XjgUToLZ(6Ac zwUzn-{iv$5UMDfeiIDo@%@tI#&DElaF-#t7XPVlvji$P1S=xEUXxj-yA;&QS zC5ll6V;E=14-T+buTv;*n7C#&Iw!hmw;9rvfCxp7KA|ARp(l&}Cc`u#1hq87Zt%&Cc{3=SwP$wP!Aaz9s3I3a z;TV0$nQS0=?n#Xvkk^gbbBHMl79d&7ZXMW`VK&I4tC2GyVwbu)qS2I}+6)CZHUB&Y z4_4H5qpFCiUc1IH7kpBxR*QU|wo27)k+*kdyHn=J6Ss17mmzV`>R5ICjlqW}?Vo~8 zt|ji$OD55aEz_5tGqNQ9o`PY)u@`AgkDzBACp%2{BrK7~7rH6a?`r-MEdLA950{8v zAkjCI`N9Pz^Bc7JjT~hx({~mT`YH$^PT&bzk5a%ftk7zOP8J0yRC5S<^viw1`R|zgN`~Zwk2sqtCzJpQyP>GS*l=_6UQYTi zX96w@$?g&OW*|ty4>CIxM8$oA;%StL5wB9j(UQw3^5B26z&zDs!9mIhubylXS2l(R zct~d)>plJUuskIZSWASpJOE4dMPK-cBYd}09ue2a!BLX^!iy+t6lHxt6wz(oC@Cth zH_8({b#>uV^YY56X}`2NkF;{HxLbJU%CPUs5G&+=;Fbh_U-YJEj)I3?tS4v;&#_G* T`}Fuuk#_7p}X_-WJ0@@n>iP zG2y`<;EyuSUe9=@jWNwlcjmtN=DV4lA3txt1K7b<5gAP6k@av3IfkVkm#P-%USEdd zjWOEP8Yzb%_ev^hw;3iX>&KHQU^0)QhuiQNDx=AY_l7i4ZO3$4GHP)fbQ!XtRDyx+ zIf{~pY0NNqrvnvOsntGZF_fEU{DRj)t~#|tYozMb%Otw&;Vxzw=6n2HG_(r1eJ5>~ zPLbuxMht6}z0uV5(GbJjSmZJ3Yv?vfm~N8H{Xy?Um?M4?#-en1HF@;^~ueM$JX z2tsbSo6U3%Pm5T=Y97zrB-R*K{>(|L3wrtk+RXCkombZZle1`oqSX$1|#+fz!IM#!T`M0r#h zR!6>RoYXuvXlMQnrJWgm7nbR+XXpmIhZcq`+{GuG0i*r9M|O_94{j&jyXrTv>f$x> z)s1UReT{+hWXs5sEs&k0UlApuyH62+n1%&BAkUGzGAus1Laxjr9wud8#6D1}UQvZB wOx@rP@P*JBxGK3g(~FshETx2b0*_+U5+2ikfpAag@lheKNT+o?$0inj0bmg$YybcN literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/CircularDependency.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/CircularDependency.class new file mode 100644 index 0000000000000000000000000000000000000000..ff0f8e7ab68cf65d728e90adfd7c0fd9d591511c GIT binary patch literal 1757 zcmb7E-*XdH6#j0L?k4H>2cZ;-0>Kt&(?TpNYEz>Ss6>*Yq*g~qW^OmP?b6L|X7`2x zpZz2B$wyvwMr7!N<1_q4&N$+?yQxi0#~CM+z4x4Z&bi*>oQIE~j#yl&wP&I;rY0`Hp$m^(6D zQ;&2U|EtKOVBtL8;I&??p4^Y^N^iS#ck_X=b=kx$(~0B7>ZT4HZ#&OoU$k%ua{?#Z za#vM-&zAZNNAGYKYUycK;o@9^wa>BKgWs>pVFpDD3sEq`jsr!FxNPAHN&?xfu4ik9 zVVT%qz&v;nt(wlZCv`Vq{bu`06jgs^(5q4wINpPI(53ke7Ng1*3XInsPpx&^n<`kB zn=Uo^x^GK&Lk3PH_mtuhJ@k%4Y)ke3IWB}C=$DOVrp5_kC{Yv0Z8@HFdy1*Ump<<7 zUp(5>(%x;zP7lbXeLKIV*x#X<&5XSsN}QfR3yMVhgR1%IpXPeTi$zu}4=c%CT$}m)+iF*PU268$I zs)=&k*BL&9;D0E3%gB+XSh`A?tcv%1uJ9J+w*fK3)ui@*@fk#M;VI1g zXd_iwc#d%ncpaO&IIlRj}49fTM9^U5~?UGzA`YrQxh!HB9|P>ro_;uhC2+JD0H)%bgxkRwZh&(LJ@(|-fPgs@Ej literal 0 HcmV?d00001 diff --git a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 index 9b169da..c57c189 100644 --- a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 @@ -496,12 +496,14 @@ accessExpression returns [Expression expRet]: } else{ AccessExpression accessExp = new AccessExpression($o.expRet, args); + accessExp.setIsFunctionCall(isAccessExpression); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); } $expRet = accessExp; $expRet.setLine($o.expRet.getLine()); + } } ; diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/utils/Graph.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/utils/Graph.class new file mode 100644 index 0000000000000000000000000000000000000000..69de56e3e02924e2f1588ea6c46d17ccba8564b9 GIT binary patch literal 4066 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 Yb`#c(K;9-GFNJk0gAm`g$w?fE07R`9S^xk5 delta 69 zcmX>scvx^lIUD2R$rWt&j7ui(V6$Ug#=yq6eDZHLKgJc4z1TfjS2GCmt(p9jU1RbA Yb`#e1K;8x*FNJk8gAm`A$w?fE072guL;wH) diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index b1a0c967dc7513152e4312ee5cebd24ec23e920c..aaaeb63b92508fa29cd8347498dd5f28954568e2 100644 GIT binary patch delta 92 zcmX>hd_s7`9=6Fg>|&EIv1v`N0n$S3T9fwx=^%D3#ut-o+3gu$PTtFI$NHLqjqlAQ t4nM}Xll?h7SwAoc@_n5Ak3(bfQ4SNhd_s7`9yZ3ullQXOGd`L8m(70i9yYPbLF`(S{{ZPpK-z{~Z1N>`P1ctTY<#aK uariO5p6t)z$@-2#knjEEe;gWegg7719>T|-x!4WzE4i)OauU0t|BA= diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class index 08817dfb29359c66a7cfecb79121e93852023683..dac234f3daad3828f33ec32feaa4b3bc2d51b76e 100644 GIT binary patch delta 105 zcmeB>>X6znn{%=>m)PWuoLY?ACg0(-pB%@oN?#mcrGW#JwQ@)@^&s=#{FQ{ zFD^~iLkw)ZhbL=r`!ODwT+Z#udYnO!_rzp19*xOwxlLG419@kFycE{+3_`pYCinAH F0ssfSA*BES delta 105 zcmeB>>X6zno0D<#q#K*6p)v~dX_VidM1vFU=7}$6XCwB|@F&a(2CE&?w${@&V fHn~$!V{(9?39BWLX9eV?u-Y;R@!C!PB)AX&`a3J< delta 151 zcmbQNI$3qYCSFG2$^ZF8C!gTeVicYHnb(O?9L)FT(`A$bv-*H6SupD&kfi`*IWa1O z`QiM!jA~%kEPgFUjmby(?HM&EvkEvdYJ){%1vFXp7}$9ACwB|@F&a$1CE&?w%pk~X fGPzSwV{(9?39C7fX947;uv#++@!CxOB)AX&@6Rj0 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class index d3563ee868861192b38896ad5c4bef4646a59527..d827e33e35b614049a91675426221b46556d8a6d 100644 GIT binary patch delta 98 zcmZ1=xj=G*DJK&j<79JA`^n!p#U}S~YB91*-VWqha`8-N;xcDspKQhD#K<+dmdlQn zmw}CsZ}I^yKSut^{M??bLJWd@!jt!LYfNtCHenS5^2C9>6jmt)AwKEJ>O7SImpB## delta 96 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 delta 11885 zcmbVy33yFc_x@Vv-o0;ba?ZJlkjOw1vm}xrH8({JMS_$@Q;JYx9%5+Gx~-3zO3Fc0 zsZyods*;JutY2zsQFFEEpskv#N{jlfz3+4c&-Z`+9?3fI+Izoy?X}ikXP=XEZi#in z6085de?Q*_0Ih5_Hu!({q7g8lw!MW4?bwqD^^DhZqKrcWvvX-nB0**(B zGj^s_5luQZrLs0Q)>dWhSbJl`fI+;Y3T;>?BWhp^p02Xatc#I7u$7*{p0TlRD(kMi zfKcDaPK-1T46JF-RG|**fsjm-RWl-ULbNQEJob8Cy#WzG4jY+0wvUZ{YRntfG~hF~!NxYKtbi37$A&cxTgQsUnoB5lb=uX<6f4}U!qepMRJKL6__3`B2}aD|sz%4*74+?FhmGx2*)F!*v)B&91C7JOpR)f~g)~;? ziQJYEAptVo_K48!m7yb@NWuN=fQ@~nvai`erKf znA=f5upe#gC*jSXjcp?nTc2US2rvAK5K<>?NcQ;b#9`SZauUUe0ofy(lV8{wF;AX_ z5-3khwqH!PUs)i21=!eCBXLx6=oO`{Kf5A2?x#NF%0E?hll^5(9My&2R@vX|ALHPt zel~VjW%t;>Mw8KfIH(-CVk{dyIM7PLN=~TXFrmJUbA%d3P(mdmE;q=JaX*#YxxdjS zw>hfDYq`l<0L~zO?ofFk4>ES<#>WJ!ydn=m2ppb0bU@nRu>*3mhjq>#K46TU`h}=G z)X>L-HVspGxabumdUcyHyx+)SgZq2CMXJ0Cc0_RW>6Vq=x=UJz)IObCrMK;7<55QM zF?IZ^@)&XxuV&00lc3k&HEq0>%4_pF2vJ7%m?-1In7H^FJXYm#Lg&aCFxEVUAFqdC zZ_%N1W~;OgZBlGJ(P%lgUVH*A1&}vTc|)Fz5HNOR>Y(i0R=K&^6GT$h?V0M&6L=$) zH|9-@x5qxAH{;E1yoJi26xkmsyfi=2YTO(fX?@CtBmMn(Gu}$&t$C`^d|YZk3U4dy zZYOeeLyypc_r^`;xUV4Ul?Xp)dz$-cs-_C>0AWzZeYhjxJto|V@IDhxBYePw(+PiV z!kq~pGT|≫G+Z0hir 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 Date: Tue, 16 Apr 2024 20:11:55 +0330 Subject: [PATCH 20/23] fixed structure of compiler --- Phase2Template/Phase2/samples/1.fl | 6 +++--- .../Phase2/src/main/FunctionCraft.java | 8 ++++++-- .../src/main/compileError/CompileError.java | 7 +++++++ .../compileError/nameErrors/ArgMisMatch.java | 1 - .../compileError/nameErrors/DuplicateArg.java | 1 - .../nameErrors/FunctionNotDeclared.java | 1 - .../nameErrors/IdenticalArgFunctionName.java | 1 - .../nameErrors/IdenticalArgPatternName.java | 1 - .../nameErrors/PatternNotDeclared.java | 1 - .../nameErrors/RedefinitionOfFunction.java | 1 - .../nameErrors/RedefinitionOfPattern.java | 1 - .../nameErrors/VariableNotDeclared.java | 1 - .../main/visitor/astPrinter/AstPrinter.java | 1 - .../Phase2Template/main/FunctionCraft.class | Bin 2554 -> 3478 bytes .../main/compileError/CompileError.class | Bin 346 -> 452 bytes .../compileError/nameErrors/ArgMisMatch.class | Bin 1126 -> 1118 bytes .../nameErrors/DuplicateArg.class | Bin 1066 -> 1058 bytes .../nameErrors/FunctionNotDeclared.class | Bin 1089 -> 1081 bytes .../nameErrors/IdenticalArgFunctionName.class | Bin 1116 -> 1108 bytes .../nameErrors/IdenticalArgPatternName.class | Bin 1119 -> 1111 bytes .../nameErrors/PatternNotDeclared.class | Bin 1085 -> 1077 bytes .../nameErrors/RedefinitionOfFunction.class | Bin 1098 -> 1090 bytes .../nameErrors/RedefinitionOfPattern.class | Bin 1094 -> 1086 bytes .../nameErrors/VariableNotDeclared.class | Bin 1089 -> 1081 bytes .../main/visitor/astPrinter/AstPrinter.class | Bin 17721 -> 17701 bytes 25 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/1.fl index 004a4ca..0626d07 100644 --- a/Phase2Template/Phase2/samples/1.fl +++ b/Phase2Template/Phase2/samples/1.fl @@ -1,5 +1,5 @@ - +=begin def y() return z(); end @@ -23,9 +23,9 @@ end def h() return f(); end +=end - -def abbas(a, b, [c = 2]) +def abbas(a, b, [c=2]) return a + b + c; end diff --git a/Phase2Template/Phase2/src/main/FunctionCraft.java b/Phase2Template/Phase2/src/main/FunctionCraft.java index 67ea3cb..6f44dac 100644 --- a/Phase2Template/Phase2/src/main/FunctionCraft.java +++ b/Phase2Template/Phase2/src/main/FunctionCraft.java @@ -15,6 +15,7 @@ import java.io.IOException; +import java.util.*; public class FunctionCraft { public static void main(String[] args) throws IOException{ @@ -23,10 +24,9 @@ public static void main(String[] args) throws IOException{ CommonTokenStream tokens = new CommonTokenStream(flLexer); FunctionCraftParser flParser = new FunctionCraftParser(tokens); Program program = flParser.program().flProgram; -// AstPrinter astPrinter = new AstPrinter(); -// astPrinter.visit(program); NameAnalyzer nameAnalyzer = new NameAnalyzer(); nameAnalyzer.visit(program); + nameAnalyzer.nameErrors.sort(Comparator.comparingInt(CompileError::getLine)); for(CompileError compileError : nameAnalyzer.nameErrors){ System.out.println(compileError.getErrorMessage()); } @@ -36,5 +36,9 @@ public static void main(String[] args) throws IOException{ for(CompileError circularDependency : dependencyDetector.dependencyError){ System.out.println(circularDependency.getErrorMessage()); } + if(nameAnalyzer.nameErrors.size() + dependencyDetector.dependencyError.size() == 0){ + AstPrinter astPrinter = new AstPrinter(); + astPrinter.visit(program); + } } } diff --git a/Phase2Template/Phase2/src/main/compileError/CompileError.java b/Phase2Template/Phase2/src/main/compileError/CompileError.java index aae9c3b..d062f25 100644 --- a/Phase2Template/Phase2/src/main/compileError/CompileError.java +++ b/Phase2Template/Phase2/src/main/compileError/CompileError.java @@ -1,5 +1,12 @@ package main.compileError; public abstract class CompileError{ + protected int line; public abstract String getErrorMessage(); + + public int getLine() { + return line; + } + + } diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java index 8d3dd6c..f9184ea 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/ArgMisMatch.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class ArgMisMatch extends CompileError { - int line; String functionName; public ArgMisMatch(int line, String functionName){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java index 4c778fb..28a021c 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/DuplicateArg.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class DuplicateArg extends CompileError { - private int line; private String name; public DuplicateArg(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java index d6d1df1..9851da9 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/FunctionNotDeclared.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class FunctionNotDeclared extends CompileError { - private int line; private String name; public FunctionNotDeclared(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java index d908d35..e1bb288 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgFunctionName.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class IdenticalArgFunctionName extends CompileError { - private int line; private String name; public IdenticalArgFunctionName(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java index 05f2429..6b67d03 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/IdenticalArgPatternName.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class IdenticalArgPatternName extends CompileError { - private int line; private String name; public IdenticalArgPatternName(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java index fcea50d..3b00dce 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/PatternNotDeclared.java @@ -4,7 +4,6 @@ import main.symbolTable.item.PatternItem; public class PatternNotDeclared extends CompileError { - private int line; private String name; public PatternNotDeclared(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfFunction.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfFunction.java index 706f802..174d81a 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfFunction.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfFunction.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class RedefinitionOfFunction extends CompileError { - int line; String name; public RedefinitionOfFunction(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java index b9c2a35..cee0052 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/RedefinitionOfPattern.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class RedefinitionOfPattern extends CompileError { - int line; String name; public RedefinitionOfPattern(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java b/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java index 8ec1072..7977a0d 100644 --- a/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java +++ b/Phase2Template/Phase2/src/main/compileError/nameErrors/VariableNotDeclared.java @@ -3,7 +3,6 @@ import main.compileError.CompileError; public class VariableNotDeclared extends CompileError { - private int line; private String name; public VariableNotDeclared(int line, String name){ this.line = line; diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java index 7fa41c2..6bbf2f7 100644 --- a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -18,7 +18,6 @@ public class AstPrinter extends Visitor { public void printMessage(int line, String message){ System.out.println("line:" + String.valueOf(line) + "->" + message); - System.out.println("line:" + String.valueOf(line) + "->" + message); } @Override diff --git a/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class b/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class index 8f682c379571e59f29bf5a989895ddbb38e5492a..f6af24225d45dad80a8c264941bcf64259796ded 100644 GIT binary patch delta 1688 zcmbW1`*Raj6vsc?Y^amNo-yDBKf6|})2N)60rX3nb(HSQ*=bm%#Ip6a=-+MQw zrtX;;J@LoU<3KA1Mx(z~6l=v_Y_NpOG@@ocpBrf{blRRqV^ec_t2t~YhP-Sp(KlrG zdRfO#taaqHVbmAgI$IFxdckpJiI??BlwmZl3sBk&+PU7J5t<+C;0DDC zgHCSryFv>h9i$CbvdZ5cs@GR*%=UMOXHTi(X4WXy8r;G<|J%@#NH-e{Hgc=4>kDJI zbBAJ+!JTaOlX_C`(YV;(R58QXRc&1qlTct<0@G*E&ldlP-qdHZ)nI^2G^#UJ-m){6 z-8-_}bsab0IA~zw1OsKaTNue7`^PNq=9s~XcLgwL6Ff19(`BN zV4`T8;R@5vwv&wsBiz4xM-C?B)k z%;nZ(Ju4-jP^WEMZhOuw6s&^Ad8=Kg-!%u@9l7>xp5jxDd4H4XpC(p(E)V(~sl^F( zG%CmSVGbS@@)vvE|IgB=1I=)+Ma13>96KjkoFv50;s@TCj0wTrQ z?}UiT-mfj8#Ya%-V@%n&@G#XY{kF)G;!!SzBV0a4DqeYrMPsxkRa||+a*e&r3cN0j zFX>K34scUEGRFEbZrgw6r(>8K57QeY$HQY}*2mQtme@mN1CU5Oau!6q36QD)r0Oh4 zyg1%7H&K?`ypOtLBCAPa_AJ$8qNK6$|)*CQcS<<`)*0B+L_&!Wj2*9}!87Q53I= zlM>y}17bx)9%QGiil2E%pf#cKBaiT?h#lv99^-ML+Q8R5!IS7h?5NP0CwIA&QJxYa zl~UEiGdwF8yKoWx!)Mq)M6p}(oMMWiR_0SYub8jsfKxP_re0x6Bz_}%gn=%-UzA>Z l#jju=FUuM{f_G%^6<*^lK9ZeUIh!M5eJpc)!e_!E{wJrYx3mBN delta 739 zcmX|-O;1x{5QU%H-uAt1uLh}tjY7dfF%W}@B33~wf~cryMZ^!Fd`STTp&%$&zgVMr z6BD;;;zDBrni4fJvSsTJ@E5prL!vlE!{VNqxijxMbLRPuRlj%T&*!f|l(_}(Pe;hh zJ}MRaZ4OXn;2(%j#>*#?iJ|i7*jRkJDKVbZzno!THHQ=to5LK@VY9@lrq<>t$8?KX zU>w(zX2^GfdPRfHNgDNQv(k!k+U5*R`iEJz`5fmJ%{CXfC@Ol{^y@NLk#R{kyDG9{ zIK9Lu&A=6#Hm+*z+U<^U-R6c~c5QVkI&`6X3%6jWROJ#4iLTNmjD_`fTrkrHKV5?M zzX7`Gk;+3aeL~U+#ygyN<=>+2@ztf$R76xjed3_O3-U5qjlnmf5o?jUfR*M{nzL`# zetaR;wnR&2IN(Zixiz5Dv&KU`Q@8!7gTH;xR?MqL}xDS)gRyY@Zlv$Hz_jv83yhSN&pI zOftZrM8#WSxg|%*;w8h3$T0$9I5o;`*(k(3V~k^p{G13E%dxANAt|zM`D&Qtj*v_V z)n3ds8nG19io1$Uifl!$Vnz{GRKqHv-xMffQc2Ezd1Z=pN<<$@?%GN_ja4>MPGjQ=Ra5L~sv{B*6$;?Y-WMK517~9Op zo}OCb1LiYpXnIb(r&79esja4<5+O@WN&6WUUmi+1`Y;JAmn4rW&*X*7k&L{Pe=}PF0IB2$ AlmGw# diff --git a/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfFunction.class b/Phase2Template/out/production/Phase2Template/main/compileError/nameErrors/RedefinitionOfFunction.class index 23fcaa8829a0b5e6f5ebc12e1b1b99432409cb0b..27ec8158de8bd02abae86fd530fb2f2163eecb22 100644 GIT binary patch delta 37 rcmX@bafo9>5;G&?mHh_K delta 45 zcmX@aaf)L@5;G?g0|Ns$0}lhk)Z2II0Uv8XsYJE%xdmPDJ% zaa2X5;HHw~B*{gRo1`?7JS2J57e{x*Oo&+!vmxd{_#oy&%!8P(`r=Ppvmh2iEP}{} z$Wi`;GRsojT>34eUmpFsV)Ahc;8wt`gj)q&2(y}`BH1d%QYs~~Q`V^8i8cCK=yeh% z>(xk-O|>QY^i4RMakk);Shk_IqjvD;rD|hxlYJLX8Tq@(FDJi({5|AXlE0Tu`;;T) zSMq)+Khy!JgHTma0jNVzhnb?9DULA3QRt~?OLNyz+|8e^C^Eel9E*eg;%coz$X~AhVoZGHk>s6d~Hg=7T zbx5>ys%h>L{RZw$xLc~)T^`nj>PFq6|6TguqkoTzOe?qC=cJdD2khgaI+vEO_u)Lk zd2Dou@>JRTaRzXnQ2mtZXH-9D`a!0D!SpXxk7p?671V1s^o9)$LB3@}@7U0L$PaAj zBOCg}hCZtS?-lD;=x@;9p?^UCR88p{OvAV%+`T0xP0U)5aSO{bJf_j8U_>(x0ifDnBhsrjnY!BLeDEgY-Vqlp6zu)=Kxj)n5H7Q}Jf#DJ+5fURKj0U`ze<4Pr(S#z-Xf}Le{Qadh z@m_P3gh-Uc%4kWHXi1hak}G2+pSgu%N`Z{i)PyR_1gKce%Zk*S3A1boC3lSYaYFP#(@DQ;3SNXgWGM{o3Gh$#?LA*Ml0hnN8|6Cy{u6OY+vL(GB5g_sL5 zPuEYZu;t^lQk}H~ zx|B{Ug|-c-ji_?oe3LFt@tGAkTgk2@yNc{>WN#;X2iZH>v`a@$ z8ceB%+6`3$wFk-zwHK-uY9ANuC-DFm9Ax$olyZrw#i>2!5hm-{c$BGn+G?PsMy8s0 zqh|7bnv+&-Jr30Zbwcl@d8{WGW7zQEjMpJ?t#Ccc3oNP$vy_$#}V>L(>bb zmvOscdUQ*AWkfIPDyom2*VuWToi}udtI~FhC%1WWhxfm$>hf6c<2=B5s9#+^^AYMX z>IswmOg?4u8P`7N+812=QqQ{w;$B0&p^X9BcnkTCHr~_52gr}K@rgD*)5aI=%Q$EM z2K^oS2lP+qL9NYPWBG;q+y5U6&vIJ=B*X|r Date: Thu, 25 Apr 2024 13:24:12 +0330 Subject: [PATCH 21/23] add Lpar Rpar to condition --- Phase1/Samples/1.fl | 4 +- .../Phase2/samples/{1.fl => all.fl} | 22 +- Phase2Template/Phase2/samples/all.txt | 9 + Phase2Template/Phase2/samples/in1.fl | 25 + Phase2Template/Phase2/samples/in10.fl | 20 + Phase2Template/Phase2/samples/in11.fl | 19 + Phase2Template/Phase2/samples/in2.fl | 20 + Phase2Template/Phase2/samples/in3.fl | 11 + Phase2Template/Phase2/samples/in4.fl | 9 + Phase2Template/Phase2/samples/in5.fl | 9 + Phase2Template/Phase2/samples/in6.fl | 15 + Phase2Template/Phase2/samples/in7.fl | 13 + Phase2Template/Phase2/samples/in8.fl | 11 + Phase2Template/Phase2/samples/in9.fl | 16 + Phase2Template/Phase2/samples/out1.txt | 4 + Phase2Template/Phase2/samples/out10.txt | 2 + Phase2Template/Phase2/samples/out11.txt | 0 Phase2Template/Phase2/samples/out2.txt | 11 + Phase2Template/Phase2/samples/out3.txt | 1 + Phase2Template/Phase2/samples/out4.txt | 1 + Phase2Template/Phase2/samples/out5.txt | 5 + Phase2Template/Phase2/samples/out6.txt | 1 + Phase2Template/Phase2/samples/out7.txt | 1 + Phase2Template/Phase2/samples/out8.txt | 1 + Phase2Template/Phase2/samples/out9.txt | 3 + Phase2Template/Phase2/samples/testCases.zip | Bin 0 -> 4350 bytes .../Phase2/src/main/FunctionCraft.java | 6 + .../Phase2/src/main/grammer/FunctionCraft.g4 | 11 +- .../visitor/nameAnalyzer/NameAnalyzer.java | 8 +- .../Phase2/src/parsers/FunctionCraft.interp | 2 +- .../src/parsers/FunctionCraftParser.java | 1262 +++++++++-------- .../Phase2Template/main/FunctionCraft.class | Bin 3478 -> 3755 bytes .../main/grammer/FunctionCraft.g4 | 11 +- .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 22491 -> 22580 bytes .../parsers/FunctionCraft.interp | 2 +- ...nCraftParser$AccessExpressionContext.class | Bin 3865 -> 3865 bytes ...unctionCraftParser$AccessListContext.class | Bin 2550 -> 2550 bytes ...raftParser$AdditiveExpressionContext.class | Bin 2904 -> 2904 bytes ...unctionCraftParser$AssignmentContext.class | Bin 3418 -> 3418 bytes .../FunctionCraftParser$BodyContext.class | Bin 2825 -> 2825 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...ionCraftParser$ChompStatementContext.class | Bin 2692 -> 2692 bytes ...tionCraftParser$ChopStatementContext.class | Bin 2681 -> 2681 bytes ...FunctionCraftParser$ConditionContext.class | Bin 3699 -> 3699 bytes ...raftParser$EqaulityExpressionContext.class | Bin 2998 -> 2998 bytes ...unctionCraftParser$ExpressionContext.class | Bin 2712 -> 2712 bytes ...onCraftParser$FilterStatementContext.class | Bin 3709 -> 3709 bytes ...ctionCraftParser$ForStatementContext.class | Bin 2995 -> 2995 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...nctionCraftParser$IfStatementContext.class | Bin 3625 -> 3929 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3336 -> 3336 bytes ...ctionCraftParser$LenStatementContext.class | Bin 2670 -> 2670 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes .../FunctionCraftParser$LoopBodyContext.class | Bin 4284 -> 4284 bytes ...onCraftParser$LoopDoStatementContext.class | Bin 2688 -> 2688 bytes ...tParser$MatchPatternStatementContext.class | Bin 2918 -> 2918 bytes ...rser$MultiplicativeExpressionContext.class | Bin 2935 -> 2935 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes ...raftParser$PreUnaryExpressionContext.class | Bin 2878 -> 2878 bytes ...tionCraftParser$PushStatementContext.class | Bin 3085 -> 3085 bytes ...tionCraftParser$PutsStatementContext.class | Bin 2754 -> 2754 bytes .../FunctionCraftParser$RangeContext.class | Bin 3488 -> 3488 bytes ...ftParser$RelationalExpressionContext.class | Bin 3103 -> 3103 bytes ...FunctionCraftParser$StatementContext.class | Bin 4183 -> 4183 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 68960 -> 69402 bytes 66 files changed, 901 insertions(+), 634 deletions(-) rename Phase2Template/Phase2/samples/{1.fl => all.fl} (50%) create mode 100644 Phase2Template/Phase2/samples/all.txt create mode 100644 Phase2Template/Phase2/samples/in1.fl create mode 100644 Phase2Template/Phase2/samples/in10.fl create mode 100644 Phase2Template/Phase2/samples/in11.fl create mode 100644 Phase2Template/Phase2/samples/in2.fl create mode 100644 Phase2Template/Phase2/samples/in3.fl create mode 100644 Phase2Template/Phase2/samples/in4.fl create mode 100644 Phase2Template/Phase2/samples/in5.fl create mode 100644 Phase2Template/Phase2/samples/in6.fl create mode 100644 Phase2Template/Phase2/samples/in7.fl create mode 100644 Phase2Template/Phase2/samples/in8.fl create mode 100644 Phase2Template/Phase2/samples/in9.fl create mode 100644 Phase2Template/Phase2/samples/out1.txt create mode 100644 Phase2Template/Phase2/samples/out10.txt create mode 100644 Phase2Template/Phase2/samples/out11.txt create mode 100644 Phase2Template/Phase2/samples/out2.txt create mode 100644 Phase2Template/Phase2/samples/out3.txt create mode 100644 Phase2Template/Phase2/samples/out4.txt create mode 100644 Phase2Template/Phase2/samples/out5.txt create mode 100644 Phase2Template/Phase2/samples/out6.txt create mode 100644 Phase2Template/Phase2/samples/out7.txt create mode 100644 Phase2Template/Phase2/samples/out8.txt create mode 100644 Phase2Template/Phase2/samples/out9.txt create mode 100644 Phase2Template/Phase2/samples/testCases.zip diff --git a/Phase1/Samples/1.fl b/Phase1/Samples/1.fl index 135dffb..96783ac 100644 --- a/Phase1/Samples/1.fl +++ b/Phase1/Samples/1.fl @@ -2,6 +2,4 @@ def main() a << b; push(a, c); puts(a); -end - - +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/1.fl b/Phase2Template/Phase2/samples/all.fl similarity index 50% rename from Phase2Template/Phase2/samples/1.fl rename to Phase2Template/Phase2/samples/all.fl index 0626d07..e93f291 100644 --- a/Phase2Template/Phase2/samples/1.fl +++ b/Phase2Template/Phase2/samples/all.fl @@ -1,5 +1,4 @@ -=begin def y() return z(); end @@ -17,22 +16,33 @@ def f() end def g() - return h(); + return f(); end def h() - return f(); + a = 1; + b = 2; + return myfunc2(a, b); end -=end -def abbas(a, b, [c=2]) +pattern a(a) + |(a == 1)= a + |(a == 2)= a+1 + ; + +def myFunc(myFunc, a, a,b, [c=2]) return a + b + c; end +def myfunc2(a, b, [c=1]) + return; +end def main() a = 5; b = 6; puts("salam"); - abbas(a, b); + myFunc(c, b); + myfunc2(a, b); + ali(a); end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/all.txt b/Phase2Template/Phase2/samples/all.txt new file mode 100644 index 0000000..793c3d8 --- /dev/null +++ b/Phase2Template/Phase2/samples/all.txt @@ -0,0 +1,9 @@ +Line:28-> target variable a has same name with pattern +Line:33-> argument myFunc has same name with function +Line:33-> argument a is duplicated +Line:45-> variable c is not declared +Line:45-> number of arguments provided for function myFunc does not match with its declaration +Line:47-> function ali is not declared +Line:47-> number of arguments provided for function ali does not match with its declaration +*-> defenition of functions hh, z, y contains circular dependency +*-> defenition of functions f, \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in1.fl b/Phase2Template/Phase2/samples/in1.fl new file mode 100644 index 0000000..91ec170 --- /dev/null +++ b/Phase2Template/Phase2/samples/in1.fl @@ -0,0 +1,25 @@ + +def f() + return g(); +end + + +def g() + return h(); +end + +def h() + a = 5; + b = 2; + if (a>b) + return; + elseif((a+b>2) || (a<0)) + return; + else + return; + end +end + +def main() + puts("Loop!"); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in10.fl b/Phase2Template/Phase2/samples/in10.fl new file mode 100644 index 0000000..0205bee --- /dev/null +++ b/Phase2Template/Phase2/samples/in10.fl @@ -0,0 +1,20 @@ +def f() + return g(); +end + + +def g() + return h(); +end + +def h() + return y(); +end + +def y() + return f(); +end + +def main() + puts(get_size(1)); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in11.fl b/Phase2Template/Phase2/samples/in11.fl new file mode 100644 index 0000000..32137be --- /dev/null +++ b/Phase2Template/Phase2/samples/in11.fl @@ -0,0 +1,19 @@ +def f(a, b, [c = 2]) + return a + b + c; +end + + +def g(a, b, c) + f(a, b); + return a + b + c; +end + + +def main() + a = 1; + b = 2; + f(a, b, c); + f(b); + f(a, b); + g(a, b); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in2.fl b/Phase2Template/Phase2/samples/in2.fl new file mode 100644 index 0000000..3cc2317 --- /dev/null +++ b/Phase2Template/Phase2/samples/in2.fl @@ -0,0 +1,20 @@ +def compare() + if (a > b) + if(b > c) + puts(a); + return a; + else + return c; + end + else + if (c > b) + return c; + else + return b; + end + end +end + +def main() + puts("salam"); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in3.fl b/Phase2Template/Phase2/samples/in3.fl new file mode 100644 index 0000000..e8430bd --- /dev/null +++ b/Phase2Template/Phase2/samples/in3.fl @@ -0,0 +1,11 @@ +def compare(a, b, compare) + if (a > b) + return "true"; + else + return false; + end +end + +def main() + puts("salam"); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in4.fl b/Phase2Template/Phase2/samples/in4.fl new file mode 100644 index 0000000..c01992e --- /dev/null +++ b/Phase2Template/Phase2/samples/in4.fl @@ -0,0 +1,9 @@ +pattern fib(n) + | (n == 0) = 1 + | (n == 1) = 1 + | (n > 2) = fib.match(n-1) + fib.match(n-2) +; + +def main() + fib_5 = fib_.match(5); +end diff --git a/Phase2Template/Phase2/samples/in5.fl b/Phase2Template/Phase2/samples/in5.fl new file mode 100644 index 0000000..8024264 --- /dev/null +++ b/Phase2Template/Phase2/samples/in5.fl @@ -0,0 +1,9 @@ +pattern fib(fib) + | (n == 0) = 1 + | (n == 1) = 1 + | (n > 2) = fib.match(n-1) + fib.match(n-2) +; + +def main() + fib_5 = fib_.match(5); +end diff --git a/Phase2Template/Phase2/samples/in6.fl b/Phase2Template/Phase2/samples/in6.fl new file mode 100644 index 0000000..bea4932 --- /dev/null +++ b/Phase2Template/Phase2/samples/in6.fl @@ -0,0 +1,15 @@ +pattern fib(n) + | (n == 0) = 1 + | (n == 1) = 1 + | (n > 2) = fib.match(n-1) + fib.match(n-2) +; + +pattern fib(n) + | (n == 0) = 2 + | (n == 1) = 3 + | (n > 2) = fib.match(n-1) + fib.match(n-2) +; + +def main() + fib_5 = fib.match(5); +end diff --git a/Phase2Template/Phase2/samples/in7.fl b/Phase2Template/Phase2/samples/in7.fl new file mode 100644 index 0000000..058c1ec --- /dev/null +++ b/Phase2Template/Phase2/samples/in7.fl @@ -0,0 +1,13 @@ +def f() + puts(f()); + puts([1,2,3,4]); + puts(true); + puts(false); +end + +def f() +end + +def main() + puts("salam"); +end diff --git a/Phase2Template/Phase2/samples/in8.fl b/Phase2Template/Phase2/samples/in8.fl new file mode 100644 index 0000000..a915a43 --- /dev/null +++ b/Phase2Template/Phase2/samples/in8.fl @@ -0,0 +1,11 @@ +def get_size(get_size) + return len(g()[get_size]); +end + +def g() + return [[1, 2]]; +end + +def main() + puts(get_size(1)); +end diff --git a/Phase2Template/Phase2/samples/in9.fl b/Phase2Template/Phase2/samples/in9.fl new file mode 100644 index 0000000..f651d32 --- /dev/null +++ b/Phase2Template/Phase2/samples/in9.fl @@ -0,0 +1,16 @@ +def get_size(get_size) + return len(g()[get_size]); +end + +def g() + return [[1, 2]]; +end + + +def f(a, b, a) + return compare(a, b); +end + +def main() + puts(get_size(1)); +end diff --git a/Phase2Template/Phase2/samples/out1.txt b/Phase2Template/Phase2/samples/out1.txt new file mode 100644 index 0000000..2fa46ab --- /dev/null +++ b/Phase2Template/Phase2/samples/out1.txt @@ -0,0 +1,4 @@ +Line:2-> variable a is not declared +Line:3-> variable a is not declared +Line:3-> variable c is not declared +Line:4-> variable a is not declared \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out10.txt b/Phase2Template/Phase2/samples/out10.txt new file mode 100644 index 0000000..56f281c --- /dev/null +++ b/Phase2Template/Phase2/samples/out10.txt @@ -0,0 +1,2 @@ +Line:19-> function get_size is not declared +*-> defenition of functions f, y, h, g contains circular dependency \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out11.txt b/Phase2Template/Phase2/samples/out11.txt new file mode 100644 index 0000000..e69de29 diff --git a/Phase2Template/Phase2/samples/out2.txt b/Phase2Template/Phase2/samples/out2.txt new file mode 100644 index 0000000..8fc80ea --- /dev/null +++ b/Phase2Template/Phase2/samples/out2.txt @@ -0,0 +1,11 @@ +Line:2-> variable a is not declared +Line:2-> variable b is not declared +Line:3-> variable b is not declared +Line:3-> variable c is not declared +Line:4-> variable a is not declared +Line:5-> variable a is not declared +Line:7-> variable c is not declared +Line:10-> variable c is not declared +Line:10-> variable b is not declared +Line:11-> variable c is not declared +Line:13-> variable b is not declared \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out3.txt b/Phase2Template/Phase2/samples/out3.txt new file mode 100644 index 0000000..088d07d --- /dev/null +++ b/Phase2Template/Phase2/samples/out3.txt @@ -0,0 +1 @@ +Line:1-> argument compare has same name with function \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out4.txt b/Phase2Template/Phase2/samples/out4.txt new file mode 100644 index 0000000..976fcce --- /dev/null +++ b/Phase2Template/Phase2/samples/out4.txt @@ -0,0 +1 @@ +Line:8-> pattern fib_ is not declared \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out5.txt b/Phase2Template/Phase2/samples/out5.txt new file mode 100644 index 0000000..c7bac8b --- /dev/null +++ b/Phase2Template/Phase2/samples/out5.txt @@ -0,0 +1,5 @@ +Line:1-> target variable fib has same name with pattern +Line:4-> variable n is not declared +Line:4-> variable n is not declared +Line:4-> variable n is not declared +Line:8-> pattern fib_ is not declared \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out6.txt b/Phase2Template/Phase2/samples/out6.txt new file mode 100644 index 0000000..c600ddc --- /dev/null +++ b/Phase2Template/Phase2/samples/out6.txt @@ -0,0 +1 @@ +Line:7-> Redefinition of pattern fib \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out7.txt b/Phase2Template/Phase2/samples/out7.txt new file mode 100644 index 0000000..d7963ad --- /dev/null +++ b/Phase2Template/Phase2/samples/out7.txt @@ -0,0 +1 @@ +Line:8-> Redefinition of function f \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out8.txt b/Phase2Template/Phase2/samples/out8.txt new file mode 100644 index 0000000..c262686 --- /dev/null +++ b/Phase2Template/Phase2/samples/out8.txt @@ -0,0 +1 @@ +Line:1-> argument get_size has same name with function \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/out9.txt b/Phase2Template/Phase2/samples/out9.txt new file mode 100644 index 0000000..6a98dae --- /dev/null +++ b/Phase2Template/Phase2/samples/out9.txt @@ -0,0 +1,3 @@ +Line:1-> argument get_size has same name with function +Line:10-> argument a is duplicated +Line:11-> function compare is not declared \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/testCases.zip b/Phase2Template/Phase2/samples/testCases.zip new file mode 100644 index 0000000000000000000000000000000000000000..468a766e55f1145387c8311f00fa8c8b3eed310e GIT binary patch literal 4350 zcmb`K3pCVu8^`~~OidFtHkC`4QHYFTh7qZjsAkLzGyceSah;)&C_Bou-c4>BrIj*5 z7lbG)Dz$Alm$W077*tzm6;``QOBdU2`~Lo8^8fF?^PaQkJul~X<~V%5&-eLVp69{m zXySDt2qHo!B}aX)6yjYPz)uqz5Ht;Z28M^zLc&FS-poV_`R4QwU*#VaWF>ZUB;B7@ z4h1sa$7Pr~>b-ydP~o&yXF<;wV*_c%;&sz=LX0&&_sM_bUF&=))p+d{W23Ae58&&_ z7VdZ4B;4o~?cZ}3|FC;s`Bf-C`QpXs;4mLT+NF`*4f^#sgZn|wMTz-G3dSZpp9{+_ z8dy6$O6e=AKljClGXJ|-kIzD@BH`-XheLDLZ;ktyJ(c8l z+W%CKQ{@77Z(`D`);Sc{GCo~LJ|0`KUXP!dTDIuToU49@p}rhrk~lW<*@&QKg%3rqGMFwc2#=S2&$2XQ}h@td|2JG1an@yv@U6vH2J z?3@RW!Z}}!#mTVQzXAI>-9MZk4NO?59*#JI0g{hS?_cE%bm6o9*tXQ zYA7~S+?3}&xX~$E{KpSJMb@59GkAQgz_f+?A)&7MQ;(7?o{r^rrCnK~`RERj56FBM z#DLhq*m1BX584KK(PpEF_SwhYH4UywaJ8=<`Mtz*F*9K>I^8_VgWQU1*#6<3t30q*of<-lFTi%0Nja-GiU3oqRgtS$J&6^3DJi=yz zix=HRLU$xAO(*kj`$Yt?qmtL3qVd!0QsZ=51Gf9o{K}7Y*d}$|X;N+AE=HE;}K|DVifl?x9mBSTP-qx*N;O4l_ zwQ-$)3AV<~(1`w}-&AHCx~=a8u5;TNqMn8}xIxeQ-9EmWxW{-e-AGc~!r9(C&du=3 z&dI86Bw$>O0~gD33L3<~0deZ0*!|7L|F{*nwO8~5E1QpRdE)8Wu8X`M+dMmsx%IgP zgLa+x-51x%nC8yM$zKp(cM!7a7+II(KzFs)d8Lz)Y zv;P>)!!pIHrOd4}j&3WxrW==MR#kY}%)@9I(_`sY7aIdp!}H?i#!O^C>l-t1it_#E z)~tNY-%w*_H_zKUA}C}LH_%zkrgt&4U3lN_$Hcu3;vU&=_|py$w{|K^hyO#|d{P08 zhZIHj1|uDBY1Eey&Ow6ZzMnMrAs6y^FQLe!e&_Tsy|CI$9LCT9C>HETqta3c4ht?0*7W)CkonXySDO)4bs~hR0IBT+No8Raxm_wyjjpBQpg*I)39}c7> zo$3h)d_NKC`MmY@@PVD#!nEW}srzr_oB(eYSyNqpUKg+p2T zHffu})#F;KA7!%6;GMg&3Yn`+Rt&36?e!%JKQe12B zpVeL)Gm%BvMa2gGfnTzB@U-8udvC}3$E(-UIy?^Hv-9W4PnbrveDCsB@Q^1yzuK`Z zE_PccGh|iwyoM8kCP7Xy8P*j(Uwuwje1{X182;tH7vJ1^J$zyByCOeKvk3i4=6h>5 zr78wX zIcNh=_gIk)>BvDd!BR!EK_hll!7QqqRWq;ILcnUdZwY?zmb0inX6{WqZ@H#Uf3}G} zNn9jtFv*^fPAP-V3d+dU*x-{UKowakWm`mI2h@v7WA>tr^iuiL% zM5Kfw6a|L|Mu~*zaoq$`0j>Tf$en3MrI>#)X$CHyhou0$l#N`^|L{pjF)=A!C%v&{ z4JFOgDQ)LMDJi?2B%LrJnU^*=q^v77_u44b@WMw!@_)S=yoX6=D|n(O%L}88L40JX z(y^OLX9Y;dQzR6Hh$F-jabyG~G6b6*nvEGy>KU;aGXg40QKc1A*<5U`f{AWCHm|X% zk=oF7AC`N-EQ@B&v`g(%hKSH{ATzJk#}qj=J55lT+2Me{gg}NFO|p(uDq$ zU?7`}N;@FZyhG05iE80r#_xMHo4EJ&k28NyNVE&9E)Ih6{uk!rt!8T4IHpEDWoi!k zMg=gb;c&*mO3$?g)vb)Pk5V1Z+oWvT`20!LpXrntYhLEsGv1trTW-&yC7+x{D_)-v zdUf?+B%h;!(}n)~xDOmb8W08f0AG{CKbBE9H6wpH$qcI)kP8-4H*TWP3-A~xhfge{ zZlFXNM=-Ff#!D=uZXiUVib)6=53!KC;SGfxG?7TiD2HX#%~dF)P%_Arg=N%@K`65k zkHkTSA}phBYC)MUC4S9z0Lr{nGRRqR$ z-m#3jW{fhON(O1oSVmpHM41rqpT@`TiKW!_LX@gjQOeGU#ng2#6k7)>6B10>%dnWb z=7M6~lbEvAU@3JC0;N1a`v$?3?E tempArray = new ArrayList(); } - (ELSEIF c2 = condition + (ELSEIF LPAR c2 = condition RPAR { $ifRet.addCondition($c2.conditionRet); } @@ -242,7 +242,7 @@ loopBody returns [ArrayList loopStmts, ArrayList loopExps | NEXT (IF c2 = condition{$loopExps.addAll($c2.conditionRet);})? SEMICOLLON )* ( - r = returnStatement {$loopRetStmt = $r.returnStmtRet;} + r = returnStatement {$loopRetStmt = $r.returnStmtRet;$loopRetStmt.setLine($r.returnStmtRet.getLine());} )?; forStatement returns [ForStatement forStRet]: @@ -313,6 +313,7 @@ matchPatternStatement returns [MatchPatternStatement matchPatRet]: id = IDENTIFIER DOT m = MATCH LPAR e = expression RPAR { Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); $matchPatRet = new MatchPatternStatement(id_, $e.expRet); $matchPatRet.setLine($m.line); } diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index 2574bc8..e8dffec 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -74,6 +74,7 @@ public Void visit(Program program){ newId.setName(freshName); patternDeclaration.setPatternName(newId); PatternItem newItem = new PatternItem(patternDeclaration); + patternItems.add(newItem); try{ SymbolTable.root.put(newItem); }catch (ItemAlreadyExists ignored){} @@ -350,6 +351,7 @@ public Void visit(UnaryExpression unaryExpression){ public Void visit(AccessExpression accessExpression){ int minArgRequired = 0; int maxArgRequired = 0; + boolean functionNotDeclared = false; if(accessExpression.isFunctionCall()){ isFunctionCallId = true; accessExpression.getAccessedExpression().accept(this); @@ -363,7 +365,9 @@ public Void visit(AccessExpression accessExpression){ } } minArgRequired = maxArgRequired - minArgRequired; - }catch (ItemNotFound ignored){} + }catch (ItemNotFound ignored){ + functionNotDeclared = true; + } } else{ @@ -374,7 +378,7 @@ public Void visit(AccessExpression accessExpression){ numberOfProvidedArgs += 1; expression.accept(this); } - if((numberOfProvidedArgs < minArgRequired) || (numberOfProvidedArgs > maxArgRequired)){ + if(!functionNotDeclared && ((numberOfProvidedArgs < minArgRequired) || (numberOfProvidedArgs > maxArgRequired))){ Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); nameErrors.add(new ArgMisMatch(accessExpression.getLine(), functionName.getName())); } diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp index cc411c8..5fcebc2 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 661, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 471, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 479, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 495, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 500, 8, 26, 10, 26, 12, 26, 503, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 515, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 520, 8, 27, 10, 27, 12, 27, 523, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 535, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 540, 8, 28, 10, 28, 12, 28, 543, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 554, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 562, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 571, 8, 30, 10, 30, 12, 30, 574, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 579, 8, 30, 10, 30, 12, 30, 582, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 613, 8, 31, 1, 31, 3, 31, 616, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 641, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 652, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 695, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 478, 1, 0, 0, 0, 52, 480, 1, 0, 0, 0, 54, 504, 1, 0, 0, 0, 56, 524, 1, 0, 0, 0, 58, 561, 1, 0, 0, 0, 60, 563, 1, 0, 0, 0, 62, 615, 1, 0, 0, 0, 64, 617, 1, 0, 0, 0, 66, 640, 1, 0, 0, 0, 68, 642, 1, 0, 0, 0, 70, 651, 1, 0, 0, 0, 72, 653, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 3, 52, 26, 0, 465, 470, 6, 25, -1, 0, 466, 467, 5, 24, 0, 0, 467, 471, 6, 25, -1, 0, 468, 469, 5, 25, 0, 0, 469, 471, 6, 25, -1, 0, 470, 466, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 3, 52, 26, 0, 473, 474, 6, 25, -1, 0, 474, 479, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 477, 6, 25, -1, 0, 477, 479, 1, 0, 0, 0, 478, 464, 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 479, 51, 1, 0, 0, 0, 480, 481, 6, 26, -1, 0, 481, 482, 3, 54, 27, 0, 482, 483, 6, 26, -1, 0, 483, 501, 1, 0, 0, 0, 484, 485, 10, 2, 0, 0, 485, 494, 6, 26, -1, 0, 486, 487, 5, 28, 0, 0, 487, 495, 6, 26, -1, 0, 488, 489, 5, 29, 0, 0, 489, 495, 6, 26, -1, 0, 490, 491, 5, 26, 0, 0, 491, 495, 6, 26, -1, 0, 492, 493, 5, 27, 0, 0, 493, 495, 6, 26, -1, 0, 494, 486, 1, 0, 0, 0, 494, 488, 1, 0, 0, 0, 494, 490, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 3, 54, 27, 0, 497, 498, 6, 26, -1, 0, 498, 500, 1, 0, 0, 0, 499, 484, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 53, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 505, 6, 27, -1, 0, 505, 506, 3, 56, 28, 0, 506, 507, 6, 27, -1, 0, 507, 521, 1, 0, 0, 0, 508, 509, 10, 2, 0, 0, 509, 514, 6, 27, -1, 0, 510, 511, 5, 20, 0, 0, 511, 515, 6, 27, -1, 0, 512, 513, 5, 21, 0, 0, 513, 515, 6, 27, -1, 0, 514, 510, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 520, 1, 0, 0, 0, 519, 508, 1, 0, 0, 0, 520, 523, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 55, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 524, 525, 6, 28, -1, 0, 525, 526, 3, 58, 29, 0, 526, 527, 6, 28, -1, 0, 527, 541, 1, 0, 0, 0, 528, 529, 10, 2, 0, 0, 529, 534, 6, 28, -1, 0, 530, 531, 5, 22, 0, 0, 531, 535, 6, 28, -1, 0, 532, 533, 5, 23, 0, 0, 533, 535, 6, 28, -1, 0, 534, 530, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 540, 1, 0, 0, 0, 539, 528, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 57, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 553, 6, 29, -1, 0, 545, 546, 5, 32, 0, 0, 546, 554, 6, 29, -1, 0, 547, 548, 5, 21, 0, 0, 548, 554, 6, 29, -1, 0, 549, 550, 5, 33, 0, 0, 550, 554, 6, 29, -1, 0, 551, 552, 5, 34, 0, 0, 552, 554, 6, 29, -1, 0, 553, 545, 1, 0, 0, 0, 553, 547, 1, 0, 0, 0, 553, 549, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 3, 60, 30, 0, 556, 557, 6, 29, -1, 0, 557, 562, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 6, 29, -1, 0, 560, 562, 1, 0, 0, 0, 561, 544, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 562, 59, 1, 0, 0, 0, 563, 564, 6, 30, -1, 0, 564, 572, 3, 62, 31, 0, 565, 566, 5, 49, 0, 0, 566, 567, 3, 10, 5, 0, 567, 568, 6, 30, -1, 0, 568, 569, 5, 50, 0, 0, 569, 571, 1, 0, 0, 0, 570, 565, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 580, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 576, 3, 42, 21, 0, 576, 577, 6, 30, -1, 0, 577, 579, 1, 0, 0, 0, 578, 575, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 583, 584, 6, 30, -1, 0, 584, 61, 1, 0, 0, 0, 585, 586, 3, 66, 33, 0, 586, 587, 6, 31, -1, 0, 587, 616, 1, 0, 0, 0, 588, 589, 5, 62, 0, 0, 589, 616, 6, 31, -1, 0, 590, 591, 3, 64, 32, 0, 591, 592, 6, 31, -1, 0, 592, 616, 1, 0, 0, 0, 593, 594, 3, 36, 18, 0, 594, 595, 6, 31, -1, 0, 595, 616, 1, 0, 0, 0, 596, 597, 3, 38, 19, 0, 597, 598, 6, 31, -1, 0, 598, 616, 1, 0, 0, 0, 599, 600, 3, 34, 17, 0, 600, 601, 6, 31, -1, 0, 601, 616, 1, 0, 0, 0, 602, 603, 3, 32, 16, 0, 603, 604, 6, 31, -1, 0, 604, 616, 1, 0, 0, 0, 605, 606, 3, 20, 10, 0, 606, 607, 6, 31, -1, 0, 607, 616, 1, 0, 0, 0, 608, 612, 5, 49, 0, 0, 609, 610, 3, 48, 24, 0, 610, 611, 6, 31, -1, 0, 611, 613, 1, 0, 0, 0, 612, 609, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 5, 50, 0, 0, 615, 585, 1, 0, 0, 0, 615, 588, 1, 0, 0, 0, 615, 590, 1, 0, 0, 0, 615, 593, 1, 0, 0, 0, 615, 596, 1, 0, 0, 0, 615, 599, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 615, 608, 1, 0, 0, 0, 616, 63, 1, 0, 0, 0, 617, 618, 5, 42, 0, 0, 618, 619, 3, 4, 2, 0, 619, 620, 5, 53, 0, 0, 620, 621, 3, 46, 23, 0, 621, 622, 5, 54, 0, 0, 622, 623, 3, 10, 5, 0, 623, 624, 6, 32, -1, 0, 624, 65, 1, 0, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 6, 33, -1, 0, 627, 641, 1, 0, 0, 0, 628, 629, 5, 63, 0, 0, 629, 641, 6, 33, -1, 0, 630, 631, 5, 60, 0, 0, 631, 641, 6, 33, -1, 0, 632, 633, 5, 61, 0, 0, 633, 641, 6, 33, -1, 0, 634, 635, 3, 68, 34, 0, 635, 636, 6, 33, -1, 0, 636, 641, 1, 0, 0, 0, 637, 638, 3, 72, 36, 0, 638, 639, 6, 33, -1, 0, 639, 641, 1, 0, 0, 0, 640, 625, 1, 0, 0, 0, 640, 628, 1, 0, 0, 0, 640, 630, 1, 0, 0, 0, 640, 632, 1, 0, 0, 0, 640, 634, 1, 0, 0, 0, 640, 637, 1, 0, 0, 0, 641, 67, 1, 0, 0, 0, 642, 643, 5, 51, 0, 0, 643, 644, 3, 10, 5, 0, 644, 645, 5, 52, 0, 0, 645, 646, 6, 34, -1, 0, 646, 69, 1, 0, 0, 0, 647, 648, 5, 38, 0, 0, 648, 652, 6, 35, -1, 0, 649, 650, 5, 39, 0, 0, 650, 652, 6, 35, -1, 0, 651, 647, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 71, 1, 0, 0, 0, 653, 654, 5, 11, 0, 0, 654, 655, 5, 49, 0, 0, 655, 656, 5, 58, 0, 0, 656, 657, 5, 62, 0, 0, 657, 658, 5, 50, 0, 0, 658, 659, 6, 36, -1, 0, 659, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 470, 478, 494, 501, 514, 521, 534, 541, 553, 561, 572, 580, 612, 615, 640, 651] \ No newline at end of file +[4, 1, 65, 672, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 220, 8, 7, 10, 7, 12, 7, 223, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 229, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 241, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 5, 8, 248, 8, 8, 10, 8, 12, 8, 251, 9, 8, 5, 8, 253, 8, 8, 10, 8, 12, 8, 256, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 295, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 13, 5, 13, 306, 8, 13, 10, 13, 12, 13, 309, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 340, 8, 15, 10, 15, 12, 15, 343, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 349, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 365, 8, 16, 10, 16, 12, 16, 368, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 398, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 412, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 446, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 452, 8, 23, 10, 23, 12, 23, 455, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 471, 8, 24, 10, 24, 12, 24, 474, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 506, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 511, 8, 26, 10, 26, 12, 26, 514, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 526, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 531, 8, 27, 10, 27, 12, 27, 534, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 546, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 551, 8, 28, 10, 28, 12, 28, 554, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 565, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 573, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 582, 8, 30, 10, 30, 12, 30, 585, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 590, 8, 30, 10, 30, 12, 30, 593, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 624, 8, 31, 1, 31, 3, 31, 627, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 652, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 663, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 707, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 233, 1, 0, 0, 0, 18, 257, 1, 0, 0, 0, 20, 264, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 279, 1, 0, 0, 0, 26, 285, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 348, 1, 0, 0, 0, 32, 350, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 380, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 392, 1, 0, 0, 0, 42, 417, 1, 0, 0, 0, 44, 445, 1, 0, 0, 0, 46, 447, 1, 0, 0, 0, 48, 461, 1, 0, 0, 0, 50, 489, 1, 0, 0, 0, 52, 491, 1, 0, 0, 0, 54, 515, 1, 0, 0, 0, 56, 535, 1, 0, 0, 0, 58, 572, 1, 0, 0, 0, 60, 574, 1, 0, 0, 0, 62, 626, 1, 0, 0, 0, 64, 628, 1, 0, 0, 0, 66, 651, 1, 0, 0, 0, 68, 653, 1, 0, 0, 0, 70, 662, 1, 0, 0, 0, 72, 664, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 46, 23, 0, 209, 210, 6, 7, -1, 0, 210, 221, 6, 7, -1, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 49, 0, 0, 213, 214, 3, 16, 8, 0, 214, 215, 5, 50, 0, 0, 215, 216, 6, 7, -1, 0, 216, 217, 3, 46, 23, 0, 217, 218, 6, 7, -1, 0, 218, 220, 1, 0, 0, 0, 219, 211, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 228, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 5, 9, 0, 0, 225, 226, 3, 46, 23, 0, 226, 227, 6, 7, -1, 0, 227, 229, 1, 0, 0, 0, 228, 224, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 7, -1, 0, 231, 232, 5, 2, 0, 0, 232, 15, 1, 0, 0, 0, 233, 254, 6, 8, -1, 0, 234, 235, 5, 49, 0, 0, 235, 236, 3, 48, 24, 0, 236, 237, 6, 8, -1, 0, 237, 249, 5, 50, 0, 0, 238, 240, 7, 0, 0, 0, 239, 241, 5, 49, 0, 0, 240, 239, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 3, 16, 8, 0, 243, 245, 6, 8, -1, 0, 244, 246, 5, 50, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 238, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 234, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 17, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 4, 0, 0, 258, 259, 5, 49, 0, 0, 259, 260, 3, 48, 24, 0, 260, 261, 6, 9, -1, 0, 261, 262, 5, 50, 0, 0, 262, 263, 5, 59, 0, 0, 263, 19, 1, 0, 0, 0, 264, 265, 5, 6, 0, 0, 265, 266, 5, 49, 0, 0, 266, 267, 3, 48, 24, 0, 267, 268, 6, 10, -1, 0, 268, 269, 5, 50, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 5, 0, 0, 271, 272, 5, 49, 0, 0, 272, 273, 3, 48, 24, 0, 273, 274, 5, 55, 0, 0, 274, 275, 3, 48, 24, 0, 275, 276, 5, 50, 0, 0, 276, 277, 5, 59, 0, 0, 277, 278, 6, 11, -1, 0, 278, 23, 1, 0, 0, 0, 279, 280, 5, 14, 0, 0, 280, 281, 5, 17, 0, 0, 281, 282, 3, 26, 13, 0, 282, 283, 6, 12, -1, 0, 283, 284, 5, 2, 0, 0, 284, 25, 1, 0, 0, 0, 285, 307, 6, 13, -1, 0, 286, 287, 3, 44, 22, 0, 287, 288, 6, 13, -1, 0, 288, 306, 1, 0, 0, 0, 289, 294, 5, 40, 0, 0, 290, 291, 5, 8, 0, 0, 291, 292, 3, 16, 8, 0, 292, 293, 6, 13, -1, 0, 293, 295, 1, 0, 0, 0, 294, 290, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 306, 5, 59, 0, 0, 297, 302, 5, 41, 0, 0, 298, 299, 5, 8, 0, 0, 299, 300, 3, 16, 8, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 298, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 5, 59, 0, 0, 305, 286, 1, 0, 0, 0, 305, 289, 1, 0, 0, 0, 305, 297, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 313, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 311, 3, 12, 6, 0, 311, 312, 6, 13, -1, 0, 312, 314, 1, 0, 0, 0, 313, 310, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 15, 0, 0, 316, 317, 5, 62, 0, 0, 317, 318, 5, 16, 0, 0, 318, 319, 3, 30, 15, 0, 319, 320, 3, 26, 13, 0, 320, 321, 5, 2, 0, 0, 321, 322, 6, 14, -1, 0, 322, 29, 1, 0, 0, 0, 323, 324, 6, 15, -1, 0, 324, 325, 5, 49, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 57, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 50, 0, 0, 331, 349, 1, 0, 0, 0, 332, 333, 5, 51, 0, 0, 333, 334, 3, 48, 24, 0, 334, 341, 6, 15, -1, 0, 335, 336, 5, 55, 0, 0, 336, 337, 3, 48, 24, 0, 337, 338, 6, 15, -1, 0, 338, 340, 1, 0, 0, 0, 339, 335, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 345, 5, 52, 0, 0, 345, 349, 1, 0, 0, 0, 346, 347, 5, 62, 0, 0, 347, 349, 6, 15, -1, 0, 348, 323, 1, 0, 0, 0, 348, 332, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 31, 1, 0, 0, 0, 350, 351, 6, 16, -1, 0, 351, 352, 5, 51, 0, 0, 352, 353, 3, 48, 24, 0, 353, 354, 5, 36, 0, 0, 354, 355, 5, 62, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 30, 15, 0, 357, 358, 5, 55, 0, 0, 358, 359, 3, 48, 24, 0, 359, 366, 6, 16, -1, 0, 360, 361, 5, 55, 0, 0, 361, 362, 3, 48, 24, 0, 362, 363, 6, 16, -1, 0, 363, 365, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 370, 6, 16, -1, 0, 370, 371, 5, 52, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 5, 62, 0, 0, 373, 374, 5, 56, 0, 0, 374, 375, 5, 13, 0, 0, 375, 376, 5, 49, 0, 0, 376, 377, 3, 48, 24, 0, 377, 378, 5, 50, 0, 0, 378, 379, 6, 17, -1, 0, 379, 35, 1, 0, 0, 0, 380, 381, 5, 18, 0, 0, 381, 382, 5, 49, 0, 0, 382, 383, 3, 48, 24, 0, 383, 384, 5, 50, 0, 0, 384, 385, 6, 18, -1, 0, 385, 37, 1, 0, 0, 0, 386, 387, 5, 19, 0, 0, 387, 388, 5, 49, 0, 0, 388, 389, 3, 48, 24, 0, 389, 390, 5, 50, 0, 0, 390, 391, 6, 19, -1, 0, 391, 39, 1, 0, 0, 0, 392, 393, 6, 20, -1, 0, 393, 397, 5, 62, 0, 0, 394, 395, 3, 42, 21, 0, 395, 396, 6, 20, -1, 0, 396, 398, 1, 0, 0, 0, 397, 394, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 411, 1, 0, 0, 0, 399, 400, 5, 48, 0, 0, 400, 412, 6, 20, -1, 0, 401, 402, 5, 43, 0, 0, 402, 412, 6, 20, -1, 0, 403, 404, 5, 44, 0, 0, 404, 412, 6, 20, -1, 0, 405, 406, 5, 46, 0, 0, 406, 412, 6, 20, -1, 0, 407, 408, 5, 45, 0, 0, 408, 412, 6, 20, -1, 0, 409, 410, 5, 47, 0, 0, 410, 412, 6, 20, -1, 0, 411, 399, 1, 0, 0, 0, 411, 401, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 411, 405, 1, 0, 0, 0, 411, 407, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 3, 48, 24, 0, 414, 415, 5, 59, 0, 0, 415, 416, 6, 20, -1, 0, 416, 41, 1, 0, 0, 0, 417, 418, 5, 51, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 6, 21, -1, 0, 420, 421, 5, 52, 0, 0, 421, 43, 1, 0, 0, 0, 422, 423, 3, 14, 7, 0, 423, 424, 6, 22, -1, 0, 424, 446, 1, 0, 0, 0, 425, 426, 3, 24, 12, 0, 426, 427, 6, 22, -1, 0, 427, 446, 1, 0, 0, 0, 428, 429, 3, 28, 14, 0, 429, 430, 6, 22, -1, 0, 430, 446, 1, 0, 0, 0, 431, 432, 3, 18, 9, 0, 432, 433, 6, 22, -1, 0, 433, 446, 1, 0, 0, 0, 434, 435, 3, 22, 11, 0, 435, 436, 6, 22, -1, 0, 436, 446, 1, 0, 0, 0, 437, 438, 3, 48, 24, 0, 438, 439, 6, 22, -1, 0, 439, 440, 6, 22, -1, 0, 440, 441, 5, 59, 0, 0, 441, 446, 1, 0, 0, 0, 442, 443, 3, 40, 20, 0, 443, 444, 6, 22, -1, 0, 444, 446, 1, 0, 0, 0, 445, 422, 1, 0, 0, 0, 445, 425, 1, 0, 0, 0, 445, 428, 1, 0, 0, 0, 445, 431, 1, 0, 0, 0, 445, 434, 1, 0, 0, 0, 445, 437, 1, 0, 0, 0, 445, 442, 1, 0, 0, 0, 446, 45, 1, 0, 0, 0, 447, 453, 6, 23, -1, 0, 448, 449, 3, 44, 22, 0, 449, 450, 6, 23, -1, 0, 450, 452, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 459, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 3, 12, 6, 0, 457, 458, 6, 23, -1, 0, 458, 460, 1, 0, 0, 0, 459, 456, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 47, 1, 0, 0, 0, 461, 462, 6, 24, -1, 0, 462, 463, 3, 50, 25, 0, 463, 464, 6, 24, -1, 0, 464, 472, 1, 0, 0, 0, 465, 466, 10, 2, 0, 0, 466, 467, 5, 37, 0, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 471, 1, 0, 0, 0, 470, 465, 1, 0, 0, 0, 471, 474, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 481, 6, 25, -1, 0, 477, 478, 5, 24, 0, 0, 478, 482, 6, 25, -1, 0, 479, 480, 5, 25, 0, 0, 480, 482, 6, 25, -1, 0, 481, 477, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 3, 52, 26, 0, 484, 485, 6, 25, -1, 0, 485, 490, 1, 0, 0, 0, 486, 487, 3, 52, 26, 0, 487, 488, 6, 25, -1, 0, 488, 490, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 486, 1, 0, 0, 0, 490, 51, 1, 0, 0, 0, 491, 492, 6, 26, -1, 0, 492, 493, 3, 54, 27, 0, 493, 494, 6, 26, -1, 0, 494, 512, 1, 0, 0, 0, 495, 496, 10, 2, 0, 0, 496, 505, 6, 26, -1, 0, 497, 498, 5, 28, 0, 0, 498, 506, 6, 26, -1, 0, 499, 500, 5, 29, 0, 0, 500, 506, 6, 26, -1, 0, 501, 502, 5, 26, 0, 0, 502, 506, 6, 26, -1, 0, 503, 504, 5, 27, 0, 0, 504, 506, 6, 26, -1, 0, 505, 497, 1, 0, 0, 0, 505, 499, 1, 0, 0, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 54, 27, 0, 508, 509, 6, 26, -1, 0, 509, 511, 1, 0, 0, 0, 510, 495, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 53, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 6, 27, -1, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 532, 1, 0, 0, 0, 519, 520, 10, 2, 0, 0, 520, 525, 6, 27, -1, 0, 521, 522, 5, 20, 0, 0, 522, 526, 6, 27, -1, 0, 523, 524, 5, 21, 0, 0, 524, 526, 6, 27, -1, 0, 525, 521, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 3, 56, 28, 0, 528, 529, 6, 27, -1, 0, 529, 531, 1, 0, 0, 0, 530, 519, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 55, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 6, 28, -1, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 552, 1, 0, 0, 0, 539, 540, 10, 2, 0, 0, 540, 545, 6, 28, -1, 0, 541, 542, 5, 22, 0, 0, 542, 546, 6, 28, -1, 0, 543, 544, 5, 23, 0, 0, 544, 546, 6, 28, -1, 0, 545, 541, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 3, 58, 29, 0, 548, 549, 6, 28, -1, 0, 549, 551, 1, 0, 0, 0, 550, 539, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 57, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 564, 6, 29, -1, 0, 556, 557, 5, 32, 0, 0, 557, 565, 6, 29, -1, 0, 558, 559, 5, 21, 0, 0, 559, 565, 6, 29, -1, 0, 560, 561, 5, 33, 0, 0, 561, 565, 6, 29, -1, 0, 562, 563, 5, 34, 0, 0, 563, 565, 6, 29, -1, 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 560, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 3, 60, 30, 0, 567, 568, 6, 29, -1, 0, 568, 573, 1, 0, 0, 0, 569, 570, 3, 60, 30, 0, 570, 571, 6, 29, -1, 0, 571, 573, 1, 0, 0, 0, 572, 555, 1, 0, 0, 0, 572, 569, 1, 0, 0, 0, 573, 59, 1, 0, 0, 0, 574, 575, 6, 30, -1, 0, 575, 583, 3, 62, 31, 0, 576, 577, 5, 49, 0, 0, 577, 578, 3, 10, 5, 0, 578, 579, 6, 30, -1, 0, 579, 580, 5, 50, 0, 0, 580, 582, 1, 0, 0, 0, 581, 576, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 591, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 3, 42, 21, 0, 587, 588, 6, 30, -1, 0, 588, 590, 1, 0, 0, 0, 589, 586, 1, 0, 0, 0, 590, 593, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 594, 595, 6, 30, -1, 0, 595, 61, 1, 0, 0, 0, 596, 597, 3, 66, 33, 0, 597, 598, 6, 31, -1, 0, 598, 627, 1, 0, 0, 0, 599, 600, 5, 62, 0, 0, 600, 627, 6, 31, -1, 0, 601, 602, 3, 64, 32, 0, 602, 603, 6, 31, -1, 0, 603, 627, 1, 0, 0, 0, 604, 605, 3, 36, 18, 0, 605, 606, 6, 31, -1, 0, 606, 627, 1, 0, 0, 0, 607, 608, 3, 38, 19, 0, 608, 609, 6, 31, -1, 0, 609, 627, 1, 0, 0, 0, 610, 611, 3, 34, 17, 0, 611, 612, 6, 31, -1, 0, 612, 627, 1, 0, 0, 0, 613, 614, 3, 32, 16, 0, 614, 615, 6, 31, -1, 0, 615, 627, 1, 0, 0, 0, 616, 617, 3, 20, 10, 0, 617, 618, 6, 31, -1, 0, 618, 627, 1, 0, 0, 0, 619, 623, 5, 49, 0, 0, 620, 621, 3, 48, 24, 0, 621, 622, 6, 31, -1, 0, 622, 624, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 5, 50, 0, 0, 626, 596, 1, 0, 0, 0, 626, 599, 1, 0, 0, 0, 626, 601, 1, 0, 0, 0, 626, 604, 1, 0, 0, 0, 626, 607, 1, 0, 0, 0, 626, 610, 1, 0, 0, 0, 626, 613, 1, 0, 0, 0, 626, 616, 1, 0, 0, 0, 626, 619, 1, 0, 0, 0, 627, 63, 1, 0, 0, 0, 628, 629, 5, 42, 0, 0, 629, 630, 3, 4, 2, 0, 630, 631, 5, 53, 0, 0, 631, 632, 3, 46, 23, 0, 632, 633, 5, 54, 0, 0, 633, 634, 3, 10, 5, 0, 634, 635, 6, 32, -1, 0, 635, 65, 1, 0, 0, 0, 636, 637, 3, 70, 35, 0, 637, 638, 6, 33, -1, 0, 638, 652, 1, 0, 0, 0, 639, 640, 5, 63, 0, 0, 640, 652, 6, 33, -1, 0, 641, 642, 5, 60, 0, 0, 642, 652, 6, 33, -1, 0, 643, 644, 5, 61, 0, 0, 644, 652, 6, 33, -1, 0, 645, 646, 3, 68, 34, 0, 646, 647, 6, 33, -1, 0, 647, 652, 1, 0, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 6, 33, -1, 0, 650, 652, 1, 0, 0, 0, 651, 636, 1, 0, 0, 0, 651, 639, 1, 0, 0, 0, 651, 641, 1, 0, 0, 0, 651, 643, 1, 0, 0, 0, 651, 645, 1, 0, 0, 0, 651, 648, 1, 0, 0, 0, 652, 67, 1, 0, 0, 0, 653, 654, 5, 51, 0, 0, 654, 655, 3, 10, 5, 0, 655, 656, 5, 52, 0, 0, 656, 657, 6, 34, -1, 0, 657, 69, 1, 0, 0, 0, 658, 659, 5, 38, 0, 0, 659, 663, 6, 35, -1, 0, 660, 661, 5, 39, 0, 0, 661, 663, 6, 35, -1, 0, 662, 658, 1, 0, 0, 0, 662, 660, 1, 0, 0, 0, 663, 71, 1, 0, 0, 0, 664, 665, 5, 11, 0, 0, 665, 666, 5, 49, 0, 0, 666, 667, 5, 58, 0, 0, 667, 668, 5, 62, 0, 0, 668, 669, 5, 50, 0, 0, 669, 670, 6, 36, -1, 0, 670, 73, 1, 0, 0, 0, 47, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 221, 228, 240, 245, 249, 254, 294, 302, 305, 307, 313, 341, 348, 366, 397, 411, 445, 453, 459, 472, 481, 489, 505, 512, 525, 532, 545, 552, 564, 572, 583, 591, 623, 626, 651, 662] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 918c600..847a79e 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -832,12 +832,12 @@ public final ReturnStatementContext returnStatement() throws RecognitionExceptio ((ReturnStatementContext)_localctx).e = expression(0); _localctx.returnStmtRet.setReturnExp(((ReturnStatementContext)_localctx).e.expRet); - _localctx.returnStmtRet.setLine((((ReturnStatementContext)_localctx).r!=null?((ReturnStatementContext)_localctx).r.getLine():0)); } } - setState(192); + _localctx.returnStmtRet.setLine((((ReturnStatementContext)_localctx).r!=null?((ReturnStatementContext)_localctx).r.getLine():0)); + setState(193); match(SEMICOLLON); } } @@ -857,24 +857,32 @@ public static class IfStatementContext extends ParserRuleContext { public IfStatement ifRet; public Token i; public ConditionContext c1; - public BodyContext b; public ConditionContext c2; + public BodyContext b; public BodyContext b1; public BodyContext b2; public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } - public List condition() { - return getRuleContexts(ConditionContext.class); - } - public ConditionContext condition(int i) { - return getRuleContext(ConditionContext.class,i); - } public List body() { return getRuleContexts(BodyContext.class); } public BodyContext body(int i) { return getRuleContext(BodyContext.class,i); } + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } public List ELSEIF() { return getTokens(FunctionCraftParser.ELSEIF); } public TerminalNode ELSEIF(int i) { return getToken(FunctionCraftParser.ELSEIF, i); @@ -909,52 +917,75 @@ public final IfStatementContext ifStatement() throws RecognitionException { ((IfStatementContext)_localctx).ifRet = new IfStatement(); - setState(195); + setState(196); ((IfStatementContext)_localctx).i = match(IF); _localctx.ifRet.setLine((((IfStatementContext)_localctx).i!=null?((IfStatementContext)_localctx).i.getLine():0)); - setState(197); - ((IfStatementContext)_localctx).c1 = condition(); - _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c1.conditionRet); - setState(199); + setState(206); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + { + setState(198); + ((IfStatementContext)_localctx).c1 = condition(); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c1.conditionRet); + } + break; + case 2: + { + setState(201); + match(LPAR); + setState(202); + ((IfStatementContext)_localctx).c2 = condition(); + setState(203); + match(RPAR); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); + } + break; + } + setState(208); ((IfStatementContext)_localctx).b = body(); _localctx.ifRet.setThenBody(((IfStatementContext)_localctx).b.bodyRet); ArrayList tempArray = new ArrayList(); - setState(210); + setState(221); _errHandler.sync(this); _la = _input.LA(1); while (_la==ELSEIF) { { { - setState(202); + setState(211); match(ELSEIF); - setState(203); + setState(212); + match(LPAR); + setState(213); ((IfStatementContext)_localctx).c2 = condition(); + setState(214); + match(RPAR); _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); - setState(205); + setState(216); ((IfStatementContext)_localctx).b1 = body(); tempArray.addAll(((IfStatementContext)_localctx).b1.bodyRet); } } - setState(212); + setState(223); _errHandler.sync(this); _la = _input.LA(1); } - setState(217); + setState(228); _errHandler.sync(this); _la = _input.LA(1); if (_la==ELSE) { { - setState(213); + setState(224); match(ELSE); - setState(214); + setState(225); ((IfStatementContext)_localctx).b2 = body(); tempArray.addAll(((IfStatementContext)_localctx).b2.bodyRet); @@ -965,7 +996,7 @@ public final IfStatementContext ifStatement() throws RecognitionException { _localctx.ifRet.setElseBody(tempArray); - setState(220); + setState(231); match(END); } } @@ -1043,28 +1074,28 @@ public final ConditionContext condition() throws RecognitionException { ((ConditionContext)_localctx).conditionRet = new ArrayList(); - setState(243); + setState(254); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(223); + setState(234); match(LPAR); - setState(224); + setState(235); ((ConditionContext)_localctx).e = expression(0); _localctx.conditionRet.add(((ConditionContext)_localctx).e.expRet); - setState(226); + setState(237); match(RPAR); - setState(238); + setState(249); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(227); + setState(238); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -1074,27 +1105,27 @@ public final ConditionContext condition() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(229); + setState(240); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: { - setState(228); + setState(239); match(LPAR); } break; } - setState(231); + setState(242); ((ConditionContext)_localctx).c = condition(); _localctx.conditionRet.addAll(((ConditionContext)_localctx).c.conditionRet); - setState(234); + setState(245); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(233); + setState(244); match(RPAR); } break; @@ -1102,16 +1133,16 @@ public final ConditionContext condition() throws RecognitionException { } } } - setState(240); + setState(251); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,14,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); } } } } - setState(245); + setState(256); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); } } } @@ -1163,19 +1194,19 @@ public final PutsStatementContext putsStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(246); + setState(257); ((PutsStatementContext)_localctx).p = match(PUTS); - setState(247); + setState(258); match(LPAR); - setState(248); + setState(259); ((PutsStatementContext)_localctx).e = expression(0); ((PutsStatementContext)_localctx).putRet = new PutStatement(((PutsStatementContext)_localctx).e.expRet); _localctx.putRet.setLine((((PutsStatementContext)_localctx).p!=null?((PutsStatementContext)_localctx).p.getLine():0)); - setState(250); + setState(261); match(RPAR); - setState(251); + setState(262); match(SEMICOLLON); } } @@ -1226,17 +1257,17 @@ public final LenStatementContext lenStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(253); + setState(264); ((LenStatementContext)_localctx).l = match(LEN); - setState(254); + setState(265); match(LPAR); - setState(255); + setState(266); ((LenStatementContext)_localctx).e = expression(0); ((LenStatementContext)_localctx).lenRet = new LenStatement(((LenStatementContext)_localctx).e.expRet); _localctx.lenRet.setLine((((LenStatementContext)_localctx).l!=null?((LenStatementContext)_localctx).l.getLine():0)); - setState(257); + setState(268); match(RPAR); } } @@ -1293,19 +1324,19 @@ public final PushStatementContext pushStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(259); + setState(270); ((PushStatementContext)_localctx).p = match(PUSH); - setState(260); + setState(271); match(LPAR); - setState(261); + setState(272); ((PushStatementContext)_localctx).e1 = expression(0); - setState(262); + setState(273); match(COMMA); - setState(263); + setState(274); ((PushStatementContext)_localctx).e2 = expression(0); - setState(264); + setState(275); match(RPAR); - setState(265); + setState(276); match(SEMICOLLON); ((PushStatementContext)_localctx).pushRet = new PushStatement(((PushStatementContext)_localctx).e1.expRet, ((PushStatementContext)_localctx).e2.expRet); @@ -1360,17 +1391,17 @@ public final LoopDoStatementContext loopDoStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(268); + setState(279); ((LoopDoStatementContext)_localctx).l1 = match(LOOP); - setState(269); + setState(280); match(DO); - setState(270); + setState(281); ((LoopDoStatementContext)_localctx).l2 = loopBody(); ((LoopDoStatementContext)_localctx).loopDoRet = new LoopDoStatement(((LoopDoStatementContext)_localctx).l2.loopStmts, ((LoopDoStatementContext)_localctx).l2.loopExps, ((LoopDoStatementContext)_localctx).l2.loopRetStmt); _localctx.loopDoRet.setLine((((LoopDoStatementContext)_localctx).l1!=null?((LoopDoStatementContext)_localctx).l1.getLine():0)); - setState(272); + setState(283); match(END); } } @@ -1456,12 +1487,12 @@ public final LoopBodyContext loopBody() throws RecognitionException { ((LoopBodyContext)_localctx).loopExps = new ArrayList(); ((LoopBodyContext)_localctx).loopRetStmt = null; - setState(296); + setState(307); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { { - setState(294); + setState(305); _errHandler.sync(this); switch (_input.LA(1)) { case PUTS: @@ -1487,50 +1518,50 @@ public final LoopBodyContext loopBody() throws RecognitionException { case IDENTIFIER: case STRING_VALUE: { - setState(275); + setState(286); ((LoopBodyContext)_localctx).s = statement(); _localctx.loopStmts.add(((LoopBodyContext)_localctx).s.stmtRet); } break; case BREAK: { - setState(278); + setState(289); match(BREAK); - setState(283); + setState(294); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(279); + setState(290); match(IF); - setState(280); + setState(291); ((LoopBodyContext)_localctx).c1 = condition(); _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c1.conditionRet); } } - setState(285); + setState(296); match(SEMICOLLON); } break; case NEXT: { - setState(286); + setState(297); match(NEXT); - setState(291); + setState(302); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(287); + setState(298); match(IF); - setState(288); + setState(299); ((LoopBodyContext)_localctx).c2 = condition(); _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c2.conditionRet); } } - setState(293); + setState(304); match(SEMICOLLON); } break; @@ -1538,18 +1569,18 @@ public final LoopBodyContext loopBody() throws RecognitionException { throw new NoViableAltException(this); } } - setState(298); + setState(309); _errHandler.sync(this); _la = _input.LA(1); } - setState(302); + setState(313); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(299); + setState(310); ((LoopBodyContext)_localctx).r = returnStatement(); - ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet; + ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet;_localctx.loopRetStmt.setLine(((LoopBodyContext)_localctx).r.returnStmtRet.getLine()); } } @@ -1608,17 +1639,17 @@ public final ForStatementContext forStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(304); + setState(315); ((ForStatementContext)_localctx).f = match(FOR); - setState(305); + setState(316); ((ForStatementContext)_localctx).id = match(IDENTIFIER); - setState(306); + setState(317); match(IN); - setState(307); + setState(318); ((ForStatementContext)_localctx).r = range(); - setState(308); + setState(319); ((ForStatementContext)_localctx).l = loopBody(); - setState(309); + setState(320); match(END); ((ForStatementContext)_localctx).forStRet = new ForStatement(new Identifier((((ForStatementContext)_localctx).id!=null?((ForStatementContext)_localctx).id.getText():null)), @@ -1687,7 +1718,7 @@ public final RangeContext range() throws RecognitionException { enterRule(_localctx, 30, RULE_range); int _la; try { - setState(337); + setState(348); _errHandler.sync(this); switch (_input.LA(1)) { case LPAR: @@ -1697,21 +1728,21 @@ public final RangeContext range() throws RecognitionException { ((RangeContext)_localctx).rangeRet = new ArrayList(); { - setState(313); + setState(324); match(LPAR); - setState(314); + setState(325); ((RangeContext)_localctx).e1 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e1.expRet); - setState(316); + setState(327); match(DOUBLEDOT); - setState(317); + setState(328); ((RangeContext)_localctx).e2 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e2.expRet); - setState(319); + setState(330); match(RPAR); } } @@ -1720,35 +1751,35 @@ public final RangeContext range() throws RecognitionException { enterOuterAlt(_localctx, 2); { { - setState(321); + setState(332); match(LBRACK); { - setState(322); + setState(333); ((RangeContext)_localctx).e3 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e3.expRet); - setState(330); + setState(341); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(324); + setState(335); match(COMMA); - setState(325); + setState(336); ((RangeContext)_localctx).e4 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e4.expRet); } } - setState(332); + setState(343); _errHandler.sync(this); _la = _input.LA(1); } } - setState(333); + setState(344); match(RBRACK); } } @@ -1756,7 +1787,7 @@ public final RangeContext range() throws RecognitionException { case IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(335); + setState(346); ((RangeContext)_localctx).id = match(IDENTIFIER); Identifier id_ = new Identifier((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getText():null)); @@ -1835,41 +1866,41 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio ArrayList conditionExps = new ArrayList(); - setState(340); + setState(351); ((FilterStatementContext)_localctx).brack = match(LBRACK); - setState(341); + setState(352); ((FilterStatementContext)_localctx).e1 = expression(0); - setState(342); + setState(353); match(SEPARATOR); - setState(343); + setState(354); ((FilterStatementContext)_localctx).id = match(IDENTIFIER); - setState(344); + setState(355); match(ARROW); - setState(345); + setState(356); ((FilterStatementContext)_localctx).r = range(); - setState(346); + setState(357); match(COMMA); - setState(347); + setState(358); ((FilterStatementContext)_localctx).e2 = expression(0); conditionExps.add(((FilterStatementContext)_localctx).e2.expRet); - setState(355); + setState(366); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(349); + setState(360); match(COMMA); - setState(350); + setState(361); ((FilterStatementContext)_localctx).e3 = expression(0); conditionExps.add(((FilterStatementContext)_localctx).e3.expRet); } } - setState(357); + setState(368); _errHandler.sync(this); _la = _input.LA(1); } @@ -1880,7 +1911,7 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio conditionExps, ((FilterStatementContext)_localctx).r.rangeRet); _localctx.filterStatementRet.setLine((((FilterStatementContext)_localctx).brack!=null?((FilterStatementContext)_localctx).brack.getLine():0)); - setState(359); + setState(370); match(RBRACK); } } @@ -1934,20 +1965,21 @@ public final MatchPatternStatementContext matchPatternStatement() throws Recogni try { enterOuterAlt(_localctx, 1); { - setState(361); + setState(372); ((MatchPatternStatementContext)_localctx).id = match(IDENTIFIER); - setState(362); + setState(373); match(DOT); - setState(363); + setState(374); ((MatchPatternStatementContext)_localctx).m = match(MATCH); - setState(364); + setState(375); match(LPAR); - setState(365); + setState(376); ((MatchPatternStatementContext)_localctx).e = expression(0); - setState(366); + setState(377); match(RPAR); Identifier id_ = new Identifier((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getText():null)); + id_.setLine((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getLine():0)); ((MatchPatternStatementContext)_localctx).matchPatRet = new MatchPatternStatement(id_, ((MatchPatternStatementContext)_localctx).e.expRet); _localctx.matchPatRet.setLine((((MatchPatternStatementContext)_localctx).m!=null?((MatchPatternStatementContext)_localctx).m.getLine():0)); @@ -2000,13 +2032,13 @@ public final ChopStatementContext chopStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(369); + setState(380); ((ChopStatementContext)_localctx).c = match(CHOP); - setState(370); + setState(381); match(LPAR); - setState(371); + setState(382); ((ChopStatementContext)_localctx).e = expression(0); - setState(372); + setState(383); match(RPAR); ((ChopStatementContext)_localctx).chopRet = new ChopStatement(((ChopStatementContext)_localctx).e.expRet); @@ -2061,13 +2093,13 @@ public final ChompStatementContext chompStatement() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(375); + setState(386); ((ChompStatementContext)_localctx).c = match(CHOMP); - setState(376); + setState(387); match(LPAR); - setState(377); + setState(388); ((ChompStatementContext)_localctx).e = expression(0); - setState(378); + setState(389); match(RPAR); ((ChompStatementContext)_localctx).chompRet = new ChompStatement(((ChompStatementContext)_localctx).e.expRet); @@ -2143,60 +2175,60 @@ public final AssignmentContext assignment() throws RecognitionException { int line; AssignOperator op; - setState(382); + setState(393); ((AssignmentContext)_localctx).id = match(IDENTIFIER); - setState(386); + setState(397); _errHandler.sync(this); _la = _input.LA(1); if (_la==LBRACK) { { - setState(383); + setState(394); ((AssignmentContext)_localctx).a = accessList(); access = true; } } - setState(400); + setState(411); _errHandler.sync(this); switch (_input.LA(1)) { case ASSIGN: { - setState(388); + setState(399); ((AssignmentContext)_localctx).as = match(ASSIGN); op = AssignOperator.ASSIGN;line = (((AssignmentContext)_localctx).as!=null?((AssignmentContext)_localctx).as.getLine():0); } break; case PLUS_ASSIGN: { - setState(390); + setState(401); ((AssignmentContext)_localctx).pl = match(PLUS_ASSIGN); op = AssignOperator.PLUS_ASSIGN;line = (((AssignmentContext)_localctx).pl!=null?((AssignmentContext)_localctx).pl.getLine():0); } break; case MINUS_ASSIGN: { - setState(392); + setState(403); ((AssignmentContext)_localctx).mi = match(MINUS_ASSIGN); op = AssignOperator.MINUS_ASSIGN;line = (((AssignmentContext)_localctx).mi!=null?((AssignmentContext)_localctx).mi.getLine():0); } break; case DIVIDE_ASSIGN: { - setState(394); + setState(405); ((AssignmentContext)_localctx).di = match(DIVIDE_ASSIGN); op = AssignOperator.DIVIDE_ASSIGN;line = (((AssignmentContext)_localctx).di!=null?((AssignmentContext)_localctx).di.getLine():0); } break; case MULT_ASSIGN: { - setState(396); + setState(407); ((AssignmentContext)_localctx).mu = match(MULT_ASSIGN); op = AssignOperator.MULT_ASSIGN;line = (((AssignmentContext)_localctx).mu!=null?((AssignmentContext)_localctx).mu.getLine():0); } break; case MOD_ASSIGN: { - setState(398); + setState(409); ((AssignmentContext)_localctx).mo = match(MOD_ASSIGN); op = AssignOperator.MOD_ASSIGN;line = (((AssignmentContext)_localctx).mo!=null?((AssignmentContext)_localctx).mo.getLine():0); } @@ -2204,9 +2236,9 @@ public final AssignmentContext assignment() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(402); + setState(413); ((AssignmentContext)_localctx).e = expression(0); - setState(403); + setState(414); match(SEMICOLLON); Identifier id_ = new Identifier((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getText():null)); @@ -2264,12 +2296,12 @@ public final AccessListContext accessList() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(406); + setState(417); match(LBRACK); - setState(407); + setState(418); ((AccessListContext)_localctx).e = expression(0); ((AccessListContext)_localctx).accessListExp = ((AccessListContext)_localctx).e.expRet; - setState(409); + setState(420); match(RBRACK); } } @@ -2339,13 +2371,13 @@ public final StatementContext statement() throws RecognitionException { StatementContext _localctx = new StatementContext(_ctx, getState()); enterRule(_localctx, 44, RULE_statement); try { - setState(434); + setState(445); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(411); + setState(422); ((StatementContext)_localctx).i = ifStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).i.ifRet; } @@ -2353,7 +2385,7 @@ public final StatementContext statement() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(414); + setState(425); ((StatementContext)_localctx).loop = loopDoStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).loop.loopDoRet; } @@ -2361,7 +2393,7 @@ public final StatementContext statement() throws RecognitionException { case 3: enterOuterAlt(_localctx, 3); { - setState(417); + setState(428); ((StatementContext)_localctx).f = forStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).f.forStRet; } @@ -2369,7 +2401,7 @@ public final StatementContext statement() throws RecognitionException { case 4: enterOuterAlt(_localctx, 4); { - setState(420); + setState(431); ((StatementContext)_localctx).puts = putsStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).puts.putRet; } @@ -2377,7 +2409,7 @@ public final StatementContext statement() throws RecognitionException { case 5: enterOuterAlt(_localctx, 5); { - setState(423); + setState(434); ((StatementContext)_localctx).push = pushStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).push.pushRet; } @@ -2385,7 +2417,7 @@ public final StatementContext statement() throws RecognitionException { case 6: enterOuterAlt(_localctx, 6); { - setState(426); + setState(437); ((StatementContext)_localctx).e = expression(0); ((StatementContext)_localctx).stmtRet = new ExpressionStatement(((StatementContext)_localctx).e.expRet); @@ -2393,14 +2425,14 @@ public final StatementContext statement() throws RecognitionException { ((StatementContext)_localctx).stmtRet = expStmt; _localctx.stmtRet.setLine(((StatementContext)_localctx).e.expRet.getLine()); - setState(429); + setState(440); match(SEMICOLLON); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(431); + setState(442); ((StatementContext)_localctx).as = assignment(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).as.assignRet; } @@ -2461,27 +2493,27 @@ public final BodyContext body() throws RecognitionException { ((BodyContext)_localctx).bodyRet = new ArrayList(); - setState(442); + setState(453); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { { { - setState(437); + setState(448); ((BodyContext)_localctx).s = statement(); _localctx.bodyRet.add(((BodyContext)_localctx).s.stmtRet); } } - setState(444); + setState(455); _errHandler.sync(this); _la = _input.LA(1); } - setState(448); + setState(459); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(445); + setState(456); ((BodyContext)_localctx).r = returnStatement(); _localctx.bodyRet.add(((BodyContext)_localctx).r.returnStmtRet); } @@ -2549,14 +2581,14 @@ private ExpressionContext expression(int _p) throws RecognitionException { enterOuterAlt(_localctx, 1); { { - setState(451); + setState(462); ((ExpressionContext)_localctx).e3 = eqaulityExpression(); ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; } _ctx.stop = _input.LT(-1); - setState(461); + setState(472); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + _alt = getInterpreter().adaptivePredict(_input,30,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2566,11 +2598,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ExpressionContext(_parentctx, _parentState); _localctx.e1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(454); + setState(465); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(455); + setState(466); ((ExpressionContext)_localctx).a = match(APPEND); - setState(456); + setState(467); ((ExpressionContext)_localctx).e2 = eqaulityExpression(); if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ @@ -2586,9 +2618,9 @@ private ExpressionContext expression(int _p) throws RecognitionException { } } } - setState(463); + setState(474); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,29,_ctx); + _alt = getInterpreter().adaptivePredict(_input,30,_ctx); } } } @@ -2642,31 +2674,31 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, getState()); enterRule(_localctx, 50, RULE_eqaulityExpression); try { - setState(478); + setState(489); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(464); + setState(475); ((EqaulityExpressionContext)_localctx).e1 = relationalExpression(0); BinaryOperator op; int line; - setState(470); + setState(481); _errHandler.sync(this); switch (_input.LA(1)) { case EQUAL: { - setState(466); + setState(477); ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); op = BinaryOperator.EQUAL;line = (((EqaulityExpressionContext)_localctx).op1!=null?((EqaulityExpressionContext)_localctx).op1.getLine():0); } break; case NOT_EQUAL: { - setState(468); + setState(479); ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); op = BinaryOperator.NOT_EQUAL;line = (((EqaulityExpressionContext)_localctx).op2!=null?((EqaulityExpressionContext)_localctx).op2.getLine():0); } @@ -2674,7 +2706,7 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx default: throw new NoViableAltException(this); } - setState(472); + setState(483); ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op);_localctx.expRet.setLine(line); } @@ -2682,7 +2714,7 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx case 2: enterOuterAlt(_localctx, 2); { - setState(475); + setState(486); ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; } @@ -2755,14 +2787,14 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit enterOuterAlt(_localctx, 1); { { - setState(481); + setState(492); ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; } _ctx.stop = _input.LT(-1); - setState(501); + setState(512); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2772,39 +2804,39 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit _localctx = new RelationalExpressionContext(_parentctx, _parentState); _localctx.r1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); - setState(484); + setState(495); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(494); + setState(505); _errHandler.sync(this); switch (_input.LA(1)) { case GREATER_THAN: { - setState(486); + setState(497); ((RelationalExpressionContext)_localctx).gt = match(GREATER_THAN); op = BinaryOperator.GREATER_THAN;line = (((RelationalExpressionContext)_localctx).gt!=null?((RelationalExpressionContext)_localctx).gt.getLine():0); } break; case LESS_THAN: { - setState(488); + setState(499); ((RelationalExpressionContext)_localctx).lt = match(LESS_THAN); op = BinaryOperator.LESS_THAN;line = (((RelationalExpressionContext)_localctx).lt!=null?((RelationalExpressionContext)_localctx).lt.getLine():0); } break; case LESS_EQUAL_THAN: { - setState(490); + setState(501); ((RelationalExpressionContext)_localctx).let = match(LESS_EQUAL_THAN); op = BinaryOperator.LESS_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).let!=null?((RelationalExpressionContext)_localctx).let.getLine():0); } break; case GREATER_EQUAL_THAN: { - setState(492); + setState(503); ((RelationalExpressionContext)_localctx).get = match(GREATER_EQUAL_THAN); op = BinaryOperator.GREATER_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).get!=null?((RelationalExpressionContext)_localctx).get.getLine():0); } @@ -2812,15 +2844,15 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit default: throw new NoViableAltException(this); } - setState(496); + setState(507); ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(503); + setState(514); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,33,_ctx); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); } } } @@ -2886,16 +2918,16 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE enterOuterAlt(_localctx, 1); { { - setState(505); + setState(516); ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; } _ctx.stop = _input.LT(-1); - setState(521); + setState(532); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2905,25 +2937,25 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE _localctx = new AdditiveExpressionContext(_parentctx, _parentState); _localctx.a1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); - setState(508); + setState(519); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(514); + setState(525); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: { - setState(510); + setState(521); ((AdditiveExpressionContext)_localctx).p = match(PLUS); op = BinaryOperator.PLUS;line = (((AdditiveExpressionContext)_localctx).p!=null?((AdditiveExpressionContext)_localctx).p.getLine():0); } break; case MINUS: { - setState(512); + setState(523); ((AdditiveExpressionContext)_localctx).m = match(MINUS); op = BinaryOperator.MINUS;line = (((AdditiveExpressionContext)_localctx).m!=null?((AdditiveExpressionContext)_localctx).m.getLine():0); } @@ -2931,15 +2963,15 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE default: throw new NoViableAltException(this); } - setState(516); + setState(527); ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(523); + setState(534); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); } } } @@ -3005,14 +3037,14 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws enterOuterAlt(_localctx, 1); { { - setState(525); + setState(536); ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; } _ctx.stop = _input.LT(-1); - setState(541); + setState(552); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + _alt = getInterpreter().adaptivePredict(_input,38,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -3022,25 +3054,25 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); _localctx.m1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); - setState(528); + setState(539); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(534); + setState(545); _errHandler.sync(this); switch (_input.LA(1)) { case MULT: { - setState(530); + setState(541); ((MultiplicativeExpressionContext)_localctx).m = match(MULT); op = BinaryOperator.MULT;line = (((MultiplicativeExpressionContext)_localctx).m!=null?((MultiplicativeExpressionContext)_localctx).m.getLine():0); } break; case DIVIDE: { - setState(532); + setState(543); ((MultiplicativeExpressionContext)_localctx).d = match(DIVIDE); op = BinaryOperator.DIVIDE;line = (((MultiplicativeExpressionContext)_localctx).d!=null?((MultiplicativeExpressionContext)_localctx).d.getLine():0); } @@ -3048,15 +3080,15 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws default: throw new NoViableAltException(this); } - setState(536); + setState(547); ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(543); + setState(554); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + _alt = getInterpreter().adaptivePredict(_input,38,_ctx); } } } @@ -3110,7 +3142,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); enterRule(_localctx, 58, RULE_preUnaryExpression); try { - setState(561); + setState(572); _errHandler.sync(this); switch (_input.LA(1)) { case MINUS: @@ -3123,33 +3155,33 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx UnaryOperator op; int line; - setState(553); + setState(564); _errHandler.sync(this); switch (_input.LA(1)) { case NOT: { - setState(545); + setState(556); ((PreUnaryExpressionContext)_localctx).n = match(NOT); op = UnaryOperator.NOT;line = (((PreUnaryExpressionContext)_localctx).n!=null?((PreUnaryExpressionContext)_localctx).n.getLine():0); } break; case MINUS: { - setState(547); + setState(558); ((PreUnaryExpressionContext)_localctx).m = match(MINUS); op = UnaryOperator.MINUS;line = (((PreUnaryExpressionContext)_localctx).m!=null?((PreUnaryExpressionContext)_localctx).m.getLine():0); } break; case INCREMENT: { - setState(549); + setState(560); ((PreUnaryExpressionContext)_localctx).i = match(INCREMENT); op = UnaryOperator.INC;line = (((PreUnaryExpressionContext)_localctx).i!=null?((PreUnaryExpressionContext)_localctx).i.getLine():0); } break; case DECREMENT: { - setState(551); + setState(562); ((PreUnaryExpressionContext)_localctx).d = match(DECREMENT); op = UnaryOperator.DEC;line = (((PreUnaryExpressionContext)_localctx).d!=null?((PreUnaryExpressionContext)_localctx).d.getLine():0); } @@ -3157,7 +3189,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx default: throw new NoViableAltException(this); } - setState(555); + setState(566); ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } @@ -3177,7 +3209,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(558); + setState(569); ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; } @@ -3258,40 +3290,40 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); - setState(564); + setState(575); ((AccessExpressionContext)_localctx).o = otherExpression(); - setState(572); + setState(583); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(565); + setState(576); match(LPAR); - setState(566); + setState(577); ((AccessExpressionContext)_localctx).f = functionArguments(); isAccessExpression = true; args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); - setState(568); + setState(579); match(RPAR); } } } - setState(574); + setState(585); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,40,_ctx); + _alt = getInterpreter().adaptivePredict(_input,41,_ctx); } - setState(580); + setState(591); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(575); + setState(586); ((AccessExpressionContext)_localctx).a = accessList(); isMultiDimentional = true; @@ -3300,9 +3332,9 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept } } } - setState(582); + setState(593); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); } if(!isAccessExpression){ @@ -3396,13 +3428,13 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio enterRule(_localctx, 62, RULE_otherExpression); int _la; try { - setState(615); + setState(626); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(585); + setState(596); ((OtherExpressionContext)_localctx).v = values(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; } @@ -3410,7 +3442,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 2: enterOuterAlt(_localctx, 2); { - setState(588); + setState(599); ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); @@ -3421,7 +3453,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 3: enterOuterAlt(_localctx, 3); { - setState(590); + setState(601); ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; } @@ -3429,7 +3461,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 4: enterOuterAlt(_localctx, 4); { - setState(593); + setState(604); ((OtherExpressionContext)_localctx).chop = chopStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; } @@ -3437,7 +3469,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 5: enterOuterAlt(_localctx, 5); { - setState(596); + setState(607); ((OtherExpressionContext)_localctx).chomp = chompStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chomp.chompRet; } @@ -3445,7 +3477,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 6: enterOuterAlt(_localctx, 6); { - setState(599); + setState(610); ((OtherExpressionContext)_localctx).match = matchPatternStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; } @@ -3453,7 +3485,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 7: enterOuterAlt(_localctx, 7); { - setState(602); + setState(613); ((OtherExpressionContext)_localctx).f = filterStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; } @@ -3461,7 +3493,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 8: enterOuterAlt(_localctx, 8); { - setState(605); + setState(616); ((OtherExpressionContext)_localctx).len_ = lenStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len_.lenRet; } @@ -3469,20 +3501,20 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 9: enterOuterAlt(_localctx, 9); { - setState(608); + setState(619); match(LPAR); - setState(612); + setState(623); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(609); + setState(620); ((OtherExpressionContext)_localctx).e = expression(0); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; } } - setState(614); + setState(625); match(RPAR); } break; @@ -3543,17 +3575,17 @@ public final LambdaFunctionContext lambdaFunction() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(617); + setState(628); ((LambdaFunctionContext)_localctx).a = match(ARROW); - setState(618); + setState(629); ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); - setState(619); + setState(630); match(LBRACE); - setState(620); + setState(631); ((LambdaFunctionContext)_localctx).b = body(); - setState(621); + setState(632); match(RBRACE); - setState(622); + setState(633); ((LambdaFunctionContext)_localctx).fa = functionArguments(); ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet, ((LambdaFunctionContext)_localctx).fa.funcArgsRet); @@ -3616,14 +3648,14 @@ public final ValuesContext values() throws RecognitionException { ValuesContext _localctx = new ValuesContext(_ctx, getState()); enterRule(_localctx, 66, RULE_values); try { - setState(640); + setState(651); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: case FALSE: enterOuterAlt(_localctx, 1); { - setState(625); + setState(636); ((ValuesContext)_localctx).b = boolValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; } @@ -3631,7 +3663,7 @@ public final ValuesContext values() throws RecognitionException { case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(628); + setState(639); ((ValuesContext)_localctx).s = match(STRING_VALUE); ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); } @@ -3639,7 +3671,7 @@ public final ValuesContext values() throws RecognitionException { case INT_VALUE: enterOuterAlt(_localctx, 3); { - setState(630); + setState(641); ((ValuesContext)_localctx).i = match(INT_VALUE); ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); } @@ -3647,7 +3679,7 @@ public final ValuesContext values() throws RecognitionException { case FLOAT_VALUE: enterOuterAlt(_localctx, 4); { - setState(632); + setState(643); ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getLine():0)); } @@ -3655,7 +3687,7 @@ public final ValuesContext values() throws RecognitionException { case LBRACK: enterOuterAlt(_localctx, 5); { - setState(634); + setState(645); ((ValuesContext)_localctx).l = listValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; } @@ -3663,7 +3695,7 @@ public final ValuesContext values() throws RecognitionException { case METHOD: enterOuterAlt(_localctx, 6); { - setState(637); + setState(648); ((ValuesContext)_localctx).f = functionPointer(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; } @@ -3718,11 +3750,11 @@ public final ListValueContext listValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(642); + setState(653); ((ListValueContext)_localctx).l = match(LBRACK); - setState(643); + setState(654); ((ListValueContext)_localctx).f = functionArguments(); - setState(644); + setState(655); match(RBRACK); ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); @@ -3771,13 +3803,13 @@ public final BoolValueContext boolValue() throws RecognitionException { BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); enterRule(_localctx, 70, RULE_boolValue); try { - setState(651); + setState(662); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: enterOuterAlt(_localctx, 1); { - setState(647); + setState(658); ((BoolValueContext)_localctx).t = match(TRUE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); } @@ -3785,7 +3817,7 @@ public final BoolValueContext boolValue() throws RecognitionException { case FALSE: enterOuterAlt(_localctx, 2); { - setState(649); + setState(660); ((BoolValueContext)_localctx).f = match(FALSE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); } @@ -3840,15 +3872,15 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(653); + setState(664); ((FunctionPointerContext)_localctx).m = match(METHOD); - setState(654); + setState(665); match(LPAR); - setState(655); + setState(666); match(COLON); - setState(656); + setState(667); ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); - setState(657); + setState(668); match(RPAR); Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); @@ -3912,7 +3944,7 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext } public static final String _serializedATN = - "\u0004\u0001A\u0295\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001A\u02a0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -3942,97 +3974,99 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ "\u0005\u0001\u0005\u0005\u0005\u00b3\b\u0005\n\u0005\f\u0005\u00b6\t\u0005"+ "\u0003\u0005\u00b8\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ - "\u0001\u0006\u0003\u0006\u00bf\b\u0006\u0001\u0006\u0001\u0006\u0001\u0007"+ + "\u0001\u0006\u0003\u0006\u00bf\b\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007"+ + "\u00cf\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0005\u0007\u00d1\b\u0007\n\u0007\f\u0007\u00d4\t\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00da\b\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ - "\u0001\b\u0001\b\u0003\b\u00e6\b\b\u0001\b\u0001\b\u0001\b\u0003\b\u00eb"+ - "\b\b\u0005\b\u00ed\b\b\n\b\f\b\u00f0\t\b\u0005\b\u00f2\b\b\n\b\f\b\u00f5"+ - "\t\b\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ - "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b"+ - "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ - "\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u011c\b\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0124\b\r\u0001\r\u0005"+ - "\r\u0127\b\r\n\r\f\r\u012a\t\r\u0001\r\u0001\r\u0001\r\u0003\r\u012f\b"+ - "\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0005\u0007\u00dc\b\u0007\n\u0007\f\u0007\u00df\t\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00e5\b\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0003\b\u00f1\b\b\u0001\b\u0001\b\u0001\b\u0003\b\u00f6\b\b\u0005\b"+ + "\u00f8\b\b\n\b\f\b\u00fb\t\b\u0005\b\u00fd\b\b\n\b\f\b\u0100\t\b\u0001"+ + "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0127\b\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\r\u0001\r\u0003\r\u012f\b\r\u0001\r\u0005\r\u0132\b\r"+ + "\n\r\f\r\u0135\t\r\u0001\r\u0001\r\u0001\r\u0003\r\u013a\b\r\u0001\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0005\u000f\u0149\b\u000f\n\u000f\f\u000f\u014c\t\u000f\u0001\u000f\u0001"+ - "\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u0152\b\u000f\u0001\u0010\u0001"+ - "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f"+ + "\u0154\b\u000f\n\u000f\f\u000f\u0157\t\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0003\u000f\u015d\b\u000f\u0001\u0010\u0001\u0010\u0001"+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ - "\u0010\u0005\u0010\u0162\b\u0010\n\u0010\f\u0010\u0165\t\u0010\u0001\u0010"+ - "\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ - "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ - "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ - "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u0183\b\u0014\u0001\u0014"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ + "\u0010\u016d\b\u0010\n\u0010\f\u0010\u0170\t\u0010\u0001\u0010\u0001\u0010"+ + "\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0003\u0014\u018e\b\u0014\u0001\u0014\u0001\u0014"+ "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014"+ - "\u0191\b\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015"+ - "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u019c\b\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ - "\u0001\u0016\u0001\u0016\u0001\u0016\u0003\u0016\u01b3\b\u0016\u0001\u0017"+ - "\u0001\u0017\u0001\u0017\u0001\u0017\u0005\u0017\u01b9\b\u0017\n\u0017"+ - "\f\u0017\u01bc\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017"+ - "\u01c1\b\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01cc\b\u0018"+ - "\n\u0018\f\u0018\u01cf\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01d7\b\u0019\u0001\u0019\u0001"+ - "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01df"+ - "\b\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ - "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+ - "\u001a\u0001\u001a\u0001\u001a\u0003\u001a\u01ef\b\u001a\u0001\u001a\u0001"+ - "\u001a\u0001\u001a\u0005\u001a\u01f4\b\u001a\n\u001a\f\u001a\u01f7\t\u001a"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u0203\b\u001b"+ - "\u0001\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0208\b\u001b\n\u001b"+ - "\f\u001b\u020b\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ - "\u0003\u001c\u0217\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c"+ - "\u021c\b\u001c\n\u001c\f\u001c\u021f\t\u001c\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0003\u001d\u022a\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0232\b\u001d\u0001\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ - "\u001e\u023b\b\u001e\n\u001e\f\u001e\u023e\t\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001e\u0005\u001e\u0243\b\u001e\n\u001e\f\u001e\u0246\t\u001e\u0001"+ - "\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0265"+ - "\b\u001f\u0001\u001f\u0003\u001f\u0268\b\u001f\u0001 \u0001 \u0001 \u0001"+ - " \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003"+ - "!\u0281\b!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001"+ - "#\u0001#\u0003#\u028c\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0000\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012"+ - "\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001"+ - "\u0001\u0000\u001e\u001f\u02b7\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001"+ - "\u0000\u0000\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000"+ - "\u0000\u0000\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000"+ - "\u0000\f\u00b9\u0001\u0000\u0000\u0000\u000e\u00c2\u0001\u0000\u0000\u0000"+ - "\u0010\u00de\u0001\u0000\u0000\u0000\u0012\u00f6\u0001\u0000\u0000\u0000"+ - "\u0014\u00fd\u0001\u0000\u0000\u0000\u0016\u0103\u0001\u0000\u0000\u0000"+ - "\u0018\u010c\u0001\u0000\u0000\u0000\u001a\u0112\u0001\u0000\u0000\u0000"+ - "\u001c\u0130\u0001\u0000\u0000\u0000\u001e\u0151\u0001\u0000\u0000\u0000"+ - " \u0153\u0001\u0000\u0000\u0000\"\u0169\u0001\u0000\u0000\u0000$\u0171"+ - "\u0001\u0000\u0000\u0000&\u0177\u0001\u0000\u0000\u0000(\u017d\u0001\u0000"+ - "\u0000\u0000*\u0196\u0001\u0000\u0000\u0000,\u01b2\u0001\u0000\u0000\u0000"+ - ".\u01b4\u0001\u0000\u0000\u00000\u01c2\u0001\u0000\u0000\u00002\u01de"+ - "\u0001\u0000\u0000\u00004\u01e0\u0001\u0000\u0000\u00006\u01f8\u0001\u0000"+ - "\u0000\u00008\u020c\u0001\u0000\u0000\u0000:\u0231\u0001\u0000\u0000\u0000"+ - "<\u0233\u0001\u0000\u0000\u0000>\u0267\u0001\u0000\u0000\u0000@\u0269"+ - "\u0001\u0000\u0000\u0000B\u0280\u0001\u0000\u0000\u0000D\u0282\u0001\u0000"+ - "\u0000\u0000F\u028b\u0001\u0000\u0000\u0000H\u028d\u0001\u0000\u0000\u0000"+ - "JS\u0006\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000"+ + "\u0001\u0016\u0001\u0016\u0003\u0016\u01be\b\u0016\u0001\u0017\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0005\u0017\u01c4\b\u0017\n\u0017\f\u0017\u01c7"+ + "\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01cc\b\u0017"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01d7\b\u0018\n\u0018"+ + "\f\u0018\u01da\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0003\u0019\u01e2\b\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01ea\b\u0019"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0003\u001a\u01fa\b\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0005\u001a\u01ff\b\u001a\n\u001a\f\u001a\u0202\t\u001a\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u020e\b\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0213\b\u001b\n\u001b\f\u001b"+ + "\u0216\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u0222\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u0227\b"+ + "\u001c\n\u001c\f\u001c\u022a\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0003\u001d\u0235\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0003\u001d\u023d\b\u001d\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e"+ + "\u0246\b\u001e\n\u001e\f\u001e\u0249\t\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0005\u001e\u024e\b\u001e\n\u001e\f\u001e\u0251\t\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0270\b\u001f"+ + "\u0001\u001f\u0003\u001f\u0273\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u028c"+ + "\b!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001"+ + "#\u0003#\u0297\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0000\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014"+ + "\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001"+ + "\u0000\u001e\u001f\u02c3\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000"+ + "\u0000\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000"+ + "\u0000\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000"+ + "\f\u00b9\u0001\u0000\u0000\u0000\u000e\u00c3\u0001\u0000\u0000\u0000\u0010"+ + "\u00e9\u0001\u0000\u0000\u0000\u0012\u0101\u0001\u0000\u0000\u0000\u0014"+ + "\u0108\u0001\u0000\u0000\u0000\u0016\u010e\u0001\u0000\u0000\u0000\u0018"+ + "\u0117\u0001\u0000\u0000\u0000\u001a\u011d\u0001\u0000\u0000\u0000\u001c"+ + "\u013b\u0001\u0000\u0000\u0000\u001e\u015c\u0001\u0000\u0000\u0000 \u015e"+ + "\u0001\u0000\u0000\u0000\"\u0174\u0001\u0000\u0000\u0000$\u017c\u0001"+ + "\u0000\u0000\u0000&\u0182\u0001\u0000\u0000\u0000(\u0188\u0001\u0000\u0000"+ + "\u0000*\u01a1\u0001\u0000\u0000\u0000,\u01bd\u0001\u0000\u0000\u0000."+ + "\u01bf\u0001\u0000\u0000\u00000\u01cd\u0001\u0000\u0000\u00002\u01e9\u0001"+ + "\u0000\u0000\u00004\u01eb\u0001\u0000\u0000\u00006\u0203\u0001\u0000\u0000"+ + "\u00008\u0217\u0001\u0000\u0000\u0000:\u023c\u0001\u0000\u0000\u0000<"+ + "\u023e\u0001\u0000\u0000\u0000>\u0272\u0001\u0000\u0000\u0000@\u0274\u0001"+ + "\u0000\u0000\u0000B\u028b\u0001\u0000\u0000\u0000D\u028d\u0001\u0000\u0000"+ + "\u0000F\u0296\u0001\u0000\u0000\u0000H\u0298\u0001\u0000\u0000\u0000J"+ + "S\u0006\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000"+ "\uffff\uffff\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000"+ "OP\u0006\u0000\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000"+ "\u0000\u0000QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001"+ @@ -4088,270 +4122,276 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext "\u0007\u0000\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006"+ "\uffff\uffff\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001"+ "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001"+ - "\u0000\u0000\u0000\u00c0\u00c1\u0005;\u0000\u0000\u00c1\r\u0001\u0000"+ - "\u0000\u0000\u00c2\u00c3\u0006\u0007\uffff\uffff\u0000\u00c3\u00c4\u0005"+ - "\b\u0000\u0000\u00c4\u00c5\u0006\u0007\uffff\uffff\u0000\u00c5\u00c6\u0003"+ - "\u0010\b\u0000\u00c6\u00c7\u0006\u0007\uffff\uffff\u0000\u00c7\u00c8\u0003"+ - ".\u0017\u0000\u00c8\u00c9\u0006\u0007\uffff\uffff\u0000\u00c9\u00d2\u0006"+ - "\u0007\uffff\uffff\u0000\u00ca\u00cb\u0005\n\u0000\u0000\u00cb\u00cc\u0003"+ - "\u0010\b\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00ce\u0003"+ - ".\u0017\u0000\u00ce\u00cf\u0006\u0007\uffff\uffff\u0000\u00cf\u00d1\u0001"+ - "\u0000\u0000\u0000\u00d0\u00ca\u0001\u0000\u0000\u0000\u00d1\u00d4\u0001"+ - "\u0000\u0000\u0000\u00d2\u00d0\u0001\u0000\u0000\u0000\u00d2\u00d3\u0001"+ - "\u0000\u0000\u0000\u00d3\u00d9\u0001\u0000\u0000\u0000\u00d4\u00d2\u0001"+ - "\u0000\u0000\u0000\u00d5\u00d6\u0005\t\u0000\u0000\u00d6\u00d7\u0003."+ - "\u0017\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00da\u0001"+ - "\u0000\u0000\u0000\u00d9\u00d5\u0001\u0000\u0000\u0000\u00d9\u00da\u0001"+ - "\u0000\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0006"+ - "\u0007\uffff\uffff\u0000\u00dc\u00dd\u0005\u0002\u0000\u0000\u00dd\u000f"+ - "\u0001\u0000\u0000\u0000\u00de\u00f3\u0006\b\uffff\uffff\u0000\u00df\u00e0"+ - "\u00051\u0000\u0000\u00e0\u00e1\u00030\u0018\u0000\u00e1\u00e2\u0006\b"+ - "\uffff\uffff\u0000\u00e2\u00ee\u00052\u0000\u0000\u00e3\u00e5\u0007\u0000"+ - "\u0000\u0000\u00e4\u00e6\u00051\u0000\u0000\u00e5\u00e4\u0001\u0000\u0000"+ - "\u0000\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001\u0000\u0000"+ - "\u0000\u00e7\u00e8\u0003\u0010\b\u0000\u00e8\u00ea\u0006\b\uffff\uffff"+ - "\u0000\u00e9\u00eb\u00052\u0000\u0000\u00ea\u00e9\u0001\u0000\u0000\u0000"+ - "\u00ea\u00eb\u0001\u0000\u0000\u0000\u00eb\u00ed\u0001\u0000\u0000\u0000"+ - "\u00ec\u00e3\u0001\u0000\u0000\u0000\u00ed\u00f0\u0001\u0000\u0000\u0000"+ - "\u00ee\u00ec\u0001\u0000\u0000\u0000\u00ee\u00ef\u0001\u0000\u0000\u0000"+ - "\u00ef\u00f2\u0001\u0000\u0000\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000"+ - "\u00f1\u00df\u0001\u0000\u0000\u0000\u00f2\u00f5\u0001\u0000\u0000\u0000"+ - "\u00f3\u00f1\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000\u0000\u0000"+ - "\u00f4\u0011\u0001\u0000\u0000\u0000\u00f5\u00f3\u0001\u0000\u0000\u0000"+ - "\u00f6\u00f7\u0005\u0004\u0000\u0000\u00f7\u00f8\u00051\u0000\u0000\u00f8"+ - "\u00f9\u00030\u0018\u0000\u00f9\u00fa\u0006\t\uffff\uffff\u0000\u00fa"+ - "\u00fb\u00052\u0000\u0000\u00fb\u00fc\u0005;\u0000\u0000\u00fc\u0013\u0001"+ - "\u0000\u0000\u0000\u00fd\u00fe\u0005\u0006\u0000\u0000\u00fe\u00ff\u0005"+ - "1\u0000\u0000\u00ff\u0100\u00030\u0018\u0000\u0100\u0101\u0006\n\uffff"+ - "\uffff\u0000\u0101\u0102\u00052\u0000\u0000\u0102\u0015\u0001\u0000\u0000"+ - "\u0000\u0103\u0104\u0005\u0005\u0000\u0000\u0104\u0105\u00051\u0000\u0000"+ - "\u0105\u0106\u00030\u0018\u0000\u0106\u0107\u00057\u0000\u0000\u0107\u0108"+ - "\u00030\u0018\u0000\u0108\u0109\u00052\u0000\u0000\u0109\u010a\u0005;"+ - "\u0000\u0000\u010a\u010b\u0006\u000b\uffff\uffff\u0000\u010b\u0017\u0001"+ - "\u0000\u0000\u0000\u010c\u010d\u0005\u000e\u0000\u0000\u010d\u010e\u0005"+ - "\u0011\u0000\u0000\u010e\u010f\u0003\u001a\r\u0000\u010f\u0110\u0006\f"+ - "\uffff\uffff\u0000\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0019\u0001"+ - "\u0000\u0000\u0000\u0112\u0128\u0006\r\uffff\uffff\u0000\u0113\u0114\u0003"+ - ",\u0016\u0000\u0114\u0115\u0006\r\uffff\uffff\u0000\u0115\u0127\u0001"+ - "\u0000\u0000\u0000\u0116\u011b\u0005(\u0000\u0000\u0117\u0118\u0005\b"+ - "\u0000\u0000\u0118\u0119\u0003\u0010\b\u0000\u0119\u011a\u0006\r\uffff"+ - "\uffff\u0000\u011a\u011c\u0001\u0000\u0000\u0000\u011b\u0117\u0001\u0000"+ - "\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000"+ - "\u0000\u0000\u011d\u0127\u0005;\u0000\u0000\u011e\u0123\u0005)\u0000\u0000"+ - "\u011f\u0120\u0005\b\u0000\u0000\u0120\u0121\u0003\u0010\b\u0000\u0121"+ - "\u0122\u0006\r\uffff\uffff\u0000\u0122\u0124\u0001\u0000\u0000\u0000\u0123"+ - "\u011f\u0001\u0000\u0000\u0000\u0123\u0124\u0001\u0000\u0000\u0000\u0124"+ - "\u0125\u0001\u0000\u0000\u0000\u0125\u0127\u0005;\u0000\u0000\u0126\u0113"+ - "\u0001\u0000\u0000\u0000\u0126\u0116\u0001\u0000\u0000\u0000\u0126\u011e"+ - "\u0001\u0000\u0000\u0000\u0127\u012a\u0001\u0000\u0000\u0000\u0128\u0126"+ - "\u0001\u0000\u0000\u0000\u0128\u0129\u0001\u0000\u0000\u0000\u0129\u012e"+ - "\u0001\u0000\u0000\u0000\u012a\u0128\u0001\u0000\u0000\u0000\u012b\u012c"+ - "\u0003\f\u0006\u0000\u012c\u012d\u0006\r\uffff\uffff\u0000\u012d\u012f"+ - "\u0001\u0000\u0000\u0000\u012e\u012b\u0001\u0000\u0000\u0000\u012e\u012f"+ - "\u0001\u0000\u0000\u0000\u012f\u001b\u0001\u0000\u0000\u0000\u0130\u0131"+ - "\u0005\u000f\u0000\u0000\u0131\u0132\u0005>\u0000\u0000\u0132\u0133\u0005"+ - "\u0010\u0000\u0000\u0133\u0134\u0003\u001e\u000f\u0000\u0134\u0135\u0003"+ - "\u001a\r\u0000\u0135\u0136\u0005\u0002\u0000\u0000\u0136\u0137\u0006\u000e"+ - "\uffff\uffff\u0000\u0137\u001d\u0001\u0000\u0000\u0000\u0138\u0139\u0006"+ - "\u000f\uffff\uffff\u0000\u0139\u013a\u00051\u0000\u0000\u013a\u013b\u0003"+ - "0\u0018\u0000\u013b\u013c\u0006\u000f\uffff\uffff\u0000\u013c\u013d\u0005"+ - "9\u0000\u0000\u013d\u013e\u00030\u0018\u0000\u013e\u013f\u0006\u000f\uffff"+ - "\uffff\u0000\u013f\u0140\u00052\u0000\u0000\u0140\u0152\u0001\u0000\u0000"+ - "\u0000\u0141\u0142\u00053\u0000\u0000\u0142\u0143\u00030\u0018\u0000\u0143"+ - "\u014a\u0006\u000f\uffff\uffff\u0000\u0144\u0145\u00057\u0000\u0000\u0145"+ - "\u0146\u00030\u0018\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147"+ - "\u0149\u0001\u0000\u0000\u0000\u0148\u0144\u0001\u0000\u0000\u0000\u0149"+ - "\u014c\u0001\u0000\u0000\u0000\u014a\u0148\u0001\u0000\u0000\u0000\u014a"+ - "\u014b\u0001\u0000\u0000\u0000\u014b\u014d\u0001\u0000\u0000\u0000\u014c"+ - "\u014a\u0001\u0000\u0000\u0000\u014d\u014e\u00054\u0000\u0000\u014e\u0152"+ - "\u0001\u0000\u0000\u0000\u014f\u0150\u0005>\u0000\u0000\u0150\u0152\u0006"+ - "\u000f\uffff\uffff\u0000\u0151\u0138\u0001\u0000\u0000\u0000\u0151\u0141"+ - "\u0001\u0000\u0000\u0000\u0151\u014f\u0001\u0000\u0000\u0000\u0152\u001f"+ - "\u0001\u0000\u0000\u0000\u0153\u0154\u0006\u0010\uffff\uffff\u0000\u0154"+ - "\u0155\u00053\u0000\u0000\u0155\u0156\u00030\u0018\u0000\u0156\u0157\u0005"+ - "$\u0000\u0000\u0157\u0158\u0005>\u0000\u0000\u0158\u0159\u0005*\u0000"+ - "\u0000\u0159\u015a\u0003\u001e\u000f\u0000\u015a\u015b\u00057\u0000\u0000"+ - "\u015b\u015c\u00030\u0018\u0000\u015c\u0163\u0006\u0010\uffff\uffff\u0000"+ - "\u015d\u015e\u00057\u0000\u0000\u015e\u015f\u00030\u0018\u0000\u015f\u0160"+ - "\u0006\u0010\uffff\uffff\u0000\u0160\u0162\u0001\u0000\u0000\u0000\u0161"+ - "\u015d\u0001\u0000\u0000\u0000\u0162\u0165\u0001\u0000\u0000\u0000\u0163"+ - "\u0161\u0001\u0000\u0000\u0000\u0163\u0164\u0001\u0000\u0000\u0000\u0164"+ - "\u0166\u0001\u0000\u0000\u0000\u0165\u0163\u0001\u0000\u0000\u0000\u0166"+ - "\u0167\u0006\u0010\uffff\uffff\u0000\u0167\u0168\u00054\u0000\u0000\u0168"+ - "!\u0001\u0000\u0000\u0000\u0169\u016a\u0005>\u0000\u0000\u016a\u016b\u0005"+ - "8\u0000\u0000\u016b\u016c\u0005\r\u0000\u0000\u016c\u016d\u00051\u0000"+ - "\u0000\u016d\u016e\u00030\u0018\u0000\u016e\u016f\u00052\u0000\u0000\u016f"+ - "\u0170\u0006\u0011\uffff\uffff\u0000\u0170#\u0001\u0000\u0000\u0000\u0171"+ - "\u0172\u0005\u0012\u0000\u0000\u0172\u0173\u00051\u0000\u0000\u0173\u0174"+ - "\u00030\u0018\u0000\u0174\u0175\u00052\u0000\u0000\u0175\u0176\u0006\u0012"+ - "\uffff\uffff\u0000\u0176%\u0001\u0000\u0000\u0000\u0177\u0178\u0005\u0013"+ - "\u0000\u0000\u0178\u0179\u00051\u0000\u0000\u0179\u017a\u00030\u0018\u0000"+ - "\u017a\u017b\u00052\u0000\u0000\u017b\u017c\u0006\u0013\uffff\uffff\u0000"+ - "\u017c\'\u0001\u0000\u0000\u0000\u017d\u017e\u0006\u0014\uffff\uffff\u0000"+ - "\u017e\u0182\u0005>\u0000\u0000\u017f\u0180\u0003*\u0015\u0000\u0180\u0181"+ - "\u0006\u0014\uffff\uffff\u0000\u0181\u0183\u0001\u0000\u0000\u0000\u0182"+ - "\u017f\u0001\u0000\u0000\u0000\u0182\u0183\u0001\u0000\u0000\u0000\u0183"+ - "\u0190\u0001\u0000\u0000\u0000\u0184\u0185\u00050\u0000\u0000\u0185\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u0186\u0187\u0005+\u0000\u0000\u0187\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u0188\u0189\u0005,\u0000\u0000\u0189\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u018a\u018b\u0005.\u0000\u0000\u018b\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u018c\u018d\u0005-\u0000\u0000\u018d\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u018e\u018f\u0005/\u0000\u0000\u018f\u0191"+ - "\u0006\u0014\uffff\uffff\u0000\u0190\u0184\u0001\u0000\u0000\u0000\u0190"+ - "\u0186\u0001\u0000\u0000\u0000\u0190\u0188\u0001\u0000\u0000\u0000\u0190"+ - "\u018a\u0001\u0000\u0000\u0000\u0190\u018c\u0001\u0000\u0000\u0000\u0190"+ - "\u018e\u0001\u0000\u0000\u0000\u0191\u0192\u0001\u0000\u0000\u0000\u0192"+ - "\u0193\u00030\u0018\u0000\u0193\u0194\u0005;\u0000\u0000\u0194\u0195\u0006"+ - "\u0014\uffff\uffff\u0000\u0195)\u0001\u0000\u0000\u0000\u0196\u0197\u0005"+ - "3\u0000\u0000\u0197\u0198\u00030\u0018\u0000\u0198\u0199\u0006\u0015\uffff"+ - "\uffff\u0000\u0199\u019a\u00054\u0000\u0000\u019a+\u0001\u0000\u0000\u0000"+ - "\u019b\u019c\u0003\u000e\u0007\u0000\u019c\u019d\u0006\u0016\uffff\uffff"+ - "\u0000\u019d\u01b3\u0001\u0000\u0000\u0000\u019e\u019f\u0003\u0018\f\u0000"+ - "\u019f\u01a0\u0006\u0016\uffff\uffff\u0000\u01a0\u01b3\u0001\u0000\u0000"+ - "\u0000\u01a1\u01a2\u0003\u001c\u000e\u0000\u01a2\u01a3\u0006\u0016\uffff"+ - "\uffff\u0000\u01a3\u01b3\u0001\u0000\u0000\u0000\u01a4\u01a5\u0003\u0012"+ - "\t\u0000\u01a5\u01a6\u0006\u0016\uffff\uffff\u0000\u01a6\u01b3\u0001\u0000"+ - "\u0000\u0000\u01a7\u01a8\u0003\u0016\u000b\u0000\u01a8\u01a9\u0006\u0016"+ - "\uffff\uffff\u0000\u01a9\u01b3\u0001\u0000\u0000\u0000\u01aa\u01ab\u0003"+ - "0\u0018\u0000\u01ab\u01ac\u0006\u0016\uffff\uffff\u0000\u01ac\u01ad\u0006"+ - "\u0016\uffff\uffff\u0000\u01ad\u01ae\u0005;\u0000\u0000\u01ae\u01b3\u0001"+ - "\u0000\u0000\u0000\u01af\u01b0\u0003(\u0014\u0000\u01b0\u01b1\u0006\u0016"+ - "\uffff\uffff\u0000\u01b1\u01b3\u0001\u0000\u0000\u0000\u01b2\u019b\u0001"+ - "\u0000\u0000\u0000\u01b2\u019e\u0001\u0000\u0000\u0000\u01b2\u01a1\u0001"+ - "\u0000\u0000\u0000\u01b2\u01a4\u0001\u0000\u0000\u0000\u01b2\u01a7\u0001"+ - "\u0000\u0000\u0000\u01b2\u01aa\u0001\u0000\u0000\u0000\u01b2\u01af\u0001"+ - "\u0000\u0000\u0000\u01b3-\u0001\u0000\u0000\u0000\u01b4\u01ba\u0006\u0017"+ - "\uffff\uffff\u0000\u01b5\u01b6\u0003,\u0016\u0000\u01b6\u01b7\u0006\u0017"+ - "\uffff\uffff\u0000\u01b7\u01b9\u0001\u0000\u0000\u0000\u01b8\u01b5\u0001"+ - "\u0000\u0000\u0000\u01b9\u01bc\u0001\u0000\u0000\u0000\u01ba\u01b8\u0001"+ - "\u0000\u0000\u0000\u01ba\u01bb\u0001\u0000\u0000\u0000\u01bb\u01c0\u0001"+ - "\u0000\u0000\u0000\u01bc\u01ba\u0001\u0000\u0000\u0000\u01bd\u01be\u0003"+ - "\f\u0006\u0000\u01be\u01bf\u0006\u0017\uffff\uffff\u0000\u01bf\u01c1\u0001"+ - "\u0000\u0000\u0000\u01c0\u01bd\u0001\u0000\u0000\u0000\u01c0\u01c1\u0001"+ - "\u0000\u0000\u0000\u01c1/\u0001\u0000\u0000\u0000\u01c2\u01c3\u0006\u0018"+ - "\uffff\uffff\u0000\u01c3\u01c4\u00032\u0019\u0000\u01c4\u01c5\u0006\u0018"+ - "\uffff\uffff\u0000\u01c5\u01cd\u0001\u0000\u0000\u0000\u01c6\u01c7\n\u0002"+ - "\u0000\u0000\u01c7\u01c8\u0005%\u0000\u0000\u01c8\u01c9\u00032\u0019\u0000"+ - "\u01c9\u01ca\u0006\u0018\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000\u0000"+ - "\u0000\u01cb\u01c6\u0001\u0000\u0000\u0000\u01cc\u01cf\u0001\u0000\u0000"+ - "\u0000\u01cd\u01cb\u0001\u0000\u0000\u0000\u01cd\u01ce\u0001\u0000\u0000"+ - "\u0000\u01ce1\u0001\u0000\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000"+ - "\u01d0\u01d1\u00034\u001a\u0000\u01d1\u01d6\u0006\u0019\uffff\uffff\u0000"+ - "\u01d2\u01d3\u0005\u0018\u0000\u0000\u01d3\u01d7\u0006\u0019\uffff\uffff"+ - "\u0000\u01d4\u01d5\u0005\u0019\u0000\u0000\u01d5\u01d7\u0006\u0019\uffff"+ - "\uffff\u0000\u01d6\u01d2\u0001\u0000\u0000\u0000\u01d6\u01d4\u0001\u0000"+ - "\u0000\u0000\u01d7\u01d8\u0001\u0000\u0000\u0000\u01d8\u01d9\u00034\u001a"+ - "\u0000\u01d9\u01da\u0006\u0019\uffff\uffff\u0000\u01da\u01df\u0001\u0000"+ - "\u0000\u0000\u01db\u01dc\u00034\u001a\u0000\u01dc\u01dd\u0006\u0019\uffff"+ - "\uffff\u0000\u01dd\u01df\u0001\u0000\u0000\u0000\u01de\u01d0\u0001\u0000"+ - "\u0000\u0000\u01de\u01db\u0001\u0000\u0000\u0000\u01df3\u0001\u0000\u0000"+ - "\u0000\u01e0\u01e1\u0006\u001a\uffff\uffff\u0000\u01e1\u01e2\u00036\u001b"+ - "\u0000\u01e2\u01e3\u0006\u001a\uffff\uffff\u0000\u01e3\u01f5\u0001\u0000"+ - "\u0000\u0000\u01e4\u01e5\n\u0002\u0000\u0000\u01e5\u01ee\u0006\u001a\uffff"+ - "\uffff\u0000\u01e6\u01e7\u0005\u001c\u0000\u0000\u01e7\u01ef\u0006\u001a"+ - "\uffff\uffff\u0000\u01e8\u01e9\u0005\u001d\u0000\u0000\u01e9\u01ef\u0006"+ - "\u001a\uffff\uffff\u0000\u01ea\u01eb\u0005\u001a\u0000\u0000\u01eb\u01ef"+ - "\u0006\u001a\uffff\uffff\u0000\u01ec\u01ed\u0005\u001b\u0000\u0000\u01ed"+ - "\u01ef\u0006\u001a\uffff\uffff\u0000\u01ee\u01e6\u0001\u0000\u0000\u0000"+ - "\u01ee\u01e8\u0001\u0000\u0000\u0000\u01ee\u01ea\u0001\u0000\u0000\u0000"+ - "\u01ee\u01ec\u0001\u0000\u0000\u0000\u01ef\u01f0\u0001\u0000\u0000\u0000"+ - "\u01f0\u01f1\u00036\u001b\u0000\u01f1\u01f2\u0006\u001a\uffff\uffff\u0000"+ - "\u01f2\u01f4\u0001\u0000\u0000\u0000\u01f3\u01e4\u0001\u0000\u0000\u0000"+ - "\u01f4\u01f7\u0001\u0000\u0000\u0000\u01f5\u01f3\u0001\u0000\u0000\u0000"+ - "\u01f5\u01f6\u0001\u0000\u0000\u0000\u01f65\u0001\u0000\u0000\u0000\u01f7"+ - "\u01f5\u0001\u0000\u0000\u0000\u01f8\u01f9\u0006\u001b\uffff\uffff\u0000"+ - "\u01f9\u01fa\u00038\u001c\u0000\u01fa\u01fb\u0006\u001b\uffff\uffff\u0000"+ - "\u01fb\u0209\u0001\u0000\u0000\u0000\u01fc\u01fd\n\u0002\u0000\u0000\u01fd"+ - "\u0202\u0006\u001b\uffff\uffff\u0000\u01fe\u01ff\u0005\u0014\u0000\u0000"+ - "\u01ff\u0203\u0006\u001b\uffff\uffff\u0000\u0200\u0201\u0005\u0015\u0000"+ - "\u0000\u0201\u0203\u0006\u001b\uffff\uffff\u0000\u0202\u01fe\u0001\u0000"+ - "\u0000\u0000\u0202\u0200\u0001\u0000\u0000\u0000\u0203\u0204\u0001\u0000"+ - "\u0000\u0000\u0204\u0205\u00038\u001c\u0000\u0205\u0206\u0006\u001b\uffff"+ - "\uffff\u0000\u0206\u0208\u0001\u0000\u0000\u0000\u0207\u01fc\u0001\u0000"+ - "\u0000\u0000\u0208\u020b\u0001\u0000\u0000\u0000\u0209\u0207\u0001\u0000"+ - "\u0000\u0000\u0209\u020a\u0001\u0000\u0000\u0000\u020a7\u0001\u0000\u0000"+ - "\u0000\u020b\u0209\u0001\u0000\u0000\u0000\u020c\u020d\u0006\u001c\uffff"+ - "\uffff\u0000\u020d\u020e\u0003:\u001d\u0000\u020e\u020f\u0006\u001c\uffff"+ - "\uffff\u0000\u020f\u021d\u0001\u0000\u0000\u0000\u0210\u0211\n\u0002\u0000"+ - "\u0000\u0211\u0216\u0006\u001c\uffff\uffff\u0000\u0212\u0213\u0005\u0016"+ - "\u0000\u0000\u0213\u0217\u0006\u001c\uffff\uffff\u0000\u0214\u0215\u0005"+ - "\u0017\u0000\u0000\u0215\u0217\u0006\u001c\uffff\uffff\u0000\u0216\u0212"+ - "\u0001\u0000\u0000\u0000\u0216\u0214\u0001\u0000\u0000\u0000\u0217\u0218"+ - "\u0001\u0000\u0000\u0000\u0218\u0219\u0003:\u001d\u0000\u0219\u021a\u0006"+ - "\u001c\uffff\uffff\u0000\u021a\u021c\u0001\u0000\u0000\u0000\u021b\u0210"+ - "\u0001\u0000\u0000\u0000\u021c\u021f\u0001\u0000\u0000\u0000\u021d\u021b"+ - "\u0001\u0000\u0000\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021e9\u0001"+ - "\u0000\u0000\u0000\u021f\u021d\u0001\u0000\u0000\u0000\u0220\u0229\u0006"+ - "\u001d\uffff\uffff\u0000\u0221\u0222\u0005 \u0000\u0000\u0222\u022a\u0006"+ - "\u001d\uffff\uffff\u0000\u0223\u0224\u0005\u0015\u0000\u0000\u0224\u022a"+ - "\u0006\u001d\uffff\uffff\u0000\u0225\u0226\u0005!\u0000\u0000\u0226\u022a"+ - "\u0006\u001d\uffff\uffff\u0000\u0227\u0228\u0005\"\u0000\u0000\u0228\u022a"+ - "\u0006\u001d\uffff\uffff\u0000\u0229\u0221\u0001\u0000\u0000\u0000\u0229"+ - "\u0223\u0001\u0000\u0000\u0000\u0229\u0225\u0001\u0000\u0000\u0000\u0229"+ - "\u0227\u0001\u0000\u0000\u0000\u022a\u022b\u0001\u0000\u0000\u0000\u022b"+ - "\u022c\u0003<\u001e\u0000\u022c\u022d\u0006\u001d\uffff\uffff\u0000\u022d"+ - "\u0232\u0001\u0000\u0000\u0000\u022e\u022f\u0003<\u001e\u0000\u022f\u0230"+ - "\u0006\u001d\uffff\uffff\u0000\u0230\u0232\u0001\u0000\u0000\u0000\u0231"+ - "\u0220\u0001\u0000\u0000\u0000\u0231\u022e\u0001\u0000\u0000\u0000\u0232"+ - ";\u0001\u0000\u0000\u0000\u0233\u0234\u0006\u001e\uffff\uffff\u0000\u0234"+ - "\u023c\u0003>\u001f\u0000\u0235\u0236\u00051\u0000\u0000\u0236\u0237\u0003"+ - "\n\u0005\u0000\u0237\u0238\u0006\u001e\uffff\uffff\u0000\u0238\u0239\u0005"+ - "2\u0000\u0000\u0239\u023b\u0001\u0000\u0000\u0000\u023a\u0235\u0001\u0000"+ - "\u0000\u0000\u023b\u023e\u0001\u0000\u0000\u0000\u023c\u023a\u0001\u0000"+ - "\u0000\u0000\u023c\u023d\u0001\u0000\u0000\u0000\u023d\u0244\u0001\u0000"+ - "\u0000\u0000\u023e\u023c\u0001\u0000\u0000\u0000\u023f\u0240\u0003*\u0015"+ - "\u0000\u0240\u0241\u0006\u001e\uffff\uffff\u0000\u0241\u0243\u0001\u0000"+ - "\u0000\u0000\u0242\u023f\u0001\u0000\u0000\u0000\u0243\u0246\u0001\u0000"+ - "\u0000\u0000\u0244\u0242\u0001\u0000\u0000\u0000\u0244\u0245\u0001\u0000"+ - "\u0000\u0000\u0245\u0247\u0001\u0000\u0000\u0000\u0246\u0244\u0001\u0000"+ - "\u0000\u0000\u0247\u0248\u0006\u001e\uffff\uffff\u0000\u0248=\u0001\u0000"+ - "\u0000\u0000\u0249\u024a\u0003B!\u0000\u024a\u024b\u0006\u001f\uffff\uffff"+ - "\u0000\u024b\u0268\u0001\u0000\u0000\u0000\u024c\u024d\u0005>\u0000\u0000"+ - "\u024d\u0268\u0006\u001f\uffff\uffff\u0000\u024e\u024f\u0003@ \u0000\u024f"+ - "\u0250\u0006\u001f\uffff\uffff\u0000\u0250\u0268\u0001\u0000\u0000\u0000"+ - "\u0251\u0252\u0003$\u0012\u0000\u0252\u0253\u0006\u001f\uffff\uffff\u0000"+ - "\u0253\u0268\u0001\u0000\u0000\u0000\u0254\u0255\u0003&\u0013\u0000\u0255"+ - "\u0256\u0006\u001f\uffff\uffff\u0000\u0256\u0268\u0001\u0000\u0000\u0000"+ - "\u0257\u0258\u0003\"\u0011\u0000\u0258\u0259\u0006\u001f\uffff\uffff\u0000"+ - "\u0259\u0268\u0001\u0000\u0000\u0000\u025a\u025b\u0003 \u0010\u0000\u025b"+ - "\u025c\u0006\u001f\uffff\uffff\u0000\u025c\u0268\u0001\u0000\u0000\u0000"+ - "\u025d\u025e\u0003\u0014\n\u0000\u025e\u025f\u0006\u001f\uffff\uffff\u0000"+ - "\u025f\u0268\u0001\u0000\u0000\u0000\u0260\u0264\u00051\u0000\u0000\u0261"+ - "\u0262\u00030\u0018\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000\u0263"+ - "\u0265\u0001\u0000\u0000\u0000\u0264\u0261\u0001\u0000\u0000\u0000\u0264"+ - "\u0265\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266"+ - "\u0268\u00052\u0000\u0000\u0267\u0249\u0001\u0000\u0000\u0000\u0267\u024c"+ - "\u0001\u0000\u0000\u0000\u0267\u024e\u0001\u0000\u0000\u0000\u0267\u0251"+ - "\u0001\u0000\u0000\u0000\u0267\u0254\u0001\u0000\u0000\u0000\u0267\u0257"+ - "\u0001\u0000\u0000\u0000\u0267\u025a\u0001\u0000\u0000\u0000\u0267\u025d"+ - "\u0001\u0000\u0000\u0000\u0267\u0260\u0001\u0000\u0000\u0000\u0268?\u0001"+ - "\u0000\u0000\u0000\u0269\u026a\u0005*\u0000\u0000\u026a\u026b\u0003\u0004"+ - "\u0002\u0000\u026b\u026c\u00055\u0000\u0000\u026c\u026d\u0003.\u0017\u0000"+ - "\u026d\u026e\u00056\u0000\u0000\u026e\u026f\u0003\n\u0005\u0000\u026f"+ - "\u0270\u0006 \uffff\uffff\u0000\u0270A\u0001\u0000\u0000\u0000\u0271\u0272"+ - "\u0003F#\u0000\u0272\u0273\u0006!\uffff\uffff\u0000\u0273\u0281\u0001"+ - "\u0000\u0000\u0000\u0274\u0275\u0005?\u0000\u0000\u0275\u0281\u0006!\uffff"+ - "\uffff\u0000\u0276\u0277\u0005<\u0000\u0000\u0277\u0281\u0006!\uffff\uffff"+ - "\u0000\u0278\u0279\u0005=\u0000\u0000\u0279\u0281\u0006!\uffff\uffff\u0000"+ - "\u027a\u027b\u0003D\"\u0000\u027b\u027c\u0006!\uffff\uffff\u0000\u027c"+ - "\u0281\u0001\u0000\u0000\u0000\u027d\u027e\u0003H$\u0000\u027e\u027f\u0006"+ - "!\uffff\uffff\u0000\u027f\u0281\u0001\u0000\u0000\u0000\u0280\u0271\u0001"+ - "\u0000\u0000\u0000\u0280\u0274\u0001\u0000\u0000\u0000\u0280\u0276\u0001"+ - "\u0000\u0000\u0000\u0280\u0278\u0001\u0000\u0000\u0000\u0280\u027a\u0001"+ - "\u0000\u0000\u0000\u0280\u027d\u0001\u0000\u0000\u0000\u0281C\u0001\u0000"+ - "\u0000\u0000\u0282\u0283\u00053\u0000\u0000\u0283\u0284\u0003\n\u0005"+ - "\u0000\u0284\u0285\u00054\u0000\u0000\u0285\u0286\u0006\"\uffff\uffff"+ - "\u0000\u0286E\u0001\u0000\u0000\u0000\u0287\u0288\u0005&\u0000\u0000\u0288"+ - "\u028c\u0006#\uffff\uffff\u0000\u0289\u028a\u0005\'\u0000\u0000\u028a"+ - "\u028c\u0006#\uffff\uffff\u0000\u028b\u0287\u0001\u0000\u0000\u0000\u028b"+ - "\u0289\u0001\u0000\u0000\u0000\u028cG\u0001\u0000\u0000\u0000\u028d\u028e"+ - "\u0005\u000b\u0000\u0000\u028e\u028f\u00051\u0000\u0000\u028f\u0290\u0005"+ - ":\u0000\u0000\u0290\u0291\u0005>\u0000\u0000\u0291\u0292\u00052\u0000"+ - "\u0000\u0292\u0293\u0006$\uffff\uffff\u0000\u0293I\u0001\u0000\u0000\u0000"+ - ".QSm\u0080\u0085\u0087\u009c\u00b4\u00b7\u00be\u00d2\u00d9\u00e5\u00ea"+ - "\u00ee\u00f3\u011b\u0123\u0126\u0128\u012e\u014a\u0151\u0163\u0182\u0190"+ - "\u01b2\u01ba\u01c0\u01cd\u01d6\u01de\u01ee\u01f5\u0202\u0209\u0216\u021d"+ - "\u0229\u0231\u023c\u0244\u0264\u0267\u0280\u028b"; + "\u0000\u0000\u0000\u00c0\u00c1\u0006\u0006\uffff\uffff\u0000\u00c1\u00c2"+ + "\u0005;\u0000\u0000\u00c2\r\u0001\u0000\u0000\u0000\u00c3\u00c4\u0006"+ + "\u0007\uffff\uffff\u0000\u00c4\u00c5\u0005\b\u0000\u0000\u00c5\u00ce\u0006"+ + "\u0007\uffff\uffff\u0000\u00c6\u00c7\u0003\u0010\b\u0000\u00c7\u00c8\u0006"+ + "\u0007\uffff\uffff\u0000\u00c8\u00cf\u0001\u0000\u0000\u0000\u00c9\u00ca"+ + "\u00051\u0000\u0000\u00ca\u00cb\u0003\u0010\b\u0000\u00cb\u00cc\u0005"+ + "2\u0000\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00cf\u0001"+ + "\u0000\u0000\u0000\u00ce\u00c6\u0001\u0000\u0000\u0000\u00ce\u00c9\u0001"+ + "\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0003"+ + ".\u0017\u0000\u00d1\u00d2\u0006\u0007\uffff\uffff\u0000\u00d2\u00dd\u0006"+ + "\u0007\uffff\uffff\u0000\u00d3\u00d4\u0005\n\u0000\u0000\u00d4\u00d5\u0005"+ + "1\u0000\u0000\u00d5\u00d6\u0003\u0010\b\u0000\u00d6\u00d7\u00052\u0000"+ + "\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00d9\u0003.\u0017"+ + "\u0000\u00d9\u00da\u0006\u0007\uffff\uffff\u0000\u00da\u00dc\u0001\u0000"+ + "\u0000\u0000\u00db\u00d3\u0001\u0000\u0000\u0000\u00dc\u00df\u0001\u0000"+ + "\u0000\u0000\u00dd\u00db\u0001\u0000\u0000\u0000\u00dd\u00de\u0001\u0000"+ + "\u0000\u0000\u00de\u00e4\u0001\u0000\u0000\u0000\u00df\u00dd\u0001\u0000"+ + "\u0000\u0000\u00e0\u00e1\u0005\t\u0000\u0000\u00e1\u00e2\u0003.\u0017"+ + "\u0000\u00e2\u00e3\u0006\u0007\uffff\uffff\u0000\u00e3\u00e5\u0001\u0000"+ + "\u0000\u0000\u00e4\u00e0\u0001\u0000\u0000\u0000\u00e4\u00e5\u0001\u0000"+ + "\u0000\u0000\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0006\u0007"+ + "\uffff\uffff\u0000\u00e7\u00e8\u0005\u0002\u0000\u0000\u00e8\u000f\u0001"+ + "\u0000\u0000\u0000\u00e9\u00fe\u0006\b\uffff\uffff\u0000\u00ea\u00eb\u0005"+ + "1\u0000\u0000\u00eb\u00ec\u00030\u0018\u0000\u00ec\u00ed\u0006\b\uffff"+ + "\uffff\u0000\u00ed\u00f9\u00052\u0000\u0000\u00ee\u00f0\u0007\u0000\u0000"+ + "\u0000\u00ef\u00f1\u00051\u0000\u0000\u00f0\u00ef\u0001\u0000\u0000\u0000"+ + "\u00f0\u00f1\u0001\u0000\u0000\u0000\u00f1\u00f2\u0001\u0000\u0000\u0000"+ + "\u00f2\u00f3\u0003\u0010\b\u0000\u00f3\u00f5\u0006\b\uffff\uffff\u0000"+ + "\u00f4\u00f6\u00052\u0000\u0000\u00f5\u00f4\u0001\u0000\u0000\u0000\u00f5"+ + "\u00f6\u0001\u0000\u0000\u0000\u00f6\u00f8\u0001\u0000\u0000\u0000\u00f7"+ + "\u00ee\u0001\u0000\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9"+ + "\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa"+ + "\u00fd\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc"+ + "\u00ea\u0001\u0000\u0000\u0000\u00fd\u0100\u0001\u0000\u0000\u0000\u00fe"+ + "\u00fc\u0001\u0000\u0000\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff"+ + "\u0011\u0001\u0000\u0000\u0000\u0100\u00fe\u0001\u0000\u0000\u0000\u0101"+ + "\u0102\u0005\u0004\u0000\u0000\u0102\u0103\u00051\u0000\u0000\u0103\u0104"+ + "\u00030\u0018\u0000\u0104\u0105\u0006\t\uffff\uffff\u0000\u0105\u0106"+ + "\u00052\u0000\u0000\u0106\u0107\u0005;\u0000\u0000\u0107\u0013\u0001\u0000"+ + "\u0000\u0000\u0108\u0109\u0005\u0006\u0000\u0000\u0109\u010a\u00051\u0000"+ + "\u0000\u010a\u010b\u00030\u0018\u0000\u010b\u010c\u0006\n\uffff\uffff"+ + "\u0000\u010c\u010d\u00052\u0000\u0000\u010d\u0015\u0001\u0000\u0000\u0000"+ + "\u010e\u010f\u0005\u0005\u0000\u0000\u010f\u0110\u00051\u0000\u0000\u0110"+ + "\u0111\u00030\u0018\u0000\u0111\u0112\u00057\u0000\u0000\u0112\u0113\u0003"+ + "0\u0018\u0000\u0113\u0114\u00052\u0000\u0000\u0114\u0115\u0005;\u0000"+ + "\u0000\u0115\u0116\u0006\u000b\uffff\uffff\u0000\u0116\u0017\u0001\u0000"+ + "\u0000\u0000\u0117\u0118\u0005\u000e\u0000\u0000\u0118\u0119\u0005\u0011"+ + "\u0000\u0000\u0119\u011a\u0003\u001a\r\u0000\u011a\u011b\u0006\f\uffff"+ + "\uffff\u0000\u011b\u011c\u0005\u0002\u0000\u0000\u011c\u0019\u0001\u0000"+ + "\u0000\u0000\u011d\u0133\u0006\r\uffff\uffff\u0000\u011e\u011f\u0003,"+ + "\u0016\u0000\u011f\u0120\u0006\r\uffff\uffff\u0000\u0120\u0132\u0001\u0000"+ + "\u0000\u0000\u0121\u0126\u0005(\u0000\u0000\u0122\u0123\u0005\b\u0000"+ + "\u0000\u0123\u0124\u0003\u0010\b\u0000\u0124\u0125\u0006\r\uffff\uffff"+ + "\u0000\u0125\u0127\u0001\u0000\u0000\u0000\u0126\u0122\u0001\u0000\u0000"+ + "\u0000\u0126\u0127\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000"+ + "\u0000\u0128\u0132\u0005;\u0000\u0000\u0129\u012e\u0005)\u0000\u0000\u012a"+ + "\u012b\u0005\b\u0000\u0000\u012b\u012c\u0003\u0010\b\u0000\u012c\u012d"+ + "\u0006\r\uffff\uffff\u0000\u012d\u012f\u0001\u0000\u0000\u0000\u012e\u012a"+ + "\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f\u0130"+ + "\u0001\u0000\u0000\u0000\u0130\u0132\u0005;\u0000\u0000\u0131\u011e\u0001"+ + "\u0000\u0000\u0000\u0131\u0121\u0001\u0000\u0000\u0000\u0131\u0129\u0001"+ + "\u0000\u0000\u0000\u0132\u0135\u0001\u0000\u0000\u0000\u0133\u0131\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0001\u0000\u0000\u0000\u0134\u0139\u0001"+ + "\u0000\u0000\u0000\u0135\u0133\u0001\u0000\u0000\u0000\u0136\u0137\u0003"+ + "\f\u0006\u0000\u0137\u0138\u0006\r\uffff\uffff\u0000\u0138\u013a\u0001"+ + "\u0000\u0000\u0000\u0139\u0136\u0001\u0000\u0000\u0000\u0139\u013a\u0001"+ + "\u0000\u0000\u0000\u013a\u001b\u0001\u0000\u0000\u0000\u013b\u013c\u0005"+ + "\u000f\u0000\u0000\u013c\u013d\u0005>\u0000\u0000\u013d\u013e\u0005\u0010"+ + "\u0000\u0000\u013e\u013f\u0003\u001e\u000f\u0000\u013f\u0140\u0003\u001a"+ + "\r\u0000\u0140\u0141\u0005\u0002\u0000\u0000\u0141\u0142\u0006\u000e\uffff"+ + "\uffff\u0000\u0142\u001d\u0001\u0000\u0000\u0000\u0143\u0144\u0006\u000f"+ + "\uffff\uffff\u0000\u0144\u0145\u00051\u0000\u0000\u0145\u0146\u00030\u0018"+ + "\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0148\u00059\u0000"+ + "\u0000\u0148\u0149\u00030\u0018\u0000\u0149\u014a\u0006\u000f\uffff\uffff"+ + "\u0000\u014a\u014b\u00052\u0000\u0000\u014b\u015d\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u00053\u0000\u0000\u014d\u014e\u00030\u0018\u0000\u014e\u0155"+ + "\u0006\u000f\uffff\uffff\u0000\u014f\u0150\u00057\u0000\u0000\u0150\u0151"+ + "\u00030\u0018\u0000\u0151\u0152\u0006\u000f\uffff\uffff\u0000\u0152\u0154"+ + "\u0001\u0000\u0000\u0000\u0153\u014f\u0001\u0000\u0000\u0000\u0154\u0157"+ + "\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000\u0000\u0000\u0155\u0156"+ + "\u0001\u0000\u0000\u0000\u0156\u0158\u0001\u0000\u0000\u0000\u0157\u0155"+ + "\u0001\u0000\u0000\u0000\u0158\u0159\u00054\u0000\u0000\u0159\u015d\u0001"+ + "\u0000\u0000\u0000\u015a\u015b\u0005>\u0000\u0000\u015b\u015d\u0006\u000f"+ + "\uffff\uffff\u0000\u015c\u0143\u0001\u0000\u0000\u0000\u015c\u014c\u0001"+ + "\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u001f\u0001"+ + "\u0000\u0000\u0000\u015e\u015f\u0006\u0010\uffff\uffff\u0000\u015f\u0160"+ + "\u00053\u0000\u0000\u0160\u0161\u00030\u0018\u0000\u0161\u0162\u0005$"+ + "\u0000\u0000\u0162\u0163\u0005>\u0000\u0000\u0163\u0164\u0005*\u0000\u0000"+ + "\u0164\u0165\u0003\u001e\u000f\u0000\u0165\u0166\u00057\u0000\u0000\u0166"+ + "\u0167\u00030\u0018\u0000\u0167\u016e\u0006\u0010\uffff\uffff\u0000\u0168"+ + "\u0169\u00057\u0000\u0000\u0169\u016a\u00030\u0018\u0000\u016a\u016b\u0006"+ + "\u0010\uffff\uffff\u0000\u016b\u016d\u0001\u0000\u0000\u0000\u016c\u0168"+ + "\u0001\u0000\u0000\u0000\u016d\u0170\u0001\u0000\u0000\u0000\u016e\u016c"+ + "\u0001\u0000\u0000\u0000\u016e\u016f\u0001\u0000\u0000\u0000\u016f\u0171"+ + "\u0001\u0000\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0171\u0172"+ + "\u0006\u0010\uffff\uffff\u0000\u0172\u0173\u00054\u0000\u0000\u0173!\u0001"+ + "\u0000\u0000\u0000\u0174\u0175\u0005>\u0000\u0000\u0175\u0176\u00058\u0000"+ + "\u0000\u0176\u0177\u0005\r\u0000\u0000\u0177\u0178\u00051\u0000\u0000"+ + "\u0178\u0179\u00030\u0018\u0000\u0179\u017a\u00052\u0000\u0000\u017a\u017b"+ + "\u0006\u0011\uffff\uffff\u0000\u017b#\u0001\u0000\u0000\u0000\u017c\u017d"+ + "\u0005\u0012\u0000\u0000\u017d\u017e\u00051\u0000\u0000\u017e\u017f\u0003"+ + "0\u0018\u0000\u017f\u0180\u00052\u0000\u0000\u0180\u0181\u0006\u0012\uffff"+ + "\uffff\u0000\u0181%\u0001\u0000\u0000\u0000\u0182\u0183\u0005\u0013\u0000"+ + "\u0000\u0183\u0184\u00051\u0000\u0000\u0184\u0185\u00030\u0018\u0000\u0185"+ + "\u0186\u00052\u0000\u0000\u0186\u0187\u0006\u0013\uffff\uffff\u0000\u0187"+ + "\'\u0001\u0000\u0000\u0000\u0188\u0189\u0006\u0014\uffff\uffff\u0000\u0189"+ + "\u018d\u0005>\u0000\u0000\u018a\u018b\u0003*\u0015\u0000\u018b\u018c\u0006"+ + "\u0014\uffff\uffff\u0000\u018c\u018e\u0001\u0000\u0000\u0000\u018d\u018a"+ + "\u0001\u0000\u0000\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u019b"+ + "\u0001\u0000\u0000\u0000\u018f\u0190\u00050\u0000\u0000\u0190\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u0191\u0192\u0005+\u0000\u0000\u0192\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u0193\u0194\u0005,\u0000\u0000\u0194\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u0195\u0196\u0005.\u0000\u0000\u0196\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u0197\u0198\u0005-\u0000\u0000\u0198\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u0199\u019a\u0005/\u0000\u0000\u019a\u019c\u0006"+ + "\u0014\uffff\uffff\u0000\u019b\u018f\u0001\u0000\u0000\u0000\u019b\u0191"+ + "\u0001\u0000\u0000\u0000\u019b\u0193\u0001\u0000\u0000\u0000\u019b\u0195"+ + "\u0001\u0000\u0000\u0000\u019b\u0197\u0001\u0000\u0000\u0000\u019b\u0199"+ + "\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000\u0000\u0000\u019d\u019e"+ + "\u00030\u0018\u0000\u019e\u019f\u0005;\u0000\u0000\u019f\u01a0\u0006\u0014"+ + "\uffff\uffff\u0000\u01a0)\u0001\u0000\u0000\u0000\u01a1\u01a2\u00053\u0000"+ + "\u0000\u01a2\u01a3\u00030\u0018\u0000\u01a3\u01a4\u0006\u0015\uffff\uffff"+ + "\u0000\u01a4\u01a5\u00054\u0000\u0000\u01a5+\u0001\u0000\u0000\u0000\u01a6"+ + "\u01a7\u0003\u000e\u0007\u0000\u01a7\u01a8\u0006\u0016\uffff\uffff\u0000"+ + "\u01a8\u01be\u0001\u0000\u0000\u0000\u01a9\u01aa\u0003\u0018\f\u0000\u01aa"+ + "\u01ab\u0006\u0016\uffff\uffff\u0000\u01ab\u01be\u0001\u0000\u0000\u0000"+ + "\u01ac\u01ad\u0003\u001c\u000e\u0000\u01ad\u01ae\u0006\u0016\uffff\uffff"+ + "\u0000\u01ae\u01be\u0001\u0000\u0000\u0000\u01af\u01b0\u0003\u0012\t\u0000"+ + "\u01b0\u01b1\u0006\u0016\uffff\uffff\u0000\u01b1\u01be\u0001\u0000\u0000"+ + "\u0000\u01b2\u01b3\u0003\u0016\u000b\u0000\u01b3\u01b4\u0006\u0016\uffff"+ + "\uffff\u0000\u01b4\u01be\u0001\u0000\u0000\u0000\u01b5\u01b6\u00030\u0018"+ + "\u0000\u01b6\u01b7\u0006\u0016\uffff\uffff\u0000\u01b7\u01b8\u0006\u0016"+ + "\uffff\uffff\u0000\u01b8\u01b9\u0005;\u0000\u0000\u01b9\u01be\u0001\u0000"+ + "\u0000\u0000\u01ba\u01bb\u0003(\u0014\u0000\u01bb\u01bc\u0006\u0016\uffff"+ + "\uffff\u0000\u01bc\u01be\u0001\u0000\u0000\u0000\u01bd\u01a6\u0001\u0000"+ + "\u0000\u0000\u01bd\u01a9\u0001\u0000\u0000\u0000\u01bd\u01ac\u0001\u0000"+ + "\u0000\u0000\u01bd\u01af\u0001\u0000\u0000\u0000\u01bd\u01b2\u0001\u0000"+ + "\u0000\u0000\u01bd\u01b5\u0001\u0000\u0000\u0000\u01bd\u01ba\u0001\u0000"+ + "\u0000\u0000\u01be-\u0001\u0000\u0000\u0000\u01bf\u01c5\u0006\u0017\uffff"+ + "\uffff\u0000\u01c0\u01c1\u0003,\u0016\u0000\u01c1\u01c2\u0006\u0017\uffff"+ + "\uffff\u0000\u01c2\u01c4\u0001\u0000\u0000\u0000\u01c3\u01c0\u0001\u0000"+ + "\u0000\u0000\u01c4\u01c7\u0001\u0000\u0000\u0000\u01c5\u01c3\u0001\u0000"+ + "\u0000\u0000\u01c5\u01c6\u0001\u0000\u0000\u0000\u01c6\u01cb\u0001\u0000"+ + "\u0000\u0000\u01c7\u01c5\u0001\u0000\u0000\u0000\u01c8\u01c9\u0003\f\u0006"+ + "\u0000\u01c9\u01ca\u0006\u0017\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000"+ + "\u0000\u0000\u01cb\u01c8\u0001\u0000\u0000\u0000\u01cb\u01cc\u0001\u0000"+ + "\u0000\u0000\u01cc/\u0001\u0000\u0000\u0000\u01cd\u01ce\u0006\u0018\uffff"+ + "\uffff\u0000\u01ce\u01cf\u00032\u0019\u0000\u01cf\u01d0\u0006\u0018\uffff"+ + "\uffff\u0000\u01d0\u01d8\u0001\u0000\u0000\u0000\u01d1\u01d2\n\u0002\u0000"+ + "\u0000\u01d2\u01d3\u0005%\u0000\u0000\u01d3\u01d4\u00032\u0019\u0000\u01d4"+ + "\u01d5\u0006\u0018\uffff\uffff\u0000\u01d5\u01d7\u0001\u0000\u0000\u0000"+ + "\u01d6\u01d1\u0001\u0000\u0000\u0000\u01d7\u01da\u0001\u0000\u0000\u0000"+ + "\u01d8\u01d6\u0001\u0000\u0000\u0000\u01d8\u01d9\u0001\u0000\u0000\u0000"+ + "\u01d91\u0001\u0000\u0000\u0000\u01da\u01d8\u0001\u0000\u0000\u0000\u01db"+ + "\u01dc\u00034\u001a\u0000\u01dc\u01e1\u0006\u0019\uffff\uffff\u0000\u01dd"+ + "\u01de\u0005\u0018\u0000\u0000\u01de\u01e2\u0006\u0019\uffff\uffff\u0000"+ + "\u01df\u01e0\u0005\u0019\u0000\u0000\u01e0\u01e2\u0006\u0019\uffff\uffff"+ + "\u0000\u01e1\u01dd\u0001\u0000\u0000\u0000\u01e1\u01df\u0001\u0000\u0000"+ + "\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3\u01e4\u00034\u001a\u0000"+ + "\u01e4\u01e5\u0006\u0019\uffff\uffff\u0000\u01e5\u01ea\u0001\u0000\u0000"+ + "\u0000\u01e6\u01e7\u00034\u001a\u0000\u01e7\u01e8\u0006\u0019\uffff\uffff"+ + "\u0000\u01e8\u01ea\u0001\u0000\u0000\u0000\u01e9\u01db\u0001\u0000\u0000"+ + "\u0000\u01e9\u01e6\u0001\u0000\u0000\u0000\u01ea3\u0001\u0000\u0000\u0000"+ + "\u01eb\u01ec\u0006\u001a\uffff\uffff\u0000\u01ec\u01ed\u00036\u001b\u0000"+ + "\u01ed\u01ee\u0006\u001a\uffff\uffff\u0000\u01ee\u0200\u0001\u0000\u0000"+ + "\u0000\u01ef\u01f0\n\u0002\u0000\u0000\u01f0\u01f9\u0006\u001a\uffff\uffff"+ + "\u0000\u01f1\u01f2\u0005\u001c\u0000\u0000\u01f2\u01fa\u0006\u001a\uffff"+ + "\uffff\u0000\u01f3\u01f4\u0005\u001d\u0000\u0000\u01f4\u01fa\u0006\u001a"+ + "\uffff\uffff\u0000\u01f5\u01f6\u0005\u001a\u0000\u0000\u01f6\u01fa\u0006"+ + "\u001a\uffff\uffff\u0000\u01f7\u01f8\u0005\u001b\u0000\u0000\u01f8\u01fa"+ + "\u0006\u001a\uffff\uffff\u0000\u01f9\u01f1\u0001\u0000\u0000\u0000\u01f9"+ + "\u01f3\u0001\u0000\u0000\u0000\u01f9\u01f5\u0001\u0000\u0000\u0000\u01f9"+ + "\u01f7\u0001\u0000\u0000\u0000\u01fa\u01fb\u0001\u0000\u0000\u0000\u01fb"+ + "\u01fc\u00036\u001b\u0000\u01fc\u01fd\u0006\u001a\uffff\uffff\u0000\u01fd"+ + "\u01ff\u0001\u0000\u0000\u0000\u01fe\u01ef\u0001\u0000\u0000\u0000\u01ff"+ + "\u0202\u0001\u0000\u0000\u0000\u0200\u01fe\u0001\u0000\u0000\u0000\u0200"+ + "\u0201\u0001\u0000\u0000\u0000\u02015\u0001\u0000\u0000\u0000\u0202\u0200"+ + "\u0001\u0000\u0000\u0000\u0203\u0204\u0006\u001b\uffff\uffff\u0000\u0204"+ + "\u0205\u00038\u001c\u0000\u0205\u0206\u0006\u001b\uffff\uffff\u0000\u0206"+ + "\u0214\u0001\u0000\u0000\u0000\u0207\u0208\n\u0002\u0000\u0000\u0208\u020d"+ + "\u0006\u001b\uffff\uffff\u0000\u0209\u020a\u0005\u0014\u0000\u0000\u020a"+ + "\u020e\u0006\u001b\uffff\uffff\u0000\u020b\u020c\u0005\u0015\u0000\u0000"+ + "\u020c\u020e\u0006\u001b\uffff\uffff\u0000\u020d\u0209\u0001\u0000\u0000"+ + "\u0000\u020d\u020b\u0001\u0000\u0000\u0000\u020e\u020f\u0001\u0000\u0000"+ + "\u0000\u020f\u0210\u00038\u001c\u0000\u0210\u0211\u0006\u001b\uffff\uffff"+ + "\u0000\u0211\u0213\u0001\u0000\u0000\u0000\u0212\u0207\u0001\u0000\u0000"+ + "\u0000\u0213\u0216\u0001\u0000\u0000\u0000\u0214\u0212\u0001\u0000\u0000"+ + "\u0000\u0214\u0215\u0001\u0000\u0000\u0000\u02157\u0001\u0000\u0000\u0000"+ + "\u0216\u0214\u0001\u0000\u0000\u0000\u0217\u0218\u0006\u001c\uffff\uffff"+ + "\u0000\u0218\u0219\u0003:\u001d\u0000\u0219\u021a\u0006\u001c\uffff\uffff"+ + "\u0000\u021a\u0228\u0001\u0000\u0000\u0000\u021b\u021c\n\u0002\u0000\u0000"+ + "\u021c\u0221\u0006\u001c\uffff\uffff\u0000\u021d\u021e\u0005\u0016\u0000"+ + "\u0000\u021e\u0222\u0006\u001c\uffff\uffff\u0000\u021f\u0220\u0005\u0017"+ + "\u0000\u0000\u0220\u0222\u0006\u001c\uffff\uffff\u0000\u0221\u021d\u0001"+ + "\u0000\u0000\u0000\u0221\u021f\u0001\u0000\u0000\u0000\u0222\u0223\u0001"+ + "\u0000\u0000\u0000\u0223\u0224\u0003:\u001d\u0000\u0224\u0225\u0006\u001c"+ + "\uffff\uffff\u0000\u0225\u0227\u0001\u0000\u0000\u0000\u0226\u021b\u0001"+ + "\u0000\u0000\u0000\u0227\u022a\u0001\u0000\u0000\u0000\u0228\u0226\u0001"+ + "\u0000\u0000\u0000\u0228\u0229\u0001\u0000\u0000\u0000\u02299\u0001\u0000"+ + "\u0000\u0000\u022a\u0228\u0001\u0000\u0000\u0000\u022b\u0234\u0006\u001d"+ + "\uffff\uffff\u0000\u022c\u022d\u0005 \u0000\u0000\u022d\u0235\u0006\u001d"+ + "\uffff\uffff\u0000\u022e\u022f\u0005\u0015\u0000\u0000\u022f\u0235\u0006"+ + "\u001d\uffff\uffff\u0000\u0230\u0231\u0005!\u0000\u0000\u0231\u0235\u0006"+ + "\u001d\uffff\uffff\u0000\u0232\u0233\u0005\"\u0000\u0000\u0233\u0235\u0006"+ + "\u001d\uffff\uffff\u0000\u0234\u022c\u0001\u0000\u0000\u0000\u0234\u022e"+ + "\u0001\u0000\u0000\u0000\u0234\u0230\u0001\u0000\u0000\u0000\u0234\u0232"+ + "\u0001\u0000\u0000\u0000\u0235\u0236\u0001\u0000\u0000\u0000\u0236\u0237"+ + "\u0003<\u001e\u0000\u0237\u0238\u0006\u001d\uffff\uffff\u0000\u0238\u023d"+ + "\u0001\u0000\u0000\u0000\u0239\u023a\u0003<\u001e\u0000\u023a\u023b\u0006"+ + "\u001d\uffff\uffff\u0000\u023b\u023d\u0001\u0000\u0000\u0000\u023c\u022b"+ + "\u0001\u0000\u0000\u0000\u023c\u0239\u0001\u0000\u0000\u0000\u023d;\u0001"+ + "\u0000\u0000\u0000\u023e\u023f\u0006\u001e\uffff\uffff\u0000\u023f\u0247"+ + "\u0003>\u001f\u0000\u0240\u0241\u00051\u0000\u0000\u0241\u0242\u0003\n"+ + "\u0005\u0000\u0242\u0243\u0006\u001e\uffff\uffff\u0000\u0243\u0244\u0005"+ + "2\u0000\u0000\u0244\u0246\u0001\u0000\u0000\u0000\u0245\u0240\u0001\u0000"+ + "\u0000\u0000\u0246\u0249\u0001\u0000\u0000\u0000\u0247\u0245\u0001\u0000"+ + "\u0000\u0000\u0247\u0248\u0001\u0000\u0000\u0000\u0248\u024f\u0001\u0000"+ + "\u0000\u0000\u0249\u0247\u0001\u0000\u0000\u0000\u024a\u024b\u0003*\u0015"+ + "\u0000\u024b\u024c\u0006\u001e\uffff\uffff\u0000\u024c\u024e\u0001\u0000"+ + "\u0000\u0000\u024d\u024a\u0001\u0000\u0000\u0000\u024e\u0251\u0001\u0000"+ + "\u0000\u0000\u024f\u024d\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000"+ + "\u0000\u0000\u0250\u0252\u0001\u0000\u0000\u0000\u0251\u024f\u0001\u0000"+ + "\u0000\u0000\u0252\u0253\u0006\u001e\uffff\uffff\u0000\u0253=\u0001\u0000"+ + "\u0000\u0000\u0254\u0255\u0003B!\u0000\u0255\u0256\u0006\u001f\uffff\uffff"+ + "\u0000\u0256\u0273\u0001\u0000\u0000\u0000\u0257\u0258\u0005>\u0000\u0000"+ + "\u0258\u0273\u0006\u001f\uffff\uffff\u0000\u0259\u025a\u0003@ \u0000\u025a"+ + "\u025b\u0006\u001f\uffff\uffff\u0000\u025b\u0273\u0001\u0000\u0000\u0000"+ + "\u025c\u025d\u0003$\u0012\u0000\u025d\u025e\u0006\u001f\uffff\uffff\u0000"+ + "\u025e\u0273\u0001\u0000\u0000\u0000\u025f\u0260\u0003&\u0013\u0000\u0260"+ + "\u0261\u0006\u001f\uffff\uffff\u0000\u0261\u0273\u0001\u0000\u0000\u0000"+ + "\u0262\u0263\u0003\"\u0011\u0000\u0263\u0264\u0006\u001f\uffff\uffff\u0000"+ + "\u0264\u0273\u0001\u0000\u0000\u0000\u0265\u0266\u0003 \u0010\u0000\u0266"+ + "\u0267\u0006\u001f\uffff\uffff\u0000\u0267\u0273\u0001\u0000\u0000\u0000"+ + "\u0268\u0269\u0003\u0014\n\u0000\u0269\u026a\u0006\u001f\uffff\uffff\u0000"+ + "\u026a\u0273\u0001\u0000\u0000\u0000\u026b\u026f\u00051\u0000\u0000\u026c"+ + "\u026d\u00030\u0018\u0000\u026d\u026e\u0006\u001f\uffff\uffff\u0000\u026e"+ + "\u0270\u0001\u0000\u0000\u0000\u026f\u026c\u0001\u0000\u0000\u0000\u026f"+ + "\u0270\u0001\u0000\u0000\u0000\u0270\u0271\u0001\u0000\u0000\u0000\u0271"+ + "\u0273\u00052\u0000\u0000\u0272\u0254\u0001\u0000\u0000\u0000\u0272\u0257"+ + "\u0001\u0000\u0000\u0000\u0272\u0259\u0001\u0000\u0000\u0000\u0272\u025c"+ + "\u0001\u0000\u0000\u0000\u0272\u025f\u0001\u0000\u0000\u0000\u0272\u0262"+ + "\u0001\u0000\u0000\u0000\u0272\u0265\u0001\u0000\u0000\u0000\u0272\u0268"+ + "\u0001\u0000\u0000\u0000\u0272\u026b\u0001\u0000\u0000\u0000\u0273?\u0001"+ + "\u0000\u0000\u0000\u0274\u0275\u0005*\u0000\u0000\u0275\u0276\u0003\u0004"+ + "\u0002\u0000\u0276\u0277\u00055\u0000\u0000\u0277\u0278\u0003.\u0017\u0000"+ + "\u0278\u0279\u00056\u0000\u0000\u0279\u027a\u0003\n\u0005\u0000\u027a"+ + "\u027b\u0006 \uffff\uffff\u0000\u027bA\u0001\u0000\u0000\u0000\u027c\u027d"+ + "\u0003F#\u0000\u027d\u027e\u0006!\uffff\uffff\u0000\u027e\u028c\u0001"+ + "\u0000\u0000\u0000\u027f\u0280\u0005?\u0000\u0000\u0280\u028c\u0006!\uffff"+ + "\uffff\u0000\u0281\u0282\u0005<\u0000\u0000\u0282\u028c\u0006!\uffff\uffff"+ + "\u0000\u0283\u0284\u0005=\u0000\u0000\u0284\u028c\u0006!\uffff\uffff\u0000"+ + "\u0285\u0286\u0003D\"\u0000\u0286\u0287\u0006!\uffff\uffff\u0000\u0287"+ + "\u028c\u0001\u0000\u0000\u0000\u0288\u0289\u0003H$\u0000\u0289\u028a\u0006"+ + "!\uffff\uffff\u0000\u028a\u028c\u0001\u0000\u0000\u0000\u028b\u027c\u0001"+ + "\u0000\u0000\u0000\u028b\u027f\u0001\u0000\u0000\u0000\u028b\u0281\u0001"+ + "\u0000\u0000\u0000\u028b\u0283\u0001\u0000\u0000\u0000\u028b\u0285\u0001"+ + "\u0000\u0000\u0000\u028b\u0288\u0001\u0000\u0000\u0000\u028cC\u0001\u0000"+ + "\u0000\u0000\u028d\u028e\u00053\u0000\u0000\u028e\u028f\u0003\n\u0005"+ + "\u0000\u028f\u0290\u00054\u0000\u0000\u0290\u0291\u0006\"\uffff\uffff"+ + "\u0000\u0291E\u0001\u0000\u0000\u0000\u0292\u0293\u0005&\u0000\u0000\u0293"+ + "\u0297\u0006#\uffff\uffff\u0000\u0294\u0295\u0005\'\u0000\u0000\u0295"+ + "\u0297\u0006#\uffff\uffff\u0000\u0296\u0292\u0001\u0000\u0000\u0000\u0296"+ + "\u0294\u0001\u0000\u0000\u0000\u0297G\u0001\u0000\u0000\u0000\u0298\u0299"+ + "\u0005\u000b\u0000\u0000\u0299\u029a\u00051\u0000\u0000\u029a\u029b\u0005"+ + ":\u0000\u0000\u029b\u029c\u0005>\u0000\u0000\u029c\u029d\u00052\u0000"+ + "\u0000\u029d\u029e\u0006$\uffff\uffff\u0000\u029eI\u0001\u0000\u0000\u0000"+ + "/QSm\u0080\u0085\u0087\u009c\u00b4\u00b7\u00be\u00ce\u00dd\u00e4\u00f0"+ + "\u00f5\u00f9\u00fe\u0126\u012e\u0131\u0133\u0139\u0155\u015c\u016e\u018d"+ + "\u019b\u01bd\u01c5\u01cb\u01d8\u01e1\u01e9\u01f9\u0200\u020d\u0214\u0221"+ + "\u0228\u0234\u023c\u0247\u024f\u026f\u0272\u028b\u0296"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class b/Phase2Template/out/production/Phase2Template/main/FunctionCraft.class index f6af24225d45dad80a8c264941bcf64259796ded..38a91aca9a0b22746e30fb27874f7b985cb046f9 100644 GIT binary patch delta 1213 zcmY+CTTGl)5XXOqy`0^%Uk#;&@`)7?%B|83F{ue{Oi-!RQbc+|q-tqdaO>`Zutlus zda2i{y&SDt>%CaDR!hO9En16@zBWEJ#+dkEVxmtb#zb*G7BRle%$Yg!pa1#KIa+dR zrTO;n3m1VVzL_vT`ZAiE6$N{GMtY+0f#`;KBGx$+PsfHr+^SeQ+>;zk#D=2-d(#aK zYto}>BaIsz0^Fu3tZAL^OZ24rqg&EL@l^l1+U=T+ie>)-wo5jhLo~Fo$!l$u`a)~G za3GqiN~d8xZ4P(PZh!YxMLO7`+3K*3?Y7Ea9qQmNhc526+x%r}haK^k8$&nuI^4%j z`-6XVX$!j?c6-$Hpf@*>3KOGG)9-LUaeKmlL-+x9X%fP~&ia@6G%4F2XedbHGbE|= z%#gz{X=?*D!6YLN582s3anZvL`*=j*ACB*fDSS1x8#RyG-vZTb8i|mMd{%~r9sWOqR2Mo73C{T^XTr_ zU^+gK8rFPdFNZd()3!WZQvA6m$r*Yq<8RFAQ0xHRl}8b7As8 zxKgQ$_Kc}hm+Tc&zvFT8R%n?_B{m!A^rm7$3JVx8Otp5_@j zg?X0e1Vozi+VM#hwbb@T+A=dVbrsw)O>?83p{2{!)7;(|a)VRUXW85scEjhnQ}G7X zUeu|$M0cZcL$1kkPnMpu^e%*ZPR@NdL$Yg{0k6#sWEt#q!&x2_JH=iP&bVd~PNGhg zna7I=UgST#TE${RDpSGBRLb*Kahxi~spd2_Oj65b>iC}3{LJH{ delta 998 zcmZ9J+iz4=6vlshX3p$0XHL_ml z<5^Z}R=GS!zu9CxX7{n$Wev}pR;x9>mUWu-E*scrE?Sidh0f;Enfz!*F*DIKlH8nZ zA5CUb?JM&VPAzEe*91&aiWRGlZ?2$%p;1@VL$6< zhW*UY*3MjREEn|fic5wuMPwqq%~ymI&E1-DMV%SfbtMkjfHX^sX4BNks1q`O+WmT` z#we-}AF7UOjwvclN2sz);dE{p^0WE$SY|?V(j1K~d*Xxt$?qE+@rUvYn!8Ia&N}pQ z&gG*(fKK`Oo^-}9;}b=F!nEp|8Il#{Gl$PPuld5|OTL=waT=7mXvX6$>asZ#Z(Exu zBzr+nVG$MFEVp*CO03m#4K;c1`BlN-87kN!=>C_$R<_A4#%sJTBvP#YCX6GoKTMRD{xAe`oudu?iiwqQb;r!j(H%YF!#!!&#Sw)5iJYB>W zyh=JCu|4}fiFnf_v4A9YpJe*W(V(gzWuqHUQ*o25Fy{h>fO%pdXe&(6RzEWZE73ea z84u#gsb>~#%w`@Bv5+cynIo&NmUe5T(OPy<$9~B&G%!UYw`k%!=JFE>exaG)X}ve5 zLYBA`#(9G`u_ZN5LA;nG*}TPeL75ag*eO=?D{l+65*a_Un|EZQ9zU{&y&|=q?|GN^ zh={NoBBxOnHjhd6iIAvN4RU~k!f{BL9>u!LYHXe2u;z%SL{l#PX^v`|G+po)^>?Vz yB;_W41IMKc5!}?nK_=ZcO!TT3pfyu4_ diff --git a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 index c57c189..16f3f45 100644 --- a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 @@ -151,8 +151,7 @@ returnStatement returns [ReturnStatement returnStmtRet]: } r = RETURN (e = expression{ $returnStmtRet.setReturnExp($e.expRet); - $returnStmtRet.setLine($r.line); - })? SEMICOLLON; + })? {$returnStmtRet.setLine($r.line);} SEMICOLLON; ifStatement returns[IfStatement ifRet]: { @@ -162,12 +161,13 @@ ifStatement returns[IfStatement ifRet]: { $ifRet.setLine($i.line); } - c1 = condition {$ifRet.addCondition($c1.conditionRet);} + (c1 = condition {$ifRet.addCondition($c1.conditionRet);} | LPAR c2 = condition RPAR {$ifRet.addCondition($c2.conditionRet);}) + b = body {$ifRet.setThenBody($b.bodyRet);} { ArrayList tempArray = new ArrayList(); } - (ELSEIF c2 = condition + (ELSEIF LPAR c2 = condition RPAR { $ifRet.addCondition($c2.conditionRet); } @@ -242,7 +242,7 @@ loopBody returns [ArrayList loopStmts, ArrayList loopExps | NEXT (IF c2 = condition{$loopExps.addAll($c2.conditionRet);})? SEMICOLLON )* ( - r = returnStatement {$loopRetStmt = $r.returnStmtRet;} + r = returnStatement {$loopRetStmt = $r.returnStmtRet;$loopRetStmt.setLine($r.returnStmtRet.getLine());} )?; forStatement returns [ForStatement forStRet]: @@ -313,6 +313,7 @@ matchPatternStatement returns [MatchPatternStatement matchPatRet]: id = IDENTIFIER DOT m = MATCH LPAR e = expression RPAR { Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); $matchPatRet = new MatchPatternStatement(id_, $e.expRet); $matchPatRet.setLine($m.line); } diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class index fe026d89cc462dddebb5a4bce47bcb81aea73e13..d0320d2e7a7ec9b7a9857de959f883bdb0cee306 100644 GIT binary patch delta 2537 zcmZWqdvui55&zBI{q_|C2@sME36g9Q1S+Rs9*uDrV@Uar>)oMp8wExu-dXt_?HM26Ya2A2w`jdrzZ2o|c% zx_R>3)~$kMy?=7D#jd`qo2FcL24G+)ppx~p2j7!DIxcm*)a$&|iWs-y9umaNnp21k zf$4oPyy1O=K7AzhjYyv~$V%kED%SyV;bGm8wpz;d?X-!$V)3C=8c-(9sE}67mNrz$ z9#qRA)W|W+kyDr}XYp;hhEX=ufCtVR*mq7-c?!x}6huEz$f$0lq< z!2IsT7VJX@4q>Z)Yw9ymI~dRth`^JGLMLLdldQY?1Kw20e2S{4F&4W?z6a&#!DIM7 zeAthrc$UQbuno^)2M%!4K^!IJ3H$*4IE)~A`)^LGliZ`Ec%H1sa6ewaWd76eBC=_i z$Ga-TDSQiO7;g}MoMi^*82L+dcAicyko0Ae{YdZ4d@cMkGyO3V@Dn8ARlPjR@BBH> z;TMej4gG%Bx#Tyge~bEGQU7bqz}v{hZ%}~Wq7J{qGW;GZa7Di|W2f;htKgb0pIPPn z6Vdw^jt}(lnMKB5xcV#Q(K zg0~pNZ64ns6CFUT0AoauDGE7aLB3eASPV3X4J*ZtPH|wjIMKsKIUr#;%Hn)MhW1aK zl`2z*vxi0?LZVo?F^G{-q;r!l7UN_z@+1z$63<>5gGRXzt7I(JNCMVLqTZX+AD+UJ z8i%2BKcZ#4o|9W-JiwZsWae}!H_e#B)r00LGS5FggT5Z3FE4#%($_Tl%A&6s^fi<9 zosA5c1+V1jBY7K*0`4s|_vYl!jV$J>1W8hg2~x&RDc3LNuXI*XT8-f>*W*0Jtb#OS z9wqb5U7ZEP1Kk`i>=+qs$+Toy(ybGNvakp36Rc+tLA+!_5Z7u#;1bHcMrhO+L6n7R zfdz8#5;D9tw=F33LA(+af7U&WabCOI{t_k%YcxKDCJQd%yw~A&1f}UU*gBN-4F>)g zAGav84-T)*nr`jGkb6EY=>~C2kVN!wmnbfTOron^dxs%zyBS~K;CoTlXYkD^Bkmxa zQAYe>B>gXD+XN1v3$l7H1#1`{%FfE#(AeaIbBwQ+5#jroGAjXv0WEkv$yFwPg7b7!N z3Mxy@V8%+^Y9{BOVusNwo5;dEN2-T0f*sb49cmV3h6-mWr3fEHB^-8y@hC*tRONPL z*zpZu>@BE424nlG613>Og`rmE7~t@x;VmRa=z&N6oV}g?c3`YL!GeDhsnW@!--)U6 zJw8&q_&9a(LFz`EXawXbY?i07Uv{IH&%+Vfi(}HG6N?HhIVxBCi=GYNhtaYh3Gy6U zWX zNuu=Y8zs?}B2}z6m5i4lS8+CobV;|Ck_0&yQiqkPa!5qBbg2p*SvplJ^|exu_Ln9T zrIdN}SravudAiF&qH`1#nn=n$`U}}3L|09jCQ2#~*}Y5DV4~y-j}Ds1Pc&$vvqS|I zwCk?)=&lgZg+%XEBu7;8dJGQ02$(_DGN_T-QyDV3N|O~PN}BD_XH3*UbjL(NqWsw* zyFsE|CMu}%=s%dKizu-wq^RMgib7k!xwFYfQmOsOW-Z2litE&RvAs@6kPtNC4Re%F}acD03i7j+$K Jo7xWde*uBwRy_a! delta 2426 zcmZXV3viUx8HV5Q?Ebsi%{^n9Y)FJ8BuJ2U0tqQQxtjZsDs zfl38aJctcaB@h}BEnr|3a5O3x$Bx!kYiCM3gWs59|32q@|9Q`M zzH`p|A3GxF4~z57TPI%zkfVNl)VVoP4<)V{i<_40%<2?aBwqZ~I)SrbZCi8a@>Oka zw$}?B6-zohTRP0<27wX@wyBLy)vNmK$`gPl)vq5-e%Jb-AVI&JoM5r5&3ebIR~>6$ zAP7(~x?%PO8Pw@1)1^tbrpym{9#O6UFVaV0xC2KgR_b?Beigb%TI4?D!75h)u^~r4 zo7yE6dg`1ROUk4L<+1{mvJzF&js-G^YT1n%*^gRz26b{6_2R`sIe`Xw361g!ek8A9 zv0TKx)LSB-qe*U}St%@44z#EMw5nh%Q(;)HCSip>HmA@tQ$E2lI3*8>@~QkA{;~*x z@|k>z013n*`CR@B2d<$*Zm`b}SJ5jsp*k|Kn8KXglR8|-LD1lAx5t1$^3m_<%S zC(^MFCFn*ux=?}jSVmrfUjF*|>%#-^;Ahx`pW{L7!+^dqcX#+hOlT`Y@G!#h2qLkK zs)J*P+$oZw8QO^{c#Pt^P|2Z-u^TNMejlEo@E&ZzlN|gMwqq|2Vi-p#JBI!6Vq`2j zy;<^~ro=(2K7+e(2+90U#dFBPVHEJiVjRUh?pZmGqm6^s;ss{?A|A&H3ZJClDU9GH zeLCZ8;5b+MDq`^(rs8$|cxId99P97~Gk;SDWxbg2Hsil${2j)BgDm_O`FIyacn{6^ z9hT#L+>hVu%URov^E?HA)V;!BqA78iPh<(uHH0~sR76NN&tpjE6`DF)hk zF$TqsUE+r!abT}FaZm#AtOSnL=BCKpP~M*~gvcETmk2~kIHDwyaxP4hC=|#flu9%z zBnGSGPOOv3=$0wiD6#r<-dJD)k5nRpWEvvmE3ib{-yY&Do8P8EfDT4*PJbcPU1h9z@`SDJ>fKFN9?IA zUi_)n2ji%8TYdgw^`hb=4*^fb@Ho=khRg8E3NK#qN?Yb_#x%FhWjlcxf+58CC|NL$ zlWx1q?v>SNVH;2~I`QY2XwT9NpIsTF2)I3=Wsa5H>7@$gzgCI%k*RXtZ5yzP%Vs7w zI&mS~8a)h0xHV=3Q@_d8NTTDMlCFAobTchfydWFA$o4I!=i9=bA-KM+d|URfa)gEv z$8+C<1GI6vCvS8#E47$reJ}TD3H_#t`_xQtT1qc!<-ROKF5R|OmZOcnx?1i>C%tvO zw9(Vr(Jvj?DxKISYjH@{;g{0o!Exc$l5U)q4R}j>@OSAItMrM#cqB;rC zK-^Vc=={+2U9$<3G|TX6V*9e7e6 z#R1WHT6VHDkLjM0V#_@$SD!1{6F7uP{1n8>6Fk^^bbD#6B~Rt+ou!RG*vol_xdr=q zRer&%GQz7eYE~?XH36c(Sv6g|Ko#oAWsP!3kC#PQid3=QRW@Dsl*Q?bWpVO6dt-G% zd7K>c#r?}vIZKrzJ5+@}T6Kr+D^Cciq@qCw34s}yZwAhNH&A5;LMjrZQje6!>w1%} zlJ=Q2ry^coHpxRusr0?~2C3Ji(8_py)})1`;Q7Ajeo~!DS4hJqrOuDnmrUv-&93sj zcaF5tq>!q3ea57EQqTflbRVhKq|2neCZ#Nh*Z(r9mo%%|_ug4jk4eGR@%pq$b)>)= zUv!vMW6~wkQzp%>iPs;Pw2_ot>wE7EX@f~YwekA(+Jut-*N@wFiN#cEm1;NtSE~;G fNAcYC@I0+CpKHx$m-*~g4>0azY?B<j2U1u1G;b diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp index cc411c8..5fcebc2 100644 --- a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 661, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 209, 8, 7, 10, 7, 12, 7, 212, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 218, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 230, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 235, 8, 8, 5, 8, 237, 8, 8, 10, 8, 12, 8, 240, 9, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 284, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 292, 8, 13, 1, 13, 5, 13, 295, 8, 13, 10, 13, 12, 13, 298, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 329, 8, 15, 10, 15, 12, 15, 332, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 338, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 354, 8, 16, 10, 16, 12, 16, 357, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 401, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 435, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 441, 8, 23, 10, 23, 12, 23, 444, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 449, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 460, 8, 24, 10, 24, 12, 24, 463, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 471, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 479, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 495, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 500, 8, 26, 10, 26, 12, 26, 503, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 515, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 520, 8, 27, 10, 27, 12, 27, 523, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 535, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 540, 8, 28, 10, 28, 12, 28, 543, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 554, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 562, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 571, 8, 30, 10, 30, 12, 30, 574, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 579, 8, 30, 10, 30, 12, 30, 582, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 613, 8, 31, 1, 31, 3, 31, 616, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 641, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 652, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 695, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 194, 1, 0, 0, 0, 16, 222, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, 253, 1, 0, 0, 0, 22, 259, 1, 0, 0, 0, 24, 268, 1, 0, 0, 0, 26, 274, 1, 0, 0, 0, 28, 304, 1, 0, 0, 0, 30, 337, 1, 0, 0, 0, 32, 339, 1, 0, 0, 0, 34, 361, 1, 0, 0, 0, 36, 369, 1, 0, 0, 0, 38, 375, 1, 0, 0, 0, 40, 381, 1, 0, 0, 0, 42, 406, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 436, 1, 0, 0, 0, 48, 450, 1, 0, 0, 0, 50, 478, 1, 0, 0, 0, 52, 480, 1, 0, 0, 0, 54, 504, 1, 0, 0, 0, 56, 524, 1, 0, 0, 0, 58, 561, 1, 0, 0, 0, 60, 563, 1, 0, 0, 0, 62, 615, 1, 0, 0, 0, 64, 617, 1, 0, 0, 0, 66, 640, 1, 0, 0, 0, 68, 642, 1, 0, 0, 0, 70, 651, 1, 0, 0, 0, 72, 653, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 5, 59, 0, 0, 193, 13, 1, 0, 0, 0, 194, 195, 6, 7, -1, 0, 195, 196, 5, 8, 0, 0, 196, 197, 6, 7, -1, 0, 197, 198, 3, 16, 8, 0, 198, 199, 6, 7, -1, 0, 199, 200, 3, 46, 23, 0, 200, 201, 6, 7, -1, 0, 201, 210, 6, 7, -1, 0, 202, 203, 5, 10, 0, 0, 203, 204, 3, 16, 8, 0, 204, 205, 6, 7, -1, 0, 205, 206, 3, 46, 23, 0, 206, 207, 6, 7, -1, 0, 207, 209, 1, 0, 0, 0, 208, 202, 1, 0, 0, 0, 209, 212, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 217, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 213, 214, 5, 9, 0, 0, 214, 215, 3, 46, 23, 0, 215, 216, 6, 7, -1, 0, 216, 218, 1, 0, 0, 0, 217, 213, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 1, 0, 0, 0, 219, 220, 6, 7, -1, 0, 220, 221, 5, 2, 0, 0, 221, 15, 1, 0, 0, 0, 222, 243, 6, 8, -1, 0, 223, 224, 5, 49, 0, 0, 224, 225, 3, 48, 24, 0, 225, 226, 6, 8, -1, 0, 226, 238, 5, 50, 0, 0, 227, 229, 7, 0, 0, 0, 228, 230, 5, 49, 0, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 3, 16, 8, 0, 232, 234, 6, 8, -1, 0, 233, 235, 5, 50, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, 0, 236, 227, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 223, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 5, 4, 0, 0, 247, 248, 5, 49, 0, 0, 248, 249, 3, 48, 24, 0, 249, 250, 6, 9, -1, 0, 250, 251, 5, 50, 0, 0, 251, 252, 5, 59, 0, 0, 252, 19, 1, 0, 0, 0, 253, 254, 5, 6, 0, 0, 254, 255, 5, 49, 0, 0, 255, 256, 3, 48, 24, 0, 256, 257, 6, 10, -1, 0, 257, 258, 5, 50, 0, 0, 258, 21, 1, 0, 0, 0, 259, 260, 5, 5, 0, 0, 260, 261, 5, 49, 0, 0, 261, 262, 3, 48, 24, 0, 262, 263, 5, 55, 0, 0, 263, 264, 3, 48, 24, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 267, 6, 11, -1, 0, 267, 23, 1, 0, 0, 0, 268, 269, 5, 14, 0, 0, 269, 270, 5, 17, 0, 0, 270, 271, 3, 26, 13, 0, 271, 272, 6, 12, -1, 0, 272, 273, 5, 2, 0, 0, 273, 25, 1, 0, 0, 0, 274, 296, 6, 13, -1, 0, 275, 276, 3, 44, 22, 0, 276, 277, 6, 13, -1, 0, 277, 295, 1, 0, 0, 0, 278, 283, 5, 40, 0, 0, 279, 280, 5, 8, 0, 0, 280, 281, 3, 16, 8, 0, 281, 282, 6, 13, -1, 0, 282, 284, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 295, 5, 59, 0, 0, 286, 291, 5, 41, 0, 0, 287, 288, 5, 8, 0, 0, 288, 289, 3, 16, 8, 0, 289, 290, 6, 13, -1, 0, 290, 292, 1, 0, 0, 0, 291, 287, 1, 0, 0, 0, 291, 292, 1, 0, 0, 0, 292, 293, 1, 0, 0, 0, 293, 295, 5, 59, 0, 0, 294, 275, 1, 0, 0, 0, 294, 278, 1, 0, 0, 0, 294, 286, 1, 0, 0, 0, 295, 298, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 302, 1, 0, 0, 0, 298, 296, 1, 0, 0, 0, 299, 300, 3, 12, 6, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 299, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 27, 1, 0, 0, 0, 304, 305, 5, 15, 0, 0, 305, 306, 5, 62, 0, 0, 306, 307, 5, 16, 0, 0, 307, 308, 3, 30, 15, 0, 308, 309, 3, 26, 13, 0, 309, 310, 5, 2, 0, 0, 310, 311, 6, 14, -1, 0, 311, 29, 1, 0, 0, 0, 312, 313, 6, 15, -1, 0, 313, 314, 5, 49, 0, 0, 314, 315, 3, 48, 24, 0, 315, 316, 6, 15, -1, 0, 316, 317, 5, 57, 0, 0, 317, 318, 3, 48, 24, 0, 318, 319, 6, 15, -1, 0, 319, 320, 5, 50, 0, 0, 320, 338, 1, 0, 0, 0, 321, 322, 5, 51, 0, 0, 322, 323, 3, 48, 24, 0, 323, 330, 6, 15, -1, 0, 324, 325, 5, 55, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 329, 1, 0, 0, 0, 328, 324, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 328, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 333, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 338, 1, 0, 0, 0, 335, 336, 5, 62, 0, 0, 336, 338, 6, 15, -1, 0, 337, 312, 1, 0, 0, 0, 337, 321, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 31, 1, 0, 0, 0, 339, 340, 6, 16, -1, 0, 340, 341, 5, 51, 0, 0, 341, 342, 3, 48, 24, 0, 342, 343, 5, 36, 0, 0, 343, 344, 5, 62, 0, 0, 344, 345, 5, 42, 0, 0, 345, 346, 3, 30, 15, 0, 346, 347, 5, 55, 0, 0, 347, 348, 3, 48, 24, 0, 348, 355, 6, 16, -1, 0, 349, 350, 5, 55, 0, 0, 350, 351, 3, 48, 24, 0, 351, 352, 6, 16, -1, 0, 352, 354, 1, 0, 0, 0, 353, 349, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 355, 356, 1, 0, 0, 0, 356, 358, 1, 0, 0, 0, 357, 355, 1, 0, 0, 0, 358, 359, 6, 16, -1, 0, 359, 360, 5, 52, 0, 0, 360, 33, 1, 0, 0, 0, 361, 362, 5, 62, 0, 0, 362, 363, 5, 56, 0, 0, 363, 364, 5, 13, 0, 0, 364, 365, 5, 49, 0, 0, 365, 366, 3, 48, 24, 0, 366, 367, 5, 50, 0, 0, 367, 368, 6, 17, -1, 0, 368, 35, 1, 0, 0, 0, 369, 370, 5, 18, 0, 0, 370, 371, 5, 49, 0, 0, 371, 372, 3, 48, 24, 0, 372, 373, 5, 50, 0, 0, 373, 374, 6, 18, -1, 0, 374, 37, 1, 0, 0, 0, 375, 376, 5, 19, 0, 0, 376, 377, 5, 49, 0, 0, 377, 378, 3, 48, 24, 0, 378, 379, 5, 50, 0, 0, 379, 380, 6, 19, -1, 0, 380, 39, 1, 0, 0, 0, 381, 382, 6, 20, -1, 0, 382, 386, 5, 62, 0, 0, 383, 384, 3, 42, 21, 0, 384, 385, 6, 20, -1, 0, 385, 387, 1, 0, 0, 0, 386, 383, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 400, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 401, 6, 20, -1, 0, 390, 391, 5, 43, 0, 0, 391, 401, 6, 20, -1, 0, 392, 393, 5, 44, 0, 0, 393, 401, 6, 20, -1, 0, 394, 395, 5, 46, 0, 0, 395, 401, 6, 20, -1, 0, 396, 397, 5, 45, 0, 0, 397, 401, 6, 20, -1, 0, 398, 399, 5, 47, 0, 0, 399, 401, 6, 20, -1, 0, 400, 388, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 392, 1, 0, 0, 0, 400, 394, 1, 0, 0, 0, 400, 396, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 403, 3, 48, 24, 0, 403, 404, 5, 59, 0, 0, 404, 405, 6, 20, -1, 0, 405, 41, 1, 0, 0, 0, 406, 407, 5, 51, 0, 0, 407, 408, 3, 48, 24, 0, 408, 409, 6, 21, -1, 0, 409, 410, 5, 52, 0, 0, 410, 43, 1, 0, 0, 0, 411, 412, 3, 14, 7, 0, 412, 413, 6, 22, -1, 0, 413, 435, 1, 0, 0, 0, 414, 415, 3, 24, 12, 0, 415, 416, 6, 22, -1, 0, 416, 435, 1, 0, 0, 0, 417, 418, 3, 28, 14, 0, 418, 419, 6, 22, -1, 0, 419, 435, 1, 0, 0, 0, 420, 421, 3, 18, 9, 0, 421, 422, 6, 22, -1, 0, 422, 435, 1, 0, 0, 0, 423, 424, 3, 22, 11, 0, 424, 425, 6, 22, -1, 0, 425, 435, 1, 0, 0, 0, 426, 427, 3, 48, 24, 0, 427, 428, 6, 22, -1, 0, 428, 429, 6, 22, -1, 0, 429, 430, 5, 59, 0, 0, 430, 435, 1, 0, 0, 0, 431, 432, 3, 40, 20, 0, 432, 433, 6, 22, -1, 0, 433, 435, 1, 0, 0, 0, 434, 411, 1, 0, 0, 0, 434, 414, 1, 0, 0, 0, 434, 417, 1, 0, 0, 0, 434, 420, 1, 0, 0, 0, 434, 423, 1, 0, 0, 0, 434, 426, 1, 0, 0, 0, 434, 431, 1, 0, 0, 0, 435, 45, 1, 0, 0, 0, 436, 442, 6, 23, -1, 0, 437, 438, 3, 44, 22, 0, 438, 439, 6, 23, -1, 0, 439, 441, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 441, 444, 1, 0, 0, 0, 442, 440, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 448, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 445, 446, 3, 12, 6, 0, 446, 447, 6, 23, -1, 0, 447, 449, 1, 0, 0, 0, 448, 445, 1, 0, 0, 0, 448, 449, 1, 0, 0, 0, 449, 47, 1, 0, 0, 0, 450, 451, 6, 24, -1, 0, 451, 452, 3, 50, 25, 0, 452, 453, 6, 24, -1, 0, 453, 461, 1, 0, 0, 0, 454, 455, 10, 2, 0, 0, 455, 456, 5, 37, 0, 0, 456, 457, 3, 50, 25, 0, 457, 458, 6, 24, -1, 0, 458, 460, 1, 0, 0, 0, 459, 454, 1, 0, 0, 0, 460, 463, 1, 0, 0, 0, 461, 459, 1, 0, 0, 0, 461, 462, 1, 0, 0, 0, 462, 49, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 464, 465, 3, 52, 26, 0, 465, 470, 6, 25, -1, 0, 466, 467, 5, 24, 0, 0, 467, 471, 6, 25, -1, 0, 468, 469, 5, 25, 0, 0, 469, 471, 6, 25, -1, 0, 470, 466, 1, 0, 0, 0, 470, 468, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 473, 3, 52, 26, 0, 473, 474, 6, 25, -1, 0, 474, 479, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 477, 6, 25, -1, 0, 477, 479, 1, 0, 0, 0, 478, 464, 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 479, 51, 1, 0, 0, 0, 480, 481, 6, 26, -1, 0, 481, 482, 3, 54, 27, 0, 482, 483, 6, 26, -1, 0, 483, 501, 1, 0, 0, 0, 484, 485, 10, 2, 0, 0, 485, 494, 6, 26, -1, 0, 486, 487, 5, 28, 0, 0, 487, 495, 6, 26, -1, 0, 488, 489, 5, 29, 0, 0, 489, 495, 6, 26, -1, 0, 490, 491, 5, 26, 0, 0, 491, 495, 6, 26, -1, 0, 492, 493, 5, 27, 0, 0, 493, 495, 6, 26, -1, 0, 494, 486, 1, 0, 0, 0, 494, 488, 1, 0, 0, 0, 494, 490, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 497, 3, 54, 27, 0, 497, 498, 6, 26, -1, 0, 498, 500, 1, 0, 0, 0, 499, 484, 1, 0, 0, 0, 500, 503, 1, 0, 0, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 53, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 505, 6, 27, -1, 0, 505, 506, 3, 56, 28, 0, 506, 507, 6, 27, -1, 0, 507, 521, 1, 0, 0, 0, 508, 509, 10, 2, 0, 0, 509, 514, 6, 27, -1, 0, 510, 511, 5, 20, 0, 0, 511, 515, 6, 27, -1, 0, 512, 513, 5, 21, 0, 0, 513, 515, 6, 27, -1, 0, 514, 510, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 520, 1, 0, 0, 0, 519, 508, 1, 0, 0, 0, 520, 523, 1, 0, 0, 0, 521, 519, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 55, 1, 0, 0, 0, 523, 521, 1, 0, 0, 0, 524, 525, 6, 28, -1, 0, 525, 526, 3, 58, 29, 0, 526, 527, 6, 28, -1, 0, 527, 541, 1, 0, 0, 0, 528, 529, 10, 2, 0, 0, 529, 534, 6, 28, -1, 0, 530, 531, 5, 22, 0, 0, 531, 535, 6, 28, -1, 0, 532, 533, 5, 23, 0, 0, 533, 535, 6, 28, -1, 0, 534, 530, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 540, 1, 0, 0, 0, 539, 528, 1, 0, 0, 0, 540, 543, 1, 0, 0, 0, 541, 539, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 57, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 544, 553, 6, 29, -1, 0, 545, 546, 5, 32, 0, 0, 546, 554, 6, 29, -1, 0, 547, 548, 5, 21, 0, 0, 548, 554, 6, 29, -1, 0, 549, 550, 5, 33, 0, 0, 550, 554, 6, 29, -1, 0, 551, 552, 5, 34, 0, 0, 552, 554, 6, 29, -1, 0, 553, 545, 1, 0, 0, 0, 553, 547, 1, 0, 0, 0, 553, 549, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 3, 60, 30, 0, 556, 557, 6, 29, -1, 0, 557, 562, 1, 0, 0, 0, 558, 559, 3, 60, 30, 0, 559, 560, 6, 29, -1, 0, 560, 562, 1, 0, 0, 0, 561, 544, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 562, 59, 1, 0, 0, 0, 563, 564, 6, 30, -1, 0, 564, 572, 3, 62, 31, 0, 565, 566, 5, 49, 0, 0, 566, 567, 3, 10, 5, 0, 567, 568, 6, 30, -1, 0, 568, 569, 5, 50, 0, 0, 569, 571, 1, 0, 0, 0, 570, 565, 1, 0, 0, 0, 571, 574, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 580, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 575, 576, 3, 42, 21, 0, 576, 577, 6, 30, -1, 0, 577, 579, 1, 0, 0, 0, 578, 575, 1, 0, 0, 0, 579, 582, 1, 0, 0, 0, 580, 578, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 583, 584, 6, 30, -1, 0, 584, 61, 1, 0, 0, 0, 585, 586, 3, 66, 33, 0, 586, 587, 6, 31, -1, 0, 587, 616, 1, 0, 0, 0, 588, 589, 5, 62, 0, 0, 589, 616, 6, 31, -1, 0, 590, 591, 3, 64, 32, 0, 591, 592, 6, 31, -1, 0, 592, 616, 1, 0, 0, 0, 593, 594, 3, 36, 18, 0, 594, 595, 6, 31, -1, 0, 595, 616, 1, 0, 0, 0, 596, 597, 3, 38, 19, 0, 597, 598, 6, 31, -1, 0, 598, 616, 1, 0, 0, 0, 599, 600, 3, 34, 17, 0, 600, 601, 6, 31, -1, 0, 601, 616, 1, 0, 0, 0, 602, 603, 3, 32, 16, 0, 603, 604, 6, 31, -1, 0, 604, 616, 1, 0, 0, 0, 605, 606, 3, 20, 10, 0, 606, 607, 6, 31, -1, 0, 607, 616, 1, 0, 0, 0, 608, 612, 5, 49, 0, 0, 609, 610, 3, 48, 24, 0, 610, 611, 6, 31, -1, 0, 611, 613, 1, 0, 0, 0, 612, 609, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 5, 50, 0, 0, 615, 585, 1, 0, 0, 0, 615, 588, 1, 0, 0, 0, 615, 590, 1, 0, 0, 0, 615, 593, 1, 0, 0, 0, 615, 596, 1, 0, 0, 0, 615, 599, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 615, 608, 1, 0, 0, 0, 616, 63, 1, 0, 0, 0, 617, 618, 5, 42, 0, 0, 618, 619, 3, 4, 2, 0, 619, 620, 5, 53, 0, 0, 620, 621, 3, 46, 23, 0, 621, 622, 5, 54, 0, 0, 622, 623, 3, 10, 5, 0, 623, 624, 6, 32, -1, 0, 624, 65, 1, 0, 0, 0, 625, 626, 3, 70, 35, 0, 626, 627, 6, 33, -1, 0, 627, 641, 1, 0, 0, 0, 628, 629, 5, 63, 0, 0, 629, 641, 6, 33, -1, 0, 630, 631, 5, 60, 0, 0, 631, 641, 6, 33, -1, 0, 632, 633, 5, 61, 0, 0, 633, 641, 6, 33, -1, 0, 634, 635, 3, 68, 34, 0, 635, 636, 6, 33, -1, 0, 636, 641, 1, 0, 0, 0, 637, 638, 3, 72, 36, 0, 638, 639, 6, 33, -1, 0, 639, 641, 1, 0, 0, 0, 640, 625, 1, 0, 0, 0, 640, 628, 1, 0, 0, 0, 640, 630, 1, 0, 0, 0, 640, 632, 1, 0, 0, 0, 640, 634, 1, 0, 0, 0, 640, 637, 1, 0, 0, 0, 641, 67, 1, 0, 0, 0, 642, 643, 5, 51, 0, 0, 643, 644, 3, 10, 5, 0, 644, 645, 5, 52, 0, 0, 645, 646, 6, 34, -1, 0, 646, 69, 1, 0, 0, 0, 647, 648, 5, 38, 0, 0, 648, 652, 6, 35, -1, 0, 649, 650, 5, 39, 0, 0, 650, 652, 6, 35, -1, 0, 651, 647, 1, 0, 0, 0, 651, 649, 1, 0, 0, 0, 652, 71, 1, 0, 0, 0, 653, 654, 5, 11, 0, 0, 654, 655, 5, 49, 0, 0, 655, 656, 5, 58, 0, 0, 656, 657, 5, 62, 0, 0, 657, 658, 5, 50, 0, 0, 658, 659, 6, 36, -1, 0, 659, 73, 1, 0, 0, 0, 46, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 210, 217, 229, 234, 238, 243, 283, 291, 294, 296, 302, 330, 337, 355, 386, 400, 434, 442, 448, 461, 470, 478, 494, 501, 514, 521, 534, 541, 553, 561, 572, 580, 612, 615, 640, 651] \ No newline at end of file +[4, 1, 65, 672, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 220, 8, 7, 10, 7, 12, 7, 223, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 229, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 241, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 5, 8, 248, 8, 8, 10, 8, 12, 8, 251, 9, 8, 5, 8, 253, 8, 8, 10, 8, 12, 8, 256, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 295, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 13, 5, 13, 306, 8, 13, 10, 13, 12, 13, 309, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 340, 8, 15, 10, 15, 12, 15, 343, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 349, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 365, 8, 16, 10, 16, 12, 16, 368, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 398, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 412, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 446, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 452, 8, 23, 10, 23, 12, 23, 455, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 471, 8, 24, 10, 24, 12, 24, 474, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 506, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 511, 8, 26, 10, 26, 12, 26, 514, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 526, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 531, 8, 27, 10, 27, 12, 27, 534, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 546, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 551, 8, 28, 10, 28, 12, 28, 554, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 565, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 573, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 582, 8, 30, 10, 30, 12, 30, 585, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 590, 8, 30, 10, 30, 12, 30, 593, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 624, 8, 31, 1, 31, 3, 31, 627, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 652, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 663, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 707, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 233, 1, 0, 0, 0, 18, 257, 1, 0, 0, 0, 20, 264, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 279, 1, 0, 0, 0, 26, 285, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 348, 1, 0, 0, 0, 32, 350, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 380, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 392, 1, 0, 0, 0, 42, 417, 1, 0, 0, 0, 44, 445, 1, 0, 0, 0, 46, 447, 1, 0, 0, 0, 48, 461, 1, 0, 0, 0, 50, 489, 1, 0, 0, 0, 52, 491, 1, 0, 0, 0, 54, 515, 1, 0, 0, 0, 56, 535, 1, 0, 0, 0, 58, 572, 1, 0, 0, 0, 60, 574, 1, 0, 0, 0, 62, 626, 1, 0, 0, 0, 64, 628, 1, 0, 0, 0, 66, 651, 1, 0, 0, 0, 68, 653, 1, 0, 0, 0, 70, 662, 1, 0, 0, 0, 72, 664, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 46, 23, 0, 209, 210, 6, 7, -1, 0, 210, 221, 6, 7, -1, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 49, 0, 0, 213, 214, 3, 16, 8, 0, 214, 215, 5, 50, 0, 0, 215, 216, 6, 7, -1, 0, 216, 217, 3, 46, 23, 0, 217, 218, 6, 7, -1, 0, 218, 220, 1, 0, 0, 0, 219, 211, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 228, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 5, 9, 0, 0, 225, 226, 3, 46, 23, 0, 226, 227, 6, 7, -1, 0, 227, 229, 1, 0, 0, 0, 228, 224, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 7, -1, 0, 231, 232, 5, 2, 0, 0, 232, 15, 1, 0, 0, 0, 233, 254, 6, 8, -1, 0, 234, 235, 5, 49, 0, 0, 235, 236, 3, 48, 24, 0, 236, 237, 6, 8, -1, 0, 237, 249, 5, 50, 0, 0, 238, 240, 7, 0, 0, 0, 239, 241, 5, 49, 0, 0, 240, 239, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 3, 16, 8, 0, 243, 245, 6, 8, -1, 0, 244, 246, 5, 50, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 238, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 234, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 17, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 4, 0, 0, 258, 259, 5, 49, 0, 0, 259, 260, 3, 48, 24, 0, 260, 261, 6, 9, -1, 0, 261, 262, 5, 50, 0, 0, 262, 263, 5, 59, 0, 0, 263, 19, 1, 0, 0, 0, 264, 265, 5, 6, 0, 0, 265, 266, 5, 49, 0, 0, 266, 267, 3, 48, 24, 0, 267, 268, 6, 10, -1, 0, 268, 269, 5, 50, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 5, 0, 0, 271, 272, 5, 49, 0, 0, 272, 273, 3, 48, 24, 0, 273, 274, 5, 55, 0, 0, 274, 275, 3, 48, 24, 0, 275, 276, 5, 50, 0, 0, 276, 277, 5, 59, 0, 0, 277, 278, 6, 11, -1, 0, 278, 23, 1, 0, 0, 0, 279, 280, 5, 14, 0, 0, 280, 281, 5, 17, 0, 0, 281, 282, 3, 26, 13, 0, 282, 283, 6, 12, -1, 0, 283, 284, 5, 2, 0, 0, 284, 25, 1, 0, 0, 0, 285, 307, 6, 13, -1, 0, 286, 287, 3, 44, 22, 0, 287, 288, 6, 13, -1, 0, 288, 306, 1, 0, 0, 0, 289, 294, 5, 40, 0, 0, 290, 291, 5, 8, 0, 0, 291, 292, 3, 16, 8, 0, 292, 293, 6, 13, -1, 0, 293, 295, 1, 0, 0, 0, 294, 290, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 306, 5, 59, 0, 0, 297, 302, 5, 41, 0, 0, 298, 299, 5, 8, 0, 0, 299, 300, 3, 16, 8, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 298, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 5, 59, 0, 0, 305, 286, 1, 0, 0, 0, 305, 289, 1, 0, 0, 0, 305, 297, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 313, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 311, 3, 12, 6, 0, 311, 312, 6, 13, -1, 0, 312, 314, 1, 0, 0, 0, 313, 310, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 15, 0, 0, 316, 317, 5, 62, 0, 0, 317, 318, 5, 16, 0, 0, 318, 319, 3, 30, 15, 0, 319, 320, 3, 26, 13, 0, 320, 321, 5, 2, 0, 0, 321, 322, 6, 14, -1, 0, 322, 29, 1, 0, 0, 0, 323, 324, 6, 15, -1, 0, 324, 325, 5, 49, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 57, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 50, 0, 0, 331, 349, 1, 0, 0, 0, 332, 333, 5, 51, 0, 0, 333, 334, 3, 48, 24, 0, 334, 341, 6, 15, -1, 0, 335, 336, 5, 55, 0, 0, 336, 337, 3, 48, 24, 0, 337, 338, 6, 15, -1, 0, 338, 340, 1, 0, 0, 0, 339, 335, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 345, 5, 52, 0, 0, 345, 349, 1, 0, 0, 0, 346, 347, 5, 62, 0, 0, 347, 349, 6, 15, -1, 0, 348, 323, 1, 0, 0, 0, 348, 332, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 31, 1, 0, 0, 0, 350, 351, 6, 16, -1, 0, 351, 352, 5, 51, 0, 0, 352, 353, 3, 48, 24, 0, 353, 354, 5, 36, 0, 0, 354, 355, 5, 62, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 30, 15, 0, 357, 358, 5, 55, 0, 0, 358, 359, 3, 48, 24, 0, 359, 366, 6, 16, -1, 0, 360, 361, 5, 55, 0, 0, 361, 362, 3, 48, 24, 0, 362, 363, 6, 16, -1, 0, 363, 365, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 370, 6, 16, -1, 0, 370, 371, 5, 52, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 5, 62, 0, 0, 373, 374, 5, 56, 0, 0, 374, 375, 5, 13, 0, 0, 375, 376, 5, 49, 0, 0, 376, 377, 3, 48, 24, 0, 377, 378, 5, 50, 0, 0, 378, 379, 6, 17, -1, 0, 379, 35, 1, 0, 0, 0, 380, 381, 5, 18, 0, 0, 381, 382, 5, 49, 0, 0, 382, 383, 3, 48, 24, 0, 383, 384, 5, 50, 0, 0, 384, 385, 6, 18, -1, 0, 385, 37, 1, 0, 0, 0, 386, 387, 5, 19, 0, 0, 387, 388, 5, 49, 0, 0, 388, 389, 3, 48, 24, 0, 389, 390, 5, 50, 0, 0, 390, 391, 6, 19, -1, 0, 391, 39, 1, 0, 0, 0, 392, 393, 6, 20, -1, 0, 393, 397, 5, 62, 0, 0, 394, 395, 3, 42, 21, 0, 395, 396, 6, 20, -1, 0, 396, 398, 1, 0, 0, 0, 397, 394, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 411, 1, 0, 0, 0, 399, 400, 5, 48, 0, 0, 400, 412, 6, 20, -1, 0, 401, 402, 5, 43, 0, 0, 402, 412, 6, 20, -1, 0, 403, 404, 5, 44, 0, 0, 404, 412, 6, 20, -1, 0, 405, 406, 5, 46, 0, 0, 406, 412, 6, 20, -1, 0, 407, 408, 5, 45, 0, 0, 408, 412, 6, 20, -1, 0, 409, 410, 5, 47, 0, 0, 410, 412, 6, 20, -1, 0, 411, 399, 1, 0, 0, 0, 411, 401, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 411, 405, 1, 0, 0, 0, 411, 407, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 3, 48, 24, 0, 414, 415, 5, 59, 0, 0, 415, 416, 6, 20, -1, 0, 416, 41, 1, 0, 0, 0, 417, 418, 5, 51, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 6, 21, -1, 0, 420, 421, 5, 52, 0, 0, 421, 43, 1, 0, 0, 0, 422, 423, 3, 14, 7, 0, 423, 424, 6, 22, -1, 0, 424, 446, 1, 0, 0, 0, 425, 426, 3, 24, 12, 0, 426, 427, 6, 22, -1, 0, 427, 446, 1, 0, 0, 0, 428, 429, 3, 28, 14, 0, 429, 430, 6, 22, -1, 0, 430, 446, 1, 0, 0, 0, 431, 432, 3, 18, 9, 0, 432, 433, 6, 22, -1, 0, 433, 446, 1, 0, 0, 0, 434, 435, 3, 22, 11, 0, 435, 436, 6, 22, -1, 0, 436, 446, 1, 0, 0, 0, 437, 438, 3, 48, 24, 0, 438, 439, 6, 22, -1, 0, 439, 440, 6, 22, -1, 0, 440, 441, 5, 59, 0, 0, 441, 446, 1, 0, 0, 0, 442, 443, 3, 40, 20, 0, 443, 444, 6, 22, -1, 0, 444, 446, 1, 0, 0, 0, 445, 422, 1, 0, 0, 0, 445, 425, 1, 0, 0, 0, 445, 428, 1, 0, 0, 0, 445, 431, 1, 0, 0, 0, 445, 434, 1, 0, 0, 0, 445, 437, 1, 0, 0, 0, 445, 442, 1, 0, 0, 0, 446, 45, 1, 0, 0, 0, 447, 453, 6, 23, -1, 0, 448, 449, 3, 44, 22, 0, 449, 450, 6, 23, -1, 0, 450, 452, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 459, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 3, 12, 6, 0, 457, 458, 6, 23, -1, 0, 458, 460, 1, 0, 0, 0, 459, 456, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 47, 1, 0, 0, 0, 461, 462, 6, 24, -1, 0, 462, 463, 3, 50, 25, 0, 463, 464, 6, 24, -1, 0, 464, 472, 1, 0, 0, 0, 465, 466, 10, 2, 0, 0, 466, 467, 5, 37, 0, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 471, 1, 0, 0, 0, 470, 465, 1, 0, 0, 0, 471, 474, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 481, 6, 25, -1, 0, 477, 478, 5, 24, 0, 0, 478, 482, 6, 25, -1, 0, 479, 480, 5, 25, 0, 0, 480, 482, 6, 25, -1, 0, 481, 477, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 3, 52, 26, 0, 484, 485, 6, 25, -1, 0, 485, 490, 1, 0, 0, 0, 486, 487, 3, 52, 26, 0, 487, 488, 6, 25, -1, 0, 488, 490, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 486, 1, 0, 0, 0, 490, 51, 1, 0, 0, 0, 491, 492, 6, 26, -1, 0, 492, 493, 3, 54, 27, 0, 493, 494, 6, 26, -1, 0, 494, 512, 1, 0, 0, 0, 495, 496, 10, 2, 0, 0, 496, 505, 6, 26, -1, 0, 497, 498, 5, 28, 0, 0, 498, 506, 6, 26, -1, 0, 499, 500, 5, 29, 0, 0, 500, 506, 6, 26, -1, 0, 501, 502, 5, 26, 0, 0, 502, 506, 6, 26, -1, 0, 503, 504, 5, 27, 0, 0, 504, 506, 6, 26, -1, 0, 505, 497, 1, 0, 0, 0, 505, 499, 1, 0, 0, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 54, 27, 0, 508, 509, 6, 26, -1, 0, 509, 511, 1, 0, 0, 0, 510, 495, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 53, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 6, 27, -1, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 532, 1, 0, 0, 0, 519, 520, 10, 2, 0, 0, 520, 525, 6, 27, -1, 0, 521, 522, 5, 20, 0, 0, 522, 526, 6, 27, -1, 0, 523, 524, 5, 21, 0, 0, 524, 526, 6, 27, -1, 0, 525, 521, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 3, 56, 28, 0, 528, 529, 6, 27, -1, 0, 529, 531, 1, 0, 0, 0, 530, 519, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 55, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 6, 28, -1, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 552, 1, 0, 0, 0, 539, 540, 10, 2, 0, 0, 540, 545, 6, 28, -1, 0, 541, 542, 5, 22, 0, 0, 542, 546, 6, 28, -1, 0, 543, 544, 5, 23, 0, 0, 544, 546, 6, 28, -1, 0, 545, 541, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 3, 58, 29, 0, 548, 549, 6, 28, -1, 0, 549, 551, 1, 0, 0, 0, 550, 539, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 57, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 564, 6, 29, -1, 0, 556, 557, 5, 32, 0, 0, 557, 565, 6, 29, -1, 0, 558, 559, 5, 21, 0, 0, 559, 565, 6, 29, -1, 0, 560, 561, 5, 33, 0, 0, 561, 565, 6, 29, -1, 0, 562, 563, 5, 34, 0, 0, 563, 565, 6, 29, -1, 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 560, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 3, 60, 30, 0, 567, 568, 6, 29, -1, 0, 568, 573, 1, 0, 0, 0, 569, 570, 3, 60, 30, 0, 570, 571, 6, 29, -1, 0, 571, 573, 1, 0, 0, 0, 572, 555, 1, 0, 0, 0, 572, 569, 1, 0, 0, 0, 573, 59, 1, 0, 0, 0, 574, 575, 6, 30, -1, 0, 575, 583, 3, 62, 31, 0, 576, 577, 5, 49, 0, 0, 577, 578, 3, 10, 5, 0, 578, 579, 6, 30, -1, 0, 579, 580, 5, 50, 0, 0, 580, 582, 1, 0, 0, 0, 581, 576, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 591, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 3, 42, 21, 0, 587, 588, 6, 30, -1, 0, 588, 590, 1, 0, 0, 0, 589, 586, 1, 0, 0, 0, 590, 593, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 594, 595, 6, 30, -1, 0, 595, 61, 1, 0, 0, 0, 596, 597, 3, 66, 33, 0, 597, 598, 6, 31, -1, 0, 598, 627, 1, 0, 0, 0, 599, 600, 5, 62, 0, 0, 600, 627, 6, 31, -1, 0, 601, 602, 3, 64, 32, 0, 602, 603, 6, 31, -1, 0, 603, 627, 1, 0, 0, 0, 604, 605, 3, 36, 18, 0, 605, 606, 6, 31, -1, 0, 606, 627, 1, 0, 0, 0, 607, 608, 3, 38, 19, 0, 608, 609, 6, 31, -1, 0, 609, 627, 1, 0, 0, 0, 610, 611, 3, 34, 17, 0, 611, 612, 6, 31, -1, 0, 612, 627, 1, 0, 0, 0, 613, 614, 3, 32, 16, 0, 614, 615, 6, 31, -1, 0, 615, 627, 1, 0, 0, 0, 616, 617, 3, 20, 10, 0, 617, 618, 6, 31, -1, 0, 618, 627, 1, 0, 0, 0, 619, 623, 5, 49, 0, 0, 620, 621, 3, 48, 24, 0, 621, 622, 6, 31, -1, 0, 622, 624, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 5, 50, 0, 0, 626, 596, 1, 0, 0, 0, 626, 599, 1, 0, 0, 0, 626, 601, 1, 0, 0, 0, 626, 604, 1, 0, 0, 0, 626, 607, 1, 0, 0, 0, 626, 610, 1, 0, 0, 0, 626, 613, 1, 0, 0, 0, 626, 616, 1, 0, 0, 0, 626, 619, 1, 0, 0, 0, 627, 63, 1, 0, 0, 0, 628, 629, 5, 42, 0, 0, 629, 630, 3, 4, 2, 0, 630, 631, 5, 53, 0, 0, 631, 632, 3, 46, 23, 0, 632, 633, 5, 54, 0, 0, 633, 634, 3, 10, 5, 0, 634, 635, 6, 32, -1, 0, 635, 65, 1, 0, 0, 0, 636, 637, 3, 70, 35, 0, 637, 638, 6, 33, -1, 0, 638, 652, 1, 0, 0, 0, 639, 640, 5, 63, 0, 0, 640, 652, 6, 33, -1, 0, 641, 642, 5, 60, 0, 0, 642, 652, 6, 33, -1, 0, 643, 644, 5, 61, 0, 0, 644, 652, 6, 33, -1, 0, 645, 646, 3, 68, 34, 0, 646, 647, 6, 33, -1, 0, 647, 652, 1, 0, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 6, 33, -1, 0, 650, 652, 1, 0, 0, 0, 651, 636, 1, 0, 0, 0, 651, 639, 1, 0, 0, 0, 651, 641, 1, 0, 0, 0, 651, 643, 1, 0, 0, 0, 651, 645, 1, 0, 0, 0, 651, 648, 1, 0, 0, 0, 652, 67, 1, 0, 0, 0, 653, 654, 5, 51, 0, 0, 654, 655, 3, 10, 5, 0, 655, 656, 5, 52, 0, 0, 656, 657, 6, 34, -1, 0, 657, 69, 1, 0, 0, 0, 658, 659, 5, 38, 0, 0, 659, 663, 6, 35, -1, 0, 660, 661, 5, 39, 0, 0, 661, 663, 6, 35, -1, 0, 662, 658, 1, 0, 0, 0, 662, 660, 1, 0, 0, 0, 663, 71, 1, 0, 0, 0, 664, 665, 5, 11, 0, 0, 665, 666, 5, 49, 0, 0, 666, 667, 5, 58, 0, 0, 667, 668, 5, 62, 0, 0, 668, 669, 5, 50, 0, 0, 669, 670, 6, 36, -1, 0, 670, 73, 1, 0, 0, 0, 47, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 221, 228, 240, 245, 249, 254, 294, 302, 305, 307, 313, 341, 348, 366, 397, 411, 445, 453, 459, 472, 481, 489, 505, 512, 525, 532, 545, 552, 564, 572, 583, 591, 623, 626, 651, 662] \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class index 2d47b13a0dde827f56dbaf7e363e12ed77667b54..60483e9ce06b4fc26f96db5656ab7f724566dbb0 100644 GIT binary patch delta 127 zcmbO!H&brIYA(j*lh<(BF|M4vkVkSd3%4HQ>dD639*k?j{HZ|x`pHLt{7qoK8jm64 z*2!;p&JLtatE&`>tO~#o+FdZ`7|c~<27MD V4&HJ=vJsgRvLPp9jwrQj*pXjIWqwv85*4c delta 75 zcmew+{7ra6JUipw$qDTCjQb`pV0U6XF!?dN9qVBRHjX2c)j0eZk4`S-@MJx~AjolY evI?ihjefOj*F9fIWqz4${8I1 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class index 77f2af637c65df53654cf7e833937c5380214dfd..e89769ad8b700ab6b34112e7fadf985a3df8bc1a 100644 GIT binary patch delta 81 zcmca1c0+7KBL}1Xf|PFKgP7l7r8xIGZ_RqvL-k1XiRqJF=5RG T^74SZ6xKopA&#QSFL??971|^N delta 121 zcmca5bxUf)4-Q7t$v-*l8O&btBq|Ia-E_+7X z$u&UIZt@-=X+QZ7mlLBSP_-Sa3j-U6>*OYGKSsC77r8xIJsAW!ye2pBXiRqJF=6!u T^8A3j6xKinA&#KQFL??9k82^L diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class index 9fccf650dff288e0cec8edcebb1fbac16142c65f..27c9d5593b0b86db33fa116ae7d5799c795db154 100644 GIT binary patch delta 75 zcmeAa>lE7%%E35$au|mf$GU`pjdST_Lry=&Ws@5?Jy};W2y(8P etk0z}`5UJR>slah9gvs8x{*PMbJOG*T!jFHIu|wo delta 75 zcmeAa>lE7%%E4GYIgG=Lv2OB04j;zG$?rJqSX&s_I9n$ha{4j0O>W@yWbI@S8>b0tFOb&<scvx^lIUD2A$rWt&jK?PLV6$UA!NA6Ma`JCBKgLs&z1Tfj&oT(|otylVU1RbA Yb`#c%K;9)FFNO6ggAm`f$w?fE0C9~Nx&QzG delta 69 zcmX>scvx^lIUD2B$rWt&jLRnPV6$Ug!NA71a`JCBKgLy)z1Tfj*D?t5t(*LlU1RbA Yb`#c(K;9-GFNJk0gAm`g$w?fE07R`9S^xk5 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class index 0cd56a474a1603589458476c93e0b511c4c585ce..da6eac3e04c1192f274ee9d4b99a0690b3f61fe9 100644 GIT binary patch delta 88 zcmZn>Z4uqDhMkE+aPm5KJ0=dH$?rgv@MJv>MZ4uqDhMkH1dvHxWdWdAogkTZsrkwK7y3CPlze2deDm6bt=gKe@jS0(`PTp3XS diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class index 5a2115dcd58be3ad73690a46e4e478f8b8b771db..92bd3482a3ba68c949bae06e176c2296ccaef12c 100644 GIT binary patch delta 81 zcmew<@>68PB6h|rlNYnwGhUti7)V~5tjyuWcw=%JhaKx}1~&FPlUH*1G2Wg0gTs^c k0fQj>!^z7zH74hAny@|r@}2^DDXcFTgxFtB7U0SR0RFxmbN~PV delta 81 zcmew<@>68PB6h|tlNYnwGj5&y7)WlLtjyuWxMOk}haKx~1~&FRlUH*1G47rGgTs^c k0D~a=!O6=xH74hAny?-L@{R&|DXb?LgxF6`7U0SR0Ki@w)Bpeg diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class index a636aea987b01729d33e9d41673b754ecf186d89..b8db7bb05498917251372d125855e49703185585 100644 GIT binary patch delta 177 zcmW;DPYOX%6vy#3Tf8>?&^mtKpB|`RqViyKX%&g?hjK~IT$iNo7p~P{AzfZq! znV0!}uH~Do%V?t~@&Xr_P_x|k)Pjsli{mVYch3jL)P z%ctcsWnBX{xGL!6g2JXyn9)d5A`fkh^RL_UCZKI8`K{0tQJWMcjX)FnT;lt+V& z`6mM#^RLN^d3>3ee^36z%t{7^5aja(XhxOit#sXN;Y^nA46mo`H=kVe&IhKgPt#rd*z^ jDGY*Ksgs{@X-rP`50* delta 81 zcmdlczD<0?Sq?_?$>%t{7_BBta(Xh_Oit#sXSAKXnA48co`H?aVe&IhKSsyNrd*z^ jE)0TPu9Kf|X-r7G8-2&gAfs5a*N0`dpa+u~`_k diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class index a48211cd5e231b7c211a2275dbc51c7fff2bab7e..bc3111cb8594a4d3a87b67ec0710d9d0494b0d27 100644 GIT binary patch delta 134 zcmew>^H*lW4^Ad_xykZ8qLcZ#v>4^VEPpOdMuo|hT<(lYlMixvGOB<@6}Yt+Rl%$T zZcRq@$z9xDj9Qbga(goB07ab`^(H6r*s&Tiu(2CWUdrRgXgv7~k0+}cgCM*4;pn delta 134 zcmew>^H*lW4^Aew|C8l;L?`oeX)!W@S^iv_jEs{jx!f6nXJX-$r{ce$QCjACYQ$K1zaYq(Li1dke9+5&mhE>FxiQ_5CFAj7|#Fz delta 93 zcmdlizFB-j5C@~i$!ftM$YweDCYQ$K1zaYqHb9;&ke9;hz#zotIN6E25CCN!7XAPL diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index aaaeb63b92508fa29cd8347498dd5f28954568e2..e1bb82eaffa8884a16e28a5b35420a4bc823a5f6 100644 GIT binary patch delta 96 zcmX>hd_s7`ZZ;-<*2#O>?3no3CjSLd?2~QTffUE&S`fuKc`v&y8$UM#8$Zt^4qqmI s-pT$P9&G#q41)ZElmBsOOg_qC%*HPQplhZj90aWZ2O#lD@ delta 96 zcmX>hd_s7`ZZ;;qr<3=x*)j1woBS6S6;?}FR<(gZkMfH)c<%^T~!s*smZAqeO z!=h0mLRBNRZ;*8f9LJE4Cw6ey$8c-INQ-zV(?;Yy=Ov7=)tC=?o>t9X=N$WIQDU3p z%n)Se0DID*j68TH$YcWRUM+lJGiP`k8KRrr8$KWA3 zpquEvQYZ$y@ItyY3Gz0)3;H*rvri(3c;P(fJm-1NIq&zrcPH(GU%Pt%M)9y|zopa7 zXfID1vF70$GlB$RutV%Cw|QuoNf#;f@H!2&4(PR}s7M&%oRQ%#%Gb5h8GdDK+g7Po zEm!K5T9qf%DK44~iwXpzSSvSpMLp&t)8Zeh+WKi$wVvqsAGIX)<&8SQ8S5xlt>MgB zIgD@)BO#v0ah(s*Z?&x~CF4OG&PVBM7?Ws<9(skh-OTVLu1Ga1>;>r32b^p?=xw9x zGlG9DYrJFkpP0fW5q2y&K^cWeHfp!g&3jIgKe>s>w6IgS%3s|7MH_WbGX4f-T;4aT|V+`eI5&3@cY>G1JyuG-{cp5DsdCH z#CKaZ>!6sVcS2cCJrl|E|4Z&-k>C3x>syHHFEK9OWcb}QE@DC|AdMvyWmrjaH@vIE nl>csuqaZB}%d&PQ%>X6zno0IYC>X6zno0Dny}sl^6mk7DXb3}gjgO;X64ER0My|eegFUf delta 81 zcmaDS@=j#KbauvdlV`BoGp?U}14wR|EWzQ#xM^}UhaKxy1~!&$ljm{xF>asymcx^E k7lRny~Hz^7aFHDXfPWgjfzwX64ER0GMi_@% diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class index 95b27aea9deaa29947d9810d77e6fba3ce487335..be0d80e574f39c42c63dd1aa4213cfd46dd796df 100644 GIT binary patch delta 75 zcmdldvQK2ga(2e<$t&3H8G9zbV0U8do2<=Y$2yULjc?NAJPtp`$&>eTc(P7o5agRa eIfqkYvN5L#>ntE|HjtOXI*&n!Z~o+~oS6Wf<`+Q# delta 75 zcmdldvQK2ga(2e-$t&3H8FMDTV0U87o2<=Y$6Cn1##b~skHe3#c=BEjPu4O9LB8_I dIh-1kjX6zNtAM;}ATNcrjzNg8e)3h$OaN%66~O=i diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class index fd0002799b52adba7b5271d034b1fb2abf40b5d5..09c9e70d225ca95bfc25af52f5183df0272ee3dd 100644 GIT binary patch delta 171 zcmdm^xJPk=1~=oB$#-}pCp&TLF;1IY$nC*61I)h+2`BG0p>v zZ32od1d4evE}7iVCqLPZSC?`58J-{JFPoIY8b-;;F~gCOhd$+!45CNJbSVVwu$%?I*QSQjw}u`ZtMEKmsmcH1@x diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopDoStatementContext.class index a1f68de1b687632bbb20be38207031dd2a514b99..35a83cd930fc2e0b849374115064ab8a2b77d20e 100644 GIT binary patch delta 81 zcmZn=Z4lkCik&fd@@jTF#*oRc*zFlZCu?yyF@{gh<*;LoVqjy9p1gs>k1=NQe-2O9 jcm_e%gvskTH71vGny@AVc_~0%3Trxp5NpO{ajr}N#GV#C delta 81 zcmZn=Z4lkCik;D9@@jTFM$^f!*zFn3CTnpxF delta 93 zcmaDR_DpO8KL=yMWC0F)#=^+~K(c7^1Rz;F`2vtEnJmER#8@^tnA486l7WrAYVtHr sKgR0GPdPnV>lg&t>nBg)(wH30Wy0D7!w ojnk9$FoPiXk;zNBG$!Y8nXn!Q@=gGGDXga%gt*U4=Ht!;06i2PS^xk5 delta 85 zcmew^_FZhl0uIJ$lNWM0G0p^%qLY7eXfe*7tiox}IA?MSryc7&1~%^blb3V)F)o<= ojnk8LF@qrYlF3WCG$!Y8nXoPg@>T$ODXgm*gt*sC=Ht!;0R5#Kx&QzG diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class index 5ecb577936524a4900eefbd09df533419916a197..bf146d929652e7118321e905efce24193614a85c 100644 GIT binary patch delta 151 zcmbQNI$3qYCSFF<$^ZF8C!gTeVl)v-*H6dob%FkmUqqIWf9| z`QiM!j2>XtEPgFUugORG?HRo%vkEvd`hrDc1vFU$7}$6NCwB|@F$PV(CE&>#${@%a fHn~$!V{(9?32P*f7X{>{u*Nb7@y1R5B)AX&p$aZ% delta 151 zcmbQNI$3qYCSFF-$^ZF8C!gTeViceJnb(O?63qAJ(`A$av-*H6c`)lDkfj7VidM1vFU=7}$6XCwB|@F&a(2CE&?w${@&V fHn~$!V{(9?39BWLX9eV?u-Y;R@!C!PB)AX&`a3J< diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PreUnaryExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PreUnaryExpressionContext.class index 7bc065a178e3870bdb004c8fdc704f418f7086ff..a6866b5bb059cec693ec71f00ff8773b4adeba7a 100644 GIT binary patch delta 87 zcmdldwohz>76+rwWNi+6M!m_|KvIA5Y9MJa`8AL76&8GWNi+6M!w0}K$3s*Y9J{v`8ALfoUF}h$12Rg#v?L0kJFD)bn;$K lPgV&AK_1D;Ib0f(jk!!%Wq>?cATNbgfkB8zaq?BJOaOg(6HovE diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PushStatementContext.class index 792f3180254ba75ec709e2415cc48bc3ff049ef7..135b0486f023b283c7b69971e94ff5946f26c2a9 100644 GIT binary patch delta 109 zcmeB`=#|)z%E83SJvp7jj)|3L@^TQxJNY??;+w3_Y0JdQKRFFV2~J+h>B+<@GWi3i zI~%Jw0~@QvWLqv@CRWMGJzO4atTGIOtg@4>xiuy;ahtFz0C|c)UJ9!UgAl9gkdPsD`8g|Cs$!po|8T%%`1(N-fbvf)9Crr-aaAKS^c|C_6>r@6dmT8keariM# qpX|u#$vTTckY)Dd51bm4w{x1X&I9u119>T|ix`Ah7Eg}k$^-xv4IF6z delta 87 zcmX>kdPsD`8g|CK$!po|8S^K<1(F4mbvf)93n%ArI58GaUe962TE@V}Qa)k6MqHkZvnJPY*)z_b zyobwBqwnhGFDDD;__syo?OFa&sZ~g z50@QdEl|pxv3{~Mw*!>E tEDr{j7F1}@p-bEG6-^-O%CPPm@LC@!fFZRSpj(| PthNk7oOYA<@y`SRg5)Aa delta 131 zcmcbva9v@80}m6&ugMpAMJI>z=rD2o1v6*y=rS^ZS$BafW-v>ESC^3u%u43fV&s_I z$Lqw%1>`$1@`6P*`7~Jt7}z)kCx`R-F$zsy#^=c@${@%oHaV1EW3mjt39BTKCk5oC Pu*xzBamr2J$3GJQ^!Xwq diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class index d827e33e35b614049a91675426221b46556d8a6d..27d9eb463712472e8245a2b5c0ee06fc4e696ac2 100644 GIT binary patch delta 93 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 YR9uhmS!;7a>ws<{9 literal 68960 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 From ec2c130d1731ad1f21b35b4c4f4bde034ae91d79 Mon Sep 17 00:00:00 2001 From: javad Date: Thu, 25 Apr 2024 18:04:47 +0330 Subject: [PATCH 22/23] fixed bugs --- Phase2Template/Phase2/samples/in1.fl | 37 +- .../nodes/expression/LambdaExpression.java | 18 +- .../Phase2/src/main/grammer/FunctionCraft.g4 | 58 +- .../main/visitor/astPrinter/AstPrinter.java | 10 +- .../nameAnalyzer/DependencyDetector.java | 17 +- .../visitor/nameAnalyzer/NameAnalyzer.java | 40 +- .../Phase2/src/parsers/FunctionCraft.interp | 2 +- .../src/parsers/FunctionCraftParser.java | 1401 +++++++++-------- .../nodes/expression/LambdaExpression.class | Bin 2714 -> 2167 bytes .../main/grammer/FunctionCraft.g4 | 58 +- .../main/visitor/astPrinter/AstPrinter.class | Bin 17701 -> 17641 bytes .../nameAnalyzer/DependencyDetector.class | Bin 3614 -> 3692 bytes .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 22580 -> 22597 bytes .../parsers/FunctionCraft.interp | 2 +- ...nCraftParser$AccessExpressionContext.class | Bin 3865 -> 3865 bytes ...unctionCraftParser$AccessListContext.class | Bin 2550 -> 2550 bytes ...raftParser$AdditiveExpressionContext.class | Bin 2904 -> 2904 bytes ...unctionCraftParser$AssignmentContext.class | Bin 3418 -> 3418 bytes .../FunctionCraftParser$BodyContext.class | Bin 2825 -> 2825 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...ionCraftParser$ChompStatementContext.class | Bin 2692 -> 2692 bytes ...tionCraftParser$ChopStatementContext.class | Bin 2681 -> 2681 bytes ...FunctionCraftParser$ConditionContext.class | Bin 3699 -> 3699 bytes ...raftParser$EqaulityExpressionContext.class | Bin 2998 -> 2998 bytes ...unctionCraftParser$ExpressionContext.class | Bin 2712 -> 2712 bytes ...onCraftParser$FilterStatementContext.class | Bin 3709 -> 3709 bytes ...ctionCraftParser$ForStatementContext.class | Bin 2995 -> 2995 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...nctionCraftParser$IfStatementContext.class | Bin 3929 -> 3953 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3336 -> 3027 bytes ...ctionCraftParser$LenStatementContext.class | Bin 2670 -> 2670 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes .../FunctionCraftParser$LoopBodyContext.class | Bin 4284 -> 4284 bytes ...onCraftParser$LoopDoStatementContext.class | Bin 2688 -> 2688 bytes ...tParser$MatchPatternStatementContext.class | Bin 2918 -> 2918 bytes ...rser$MultiplicativeExpressionContext.class | Bin 2935 -> 2935 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes ...raftParser$PreUnaryExpressionContext.class | Bin 2878 -> 2878 bytes ...tionCraftParser$PushStatementContext.class | Bin 3085 -> 3085 bytes ...tionCraftParser$PutsStatementContext.class | Bin 2754 -> 2754 bytes .../FunctionCraftParser$RangeContext.class | Bin 3488 -> 3488 bytes ...ftParser$RelationalExpressionContext.class | Bin 3103 -> 3103 bytes ...onCraftParser$ReturnStatementContext.class | Bin 2641 -> 2641 bytes ...FunctionCraftParser$StatementContext.class | Bin 4183 -> 4183 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 69402 -> 69847 bytes 46 files changed, 893 insertions(+), 750 deletions(-) diff --git a/Phase2Template/Phase2/samples/in1.fl b/Phase2Template/Phase2/samples/in1.fl index 91ec170..53bda76 100644 --- a/Phase2Template/Phase2/samples/in1.fl +++ b/Phase2Template/Phase2/samples/in1.fl @@ -8,18 +8,51 @@ def g() return h(); end +def get_size(i) + return len(g()[i]); +end + + +def getList() + return [[1, 2]]; +end + def h() a = 5; b = 2; if (a>b) return; - elseif((a+b>2) || (a<0)) + elseif (ab) return; else return; end end +def foo() + return ->(arg1, arg2){return arg1+arg2;}(1, 2); +end + def main() - puts("Loop!"); + a = 5; + b = 10; + c = 5; + puts("HELLO" << " " << "WORLD"); + list = [1, 2, 3]; + for num in (1..10) + next if(num/2 == 1); + puts(num); + end + list << a << b << c; + loop do + if (a>b) + break; + elseif ((b==0) && (a>2)) + next; + else + return 0; + end + end + puts(get_size(0)); + ->(arg1, arg2){return arg1+arg2;}(1, 2); end \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java b/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java index ab5669c..ceb9b5a 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/expression/LambdaExpression.java @@ -9,17 +9,17 @@ public class LambdaExpression extends Expression{ ArrayList declarationArgs = new ArrayList<>(); ArrayList body = new ArrayList<>(); - ArrayList args = new ArrayList<>(); +// ArrayList args = new ArrayList<>(); public LambdaExpression(ArrayList declarationArgs, ArrayList body - , ArrayList args){ + ){ this.declarationArgs = declarationArgs; - this.args = args; +// this.args = args; this.body = body; } - public void setArgs(ArrayList args) { - this.args = args; - } +// public void setArgs(ArrayList args) { +// this.args = args; +// } public void setBody(ArrayList body) { this.body = body; @@ -29,9 +29,9 @@ public void setDeclarationArgs(ArrayList declarationArgs) { this.declarationArgs = declarationArgs; } - public ArrayList getArgs() { - return args; - } +// public ArrayList getArgs() { +// return args; +// } public ArrayList getBody() { return body; diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 index 16f3f45..4a0f191 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 @@ -156,6 +156,8 @@ returnStatement returns [ReturnStatement returnStmtRet]: ifStatement returns[IfStatement ifRet]: { $ifRet = new IfStatement(); + ArrayList tempThenStmts = new ArrayList<>(); + ArrayList tempElseStmts = new ArrayList<>(); } i = IF { @@ -163,26 +165,39 @@ ifStatement returns[IfStatement ifRet]: } (c1 = condition {$ifRet.addCondition($c1.conditionRet);} | LPAR c2 = condition RPAR {$ifRet.addCondition($c2.conditionRet);}) - b = body {$ifRet.setThenBody($b.bodyRet);} + b = loopBody { - ArrayList tempArray = new ArrayList(); + tempThenStmts.addAll($b.loopStmts); + $ifRet.addCondition($b.loopExps); + if($b.loopRetStmt != null){ + tempThenStmts.add($b.loopRetStmt); + } } - (ELSEIF LPAR c2 = condition RPAR + (ELSEIF (LPAR c2 = condition RPAR | c2 = condition) { $ifRet.addCondition($c2.conditionRet); } - b1 = body + b1 = loopBody { - tempArray.addAll($b1.bodyRet); + tempElseStmts.addAll($b1.loopStmts); + $ifRet.addCondition($b1.loopExps); + if($b1.loopRetStmt != null){ + tempThenStmts.add($b1.loopRetStmt); + } } )* - (ELSE b2 = body + (ELSE b2 = loopBody { - tempArray.addAll($b2.bodyRet); + tempElseStmts.addAll($b2.loopStmts); + $ifRet.addCondition($b2.loopExps); + if($b2.loopRetStmt != null){ + tempThenStmts.add($b2.loopRetStmt); + } } )? { - $ifRet.setElseBody(tempArray); + $ifRet.setThenBody(tempThenStmts); + $ifRet.setElseBody(tempElseStmts); } END; @@ -270,7 +285,11 @@ range returns [ArrayList rangeRet]: $rangeRet.add($e2.expRet); } RPAR) - | (LBRACK (e3 = expression + | + { + $rangeRet = new ArrayList(); + } + (LBRACK (e3 = expression { $rangeRet.add($e3.expRet); } @@ -279,9 +298,14 @@ range returns [ArrayList rangeRet]: $rangeRet.add($e4.expRet); } )*) RBRACK) - | id = IDENTIFIER + | + { + $rangeRet = new ArrayList(); + } + id = IDENTIFIER { Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); $rangeRet.add(id_); } ; @@ -526,16 +550,24 @@ otherExpression returns [Expression expRet]: +//lambdaFunction returns [Expression lambdaRet]: +// a = ARROW fd = functionArgumentsDeclaration +// LBRACE b = body RBRACE fa = functionArguments +// { +// $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); +// $lambdaRet.setLine($a.line); +// } +// ; + lambdaFunction returns [Expression lambdaRet]: a = ARROW fd = functionArgumentsDeclaration - LBRACE b = body RBRACE fa = functionArguments + LBRACE b = body RBRACE { - $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); + $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet); $lambdaRet.setLine($a.line); } ; - values returns [Value valRet]: b = boolValue {$valRet = $b.boolValRet;} | s = STRING_VALUE {$valRet = new StringValue($s.text); $valRet.setLine($s.line);} diff --git a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java index 6bbf2f7..1a2874a 100644 --- a/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java +++ b/Phase2Template/Phase2/src/main/visitor/astPrinter/AstPrinter.java @@ -125,7 +125,9 @@ public Void visit(LoopDoStatement loopDoStatement){ for(Expression expression : loopDoStatement.getLoopConditions()){ expression.accept(this); } - loopDoStatement.getLoopRetStmt().accept(this); + if(loopDoStatement.getLoopRetStmt() != null) { + loopDoStatement.getLoopRetStmt().accept(this); + } return null; } @Override @@ -234,9 +236,9 @@ public Void visit(LambdaExpression lambdaExpression){ for(Statement statement : lambdaExpression.getBody()){ statement.accept(this); } - for(Expression expression: lambdaExpression.getArgs()){ - expression.accept(this); - } +// for(Expression expression: lambdaExpression.getArgs()){ +// expression.accept(this); +// } return null; } @Override diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java index 2b59c89..a54acc9 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java @@ -5,6 +5,7 @@ import main.ast.nodes.expression.AccessExpression; import main.ast.nodes.expression.Expression; import main.ast.nodes.expression.Identifier; +import main.ast.nodes.expression.LambdaExpression; import main.ast.nodes.statement.ExpressionStatement; import main.ast.nodes.statement.ReturnStatement; import main.ast.nodes.statement.Statement; @@ -35,9 +36,11 @@ public Void visit(FunctionDeclaration functionDeclaration){ if(exp.getExpression() instanceof AccessExpression){ AccessExpression accessExpression = (AccessExpression) exp.getExpression(); if(accessExpression.isFunctionCall()){ - Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); - dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName(), - id_.getName()); + if(!(accessExpression.getAccessedExpression() instanceof LambdaExpression)) { + Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); + dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName(), + id_.getName()); + } } } } @@ -47,9 +50,11 @@ else if(statement instanceof ReturnStatement){ if(returnStatement.getReturnExp() instanceof AccessExpression){ AccessExpression accessExpression = (AccessExpression) returnStatement.getReturnExp(); if(accessExpression.isFunctionCall()){ - Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); - dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName() - , id_.getName()); + if(!(accessExpression.getAccessedExpression() instanceof LambdaExpression)) { + Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); + dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName() + , id_.getName()); + } } } } diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index e8dffec..482dca6 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -29,6 +29,7 @@ public class NameAnalyzer extends Visitor { public ArrayList nameErrors = new ArrayList<>(); boolean isFunctionCallId = false; boolean isPatternMatchId = false; + boolean isLambdaAccess = false; @Override public Void visit(Program program){ SymbolTable.root = new SymbolTable(); @@ -108,7 +109,7 @@ public Void visit(Program program){ } @Override public Void visit(Identifier identifier){ - if(isFunctionCallId){ + if(isFunctionCallId && !isLambdaAccess){ try{ SymbolTable.root.getItem(FunctionItem.START_KEY + identifier.getName()); }catch (ItemNotFound e){ @@ -355,18 +356,20 @@ public Void visit(AccessExpression accessExpression){ if(accessExpression.isFunctionCall()){ isFunctionCallId = true; accessExpression.getAccessedExpression().accept(this); - Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); - try{ - FunctionItem functionItem = (FunctionItem) SymbolTable.root.getItem(FunctionItem.START_KEY + functionName.getName()); - maxArgRequired = functionItem.getFunctionDeclaration().getArgs().size(); - for(VarDeclaration varDeclaration : functionItem.getFunctionDeclaration().getArgs()){ - if(varDeclaration.getDefaultVal() != null){ - minArgRequired += 1; + if(!isLambdaAccess) { + Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); + try { + FunctionItem functionItem = (FunctionItem) SymbolTable.root.getItem(FunctionItem.START_KEY + functionName.getName()); + maxArgRequired = functionItem.getFunctionDeclaration().getArgs().size(); + for (VarDeclaration varDeclaration : functionItem.getFunctionDeclaration().getArgs()) { + if (varDeclaration.getDefaultVal() != null) { + minArgRequired += 1; + } } + minArgRequired = maxArgRequired - minArgRequired; + } catch (ItemNotFound ignored) { + functionNotDeclared = true; } - minArgRequired = maxArgRequired - minArgRequired; - }catch (ItemNotFound ignored){ - functionNotDeclared = true; } } @@ -379,12 +382,15 @@ public Void visit(AccessExpression accessExpression){ expression.accept(this); } if(!functionNotDeclared && ((numberOfProvidedArgs < minArgRequired) || (numberOfProvidedArgs > maxArgRequired))){ - Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); - nameErrors.add(new ArgMisMatch(accessExpression.getLine(), functionName.getName())); + if(!isLambdaAccess) { + Identifier functionName = (Identifier) accessExpression.getAccessedExpression(); + nameErrors.add(new ArgMisMatch(accessExpression.getLine(), functionName.getName())); + } } for(Expression expression : accessExpression.getDimentionalAccess()){ expression.accept(this); } + isLambdaAccess = false; return null; } @Override @@ -399,12 +405,14 @@ public Void visit(LambdaExpression lambdaExpression){ } } SymbolTable.push(currentScopeSymbolTable); + isLambdaAccess = true; for(Statement statement : lambdaExpression.getBody()){ statement.accept(this); } - for(Expression expression : lambdaExpression.getArgs()){ - expression.accept(this); - } + +// for(Expression expression : lambdaExpression.getArgs()){ +// expression.accept(this); +// } SymbolTable.pop(); return null; } diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp index 5fcebc2..c5704fe 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraft.interp +++ b/Phase2Template/Phase2/src/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 672, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 220, 8, 7, 10, 7, 12, 7, 223, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 229, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 241, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 5, 8, 248, 8, 8, 10, 8, 12, 8, 251, 9, 8, 5, 8, 253, 8, 8, 10, 8, 12, 8, 256, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 295, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 13, 5, 13, 306, 8, 13, 10, 13, 12, 13, 309, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 340, 8, 15, 10, 15, 12, 15, 343, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 349, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 365, 8, 16, 10, 16, 12, 16, 368, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 398, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 412, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 446, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 452, 8, 23, 10, 23, 12, 23, 455, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 471, 8, 24, 10, 24, 12, 24, 474, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 506, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 511, 8, 26, 10, 26, 12, 26, 514, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 526, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 531, 8, 27, 10, 27, 12, 27, 534, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 546, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 551, 8, 28, 10, 28, 12, 28, 554, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 565, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 573, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 582, 8, 30, 10, 30, 12, 30, 585, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 590, 8, 30, 10, 30, 12, 30, 593, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 624, 8, 31, 1, 31, 3, 31, 627, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 652, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 663, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 707, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 233, 1, 0, 0, 0, 18, 257, 1, 0, 0, 0, 20, 264, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 279, 1, 0, 0, 0, 26, 285, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 348, 1, 0, 0, 0, 32, 350, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 380, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 392, 1, 0, 0, 0, 42, 417, 1, 0, 0, 0, 44, 445, 1, 0, 0, 0, 46, 447, 1, 0, 0, 0, 48, 461, 1, 0, 0, 0, 50, 489, 1, 0, 0, 0, 52, 491, 1, 0, 0, 0, 54, 515, 1, 0, 0, 0, 56, 535, 1, 0, 0, 0, 58, 572, 1, 0, 0, 0, 60, 574, 1, 0, 0, 0, 62, 626, 1, 0, 0, 0, 64, 628, 1, 0, 0, 0, 66, 651, 1, 0, 0, 0, 68, 653, 1, 0, 0, 0, 70, 662, 1, 0, 0, 0, 72, 664, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 46, 23, 0, 209, 210, 6, 7, -1, 0, 210, 221, 6, 7, -1, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 49, 0, 0, 213, 214, 3, 16, 8, 0, 214, 215, 5, 50, 0, 0, 215, 216, 6, 7, -1, 0, 216, 217, 3, 46, 23, 0, 217, 218, 6, 7, -1, 0, 218, 220, 1, 0, 0, 0, 219, 211, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 228, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 5, 9, 0, 0, 225, 226, 3, 46, 23, 0, 226, 227, 6, 7, -1, 0, 227, 229, 1, 0, 0, 0, 228, 224, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 7, -1, 0, 231, 232, 5, 2, 0, 0, 232, 15, 1, 0, 0, 0, 233, 254, 6, 8, -1, 0, 234, 235, 5, 49, 0, 0, 235, 236, 3, 48, 24, 0, 236, 237, 6, 8, -1, 0, 237, 249, 5, 50, 0, 0, 238, 240, 7, 0, 0, 0, 239, 241, 5, 49, 0, 0, 240, 239, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 3, 16, 8, 0, 243, 245, 6, 8, -1, 0, 244, 246, 5, 50, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 238, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 234, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 17, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 4, 0, 0, 258, 259, 5, 49, 0, 0, 259, 260, 3, 48, 24, 0, 260, 261, 6, 9, -1, 0, 261, 262, 5, 50, 0, 0, 262, 263, 5, 59, 0, 0, 263, 19, 1, 0, 0, 0, 264, 265, 5, 6, 0, 0, 265, 266, 5, 49, 0, 0, 266, 267, 3, 48, 24, 0, 267, 268, 6, 10, -1, 0, 268, 269, 5, 50, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 5, 0, 0, 271, 272, 5, 49, 0, 0, 272, 273, 3, 48, 24, 0, 273, 274, 5, 55, 0, 0, 274, 275, 3, 48, 24, 0, 275, 276, 5, 50, 0, 0, 276, 277, 5, 59, 0, 0, 277, 278, 6, 11, -1, 0, 278, 23, 1, 0, 0, 0, 279, 280, 5, 14, 0, 0, 280, 281, 5, 17, 0, 0, 281, 282, 3, 26, 13, 0, 282, 283, 6, 12, -1, 0, 283, 284, 5, 2, 0, 0, 284, 25, 1, 0, 0, 0, 285, 307, 6, 13, -1, 0, 286, 287, 3, 44, 22, 0, 287, 288, 6, 13, -1, 0, 288, 306, 1, 0, 0, 0, 289, 294, 5, 40, 0, 0, 290, 291, 5, 8, 0, 0, 291, 292, 3, 16, 8, 0, 292, 293, 6, 13, -1, 0, 293, 295, 1, 0, 0, 0, 294, 290, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 306, 5, 59, 0, 0, 297, 302, 5, 41, 0, 0, 298, 299, 5, 8, 0, 0, 299, 300, 3, 16, 8, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 298, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 5, 59, 0, 0, 305, 286, 1, 0, 0, 0, 305, 289, 1, 0, 0, 0, 305, 297, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 313, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 311, 3, 12, 6, 0, 311, 312, 6, 13, -1, 0, 312, 314, 1, 0, 0, 0, 313, 310, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 15, 0, 0, 316, 317, 5, 62, 0, 0, 317, 318, 5, 16, 0, 0, 318, 319, 3, 30, 15, 0, 319, 320, 3, 26, 13, 0, 320, 321, 5, 2, 0, 0, 321, 322, 6, 14, -1, 0, 322, 29, 1, 0, 0, 0, 323, 324, 6, 15, -1, 0, 324, 325, 5, 49, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 57, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 50, 0, 0, 331, 349, 1, 0, 0, 0, 332, 333, 5, 51, 0, 0, 333, 334, 3, 48, 24, 0, 334, 341, 6, 15, -1, 0, 335, 336, 5, 55, 0, 0, 336, 337, 3, 48, 24, 0, 337, 338, 6, 15, -1, 0, 338, 340, 1, 0, 0, 0, 339, 335, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 345, 5, 52, 0, 0, 345, 349, 1, 0, 0, 0, 346, 347, 5, 62, 0, 0, 347, 349, 6, 15, -1, 0, 348, 323, 1, 0, 0, 0, 348, 332, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 31, 1, 0, 0, 0, 350, 351, 6, 16, -1, 0, 351, 352, 5, 51, 0, 0, 352, 353, 3, 48, 24, 0, 353, 354, 5, 36, 0, 0, 354, 355, 5, 62, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 30, 15, 0, 357, 358, 5, 55, 0, 0, 358, 359, 3, 48, 24, 0, 359, 366, 6, 16, -1, 0, 360, 361, 5, 55, 0, 0, 361, 362, 3, 48, 24, 0, 362, 363, 6, 16, -1, 0, 363, 365, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 370, 6, 16, -1, 0, 370, 371, 5, 52, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 5, 62, 0, 0, 373, 374, 5, 56, 0, 0, 374, 375, 5, 13, 0, 0, 375, 376, 5, 49, 0, 0, 376, 377, 3, 48, 24, 0, 377, 378, 5, 50, 0, 0, 378, 379, 6, 17, -1, 0, 379, 35, 1, 0, 0, 0, 380, 381, 5, 18, 0, 0, 381, 382, 5, 49, 0, 0, 382, 383, 3, 48, 24, 0, 383, 384, 5, 50, 0, 0, 384, 385, 6, 18, -1, 0, 385, 37, 1, 0, 0, 0, 386, 387, 5, 19, 0, 0, 387, 388, 5, 49, 0, 0, 388, 389, 3, 48, 24, 0, 389, 390, 5, 50, 0, 0, 390, 391, 6, 19, -1, 0, 391, 39, 1, 0, 0, 0, 392, 393, 6, 20, -1, 0, 393, 397, 5, 62, 0, 0, 394, 395, 3, 42, 21, 0, 395, 396, 6, 20, -1, 0, 396, 398, 1, 0, 0, 0, 397, 394, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 411, 1, 0, 0, 0, 399, 400, 5, 48, 0, 0, 400, 412, 6, 20, -1, 0, 401, 402, 5, 43, 0, 0, 402, 412, 6, 20, -1, 0, 403, 404, 5, 44, 0, 0, 404, 412, 6, 20, -1, 0, 405, 406, 5, 46, 0, 0, 406, 412, 6, 20, -1, 0, 407, 408, 5, 45, 0, 0, 408, 412, 6, 20, -1, 0, 409, 410, 5, 47, 0, 0, 410, 412, 6, 20, -1, 0, 411, 399, 1, 0, 0, 0, 411, 401, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 411, 405, 1, 0, 0, 0, 411, 407, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 3, 48, 24, 0, 414, 415, 5, 59, 0, 0, 415, 416, 6, 20, -1, 0, 416, 41, 1, 0, 0, 0, 417, 418, 5, 51, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 6, 21, -1, 0, 420, 421, 5, 52, 0, 0, 421, 43, 1, 0, 0, 0, 422, 423, 3, 14, 7, 0, 423, 424, 6, 22, -1, 0, 424, 446, 1, 0, 0, 0, 425, 426, 3, 24, 12, 0, 426, 427, 6, 22, -1, 0, 427, 446, 1, 0, 0, 0, 428, 429, 3, 28, 14, 0, 429, 430, 6, 22, -1, 0, 430, 446, 1, 0, 0, 0, 431, 432, 3, 18, 9, 0, 432, 433, 6, 22, -1, 0, 433, 446, 1, 0, 0, 0, 434, 435, 3, 22, 11, 0, 435, 436, 6, 22, -1, 0, 436, 446, 1, 0, 0, 0, 437, 438, 3, 48, 24, 0, 438, 439, 6, 22, -1, 0, 439, 440, 6, 22, -1, 0, 440, 441, 5, 59, 0, 0, 441, 446, 1, 0, 0, 0, 442, 443, 3, 40, 20, 0, 443, 444, 6, 22, -1, 0, 444, 446, 1, 0, 0, 0, 445, 422, 1, 0, 0, 0, 445, 425, 1, 0, 0, 0, 445, 428, 1, 0, 0, 0, 445, 431, 1, 0, 0, 0, 445, 434, 1, 0, 0, 0, 445, 437, 1, 0, 0, 0, 445, 442, 1, 0, 0, 0, 446, 45, 1, 0, 0, 0, 447, 453, 6, 23, -1, 0, 448, 449, 3, 44, 22, 0, 449, 450, 6, 23, -1, 0, 450, 452, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 459, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 3, 12, 6, 0, 457, 458, 6, 23, -1, 0, 458, 460, 1, 0, 0, 0, 459, 456, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 47, 1, 0, 0, 0, 461, 462, 6, 24, -1, 0, 462, 463, 3, 50, 25, 0, 463, 464, 6, 24, -1, 0, 464, 472, 1, 0, 0, 0, 465, 466, 10, 2, 0, 0, 466, 467, 5, 37, 0, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 471, 1, 0, 0, 0, 470, 465, 1, 0, 0, 0, 471, 474, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 481, 6, 25, -1, 0, 477, 478, 5, 24, 0, 0, 478, 482, 6, 25, -1, 0, 479, 480, 5, 25, 0, 0, 480, 482, 6, 25, -1, 0, 481, 477, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 3, 52, 26, 0, 484, 485, 6, 25, -1, 0, 485, 490, 1, 0, 0, 0, 486, 487, 3, 52, 26, 0, 487, 488, 6, 25, -1, 0, 488, 490, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 486, 1, 0, 0, 0, 490, 51, 1, 0, 0, 0, 491, 492, 6, 26, -1, 0, 492, 493, 3, 54, 27, 0, 493, 494, 6, 26, -1, 0, 494, 512, 1, 0, 0, 0, 495, 496, 10, 2, 0, 0, 496, 505, 6, 26, -1, 0, 497, 498, 5, 28, 0, 0, 498, 506, 6, 26, -1, 0, 499, 500, 5, 29, 0, 0, 500, 506, 6, 26, -1, 0, 501, 502, 5, 26, 0, 0, 502, 506, 6, 26, -1, 0, 503, 504, 5, 27, 0, 0, 504, 506, 6, 26, -1, 0, 505, 497, 1, 0, 0, 0, 505, 499, 1, 0, 0, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 54, 27, 0, 508, 509, 6, 26, -1, 0, 509, 511, 1, 0, 0, 0, 510, 495, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 53, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 6, 27, -1, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 532, 1, 0, 0, 0, 519, 520, 10, 2, 0, 0, 520, 525, 6, 27, -1, 0, 521, 522, 5, 20, 0, 0, 522, 526, 6, 27, -1, 0, 523, 524, 5, 21, 0, 0, 524, 526, 6, 27, -1, 0, 525, 521, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 3, 56, 28, 0, 528, 529, 6, 27, -1, 0, 529, 531, 1, 0, 0, 0, 530, 519, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 55, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 6, 28, -1, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 552, 1, 0, 0, 0, 539, 540, 10, 2, 0, 0, 540, 545, 6, 28, -1, 0, 541, 542, 5, 22, 0, 0, 542, 546, 6, 28, -1, 0, 543, 544, 5, 23, 0, 0, 544, 546, 6, 28, -1, 0, 545, 541, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 3, 58, 29, 0, 548, 549, 6, 28, -1, 0, 549, 551, 1, 0, 0, 0, 550, 539, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 57, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 564, 6, 29, -1, 0, 556, 557, 5, 32, 0, 0, 557, 565, 6, 29, -1, 0, 558, 559, 5, 21, 0, 0, 559, 565, 6, 29, -1, 0, 560, 561, 5, 33, 0, 0, 561, 565, 6, 29, -1, 0, 562, 563, 5, 34, 0, 0, 563, 565, 6, 29, -1, 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 560, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 3, 60, 30, 0, 567, 568, 6, 29, -1, 0, 568, 573, 1, 0, 0, 0, 569, 570, 3, 60, 30, 0, 570, 571, 6, 29, -1, 0, 571, 573, 1, 0, 0, 0, 572, 555, 1, 0, 0, 0, 572, 569, 1, 0, 0, 0, 573, 59, 1, 0, 0, 0, 574, 575, 6, 30, -1, 0, 575, 583, 3, 62, 31, 0, 576, 577, 5, 49, 0, 0, 577, 578, 3, 10, 5, 0, 578, 579, 6, 30, -1, 0, 579, 580, 5, 50, 0, 0, 580, 582, 1, 0, 0, 0, 581, 576, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 591, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 3, 42, 21, 0, 587, 588, 6, 30, -1, 0, 588, 590, 1, 0, 0, 0, 589, 586, 1, 0, 0, 0, 590, 593, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 594, 595, 6, 30, -1, 0, 595, 61, 1, 0, 0, 0, 596, 597, 3, 66, 33, 0, 597, 598, 6, 31, -1, 0, 598, 627, 1, 0, 0, 0, 599, 600, 5, 62, 0, 0, 600, 627, 6, 31, -1, 0, 601, 602, 3, 64, 32, 0, 602, 603, 6, 31, -1, 0, 603, 627, 1, 0, 0, 0, 604, 605, 3, 36, 18, 0, 605, 606, 6, 31, -1, 0, 606, 627, 1, 0, 0, 0, 607, 608, 3, 38, 19, 0, 608, 609, 6, 31, -1, 0, 609, 627, 1, 0, 0, 0, 610, 611, 3, 34, 17, 0, 611, 612, 6, 31, -1, 0, 612, 627, 1, 0, 0, 0, 613, 614, 3, 32, 16, 0, 614, 615, 6, 31, -1, 0, 615, 627, 1, 0, 0, 0, 616, 617, 3, 20, 10, 0, 617, 618, 6, 31, -1, 0, 618, 627, 1, 0, 0, 0, 619, 623, 5, 49, 0, 0, 620, 621, 3, 48, 24, 0, 621, 622, 6, 31, -1, 0, 622, 624, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 5, 50, 0, 0, 626, 596, 1, 0, 0, 0, 626, 599, 1, 0, 0, 0, 626, 601, 1, 0, 0, 0, 626, 604, 1, 0, 0, 0, 626, 607, 1, 0, 0, 0, 626, 610, 1, 0, 0, 0, 626, 613, 1, 0, 0, 0, 626, 616, 1, 0, 0, 0, 626, 619, 1, 0, 0, 0, 627, 63, 1, 0, 0, 0, 628, 629, 5, 42, 0, 0, 629, 630, 3, 4, 2, 0, 630, 631, 5, 53, 0, 0, 631, 632, 3, 46, 23, 0, 632, 633, 5, 54, 0, 0, 633, 634, 3, 10, 5, 0, 634, 635, 6, 32, -1, 0, 635, 65, 1, 0, 0, 0, 636, 637, 3, 70, 35, 0, 637, 638, 6, 33, -1, 0, 638, 652, 1, 0, 0, 0, 639, 640, 5, 63, 0, 0, 640, 652, 6, 33, -1, 0, 641, 642, 5, 60, 0, 0, 642, 652, 6, 33, -1, 0, 643, 644, 5, 61, 0, 0, 644, 652, 6, 33, -1, 0, 645, 646, 3, 68, 34, 0, 646, 647, 6, 33, -1, 0, 647, 652, 1, 0, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 6, 33, -1, 0, 650, 652, 1, 0, 0, 0, 651, 636, 1, 0, 0, 0, 651, 639, 1, 0, 0, 0, 651, 641, 1, 0, 0, 0, 651, 643, 1, 0, 0, 0, 651, 645, 1, 0, 0, 0, 651, 648, 1, 0, 0, 0, 652, 67, 1, 0, 0, 0, 653, 654, 5, 51, 0, 0, 654, 655, 3, 10, 5, 0, 655, 656, 5, 52, 0, 0, 656, 657, 6, 34, -1, 0, 657, 69, 1, 0, 0, 0, 658, 659, 5, 38, 0, 0, 659, 663, 6, 35, -1, 0, 660, 661, 5, 39, 0, 0, 661, 663, 6, 35, -1, 0, 662, 658, 1, 0, 0, 0, 662, 660, 1, 0, 0, 0, 663, 71, 1, 0, 0, 0, 664, 665, 5, 11, 0, 0, 665, 666, 5, 49, 0, 0, 666, 667, 5, 58, 0, 0, 667, 668, 5, 62, 0, 0, 668, 669, 5, 50, 0, 0, 669, 670, 6, 36, -1, 0, 670, 73, 1, 0, 0, 0, 47, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 221, 228, 240, 245, 249, 254, 294, 302, 305, 307, 313, 341, 348, 366, 397, 411, 445, 453, 459, 472, 481, 489, 505, 512, 525, 532, 545, 552, 564, 572, 583, 591, 623, 626, 651, 662] \ No newline at end of file +[4, 1, 65, 676, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 217, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 223, 8, 7, 10, 7, 12, 7, 226, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 244, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 249, 8, 8, 5, 8, 251, 8, 8, 10, 8, 12, 8, 254, 9, 8, 5, 8, 256, 8, 8, 10, 8, 12, 8, 259, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 298, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 306, 8, 13, 1, 13, 5, 13, 309, 8, 13, 10, 13, 12, 13, 312, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 317, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 344, 8, 15, 10, 15, 12, 15, 347, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 354, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 370, 8, 16, 10, 16, 12, 16, 373, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 403, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 417, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 451, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 457, 8, 23, 10, 23, 12, 23, 460, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 465, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 476, 8, 24, 10, 24, 12, 24, 479, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 487, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 495, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 511, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 516, 8, 26, 10, 26, 12, 26, 519, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 531, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 536, 8, 27, 10, 27, 12, 27, 539, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 551, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 556, 8, 28, 10, 28, 12, 28, 559, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 570, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 578, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 587, 8, 30, 10, 30, 12, 30, 590, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 595, 8, 30, 10, 30, 12, 30, 598, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 629, 8, 31, 1, 31, 3, 31, 632, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 656, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 667, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 712, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 260, 1, 0, 0, 0, 20, 267, 1, 0, 0, 0, 22, 273, 1, 0, 0, 0, 24, 282, 1, 0, 0, 0, 26, 288, 1, 0, 0, 0, 28, 318, 1, 0, 0, 0, 30, 353, 1, 0, 0, 0, 32, 355, 1, 0, 0, 0, 34, 377, 1, 0, 0, 0, 36, 385, 1, 0, 0, 0, 38, 391, 1, 0, 0, 0, 40, 397, 1, 0, 0, 0, 42, 422, 1, 0, 0, 0, 44, 450, 1, 0, 0, 0, 46, 452, 1, 0, 0, 0, 48, 466, 1, 0, 0, 0, 50, 494, 1, 0, 0, 0, 52, 496, 1, 0, 0, 0, 54, 520, 1, 0, 0, 0, 56, 540, 1, 0, 0, 0, 58, 577, 1, 0, 0, 0, 60, 579, 1, 0, 0, 0, 62, 631, 1, 0, 0, 0, 64, 633, 1, 0, 0, 0, 66, 655, 1, 0, 0, 0, 68, 657, 1, 0, 0, 0, 70, 666, 1, 0, 0, 0, 72, 668, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 26, 13, 0, 209, 224, 6, 7, -1, 0, 210, 216, 5, 10, 0, 0, 211, 212, 5, 49, 0, 0, 212, 213, 3, 16, 8, 0, 213, 214, 5, 50, 0, 0, 214, 217, 1, 0, 0, 0, 215, 217, 3, 16, 8, 0, 216, 211, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 6, 7, -1, 0, 219, 220, 3, 26, 13, 0, 220, 221, 6, 7, -1, 0, 221, 223, 1, 0, 0, 0, 222, 210, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 231, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 9, 0, 0, 228, 229, 3, 26, 13, 0, 229, 230, 6, 7, -1, 0, 230, 232, 1, 0, 0, 0, 231, 227, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 6, 7, -1, 0, 234, 235, 5, 2, 0, 0, 235, 15, 1, 0, 0, 0, 236, 257, 6, 8, -1, 0, 237, 238, 5, 49, 0, 0, 238, 239, 3, 48, 24, 0, 239, 240, 6, 8, -1, 0, 240, 252, 5, 50, 0, 0, 241, 243, 7, 0, 0, 0, 242, 244, 5, 49, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 3, 16, 8, 0, 246, 248, 6, 8, -1, 0, 247, 249, 5, 50, 0, 0, 248, 247, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 237, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 17, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 260, 261, 5, 4, 0, 0, 261, 262, 5, 49, 0, 0, 262, 263, 3, 48, 24, 0, 263, 264, 6, 9, -1, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 19, 1, 0, 0, 0, 267, 268, 5, 6, 0, 0, 268, 269, 5, 49, 0, 0, 269, 270, 3, 48, 24, 0, 270, 271, 6, 10, -1, 0, 271, 272, 5, 50, 0, 0, 272, 21, 1, 0, 0, 0, 273, 274, 5, 5, 0, 0, 274, 275, 5, 49, 0, 0, 275, 276, 3, 48, 24, 0, 276, 277, 5, 55, 0, 0, 277, 278, 3, 48, 24, 0, 278, 279, 5, 50, 0, 0, 279, 280, 5, 59, 0, 0, 280, 281, 6, 11, -1, 0, 281, 23, 1, 0, 0, 0, 282, 283, 5, 14, 0, 0, 283, 284, 5, 17, 0, 0, 284, 285, 3, 26, 13, 0, 285, 286, 6, 12, -1, 0, 286, 287, 5, 2, 0, 0, 287, 25, 1, 0, 0, 0, 288, 310, 6, 13, -1, 0, 289, 290, 3, 44, 22, 0, 290, 291, 6, 13, -1, 0, 291, 309, 1, 0, 0, 0, 292, 297, 5, 40, 0, 0, 293, 294, 5, 8, 0, 0, 294, 295, 3, 16, 8, 0, 295, 296, 6, 13, -1, 0, 296, 298, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 309, 5, 59, 0, 0, 300, 305, 5, 41, 0, 0, 301, 302, 5, 8, 0, 0, 302, 303, 3, 16, 8, 0, 303, 304, 6, 13, -1, 0, 304, 306, 1, 0, 0, 0, 305, 301, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 309, 5, 59, 0, 0, 308, 289, 1, 0, 0, 0, 308, 292, 1, 0, 0, 0, 308, 300, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 316, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 313, 314, 3, 12, 6, 0, 314, 315, 6, 13, -1, 0, 315, 317, 1, 0, 0, 0, 316, 313, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 27, 1, 0, 0, 0, 318, 319, 5, 15, 0, 0, 319, 320, 5, 62, 0, 0, 320, 321, 5, 16, 0, 0, 321, 322, 3, 30, 15, 0, 322, 323, 3, 26, 13, 0, 323, 324, 5, 2, 0, 0, 324, 325, 6, 14, -1, 0, 325, 29, 1, 0, 0, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 49, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 57, 0, 0, 331, 332, 3, 48, 24, 0, 332, 333, 6, 15, -1, 0, 333, 334, 5, 50, 0, 0, 334, 354, 1, 0, 0, 0, 335, 336, 6, 15, -1, 0, 336, 337, 5, 51, 0, 0, 337, 338, 3, 48, 24, 0, 338, 345, 6, 15, -1, 0, 339, 340, 5, 55, 0, 0, 340, 341, 3, 48, 24, 0, 341, 342, 6, 15, -1, 0, 342, 344, 1, 0, 0, 0, 343, 339, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 52, 0, 0, 349, 354, 1, 0, 0, 0, 350, 351, 6, 15, -1, 0, 351, 352, 5, 62, 0, 0, 352, 354, 6, 15, -1, 0, 353, 326, 1, 0, 0, 0, 353, 335, 1, 0, 0, 0, 353, 350, 1, 0, 0, 0, 354, 31, 1, 0, 0, 0, 355, 356, 6, 16, -1, 0, 356, 357, 5, 51, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 5, 36, 0, 0, 359, 360, 5, 62, 0, 0, 360, 361, 5, 42, 0, 0, 361, 362, 3, 30, 15, 0, 362, 363, 5, 55, 0, 0, 363, 364, 3, 48, 24, 0, 364, 371, 6, 16, -1, 0, 365, 366, 5, 55, 0, 0, 366, 367, 3, 48, 24, 0, 367, 368, 6, 16, -1, 0, 368, 370, 1, 0, 0, 0, 369, 365, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 6, 16, -1, 0, 375, 376, 5, 52, 0, 0, 376, 33, 1, 0, 0, 0, 377, 378, 5, 62, 0, 0, 378, 379, 5, 56, 0, 0, 379, 380, 5, 13, 0, 0, 380, 381, 5, 49, 0, 0, 381, 382, 3, 48, 24, 0, 382, 383, 5, 50, 0, 0, 383, 384, 6, 17, -1, 0, 384, 35, 1, 0, 0, 0, 385, 386, 5, 18, 0, 0, 386, 387, 5, 49, 0, 0, 387, 388, 3, 48, 24, 0, 388, 389, 5, 50, 0, 0, 389, 390, 6, 18, -1, 0, 390, 37, 1, 0, 0, 0, 391, 392, 5, 19, 0, 0, 392, 393, 5, 49, 0, 0, 393, 394, 3, 48, 24, 0, 394, 395, 5, 50, 0, 0, 395, 396, 6, 19, -1, 0, 396, 39, 1, 0, 0, 0, 397, 398, 6, 20, -1, 0, 398, 402, 5, 62, 0, 0, 399, 400, 3, 42, 21, 0, 400, 401, 6, 20, -1, 0, 401, 403, 1, 0, 0, 0, 402, 399, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 416, 1, 0, 0, 0, 404, 405, 5, 48, 0, 0, 405, 417, 6, 20, -1, 0, 406, 407, 5, 43, 0, 0, 407, 417, 6, 20, -1, 0, 408, 409, 5, 44, 0, 0, 409, 417, 6, 20, -1, 0, 410, 411, 5, 46, 0, 0, 411, 417, 6, 20, -1, 0, 412, 413, 5, 45, 0, 0, 413, 417, 6, 20, -1, 0, 414, 415, 5, 47, 0, 0, 415, 417, 6, 20, -1, 0, 416, 404, 1, 0, 0, 0, 416, 406, 1, 0, 0, 0, 416, 408, 1, 0, 0, 0, 416, 410, 1, 0, 0, 0, 416, 412, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 5, 59, 0, 0, 420, 421, 6, 20, -1, 0, 421, 41, 1, 0, 0, 0, 422, 423, 5, 51, 0, 0, 423, 424, 3, 48, 24, 0, 424, 425, 6, 21, -1, 0, 425, 426, 5, 52, 0, 0, 426, 43, 1, 0, 0, 0, 427, 428, 3, 14, 7, 0, 428, 429, 6, 22, -1, 0, 429, 451, 1, 0, 0, 0, 430, 431, 3, 24, 12, 0, 431, 432, 6, 22, -1, 0, 432, 451, 1, 0, 0, 0, 433, 434, 3, 28, 14, 0, 434, 435, 6, 22, -1, 0, 435, 451, 1, 0, 0, 0, 436, 437, 3, 18, 9, 0, 437, 438, 6, 22, -1, 0, 438, 451, 1, 0, 0, 0, 439, 440, 3, 22, 11, 0, 440, 441, 6, 22, -1, 0, 441, 451, 1, 0, 0, 0, 442, 443, 3, 48, 24, 0, 443, 444, 6, 22, -1, 0, 444, 445, 6, 22, -1, 0, 445, 446, 5, 59, 0, 0, 446, 451, 1, 0, 0, 0, 447, 448, 3, 40, 20, 0, 448, 449, 6, 22, -1, 0, 449, 451, 1, 0, 0, 0, 450, 427, 1, 0, 0, 0, 450, 430, 1, 0, 0, 0, 450, 433, 1, 0, 0, 0, 450, 436, 1, 0, 0, 0, 450, 439, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 451, 45, 1, 0, 0, 0, 452, 458, 6, 23, -1, 0, 453, 454, 3, 44, 22, 0, 454, 455, 6, 23, -1, 0, 455, 457, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 464, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 462, 3, 12, 6, 0, 462, 463, 6, 23, -1, 0, 463, 465, 1, 0, 0, 0, 464, 461, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 47, 1, 0, 0, 0, 466, 467, 6, 24, -1, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 477, 1, 0, 0, 0, 470, 471, 10, 2, 0, 0, 471, 472, 5, 37, 0, 0, 472, 473, 3, 50, 25, 0, 473, 474, 6, 24, -1, 0, 474, 476, 1, 0, 0, 0, 475, 470, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 49, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 481, 3, 52, 26, 0, 481, 486, 6, 25, -1, 0, 482, 483, 5, 24, 0, 0, 483, 487, 6, 25, -1, 0, 484, 485, 5, 25, 0, 0, 485, 487, 6, 25, -1, 0, 486, 482, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 3, 52, 26, 0, 489, 490, 6, 25, -1, 0, 490, 495, 1, 0, 0, 0, 491, 492, 3, 52, 26, 0, 492, 493, 6, 25, -1, 0, 493, 495, 1, 0, 0, 0, 494, 480, 1, 0, 0, 0, 494, 491, 1, 0, 0, 0, 495, 51, 1, 0, 0, 0, 496, 497, 6, 26, -1, 0, 497, 498, 3, 54, 27, 0, 498, 499, 6, 26, -1, 0, 499, 517, 1, 0, 0, 0, 500, 501, 10, 2, 0, 0, 501, 510, 6, 26, -1, 0, 502, 503, 5, 28, 0, 0, 503, 511, 6, 26, -1, 0, 504, 505, 5, 29, 0, 0, 505, 511, 6, 26, -1, 0, 506, 507, 5, 26, 0, 0, 507, 511, 6, 26, -1, 0, 508, 509, 5, 27, 0, 0, 509, 511, 6, 26, -1, 0, 510, 502, 1, 0, 0, 0, 510, 504, 1, 0, 0, 0, 510, 506, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 3, 54, 27, 0, 513, 514, 6, 26, -1, 0, 514, 516, 1, 0, 0, 0, 515, 500, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 53, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 6, 27, -1, 0, 521, 522, 3, 56, 28, 0, 522, 523, 6, 27, -1, 0, 523, 537, 1, 0, 0, 0, 524, 525, 10, 2, 0, 0, 525, 530, 6, 27, -1, 0, 526, 527, 5, 20, 0, 0, 527, 531, 6, 27, -1, 0, 528, 529, 5, 21, 0, 0, 529, 531, 6, 27, -1, 0, 530, 526, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 3, 56, 28, 0, 533, 534, 6, 27, -1, 0, 534, 536, 1, 0, 0, 0, 535, 524, 1, 0, 0, 0, 536, 539, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 55, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 540, 541, 6, 28, -1, 0, 541, 542, 3, 58, 29, 0, 542, 543, 6, 28, -1, 0, 543, 557, 1, 0, 0, 0, 544, 545, 10, 2, 0, 0, 545, 550, 6, 28, -1, 0, 546, 547, 5, 22, 0, 0, 547, 551, 6, 28, -1, 0, 548, 549, 5, 23, 0, 0, 549, 551, 6, 28, -1, 0, 550, 546, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 3, 58, 29, 0, 553, 554, 6, 28, -1, 0, 554, 556, 1, 0, 0, 0, 555, 544, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 57, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 569, 6, 29, -1, 0, 561, 562, 5, 32, 0, 0, 562, 570, 6, 29, -1, 0, 563, 564, 5, 21, 0, 0, 564, 570, 6, 29, -1, 0, 565, 566, 5, 33, 0, 0, 566, 570, 6, 29, -1, 0, 567, 568, 5, 34, 0, 0, 568, 570, 6, 29, -1, 0, 569, 561, 1, 0, 0, 0, 569, 563, 1, 0, 0, 0, 569, 565, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 3, 60, 30, 0, 572, 573, 6, 29, -1, 0, 573, 578, 1, 0, 0, 0, 574, 575, 3, 60, 30, 0, 575, 576, 6, 29, -1, 0, 576, 578, 1, 0, 0, 0, 577, 560, 1, 0, 0, 0, 577, 574, 1, 0, 0, 0, 578, 59, 1, 0, 0, 0, 579, 580, 6, 30, -1, 0, 580, 588, 3, 62, 31, 0, 581, 582, 5, 49, 0, 0, 582, 583, 3, 10, 5, 0, 583, 584, 6, 30, -1, 0, 584, 585, 5, 50, 0, 0, 585, 587, 1, 0, 0, 0, 586, 581, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 596, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 3, 42, 21, 0, 592, 593, 6, 30, -1, 0, 593, 595, 1, 0, 0, 0, 594, 591, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 600, 6, 30, -1, 0, 600, 61, 1, 0, 0, 0, 601, 602, 3, 66, 33, 0, 602, 603, 6, 31, -1, 0, 603, 632, 1, 0, 0, 0, 604, 605, 5, 62, 0, 0, 605, 632, 6, 31, -1, 0, 606, 607, 3, 64, 32, 0, 607, 608, 6, 31, -1, 0, 608, 632, 1, 0, 0, 0, 609, 610, 3, 36, 18, 0, 610, 611, 6, 31, -1, 0, 611, 632, 1, 0, 0, 0, 612, 613, 3, 38, 19, 0, 613, 614, 6, 31, -1, 0, 614, 632, 1, 0, 0, 0, 615, 616, 3, 34, 17, 0, 616, 617, 6, 31, -1, 0, 617, 632, 1, 0, 0, 0, 618, 619, 3, 32, 16, 0, 619, 620, 6, 31, -1, 0, 620, 632, 1, 0, 0, 0, 621, 622, 3, 20, 10, 0, 622, 623, 6, 31, -1, 0, 623, 632, 1, 0, 0, 0, 624, 628, 5, 49, 0, 0, 625, 626, 3, 48, 24, 0, 626, 627, 6, 31, -1, 0, 627, 629, 1, 0, 0, 0, 628, 625, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 50, 0, 0, 631, 601, 1, 0, 0, 0, 631, 604, 1, 0, 0, 0, 631, 606, 1, 0, 0, 0, 631, 609, 1, 0, 0, 0, 631, 612, 1, 0, 0, 0, 631, 615, 1, 0, 0, 0, 631, 618, 1, 0, 0, 0, 631, 621, 1, 0, 0, 0, 631, 624, 1, 0, 0, 0, 632, 63, 1, 0, 0, 0, 633, 634, 5, 42, 0, 0, 634, 635, 3, 4, 2, 0, 635, 636, 5, 53, 0, 0, 636, 637, 3, 46, 23, 0, 637, 638, 5, 54, 0, 0, 638, 639, 6, 32, -1, 0, 639, 65, 1, 0, 0, 0, 640, 641, 3, 70, 35, 0, 641, 642, 6, 33, -1, 0, 642, 656, 1, 0, 0, 0, 643, 644, 5, 63, 0, 0, 644, 656, 6, 33, -1, 0, 645, 646, 5, 60, 0, 0, 646, 656, 6, 33, -1, 0, 647, 648, 5, 61, 0, 0, 648, 656, 6, 33, -1, 0, 649, 650, 3, 68, 34, 0, 650, 651, 6, 33, -1, 0, 651, 656, 1, 0, 0, 0, 652, 653, 3, 72, 36, 0, 653, 654, 6, 33, -1, 0, 654, 656, 1, 0, 0, 0, 655, 640, 1, 0, 0, 0, 655, 643, 1, 0, 0, 0, 655, 645, 1, 0, 0, 0, 655, 647, 1, 0, 0, 0, 655, 649, 1, 0, 0, 0, 655, 652, 1, 0, 0, 0, 656, 67, 1, 0, 0, 0, 657, 658, 5, 51, 0, 0, 658, 659, 3, 10, 5, 0, 659, 660, 5, 52, 0, 0, 660, 661, 6, 34, -1, 0, 661, 69, 1, 0, 0, 0, 662, 663, 5, 38, 0, 0, 663, 667, 6, 35, -1, 0, 664, 665, 5, 39, 0, 0, 665, 667, 6, 35, -1, 0, 666, 662, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 71, 1, 0, 0, 0, 668, 669, 5, 11, 0, 0, 669, 670, 5, 49, 0, 0, 670, 671, 5, 58, 0, 0, 671, 672, 5, 62, 0, 0, 672, 673, 5, 50, 0, 0, 673, 674, 6, 36, -1, 0, 674, 73, 1, 0, 0, 0, 48, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 216, 224, 231, 243, 248, 252, 257, 297, 305, 308, 310, 316, 345, 353, 371, 402, 416, 450, 458, 464, 477, 486, 494, 510, 517, 530, 537, 550, 557, 569, 577, 588, 596, 628, 631, 655, 666] \ No newline at end of file diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 847a79e..9be85af 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -728,8 +728,8 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionArgumentsContext functionArguments() throws RecognitionException { FunctionArgumentsContext _localctx = new FunctionArgumentsContext(_ctx, getState()); enterRule(_localctx, 10, RULE_functionArguments); + int _la; try { - int _alt; enterOuterAlt(_localctx, 1); { @@ -737,8 +737,8 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce setState(183); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { - case 1: + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { setState(172); ((FunctionArgumentsContext)_localctx).e1 = expression(0); @@ -747,28 +747,26 @@ public final FunctionArgumentsContext functionArguments() throws RecognitionExce setState(180); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,7,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(174); - match(COMMA); - setState(175); - ((FunctionArgumentsContext)_localctx).e2 = expression(0); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(174); + match(COMMA); + setState(175); + ((FunctionArgumentsContext)_localctx).e2 = expression(0); - _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e2.expRet); - - } - } + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e2.expRet); + + } } setState(182); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + _la = _input.LA(1); } } - break; } + } } catch (RecognitionException re) { @@ -858,16 +856,16 @@ public static class IfStatementContext extends ParserRuleContext { public Token i; public ConditionContext c1; public ConditionContext c2; - public BodyContext b; - public BodyContext b1; - public BodyContext b2; + public LoopBodyContext b; + public LoopBodyContext b1; + public LoopBodyContext b2; public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } - public List body() { - return getRuleContexts(BodyContext.class); + public List loopBody() { + return getRuleContexts(LoopBodyContext.class); } - public BodyContext body(int i) { - return getRuleContext(BodyContext.class,i); + public LoopBodyContext loopBody(int i) { + return getRuleContext(LoopBodyContext.class,i); } public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } public TerminalNode LPAR(int i) { @@ -916,6 +914,8 @@ public final IfStatementContext ifStatement() throws RecognitionException { { ((IfStatementContext)_localctx).ifRet = new IfStatement(); + ArrayList tempThenStmts = new ArrayList<>(); + ArrayList tempElseStmts = new ArrayList<>(); setState(196); ((IfStatementContext)_localctx).i = match(IF); @@ -945,58 +945,84 @@ public final IfStatementContext ifStatement() throws RecognitionException { break; } setState(208); - ((IfStatementContext)_localctx).b = body(); - _localctx.ifRet.setThenBody(((IfStatementContext)_localctx).b.bodyRet); + ((IfStatementContext)_localctx).b = loopBody(); - ArrayList tempArray = new ArrayList(); + tempThenStmts.addAll(((IfStatementContext)_localctx).b.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b.loopExps); + if(((IfStatementContext)_localctx).b.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b.loopRetStmt); + } - setState(221); + setState(224); _errHandler.sync(this); _la = _input.LA(1); while (_la==ELSEIF) { { { - setState(211); + setState(210); match(ELSEIF); - setState(212); - match(LPAR); - setState(213); - ((IfStatementContext)_localctx).c2 = condition(); - setState(214); - match(RPAR); + setState(216); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + case 1: + { + setState(211); + match(LPAR); + setState(212); + ((IfStatementContext)_localctx).c2 = condition(); + setState(213); + match(RPAR); + } + break; + case 2: + { + setState(215); + ((IfStatementContext)_localctx).c2 = condition(); + } + break; + } _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); - setState(216); - ((IfStatementContext)_localctx).b1 = body(); - - tempArray.addAll(((IfStatementContext)_localctx).b1.bodyRet); + setState(219); + ((IfStatementContext)_localctx).b1 = loopBody(); + + tempElseStmts.addAll(((IfStatementContext)_localctx).b1.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b1.loopExps); + if(((IfStatementContext)_localctx).b1.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b1.loopRetStmt); + } } } - setState(223); + setState(226); _errHandler.sync(this); _la = _input.LA(1); } - setState(228); + setState(231); _errHandler.sync(this); _la = _input.LA(1); if (_la==ELSE) { { - setState(224); + setState(227); match(ELSE); - setState(225); - ((IfStatementContext)_localctx).b2 = body(); - - tempArray.addAll(((IfStatementContext)_localctx).b2.bodyRet); + setState(228); + ((IfStatementContext)_localctx).b2 = loopBody(); + + tempElseStmts.addAll(((IfStatementContext)_localctx).b2.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b2.loopExps); + if(((IfStatementContext)_localctx).b2.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b2.loopRetStmt); + } } } - _localctx.ifRet.setElseBody(tempArray); + _localctx.ifRet.setThenBody(tempThenStmts); + _localctx.ifRet.setElseBody(tempElseStmts); - setState(231); + setState(234); match(END); } } @@ -1074,28 +1100,28 @@ public final ConditionContext condition() throws RecognitionException { ((ConditionContext)_localctx).conditionRet = new ArrayList(); - setState(254); + setState(257); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + _alt = getInterpreter().adaptivePredict(_input,17,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(234); + setState(237); match(LPAR); - setState(235); + setState(238); ((ConditionContext)_localctx).e = expression(0); _localctx.conditionRet.add(((ConditionContext)_localctx).e.expRet); - setState(237); + setState(240); match(RPAR); - setState(249); + setState(252); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(238); + setState(241); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -1105,27 +1131,27 @@ public final ConditionContext condition() throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(240); + setState(243); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(239); + setState(242); match(LPAR); } break; } - setState(242); + setState(245); ((ConditionContext)_localctx).c = condition(); _localctx.conditionRet.addAll(((ConditionContext)_localctx).c.conditionRet); - setState(245); + setState(248); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: { - setState(244); + setState(247); match(RPAR); } break; @@ -1133,16 +1159,16 @@ public final ConditionContext condition() throws RecognitionException { } } } - setState(251); + setState(254); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); } } } } - setState(256); + setState(259); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + _alt = getInterpreter().adaptivePredict(_input,17,_ctx); } } } @@ -1194,19 +1220,19 @@ public final PutsStatementContext putsStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(257); + setState(260); ((PutsStatementContext)_localctx).p = match(PUTS); - setState(258); + setState(261); match(LPAR); - setState(259); + setState(262); ((PutsStatementContext)_localctx).e = expression(0); ((PutsStatementContext)_localctx).putRet = new PutStatement(((PutsStatementContext)_localctx).e.expRet); _localctx.putRet.setLine((((PutsStatementContext)_localctx).p!=null?((PutsStatementContext)_localctx).p.getLine():0)); - setState(261); + setState(264); match(RPAR); - setState(262); + setState(265); match(SEMICOLLON); } } @@ -1257,17 +1283,17 @@ public final LenStatementContext lenStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(264); + setState(267); ((LenStatementContext)_localctx).l = match(LEN); - setState(265); + setState(268); match(LPAR); - setState(266); + setState(269); ((LenStatementContext)_localctx).e = expression(0); ((LenStatementContext)_localctx).lenRet = new LenStatement(((LenStatementContext)_localctx).e.expRet); _localctx.lenRet.setLine((((LenStatementContext)_localctx).l!=null?((LenStatementContext)_localctx).l.getLine():0)); - setState(268); + setState(271); match(RPAR); } } @@ -1324,19 +1350,19 @@ public final PushStatementContext pushStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(270); + setState(273); ((PushStatementContext)_localctx).p = match(PUSH); - setState(271); + setState(274); match(LPAR); - setState(272); + setState(275); ((PushStatementContext)_localctx).e1 = expression(0); - setState(273); + setState(276); match(COMMA); - setState(274); + setState(277); ((PushStatementContext)_localctx).e2 = expression(0); - setState(275); + setState(278); match(RPAR); - setState(276); + setState(279); match(SEMICOLLON); ((PushStatementContext)_localctx).pushRet = new PushStatement(((PushStatementContext)_localctx).e1.expRet, ((PushStatementContext)_localctx).e2.expRet); @@ -1391,17 +1417,17 @@ public final LoopDoStatementContext loopDoStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(279); + setState(282); ((LoopDoStatementContext)_localctx).l1 = match(LOOP); - setState(280); + setState(283); match(DO); - setState(281); + setState(284); ((LoopDoStatementContext)_localctx).l2 = loopBody(); ((LoopDoStatementContext)_localctx).loopDoRet = new LoopDoStatement(((LoopDoStatementContext)_localctx).l2.loopStmts, ((LoopDoStatementContext)_localctx).l2.loopExps, ((LoopDoStatementContext)_localctx).l2.loopRetStmt); _localctx.loopDoRet.setLine((((LoopDoStatementContext)_localctx).l1!=null?((LoopDoStatementContext)_localctx).l1.getLine():0)); - setState(283); + setState(286); match(END); } } @@ -1487,12 +1513,12 @@ public final LoopBodyContext loopBody() throws RecognitionException { ((LoopBodyContext)_localctx).loopExps = new ArrayList(); ((LoopBodyContext)_localctx).loopRetStmt = null; - setState(307); + setState(310); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { { - setState(305); + setState(308); _errHandler.sync(this); switch (_input.LA(1)) { case PUTS: @@ -1518,50 +1544,50 @@ public final LoopBodyContext loopBody() throws RecognitionException { case IDENTIFIER: case STRING_VALUE: { - setState(286); + setState(289); ((LoopBodyContext)_localctx).s = statement(); _localctx.loopStmts.add(((LoopBodyContext)_localctx).s.stmtRet); } break; case BREAK: { - setState(289); + setState(292); match(BREAK); - setState(294); + setState(297); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(290); + setState(293); match(IF); - setState(291); + setState(294); ((LoopBodyContext)_localctx).c1 = condition(); _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c1.conditionRet); } } - setState(296); + setState(299); match(SEMICOLLON); } break; case NEXT: { - setState(297); + setState(300); match(NEXT); - setState(302); + setState(305); _errHandler.sync(this); _la = _input.LA(1); if (_la==IF) { { - setState(298); + setState(301); match(IF); - setState(299); + setState(302); ((LoopBodyContext)_localctx).c2 = condition(); _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c2.conditionRet); } } - setState(304); + setState(307); match(SEMICOLLON); } break; @@ -1569,16 +1595,16 @@ public final LoopBodyContext loopBody() throws RecognitionException { throw new NoViableAltException(this); } } - setState(309); + setState(312); _errHandler.sync(this); _la = _input.LA(1); } - setState(313); + setState(316); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(310); + setState(313); ((LoopBodyContext)_localctx).r = returnStatement(); ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet;_localctx.loopRetStmt.setLine(((LoopBodyContext)_localctx).r.returnStmtRet.getLine()); } @@ -1639,17 +1665,17 @@ public final ForStatementContext forStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(315); + setState(318); ((ForStatementContext)_localctx).f = match(FOR); - setState(316); + setState(319); ((ForStatementContext)_localctx).id = match(IDENTIFIER); - setState(317); + setState(320); match(IN); - setState(318); + setState(321); ((ForStatementContext)_localctx).r = range(); - setState(319); + setState(322); ((ForStatementContext)_localctx).l = loopBody(); - setState(320); + setState(323); match(END); ((ForStatementContext)_localctx).forStRet = new ForStatement(new Identifier((((ForStatementContext)_localctx).id!=null?((ForStatementContext)_localctx).id.getText():null)), @@ -1718,7 +1744,7 @@ public final RangeContext range() throws RecognitionException { enterRule(_localctx, 30, RULE_range); int _la; try { - setState(348); + setState(353); _errHandler.sync(this); switch (_input.LA(1)) { case LPAR: @@ -1728,21 +1754,21 @@ public final RangeContext range() throws RecognitionException { ((RangeContext)_localctx).rangeRet = new ArrayList(); { - setState(324); + setState(327); match(LPAR); - setState(325); + setState(328); ((RangeContext)_localctx).e1 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e1.expRet); - setState(327); + setState(330); match(DOUBLEDOT); - setState(328); + setState(331); ((RangeContext)_localctx).e2 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e2.expRet); - setState(330); + setState(333); match(RPAR); } } @@ -1750,36 +1776,39 @@ public final RangeContext range() throws RecognitionException { case LBRACK: enterOuterAlt(_localctx, 2); { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + { - setState(332); + setState(336); match(LBRACK); { - setState(333); + setState(337); ((RangeContext)_localctx).e3 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e3.expRet); - setState(341); + setState(345); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(335); + setState(339); match(COMMA); - setState(336); + setState(340); ((RangeContext)_localctx).e4 = expression(0); _localctx.rangeRet.add(((RangeContext)_localctx).e4.expRet); } } - setState(343); + setState(347); _errHandler.sync(this); _la = _input.LA(1); } } - setState(344); + setState(348); match(RBRACK); } } @@ -1787,10 +1816,14 @@ public final RangeContext range() throws RecognitionException { case IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(346); + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + + setState(351); ((RangeContext)_localctx).id = match(IDENTIFIER); Identifier id_ = new Identifier((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getText():null)); + id_.setLine((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getLine():0)); _localctx.rangeRet.add(id_); } @@ -1866,41 +1899,41 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio ArrayList conditionExps = new ArrayList(); - setState(351); + setState(356); ((FilterStatementContext)_localctx).brack = match(LBRACK); - setState(352); + setState(357); ((FilterStatementContext)_localctx).e1 = expression(0); - setState(353); + setState(358); match(SEPARATOR); - setState(354); + setState(359); ((FilterStatementContext)_localctx).id = match(IDENTIFIER); - setState(355); + setState(360); match(ARROW); - setState(356); + setState(361); ((FilterStatementContext)_localctx).r = range(); - setState(357); + setState(362); match(COMMA); - setState(358); + setState(363); ((FilterStatementContext)_localctx).e2 = expression(0); conditionExps.add(((FilterStatementContext)_localctx).e2.expRet); - setState(366); + setState(371); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(360); + setState(365); match(COMMA); - setState(361); + setState(366); ((FilterStatementContext)_localctx).e3 = expression(0); conditionExps.add(((FilterStatementContext)_localctx).e3.expRet); } } - setState(368); + setState(373); _errHandler.sync(this); _la = _input.LA(1); } @@ -1911,7 +1944,7 @@ public final FilterStatementContext filterStatement() throws RecognitionExceptio conditionExps, ((FilterStatementContext)_localctx).r.rangeRet); _localctx.filterStatementRet.setLine((((FilterStatementContext)_localctx).brack!=null?((FilterStatementContext)_localctx).brack.getLine():0)); - setState(370); + setState(375); match(RBRACK); } } @@ -1965,17 +1998,17 @@ public final MatchPatternStatementContext matchPatternStatement() throws Recogni try { enterOuterAlt(_localctx, 1); { - setState(372); + setState(377); ((MatchPatternStatementContext)_localctx).id = match(IDENTIFIER); - setState(373); + setState(378); match(DOT); - setState(374); + setState(379); ((MatchPatternStatementContext)_localctx).m = match(MATCH); - setState(375); + setState(380); match(LPAR); - setState(376); + setState(381); ((MatchPatternStatementContext)_localctx).e = expression(0); - setState(377); + setState(382); match(RPAR); Identifier id_ = new Identifier((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getText():null)); @@ -2032,13 +2065,13 @@ public final ChopStatementContext chopStatement() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(380); + setState(385); ((ChopStatementContext)_localctx).c = match(CHOP); - setState(381); + setState(386); match(LPAR); - setState(382); + setState(387); ((ChopStatementContext)_localctx).e = expression(0); - setState(383); + setState(388); match(RPAR); ((ChopStatementContext)_localctx).chopRet = new ChopStatement(((ChopStatementContext)_localctx).e.expRet); @@ -2093,13 +2126,13 @@ public final ChompStatementContext chompStatement() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(386); + setState(391); ((ChompStatementContext)_localctx).c = match(CHOMP); - setState(387); + setState(392); match(LPAR); - setState(388); + setState(393); ((ChompStatementContext)_localctx).e = expression(0); - setState(389); + setState(394); match(RPAR); ((ChompStatementContext)_localctx).chompRet = new ChompStatement(((ChompStatementContext)_localctx).e.expRet); @@ -2175,60 +2208,60 @@ public final AssignmentContext assignment() throws RecognitionException { int line; AssignOperator op; - setState(393); + setState(398); ((AssignmentContext)_localctx).id = match(IDENTIFIER); - setState(397); + setState(402); _errHandler.sync(this); _la = _input.LA(1); if (_la==LBRACK) { { - setState(394); + setState(399); ((AssignmentContext)_localctx).a = accessList(); access = true; } } - setState(411); + setState(416); _errHandler.sync(this); switch (_input.LA(1)) { case ASSIGN: { - setState(399); + setState(404); ((AssignmentContext)_localctx).as = match(ASSIGN); op = AssignOperator.ASSIGN;line = (((AssignmentContext)_localctx).as!=null?((AssignmentContext)_localctx).as.getLine():0); } break; case PLUS_ASSIGN: { - setState(401); + setState(406); ((AssignmentContext)_localctx).pl = match(PLUS_ASSIGN); op = AssignOperator.PLUS_ASSIGN;line = (((AssignmentContext)_localctx).pl!=null?((AssignmentContext)_localctx).pl.getLine():0); } break; case MINUS_ASSIGN: { - setState(403); + setState(408); ((AssignmentContext)_localctx).mi = match(MINUS_ASSIGN); op = AssignOperator.MINUS_ASSIGN;line = (((AssignmentContext)_localctx).mi!=null?((AssignmentContext)_localctx).mi.getLine():0); } break; case DIVIDE_ASSIGN: { - setState(405); + setState(410); ((AssignmentContext)_localctx).di = match(DIVIDE_ASSIGN); op = AssignOperator.DIVIDE_ASSIGN;line = (((AssignmentContext)_localctx).di!=null?((AssignmentContext)_localctx).di.getLine():0); } break; case MULT_ASSIGN: { - setState(407); + setState(412); ((AssignmentContext)_localctx).mu = match(MULT_ASSIGN); op = AssignOperator.MULT_ASSIGN;line = (((AssignmentContext)_localctx).mu!=null?((AssignmentContext)_localctx).mu.getLine():0); } break; case MOD_ASSIGN: { - setState(409); + setState(414); ((AssignmentContext)_localctx).mo = match(MOD_ASSIGN); op = AssignOperator.MOD_ASSIGN;line = (((AssignmentContext)_localctx).mo!=null?((AssignmentContext)_localctx).mo.getLine():0); } @@ -2236,9 +2269,9 @@ public final AssignmentContext assignment() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(413); + setState(418); ((AssignmentContext)_localctx).e = expression(0); - setState(414); + setState(419); match(SEMICOLLON); Identifier id_ = new Identifier((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getText():null)); @@ -2296,12 +2329,12 @@ public final AccessListContext accessList() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(417); + setState(422); match(LBRACK); - setState(418); + setState(423); ((AccessListContext)_localctx).e = expression(0); ((AccessListContext)_localctx).accessListExp = ((AccessListContext)_localctx).e.expRet; - setState(420); + setState(425); match(RBRACK); } } @@ -2371,13 +2404,13 @@ public final StatementContext statement() throws RecognitionException { StatementContext _localctx = new StatementContext(_ctx, getState()); enterRule(_localctx, 44, RULE_statement); try { - setState(445); + setState(450); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(422); + setState(427); ((StatementContext)_localctx).i = ifStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).i.ifRet; } @@ -2385,7 +2418,7 @@ public final StatementContext statement() throws RecognitionException { case 2: enterOuterAlt(_localctx, 2); { - setState(425); + setState(430); ((StatementContext)_localctx).loop = loopDoStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).loop.loopDoRet; } @@ -2393,7 +2426,7 @@ public final StatementContext statement() throws RecognitionException { case 3: enterOuterAlt(_localctx, 3); { - setState(428); + setState(433); ((StatementContext)_localctx).f = forStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).f.forStRet; } @@ -2401,7 +2434,7 @@ public final StatementContext statement() throws RecognitionException { case 4: enterOuterAlt(_localctx, 4); { - setState(431); + setState(436); ((StatementContext)_localctx).puts = putsStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).puts.putRet; } @@ -2409,7 +2442,7 @@ public final StatementContext statement() throws RecognitionException { case 5: enterOuterAlt(_localctx, 5); { - setState(434); + setState(439); ((StatementContext)_localctx).push = pushStatement(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).push.pushRet; } @@ -2417,7 +2450,7 @@ public final StatementContext statement() throws RecognitionException { case 6: enterOuterAlt(_localctx, 6); { - setState(437); + setState(442); ((StatementContext)_localctx).e = expression(0); ((StatementContext)_localctx).stmtRet = new ExpressionStatement(((StatementContext)_localctx).e.expRet); @@ -2425,14 +2458,14 @@ public final StatementContext statement() throws RecognitionException { ((StatementContext)_localctx).stmtRet = expStmt; _localctx.stmtRet.setLine(((StatementContext)_localctx).e.expRet.getLine()); - setState(440); + setState(445); match(SEMICOLLON); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(442); + setState(447); ((StatementContext)_localctx).as = assignment(); ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).as.assignRet; } @@ -2493,27 +2526,27 @@ public final BodyContext body() throws RecognitionException { ((BodyContext)_localctx).bodyRet = new ArrayList(); - setState(453); + setState(458); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { { { - setState(448); + setState(453); ((BodyContext)_localctx).s = statement(); _localctx.bodyRet.add(((BodyContext)_localctx).s.stmtRet); } } - setState(455); + setState(460); _errHandler.sync(this); _la = _input.LA(1); } - setState(459); + setState(464); _errHandler.sync(this); _la = _input.LA(1); if (_la==RETURN) { { - setState(456); + setState(461); ((BodyContext)_localctx).r = returnStatement(); _localctx.bodyRet.add(((BodyContext)_localctx).r.returnStmtRet); } @@ -2581,14 +2614,14 @@ private ExpressionContext expression(int _p) throws RecognitionException { enterOuterAlt(_localctx, 1); { { - setState(462); + setState(467); ((ExpressionContext)_localctx).e3 = eqaulityExpression(); ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; } _ctx.stop = _input.LT(-1); - setState(472); + setState(477); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,30,_ctx); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2598,11 +2631,11 @@ private ExpressionContext expression(int _p) throws RecognitionException { _localctx = new ExpressionContext(_parentctx, _parentState); _localctx.e1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(465); + setState(470); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(466); + setState(471); ((ExpressionContext)_localctx).a = match(APPEND); - setState(467); + setState(472); ((ExpressionContext)_localctx).e2 = eqaulityExpression(); if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ @@ -2618,9 +2651,9 @@ private ExpressionContext expression(int _p) throws RecognitionException { } } } - setState(474); + setState(479); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,30,_ctx); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); } } } @@ -2674,31 +2707,31 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, getState()); enterRule(_localctx, 50, RULE_eqaulityExpression); try { - setState(489); + setState(494); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(475); + setState(480); ((EqaulityExpressionContext)_localctx).e1 = relationalExpression(0); BinaryOperator op; int line; - setState(481); + setState(486); _errHandler.sync(this); switch (_input.LA(1)) { case EQUAL: { - setState(477); + setState(482); ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); op = BinaryOperator.EQUAL;line = (((EqaulityExpressionContext)_localctx).op1!=null?((EqaulityExpressionContext)_localctx).op1.getLine():0); } break; case NOT_EQUAL: { - setState(479); + setState(484); ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); op = BinaryOperator.NOT_EQUAL;line = (((EqaulityExpressionContext)_localctx).op2!=null?((EqaulityExpressionContext)_localctx).op2.getLine():0); } @@ -2706,7 +2739,7 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx default: throw new NoViableAltException(this); } - setState(483); + setState(488); ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op);_localctx.expRet.setLine(line); } @@ -2714,7 +2747,7 @@ public final EqaulityExpressionContext eqaulityExpression() throws RecognitionEx case 2: enterOuterAlt(_localctx, 2); { - setState(486); + setState(491); ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; } @@ -2787,14 +2820,14 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit enterOuterAlt(_localctx, 1); { { - setState(492); + setState(497); ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; } _ctx.stop = _input.LT(-1); - setState(512); + setState(517); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2804,39 +2837,39 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit _localctx = new RelationalExpressionContext(_parentctx, _parentState); _localctx.r1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); - setState(495); + setState(500); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(505); + setState(510); _errHandler.sync(this); switch (_input.LA(1)) { case GREATER_THAN: { - setState(497); + setState(502); ((RelationalExpressionContext)_localctx).gt = match(GREATER_THAN); op = BinaryOperator.GREATER_THAN;line = (((RelationalExpressionContext)_localctx).gt!=null?((RelationalExpressionContext)_localctx).gt.getLine():0); } break; case LESS_THAN: { - setState(499); + setState(504); ((RelationalExpressionContext)_localctx).lt = match(LESS_THAN); op = BinaryOperator.LESS_THAN;line = (((RelationalExpressionContext)_localctx).lt!=null?((RelationalExpressionContext)_localctx).lt.getLine():0); } break; case LESS_EQUAL_THAN: { - setState(501); + setState(506); ((RelationalExpressionContext)_localctx).let = match(LESS_EQUAL_THAN); op = BinaryOperator.LESS_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).let!=null?((RelationalExpressionContext)_localctx).let.getLine():0); } break; case GREATER_EQUAL_THAN: { - setState(503); + setState(508); ((RelationalExpressionContext)_localctx).get = match(GREATER_EQUAL_THAN); op = BinaryOperator.GREATER_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).get!=null?((RelationalExpressionContext)_localctx).get.getLine():0); } @@ -2844,15 +2877,15 @@ private RelationalExpressionContext relationalExpression(int _p) throws Recognit default: throw new NoViableAltException(this); } - setState(507); + setState(512); ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(514); + setState(519); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); } } } @@ -2918,16 +2951,16 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE enterOuterAlt(_localctx, 1); { { - setState(516); + setState(521); ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; } _ctx.stop = _input.LT(-1); - setState(532); + setState(537); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2937,25 +2970,25 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE _localctx = new AdditiveExpressionContext(_parentctx, _parentState); _localctx.a1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); - setState(519); + setState(524); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(525); + setState(530); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: { - setState(521); + setState(526); ((AdditiveExpressionContext)_localctx).p = match(PLUS); op = BinaryOperator.PLUS;line = (((AdditiveExpressionContext)_localctx).p!=null?((AdditiveExpressionContext)_localctx).p.getLine():0); } break; case MINUS: { - setState(523); + setState(528); ((AdditiveExpressionContext)_localctx).m = match(MINUS); op = BinaryOperator.MINUS;line = (((AdditiveExpressionContext)_localctx).m!=null?((AdditiveExpressionContext)_localctx).m.getLine():0); } @@ -2963,15 +2996,15 @@ private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionE default: throw new NoViableAltException(this); } - setState(527); + setState(532); ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(534); + setState(539); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); } } } @@ -3037,14 +3070,14 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws enterOuterAlt(_localctx, 1); { { - setState(536); + setState(541); ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; } _ctx.stop = _input.LT(-1); - setState(552); + setState(557); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -3054,25 +3087,25 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); _localctx.m1 = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); - setState(539); + setState(544); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); BinaryOperator op; int line; - setState(545); + setState(550); _errHandler.sync(this); switch (_input.LA(1)) { case MULT: { - setState(541); + setState(546); ((MultiplicativeExpressionContext)_localctx).m = match(MULT); op = BinaryOperator.MULT;line = (((MultiplicativeExpressionContext)_localctx).m!=null?((MultiplicativeExpressionContext)_localctx).m.getLine():0); } break; case DIVIDE: { - setState(543); + setState(548); ((MultiplicativeExpressionContext)_localctx).d = match(DIVIDE); op = BinaryOperator.DIVIDE;line = (((MultiplicativeExpressionContext)_localctx).d!=null?((MultiplicativeExpressionContext)_localctx).d.getLine():0); } @@ -3080,15 +3113,15 @@ private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws default: throw new NoViableAltException(this); } - setState(547); + setState(552); ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op);_localctx.expRet.setLine(line); } } } - setState(554); + setState(559); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,38,_ctx); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); } } } @@ -3142,7 +3175,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); enterRule(_localctx, 58, RULE_preUnaryExpression); try { - setState(572); + setState(577); _errHandler.sync(this); switch (_input.LA(1)) { case MINUS: @@ -3155,33 +3188,33 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx UnaryOperator op; int line; - setState(564); + setState(569); _errHandler.sync(this); switch (_input.LA(1)) { case NOT: { - setState(556); + setState(561); ((PreUnaryExpressionContext)_localctx).n = match(NOT); op = UnaryOperator.NOT;line = (((PreUnaryExpressionContext)_localctx).n!=null?((PreUnaryExpressionContext)_localctx).n.getLine():0); } break; case MINUS: { - setState(558); + setState(563); ((PreUnaryExpressionContext)_localctx).m = match(MINUS); op = UnaryOperator.MINUS;line = (((PreUnaryExpressionContext)_localctx).m!=null?((PreUnaryExpressionContext)_localctx).m.getLine():0); } break; case INCREMENT: { - setState(560); + setState(565); ((PreUnaryExpressionContext)_localctx).i = match(INCREMENT); op = UnaryOperator.INC;line = (((PreUnaryExpressionContext)_localctx).i!=null?((PreUnaryExpressionContext)_localctx).i.getLine():0); } break; case DECREMENT: { - setState(562); + setState(567); ((PreUnaryExpressionContext)_localctx).d = match(DECREMENT); op = UnaryOperator.DEC;line = (((PreUnaryExpressionContext)_localctx).d!=null?((PreUnaryExpressionContext)_localctx).d.getLine():0); } @@ -3189,7 +3222,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx default: throw new NoViableAltException(this); } - setState(566); + setState(571); ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); } @@ -3209,7 +3242,7 @@ public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionEx case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(569); + setState(574); ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; } @@ -3290,40 +3323,40 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); - setState(575); + setState(580); ((AccessExpressionContext)_localctx).o = otherExpression(); - setState(583); + setState(588); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(576); + setState(581); match(LPAR); - setState(577); + setState(582); ((AccessExpressionContext)_localctx).f = functionArguments(); isAccessExpression = true; args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); - setState(579); + setState(584); match(RPAR); } } } - setState(585); + setState(590); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,41,_ctx); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); } - setState(591); + setState(596); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,42,_ctx); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(586); + setState(591); ((AccessExpressionContext)_localctx).a = accessList(); isMultiDimentional = true; @@ -3332,9 +3365,9 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept } } } - setState(593); + setState(598); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,42,_ctx); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); } if(!isAccessExpression){ @@ -3428,13 +3461,13 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio enterRule(_localctx, 62, RULE_otherExpression); int _la; try { - setState(626); + setState(631); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(596); + setState(601); ((OtherExpressionContext)_localctx).v = values(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; } @@ -3442,7 +3475,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 2: enterOuterAlt(_localctx, 2); { - setState(599); + setState(604); ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); @@ -3453,7 +3486,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 3: enterOuterAlt(_localctx, 3); { - setState(601); + setState(606); ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; } @@ -3461,7 +3494,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 4: enterOuterAlt(_localctx, 4); { - setState(604); + setState(609); ((OtherExpressionContext)_localctx).chop = chopStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; } @@ -3469,7 +3502,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 5: enterOuterAlt(_localctx, 5); { - setState(607); + setState(612); ((OtherExpressionContext)_localctx).chomp = chompStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chomp.chompRet; } @@ -3477,7 +3510,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 6: enterOuterAlt(_localctx, 6); { - setState(610); + setState(615); ((OtherExpressionContext)_localctx).match = matchPatternStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; } @@ -3485,7 +3518,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 7: enterOuterAlt(_localctx, 7); { - setState(613); + setState(618); ((OtherExpressionContext)_localctx).f = filterStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; } @@ -3493,7 +3526,7 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 8: enterOuterAlt(_localctx, 8); { - setState(616); + setState(621); ((OtherExpressionContext)_localctx).len_ = lenStatement(); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len_.lenRet; } @@ -3501,20 +3534,20 @@ public final OtherExpressionContext otherExpression() throws RecognitionExceptio case 9: enterOuterAlt(_localctx, 9); { - setState(619); + setState(624); match(LPAR); - setState(623); + setState(628); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { { - setState(620); + setState(625); ((OtherExpressionContext)_localctx).e = expression(0); ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; } } - setState(625); + setState(630); match(RPAR); } break; @@ -3537,7 +3570,6 @@ public static class LambdaFunctionContext extends ParserRuleContext { public Token a; public FunctionArgumentsDeclarationContext fd; public BodyContext b; - public FunctionArgumentsContext fa; public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } @@ -3547,9 +3579,6 @@ public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { public BodyContext body() { return getRuleContext(BodyContext.class,0); } - public FunctionArgumentsContext functionArguments() { - return getRuleContext(FunctionArgumentsContext.class,0); - } public LambdaFunctionContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -3575,20 +3604,18 @@ public final LambdaFunctionContext lambdaFunction() throws RecognitionException try { enterOuterAlt(_localctx, 1); { - setState(628); + setState(633); ((LambdaFunctionContext)_localctx).a = match(ARROW); - setState(629); + setState(634); ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); - setState(630); + setState(635); match(LBRACE); - setState(631); + setState(636); ((LambdaFunctionContext)_localctx).b = body(); - setState(632); + setState(637); match(RBRACE); - setState(633); - ((LambdaFunctionContext)_localctx).fa = functionArguments(); - ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet, ((LambdaFunctionContext)_localctx).fa.funcArgsRet); + ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet); _localctx.lambdaRet.setLine((((LambdaFunctionContext)_localctx).a!=null?((LambdaFunctionContext)_localctx).a.getLine():0)); } @@ -3648,14 +3675,14 @@ public final ValuesContext values() throws RecognitionException { ValuesContext _localctx = new ValuesContext(_ctx, getState()); enterRule(_localctx, 66, RULE_values); try { - setState(651); + setState(655); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: case FALSE: enterOuterAlt(_localctx, 1); { - setState(636); + setState(640); ((ValuesContext)_localctx).b = boolValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; } @@ -3663,7 +3690,7 @@ public final ValuesContext values() throws RecognitionException { case STRING_VALUE: enterOuterAlt(_localctx, 2); { - setState(639); + setState(643); ((ValuesContext)_localctx).s = match(STRING_VALUE); ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); } @@ -3671,7 +3698,7 @@ public final ValuesContext values() throws RecognitionException { case INT_VALUE: enterOuterAlt(_localctx, 3); { - setState(641); + setState(645); ((ValuesContext)_localctx).i = match(INT_VALUE); ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); } @@ -3679,7 +3706,7 @@ public final ValuesContext values() throws RecognitionException { case FLOAT_VALUE: enterOuterAlt(_localctx, 4); { - setState(643); + setState(647); ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getLine():0)); } @@ -3687,7 +3714,7 @@ public final ValuesContext values() throws RecognitionException { case LBRACK: enterOuterAlt(_localctx, 5); { - setState(645); + setState(649); ((ValuesContext)_localctx).l = listValue(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; } @@ -3695,7 +3722,7 @@ public final ValuesContext values() throws RecognitionException { case METHOD: enterOuterAlt(_localctx, 6); { - setState(648); + setState(652); ((ValuesContext)_localctx).f = functionPointer(); ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; } @@ -3750,11 +3777,11 @@ public final ListValueContext listValue() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(653); + setState(657); ((ListValueContext)_localctx).l = match(LBRACK); - setState(654); + setState(658); ((ListValueContext)_localctx).f = functionArguments(); - setState(655); + setState(659); match(RBRACK); ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); @@ -3803,13 +3830,13 @@ public final BoolValueContext boolValue() throws RecognitionException { BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); enterRule(_localctx, 70, RULE_boolValue); try { - setState(662); + setState(666); _errHandler.sync(this); switch (_input.LA(1)) { case TRUE: enterOuterAlt(_localctx, 1); { - setState(658); + setState(662); ((BoolValueContext)_localctx).t = match(TRUE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); } @@ -3817,7 +3844,7 @@ public final BoolValueContext boolValue() throws RecognitionException { case FALSE: enterOuterAlt(_localctx, 2); { - setState(660); + setState(664); ((BoolValueContext)_localctx).f = match(FALSE); ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); } @@ -3872,15 +3899,15 @@ public final FunctionPointerContext functionPointer() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(664); + setState(668); ((FunctionPointerContext)_localctx).m = match(METHOD); - setState(665); + setState(669); match(LPAR); - setState(666); + setState(670); match(COLON); - setState(667); + setState(671); ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); - setState(668); + setState(672); match(RPAR); Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); @@ -3944,7 +3971,7 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext } public static final String _serializedATN = - "\u0004\u0001A\u02a0\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001A\u02a4\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ @@ -3978,420 +4005,424 @@ private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007"+ "\u00cf\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ - "\u0005\u0007\u00dc\b\u0007\n\u0007\f\u0007\u00df\t\u0007\u0001\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00e5\b\u0007\u0001\u0007\u0001"+ - "\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0003\b\u00f1\b\b\u0001\b\u0001\b\u0001\b\u0003\b\u00f6\b\b\u0005\b"+ - "\u00f8\b\b\n\b\f\b\u00fb\t\b\u0005\b\u00fd\b\b\n\b\f\b\u0100\t\b\u0001"+ - "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001"+ - "\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ - "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001"+ - "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0001\r\u0003\r\u0127\b\r\u0001\r\u0001\r\u0001"+ - "\r\u0001\r\u0001\r\u0001\r\u0003\r\u012f\b\r\u0001\r\u0005\r\u0132\b\r"+ - "\n\r\f\r\u0135\t\r\u0001\r\u0001\r\u0001\r\u0003\r\u013a\b\r\u0001\u000e"+ - "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ - "\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00d9\b\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u00df\b\u0007\n\u0007"+ + "\f\u0007\u00e2\t\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0003\u0007\u00e8\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00f4\b\b\u0001"+ + "\b\u0001\b\u0001\b\u0003\b\u00f9\b\b\u0005\b\u00fb\b\b\n\b\f\b\u00fe\t"+ + "\b\u0005\b\u0100\b\b\n\b\f\b\u0103\t\b\u0001\t\u0001\t\u0001\t\u0001\t"+ + "\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ + "\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0003\r\u012a\b\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0003\r\u0132\b\r\u0001\r\u0005\r\u0135\b\r\n\r\f\r\u0138\t\r\u0001"+ + "\r\u0001\r\u0001\r\u0003\r\u013d\b\r\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ - "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f"+ - "\u0154\b\u000f\n\u000f\f\u000f\u0157\t\u000f\u0001\u000f\u0001\u000f\u0001"+ - "\u000f\u0001\u000f\u0003\u000f\u015d\b\u000f\u0001\u0010\u0001\u0010\u0001"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0158\b\u000f"+ + "\n\u000f\f\u000f\u015b\t\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0003\u000f\u0162\b\u000f\u0001\u0010\u0001\u0010\u0001"+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ - "\u0010\u016d\b\u0010\n\u0010\f\u0010\u0170\t\u0010\u0001\u0010\u0001\u0010"+ + "\u0010\u0172\b\u0010\n\u0010\f\u0010\u0175\t\u0010\u0001\u0010\u0001\u0010"+ "\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+ "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013"+ "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0003\u0014\u018e\b\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0003\u0014\u0193\b\u0014\u0001\u0014\u0001\u0014"+ "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ - "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u019c\b\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u01a1\b\u0014"+ "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ - "\u0001\u0016\u0001\u0016\u0003\u0016\u01be\b\u0016\u0001\u0017\u0001\u0017"+ - "\u0001\u0017\u0001\u0017\u0005\u0017\u01c4\b\u0017\n\u0017\f\u0017\u01c7"+ - "\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01cc\b\u0017"+ + "\u0001\u0016\u0001\u0016\u0003\u0016\u01c3\b\u0016\u0001\u0017\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0005\u0017\u01c9\b\u0017\n\u0017\f\u0017\u01cc"+ + "\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01d1\b\u0017"+ "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ - "\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01d7\b\u0018\n\u0018"+ - "\f\u0018\u01da\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ - "\u0001\u0019\u0001\u0019\u0003\u0019\u01e2\b\u0019\u0001\u0019\u0001\u0019"+ - "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01ea\b\u0019"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01dc\b\u0018\n\u0018"+ + "\f\u0018\u01df\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0003\u0019\u01e7\b\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01ef\b\u0019"+ "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001a\u0001\u001a\u0003\u001a\u01fa\b\u001a\u0001\u001a\u0001\u001a"+ - "\u0001\u001a\u0005\u001a\u01ff\b\u001a\n\u001a\f\u001a\u0202\t\u001a\u0001"+ + "\u0001\u001a\u0001\u001a\u0003\u001a\u01ff\b\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0005\u001a\u0204\b\u001a\n\u001a\f\u001a\u0207\t\u001a\u0001"+ "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u020e\b\u001b\u0001"+ - "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0213\b\u001b\n\u001b\f\u001b"+ - "\u0216\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u0213\b\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0218\b\u001b\n\u001b\f\u001b"+ + "\u021b\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ - "\u0222\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u0227\b"+ - "\u001c\n\u001c\f\u001c\u022a\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0227\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u022c\b"+ + "\u001c\n\u001c\f\u001c\u022f\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d"+ "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ - "\u0003\u001d\u0235\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ - "\u0001\u001d\u0001\u001d\u0003\u001d\u023d\b\u001d\u0001\u001e\u0001\u001e"+ + "\u0003\u001d\u023a\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0003\u001d\u0242\b\u001d\u0001\u001e\u0001\u001e"+ "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e"+ - "\u0246\b\u001e\n\u001e\f\u001e\u0249\t\u001e\u0001\u001e\u0001\u001e\u0001"+ - "\u001e\u0005\u001e\u024e\b\u001e\n\u001e\f\u001e\u0251\t\u001e\u0001\u001e"+ + "\u024b\b\u001e\n\u001e\f\u001e\u024e\t\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0005\u001e\u0253\b\u001e\n\u001e\f\u001e\u0256\t\u001e\u0001\u001e"+ "\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0270\b\u001f"+ - "\u0001\u001f\u0003\u001f\u0273\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ - " \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u028c"+ - "\b!\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001"+ - "#\u0003#\u0297\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0000\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014"+ - "\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001"+ - "\u0000\u001e\u001f\u02c3\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000"+ - "\u0000\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000"+ - "\u0000\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000"+ - "\f\u00b9\u0001\u0000\u0000\u0000\u000e\u00c3\u0001\u0000\u0000\u0000\u0010"+ - "\u00e9\u0001\u0000\u0000\u0000\u0012\u0101\u0001\u0000\u0000\u0000\u0014"+ - "\u0108\u0001\u0000\u0000\u0000\u0016\u010e\u0001\u0000\u0000\u0000\u0018"+ - "\u0117\u0001\u0000\u0000\u0000\u001a\u011d\u0001\u0000\u0000\u0000\u001c"+ - "\u013b\u0001\u0000\u0000\u0000\u001e\u015c\u0001\u0000\u0000\u0000 \u015e"+ - "\u0001\u0000\u0000\u0000\"\u0174\u0001\u0000\u0000\u0000$\u017c\u0001"+ - "\u0000\u0000\u0000&\u0182\u0001\u0000\u0000\u0000(\u0188\u0001\u0000\u0000"+ - "\u0000*\u01a1\u0001\u0000\u0000\u0000,\u01bd\u0001\u0000\u0000\u0000."+ - "\u01bf\u0001\u0000\u0000\u00000\u01cd\u0001\u0000\u0000\u00002\u01e9\u0001"+ - "\u0000\u0000\u00004\u01eb\u0001\u0000\u0000\u00006\u0203\u0001\u0000\u0000"+ - "\u00008\u0217\u0001\u0000\u0000\u0000:\u023c\u0001\u0000\u0000\u0000<"+ - "\u023e\u0001\u0000\u0000\u0000>\u0272\u0001\u0000\u0000\u0000@\u0274\u0001"+ - "\u0000\u0000\u0000B\u028b\u0001\u0000\u0000\u0000D\u028d\u0001\u0000\u0000"+ - "\u0000F\u0296\u0001\u0000\u0000\u0000H\u0298\u0001\u0000\u0000\u0000J"+ - "S\u0006\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000"+ - "\uffff\uffff\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000"+ - "OP\u0006\u0000\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000"+ - "\u0000\u0000QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001"+ - "\u0000\u0000\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000"+ - "US\u0001\u0000\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff"+ - "\u0000X\u0001\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000"+ - "Z[\u0005\u0001\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>"+ - "\u0000\u0000]^\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000"+ - "_`\u0006\u0001\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff"+ - "\uffff\u0000bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000"+ - "de\u0006\u0002\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000"+ - "\u0000gm\u0006\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000"+ - "\u0000jl\u0006\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001"+ - "\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000"+ - "n\u0085\u0001\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000"+ - "\u0000qr\u00053\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff"+ - "\u0000tu\u00050\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff"+ - "\uffff\u0000wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff"+ - "\uffff\u0000z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff"+ - "\uffff\u0000}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000"+ - "\u007f\u0082\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080"+ - "\u0081\u0001\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082"+ - "\u0080\u0001\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086"+ - "\u0001\u0000\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001"+ - "\u0000\u0000\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000"+ - "\u0000\u0000\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000"+ - "\u0000\u0000\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000"+ - "\u0000\u008b\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff"+ - "\u0000\u008d\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff"+ - "\u0000\u008f\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091"+ - "\u0092\u0006\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093"+ - "\u0094\u0005#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096"+ - "\u0006\u0003\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098"+ - "\u00030\u0018\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b"+ - "\u0001\u0000\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e"+ - "\u0001\u0000\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d"+ - "\u0001\u0000\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c"+ - "\u0001\u0000\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001"+ - "\u0000\u0000\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3"+ - "\u0005\u0001\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5"+ - "\u0006\u0004\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7"+ - "\u00052\u0000\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004"+ - "\uffff\uffff\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000"+ - "\u0000\u0000\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u0003"+ - "0\u0018\u0000\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u0005"+ - "7\u0000\u0000\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff"+ - "\uffff\u0000\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000"+ - "\u0000\u0000\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000"+ - "\u0000\u0000\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000"+ - "\u0000\u0000\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000"+ - "\u0000\u0000\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000"+ - "\u0000\u0000\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005"+ - "\u0007\u0000\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006"+ - "\uffff\uffff\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001"+ - "\u0000\u0000\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001"+ - "\u0000\u0000\u0000\u00c0\u00c1\u0006\u0006\uffff\uffff\u0000\u00c1\u00c2"+ - "\u0005;\u0000\u0000\u00c2\r\u0001\u0000\u0000\u0000\u00c3\u00c4\u0006"+ - "\u0007\uffff\uffff\u0000\u00c4\u00c5\u0005\b\u0000\u0000\u00c5\u00ce\u0006"+ - "\u0007\uffff\uffff\u0000\u00c6\u00c7\u0003\u0010\b\u0000\u00c7\u00c8\u0006"+ - "\u0007\uffff\uffff\u0000\u00c8\u00cf\u0001\u0000\u0000\u0000\u00c9\u00ca"+ - "\u00051\u0000\u0000\u00ca\u00cb\u0003\u0010\b\u0000\u00cb\u00cc\u0005"+ - "2\u0000\u0000\u00cc\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00cf\u0001"+ - "\u0000\u0000\u0000\u00ce\u00c6\u0001\u0000\u0000\u0000\u00ce\u00c9\u0001"+ - "\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0003"+ - ".\u0017\u0000\u00d1\u00d2\u0006\u0007\uffff\uffff\u0000\u00d2\u00dd\u0006"+ - "\u0007\uffff\uffff\u0000\u00d3\u00d4\u0005\n\u0000\u0000\u00d4\u00d5\u0005"+ - "1\u0000\u0000\u00d5\u00d6\u0003\u0010\b\u0000\u00d6\u00d7\u00052\u0000"+ - "\u0000\u00d7\u00d8\u0006\u0007\uffff\uffff\u0000\u00d8\u00d9\u0003.\u0017"+ - "\u0000\u00d9\u00da\u0006\u0007\uffff\uffff\u0000\u00da\u00dc\u0001\u0000"+ - "\u0000\u0000\u00db\u00d3\u0001\u0000\u0000\u0000\u00dc\u00df\u0001\u0000"+ - "\u0000\u0000\u00dd\u00db\u0001\u0000\u0000\u0000\u00dd\u00de\u0001\u0000"+ - "\u0000\u0000\u00de\u00e4\u0001\u0000\u0000\u0000\u00df\u00dd\u0001\u0000"+ - "\u0000\u0000\u00e0\u00e1\u0005\t\u0000\u0000\u00e1\u00e2\u0003.\u0017"+ - "\u0000\u00e2\u00e3\u0006\u0007\uffff\uffff\u0000\u00e3\u00e5\u0001\u0000"+ - "\u0000\u0000\u00e4\u00e0\u0001\u0000\u0000\u0000\u00e4\u00e5\u0001\u0000"+ - "\u0000\u0000\u00e5\u00e6\u0001\u0000\u0000\u0000\u00e6\u00e7\u0006\u0007"+ - "\uffff\uffff\u0000\u00e7\u00e8\u0005\u0002\u0000\u0000\u00e8\u000f\u0001"+ - "\u0000\u0000\u0000\u00e9\u00fe\u0006\b\uffff\uffff\u0000\u00ea\u00eb\u0005"+ - "1\u0000\u0000\u00eb\u00ec\u00030\u0018\u0000\u00ec\u00ed\u0006\b\uffff"+ - "\uffff\u0000\u00ed\u00f9\u00052\u0000\u0000\u00ee\u00f0\u0007\u0000\u0000"+ - "\u0000\u00ef\u00f1\u00051\u0000\u0000\u00f0\u00ef\u0001\u0000\u0000\u0000"+ - "\u00f0\u00f1\u0001\u0000\u0000\u0000\u00f1\u00f2\u0001\u0000\u0000\u0000"+ - "\u00f2\u00f3\u0003\u0010\b\u0000\u00f3\u00f5\u0006\b\uffff\uffff\u0000"+ - "\u00f4\u00f6\u00052\u0000\u0000\u00f5\u00f4\u0001\u0000\u0000\u0000\u00f5"+ - "\u00f6\u0001\u0000\u0000\u0000\u00f6\u00f8\u0001\u0000\u0000\u0000\u00f7"+ - "\u00ee\u0001\u0000\u0000\u0000\u00f8\u00fb\u0001\u0000\u0000\u0000\u00f9"+ - "\u00f7\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa"+ - "\u00fd\u0001\u0000\u0000\u0000\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fc"+ - "\u00ea\u0001\u0000\u0000\u0000\u00fd\u0100\u0001\u0000\u0000\u0000\u00fe"+ - "\u00fc\u0001\u0000\u0000\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff"+ - "\u0011\u0001\u0000\u0000\u0000\u0100\u00fe\u0001\u0000\u0000\u0000\u0101"+ - "\u0102\u0005\u0004\u0000\u0000\u0102\u0103\u00051\u0000\u0000\u0103\u0104"+ - "\u00030\u0018\u0000\u0104\u0105\u0006\t\uffff\uffff\u0000\u0105\u0106"+ - "\u00052\u0000\u0000\u0106\u0107\u0005;\u0000\u0000\u0107\u0013\u0001\u0000"+ - "\u0000\u0000\u0108\u0109\u0005\u0006\u0000\u0000\u0109\u010a\u00051\u0000"+ - "\u0000\u010a\u010b\u00030\u0018\u0000\u010b\u010c\u0006\n\uffff\uffff"+ - "\u0000\u010c\u010d\u00052\u0000\u0000\u010d\u0015\u0001\u0000\u0000\u0000"+ - "\u010e\u010f\u0005\u0005\u0000\u0000\u010f\u0110\u00051\u0000\u0000\u0110"+ - "\u0111\u00030\u0018\u0000\u0111\u0112\u00057\u0000\u0000\u0112\u0113\u0003"+ - "0\u0018\u0000\u0113\u0114\u00052\u0000\u0000\u0114\u0115\u0005;\u0000"+ - "\u0000\u0115\u0116\u0006\u000b\uffff\uffff\u0000\u0116\u0017\u0001\u0000"+ - "\u0000\u0000\u0117\u0118\u0005\u000e\u0000\u0000\u0118\u0119\u0005\u0011"+ - "\u0000\u0000\u0119\u011a\u0003\u001a\r\u0000\u011a\u011b\u0006\f\uffff"+ - "\uffff\u0000\u011b\u011c\u0005\u0002\u0000\u0000\u011c\u0019\u0001\u0000"+ - "\u0000\u0000\u011d\u0133\u0006\r\uffff\uffff\u0000\u011e\u011f\u0003,"+ - "\u0016\u0000\u011f\u0120\u0006\r\uffff\uffff\u0000\u0120\u0132\u0001\u0000"+ - "\u0000\u0000\u0121\u0126\u0005(\u0000\u0000\u0122\u0123\u0005\b\u0000"+ - "\u0000\u0123\u0124\u0003\u0010\b\u0000\u0124\u0125\u0006\r\uffff\uffff"+ - "\u0000\u0125\u0127\u0001\u0000\u0000\u0000\u0126\u0122\u0001\u0000\u0000"+ - "\u0000\u0126\u0127\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000"+ - "\u0000\u0128\u0132\u0005;\u0000\u0000\u0129\u012e\u0005)\u0000\u0000\u012a"+ - "\u012b\u0005\b\u0000\u0000\u012b\u012c\u0003\u0010\b\u0000\u012c\u012d"+ - "\u0006\r\uffff\uffff\u0000\u012d\u012f\u0001\u0000\u0000\u0000\u012e\u012a"+ - "\u0001\u0000\u0000\u0000\u012e\u012f\u0001\u0000\u0000\u0000\u012f\u0130"+ - "\u0001\u0000\u0000\u0000\u0130\u0132\u0005;\u0000\u0000\u0131\u011e\u0001"+ - "\u0000\u0000\u0000\u0131\u0121\u0001\u0000\u0000\u0000\u0131\u0129\u0001"+ - "\u0000\u0000\u0000\u0132\u0135\u0001\u0000\u0000\u0000\u0133\u0131\u0001"+ - "\u0000\u0000\u0000\u0133\u0134\u0001\u0000\u0000\u0000\u0134\u0139\u0001"+ - "\u0000\u0000\u0000\u0135\u0133\u0001\u0000\u0000\u0000\u0136\u0137\u0003"+ - "\f\u0006\u0000\u0137\u0138\u0006\r\uffff\uffff\u0000\u0138\u013a\u0001"+ - "\u0000\u0000\u0000\u0139\u0136\u0001\u0000\u0000\u0000\u0139\u013a\u0001"+ - "\u0000\u0000\u0000\u013a\u001b\u0001\u0000\u0000\u0000\u013b\u013c\u0005"+ - "\u000f\u0000\u0000\u013c\u013d\u0005>\u0000\u0000\u013d\u013e\u0005\u0010"+ - "\u0000\u0000\u013e\u013f\u0003\u001e\u000f\u0000\u013f\u0140\u0003\u001a"+ - "\r\u0000\u0140\u0141\u0005\u0002\u0000\u0000\u0141\u0142\u0006\u000e\uffff"+ - "\uffff\u0000\u0142\u001d\u0001\u0000\u0000\u0000\u0143\u0144\u0006\u000f"+ - "\uffff\uffff\u0000\u0144\u0145\u00051\u0000\u0000\u0145\u0146\u00030\u0018"+ - "\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0148\u00059\u0000"+ - "\u0000\u0148\u0149\u00030\u0018\u0000\u0149\u014a\u0006\u000f\uffff\uffff"+ - "\u0000\u014a\u014b\u00052\u0000\u0000\u014b\u015d\u0001\u0000\u0000\u0000"+ - "\u014c\u014d\u00053\u0000\u0000\u014d\u014e\u00030\u0018\u0000\u014e\u0155"+ - "\u0006\u000f\uffff\uffff\u0000\u014f\u0150\u00057\u0000\u0000\u0150\u0151"+ - "\u00030\u0018\u0000\u0151\u0152\u0006\u000f\uffff\uffff\u0000\u0152\u0154"+ - "\u0001\u0000\u0000\u0000\u0153\u014f\u0001\u0000\u0000\u0000\u0154\u0157"+ - "\u0001\u0000\u0000\u0000\u0155\u0153\u0001\u0000\u0000\u0000\u0155\u0156"+ - "\u0001\u0000\u0000\u0000\u0156\u0158\u0001\u0000\u0000\u0000\u0157\u0155"+ - "\u0001\u0000\u0000\u0000\u0158\u0159\u00054\u0000\u0000\u0159\u015d\u0001"+ - "\u0000\u0000\u0000\u015a\u015b\u0005>\u0000\u0000\u015b\u015d\u0006\u000f"+ - "\uffff\uffff\u0000\u015c\u0143\u0001\u0000\u0000\u0000\u015c\u014c\u0001"+ - "\u0000\u0000\u0000\u015c\u015a\u0001\u0000\u0000\u0000\u015d\u001f\u0001"+ - "\u0000\u0000\u0000\u015e\u015f\u0006\u0010\uffff\uffff\u0000\u015f\u0160"+ - "\u00053\u0000\u0000\u0160\u0161\u00030\u0018\u0000\u0161\u0162\u0005$"+ - "\u0000\u0000\u0162\u0163\u0005>\u0000\u0000\u0163\u0164\u0005*\u0000\u0000"+ - "\u0164\u0165\u0003\u001e\u000f\u0000\u0165\u0166\u00057\u0000\u0000\u0166"+ - "\u0167\u00030\u0018\u0000\u0167\u016e\u0006\u0010\uffff\uffff\u0000\u0168"+ - "\u0169\u00057\u0000\u0000\u0169\u016a\u00030\u0018\u0000\u016a\u016b\u0006"+ - "\u0010\uffff\uffff\u0000\u016b\u016d\u0001\u0000\u0000\u0000\u016c\u0168"+ - "\u0001\u0000\u0000\u0000\u016d\u0170\u0001\u0000\u0000\u0000\u016e\u016c"+ - "\u0001\u0000\u0000\u0000\u016e\u016f\u0001\u0000\u0000\u0000\u016f\u0171"+ - "\u0001\u0000\u0000\u0000\u0170\u016e\u0001\u0000\u0000\u0000\u0171\u0172"+ - "\u0006\u0010\uffff\uffff\u0000\u0172\u0173\u00054\u0000\u0000\u0173!\u0001"+ - "\u0000\u0000\u0000\u0174\u0175\u0005>\u0000\u0000\u0175\u0176\u00058\u0000"+ - "\u0000\u0176\u0177\u0005\r\u0000\u0000\u0177\u0178\u00051\u0000\u0000"+ - "\u0178\u0179\u00030\u0018\u0000\u0179\u017a\u00052\u0000\u0000\u017a\u017b"+ - "\u0006\u0011\uffff\uffff\u0000\u017b#\u0001\u0000\u0000\u0000\u017c\u017d"+ - "\u0005\u0012\u0000\u0000\u017d\u017e\u00051\u0000\u0000\u017e\u017f\u0003"+ - "0\u0018\u0000\u017f\u0180\u00052\u0000\u0000\u0180\u0181\u0006\u0012\uffff"+ - "\uffff\u0000\u0181%\u0001\u0000\u0000\u0000\u0182\u0183\u0005\u0013\u0000"+ - "\u0000\u0183\u0184\u00051\u0000\u0000\u0184\u0185\u00030\u0018\u0000\u0185"+ - "\u0186\u00052\u0000\u0000\u0186\u0187\u0006\u0013\uffff\uffff\u0000\u0187"+ - "\'\u0001\u0000\u0000\u0000\u0188\u0189\u0006\u0014\uffff\uffff\u0000\u0189"+ - "\u018d\u0005>\u0000\u0000\u018a\u018b\u0003*\u0015\u0000\u018b\u018c\u0006"+ - "\u0014\uffff\uffff\u0000\u018c\u018e\u0001\u0000\u0000\u0000\u018d\u018a"+ - "\u0001\u0000\u0000\u0000\u018d\u018e\u0001\u0000\u0000\u0000\u018e\u019b"+ - "\u0001\u0000\u0000\u0000\u018f\u0190\u00050\u0000\u0000\u0190\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u0191\u0192\u0005+\u0000\u0000\u0192\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u0193\u0194\u0005,\u0000\u0000\u0194\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u0195\u0196\u0005.\u0000\u0000\u0196\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u0197\u0198\u0005-\u0000\u0000\u0198\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u0199\u019a\u0005/\u0000\u0000\u019a\u019c\u0006"+ - "\u0014\uffff\uffff\u0000\u019b\u018f\u0001\u0000\u0000\u0000\u019b\u0191"+ - "\u0001\u0000\u0000\u0000\u019b\u0193\u0001\u0000\u0000\u0000\u019b\u0195"+ - "\u0001\u0000\u0000\u0000\u019b\u0197\u0001\u0000\u0000\u0000\u019b\u0199"+ - "\u0001\u0000\u0000\u0000\u019c\u019d\u0001\u0000\u0000\u0000\u019d\u019e"+ - "\u00030\u0018\u0000\u019e\u019f\u0005;\u0000\u0000\u019f\u01a0\u0006\u0014"+ - "\uffff\uffff\u0000\u01a0)\u0001\u0000\u0000\u0000\u01a1\u01a2\u00053\u0000"+ - "\u0000\u01a2\u01a3\u00030\u0018\u0000\u01a3\u01a4\u0006\u0015\uffff\uffff"+ - "\u0000\u01a4\u01a5\u00054\u0000\u0000\u01a5+\u0001\u0000\u0000\u0000\u01a6"+ - "\u01a7\u0003\u000e\u0007\u0000\u01a7\u01a8\u0006\u0016\uffff\uffff\u0000"+ - "\u01a8\u01be\u0001\u0000\u0000\u0000\u01a9\u01aa\u0003\u0018\f\u0000\u01aa"+ - "\u01ab\u0006\u0016\uffff\uffff\u0000\u01ab\u01be\u0001\u0000\u0000\u0000"+ - "\u01ac\u01ad\u0003\u001c\u000e\u0000\u01ad\u01ae\u0006\u0016\uffff\uffff"+ - "\u0000\u01ae\u01be\u0001\u0000\u0000\u0000\u01af\u01b0\u0003\u0012\t\u0000"+ - "\u01b0\u01b1\u0006\u0016\uffff\uffff\u0000\u01b1\u01be\u0001\u0000\u0000"+ - "\u0000\u01b2\u01b3\u0003\u0016\u000b\u0000\u01b3\u01b4\u0006\u0016\uffff"+ - "\uffff\u0000\u01b4\u01be\u0001\u0000\u0000\u0000\u01b5\u01b6\u00030\u0018"+ - "\u0000\u01b6\u01b7\u0006\u0016\uffff\uffff\u0000\u01b7\u01b8\u0006\u0016"+ - "\uffff\uffff\u0000\u01b8\u01b9\u0005;\u0000\u0000\u01b9\u01be\u0001\u0000"+ - "\u0000\u0000\u01ba\u01bb\u0003(\u0014\u0000\u01bb\u01bc\u0006\u0016\uffff"+ - "\uffff\u0000\u01bc\u01be\u0001\u0000\u0000\u0000\u01bd\u01a6\u0001\u0000"+ - "\u0000\u0000\u01bd\u01a9\u0001\u0000\u0000\u0000\u01bd\u01ac\u0001\u0000"+ - "\u0000\u0000\u01bd\u01af\u0001\u0000\u0000\u0000\u01bd\u01b2\u0001\u0000"+ - "\u0000\u0000\u01bd\u01b5\u0001\u0000\u0000\u0000\u01bd\u01ba\u0001\u0000"+ - "\u0000\u0000\u01be-\u0001\u0000\u0000\u0000\u01bf\u01c5\u0006\u0017\uffff"+ - "\uffff\u0000\u01c0\u01c1\u0003,\u0016\u0000\u01c1\u01c2\u0006\u0017\uffff"+ - "\uffff\u0000\u01c2\u01c4\u0001\u0000\u0000\u0000\u01c3\u01c0\u0001\u0000"+ - "\u0000\u0000\u01c4\u01c7\u0001\u0000\u0000\u0000\u01c5\u01c3\u0001\u0000"+ - "\u0000\u0000\u01c5\u01c6\u0001\u0000\u0000\u0000\u01c6\u01cb\u0001\u0000"+ - "\u0000\u0000\u01c7\u01c5\u0001\u0000\u0000\u0000\u01c8\u01c9\u0003\f\u0006"+ - "\u0000\u01c9\u01ca\u0006\u0017\uffff\uffff\u0000\u01ca\u01cc\u0001\u0000"+ - "\u0000\u0000\u01cb\u01c8\u0001\u0000\u0000\u0000\u01cb\u01cc\u0001\u0000"+ - "\u0000\u0000\u01cc/\u0001\u0000\u0000\u0000\u01cd\u01ce\u0006\u0018\uffff"+ - "\uffff\u0000\u01ce\u01cf\u00032\u0019\u0000\u01cf\u01d0\u0006\u0018\uffff"+ - "\uffff\u0000\u01d0\u01d8\u0001\u0000\u0000\u0000\u01d1\u01d2\n\u0002\u0000"+ - "\u0000\u01d2\u01d3\u0005%\u0000\u0000\u01d3\u01d4\u00032\u0019\u0000\u01d4"+ - "\u01d5\u0006\u0018\uffff\uffff\u0000\u01d5\u01d7\u0001\u0000\u0000\u0000"+ - "\u01d6\u01d1\u0001\u0000\u0000\u0000\u01d7\u01da\u0001\u0000\u0000\u0000"+ - "\u01d8\u01d6\u0001\u0000\u0000\u0000\u01d8\u01d9\u0001\u0000\u0000\u0000"+ - "\u01d91\u0001\u0000\u0000\u0000\u01da\u01d8\u0001\u0000\u0000\u0000\u01db"+ - "\u01dc\u00034\u001a\u0000\u01dc\u01e1\u0006\u0019\uffff\uffff\u0000\u01dd"+ - "\u01de\u0005\u0018\u0000\u0000\u01de\u01e2\u0006\u0019\uffff\uffff\u0000"+ - "\u01df\u01e0\u0005\u0019\u0000\u0000\u01e0\u01e2\u0006\u0019\uffff\uffff"+ - "\u0000\u01e1\u01dd\u0001\u0000\u0000\u0000\u01e1\u01df\u0001\u0000\u0000"+ - "\u0000\u01e2\u01e3\u0001\u0000\u0000\u0000\u01e3\u01e4\u00034\u001a\u0000"+ - "\u01e4\u01e5\u0006\u0019\uffff\uffff\u0000\u01e5\u01ea\u0001\u0000\u0000"+ - "\u0000\u01e6\u01e7\u00034\u001a\u0000\u01e7\u01e8\u0006\u0019\uffff\uffff"+ - "\u0000\u01e8\u01ea\u0001\u0000\u0000\u0000\u01e9\u01db\u0001\u0000\u0000"+ - "\u0000\u01e9\u01e6\u0001\u0000\u0000\u0000\u01ea3\u0001\u0000\u0000\u0000"+ - "\u01eb\u01ec\u0006\u001a\uffff\uffff\u0000\u01ec\u01ed\u00036\u001b\u0000"+ - "\u01ed\u01ee\u0006\u001a\uffff\uffff\u0000\u01ee\u0200\u0001\u0000\u0000"+ - "\u0000\u01ef\u01f0\n\u0002\u0000\u0000\u01f0\u01f9\u0006\u001a\uffff\uffff"+ - "\u0000\u01f1\u01f2\u0005\u001c\u0000\u0000\u01f2\u01fa\u0006\u001a\uffff"+ - "\uffff\u0000\u01f3\u01f4\u0005\u001d\u0000\u0000\u01f4\u01fa\u0006\u001a"+ - "\uffff\uffff\u0000\u01f5\u01f6\u0005\u001a\u0000\u0000\u01f6\u01fa\u0006"+ - "\u001a\uffff\uffff\u0000\u01f7\u01f8\u0005\u001b\u0000\u0000\u01f8\u01fa"+ - "\u0006\u001a\uffff\uffff\u0000\u01f9\u01f1\u0001\u0000\u0000\u0000\u01f9"+ - "\u01f3\u0001\u0000\u0000\u0000\u01f9\u01f5\u0001\u0000\u0000\u0000\u01f9"+ - "\u01f7\u0001\u0000\u0000\u0000\u01fa\u01fb\u0001\u0000\u0000\u0000\u01fb"+ - "\u01fc\u00036\u001b\u0000\u01fc\u01fd\u0006\u001a\uffff\uffff\u0000\u01fd"+ - "\u01ff\u0001\u0000\u0000\u0000\u01fe\u01ef\u0001\u0000\u0000\u0000\u01ff"+ - "\u0202\u0001\u0000\u0000\u0000\u0200\u01fe\u0001\u0000\u0000\u0000\u0200"+ - "\u0201\u0001\u0000\u0000\u0000\u02015\u0001\u0000\u0000\u0000\u0202\u0200"+ - "\u0001\u0000\u0000\u0000\u0203\u0204\u0006\u001b\uffff\uffff\u0000\u0204"+ - "\u0205\u00038\u001c\u0000\u0205\u0206\u0006\u001b\uffff\uffff\u0000\u0206"+ - "\u0214\u0001\u0000\u0000\u0000\u0207\u0208\n\u0002\u0000\u0000\u0208\u020d"+ - "\u0006\u001b\uffff\uffff\u0000\u0209\u020a\u0005\u0014\u0000\u0000\u020a"+ - "\u020e\u0006\u001b\uffff\uffff\u0000\u020b\u020c\u0005\u0015\u0000\u0000"+ - "\u020c\u020e\u0006\u001b\uffff\uffff\u0000\u020d\u0209\u0001\u0000\u0000"+ - "\u0000\u020d\u020b\u0001\u0000\u0000\u0000\u020e\u020f\u0001\u0000\u0000"+ - "\u0000\u020f\u0210\u00038\u001c\u0000\u0210\u0211\u0006\u001b\uffff\uffff"+ - "\u0000\u0211\u0213\u0001\u0000\u0000\u0000\u0212\u0207\u0001\u0000\u0000"+ - "\u0000\u0213\u0216\u0001\u0000\u0000\u0000\u0214\u0212\u0001\u0000\u0000"+ - "\u0000\u0214\u0215\u0001\u0000\u0000\u0000\u02157\u0001\u0000\u0000\u0000"+ - "\u0216\u0214\u0001\u0000\u0000\u0000\u0217\u0218\u0006\u001c\uffff\uffff"+ - "\u0000\u0218\u0219\u0003:\u001d\u0000\u0219\u021a\u0006\u001c\uffff\uffff"+ - "\u0000\u021a\u0228\u0001\u0000\u0000\u0000\u021b\u021c\n\u0002\u0000\u0000"+ - "\u021c\u0221\u0006\u001c\uffff\uffff\u0000\u021d\u021e\u0005\u0016\u0000"+ - "\u0000\u021e\u0222\u0006\u001c\uffff\uffff\u0000\u021f\u0220\u0005\u0017"+ - "\u0000\u0000\u0220\u0222\u0006\u001c\uffff\uffff\u0000\u0221\u021d\u0001"+ - "\u0000\u0000\u0000\u0221\u021f\u0001\u0000\u0000\u0000\u0222\u0223\u0001"+ - "\u0000\u0000\u0000\u0223\u0224\u0003:\u001d\u0000\u0224\u0225\u0006\u001c"+ - "\uffff\uffff\u0000\u0225\u0227\u0001\u0000\u0000\u0000\u0226\u021b\u0001"+ - "\u0000\u0000\u0000\u0227\u022a\u0001\u0000\u0000\u0000\u0228\u0226\u0001"+ - "\u0000\u0000\u0000\u0228\u0229\u0001\u0000\u0000\u0000\u02299\u0001\u0000"+ - "\u0000\u0000\u022a\u0228\u0001\u0000\u0000\u0000\u022b\u0234\u0006\u001d"+ - "\uffff\uffff\u0000\u022c\u022d\u0005 \u0000\u0000\u022d\u0235\u0006\u001d"+ - "\uffff\uffff\u0000\u022e\u022f\u0005\u0015\u0000\u0000\u022f\u0235\u0006"+ - "\u001d\uffff\uffff\u0000\u0230\u0231\u0005!\u0000\u0000\u0231\u0235\u0006"+ - "\u001d\uffff\uffff\u0000\u0232\u0233\u0005\"\u0000\u0000\u0233\u0235\u0006"+ - "\u001d\uffff\uffff\u0000\u0234\u022c\u0001\u0000\u0000\u0000\u0234\u022e"+ - "\u0001\u0000\u0000\u0000\u0234\u0230\u0001\u0000\u0000\u0000\u0234\u0232"+ - "\u0001\u0000\u0000\u0000\u0235\u0236\u0001\u0000\u0000\u0000\u0236\u0237"+ - "\u0003<\u001e\u0000\u0237\u0238\u0006\u001d\uffff\uffff\u0000\u0238\u023d"+ - "\u0001\u0000\u0000\u0000\u0239\u023a\u0003<\u001e\u0000\u023a\u023b\u0006"+ - "\u001d\uffff\uffff\u0000\u023b\u023d\u0001\u0000\u0000\u0000\u023c\u022b"+ - "\u0001\u0000\u0000\u0000\u023c\u0239\u0001\u0000\u0000\u0000\u023d;\u0001"+ - "\u0000\u0000\u0000\u023e\u023f\u0006\u001e\uffff\uffff\u0000\u023f\u0247"+ - "\u0003>\u001f\u0000\u0240\u0241\u00051\u0000\u0000\u0241\u0242\u0003\n"+ - "\u0005\u0000\u0242\u0243\u0006\u001e\uffff\uffff\u0000\u0243\u0244\u0005"+ - "2\u0000\u0000\u0244\u0246\u0001\u0000\u0000\u0000\u0245\u0240\u0001\u0000"+ - "\u0000\u0000\u0246\u0249\u0001\u0000\u0000\u0000\u0247\u0245\u0001\u0000"+ - "\u0000\u0000\u0247\u0248\u0001\u0000\u0000\u0000\u0248\u024f\u0001\u0000"+ - "\u0000\u0000\u0249\u0247\u0001\u0000\u0000\u0000\u024a\u024b\u0003*\u0015"+ - "\u0000\u024b\u024c\u0006\u001e\uffff\uffff\u0000\u024c\u024e\u0001\u0000"+ - "\u0000\u0000\u024d\u024a\u0001\u0000\u0000\u0000\u024e\u0251\u0001\u0000"+ - "\u0000\u0000\u024f\u024d\u0001\u0000\u0000\u0000\u024f\u0250\u0001\u0000"+ - "\u0000\u0000\u0250\u0252\u0001\u0000\u0000\u0000\u0251\u024f\u0001\u0000"+ - "\u0000\u0000\u0252\u0253\u0006\u001e\uffff\uffff\u0000\u0253=\u0001\u0000"+ - "\u0000\u0000\u0254\u0255\u0003B!\u0000\u0255\u0256\u0006\u001f\uffff\uffff"+ - "\u0000\u0256\u0273\u0001\u0000\u0000\u0000\u0257\u0258\u0005>\u0000\u0000"+ - "\u0258\u0273\u0006\u001f\uffff\uffff\u0000\u0259\u025a\u0003@ \u0000\u025a"+ - "\u025b\u0006\u001f\uffff\uffff\u0000\u025b\u0273\u0001\u0000\u0000\u0000"+ - "\u025c\u025d\u0003$\u0012\u0000\u025d\u025e\u0006\u001f\uffff\uffff\u0000"+ - "\u025e\u0273\u0001\u0000\u0000\u0000\u025f\u0260\u0003&\u0013\u0000\u0260"+ - "\u0261\u0006\u001f\uffff\uffff\u0000\u0261\u0273\u0001\u0000\u0000\u0000"+ - "\u0262\u0263\u0003\"\u0011\u0000\u0263\u0264\u0006\u001f\uffff\uffff\u0000"+ - "\u0264\u0273\u0001\u0000\u0000\u0000\u0265\u0266\u0003 \u0010\u0000\u0266"+ - "\u0267\u0006\u001f\uffff\uffff\u0000\u0267\u0273\u0001\u0000\u0000\u0000"+ - "\u0268\u0269\u0003\u0014\n\u0000\u0269\u026a\u0006\u001f\uffff\uffff\u0000"+ - "\u026a\u0273\u0001\u0000\u0000\u0000\u026b\u026f\u00051\u0000\u0000\u026c"+ - "\u026d\u00030\u0018\u0000\u026d\u026e\u0006\u001f\uffff\uffff\u0000\u026e"+ - "\u0270\u0001\u0000\u0000\u0000\u026f\u026c\u0001\u0000\u0000\u0000\u026f"+ - "\u0270\u0001\u0000\u0000\u0000\u0270\u0271\u0001\u0000\u0000\u0000\u0271"+ - "\u0273\u00052\u0000\u0000\u0272\u0254\u0001\u0000\u0000\u0000\u0272\u0257"+ - "\u0001\u0000\u0000\u0000\u0272\u0259\u0001\u0000\u0000\u0000\u0272\u025c"+ - "\u0001\u0000\u0000\u0000\u0272\u025f\u0001\u0000\u0000\u0000\u0272\u0262"+ - "\u0001\u0000\u0000\u0000\u0272\u0265\u0001\u0000\u0000\u0000\u0272\u0268"+ - "\u0001\u0000\u0000\u0000\u0272\u026b\u0001\u0000\u0000\u0000\u0273?\u0001"+ - "\u0000\u0000\u0000\u0274\u0275\u0005*\u0000\u0000\u0275\u0276\u0003\u0004"+ - "\u0002\u0000\u0276\u0277\u00055\u0000\u0000\u0277\u0278\u0003.\u0017\u0000"+ - "\u0278\u0279\u00056\u0000\u0000\u0279\u027a\u0003\n\u0005\u0000\u027a"+ - "\u027b\u0006 \uffff\uffff\u0000\u027bA\u0001\u0000\u0000\u0000\u027c\u027d"+ - "\u0003F#\u0000\u027d\u027e\u0006!\uffff\uffff\u0000\u027e\u028c\u0001"+ - "\u0000\u0000\u0000\u027f\u0280\u0005?\u0000\u0000\u0280\u028c\u0006!\uffff"+ - "\uffff\u0000\u0281\u0282\u0005<\u0000\u0000\u0282\u028c\u0006!\uffff\uffff"+ - "\u0000\u0283\u0284\u0005=\u0000\u0000\u0284\u028c\u0006!\uffff\uffff\u0000"+ - "\u0285\u0286\u0003D\"\u0000\u0286\u0287\u0006!\uffff\uffff\u0000\u0287"+ - "\u028c\u0001\u0000\u0000\u0000\u0288\u0289\u0003H$\u0000\u0289\u028a\u0006"+ - "!\uffff\uffff\u0000\u028a\u028c\u0001\u0000\u0000\u0000\u028b\u027c\u0001"+ - "\u0000\u0000\u0000\u028b\u027f\u0001\u0000\u0000\u0000\u028b\u0281\u0001"+ - "\u0000\u0000\u0000\u028b\u0283\u0001\u0000\u0000\u0000\u028b\u0285\u0001"+ - "\u0000\u0000\u0000\u028b\u0288\u0001\u0000\u0000\u0000\u028cC\u0001\u0000"+ - "\u0000\u0000\u028d\u028e\u00053\u0000\u0000\u028e\u028f\u0003\n\u0005"+ - "\u0000\u028f\u0290\u00054\u0000\u0000\u0290\u0291\u0006\"\uffff\uffff"+ - "\u0000\u0291E\u0001\u0000\u0000\u0000\u0292\u0293\u0005&\u0000\u0000\u0293"+ - "\u0297\u0006#\uffff\uffff\u0000\u0294\u0295\u0005\'\u0000\u0000\u0295"+ - "\u0297\u0006#\uffff\uffff\u0000\u0296\u0292\u0001\u0000\u0000\u0000\u0296"+ - "\u0294\u0001\u0000\u0000\u0000\u0297G\u0001\u0000\u0000\u0000\u0298\u0299"+ - "\u0005\u000b\u0000\u0000\u0299\u029a\u00051\u0000\u0000\u029a\u029b\u0005"+ - ":\u0000\u0000\u029b\u029c\u0005>\u0000\u0000\u029c\u029d\u00052\u0000"+ - "\u0000\u029d\u029e\u0006$\uffff\uffff\u0000\u029eI\u0001\u0000\u0000\u0000"+ - "/QSm\u0080\u0085\u0087\u009c\u00b4\u00b7\u00be\u00ce\u00dd\u00e4\u00f0"+ - "\u00f5\u00f9\u00fe\u0126\u012e\u0131\u0133\u0139\u0155\u015c\u016e\u018d"+ - "\u019b\u01bd\u01c5\u01cb\u01d8\u01e1\u01e9\u01f9\u0200\u020d\u0214\u0221"+ - "\u0228\u0234\u023c\u0247\u024f\u026f\u0272\u028b\u0296"; + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0275\b\u001f"+ + "\u0001\u001f\u0003\u001f\u0278\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0290\b!\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0003#"+ + "\u029b\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0000"+ + "\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016"+ + "\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001\u0000"+ + "\u001e\u001f\u02c8\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000\u0000"+ + "\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000\u0000"+ + "\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000\f\u00b9"+ + "\u0001\u0000\u0000\u0000\u000e\u00c3\u0001\u0000\u0000\u0000\u0010\u00ec"+ + "\u0001\u0000\u0000\u0000\u0012\u0104\u0001\u0000\u0000\u0000\u0014\u010b"+ + "\u0001\u0000\u0000\u0000\u0016\u0111\u0001\u0000\u0000\u0000\u0018\u011a"+ + "\u0001\u0000\u0000\u0000\u001a\u0120\u0001\u0000\u0000\u0000\u001c\u013e"+ + "\u0001\u0000\u0000\u0000\u001e\u0161\u0001\u0000\u0000\u0000 \u0163\u0001"+ + "\u0000\u0000\u0000\"\u0179\u0001\u0000\u0000\u0000$\u0181\u0001\u0000"+ + "\u0000\u0000&\u0187\u0001\u0000\u0000\u0000(\u018d\u0001\u0000\u0000\u0000"+ + "*\u01a6\u0001\u0000\u0000\u0000,\u01c2\u0001\u0000\u0000\u0000.\u01c4"+ + "\u0001\u0000\u0000\u00000\u01d2\u0001\u0000\u0000\u00002\u01ee\u0001\u0000"+ + "\u0000\u00004\u01f0\u0001\u0000\u0000\u00006\u0208\u0001\u0000\u0000\u0000"+ + "8\u021c\u0001\u0000\u0000\u0000:\u0241\u0001\u0000\u0000\u0000<\u0243"+ + "\u0001\u0000\u0000\u0000>\u0277\u0001\u0000\u0000\u0000@\u0279\u0001\u0000"+ + "\u0000\u0000B\u028f\u0001\u0000\u0000\u0000D\u0291\u0001\u0000\u0000\u0000"+ + "F\u029a\u0001\u0000\u0000\u0000H\u029c\u0001\u0000\u0000\u0000JS\u0006"+ + "\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000\uffff"+ + "\uffff\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000OP\u0006"+ + "\u0000\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000\u0000"+ + "\u0000QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001\u0000"+ + "\u0000\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000US\u0001"+ + "\u0000\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff\u0000"+ + "X\u0001\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000Z[\u0005"+ + "\u0001\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>\u0000\u0000"+ + "]^\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000_`\u0006\u0001"+ + "\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff\uffff\u0000"+ + "bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000de\u0006\u0002"+ + "\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000\u0000gm\u0006"+ + "\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000\u0000jl\u0006"+ + "\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000"+ + "\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0085\u0001"+ + "\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000\u0000qr\u0005"+ + "3\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff\u0000tu\u0005"+ + "0\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff\uffff\u0000"+ + "wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff\uffff\u0000"+ + "z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff\uffff\u0000"+ + "}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000\u007f\u0082"+ + "\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080\u0081\u0001"+ + "\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082\u0080\u0001"+ + "\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086\u0001\u0000"+ + "\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000"+ + "\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000\u0000\u0000"+ + "\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000"+ + "\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000\u0000\u008b"+ + "\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff\u0000\u008d"+ + "\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff\u0000\u008f"+ + "\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091\u0092\u0006"+ + "\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093\u0094\u0005"+ + "#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096\u0006\u0003"+ + "\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098\u00030\u0018"+ + "\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b\u0001\u0000"+ + "\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e\u0001\u0000"+ + "\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+ + "\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000"+ + "\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001\u0000\u0000"+ + "\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3\u0005\u0001"+ + "\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5\u0006\u0004"+ + "\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7\u00052\u0000"+ + "\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004\uffff\uffff"+ + "\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000\u0000\u0000"+ + "\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u00030\u0018\u0000"+ + "\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u00057\u0000\u0000"+ + "\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff\uffff\u0000"+ + "\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000\u0000\u0000"+ + "\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000"+ + "\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000"+ + "\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000\u0000\u0000"+ + "\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000\u0000\u0000"+ + "\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005\u0007\u0000"+ + "\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006\uffff\uffff"+ + "\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001\u0000\u0000"+ + "\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000"+ + "\u0000\u00c0\u00c1\u0006\u0006\uffff\uffff\u0000\u00c1\u00c2\u0005;\u0000"+ + "\u0000\u00c2\r\u0001\u0000\u0000\u0000\u00c3\u00c4\u0006\u0007\uffff\uffff"+ + "\u0000\u00c4\u00c5\u0005\b\u0000\u0000\u00c5\u00ce\u0006\u0007\uffff\uffff"+ + "\u0000\u00c6\u00c7\u0003\u0010\b\u0000\u00c7\u00c8\u0006\u0007\uffff\uffff"+ + "\u0000\u00c8\u00cf\u0001\u0000\u0000\u0000\u00c9\u00ca\u00051\u0000\u0000"+ + "\u00ca\u00cb\u0003\u0010\b\u0000\u00cb\u00cc\u00052\u0000\u0000\u00cc"+ + "\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00cf\u0001\u0000\u0000\u0000"+ + "\u00ce\u00c6\u0001\u0000\u0000\u0000\u00ce\u00c9\u0001\u0000\u0000\u0000"+ + "\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0003\u001a\r\u0000\u00d1"+ + "\u00e0\u0006\u0007\uffff\uffff\u0000\u00d2\u00d8\u0005\n\u0000\u0000\u00d3"+ + "\u00d4\u00051\u0000\u0000\u00d4\u00d5\u0003\u0010\b\u0000\u00d5\u00d6"+ + "\u00052\u0000\u0000\u00d6\u00d9\u0001\u0000\u0000\u0000\u00d7\u00d9\u0003"+ + "\u0010\b\u0000\u00d8\u00d3\u0001\u0000\u0000\u0000\u00d8\u00d7\u0001\u0000"+ + "\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000\u00da\u00db\u0006\u0007"+ + "\uffff\uffff\u0000\u00db\u00dc\u0003\u001a\r\u0000\u00dc\u00dd\u0006\u0007"+ + "\uffff\uffff\u0000\u00dd\u00df\u0001\u0000\u0000\u0000\u00de\u00d2\u0001"+ + "\u0000\u0000\u0000\u00df\u00e2\u0001\u0000\u0000\u0000\u00e0\u00de\u0001"+ + "\u0000\u0000\u0000\u00e0\u00e1\u0001\u0000\u0000\u0000\u00e1\u00e7\u0001"+ + "\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005"+ + "\t\u0000\u0000\u00e4\u00e5\u0003\u001a\r\u0000\u00e5\u00e6\u0006\u0007"+ + "\uffff\uffff\u0000\u00e6\u00e8\u0001\u0000\u0000\u0000\u00e7\u00e3\u0001"+ + "\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001"+ + "\u0000\u0000\u0000\u00e9\u00ea\u0006\u0007\uffff\uffff\u0000\u00ea\u00eb"+ + "\u0005\u0002\u0000\u0000\u00eb\u000f\u0001\u0000\u0000\u0000\u00ec\u0101"+ + "\u0006\b\uffff\uffff\u0000\u00ed\u00ee\u00051\u0000\u0000\u00ee\u00ef"+ + "\u00030\u0018\u0000\u00ef\u00f0\u0006\b\uffff\uffff\u0000\u00f0\u00fc"+ + "\u00052\u0000\u0000\u00f1\u00f3\u0007\u0000\u0000\u0000\u00f2\u00f4\u0005"+ + "1\u0000\u0000\u00f3\u00f2\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000"+ + "\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f6\u0003\u0010"+ + "\b\u0000\u00f6\u00f8\u0006\b\uffff\uffff\u0000\u00f7\u00f9\u00052\u0000"+ + "\u0000\u00f8\u00f7\u0001\u0000\u0000\u0000\u00f8\u00f9\u0001\u0000\u0000"+ + "\u0000\u00f9\u00fb\u0001\u0000\u0000\u0000\u00fa\u00f1\u0001\u0000\u0000"+ + "\u0000\u00fb\u00fe\u0001\u0000\u0000\u0000\u00fc\u00fa\u0001\u0000\u0000"+ + "\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd\u0100\u0001\u0000\u0000"+ + "\u0000\u00fe\u00fc\u0001\u0000\u0000\u0000\u00ff\u00ed\u0001\u0000\u0000"+ + "\u0000\u0100\u0103\u0001\u0000\u0000\u0000\u0101\u00ff\u0001\u0000\u0000"+ + "\u0000\u0101\u0102\u0001\u0000\u0000\u0000\u0102\u0011\u0001\u0000\u0000"+ + "\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0104\u0105\u0005\u0004\u0000"+ + "\u0000\u0105\u0106\u00051\u0000\u0000\u0106\u0107\u00030\u0018\u0000\u0107"+ + "\u0108\u0006\t\uffff\uffff\u0000\u0108\u0109\u00052\u0000\u0000\u0109"+ + "\u010a\u0005;\u0000\u0000\u010a\u0013\u0001\u0000\u0000\u0000\u010b\u010c"+ + "\u0005\u0006\u0000\u0000\u010c\u010d\u00051\u0000\u0000\u010d\u010e\u0003"+ + "0\u0018\u0000\u010e\u010f\u0006\n\uffff\uffff\u0000\u010f\u0110\u0005"+ + "2\u0000\u0000\u0110\u0015\u0001\u0000\u0000\u0000\u0111\u0112\u0005\u0005"+ + "\u0000\u0000\u0112\u0113\u00051\u0000\u0000\u0113\u0114\u00030\u0018\u0000"+ + "\u0114\u0115\u00057\u0000\u0000\u0115\u0116\u00030\u0018\u0000\u0116\u0117"+ + "\u00052\u0000\u0000\u0117\u0118\u0005;\u0000\u0000\u0118\u0119\u0006\u000b"+ + "\uffff\uffff\u0000\u0119\u0017\u0001\u0000\u0000\u0000\u011a\u011b\u0005"+ + "\u000e\u0000\u0000\u011b\u011c\u0005\u0011\u0000\u0000\u011c\u011d\u0003"+ + "\u001a\r\u0000\u011d\u011e\u0006\f\uffff\uffff\u0000\u011e\u011f\u0005"+ + "\u0002\u0000\u0000\u011f\u0019\u0001\u0000\u0000\u0000\u0120\u0136\u0006"+ + "\r\uffff\uffff\u0000\u0121\u0122\u0003,\u0016\u0000\u0122\u0123\u0006"+ + "\r\uffff\uffff\u0000\u0123\u0135\u0001\u0000\u0000\u0000\u0124\u0129\u0005"+ + "(\u0000\u0000\u0125\u0126\u0005\b\u0000\u0000\u0126\u0127\u0003\u0010"+ + "\b\u0000\u0127\u0128\u0006\r\uffff\uffff\u0000\u0128\u012a\u0001\u0000"+ + "\u0000\u0000\u0129\u0125\u0001\u0000\u0000\u0000\u0129\u012a\u0001\u0000"+ + "\u0000\u0000\u012a\u012b\u0001\u0000\u0000\u0000\u012b\u0135\u0005;\u0000"+ + "\u0000\u012c\u0131\u0005)\u0000\u0000\u012d\u012e\u0005\b\u0000\u0000"+ + "\u012e\u012f\u0003\u0010\b\u0000\u012f\u0130\u0006\r\uffff\uffff\u0000"+ + "\u0130\u0132\u0001\u0000\u0000\u0000\u0131\u012d\u0001\u0000\u0000\u0000"+ + "\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u0133\u0001\u0000\u0000\u0000"+ + "\u0133\u0135\u0005;\u0000\u0000\u0134\u0121\u0001\u0000\u0000\u0000\u0134"+ + "\u0124\u0001\u0000\u0000\u0000\u0134\u012c\u0001\u0000\u0000\u0000\u0135"+ + "\u0138\u0001\u0000\u0000\u0000\u0136\u0134\u0001\u0000\u0000\u0000\u0136"+ + "\u0137\u0001\u0000\u0000\u0000\u0137\u013c\u0001\u0000\u0000\u0000\u0138"+ + "\u0136\u0001\u0000\u0000\u0000\u0139\u013a\u0003\f\u0006\u0000\u013a\u013b"+ + "\u0006\r\uffff\uffff\u0000\u013b\u013d\u0001\u0000\u0000\u0000\u013c\u0139"+ + "\u0001\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d\u001b"+ + "\u0001\u0000\u0000\u0000\u013e\u013f\u0005\u000f\u0000\u0000\u013f\u0140"+ + "\u0005>\u0000\u0000\u0140\u0141\u0005\u0010\u0000\u0000\u0141\u0142\u0003"+ + "\u001e\u000f\u0000\u0142\u0143\u0003\u001a\r\u0000\u0143\u0144\u0005\u0002"+ + "\u0000\u0000\u0144\u0145\u0006\u000e\uffff\uffff\u0000\u0145\u001d\u0001"+ + "\u0000\u0000\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0148"+ + "\u00051\u0000\u0000\u0148\u0149\u00030\u0018\u0000\u0149\u014a\u0006\u000f"+ + "\uffff\uffff\u0000\u014a\u014b\u00059\u0000\u0000\u014b\u014c\u00030\u0018"+ + "\u0000\u014c\u014d\u0006\u000f\uffff\uffff\u0000\u014d\u014e\u00052\u0000"+ + "\u0000\u014e\u0162\u0001\u0000\u0000\u0000\u014f\u0150\u0006\u000f\uffff"+ + "\uffff\u0000\u0150\u0151\u00053\u0000\u0000\u0151\u0152\u00030\u0018\u0000"+ + "\u0152\u0159\u0006\u000f\uffff\uffff\u0000\u0153\u0154\u00057\u0000\u0000"+ + "\u0154\u0155\u00030\u0018\u0000\u0155\u0156\u0006\u000f\uffff\uffff\u0000"+ + "\u0156\u0158\u0001\u0000\u0000\u0000\u0157\u0153\u0001\u0000\u0000\u0000"+ + "\u0158\u015b\u0001\u0000\u0000\u0000\u0159\u0157\u0001\u0000\u0000\u0000"+ + "\u0159\u015a\u0001\u0000\u0000\u0000\u015a\u015c\u0001\u0000\u0000\u0000"+ + "\u015b\u0159\u0001\u0000\u0000\u0000\u015c\u015d\u00054\u0000\u0000\u015d"+ + "\u0162\u0001\u0000\u0000\u0000\u015e\u015f\u0006\u000f\uffff\uffff\u0000"+ + "\u015f\u0160\u0005>\u0000\u0000\u0160\u0162\u0006\u000f\uffff\uffff\u0000"+ + "\u0161\u0146\u0001\u0000\u0000\u0000\u0161\u014f\u0001\u0000\u0000\u0000"+ + "\u0161\u015e\u0001\u0000\u0000\u0000\u0162\u001f\u0001\u0000\u0000\u0000"+ + "\u0163\u0164\u0006\u0010\uffff\uffff\u0000\u0164\u0165\u00053\u0000\u0000"+ + "\u0165\u0166\u00030\u0018\u0000\u0166\u0167\u0005$\u0000\u0000\u0167\u0168"+ + "\u0005>\u0000\u0000\u0168\u0169\u0005*\u0000\u0000\u0169\u016a\u0003\u001e"+ + "\u000f\u0000\u016a\u016b\u00057\u0000\u0000\u016b\u016c\u00030\u0018\u0000"+ + "\u016c\u0173\u0006\u0010\uffff\uffff\u0000\u016d\u016e\u00057\u0000\u0000"+ + "\u016e\u016f\u00030\u0018\u0000\u016f\u0170\u0006\u0010\uffff\uffff\u0000"+ + "\u0170\u0172\u0001\u0000\u0000\u0000\u0171\u016d\u0001\u0000\u0000\u0000"+ + "\u0172\u0175\u0001\u0000\u0000\u0000\u0173\u0171\u0001\u0000\u0000\u0000"+ + "\u0173\u0174\u0001\u0000\u0000\u0000\u0174\u0176\u0001\u0000\u0000\u0000"+ + "\u0175\u0173\u0001\u0000\u0000\u0000\u0176\u0177\u0006\u0010\uffff\uffff"+ + "\u0000\u0177\u0178\u00054\u0000\u0000\u0178!\u0001\u0000\u0000\u0000\u0179"+ + "\u017a\u0005>\u0000\u0000\u017a\u017b\u00058\u0000\u0000\u017b\u017c\u0005"+ + "\r\u0000\u0000\u017c\u017d\u00051\u0000\u0000\u017d\u017e\u00030\u0018"+ + "\u0000\u017e\u017f\u00052\u0000\u0000\u017f\u0180\u0006\u0011\uffff\uffff"+ + "\u0000\u0180#\u0001\u0000\u0000\u0000\u0181\u0182\u0005\u0012\u0000\u0000"+ + "\u0182\u0183\u00051\u0000\u0000\u0183\u0184\u00030\u0018\u0000\u0184\u0185"+ + "\u00052\u0000\u0000\u0185\u0186\u0006\u0012\uffff\uffff\u0000\u0186%\u0001"+ + "\u0000\u0000\u0000\u0187\u0188\u0005\u0013\u0000\u0000\u0188\u0189\u0005"+ + "1\u0000\u0000\u0189\u018a\u00030\u0018\u0000\u018a\u018b\u00052\u0000"+ + "\u0000\u018b\u018c\u0006\u0013\uffff\uffff\u0000\u018c\'\u0001\u0000\u0000"+ + "\u0000\u018d\u018e\u0006\u0014\uffff\uffff\u0000\u018e\u0192\u0005>\u0000"+ + "\u0000\u018f\u0190\u0003*\u0015\u0000\u0190\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u0191\u0193\u0001\u0000\u0000\u0000\u0192\u018f\u0001\u0000\u0000"+ + "\u0000\u0192\u0193\u0001\u0000\u0000\u0000\u0193\u01a0\u0001\u0000\u0000"+ + "\u0000\u0194\u0195\u00050\u0000\u0000\u0195\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u0196\u0197\u0005+\u0000\u0000\u0197\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u0198\u0199\u0005,\u0000\u0000\u0199\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019a\u019b\u0005.\u0000\u0000\u019b\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019c\u019d\u0005-\u0000\u0000\u019d\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019e\u019f\u0005/\u0000\u0000\u019f\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u01a0\u0194\u0001\u0000\u0000\u0000\u01a0\u0196\u0001\u0000\u0000"+ + "\u0000\u01a0\u0198\u0001\u0000\u0000\u0000\u01a0\u019a\u0001\u0000\u0000"+ + "\u0000\u01a0\u019c\u0001\u0000\u0000\u0000\u01a0\u019e\u0001\u0000\u0000"+ + "\u0000\u01a1\u01a2\u0001\u0000\u0000\u0000\u01a2\u01a3\u00030\u0018\u0000"+ + "\u01a3\u01a4\u0005;\u0000\u0000\u01a4\u01a5\u0006\u0014\uffff\uffff\u0000"+ + "\u01a5)\u0001\u0000\u0000\u0000\u01a6\u01a7\u00053\u0000\u0000\u01a7\u01a8"+ + "\u00030\u0018\u0000\u01a8\u01a9\u0006\u0015\uffff\uffff\u0000\u01a9\u01aa"+ + "\u00054\u0000\u0000\u01aa+\u0001\u0000\u0000\u0000\u01ab\u01ac\u0003\u000e"+ + "\u0007\u0000\u01ac\u01ad\u0006\u0016\uffff\uffff\u0000\u01ad\u01c3\u0001"+ + "\u0000\u0000\u0000\u01ae\u01af\u0003\u0018\f\u0000\u01af\u01b0\u0006\u0016"+ + "\uffff\uffff\u0000\u01b0\u01c3\u0001\u0000\u0000\u0000\u01b1\u01b2\u0003"+ + "\u001c\u000e\u0000\u01b2\u01b3\u0006\u0016\uffff\uffff\u0000\u01b3\u01c3"+ + "\u0001\u0000\u0000\u0000\u01b4\u01b5\u0003\u0012\t\u0000\u01b5\u01b6\u0006"+ + "\u0016\uffff\uffff\u0000\u01b6\u01c3\u0001\u0000\u0000\u0000\u01b7\u01b8"+ + "\u0003\u0016\u000b\u0000\u01b8\u01b9\u0006\u0016\uffff\uffff\u0000\u01b9"+ + "\u01c3\u0001\u0000\u0000\u0000\u01ba\u01bb\u00030\u0018\u0000\u01bb\u01bc"+ + "\u0006\u0016\uffff\uffff\u0000\u01bc\u01bd\u0006\u0016\uffff\uffff\u0000"+ + "\u01bd\u01be\u0005;\u0000\u0000\u01be\u01c3\u0001\u0000\u0000\u0000\u01bf"+ + "\u01c0\u0003(\u0014\u0000\u01c0\u01c1\u0006\u0016\uffff\uffff\u0000\u01c1"+ + "\u01c3\u0001\u0000\u0000\u0000\u01c2\u01ab\u0001\u0000\u0000\u0000\u01c2"+ + "\u01ae\u0001\u0000\u0000\u0000\u01c2\u01b1\u0001\u0000\u0000\u0000\u01c2"+ + "\u01b4\u0001\u0000\u0000\u0000\u01c2\u01b7\u0001\u0000\u0000\u0000\u01c2"+ + "\u01ba\u0001\u0000\u0000\u0000\u01c2\u01bf\u0001\u0000\u0000\u0000\u01c3"+ + "-\u0001\u0000\u0000\u0000\u01c4\u01ca\u0006\u0017\uffff\uffff\u0000\u01c5"+ + "\u01c6\u0003,\u0016\u0000\u01c6\u01c7\u0006\u0017\uffff\uffff\u0000\u01c7"+ + "\u01c9\u0001\u0000\u0000\u0000\u01c8\u01c5\u0001\u0000\u0000\u0000\u01c9"+ + "\u01cc\u0001\u0000\u0000\u0000\u01ca\u01c8\u0001\u0000\u0000\u0000\u01ca"+ + "\u01cb\u0001\u0000\u0000\u0000\u01cb\u01d0\u0001\u0000\u0000\u0000\u01cc"+ + "\u01ca\u0001\u0000\u0000\u0000\u01cd\u01ce\u0003\f\u0006\u0000\u01ce\u01cf"+ + "\u0006\u0017\uffff\uffff\u0000\u01cf\u01d1\u0001\u0000\u0000\u0000\u01d0"+ + "\u01cd\u0001\u0000\u0000\u0000\u01d0\u01d1\u0001\u0000\u0000\u0000\u01d1"+ + "/\u0001\u0000\u0000\u0000\u01d2\u01d3\u0006\u0018\uffff\uffff\u0000\u01d3"+ + "\u01d4\u00032\u0019\u0000\u01d4\u01d5\u0006\u0018\uffff\uffff\u0000\u01d5"+ + "\u01dd\u0001\u0000\u0000\u0000\u01d6\u01d7\n\u0002\u0000\u0000\u01d7\u01d8"+ + "\u0005%\u0000\u0000\u01d8\u01d9\u00032\u0019\u0000\u01d9\u01da\u0006\u0018"+ + "\uffff\uffff\u0000\u01da\u01dc\u0001\u0000\u0000\u0000\u01db\u01d6\u0001"+ + "\u0000\u0000\u0000\u01dc\u01df\u0001\u0000\u0000\u0000\u01dd\u01db\u0001"+ + "\u0000\u0000\u0000\u01dd\u01de\u0001\u0000\u0000\u0000\u01de1\u0001\u0000"+ + "\u0000\u0000\u01df\u01dd\u0001\u0000\u0000\u0000\u01e0\u01e1\u00034\u001a"+ + "\u0000\u01e1\u01e6\u0006\u0019\uffff\uffff\u0000\u01e2\u01e3\u0005\u0018"+ + "\u0000\u0000\u01e3\u01e7\u0006\u0019\uffff\uffff\u0000\u01e4\u01e5\u0005"+ + "\u0019\u0000\u0000\u01e5\u01e7\u0006\u0019\uffff\uffff\u0000\u01e6\u01e2"+ + "\u0001\u0000\u0000\u0000\u01e6\u01e4\u0001\u0000\u0000\u0000\u01e7\u01e8"+ + "\u0001\u0000\u0000\u0000\u01e8\u01e9\u00034\u001a\u0000\u01e9\u01ea\u0006"+ + "\u0019\uffff\uffff\u0000\u01ea\u01ef\u0001\u0000\u0000\u0000\u01eb\u01ec"+ + "\u00034\u001a\u0000\u01ec\u01ed\u0006\u0019\uffff\uffff\u0000\u01ed\u01ef"+ + "\u0001\u0000\u0000\u0000\u01ee\u01e0\u0001\u0000\u0000\u0000\u01ee\u01eb"+ + "\u0001\u0000\u0000\u0000\u01ef3\u0001\u0000\u0000\u0000\u01f0\u01f1\u0006"+ + "\u001a\uffff\uffff\u0000\u01f1\u01f2\u00036\u001b\u0000\u01f2\u01f3\u0006"+ + "\u001a\uffff\uffff\u0000\u01f3\u0205\u0001\u0000\u0000\u0000\u01f4\u01f5"+ + "\n\u0002\u0000\u0000\u01f5\u01fe\u0006\u001a\uffff\uffff\u0000\u01f6\u01f7"+ + "\u0005\u001c\u0000\u0000\u01f7\u01ff\u0006\u001a\uffff\uffff\u0000\u01f8"+ + "\u01f9\u0005\u001d\u0000\u0000\u01f9\u01ff\u0006\u001a\uffff\uffff\u0000"+ + "\u01fa\u01fb\u0005\u001a\u0000\u0000\u01fb\u01ff\u0006\u001a\uffff\uffff"+ + "\u0000\u01fc\u01fd\u0005\u001b\u0000\u0000\u01fd\u01ff\u0006\u001a\uffff"+ + "\uffff\u0000\u01fe\u01f6\u0001\u0000\u0000\u0000\u01fe\u01f8\u0001\u0000"+ + "\u0000\u0000\u01fe\u01fa\u0001\u0000\u0000\u0000\u01fe\u01fc\u0001\u0000"+ + "\u0000\u0000\u01ff\u0200\u0001\u0000\u0000\u0000\u0200\u0201\u00036\u001b"+ + "\u0000\u0201\u0202\u0006\u001a\uffff\uffff\u0000\u0202\u0204\u0001\u0000"+ + "\u0000\u0000\u0203\u01f4\u0001\u0000\u0000\u0000\u0204\u0207\u0001\u0000"+ + "\u0000\u0000\u0205\u0203\u0001\u0000\u0000\u0000\u0205\u0206\u0001\u0000"+ + "\u0000\u0000\u02065\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000"+ + "\u0000\u0208\u0209\u0006\u001b\uffff\uffff\u0000\u0209\u020a\u00038\u001c"+ + "\u0000\u020a\u020b\u0006\u001b\uffff\uffff\u0000\u020b\u0219\u0001\u0000"+ + "\u0000\u0000\u020c\u020d\n\u0002\u0000\u0000\u020d\u0212\u0006\u001b\uffff"+ + "\uffff\u0000\u020e\u020f\u0005\u0014\u0000\u0000\u020f\u0213\u0006\u001b"+ + "\uffff\uffff\u0000\u0210\u0211\u0005\u0015\u0000\u0000\u0211\u0213\u0006"+ + "\u001b\uffff\uffff\u0000\u0212\u020e\u0001\u0000\u0000\u0000\u0212\u0210"+ + "\u0001\u0000\u0000\u0000\u0213\u0214\u0001\u0000\u0000\u0000\u0214\u0215"+ + "\u00038\u001c\u0000\u0215\u0216\u0006\u001b\uffff\uffff\u0000\u0216\u0218"+ + "\u0001\u0000\u0000\u0000\u0217\u020c\u0001\u0000\u0000\u0000\u0218\u021b"+ + "\u0001\u0000\u0000\u0000\u0219\u0217\u0001\u0000\u0000\u0000\u0219\u021a"+ + "\u0001\u0000\u0000\u0000\u021a7\u0001\u0000\u0000\u0000\u021b\u0219\u0001"+ + "\u0000\u0000\u0000\u021c\u021d\u0006\u001c\uffff\uffff\u0000\u021d\u021e"+ + "\u0003:\u001d\u0000\u021e\u021f\u0006\u001c\uffff\uffff\u0000\u021f\u022d"+ + "\u0001\u0000\u0000\u0000\u0220\u0221\n\u0002\u0000\u0000\u0221\u0226\u0006"+ + "\u001c\uffff\uffff\u0000\u0222\u0223\u0005\u0016\u0000\u0000\u0223\u0227"+ + "\u0006\u001c\uffff\uffff\u0000\u0224\u0225\u0005\u0017\u0000\u0000\u0225"+ + "\u0227\u0006\u001c\uffff\uffff\u0000\u0226\u0222\u0001\u0000\u0000\u0000"+ + "\u0226\u0224\u0001\u0000\u0000\u0000\u0227\u0228\u0001\u0000\u0000\u0000"+ + "\u0228\u0229\u0003:\u001d\u0000\u0229\u022a\u0006\u001c\uffff\uffff\u0000"+ + "\u022a\u022c\u0001\u0000\u0000\u0000\u022b\u0220\u0001\u0000\u0000\u0000"+ + "\u022c\u022f\u0001\u0000\u0000\u0000\u022d\u022b\u0001\u0000\u0000\u0000"+ + "\u022d\u022e\u0001\u0000\u0000\u0000\u022e9\u0001\u0000\u0000\u0000\u022f"+ + "\u022d\u0001\u0000\u0000\u0000\u0230\u0239\u0006\u001d\uffff\uffff\u0000"+ + "\u0231\u0232\u0005 \u0000\u0000\u0232\u023a\u0006\u001d\uffff\uffff\u0000"+ + "\u0233\u0234\u0005\u0015\u0000\u0000\u0234\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0235\u0236\u0005!\u0000\u0000\u0236\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0237\u0238\u0005\"\u0000\u0000\u0238\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0239\u0231\u0001\u0000\u0000\u0000\u0239\u0233\u0001\u0000\u0000"+ + "\u0000\u0239\u0235\u0001\u0000\u0000\u0000\u0239\u0237\u0001\u0000\u0000"+ + "\u0000\u023a\u023b\u0001\u0000\u0000\u0000\u023b\u023c\u0003<\u001e\u0000"+ + "\u023c\u023d\u0006\u001d\uffff\uffff\u0000\u023d\u0242\u0001\u0000\u0000"+ + "\u0000\u023e\u023f\u0003<\u001e\u0000\u023f\u0240\u0006\u001d\uffff\uffff"+ + "\u0000\u0240\u0242\u0001\u0000\u0000\u0000\u0241\u0230\u0001\u0000\u0000"+ + "\u0000\u0241\u023e\u0001\u0000\u0000\u0000\u0242;\u0001\u0000\u0000\u0000"+ + "\u0243\u0244\u0006\u001e\uffff\uffff\u0000\u0244\u024c\u0003>\u001f\u0000"+ + "\u0245\u0246\u00051\u0000\u0000\u0246\u0247\u0003\n\u0005\u0000\u0247"+ + "\u0248\u0006\u001e\uffff\uffff\u0000\u0248\u0249\u00052\u0000\u0000\u0249"+ + "\u024b\u0001\u0000\u0000\u0000\u024a\u0245\u0001\u0000\u0000\u0000\u024b"+ + "\u024e\u0001\u0000\u0000\u0000\u024c\u024a\u0001\u0000\u0000\u0000\u024c"+ + "\u024d\u0001\u0000\u0000\u0000\u024d\u0254\u0001\u0000\u0000\u0000\u024e"+ + "\u024c\u0001\u0000\u0000\u0000\u024f\u0250\u0003*\u0015\u0000\u0250\u0251"+ + "\u0006\u001e\uffff\uffff\u0000\u0251\u0253\u0001\u0000\u0000\u0000\u0252"+ + "\u024f\u0001\u0000\u0000\u0000\u0253\u0256\u0001\u0000\u0000\u0000\u0254"+ + "\u0252\u0001\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000\u0000\u0255"+ + "\u0257\u0001\u0000\u0000\u0000\u0256\u0254\u0001\u0000\u0000\u0000\u0257"+ + "\u0258\u0006\u001e\uffff\uffff\u0000\u0258=\u0001\u0000\u0000\u0000\u0259"+ + "\u025a\u0003B!\u0000\u025a\u025b\u0006\u001f\uffff\uffff\u0000\u025b\u0278"+ + "\u0001\u0000\u0000\u0000\u025c\u025d\u0005>\u0000\u0000\u025d\u0278\u0006"+ + "\u001f\uffff\uffff\u0000\u025e\u025f\u0003@ \u0000\u025f\u0260\u0006\u001f"+ + "\uffff\uffff\u0000\u0260\u0278\u0001\u0000\u0000\u0000\u0261\u0262\u0003"+ + "$\u0012\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000\u0263\u0278\u0001"+ + "\u0000\u0000\u0000\u0264\u0265\u0003&\u0013\u0000\u0265\u0266\u0006\u001f"+ + "\uffff\uffff\u0000\u0266\u0278\u0001\u0000\u0000\u0000\u0267\u0268\u0003"+ + "\"\u0011\u0000\u0268\u0269\u0006\u001f\uffff\uffff\u0000\u0269\u0278\u0001"+ + "\u0000\u0000\u0000\u026a\u026b\u0003 \u0010\u0000\u026b\u026c\u0006\u001f"+ + "\uffff\uffff\u0000\u026c\u0278\u0001\u0000\u0000\u0000\u026d\u026e\u0003"+ + "\u0014\n\u0000\u026e\u026f\u0006\u001f\uffff\uffff\u0000\u026f\u0278\u0001"+ + "\u0000\u0000\u0000\u0270\u0274\u00051\u0000\u0000\u0271\u0272\u00030\u0018"+ + "\u0000\u0272\u0273\u0006\u001f\uffff\uffff\u0000\u0273\u0275\u0001\u0000"+ + "\u0000\u0000\u0274\u0271\u0001\u0000\u0000\u0000\u0274\u0275\u0001\u0000"+ + "\u0000\u0000\u0275\u0276\u0001\u0000\u0000\u0000\u0276\u0278\u00052\u0000"+ + "\u0000\u0277\u0259\u0001\u0000\u0000\u0000\u0277\u025c\u0001\u0000\u0000"+ + "\u0000\u0277\u025e\u0001\u0000\u0000\u0000\u0277\u0261\u0001\u0000\u0000"+ + "\u0000\u0277\u0264\u0001\u0000\u0000\u0000\u0277\u0267\u0001\u0000\u0000"+ + "\u0000\u0277\u026a\u0001\u0000\u0000\u0000\u0277\u026d\u0001\u0000\u0000"+ + "\u0000\u0277\u0270\u0001\u0000\u0000\u0000\u0278?\u0001\u0000\u0000\u0000"+ + "\u0279\u027a\u0005*\u0000\u0000\u027a\u027b\u0003\u0004\u0002\u0000\u027b"+ + "\u027c\u00055\u0000\u0000\u027c\u027d\u0003.\u0017\u0000\u027d\u027e\u0005"+ + "6\u0000\u0000\u027e\u027f\u0006 \uffff\uffff\u0000\u027fA\u0001\u0000"+ + "\u0000\u0000\u0280\u0281\u0003F#\u0000\u0281\u0282\u0006!\uffff\uffff"+ + "\u0000\u0282\u0290\u0001\u0000\u0000\u0000\u0283\u0284\u0005?\u0000\u0000"+ + "\u0284\u0290\u0006!\uffff\uffff\u0000\u0285\u0286\u0005<\u0000\u0000\u0286"+ + "\u0290\u0006!\uffff\uffff\u0000\u0287\u0288\u0005=\u0000\u0000\u0288\u0290"+ + "\u0006!\uffff\uffff\u0000\u0289\u028a\u0003D\"\u0000\u028a\u028b\u0006"+ + "!\uffff\uffff\u0000\u028b\u0290\u0001\u0000\u0000\u0000\u028c\u028d\u0003"+ + "H$\u0000\u028d\u028e\u0006!\uffff\uffff\u0000\u028e\u0290\u0001\u0000"+ + "\u0000\u0000\u028f\u0280\u0001\u0000\u0000\u0000\u028f\u0283\u0001\u0000"+ + "\u0000\u0000\u028f\u0285\u0001\u0000\u0000\u0000\u028f\u0287\u0001\u0000"+ + "\u0000\u0000\u028f\u0289\u0001\u0000\u0000\u0000\u028f\u028c\u0001\u0000"+ + "\u0000\u0000\u0290C\u0001\u0000\u0000\u0000\u0291\u0292\u00053\u0000\u0000"+ + "\u0292\u0293\u0003\n\u0005\u0000\u0293\u0294\u00054\u0000\u0000\u0294"+ + "\u0295\u0006\"\uffff\uffff\u0000\u0295E\u0001\u0000\u0000\u0000\u0296"+ + "\u0297\u0005&\u0000\u0000\u0297\u029b\u0006#\uffff\uffff\u0000\u0298\u0299"+ + "\u0005\'\u0000\u0000\u0299\u029b\u0006#\uffff\uffff\u0000\u029a\u0296"+ + "\u0001\u0000\u0000\u0000\u029a\u0298\u0001\u0000\u0000\u0000\u029bG\u0001"+ + "\u0000\u0000\u0000\u029c\u029d\u0005\u000b\u0000\u0000\u029d\u029e\u0005"+ + "1\u0000\u0000\u029e\u029f\u0005:\u0000\u0000\u029f\u02a0\u0005>\u0000"+ + "\u0000\u02a0\u02a1\u00052\u0000\u0000\u02a1\u02a2\u0006$\uffff\uffff\u0000"+ + "\u02a2I\u0001\u0000\u0000\u00000QSm\u0080\u0085\u0087\u009c\u00b4\u00b7"+ + "\u00be\u00ce\u00d8\u00e0\u00e7\u00f3\u00f8\u00fc\u0101\u0129\u0131\u0134"+ + "\u0136\u013c\u0159\u0161\u0173\u0192\u01a0\u01c2\u01ca\u01d0\u01dd\u01e6"+ + "\u01ee\u01fe\u0205\u0212\u0219\u0226\u022d\u0239\u0241\u024c\u0254\u0274"+ + "\u0277\u028f\u029a"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LambdaExpression.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/expression/LambdaExpression.class index a66182028eccfabf7fe20fbe38e1587ae00f989c..41e236c35361c1cb25d40fa4b2424013ddb1d8da 100644 GIT binary patch literal 2167 zcmb7F>rN9v6#k}{-BKzo&2@6G$@TE+;6foqALC(j=Q&qpg~%P5e7%%VL-*2k;a*$7BL&P7tYgn);gMDE0uoF*}a|#+8&5m%+}~E-%t`T zB+I&?9rQYN&8({RHbv6qZbNO8KAn%Mhns8^~6(2b)&^F-A8oZn23^kNo_Q=Bby=bzE}T?4t|=l zyNqE@B4J9GPRNuTyty)sZrO4 z09mK`jX;pNA0&Gz2kt`3IBc;cEkpkIFUv3%|)Wvl6kV1I*AD5W~3IG5A literal 2714 zcmb7GYi|=r6g^|dk2o$dHc24m5d$gq=CP$E&|)W$6e=NEfRrdwKdzmXS>&vv-3@B~ z6_pyHwkrMJA650t&e~o!W4is|-8*;Yo^$V+JG1`#pWi`=0hXoV`YHzJ~mU$XD19R8&th0{e z2PG7coy8o=1$9cP& zRjLEa?VGQt5}4h0`mPn6dbYrxu9kL^A|`=(XnD^jinMkJ*h&TB2UcJo+iqa) zkE}3yJ5{u{3Bvfjh7LfRlit}p9N#^PT;4P5}V

+`hn-5n^~9DKC}CTfLrr5(unC zS6lM()8Ar+Xqmv0I))d*1g`66+6M>W&GD#x@K`lv{DNd}Y42ba)nu$dX@7X?_3R%V zc||NF&-$ipbkuqOXZV53^2g5(1a8vG;1-|!N{q)V9P=YF9@jBTJBQm`dxvv>5n+b! zE#m`(@dpY&eZcHFN)xj(F>A(}oZ2`?%~(H2yq=by|vLoz{k)C8mX9xki@dDJ*J( z;w)8GI%3(RW$IZ<$y#oZ<>nL?)fRCUrJ}0kYqH$OH&j5jfyt57H)s5c+It$Aa9i`C zvmO#CL2{8;3glbPKhT0yk|3*7LAD6;PzzE@f;6XsJR-<<_?}N$&IaGIoNRS539%l7 z$VSBoJVq;0;w9g*ONwj8Z@8L)j8{Fb#MlhuRp%7Pol`^`+oYVREj>H*D50LvdP<}W GcK-!0s)8;6 diff --git a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 index 16f3f45..4a0f191 100644 --- a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 @@ -156,6 +156,8 @@ returnStatement returns [ReturnStatement returnStmtRet]: ifStatement returns[IfStatement ifRet]: { $ifRet = new IfStatement(); + ArrayList tempThenStmts = new ArrayList<>(); + ArrayList tempElseStmts = new ArrayList<>(); } i = IF { @@ -163,26 +165,39 @@ ifStatement returns[IfStatement ifRet]: } (c1 = condition {$ifRet.addCondition($c1.conditionRet);} | LPAR c2 = condition RPAR {$ifRet.addCondition($c2.conditionRet);}) - b = body {$ifRet.setThenBody($b.bodyRet);} + b = loopBody { - ArrayList tempArray = new ArrayList(); + tempThenStmts.addAll($b.loopStmts); + $ifRet.addCondition($b.loopExps); + if($b.loopRetStmt != null){ + tempThenStmts.add($b.loopRetStmt); + } } - (ELSEIF LPAR c2 = condition RPAR + (ELSEIF (LPAR c2 = condition RPAR | c2 = condition) { $ifRet.addCondition($c2.conditionRet); } - b1 = body + b1 = loopBody { - tempArray.addAll($b1.bodyRet); + tempElseStmts.addAll($b1.loopStmts); + $ifRet.addCondition($b1.loopExps); + if($b1.loopRetStmt != null){ + tempThenStmts.add($b1.loopRetStmt); + } } )* - (ELSE b2 = body + (ELSE b2 = loopBody { - tempArray.addAll($b2.bodyRet); + tempElseStmts.addAll($b2.loopStmts); + $ifRet.addCondition($b2.loopExps); + if($b2.loopRetStmt != null){ + tempThenStmts.add($b2.loopRetStmt); + } } )? { - $ifRet.setElseBody(tempArray); + $ifRet.setThenBody(tempThenStmts); + $ifRet.setElseBody(tempElseStmts); } END; @@ -270,7 +285,11 @@ range returns [ArrayList rangeRet]: $rangeRet.add($e2.expRet); } RPAR) - | (LBRACK (e3 = expression + | + { + $rangeRet = new ArrayList(); + } + (LBRACK (e3 = expression { $rangeRet.add($e3.expRet); } @@ -279,9 +298,14 @@ range returns [ArrayList rangeRet]: $rangeRet.add($e4.expRet); } )*) RBRACK) - | id = IDENTIFIER + | + { + $rangeRet = new ArrayList(); + } + id = IDENTIFIER { Identifier id_ = new Identifier($id.text); + id_.setLine($id.line); $rangeRet.add(id_); } ; @@ -526,16 +550,24 @@ otherExpression returns [Expression expRet]: +//lambdaFunction returns [Expression lambdaRet]: +// a = ARROW fd = functionArgumentsDeclaration +// LBRACE b = body RBRACE fa = functionArguments +// { +// $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); +// $lambdaRet.setLine($a.line); +// } +// ; + lambdaFunction returns [Expression lambdaRet]: a = ARROW fd = functionArgumentsDeclaration - LBRACE b = body RBRACE fa = functionArguments + LBRACE b = body RBRACE { - $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet, $fa.funcArgsRet); + $lambdaRet = new LambdaExpression($fd.argRet, $b.bodyRet); $lambdaRet.setLine($a.line); } ; - values returns [Value valRet]: b = boolValue {$valRet = $b.boolValRet;} | s = STRING_VALUE {$valRet = new StringValue($s.text); $valRet.setLine($s.line);} diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/astPrinter/AstPrinter.class b/Phase2Template/out/production/Phase2Template/main/visitor/astPrinter/AstPrinter.class index 389201699c116127be978898f2274240d60a1168..08e25089c2568ae767ff904ccf4c5905fba76088 100644 GIT binary patch literal 17641 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 literal 17701 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 Am;e9( diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/DependencyDetector.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/DependencyDetector.class index 81b9be816b71ca129d7510e17ab1d4f012ffb0f7..d4ad7ad5e779f42be2e3a2cf43d62d48845f0394 100644 GIT binary patch delta 1254 zcmb7@ZBGQX+B6cfg1(TJ!xGo@~fCdGF0`*~`q6o#Oc5xS61XOlWY1PG6 zTWx(Fjago_N#FRYX&cRuwuyzrq=`vGzd*l%pMX&D%q&7od}B!Ny*uZe-#z^Q=l)Rq zvRHrd>W^nYBM*PmAGwu?Ii{`hM`MFM@mTYPGsB5gDtUTH<74wjcbU4!U@!a3f89HL zEwmc6@rk+86H?m^4sg)i>8bS`QV5$>zJU4Av%IH+E`v`gRVX+aOC3n07m+$095y(@ zHU*<~`P7YK?lc}^ukLmMP zhhxMIyd)I-;pp2b+tzpLX!IGJBx%OICF&`I0S3*R-uArH_VJ8D#2n2FJz1j8xwW&R zg^OWxx$aj|W=JouOv{&i+_HX%hZQWNkP-Q1pvYRpInK+j*d$p~=9s=EW7m8j*$|M7 zRjiS9EvucnpsitSnIo#Q0i>%0N4MMIV{dvBbg zX`G;QoTQ~rjXcFK_}v!KfGUf{{>K~>Xh)V#fp+AeomqC<#O_6Sw*$|-H+`-_`BnZY zH@0%Uq8g57C6w?HVbN|gA?ih;X4bJ^z8q#feMIP&eUJ^JeWm!YkxNu@EyE`6O366Y z{6q~uQ_BQfc+OV-mi+|{{KF2%j-%uW%rAwP#guwMWEhiS3d>bj_)1KiScr}E!XKfPK|0LF3F~JFo-mb@U|2fKe9OVk7aoCx`$1Z|2Nx#jaL(9V81?6$w z;5(<=n)z;hRPeowwZcs)E|ku4S+^uB7rQMndnog9{m)Vj&6&$kL8Hv&9m$uul$%`g z2Wq6u%Fu7S>2i8frPzKui*H7qzxb|v_e!t;hji~9B!=D(BnWxIhHUpSofaOv2K%Jx AGXMYp delta 1196 zcmaKrTXR!Y6vuxjIXNdi9!oKThSr(1+7e1j1xkgMi;;5YCSbkO=gC#4D z?)_%Y9ZIv)Wfv_5b%!&Bbhfzh^oe}7P{OcG*LN zfpai7a$x#I= zEn(RhCeJd5c@*@^#gMJ1$f#DsC&`}lZaJ@%{G4YL4bLkgP9qC=iH0CAAyz#Wr+7c0 zwoDVCh0~l7;{)YAMd$%ho2E$x`|zVaT<83tBwGRFiz_Ux@WR%%aT*QE+|*{F!33Rs zrS|)DmD$ujL07jKH!G~X&+0PEg6#yWyCd;Pg|%f8{+gO#L$}p>mzbEFD!duDWGeLC zAT3h5%odT-Rnm?!YkW-qEV2J_V(AIUsU5~Gl^@2}XdlnXCUnI{n)D@kk>yfq4b5zn z9@|)`K}a&Fb%@1eX=9jn6Jfnt2f zN0Qw~f6ONum!$k9K2@8p&v?gXym?;ZEa&8{m$>KoENIsFOtZ#=23DIjk4Uvy4;ZlN z43#G7o75N?D)3^pZ`={dABYvc&K2J6mDaP(OFV4e-ah%ApBWrzzelFRf&Lp)e+G(~ zfnxJjIJ!iXwbE^!?*FRpotl}fgkI035|@K&S4>wMm1Li5a1Fjt@_bbmgz=@Ks=lw} z^T)21(BC|5V+WJhT$j@1eXV#+o{kFX1FKb~ANHFV3QDq+>pza!M{&%WKKL6sBJ$P| YkjDOxH2fsee?dZ2-{`k|7nE@2Uw25?-T(jq diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class index d0320d2e7a7ec9b7a9857de959f883bdb0cee306..8580787d72fb97ed02f1032eed503f7a3e83b504 100644 GIT binary patch literal 22597 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 literal 22580 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 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp index 5fcebc2..c5704fe 100644 --- a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp +++ b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraft.interp @@ -175,4 +175,4 @@ functionPointer atn: -[4, 1, 65, 672, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 220, 8, 7, 10, 7, 12, 7, 223, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 229, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 241, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 5, 8, 248, 8, 8, 10, 8, 12, 8, 251, 9, 8, 5, 8, 253, 8, 8, 10, 8, 12, 8, 256, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 295, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 303, 8, 13, 1, 13, 5, 13, 306, 8, 13, 10, 13, 12, 13, 309, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 340, 8, 15, 10, 15, 12, 15, 343, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 349, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 365, 8, 16, 10, 16, 12, 16, 368, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 398, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 412, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 446, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 452, 8, 23, 10, 23, 12, 23, 455, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 460, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 471, 8, 24, 10, 24, 12, 24, 474, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 482, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 490, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 506, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 511, 8, 26, 10, 26, 12, 26, 514, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 526, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 531, 8, 27, 10, 27, 12, 27, 534, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 546, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 551, 8, 28, 10, 28, 12, 28, 554, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 565, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 573, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 582, 8, 30, 10, 30, 12, 30, 585, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 590, 8, 30, 10, 30, 12, 30, 593, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 624, 8, 31, 1, 31, 3, 31, 627, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 652, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 663, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 707, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 233, 1, 0, 0, 0, 18, 257, 1, 0, 0, 0, 20, 264, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 279, 1, 0, 0, 0, 26, 285, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 348, 1, 0, 0, 0, 32, 350, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 380, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 392, 1, 0, 0, 0, 42, 417, 1, 0, 0, 0, 44, 445, 1, 0, 0, 0, 46, 447, 1, 0, 0, 0, 48, 461, 1, 0, 0, 0, 50, 489, 1, 0, 0, 0, 52, 491, 1, 0, 0, 0, 54, 515, 1, 0, 0, 0, 56, 535, 1, 0, 0, 0, 58, 572, 1, 0, 0, 0, 60, 574, 1, 0, 0, 0, 62, 626, 1, 0, 0, 0, 64, 628, 1, 0, 0, 0, 66, 651, 1, 0, 0, 0, 68, 653, 1, 0, 0, 0, 70, 662, 1, 0, 0, 0, 72, 664, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 46, 23, 0, 209, 210, 6, 7, -1, 0, 210, 221, 6, 7, -1, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 49, 0, 0, 213, 214, 3, 16, 8, 0, 214, 215, 5, 50, 0, 0, 215, 216, 6, 7, -1, 0, 216, 217, 3, 46, 23, 0, 217, 218, 6, 7, -1, 0, 218, 220, 1, 0, 0, 0, 219, 211, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 228, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 5, 9, 0, 0, 225, 226, 3, 46, 23, 0, 226, 227, 6, 7, -1, 0, 227, 229, 1, 0, 0, 0, 228, 224, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 231, 6, 7, -1, 0, 231, 232, 5, 2, 0, 0, 232, 15, 1, 0, 0, 0, 233, 254, 6, 8, -1, 0, 234, 235, 5, 49, 0, 0, 235, 236, 3, 48, 24, 0, 236, 237, 6, 8, -1, 0, 237, 249, 5, 50, 0, 0, 238, 240, 7, 0, 0, 0, 239, 241, 5, 49, 0, 0, 240, 239, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 3, 16, 8, 0, 243, 245, 6, 8, -1, 0, 244, 246, 5, 50, 0, 0, 245, 244, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 248, 1, 0, 0, 0, 247, 238, 1, 0, 0, 0, 248, 251, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 252, 234, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 17, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 4, 0, 0, 258, 259, 5, 49, 0, 0, 259, 260, 3, 48, 24, 0, 260, 261, 6, 9, -1, 0, 261, 262, 5, 50, 0, 0, 262, 263, 5, 59, 0, 0, 263, 19, 1, 0, 0, 0, 264, 265, 5, 6, 0, 0, 265, 266, 5, 49, 0, 0, 266, 267, 3, 48, 24, 0, 267, 268, 6, 10, -1, 0, 268, 269, 5, 50, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 5, 0, 0, 271, 272, 5, 49, 0, 0, 272, 273, 3, 48, 24, 0, 273, 274, 5, 55, 0, 0, 274, 275, 3, 48, 24, 0, 275, 276, 5, 50, 0, 0, 276, 277, 5, 59, 0, 0, 277, 278, 6, 11, -1, 0, 278, 23, 1, 0, 0, 0, 279, 280, 5, 14, 0, 0, 280, 281, 5, 17, 0, 0, 281, 282, 3, 26, 13, 0, 282, 283, 6, 12, -1, 0, 283, 284, 5, 2, 0, 0, 284, 25, 1, 0, 0, 0, 285, 307, 6, 13, -1, 0, 286, 287, 3, 44, 22, 0, 287, 288, 6, 13, -1, 0, 288, 306, 1, 0, 0, 0, 289, 294, 5, 40, 0, 0, 290, 291, 5, 8, 0, 0, 291, 292, 3, 16, 8, 0, 292, 293, 6, 13, -1, 0, 293, 295, 1, 0, 0, 0, 294, 290, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 306, 5, 59, 0, 0, 297, 302, 5, 41, 0, 0, 298, 299, 5, 8, 0, 0, 299, 300, 3, 16, 8, 0, 300, 301, 6, 13, -1, 0, 301, 303, 1, 0, 0, 0, 302, 298, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 306, 5, 59, 0, 0, 305, 286, 1, 0, 0, 0, 305, 289, 1, 0, 0, 0, 305, 297, 1, 0, 0, 0, 306, 309, 1, 0, 0, 0, 307, 305, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 313, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 310, 311, 3, 12, 6, 0, 311, 312, 6, 13, -1, 0, 312, 314, 1, 0, 0, 0, 313, 310, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 15, 0, 0, 316, 317, 5, 62, 0, 0, 317, 318, 5, 16, 0, 0, 318, 319, 3, 30, 15, 0, 319, 320, 3, 26, 13, 0, 320, 321, 5, 2, 0, 0, 321, 322, 6, 14, -1, 0, 322, 29, 1, 0, 0, 0, 323, 324, 6, 15, -1, 0, 324, 325, 5, 49, 0, 0, 325, 326, 3, 48, 24, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 57, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 50, 0, 0, 331, 349, 1, 0, 0, 0, 332, 333, 5, 51, 0, 0, 333, 334, 3, 48, 24, 0, 334, 341, 6, 15, -1, 0, 335, 336, 5, 55, 0, 0, 336, 337, 3, 48, 24, 0, 337, 338, 6, 15, -1, 0, 338, 340, 1, 0, 0, 0, 339, 335, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 345, 5, 52, 0, 0, 345, 349, 1, 0, 0, 0, 346, 347, 5, 62, 0, 0, 347, 349, 6, 15, -1, 0, 348, 323, 1, 0, 0, 0, 348, 332, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 31, 1, 0, 0, 0, 350, 351, 6, 16, -1, 0, 351, 352, 5, 51, 0, 0, 352, 353, 3, 48, 24, 0, 353, 354, 5, 36, 0, 0, 354, 355, 5, 62, 0, 0, 355, 356, 5, 42, 0, 0, 356, 357, 3, 30, 15, 0, 357, 358, 5, 55, 0, 0, 358, 359, 3, 48, 24, 0, 359, 366, 6, 16, -1, 0, 360, 361, 5, 55, 0, 0, 361, 362, 3, 48, 24, 0, 362, 363, 6, 16, -1, 0, 363, 365, 1, 0, 0, 0, 364, 360, 1, 0, 0, 0, 365, 368, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 370, 6, 16, -1, 0, 370, 371, 5, 52, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 5, 62, 0, 0, 373, 374, 5, 56, 0, 0, 374, 375, 5, 13, 0, 0, 375, 376, 5, 49, 0, 0, 376, 377, 3, 48, 24, 0, 377, 378, 5, 50, 0, 0, 378, 379, 6, 17, -1, 0, 379, 35, 1, 0, 0, 0, 380, 381, 5, 18, 0, 0, 381, 382, 5, 49, 0, 0, 382, 383, 3, 48, 24, 0, 383, 384, 5, 50, 0, 0, 384, 385, 6, 18, -1, 0, 385, 37, 1, 0, 0, 0, 386, 387, 5, 19, 0, 0, 387, 388, 5, 49, 0, 0, 388, 389, 3, 48, 24, 0, 389, 390, 5, 50, 0, 0, 390, 391, 6, 19, -1, 0, 391, 39, 1, 0, 0, 0, 392, 393, 6, 20, -1, 0, 393, 397, 5, 62, 0, 0, 394, 395, 3, 42, 21, 0, 395, 396, 6, 20, -1, 0, 396, 398, 1, 0, 0, 0, 397, 394, 1, 0, 0, 0, 397, 398, 1, 0, 0, 0, 398, 411, 1, 0, 0, 0, 399, 400, 5, 48, 0, 0, 400, 412, 6, 20, -1, 0, 401, 402, 5, 43, 0, 0, 402, 412, 6, 20, -1, 0, 403, 404, 5, 44, 0, 0, 404, 412, 6, 20, -1, 0, 405, 406, 5, 46, 0, 0, 406, 412, 6, 20, -1, 0, 407, 408, 5, 45, 0, 0, 408, 412, 6, 20, -1, 0, 409, 410, 5, 47, 0, 0, 410, 412, 6, 20, -1, 0, 411, 399, 1, 0, 0, 0, 411, 401, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 411, 405, 1, 0, 0, 0, 411, 407, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 414, 3, 48, 24, 0, 414, 415, 5, 59, 0, 0, 415, 416, 6, 20, -1, 0, 416, 41, 1, 0, 0, 0, 417, 418, 5, 51, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 6, 21, -1, 0, 420, 421, 5, 52, 0, 0, 421, 43, 1, 0, 0, 0, 422, 423, 3, 14, 7, 0, 423, 424, 6, 22, -1, 0, 424, 446, 1, 0, 0, 0, 425, 426, 3, 24, 12, 0, 426, 427, 6, 22, -1, 0, 427, 446, 1, 0, 0, 0, 428, 429, 3, 28, 14, 0, 429, 430, 6, 22, -1, 0, 430, 446, 1, 0, 0, 0, 431, 432, 3, 18, 9, 0, 432, 433, 6, 22, -1, 0, 433, 446, 1, 0, 0, 0, 434, 435, 3, 22, 11, 0, 435, 436, 6, 22, -1, 0, 436, 446, 1, 0, 0, 0, 437, 438, 3, 48, 24, 0, 438, 439, 6, 22, -1, 0, 439, 440, 6, 22, -1, 0, 440, 441, 5, 59, 0, 0, 441, 446, 1, 0, 0, 0, 442, 443, 3, 40, 20, 0, 443, 444, 6, 22, -1, 0, 444, 446, 1, 0, 0, 0, 445, 422, 1, 0, 0, 0, 445, 425, 1, 0, 0, 0, 445, 428, 1, 0, 0, 0, 445, 431, 1, 0, 0, 0, 445, 434, 1, 0, 0, 0, 445, 437, 1, 0, 0, 0, 445, 442, 1, 0, 0, 0, 446, 45, 1, 0, 0, 0, 447, 453, 6, 23, -1, 0, 448, 449, 3, 44, 22, 0, 449, 450, 6, 23, -1, 0, 450, 452, 1, 0, 0, 0, 451, 448, 1, 0, 0, 0, 452, 455, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 459, 1, 0, 0, 0, 455, 453, 1, 0, 0, 0, 456, 457, 3, 12, 6, 0, 457, 458, 6, 23, -1, 0, 458, 460, 1, 0, 0, 0, 459, 456, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 47, 1, 0, 0, 0, 461, 462, 6, 24, -1, 0, 462, 463, 3, 50, 25, 0, 463, 464, 6, 24, -1, 0, 464, 472, 1, 0, 0, 0, 465, 466, 10, 2, 0, 0, 466, 467, 5, 37, 0, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 471, 1, 0, 0, 0, 470, 465, 1, 0, 0, 0, 471, 474, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 49, 1, 0, 0, 0, 474, 472, 1, 0, 0, 0, 475, 476, 3, 52, 26, 0, 476, 481, 6, 25, -1, 0, 477, 478, 5, 24, 0, 0, 478, 482, 6, 25, -1, 0, 479, 480, 5, 25, 0, 0, 480, 482, 6, 25, -1, 0, 481, 477, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 3, 52, 26, 0, 484, 485, 6, 25, -1, 0, 485, 490, 1, 0, 0, 0, 486, 487, 3, 52, 26, 0, 487, 488, 6, 25, -1, 0, 488, 490, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 486, 1, 0, 0, 0, 490, 51, 1, 0, 0, 0, 491, 492, 6, 26, -1, 0, 492, 493, 3, 54, 27, 0, 493, 494, 6, 26, -1, 0, 494, 512, 1, 0, 0, 0, 495, 496, 10, 2, 0, 0, 496, 505, 6, 26, -1, 0, 497, 498, 5, 28, 0, 0, 498, 506, 6, 26, -1, 0, 499, 500, 5, 29, 0, 0, 500, 506, 6, 26, -1, 0, 501, 502, 5, 26, 0, 0, 502, 506, 6, 26, -1, 0, 503, 504, 5, 27, 0, 0, 504, 506, 6, 26, -1, 0, 505, 497, 1, 0, 0, 0, 505, 499, 1, 0, 0, 0, 505, 501, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 508, 3, 54, 27, 0, 508, 509, 6, 26, -1, 0, 509, 511, 1, 0, 0, 0, 510, 495, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 53, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 515, 516, 6, 27, -1, 0, 516, 517, 3, 56, 28, 0, 517, 518, 6, 27, -1, 0, 518, 532, 1, 0, 0, 0, 519, 520, 10, 2, 0, 0, 520, 525, 6, 27, -1, 0, 521, 522, 5, 20, 0, 0, 522, 526, 6, 27, -1, 0, 523, 524, 5, 21, 0, 0, 524, 526, 6, 27, -1, 0, 525, 521, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 527, 1, 0, 0, 0, 527, 528, 3, 56, 28, 0, 528, 529, 6, 27, -1, 0, 529, 531, 1, 0, 0, 0, 530, 519, 1, 0, 0, 0, 531, 534, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 55, 1, 0, 0, 0, 534, 532, 1, 0, 0, 0, 535, 536, 6, 28, -1, 0, 536, 537, 3, 58, 29, 0, 537, 538, 6, 28, -1, 0, 538, 552, 1, 0, 0, 0, 539, 540, 10, 2, 0, 0, 540, 545, 6, 28, -1, 0, 541, 542, 5, 22, 0, 0, 542, 546, 6, 28, -1, 0, 543, 544, 5, 23, 0, 0, 544, 546, 6, 28, -1, 0, 545, 541, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 3, 58, 29, 0, 548, 549, 6, 28, -1, 0, 549, 551, 1, 0, 0, 0, 550, 539, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 57, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 564, 6, 29, -1, 0, 556, 557, 5, 32, 0, 0, 557, 565, 6, 29, -1, 0, 558, 559, 5, 21, 0, 0, 559, 565, 6, 29, -1, 0, 560, 561, 5, 33, 0, 0, 561, 565, 6, 29, -1, 0, 562, 563, 5, 34, 0, 0, 563, 565, 6, 29, -1, 0, 564, 556, 1, 0, 0, 0, 564, 558, 1, 0, 0, 0, 564, 560, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 3, 60, 30, 0, 567, 568, 6, 29, -1, 0, 568, 573, 1, 0, 0, 0, 569, 570, 3, 60, 30, 0, 570, 571, 6, 29, -1, 0, 571, 573, 1, 0, 0, 0, 572, 555, 1, 0, 0, 0, 572, 569, 1, 0, 0, 0, 573, 59, 1, 0, 0, 0, 574, 575, 6, 30, -1, 0, 575, 583, 3, 62, 31, 0, 576, 577, 5, 49, 0, 0, 577, 578, 3, 10, 5, 0, 578, 579, 6, 30, -1, 0, 579, 580, 5, 50, 0, 0, 580, 582, 1, 0, 0, 0, 581, 576, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 591, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 3, 42, 21, 0, 587, 588, 6, 30, -1, 0, 588, 590, 1, 0, 0, 0, 589, 586, 1, 0, 0, 0, 590, 593, 1, 0, 0, 0, 591, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 591, 1, 0, 0, 0, 594, 595, 6, 30, -1, 0, 595, 61, 1, 0, 0, 0, 596, 597, 3, 66, 33, 0, 597, 598, 6, 31, -1, 0, 598, 627, 1, 0, 0, 0, 599, 600, 5, 62, 0, 0, 600, 627, 6, 31, -1, 0, 601, 602, 3, 64, 32, 0, 602, 603, 6, 31, -1, 0, 603, 627, 1, 0, 0, 0, 604, 605, 3, 36, 18, 0, 605, 606, 6, 31, -1, 0, 606, 627, 1, 0, 0, 0, 607, 608, 3, 38, 19, 0, 608, 609, 6, 31, -1, 0, 609, 627, 1, 0, 0, 0, 610, 611, 3, 34, 17, 0, 611, 612, 6, 31, -1, 0, 612, 627, 1, 0, 0, 0, 613, 614, 3, 32, 16, 0, 614, 615, 6, 31, -1, 0, 615, 627, 1, 0, 0, 0, 616, 617, 3, 20, 10, 0, 617, 618, 6, 31, -1, 0, 618, 627, 1, 0, 0, 0, 619, 623, 5, 49, 0, 0, 620, 621, 3, 48, 24, 0, 621, 622, 6, 31, -1, 0, 622, 624, 1, 0, 0, 0, 623, 620, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 5, 50, 0, 0, 626, 596, 1, 0, 0, 0, 626, 599, 1, 0, 0, 0, 626, 601, 1, 0, 0, 0, 626, 604, 1, 0, 0, 0, 626, 607, 1, 0, 0, 0, 626, 610, 1, 0, 0, 0, 626, 613, 1, 0, 0, 0, 626, 616, 1, 0, 0, 0, 626, 619, 1, 0, 0, 0, 627, 63, 1, 0, 0, 0, 628, 629, 5, 42, 0, 0, 629, 630, 3, 4, 2, 0, 630, 631, 5, 53, 0, 0, 631, 632, 3, 46, 23, 0, 632, 633, 5, 54, 0, 0, 633, 634, 3, 10, 5, 0, 634, 635, 6, 32, -1, 0, 635, 65, 1, 0, 0, 0, 636, 637, 3, 70, 35, 0, 637, 638, 6, 33, -1, 0, 638, 652, 1, 0, 0, 0, 639, 640, 5, 63, 0, 0, 640, 652, 6, 33, -1, 0, 641, 642, 5, 60, 0, 0, 642, 652, 6, 33, -1, 0, 643, 644, 5, 61, 0, 0, 644, 652, 6, 33, -1, 0, 645, 646, 3, 68, 34, 0, 646, 647, 6, 33, -1, 0, 647, 652, 1, 0, 0, 0, 648, 649, 3, 72, 36, 0, 649, 650, 6, 33, -1, 0, 650, 652, 1, 0, 0, 0, 651, 636, 1, 0, 0, 0, 651, 639, 1, 0, 0, 0, 651, 641, 1, 0, 0, 0, 651, 643, 1, 0, 0, 0, 651, 645, 1, 0, 0, 0, 651, 648, 1, 0, 0, 0, 652, 67, 1, 0, 0, 0, 653, 654, 5, 51, 0, 0, 654, 655, 3, 10, 5, 0, 655, 656, 5, 52, 0, 0, 656, 657, 6, 34, -1, 0, 657, 69, 1, 0, 0, 0, 658, 659, 5, 38, 0, 0, 659, 663, 6, 35, -1, 0, 660, 661, 5, 39, 0, 0, 661, 663, 6, 35, -1, 0, 662, 658, 1, 0, 0, 0, 662, 660, 1, 0, 0, 0, 663, 71, 1, 0, 0, 0, 664, 665, 5, 11, 0, 0, 665, 666, 5, 49, 0, 0, 666, 667, 5, 58, 0, 0, 667, 668, 5, 62, 0, 0, 668, 669, 5, 50, 0, 0, 669, 670, 6, 36, -1, 0, 670, 73, 1, 0, 0, 0, 47, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 221, 228, 240, 245, 249, 254, 294, 302, 305, 307, 313, 341, 348, 366, 397, 411, 445, 453, 459, 472, 481, 489, 505, 512, 525, 532, 545, 552, 564, 572, 583, 591, 623, 626, 651, 662] \ No newline at end of file +[4, 1, 65, 676, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 217, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 223, 8, 7, 10, 7, 12, 7, 226, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 244, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 249, 8, 8, 5, 8, 251, 8, 8, 10, 8, 12, 8, 254, 9, 8, 5, 8, 256, 8, 8, 10, 8, 12, 8, 259, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 298, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 306, 8, 13, 1, 13, 5, 13, 309, 8, 13, 10, 13, 12, 13, 312, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 317, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 344, 8, 15, 10, 15, 12, 15, 347, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 354, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 370, 8, 16, 10, 16, 12, 16, 373, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 403, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 417, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 451, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 457, 8, 23, 10, 23, 12, 23, 460, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 465, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 476, 8, 24, 10, 24, 12, 24, 479, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 487, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 495, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 511, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 516, 8, 26, 10, 26, 12, 26, 519, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 531, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 536, 8, 27, 10, 27, 12, 27, 539, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 551, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 556, 8, 28, 10, 28, 12, 28, 559, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 570, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 578, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 587, 8, 30, 10, 30, 12, 30, 590, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 595, 8, 30, 10, 30, 12, 30, 598, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 629, 8, 31, 1, 31, 3, 31, 632, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 656, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 667, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 712, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 260, 1, 0, 0, 0, 20, 267, 1, 0, 0, 0, 22, 273, 1, 0, 0, 0, 24, 282, 1, 0, 0, 0, 26, 288, 1, 0, 0, 0, 28, 318, 1, 0, 0, 0, 30, 353, 1, 0, 0, 0, 32, 355, 1, 0, 0, 0, 34, 377, 1, 0, 0, 0, 36, 385, 1, 0, 0, 0, 38, 391, 1, 0, 0, 0, 40, 397, 1, 0, 0, 0, 42, 422, 1, 0, 0, 0, 44, 450, 1, 0, 0, 0, 46, 452, 1, 0, 0, 0, 48, 466, 1, 0, 0, 0, 50, 494, 1, 0, 0, 0, 52, 496, 1, 0, 0, 0, 54, 520, 1, 0, 0, 0, 56, 540, 1, 0, 0, 0, 58, 577, 1, 0, 0, 0, 60, 579, 1, 0, 0, 0, 62, 631, 1, 0, 0, 0, 64, 633, 1, 0, 0, 0, 66, 655, 1, 0, 0, 0, 68, 657, 1, 0, 0, 0, 70, 666, 1, 0, 0, 0, 72, 668, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 26, 13, 0, 209, 224, 6, 7, -1, 0, 210, 216, 5, 10, 0, 0, 211, 212, 5, 49, 0, 0, 212, 213, 3, 16, 8, 0, 213, 214, 5, 50, 0, 0, 214, 217, 1, 0, 0, 0, 215, 217, 3, 16, 8, 0, 216, 211, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 6, 7, -1, 0, 219, 220, 3, 26, 13, 0, 220, 221, 6, 7, -1, 0, 221, 223, 1, 0, 0, 0, 222, 210, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 231, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 9, 0, 0, 228, 229, 3, 26, 13, 0, 229, 230, 6, 7, -1, 0, 230, 232, 1, 0, 0, 0, 231, 227, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 6, 7, -1, 0, 234, 235, 5, 2, 0, 0, 235, 15, 1, 0, 0, 0, 236, 257, 6, 8, -1, 0, 237, 238, 5, 49, 0, 0, 238, 239, 3, 48, 24, 0, 239, 240, 6, 8, -1, 0, 240, 252, 5, 50, 0, 0, 241, 243, 7, 0, 0, 0, 242, 244, 5, 49, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 3, 16, 8, 0, 246, 248, 6, 8, -1, 0, 247, 249, 5, 50, 0, 0, 248, 247, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 237, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 17, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 260, 261, 5, 4, 0, 0, 261, 262, 5, 49, 0, 0, 262, 263, 3, 48, 24, 0, 263, 264, 6, 9, -1, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 19, 1, 0, 0, 0, 267, 268, 5, 6, 0, 0, 268, 269, 5, 49, 0, 0, 269, 270, 3, 48, 24, 0, 270, 271, 6, 10, -1, 0, 271, 272, 5, 50, 0, 0, 272, 21, 1, 0, 0, 0, 273, 274, 5, 5, 0, 0, 274, 275, 5, 49, 0, 0, 275, 276, 3, 48, 24, 0, 276, 277, 5, 55, 0, 0, 277, 278, 3, 48, 24, 0, 278, 279, 5, 50, 0, 0, 279, 280, 5, 59, 0, 0, 280, 281, 6, 11, -1, 0, 281, 23, 1, 0, 0, 0, 282, 283, 5, 14, 0, 0, 283, 284, 5, 17, 0, 0, 284, 285, 3, 26, 13, 0, 285, 286, 6, 12, -1, 0, 286, 287, 5, 2, 0, 0, 287, 25, 1, 0, 0, 0, 288, 310, 6, 13, -1, 0, 289, 290, 3, 44, 22, 0, 290, 291, 6, 13, -1, 0, 291, 309, 1, 0, 0, 0, 292, 297, 5, 40, 0, 0, 293, 294, 5, 8, 0, 0, 294, 295, 3, 16, 8, 0, 295, 296, 6, 13, -1, 0, 296, 298, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 309, 5, 59, 0, 0, 300, 305, 5, 41, 0, 0, 301, 302, 5, 8, 0, 0, 302, 303, 3, 16, 8, 0, 303, 304, 6, 13, -1, 0, 304, 306, 1, 0, 0, 0, 305, 301, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 309, 5, 59, 0, 0, 308, 289, 1, 0, 0, 0, 308, 292, 1, 0, 0, 0, 308, 300, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 316, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 313, 314, 3, 12, 6, 0, 314, 315, 6, 13, -1, 0, 315, 317, 1, 0, 0, 0, 316, 313, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 27, 1, 0, 0, 0, 318, 319, 5, 15, 0, 0, 319, 320, 5, 62, 0, 0, 320, 321, 5, 16, 0, 0, 321, 322, 3, 30, 15, 0, 322, 323, 3, 26, 13, 0, 323, 324, 5, 2, 0, 0, 324, 325, 6, 14, -1, 0, 325, 29, 1, 0, 0, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 49, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 57, 0, 0, 331, 332, 3, 48, 24, 0, 332, 333, 6, 15, -1, 0, 333, 334, 5, 50, 0, 0, 334, 354, 1, 0, 0, 0, 335, 336, 6, 15, -1, 0, 336, 337, 5, 51, 0, 0, 337, 338, 3, 48, 24, 0, 338, 345, 6, 15, -1, 0, 339, 340, 5, 55, 0, 0, 340, 341, 3, 48, 24, 0, 341, 342, 6, 15, -1, 0, 342, 344, 1, 0, 0, 0, 343, 339, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 52, 0, 0, 349, 354, 1, 0, 0, 0, 350, 351, 6, 15, -1, 0, 351, 352, 5, 62, 0, 0, 352, 354, 6, 15, -1, 0, 353, 326, 1, 0, 0, 0, 353, 335, 1, 0, 0, 0, 353, 350, 1, 0, 0, 0, 354, 31, 1, 0, 0, 0, 355, 356, 6, 16, -1, 0, 356, 357, 5, 51, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 5, 36, 0, 0, 359, 360, 5, 62, 0, 0, 360, 361, 5, 42, 0, 0, 361, 362, 3, 30, 15, 0, 362, 363, 5, 55, 0, 0, 363, 364, 3, 48, 24, 0, 364, 371, 6, 16, -1, 0, 365, 366, 5, 55, 0, 0, 366, 367, 3, 48, 24, 0, 367, 368, 6, 16, -1, 0, 368, 370, 1, 0, 0, 0, 369, 365, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 6, 16, -1, 0, 375, 376, 5, 52, 0, 0, 376, 33, 1, 0, 0, 0, 377, 378, 5, 62, 0, 0, 378, 379, 5, 56, 0, 0, 379, 380, 5, 13, 0, 0, 380, 381, 5, 49, 0, 0, 381, 382, 3, 48, 24, 0, 382, 383, 5, 50, 0, 0, 383, 384, 6, 17, -1, 0, 384, 35, 1, 0, 0, 0, 385, 386, 5, 18, 0, 0, 386, 387, 5, 49, 0, 0, 387, 388, 3, 48, 24, 0, 388, 389, 5, 50, 0, 0, 389, 390, 6, 18, -1, 0, 390, 37, 1, 0, 0, 0, 391, 392, 5, 19, 0, 0, 392, 393, 5, 49, 0, 0, 393, 394, 3, 48, 24, 0, 394, 395, 5, 50, 0, 0, 395, 396, 6, 19, -1, 0, 396, 39, 1, 0, 0, 0, 397, 398, 6, 20, -1, 0, 398, 402, 5, 62, 0, 0, 399, 400, 3, 42, 21, 0, 400, 401, 6, 20, -1, 0, 401, 403, 1, 0, 0, 0, 402, 399, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 416, 1, 0, 0, 0, 404, 405, 5, 48, 0, 0, 405, 417, 6, 20, -1, 0, 406, 407, 5, 43, 0, 0, 407, 417, 6, 20, -1, 0, 408, 409, 5, 44, 0, 0, 409, 417, 6, 20, -1, 0, 410, 411, 5, 46, 0, 0, 411, 417, 6, 20, -1, 0, 412, 413, 5, 45, 0, 0, 413, 417, 6, 20, -1, 0, 414, 415, 5, 47, 0, 0, 415, 417, 6, 20, -1, 0, 416, 404, 1, 0, 0, 0, 416, 406, 1, 0, 0, 0, 416, 408, 1, 0, 0, 0, 416, 410, 1, 0, 0, 0, 416, 412, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 5, 59, 0, 0, 420, 421, 6, 20, -1, 0, 421, 41, 1, 0, 0, 0, 422, 423, 5, 51, 0, 0, 423, 424, 3, 48, 24, 0, 424, 425, 6, 21, -1, 0, 425, 426, 5, 52, 0, 0, 426, 43, 1, 0, 0, 0, 427, 428, 3, 14, 7, 0, 428, 429, 6, 22, -1, 0, 429, 451, 1, 0, 0, 0, 430, 431, 3, 24, 12, 0, 431, 432, 6, 22, -1, 0, 432, 451, 1, 0, 0, 0, 433, 434, 3, 28, 14, 0, 434, 435, 6, 22, -1, 0, 435, 451, 1, 0, 0, 0, 436, 437, 3, 18, 9, 0, 437, 438, 6, 22, -1, 0, 438, 451, 1, 0, 0, 0, 439, 440, 3, 22, 11, 0, 440, 441, 6, 22, -1, 0, 441, 451, 1, 0, 0, 0, 442, 443, 3, 48, 24, 0, 443, 444, 6, 22, -1, 0, 444, 445, 6, 22, -1, 0, 445, 446, 5, 59, 0, 0, 446, 451, 1, 0, 0, 0, 447, 448, 3, 40, 20, 0, 448, 449, 6, 22, -1, 0, 449, 451, 1, 0, 0, 0, 450, 427, 1, 0, 0, 0, 450, 430, 1, 0, 0, 0, 450, 433, 1, 0, 0, 0, 450, 436, 1, 0, 0, 0, 450, 439, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 451, 45, 1, 0, 0, 0, 452, 458, 6, 23, -1, 0, 453, 454, 3, 44, 22, 0, 454, 455, 6, 23, -1, 0, 455, 457, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 464, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 462, 3, 12, 6, 0, 462, 463, 6, 23, -1, 0, 463, 465, 1, 0, 0, 0, 464, 461, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 47, 1, 0, 0, 0, 466, 467, 6, 24, -1, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 477, 1, 0, 0, 0, 470, 471, 10, 2, 0, 0, 471, 472, 5, 37, 0, 0, 472, 473, 3, 50, 25, 0, 473, 474, 6, 24, -1, 0, 474, 476, 1, 0, 0, 0, 475, 470, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 49, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 481, 3, 52, 26, 0, 481, 486, 6, 25, -1, 0, 482, 483, 5, 24, 0, 0, 483, 487, 6, 25, -1, 0, 484, 485, 5, 25, 0, 0, 485, 487, 6, 25, -1, 0, 486, 482, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 3, 52, 26, 0, 489, 490, 6, 25, -1, 0, 490, 495, 1, 0, 0, 0, 491, 492, 3, 52, 26, 0, 492, 493, 6, 25, -1, 0, 493, 495, 1, 0, 0, 0, 494, 480, 1, 0, 0, 0, 494, 491, 1, 0, 0, 0, 495, 51, 1, 0, 0, 0, 496, 497, 6, 26, -1, 0, 497, 498, 3, 54, 27, 0, 498, 499, 6, 26, -1, 0, 499, 517, 1, 0, 0, 0, 500, 501, 10, 2, 0, 0, 501, 510, 6, 26, -1, 0, 502, 503, 5, 28, 0, 0, 503, 511, 6, 26, -1, 0, 504, 505, 5, 29, 0, 0, 505, 511, 6, 26, -1, 0, 506, 507, 5, 26, 0, 0, 507, 511, 6, 26, -1, 0, 508, 509, 5, 27, 0, 0, 509, 511, 6, 26, -1, 0, 510, 502, 1, 0, 0, 0, 510, 504, 1, 0, 0, 0, 510, 506, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 3, 54, 27, 0, 513, 514, 6, 26, -1, 0, 514, 516, 1, 0, 0, 0, 515, 500, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 53, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 6, 27, -1, 0, 521, 522, 3, 56, 28, 0, 522, 523, 6, 27, -1, 0, 523, 537, 1, 0, 0, 0, 524, 525, 10, 2, 0, 0, 525, 530, 6, 27, -1, 0, 526, 527, 5, 20, 0, 0, 527, 531, 6, 27, -1, 0, 528, 529, 5, 21, 0, 0, 529, 531, 6, 27, -1, 0, 530, 526, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 3, 56, 28, 0, 533, 534, 6, 27, -1, 0, 534, 536, 1, 0, 0, 0, 535, 524, 1, 0, 0, 0, 536, 539, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 55, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 540, 541, 6, 28, -1, 0, 541, 542, 3, 58, 29, 0, 542, 543, 6, 28, -1, 0, 543, 557, 1, 0, 0, 0, 544, 545, 10, 2, 0, 0, 545, 550, 6, 28, -1, 0, 546, 547, 5, 22, 0, 0, 547, 551, 6, 28, -1, 0, 548, 549, 5, 23, 0, 0, 549, 551, 6, 28, -1, 0, 550, 546, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 3, 58, 29, 0, 553, 554, 6, 28, -1, 0, 554, 556, 1, 0, 0, 0, 555, 544, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 57, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 569, 6, 29, -1, 0, 561, 562, 5, 32, 0, 0, 562, 570, 6, 29, -1, 0, 563, 564, 5, 21, 0, 0, 564, 570, 6, 29, -1, 0, 565, 566, 5, 33, 0, 0, 566, 570, 6, 29, -1, 0, 567, 568, 5, 34, 0, 0, 568, 570, 6, 29, -1, 0, 569, 561, 1, 0, 0, 0, 569, 563, 1, 0, 0, 0, 569, 565, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 3, 60, 30, 0, 572, 573, 6, 29, -1, 0, 573, 578, 1, 0, 0, 0, 574, 575, 3, 60, 30, 0, 575, 576, 6, 29, -1, 0, 576, 578, 1, 0, 0, 0, 577, 560, 1, 0, 0, 0, 577, 574, 1, 0, 0, 0, 578, 59, 1, 0, 0, 0, 579, 580, 6, 30, -1, 0, 580, 588, 3, 62, 31, 0, 581, 582, 5, 49, 0, 0, 582, 583, 3, 10, 5, 0, 583, 584, 6, 30, -1, 0, 584, 585, 5, 50, 0, 0, 585, 587, 1, 0, 0, 0, 586, 581, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 596, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 3, 42, 21, 0, 592, 593, 6, 30, -1, 0, 593, 595, 1, 0, 0, 0, 594, 591, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 600, 6, 30, -1, 0, 600, 61, 1, 0, 0, 0, 601, 602, 3, 66, 33, 0, 602, 603, 6, 31, -1, 0, 603, 632, 1, 0, 0, 0, 604, 605, 5, 62, 0, 0, 605, 632, 6, 31, -1, 0, 606, 607, 3, 64, 32, 0, 607, 608, 6, 31, -1, 0, 608, 632, 1, 0, 0, 0, 609, 610, 3, 36, 18, 0, 610, 611, 6, 31, -1, 0, 611, 632, 1, 0, 0, 0, 612, 613, 3, 38, 19, 0, 613, 614, 6, 31, -1, 0, 614, 632, 1, 0, 0, 0, 615, 616, 3, 34, 17, 0, 616, 617, 6, 31, -1, 0, 617, 632, 1, 0, 0, 0, 618, 619, 3, 32, 16, 0, 619, 620, 6, 31, -1, 0, 620, 632, 1, 0, 0, 0, 621, 622, 3, 20, 10, 0, 622, 623, 6, 31, -1, 0, 623, 632, 1, 0, 0, 0, 624, 628, 5, 49, 0, 0, 625, 626, 3, 48, 24, 0, 626, 627, 6, 31, -1, 0, 627, 629, 1, 0, 0, 0, 628, 625, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 50, 0, 0, 631, 601, 1, 0, 0, 0, 631, 604, 1, 0, 0, 0, 631, 606, 1, 0, 0, 0, 631, 609, 1, 0, 0, 0, 631, 612, 1, 0, 0, 0, 631, 615, 1, 0, 0, 0, 631, 618, 1, 0, 0, 0, 631, 621, 1, 0, 0, 0, 631, 624, 1, 0, 0, 0, 632, 63, 1, 0, 0, 0, 633, 634, 5, 42, 0, 0, 634, 635, 3, 4, 2, 0, 635, 636, 5, 53, 0, 0, 636, 637, 3, 46, 23, 0, 637, 638, 5, 54, 0, 0, 638, 639, 6, 32, -1, 0, 639, 65, 1, 0, 0, 0, 640, 641, 3, 70, 35, 0, 641, 642, 6, 33, -1, 0, 642, 656, 1, 0, 0, 0, 643, 644, 5, 63, 0, 0, 644, 656, 6, 33, -1, 0, 645, 646, 5, 60, 0, 0, 646, 656, 6, 33, -1, 0, 647, 648, 5, 61, 0, 0, 648, 656, 6, 33, -1, 0, 649, 650, 3, 68, 34, 0, 650, 651, 6, 33, -1, 0, 651, 656, 1, 0, 0, 0, 652, 653, 3, 72, 36, 0, 653, 654, 6, 33, -1, 0, 654, 656, 1, 0, 0, 0, 655, 640, 1, 0, 0, 0, 655, 643, 1, 0, 0, 0, 655, 645, 1, 0, 0, 0, 655, 647, 1, 0, 0, 0, 655, 649, 1, 0, 0, 0, 655, 652, 1, 0, 0, 0, 656, 67, 1, 0, 0, 0, 657, 658, 5, 51, 0, 0, 658, 659, 3, 10, 5, 0, 659, 660, 5, 52, 0, 0, 660, 661, 6, 34, -1, 0, 661, 69, 1, 0, 0, 0, 662, 663, 5, 38, 0, 0, 663, 667, 6, 35, -1, 0, 664, 665, 5, 39, 0, 0, 665, 667, 6, 35, -1, 0, 666, 662, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 71, 1, 0, 0, 0, 668, 669, 5, 11, 0, 0, 669, 670, 5, 49, 0, 0, 670, 671, 5, 58, 0, 0, 671, 672, 5, 62, 0, 0, 672, 673, 5, 50, 0, 0, 673, 674, 6, 36, -1, 0, 674, 73, 1, 0, 0, 0, 48, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 216, 224, 231, 243, 248, 252, 257, 297, 305, 308, 310, 316, 345, 353, 371, 402, 416, 450, 458, 464, 477, 486, 494, 510, 517, 530, 537, 550, 557, 569, 577, 588, 596, 628, 631, 655, 666] \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AccessExpressionContext.class index 60483e9ce06b4fc26f96db5656ab7f724566dbb0..3f0cfc3d6686ccf4498c6267ecda94b45a3047ff 100644 GIT binary patch delta 127 zcmbO!H&brIYA(hTlh<(BF`k;dkVkSd3%4HQnaRf79*pO}{HZ|xg~>;N{L5gz8jm64 zwaIUI&N(TatE&`>k|e+o~M(|`7|c~<27M@ V0pz^|@={peFbMIyoxFgr5&%(gEb9OO delta 127 zcmbO!H&brIYA(j*lh<(BF|M4vkVkSd3%4HQ>dD639*k?j{HZ|x`pHLt{7qoK8jm64 z*2!;p&JLtatE&`>tO~#o+FdZ`7|c~<27MD V4&b+H5U0@OUd~JaegqO@ delta 81 zcmew+{7ra6JUipv$qDTCjQ1ulV0UEVcrf`fyDb~XV+J;kCzI7Ue3>|&PA=u}VB>hf kAjt7@vI?ihV!Z diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$AdditiveExpressionContext.class index e89769ad8b700ab6b34112e7fadf985a3df8bc1a..75c2df357c2f86c1f100d2a5ee7299beb5fa89f4 100644 GIT binary patch delta 81 zcmca1c0+7KBL`!`;<+NkXU|{3UoZP|b$Cx$wI;SUV jE`uO<-sCnejmf@TCai@(UJ;O&!dl88#9cP|Jy#|G*B}=c delta 81 zcmca1c0+7KBL}1Xf|PFKgP7l7r8xIGZ_RqvL-k1XiRqJF=5RG T^74SZ6xKopA&#QSFL??971|^N diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BodyContext.class index 27c9d5593b0b86db33fa116ae7d5799c795db154..2726d04bc91511c0de7c7d28715d0eaf651d4027 100644 GIT binary patch delta 75 zcmeAa>lE7%%E7p2au|mfp39rJdl^ddWk`Z^YY{wT!jF;BpAW~ delta 75 zcmeAa>lE7%%E35$au|mf$GU`pjdST_Lry=&Ws@5?Jy};W2y(8P etk0z}`5UJR>slah9gvs8x{*PMbJOG*T!jFHIu|wo diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class index bb0c8fbf1b979638eaf04255d9ac659a13b8a343..ab87651656dd10e7c25a1dadcd6292677f4abfe4 100644 GIT binary patch delta 69 zcmX>scvx^lIUD1H$rWt&j1MR8V6$U=%)rL?Wb$t|KgOq%z1TfjUoZ&ry`21$U1RbA Yb`#b&K;By*FNO63gAm`x$w?fE0GDbR;{X5v delta 69 zcmX>scvx^lIUD2A$rWt&jK?PLV6$UA!NA6Ma`JCBKgLs&z1Tfj&oT(|otylVU1RbA Yb`#c%K;9)FFNO6ggAm`f$w?fE0C9~Nx&QzG diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChompStatementContext.class index da6eac3e04c1192f274ee9d4b99a0690b3f61fe9..45bb05fc53caa51677425854377d084856735362 100644 GIT binary patch delta 81 zcmZn>Z4uqDmYvaP@;Y{VM&rrvfTYP}Jq{;Ev&n@VcC3~RY#dgTw{Z9|T2E%?^klVT i5ah6*9LO2N>I7st16dlAZ*khNx-kfGxKEbm$^-yh!V_-* delta 81 zcmZn>Z4uqDmYq>>@;Y{VMxn{?fTZwbJq{;E(aD7zcB~Q%Y#fr4w{Z9|N=;_w^kkJ~ i5af`X9LO2Nst9B$0a+T8Z*khNsxk<1s7;pU$^-x#XA!~x diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ChopStatementContext.class index 92bd3482a3ba68c949bae06e176c2296ccaef12c..4a9b2d5c4cb14dba90f2cbfdfb2869623e19e974 100644 GIT binary patch delta 84 zcmew<@>68PB6h~FlNYnwGk%-=7)XAftjyuW_;Yd^haKx51~&G;lUH*1G5(wUgTsT3 mgONdygK6?|PL0WVoW^V%tUxXskekfL!O0-R!8KWcD-!?|q8U5@ delta 84 zcmew<@>68PB6h|rlNYnwGhUti7)V~5tjyuWcw=%JhaKx}1~&FPlUH*1G2Wg0gTsT3 n{Q-j@`@_l0IW;EdaT>F+KLK)|0=da->@OIE*k4W-;K~F5L|Pq* diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ConditionContext.class index b8db7bb05498917251372d125855e49703185585..77ee98fcde119ec64c4e0e537176db87f751e234 100644 GIT binary patch delta 168 zcmew?^I2wtAtw`y=wxml$;m#Px=bwMlMT7$C(q*4U}BL3i{9nbW0VF9YIA8a%7Ml5 zxC|K;CokagU{nV4nYi^BRe@?e7}df2$w0m)SkFUlO-3D{m=~iyP`&)*QXWlKBL+4W wci`?Xeyc&};cuiOpfjlK3FNIZ=L5M|dG8bPa02W&(lmGw# diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$EqaulityExpressionContext.class index dc80e008ad0fbafa43ff4b727bf0e89b15e0a5f3..14e8f59a4e676c93a043a34ff32cfd790879b3b8 100644 GIT binary patch delta 81 zcmdlczD<0?Sq{dE$>%t{7^^2sa(Xh>PEO{uXRMpNnA486fq{*yaq=@xKgOoXrd*z^ jtqg)(ZIhpHX-r%t{7^5aja(XhxOit#sXN;Y^nA46mo`H=kVe&IhKgPt#rd*z^ jDGY*Ksgs{@X-rP`50* diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ExpressionContext.class index 3ca79e468885149d01b58da7bdd232ef1786f21c..8327541a266ade8125009ea5c55f9af35da14ce9 100644 GIT binary patch delta 81 zcmbOsIzw~;2NRdTWF`(rCNAO0t{iquT%wa(Ic(Xu#2MJQBqpEW@MYqXoGi}i!Nw)S jAjl;<`533hTg&y@)PkQ5K{ delta 81 zcmbOsIzw~;2NUP}$xIxMOq`!4yK>kuaekTH%3;gK`Hg{%^ZVoz9KKAPKPHQFda!Z+ lW)S53Gx->&#^hd3V>ZtJ41!z?KyC^vGlLKp%Vd47OaS^(7hM1V diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FilterStatementContext.class index bc3111cb8594a4d3a87b67ec0710d9d0494b0d27..57ec9adef042ab6a28222899b1f727422bbf1c58 100644 GIT binary patch delta 133 zcmew>^H*lWPfkYr$?`m+lli%{7#+YYe=bc%$H|pk?u^cp4{~`jx`IU&xV0GFz^nvr zO-7H&UEE%b-jlC#doub0MV%P^CnxdPu?8`)u?J6H%HzivGWiRSCu=x^AbZ5*#k?Am Zvv^Hdqk+5_ATNbAo^H*lWPfkX;$?`m+lli%{80En%e=bc%g~^p%?u<&44{~`js(?imxV0En!K?&s zO-A*}UEE%bT9dDGdot<(MV%P+CMWUOu^KY4u^UZZ%HzjqJoyWcC#xBQAiMeG#k?Am Zvv^Hdt$;jhATNd0jzNgselibVApq`PAXNYW diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ForStatementContext.class index 3643248267053a7373ec3533a30f8098c95b68d7..803537049fb32fc0e3c8ae455bc487b9d96a7ba7 100644 GIT binary patch delta 93 zcmdlizFB-j5C>!8nXJX-$r{ce$QCjACYQ$K1zaYq(Li1dke9+5&mhE>FxiQ_5CFAj7|#Fz diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index e1bb82eaffa8884a16e28a5b35420a4bc823a5f6..af03e41ce373f339cb927ba41ad3d0e660557247 100644 GIT binary patch delta 86 zcmX>hd_s7`9yUgW$$Q!C85Jl01(HgWZQ1P^l_%E%NtMZa+3i@>7})sLCvo^OYE1U$ m@MP6y5aidH{EtIp@=*>GR(&AP0LV*WHD(avH<_HynFs(29~LnH delta 86 zcmX>hd_s7`9yUhS$$Q!C8QCWP1(NKOZQ1P^IVRTvNzTc8+3i@l8QA!FCUN*N@=o^W m@MINW5abt}{EtIp@=*>GRuLdi6v#_qm0%F!mzq!X4IW*$Rf)E;!f^h*}=w<17tZ(c4Adybex>Y zsxJYOamr7rbk5H!Nv$ZcwzFnrFwpSSglpS;lC_JOl^<+E2xlK-+~mic_Kfk9mAUK~ z6DP0Xk(^x3WyqK^c`cU*V;YbzJ6V`pi!o#Jd2ad1vD})BSzxgxK(QR4mdsNN-mzsZd}HU$&(FuBqvYiGGt7f zT+Jgt`3aXMV+L4Eom+46JZ`qhg1l0bOSv@}bHJiIxb+zGCiC#hPiEuMWGn=Vc`=p% zb$T$Cf#vV==rL9R$?L~hH~9sxCu<{vAam2?>3kZKQi UTYi_@% diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class index e521b4cc2e33d56966d1894e7785fb954d8a46ec..9ab5a37134c2b454ef2ca663165909c97d680365 100644 GIT binary patch delta 991 zcmah|Id2m|6#iyr<72a4>?O{^;=tx0fnCB8aDZ@yGbaIaUlkP%4K0ORTC`O1_j2GhN>ogvXXoiGh$0JBu5H90teerOXg&Qo9zyEaPv(1*04bBX}Owwl*K}b zQ3qq#nS7D=`zNp~kKGO;#H|&zBwC-XWzl++dm)<`hDA+q71)DGW&(S$&&2&WVB!=G zGTOX3ggV!0?xvua0fnesS1+N~m`fbyn$zc{Z#cr-No#NvGu#Or+kkHxg6S-R@0kS0 zHxL+nl!gD1i9dmpw4ocQ>jsipdtjn#`ezTOzhn9oW;G^xY}cCI+FzNqe6}|K0{Inn z@=;uSg~~e9bUrpCN`H`ZVJO11tSv_XzlJj;(b-v?W3|9}Trjkp*CZ2tsmkH=4yT#9 zD|#%cj{P~z8!T{@T-1gazlXnyQv42n^cq_wv^!;9&$x3fRNOwpHkcyXY}EI#fJG86 z8HlJbUH+fK(7y@=DikvmG6gPTg*NzVO+0M(5U_`E6)t-S*~5s$TFf}kNMlw{FAhAn z)T0!1CLQ1sF4KR5i1bUDb)7}Hft%(?;1*-R3;oZzjUs;ncerk1 Hyo=&rCqrCt delta 1123 zcma)4NlX)A7=8bAnQl`$BLzBLEOkLUqM(4dTTu{21Q8VXwid&oCDAtFWW&vq3HeVP zJ$dl}X#&xMfvX2EMvaMyiJEAliQY|&-%N+Ln3|X-^S*!jzPHTGtL6u)@5S$D&jBQm z79lVM`J64dqzy2;2!)}Gjv+o`lN;h;T_5jRp|)pcN4YB{MsnA4+CZx0C&aTsl8JlM}Ip-xpdPF>Lc-JKFeTA?4kP zxCqUIU1(>B&lgqRAo@xPON7~lsU$-WUlYQ5oYJ^;g8AhsQ!H`!P9dAg5*+km}F>KcdHQ08WhV)O#mAhc4H4s3?1k+a4+^5*oAHbd$6C-O^jX~pzA^Y&=F`m zMEC4;g7g}PY4+$d95{lbgbc?_?#m6_H+8wkO|I8jtNXStH-QsIhGA!@Cd0cLuDg<< z4<`-oyfaj+=6zq6dkXzJm$G-mLK8KPE3#!7?p4T(bQDmP_)u4ZJ_%D|kR&X$BgVDR z3N|ePMRVUp2x*Z&yzD1+w(jkZUS$RMIIpj}a0aH8z+` zDIMa4KKsK6y!DSy2Boy*mB3MT0<0aqycRb#q_>jpC1AdHcdmFPF&q#wgA Ox;79d3H2wFg7XhJE{moB diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LenStatementContext.class index a0ddab64d0d59f0aeeb63eca7e3e67352fdfc512..581d8714611db5a330d57ecace1766c78482d197 100644 GIT binary patch delta 81 zcmaDS@=j#Kbauw)lV`BoGrpL714zD{EWzQ#_ny`Kc@_qn$DXhO4gjoJeX64ER00*8O&;S4c delta 81 zcmaDS@=j#KbauwGlV`BoGoG7#14y2qEWzQ#cyV$xhaKw`1~!(fljm{xFny}sl^6mk7DXb3}gjgO;X64ER0My|eegFUf diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class index be0d80e574f39c42c63dd1aa4213cfd46dd796df..d7af7c12da2ae92e951d53d603b82293d1cd9bc1 100644 GIT binary patch delta 75 zcmdldvQK2ga(2dLlUK0YGcKR}g58O6eTc(P7o5agRa eIfqkYvN5L#>ntE|HjtOXI*&n!Z~o+~oS6Wf<`+Q# diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LoopBodyContext.class index 09c9e70d225ca95bfc25af52f5183df0272ee3dd..c233c51b1bfb33502f3f28cd26418a5ef131823c 100644 GIT binary patch delta 171 zcmdm^xJPk=2KQuVKB>u0+2`BG0p>v zZ32od1d4evE}7iVCqLPZSC?`5(e-2O9 jN(MpJs>$m(H71vGny}Uad38Wu3Tq>S5Np$9ajr}N_e>X$ delta 81 zcmZn=Z4lkCik&fd@@jTF#*oRc*zFlZCu?yyF@{gh<*;LoVqjy9p1gs>k1=NQe-2O9 jcm_e%gvskTH71vGny@AVc_~0%3Trxp5NpO{ajr}N#GV#C diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MatchPatternStatementContext.class index 129cf7f5e24b52e23305d13da52a1f7add4a2d8c..3edb01f1e2a731ada943fad74ead679f264a4d91 100644 GIT binary patch delta 93 zcmaDR_DpO8KL_K6$pReqj2kBh0Le|0CjiOKlP>_tEt3T}ofx-G4(7CD-O0elzH9O{ tPCv%olb>>WvhHILWZyq|3YW&@Xf6}hLqOhPATNdW7=sY|@yUO=G6AL;9>@Ry delta 93 zcmaDR_DpO8KL=y~WC0F)#tD-HfaJu<6M*ET$rpg+ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$MultiplicativeExpressionContext.class index d6eee890fae0a3ce2ece6572530bf936da29c235..0b9e3b5b2d300a179af808b13100604f7910991e 100644 GIT binary patch delta 85 zcmew^_FZhl0uILOlNWM0G2Q}_qLY7eXffWItiox}cz1FNryc8k1~%>olb3V)F+QC9 ojnk9$34!w ojnk9$FoPiXk;zNBG$!Y8nXn!Q@=gGGDXga%gt*U4=Ht!;06i2PS^xk5 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$OtherExpressionContext.class index bf146d929652e7118321e905efce24193614a85c..afca839e9c901215780bf64382849d03839f14bb 100644 GIT binary patch delta 151 zcmbQNI$3qYCSJy{$^ZF8C!gTeVvLylnb(Oi3e5NB(`AeWv-*In1TgC&kd+K%IWeYz z`QiM!jG188EPgGvkEvd=7B|H1vFU;8Q6G>CU*)v-*H6dob%FkmUqqIWf9| z`QiM!j2>XtEPgFUugORG?HRo%vkEvd`hrDc1vFU$7}$6NCwB|@F$PV(CE&>#${@%a fHn~$!V{(9?32P*f7X{>{u*Nb7@y1R5B)AX&p$aZ% diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PreUnaryExpressionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PreUnaryExpressionContext.class index a6866b5bb059cec693ec71f00ff8773b4adeba7a..c657b8ab3396d31a0360040b99c0524ca0c704cf 100644 GIT binary patch delta 87 zcmdldwohz>76+s6WNi+6M*qp#Kr&$RY9JXn`8ALXnyk%f#~Q-G#uGX@kJFDaZ1P@C lPu55VL7u3|Ib0f(jk!!%V}ZOlATNbAkwJ(jY4TOBOaKr{7Ty2= delta 87 zcmdldwohz>76+rwWNi+6M!m_|KvIA5Y9MJa`8ALaAgMn2Igr$ttj=l2s5v`V|TP{CFc57hV7W delta 99 zcmeB`=#|)z#=*!vIi16vk!SL9Ajv!VIgsR=tj=l2$Uiv^ND59~%IU=@GWi3i2dg*( x8>_@*TP{CF$;mxjo~$wqf~>NWt+_QOGjW@+Dgb$kKwb)~3WE@<>f|NdnE;!a6}|uf diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$PutsStatementContext.class index b8c15430f1bb99117682a2691f69681bded49e23..c25d558f4bba234af8c5b4b410d9d906a88bfe0a 100644 GIT binary patch delta 87 zcmX>kdPsD`8g|Czlh?A_Gp?BY7D%p~tjl4?xN33^hZEzP$?G}nSl2VKv22+9iNlX^ q<77upPu49Af-GAnf8f-Zyq(j8bqA2Q6Ua+p-NPWnvUhSMS0(^Y!5!5A delta 87 zcmX>kdPsD`8g|Cs$!po|8T%%`1(N-fbvf)9Crr-aaAKS^c|C_6>r@6dmT8keariM# qpX|u#$vTTckY)Dd51bm4w{x1X&I9u119>T|ix`Ah7Eg}k$^-xv4IF6z diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$RangeContext.class index 8eb1b0b39404a5ea956bbc5287402427946a5c1c..a7933f166f05131affe7b20a1224cfaa8fcd4baa 100644 GIT binary patch delta 120 zcmZ1=y+C?{Iw#}m$r_yYjB6%m0LitJS8&=fuAlsyOL7vIA>*dWMqHkZTPD|V*)wjP zyobw)k6MqHkZvnJPY*)z_b zyobwV6qR8d^ouWNIsf;21q`h%)@2J`jml<>)B*~ tE*!>E tEGDl6jpTxA!d!qFE}#+VRjSk delta 77 zcmca8a#3W%E_Oz-$-CL@C);xHOlIRSXOx_5$6?1R!@$NYJGqg=k5O*&1rASEMFv4; frOEZ28k5~PO;}ZdJT)LMg;kS5h*@j$3(iac0T~iX diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$StatementContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$StatementContext.class index 070551c54fcbbac292487533b786b68fecfb9fc4..4469db719026cf389576d4b211ec037c3dce581e 100644 GIT binary patch delta 129 zcmcbva9v@8BM+nX#3TqsL L5NG`4ef%>4>y;#A delta 129 zcmcbva9v@8BM+n04at0zZ diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class index 27d9eb463712472e8245a2b5c0ee06fc4e696ac2..027dd8be6fecef3b1c93aff896f715a7f5ea8668 100644 GIT binary patch delta 93 zcmZ1=xj=G*87HI7WOGh?M!U)7K+=Blb|C36`8%f*qtj$7E+C21ObfmD-Z8z~ z6w|WByX#zfa>*rkY1eYO^vhlDE`{GmnweeMUaxcC_m7vw8aF*`qRMt z?y#(>IhpyHJnAG)N|NjwDfu(z%*x6wEU1LxqNM)p%)-K~{M-?lg;Qq=;szz^tjuf> zs7FbIY6P4l9=Y?{=L1%hizI4AWC0afhmgOYv zk$-x24w@+4??6eTS-ioc&BjZ&I-v?vXXee8l9DN@hoo6@T31S3nFR&eGjh%5cjxfb zsaXXD>DdKfM^CiAAi|yA;OP`m*}g!`dUAF?Folr%QR2>eEOSmycHvX0Qu?iwG|bP+ z5u(h@k?-_Jj?8JCua9TR=>sWgI%`f&VfO5t?5W6C`R-ukLaF0(GxIBza|aa6thh{T z2)LG4I5R6>P8M<*H0qglDr5FHDm9k~i3K90w^;vhc3j2FyA{9cX@ z?LqWDXhTO+Apt!AR(H(i6d&T~Svdt+h(FA6cwF3>!l7ANg){Sbann%Ij#f7SI31k} zr9(Ra%;Yq53>t*k^E}pu$BKAtAdk)CvB5mHfM*zt$csEO5Rt|FUWX2dE#

  • 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 YR9uhmS!;7a>ws<{9 From 4ba9066808368fe729ce7d879954ce9695137cf5 Mon Sep 17 00:00:00 2001 From: javad Date: Thu, 9 May 2024 18:44:15 +0330 Subject: [PATCH 23/23] fixed some bugs --- Phase2Template/.idea/misc.xml | 10 + Phase2Template/Phase2/samples/all.fl | 16 +- Phase2Template/Phase2/samples/in20.fl | 31 + .../nodes/declaration/PatternDeclaration.java | 2 +- .../{grammer => grammar}/FunctionCraft.g4 | 9 +- .../src/main/symbolTable/SymbolTable.java | 6 + .../nameAnalyzer/DependencyDetector.java | 152 +- .../visitor/nameAnalyzer/NameAnalyzer.java | 13 +- .../parsers/FunctionCraftBaseListener.java | 2 +- .../src/parsers/FunctionCraftBaseVisitor.java | 2 +- .../src/parsers/FunctionCraftLexer.java | 2 +- .../src/parsers/FunctionCraftListener.java | 2 +- .../src/parsers/FunctionCraftParser.java | 11 +- .../src/parsers/FunctionCraftVisitor.java | 2 +- .../gen/main/grammar/FunctionCraft.interp | 178 + .../gen/main/grammar/FunctionCraft.tokens | 124 + .../grammar/FunctionCraftBaseListener.java | 493 ++ .../grammar/FunctionCraftBaseVisitor.java | 283 ++ .../main/grammar/FunctionCraftLexer.interp | 212 + .../gen/main/grammar/FunctionCraftLexer.java | 403 ++ .../main/grammar/FunctionCraftLexer.tokens | 124 + .../main/grammar/FunctionCraftListener.java | 389 ++ .../gen/main/grammar/FunctionCraftParser.java | 4435 +++++++++++++++++ .../main/grammar/FunctionCraftVisitor.java | 244 + .../declaration/PatternDeclaration.class | Bin 3332 -> 3383 bytes .../{grammer => grammar}/FunctionCraft.g4 | 9 +- .../main/symbolTable/SymbolTable.class | Bin 1940 -> 2141 bytes .../nameAnalyzer/DependencyDetector.class | Bin 3692 -> 10331 bytes .../visitor/nameAnalyzer/NameAnalyzer.class | Bin 22597 -> 22761 bytes ...FunctionCraftParser$BoolValueContext.class | Bin 2243 -> 2243 bytes ...onCraftParser$FunctionPointerContext.class | Bin 2504 -> 2504 bytes ...ionCraftParser$LambdaFunctionContext.class | Bin 3027 -> 3027 bytes ...FunctionCraftParser$ListValueContext.class | Bin 2622 -> 2622 bytes ...onCraftParser$OtherExpressionContext.class | Bin 4755 -> 4755 bytes .../FunctionCraftParser$ValuesContext.class | Bin 3232 -> 3232 bytes .../parsers/FunctionCraftParser.class | Bin 69847 -> 69896 bytes .../plc-spring1400-jepeto/.idea/vcs.xml | 1 + .../Jepeto/Delivery_phase3/.idea/.gitignore | 3 + .../Delivery_phase3/.idea/Delivery_phase3.iml | 9 + .../.idea/libraries/Delivery_phase3.xml | 10 + Sources/Jepeto/Delivery_phase3/.idea/misc.xml | 6 + .../Jepeto/Delivery_phase3/.idea/modules.xml | 8 + Sources/Jepeto/Delivery_phase3/.idea/vcs.xml | 6 + 43 files changed, 7132 insertions(+), 65 deletions(-) create mode 100644 Phase2Template/Phase2/samples/in20.fl rename Phase2Template/Phase2/src/main/{grammer => grammar}/FunctionCraft.g4 (98%) create mode 100644 Phase2Template/gen/main/grammar/FunctionCraft.interp create mode 100644 Phase2Template/gen/main/grammar/FunctionCraft.tokens create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftBaseListener.java create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftBaseVisitor.java create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftLexer.interp create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftLexer.java create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftLexer.tokens create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftListener.java create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftParser.java create mode 100644 Phase2Template/gen/main/grammar/FunctionCraftVisitor.java rename Phase2Template/out/production/Phase2Template/main/{grammer => grammar}/FunctionCraft.g4 (98%) create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/.gitignore create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/Delivery_phase3.iml create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/libraries/Delivery_phase3.xml create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/misc.xml create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/modules.xml create mode 100644 Sources/Jepeto/Delivery_phase3/.idea/vcs.xml diff --git a/Phase2Template/.idea/misc.xml b/Phase2Template/.idea/misc.xml index 83ee99c..3d8f1a6 100644 --- a/Phase2Template/.idea/misc.xml +++ b/Phase2Template/.idea/misc.xml @@ -13,6 +13,16 @@ diff --git a/Phase2Template/Phase2/samples/all.fl b/Phase2Template/Phase2/samples/all.fl index e93f291..fd02041 100644 --- a/Phase2Template/Phase2/samples/all.fl +++ b/Phase2Template/Phase2/samples/all.fl @@ -25,19 +25,20 @@ def h() return myfunc2(a, b); end -pattern a(a) - |(a == 1)= a - |(a == 2)= a+1 - ; -def myFunc(myFunc, a, a,b, [c=2]) - return a + b + c; +def myfunc2(a, b, [c=1]) + return; end -def myfunc2(a, b, [c=1]) +def myfunc2() return; end + +def aa(a, b, c) + return a+b+c; +end + def main() a = 5; b = 6; @@ -45,4 +46,5 @@ def main() myFunc(c, b); myfunc2(a, b); ali(a); + aa(a, b); end \ No newline at end of file diff --git a/Phase2Template/Phase2/samples/in20.fl b/Phase2Template/Phase2/samples/in20.fl new file mode 100644 index 0000000..c5f1c80 --- /dev/null +++ b/Phase2Template/Phase2/samples/in20.fl @@ -0,0 +1,31 @@ + +def f() + return g(); +end + +def g() + for i in (1..10) + f(); + end +end + +def h(i) + a = 5; + return f(); +end + + + + +def main() + l = [1, 2, 3]; + for i in (1..10) + b = i+2; + end + a = 10; + c = 15; + loop do + ab = 5; + end + puts(ab); +end \ No newline at end of file diff --git a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java index 362c8c4..d6f9754 100644 --- a/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java +++ b/Phase2Template/Phase2/src/main/ast/nodes/declaration/PatternDeclaration.java @@ -22,7 +22,7 @@ public PatternDeclaration(Identifier name, Identifier targetVariable){ public Identifier getTargetVariable(){return this.targetVariable;} public ArrayList getConditions(){return this.conditions;} - public void setConditions(ArrayList conditions){this.conditions = conditions;} + public void setConditions(ArrayList conditions){this.conditions.addAll((conditions));} public void addCondition(Expression condition){this.conditions.add(condition);} public ArrayList getReturnExp(){return this.returnExp;} diff --git a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 b/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 similarity index 98% rename from Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 rename to Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 index 4a0f191..9a157a0 100644 --- a/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 @@ -63,7 +63,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: COMMA LBRACK id3 = IDENTIFIER { Identifier id_3 = new Identifier($id3.text); - id_.setLine($id3.line); + id_3.setLine($id3.line); VarDeclaration newVarDec3 = new VarDeclaration(id_3); newVarDec3.setLine($id3.line); } @@ -76,7 +76,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: { Identifier id_4 = new Identifier($id4.text); id_4.setLine($id4.line); - VarDeclaration newVarDec4 = new VarDeclaration(id_); + VarDeclaration newVarDec4 = new VarDeclaration(id_4); newVarDec4.setLine($id4.line); } ASSIGN e2 = expression @@ -499,6 +499,7 @@ accessExpression returns [Expression expRet]: { boolean isAccessExpression = false; boolean isMultiDimentional = false; + boolean isFunctionCall = false; ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); } @@ -506,12 +507,14 @@ accessExpression returns [Expression expRet]: (LPAR f = functionArguments //arrayList of expression { isAccessExpression = true; + isFunctionCall =true; args.addAll($f.funcArgsRet); } RPAR)* (a = accessList //single expression { isMultiDimentional = true; + isAccessExpression = true; dimentions.add($a.accessListExp); } )* @@ -521,7 +524,7 @@ accessExpression returns [Expression expRet]: } else{ AccessExpression accessExp = new AccessExpression($o.expRet, args); - accessExp.setIsFunctionCall(isAccessExpression); + accessExp.setIsFunctionCall(isFunctionCall); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); diff --git a/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java b/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java index ca13817..b78dfdb 100644 --- a/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java +++ b/Phase2Template/Phase2/src/main/symbolTable/SymbolTable.java @@ -36,4 +36,10 @@ public SymbolTableItem getItem(String key) throws ItemNotFound { } throw new ItemNotFound(); } + public SymbolTable copy() { + SymbolTable newSymbolTable = new SymbolTable(); + newSymbolTable.items.putAll(this.items); + return newSymbolTable; + } + } diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java index a54acc9..62e5f8b 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/DependencyDetector.java @@ -2,27 +2,25 @@ import main.ast.nodes.Program; import main.ast.nodes.declaration.FunctionDeclaration; -import main.ast.nodes.expression.AccessExpression; -import main.ast.nodes.expression.Expression; -import main.ast.nodes.expression.Identifier; -import main.ast.nodes.expression.LambdaExpression; -import main.ast.nodes.statement.ExpressionStatement; -import main.ast.nodes.statement.ReturnStatement; -import main.ast.nodes.statement.Statement; +import main.ast.nodes.expression.*; +import main.ast.nodes.statement.*; import main.compileError.CompileError; import main.compileError.nameErrors.CircularDependency; import main.visitor.Visitor; import main.symbolTable.utils.Graph; +import javax.swing.plaf.nimbus.State; import java.util.ArrayList; import java.util.List; public class DependencyDetector extends Visitor { public ArrayList dependencyError = new ArrayList<>(); + String currentParent; private Graph dependencyGraph = new Graph(); @Override public Void visit(Program program){ for(FunctionDeclaration functionDeclaration : program.getFunctionDeclarations()){ + currentParent = functionDeclaration.getFunctionName().getName(); functionDeclaration.accept(this); } @@ -30,44 +28,118 @@ public Void visit(Program program){ } @Override public Void visit(FunctionDeclaration functionDeclaration){ - for(Statement statement : functionDeclaration.getBody()){ - if(statement instanceof ExpressionStatement){ - ExpressionStatement exp = (ExpressionStatement) statement; - if(exp.getExpression() instanceof AccessExpression){ - AccessExpression accessExpression = (AccessExpression) exp.getExpression(); - if(accessExpression.isFunctionCall()){ - if(!(accessExpression.getAccessedExpression() instanceof LambdaExpression)) { - Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); - dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName(), - id_.getName()); - } - } - } - } - else if(statement instanceof ReturnStatement){ - ReturnStatement returnStatement = (ReturnStatement) statement; - if(returnStatement.hasRetExpression()){ - if(returnStatement.getReturnExp() instanceof AccessExpression){ - AccessExpression accessExpression = (AccessExpression) returnStatement.getReturnExp(); - if(accessExpression.isFunctionCall()){ - if(!(accessExpression.getAccessedExpression() instanceof LambdaExpression)) { - Identifier id_ = (Identifier) accessExpression.getAccessedExpression(); - dependencyGraph.addEdge(functionDeclaration.getFunctionName().getName() - , id_.getName()); - } - } - } - } - } + for(Statement statement : functionDeclaration.getBody()) { + statement.accept(this); } return null; } - public Void findDependency(){ - ArrayList> cycles = dependencyGraph.findCycles(); - for(List cycle : cycles){ - dependencyError.add(new CircularDependency(cycle)); + public Void visit(AssignStatement assignStatement){ + if(assignStatement.isAccessList()){ + assignStatement.getAccessListExpression().accept(this); + } + assignStatement.getAssignExpression().accept(this); + return null; + } + public Void visit(ExpressionStatement expressionStatement){ + expressionStatement.accept(this); + return null; + } + public Void visit(ForStatement forStatement){ + for(Expression expression:forStatement.getLoopBodyExpressions()){ + expression.accept(this); + } + for(Expression expression: forStatement.getRangeExpressions()){ + expression.accept(this); + } + for(Statement statement: forStatement.getLoopBody()){ + statement.accept(this); + } + return null; + } + public Void visit(IfStatement ifStatement){ + for(Expression expression: ifStatement.getConditions()){ + expression.accept(this); + } + for(Statement statement: ifStatement.getThenBody()){ + statement.accept(this); + } + for(Statement statement: ifStatement.getElseBody()){ + statement.accept(this); + } + return null; + } + public Void visit(LoopDoStatement loopDoStatement){ + for(Statement statement : loopDoStatement.getLoopBodyStmts()){ + statement.accept(this); + } + for(Expression expression : loopDoStatement.getLoopConditions()){ + expression.accept(this); + } + if(loopDoStatement.getLoopRetStmt() != null){ + loopDoStatement.getLoopRetStmt().accept(this); + } + return null; + } + public Void visit(PushStatement pushStatement){ + pushStatement.getToBeAdded().accept(this); + return null; + } + public Void visit(PutStatement putStatement){ + putStatement.getExpression().accept(this); + return null; + } + public Void visit(ReturnStatement returnStatement){ + if(returnStatement.hasRetExpression()){ + returnStatement.getReturnExp().accept(this); + } + return null; + } + public Void visit(AccessExpression accessExpression){ + if(accessExpression.isFunctionCall()){ +// dependencyGraph.addEdge(currentParent, accessExpression.getAccessedExpression().toString()); + accessExpression.getAccessedExpression().accept(this); + } + return null; + } + public Void visit(Identifier identifier){ + dependencyGraph.addEdge(currentParent, identifier.getName()); + return null; + } + public Void visit(AppendExpression appendExpression){ + appendExpression.getAppendee().accept(this); + for(Expression expression: appendExpression.getAppendeds()){ + expression.accept(this); } return null; } + public Void visit(BinaryExpression binaryExpression){ + binaryExpression.getFirstOperand().accept(this); + binaryExpression.getSecondOperand().accept(this); + return null; + } + public Void visit(ChopStatement chopStatement){ + chopStatement.getChopExpression().accept(this); + return null; + } + public Void visit(ChompStatement chompStatement){ + chompStatement.getChompExpression().accept(this); + return null; + } + public Void visit(LenStatement lenStatement){ + lenStatement.getExpression().accept(this); + return null; + } + public Void visit(UnaryExpression unaryExpression){ + unaryExpression.getExpression().accept(this); + return null; + } + public Void findDependency(){ +// ArrayList> cycles = dependencyGraph.findCycles(); +// for(List cycle : cycles){ +// dependencyError.add(new CircularDependency(cycle)); +// } + dependencyGraph.printGraph(); + return null; + } } diff --git a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java index 482dca6..d436d55 100644 --- a/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java +++ b/Phase2Template/Phase2/src/main/visitor/nameAnalyzer/NameAnalyzer.java @@ -20,10 +20,12 @@ import main.symbolTable.exceptions.ItemNotFound; import main.symbolTable.item.FunctionItem; import main.symbolTable.item.PatternItem; +import main.symbolTable.item.SymbolTableItem; import main.symbolTable.item.VarItem; import main.visitor.Visitor; import java.util.ArrayList; +import java.util.Map; public class NameAnalyzer extends Visitor { public ArrayList nameErrors = new ArrayList<>(); @@ -205,6 +207,8 @@ public Void visit(ReturnStatement returnStatement){ } @Override public Void visit(IfStatement ifStatement){ + SymbolTable currentSymbolTable = SymbolTable.top.copy(); + SymbolTable.push(currentSymbolTable); for(Expression expression : ifStatement.getConditions()){ expression.accept(this); } @@ -214,6 +218,7 @@ public Void visit(IfStatement ifStatement){ for(Statement statement : ifStatement.getElseBody()){ statement.accept(this); } + SymbolTable.pop(); return null; } @Override @@ -234,6 +239,8 @@ public Void visit(LenStatement lenStatement){ } @Override public Void visit(LoopDoStatement loopDoStatement){ + SymbolTable currentSymbolTable = SymbolTable.top.copy(); + SymbolTable.push(currentSymbolTable); for(Statement statement : loopDoStatement.getLoopBodyStmts()){ statement.accept(this); } @@ -243,11 +250,12 @@ public Void visit(LoopDoStatement loopDoStatement){ if(loopDoStatement.getLoopRetStmt() != null){ loopDoStatement.getLoopRetStmt().accept(this); } + SymbolTable.pop(); return null; } @Override public Void visit(ForStatement forStatement){ - SymbolTable currenctScopeSymbolTable = SymbolTable.top; + SymbolTable currenctScopeSymbolTable = SymbolTable.top.copy(); VarItem varItem = new VarItem(forStatement.getIteratorId()); try{ currenctScopeSymbolTable.put(varItem); @@ -387,10 +395,11 @@ public Void visit(AccessExpression accessExpression){ nameErrors.add(new ArgMisMatch(accessExpression.getLine(), functionName.getName())); } } + isLambdaAccess = false; for(Expression expression : accessExpression.getDimentionalAccess()){ expression.accept(this); } - isLambdaAccess = false; + return null; } @Override diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java index df2ed9f..f46dacd 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseListener.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java index 0cf9463..f6819b5 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftBaseVisitor.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java index 47512a5..a91f536 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftLexer.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java index 82b938a..ef8b386 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftListener.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java index 9be85af..af773b7 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftParser.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; @@ -430,7 +430,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() ((FunctionArgumentsDeclarationContext)_localctx).id3 = match(IDENTIFIER); Identifier id_3 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getText():null)); - id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); + id_3.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); VarDeclaration newVarDec3 = new VarDeclaration(id_3); newVarDec3.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); @@ -455,7 +455,7 @@ public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() Identifier id_4 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getText():null)); id_4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); - VarDeclaration newVarDec4 = new VarDeclaration(id_); + VarDeclaration newVarDec4 = new VarDeclaration(id_4); newVarDec4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); setState(122); @@ -3320,6 +3320,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept boolean isAccessExpression = false; boolean isMultiDimentional = false; + boolean isFunctionCall = false; ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); @@ -3338,6 +3339,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept ((AccessExpressionContext)_localctx).f = functionArguments(); isAccessExpression = true; + isFunctionCall =true; args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); setState(584); @@ -3360,6 +3362,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept ((AccessExpressionContext)_localctx).a = accessList(); isMultiDimentional = true; + isAccessExpression = true; dimentions.add(((AccessExpressionContext)_localctx).a.accessListExp); } @@ -3375,7 +3378,7 @@ public final AccessExpressionContext accessExpression() throws RecognitionExcept } else{ AccessExpression accessExp = new AccessExpression(((AccessExpressionContext)_localctx).o.expRet, args); - accessExp.setIsFunctionCall(isAccessExpression); + accessExp.setIsFunctionCall(isFunctionCall); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); diff --git a/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java index 5e33f9e..5e5dfbc 100644 --- a/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java +++ b/Phase2Template/Phase2/src/parsers/FunctionCraftVisitor.java @@ -1,4 +1,4 @@ -// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammer/FunctionCraft.g4 by ANTLR 4.13.1 +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 package parsers; import main.ast.nodes.*; diff --git a/Phase2Template/gen/main/grammar/FunctionCraft.interp b/Phase2Template/gen/main/grammar/FunctionCraft.interp new file mode 100644 index 0000000..c5704fe --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraft.interp @@ -0,0 +1,178 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +program +functionDeclaration +functionArgumentsDeclaration +patternMatching +main +functionArguments +returnStatement +ifStatement +condition +putsStatement +lenStatement +pushStatement +loopDoStatement +loopBody +forStatement +range +filterStatement +matchPatternStatement +chopStatement +chompStatement +assignment +accessList +statement +body +expression +eqaulityExpression +relationalExpression +additiveExpression +multiplicativeExpression +preUnaryExpression +accessExpression +otherExpression +lambdaFunction +values +listValue +boolValue +functionPointer + + +atn: +[4, 1, 65, 676, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 82, 8, 0, 10, 0, 12, 0, 85, 9, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 108, 8, 2, 10, 2, 12, 2, 111, 9, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 127, 8, 2, 10, 2, 12, 2, 130, 9, 2, 1, 2, 1, 2, 3, 2, 134, 8, 2, 3, 2, 136, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 155, 8, 3, 10, 3, 12, 3, 158, 9, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 179, 8, 5, 10, 5, 12, 5, 182, 9, 5, 3, 5, 184, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 191, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 207, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 217, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 223, 8, 7, 10, 7, 12, 7, 226, 9, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 244, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 249, 8, 8, 5, 8, 251, 8, 8, 10, 8, 12, 8, 254, 9, 8, 5, 8, 256, 8, 8, 10, 8, 12, 8, 259, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 298, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 306, 8, 13, 1, 13, 5, 13, 309, 8, 13, 10, 13, 12, 13, 312, 9, 13, 1, 13, 1, 13, 1, 13, 3, 13, 317, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 5, 15, 344, 8, 15, 10, 15, 12, 15, 347, 9, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 354, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 370, 8, 16, 10, 16, 12, 16, 373, 9, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 403, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 417, 8, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 451, 8, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 457, 8, 23, 10, 23, 12, 23, 460, 9, 23, 1, 23, 1, 23, 1, 23, 3, 23, 465, 8, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 476, 8, 24, 10, 24, 12, 24, 479, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 487, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 495, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 511, 8, 26, 1, 26, 1, 26, 1, 26, 5, 26, 516, 8, 26, 10, 26, 12, 26, 519, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 531, 8, 27, 1, 27, 1, 27, 1, 27, 5, 27, 536, 8, 27, 10, 27, 12, 27, 539, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 551, 8, 28, 1, 28, 1, 28, 1, 28, 5, 28, 556, 8, 28, 10, 28, 12, 28, 559, 9, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 570, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 578, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 5, 30, 587, 8, 30, 10, 30, 12, 30, 590, 9, 30, 1, 30, 1, 30, 1, 30, 5, 30, 595, 8, 30, 10, 30, 12, 30, 598, 9, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 629, 8, 31, 1, 31, 3, 31, 632, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 656, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 667, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 0, 4, 48, 52, 54, 56, 37, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 0, 1, 1, 0, 30, 31, 712, 0, 74, 1, 0, 0, 0, 2, 89, 1, 0, 0, 0, 4, 100, 1, 0, 0, 0, 6, 139, 1, 0, 0, 0, 8, 161, 1, 0, 0, 0, 10, 171, 1, 0, 0, 0, 12, 185, 1, 0, 0, 0, 14, 195, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 260, 1, 0, 0, 0, 20, 267, 1, 0, 0, 0, 22, 273, 1, 0, 0, 0, 24, 282, 1, 0, 0, 0, 26, 288, 1, 0, 0, 0, 28, 318, 1, 0, 0, 0, 30, 353, 1, 0, 0, 0, 32, 355, 1, 0, 0, 0, 34, 377, 1, 0, 0, 0, 36, 385, 1, 0, 0, 0, 38, 391, 1, 0, 0, 0, 40, 397, 1, 0, 0, 0, 42, 422, 1, 0, 0, 0, 44, 450, 1, 0, 0, 0, 46, 452, 1, 0, 0, 0, 48, 466, 1, 0, 0, 0, 50, 494, 1, 0, 0, 0, 52, 496, 1, 0, 0, 0, 54, 520, 1, 0, 0, 0, 56, 540, 1, 0, 0, 0, 58, 577, 1, 0, 0, 0, 60, 579, 1, 0, 0, 0, 62, 631, 1, 0, 0, 0, 64, 633, 1, 0, 0, 0, 66, 655, 1, 0, 0, 0, 68, 657, 1, 0, 0, 0, 70, 666, 1, 0, 0, 0, 72, 668, 1, 0, 0, 0, 74, 83, 6, 0, -1, 0, 75, 76, 3, 2, 1, 0, 76, 77, 6, 0, -1, 0, 77, 82, 1, 0, 0, 0, 78, 79, 3, 6, 3, 0, 79, 80, 6, 0, -1, 0, 80, 82, 1, 0, 0, 0, 81, 75, 1, 0, 0, 0, 81, 78, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 86, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 87, 3, 8, 4, 0, 87, 88, 6, 0, -1, 0, 88, 1, 1, 0, 0, 0, 89, 90, 6, 1, -1, 0, 90, 91, 5, 1, 0, 0, 91, 92, 6, 1, -1, 0, 92, 93, 5, 62, 0, 0, 93, 94, 6, 1, -1, 0, 94, 95, 3, 4, 2, 0, 95, 96, 6, 1, -1, 0, 96, 97, 3, 46, 23, 0, 97, 98, 6, 1, -1, 0, 98, 99, 5, 2, 0, 0, 99, 3, 1, 0, 0, 0, 100, 101, 6, 2, -1, 0, 101, 135, 5, 49, 0, 0, 102, 103, 5, 62, 0, 0, 103, 109, 6, 2, -1, 0, 104, 105, 5, 55, 0, 0, 105, 106, 5, 62, 0, 0, 106, 108, 6, 2, -1, 0, 107, 104, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 133, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 113, 5, 55, 0, 0, 113, 114, 5, 51, 0, 0, 114, 115, 5, 62, 0, 0, 115, 116, 6, 2, -1, 0, 116, 117, 5, 48, 0, 0, 117, 118, 3, 48, 24, 0, 118, 128, 6, 2, -1, 0, 119, 120, 5, 55, 0, 0, 120, 121, 5, 62, 0, 0, 121, 122, 6, 2, -1, 0, 122, 123, 5, 48, 0, 0, 123, 124, 3, 48, 24, 0, 124, 125, 6, 2, -1, 0, 125, 127, 1, 0, 0, 0, 126, 119, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 131, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 52, 0, 0, 132, 134, 1, 0, 0, 0, 133, 112, 1, 0, 0, 0, 133, 134, 1, 0, 0, 0, 134, 136, 1, 0, 0, 0, 135, 102, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 137, 1, 0, 0, 0, 137, 138, 5, 50, 0, 0, 138, 5, 1, 0, 0, 0, 139, 140, 5, 12, 0, 0, 140, 141, 6, 3, -1, 0, 141, 142, 5, 62, 0, 0, 142, 143, 6, 3, -1, 0, 143, 144, 5, 49, 0, 0, 144, 145, 5, 62, 0, 0, 145, 146, 6, 3, -1, 0, 146, 156, 5, 50, 0, 0, 147, 148, 5, 35, 0, 0, 148, 149, 3, 16, 8, 0, 149, 150, 6, 3, -1, 0, 150, 151, 5, 48, 0, 0, 151, 152, 3, 48, 24, 0, 152, 153, 6, 3, -1, 0, 153, 155, 1, 0, 0, 0, 154, 147, 1, 0, 0, 0, 155, 158, 1, 0, 0, 0, 156, 154, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 159, 160, 5, 59, 0, 0, 160, 7, 1, 0, 0, 0, 161, 162, 6, 4, -1, 0, 162, 163, 5, 1, 0, 0, 163, 164, 5, 3, 0, 0, 164, 165, 6, 4, -1, 0, 165, 166, 5, 49, 0, 0, 166, 167, 5, 50, 0, 0, 167, 168, 3, 46, 23, 0, 168, 169, 6, 4, -1, 0, 169, 170, 5, 2, 0, 0, 170, 9, 1, 0, 0, 0, 171, 183, 6, 5, -1, 0, 172, 173, 3, 48, 24, 0, 173, 180, 6, 5, -1, 0, 174, 175, 5, 55, 0, 0, 175, 176, 3, 48, 24, 0, 176, 177, 6, 5, -1, 0, 177, 179, 1, 0, 0, 0, 178, 174, 1, 0, 0, 0, 179, 182, 1, 0, 0, 0, 180, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 183, 172, 1, 0, 0, 0, 183, 184, 1, 0, 0, 0, 184, 11, 1, 0, 0, 0, 185, 186, 6, 6, -1, 0, 186, 190, 5, 7, 0, 0, 187, 188, 3, 48, 24, 0, 188, 189, 6, 6, -1, 0, 189, 191, 1, 0, 0, 0, 190, 187, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 6, 6, -1, 0, 193, 194, 5, 59, 0, 0, 194, 13, 1, 0, 0, 0, 195, 196, 6, 7, -1, 0, 196, 197, 5, 8, 0, 0, 197, 206, 6, 7, -1, 0, 198, 199, 3, 16, 8, 0, 199, 200, 6, 7, -1, 0, 200, 207, 1, 0, 0, 0, 201, 202, 5, 49, 0, 0, 202, 203, 3, 16, 8, 0, 203, 204, 5, 50, 0, 0, 204, 205, 6, 7, -1, 0, 205, 207, 1, 0, 0, 0, 206, 198, 1, 0, 0, 0, 206, 201, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 3, 26, 13, 0, 209, 224, 6, 7, -1, 0, 210, 216, 5, 10, 0, 0, 211, 212, 5, 49, 0, 0, 212, 213, 3, 16, 8, 0, 213, 214, 5, 50, 0, 0, 214, 217, 1, 0, 0, 0, 215, 217, 3, 16, 8, 0, 216, 211, 1, 0, 0, 0, 216, 215, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 6, 7, -1, 0, 219, 220, 3, 26, 13, 0, 220, 221, 6, 7, -1, 0, 221, 223, 1, 0, 0, 0, 222, 210, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 231, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 9, 0, 0, 228, 229, 3, 26, 13, 0, 229, 230, 6, 7, -1, 0, 230, 232, 1, 0, 0, 0, 231, 227, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 234, 6, 7, -1, 0, 234, 235, 5, 2, 0, 0, 235, 15, 1, 0, 0, 0, 236, 257, 6, 8, -1, 0, 237, 238, 5, 49, 0, 0, 238, 239, 3, 48, 24, 0, 239, 240, 6, 8, -1, 0, 240, 252, 5, 50, 0, 0, 241, 243, 7, 0, 0, 0, 242, 244, 5, 49, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 245, 1, 0, 0, 0, 245, 246, 3, 16, 8, 0, 246, 248, 6, 8, -1, 0, 247, 249, 5, 50, 0, 0, 248, 247, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 1, 0, 0, 0, 250, 241, 1, 0, 0, 0, 251, 254, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 255, 237, 1, 0, 0, 0, 256, 259, 1, 0, 0, 0, 257, 255, 1, 0, 0, 0, 257, 258, 1, 0, 0, 0, 258, 17, 1, 0, 0, 0, 259, 257, 1, 0, 0, 0, 260, 261, 5, 4, 0, 0, 261, 262, 5, 49, 0, 0, 262, 263, 3, 48, 24, 0, 263, 264, 6, 9, -1, 0, 264, 265, 5, 50, 0, 0, 265, 266, 5, 59, 0, 0, 266, 19, 1, 0, 0, 0, 267, 268, 5, 6, 0, 0, 268, 269, 5, 49, 0, 0, 269, 270, 3, 48, 24, 0, 270, 271, 6, 10, -1, 0, 271, 272, 5, 50, 0, 0, 272, 21, 1, 0, 0, 0, 273, 274, 5, 5, 0, 0, 274, 275, 5, 49, 0, 0, 275, 276, 3, 48, 24, 0, 276, 277, 5, 55, 0, 0, 277, 278, 3, 48, 24, 0, 278, 279, 5, 50, 0, 0, 279, 280, 5, 59, 0, 0, 280, 281, 6, 11, -1, 0, 281, 23, 1, 0, 0, 0, 282, 283, 5, 14, 0, 0, 283, 284, 5, 17, 0, 0, 284, 285, 3, 26, 13, 0, 285, 286, 6, 12, -1, 0, 286, 287, 5, 2, 0, 0, 287, 25, 1, 0, 0, 0, 288, 310, 6, 13, -1, 0, 289, 290, 3, 44, 22, 0, 290, 291, 6, 13, -1, 0, 291, 309, 1, 0, 0, 0, 292, 297, 5, 40, 0, 0, 293, 294, 5, 8, 0, 0, 294, 295, 3, 16, 8, 0, 295, 296, 6, 13, -1, 0, 296, 298, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 309, 5, 59, 0, 0, 300, 305, 5, 41, 0, 0, 301, 302, 5, 8, 0, 0, 302, 303, 3, 16, 8, 0, 303, 304, 6, 13, -1, 0, 304, 306, 1, 0, 0, 0, 305, 301, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 309, 5, 59, 0, 0, 308, 289, 1, 0, 0, 0, 308, 292, 1, 0, 0, 0, 308, 300, 1, 0, 0, 0, 309, 312, 1, 0, 0, 0, 310, 308, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 316, 1, 0, 0, 0, 312, 310, 1, 0, 0, 0, 313, 314, 3, 12, 6, 0, 314, 315, 6, 13, -1, 0, 315, 317, 1, 0, 0, 0, 316, 313, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 27, 1, 0, 0, 0, 318, 319, 5, 15, 0, 0, 319, 320, 5, 62, 0, 0, 320, 321, 5, 16, 0, 0, 321, 322, 3, 30, 15, 0, 322, 323, 3, 26, 13, 0, 323, 324, 5, 2, 0, 0, 324, 325, 6, 14, -1, 0, 325, 29, 1, 0, 0, 0, 326, 327, 6, 15, -1, 0, 327, 328, 5, 49, 0, 0, 328, 329, 3, 48, 24, 0, 329, 330, 6, 15, -1, 0, 330, 331, 5, 57, 0, 0, 331, 332, 3, 48, 24, 0, 332, 333, 6, 15, -1, 0, 333, 334, 5, 50, 0, 0, 334, 354, 1, 0, 0, 0, 335, 336, 6, 15, -1, 0, 336, 337, 5, 51, 0, 0, 337, 338, 3, 48, 24, 0, 338, 345, 6, 15, -1, 0, 339, 340, 5, 55, 0, 0, 340, 341, 3, 48, 24, 0, 341, 342, 6, 15, -1, 0, 342, 344, 1, 0, 0, 0, 343, 339, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 52, 0, 0, 349, 354, 1, 0, 0, 0, 350, 351, 6, 15, -1, 0, 351, 352, 5, 62, 0, 0, 352, 354, 6, 15, -1, 0, 353, 326, 1, 0, 0, 0, 353, 335, 1, 0, 0, 0, 353, 350, 1, 0, 0, 0, 354, 31, 1, 0, 0, 0, 355, 356, 6, 16, -1, 0, 356, 357, 5, 51, 0, 0, 357, 358, 3, 48, 24, 0, 358, 359, 5, 36, 0, 0, 359, 360, 5, 62, 0, 0, 360, 361, 5, 42, 0, 0, 361, 362, 3, 30, 15, 0, 362, 363, 5, 55, 0, 0, 363, 364, 3, 48, 24, 0, 364, 371, 6, 16, -1, 0, 365, 366, 5, 55, 0, 0, 366, 367, 3, 48, 24, 0, 367, 368, 6, 16, -1, 0, 368, 370, 1, 0, 0, 0, 369, 365, 1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 374, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 6, 16, -1, 0, 375, 376, 5, 52, 0, 0, 376, 33, 1, 0, 0, 0, 377, 378, 5, 62, 0, 0, 378, 379, 5, 56, 0, 0, 379, 380, 5, 13, 0, 0, 380, 381, 5, 49, 0, 0, 381, 382, 3, 48, 24, 0, 382, 383, 5, 50, 0, 0, 383, 384, 6, 17, -1, 0, 384, 35, 1, 0, 0, 0, 385, 386, 5, 18, 0, 0, 386, 387, 5, 49, 0, 0, 387, 388, 3, 48, 24, 0, 388, 389, 5, 50, 0, 0, 389, 390, 6, 18, -1, 0, 390, 37, 1, 0, 0, 0, 391, 392, 5, 19, 0, 0, 392, 393, 5, 49, 0, 0, 393, 394, 3, 48, 24, 0, 394, 395, 5, 50, 0, 0, 395, 396, 6, 19, -1, 0, 396, 39, 1, 0, 0, 0, 397, 398, 6, 20, -1, 0, 398, 402, 5, 62, 0, 0, 399, 400, 3, 42, 21, 0, 400, 401, 6, 20, -1, 0, 401, 403, 1, 0, 0, 0, 402, 399, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 416, 1, 0, 0, 0, 404, 405, 5, 48, 0, 0, 405, 417, 6, 20, -1, 0, 406, 407, 5, 43, 0, 0, 407, 417, 6, 20, -1, 0, 408, 409, 5, 44, 0, 0, 409, 417, 6, 20, -1, 0, 410, 411, 5, 46, 0, 0, 411, 417, 6, 20, -1, 0, 412, 413, 5, 45, 0, 0, 413, 417, 6, 20, -1, 0, 414, 415, 5, 47, 0, 0, 415, 417, 6, 20, -1, 0, 416, 404, 1, 0, 0, 0, 416, 406, 1, 0, 0, 0, 416, 408, 1, 0, 0, 0, 416, 410, 1, 0, 0, 0, 416, 412, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 3, 48, 24, 0, 419, 420, 5, 59, 0, 0, 420, 421, 6, 20, -1, 0, 421, 41, 1, 0, 0, 0, 422, 423, 5, 51, 0, 0, 423, 424, 3, 48, 24, 0, 424, 425, 6, 21, -1, 0, 425, 426, 5, 52, 0, 0, 426, 43, 1, 0, 0, 0, 427, 428, 3, 14, 7, 0, 428, 429, 6, 22, -1, 0, 429, 451, 1, 0, 0, 0, 430, 431, 3, 24, 12, 0, 431, 432, 6, 22, -1, 0, 432, 451, 1, 0, 0, 0, 433, 434, 3, 28, 14, 0, 434, 435, 6, 22, -1, 0, 435, 451, 1, 0, 0, 0, 436, 437, 3, 18, 9, 0, 437, 438, 6, 22, -1, 0, 438, 451, 1, 0, 0, 0, 439, 440, 3, 22, 11, 0, 440, 441, 6, 22, -1, 0, 441, 451, 1, 0, 0, 0, 442, 443, 3, 48, 24, 0, 443, 444, 6, 22, -1, 0, 444, 445, 6, 22, -1, 0, 445, 446, 5, 59, 0, 0, 446, 451, 1, 0, 0, 0, 447, 448, 3, 40, 20, 0, 448, 449, 6, 22, -1, 0, 449, 451, 1, 0, 0, 0, 450, 427, 1, 0, 0, 0, 450, 430, 1, 0, 0, 0, 450, 433, 1, 0, 0, 0, 450, 436, 1, 0, 0, 0, 450, 439, 1, 0, 0, 0, 450, 442, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 451, 45, 1, 0, 0, 0, 452, 458, 6, 23, -1, 0, 453, 454, 3, 44, 22, 0, 454, 455, 6, 23, -1, 0, 455, 457, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 464, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 462, 3, 12, 6, 0, 462, 463, 6, 23, -1, 0, 463, 465, 1, 0, 0, 0, 464, 461, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 47, 1, 0, 0, 0, 466, 467, 6, 24, -1, 0, 467, 468, 3, 50, 25, 0, 468, 469, 6, 24, -1, 0, 469, 477, 1, 0, 0, 0, 470, 471, 10, 2, 0, 0, 471, 472, 5, 37, 0, 0, 472, 473, 3, 50, 25, 0, 473, 474, 6, 24, -1, 0, 474, 476, 1, 0, 0, 0, 475, 470, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 49, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 481, 3, 52, 26, 0, 481, 486, 6, 25, -1, 0, 482, 483, 5, 24, 0, 0, 483, 487, 6, 25, -1, 0, 484, 485, 5, 25, 0, 0, 485, 487, 6, 25, -1, 0, 486, 482, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 489, 3, 52, 26, 0, 489, 490, 6, 25, -1, 0, 490, 495, 1, 0, 0, 0, 491, 492, 3, 52, 26, 0, 492, 493, 6, 25, -1, 0, 493, 495, 1, 0, 0, 0, 494, 480, 1, 0, 0, 0, 494, 491, 1, 0, 0, 0, 495, 51, 1, 0, 0, 0, 496, 497, 6, 26, -1, 0, 497, 498, 3, 54, 27, 0, 498, 499, 6, 26, -1, 0, 499, 517, 1, 0, 0, 0, 500, 501, 10, 2, 0, 0, 501, 510, 6, 26, -1, 0, 502, 503, 5, 28, 0, 0, 503, 511, 6, 26, -1, 0, 504, 505, 5, 29, 0, 0, 505, 511, 6, 26, -1, 0, 506, 507, 5, 26, 0, 0, 507, 511, 6, 26, -1, 0, 508, 509, 5, 27, 0, 0, 509, 511, 6, 26, -1, 0, 510, 502, 1, 0, 0, 0, 510, 504, 1, 0, 0, 0, 510, 506, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 513, 3, 54, 27, 0, 513, 514, 6, 26, -1, 0, 514, 516, 1, 0, 0, 0, 515, 500, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 53, 1, 0, 0, 0, 519, 517, 1, 0, 0, 0, 520, 521, 6, 27, -1, 0, 521, 522, 3, 56, 28, 0, 522, 523, 6, 27, -1, 0, 523, 537, 1, 0, 0, 0, 524, 525, 10, 2, 0, 0, 525, 530, 6, 27, -1, 0, 526, 527, 5, 20, 0, 0, 527, 531, 6, 27, -1, 0, 528, 529, 5, 21, 0, 0, 529, 531, 6, 27, -1, 0, 530, 526, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 533, 3, 56, 28, 0, 533, 534, 6, 27, -1, 0, 534, 536, 1, 0, 0, 0, 535, 524, 1, 0, 0, 0, 536, 539, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 55, 1, 0, 0, 0, 539, 537, 1, 0, 0, 0, 540, 541, 6, 28, -1, 0, 541, 542, 3, 58, 29, 0, 542, 543, 6, 28, -1, 0, 543, 557, 1, 0, 0, 0, 544, 545, 10, 2, 0, 0, 545, 550, 6, 28, -1, 0, 546, 547, 5, 22, 0, 0, 547, 551, 6, 28, -1, 0, 548, 549, 5, 23, 0, 0, 549, 551, 6, 28, -1, 0, 550, 546, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 553, 3, 58, 29, 0, 553, 554, 6, 28, -1, 0, 554, 556, 1, 0, 0, 0, 555, 544, 1, 0, 0, 0, 556, 559, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 57, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 560, 569, 6, 29, -1, 0, 561, 562, 5, 32, 0, 0, 562, 570, 6, 29, -1, 0, 563, 564, 5, 21, 0, 0, 564, 570, 6, 29, -1, 0, 565, 566, 5, 33, 0, 0, 566, 570, 6, 29, -1, 0, 567, 568, 5, 34, 0, 0, 568, 570, 6, 29, -1, 0, 569, 561, 1, 0, 0, 0, 569, 563, 1, 0, 0, 0, 569, 565, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 3, 60, 30, 0, 572, 573, 6, 29, -1, 0, 573, 578, 1, 0, 0, 0, 574, 575, 3, 60, 30, 0, 575, 576, 6, 29, -1, 0, 576, 578, 1, 0, 0, 0, 577, 560, 1, 0, 0, 0, 577, 574, 1, 0, 0, 0, 578, 59, 1, 0, 0, 0, 579, 580, 6, 30, -1, 0, 580, 588, 3, 62, 31, 0, 581, 582, 5, 49, 0, 0, 582, 583, 3, 10, 5, 0, 583, 584, 6, 30, -1, 0, 584, 585, 5, 50, 0, 0, 585, 587, 1, 0, 0, 0, 586, 581, 1, 0, 0, 0, 587, 590, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 596, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 591, 592, 3, 42, 21, 0, 592, 593, 6, 30, -1, 0, 593, 595, 1, 0, 0, 0, 594, 591, 1, 0, 0, 0, 595, 598, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 599, 1, 0, 0, 0, 598, 596, 1, 0, 0, 0, 599, 600, 6, 30, -1, 0, 600, 61, 1, 0, 0, 0, 601, 602, 3, 66, 33, 0, 602, 603, 6, 31, -1, 0, 603, 632, 1, 0, 0, 0, 604, 605, 5, 62, 0, 0, 605, 632, 6, 31, -1, 0, 606, 607, 3, 64, 32, 0, 607, 608, 6, 31, -1, 0, 608, 632, 1, 0, 0, 0, 609, 610, 3, 36, 18, 0, 610, 611, 6, 31, -1, 0, 611, 632, 1, 0, 0, 0, 612, 613, 3, 38, 19, 0, 613, 614, 6, 31, -1, 0, 614, 632, 1, 0, 0, 0, 615, 616, 3, 34, 17, 0, 616, 617, 6, 31, -1, 0, 617, 632, 1, 0, 0, 0, 618, 619, 3, 32, 16, 0, 619, 620, 6, 31, -1, 0, 620, 632, 1, 0, 0, 0, 621, 622, 3, 20, 10, 0, 622, 623, 6, 31, -1, 0, 623, 632, 1, 0, 0, 0, 624, 628, 5, 49, 0, 0, 625, 626, 3, 48, 24, 0, 626, 627, 6, 31, -1, 0, 627, 629, 1, 0, 0, 0, 628, 625, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 632, 5, 50, 0, 0, 631, 601, 1, 0, 0, 0, 631, 604, 1, 0, 0, 0, 631, 606, 1, 0, 0, 0, 631, 609, 1, 0, 0, 0, 631, 612, 1, 0, 0, 0, 631, 615, 1, 0, 0, 0, 631, 618, 1, 0, 0, 0, 631, 621, 1, 0, 0, 0, 631, 624, 1, 0, 0, 0, 632, 63, 1, 0, 0, 0, 633, 634, 5, 42, 0, 0, 634, 635, 3, 4, 2, 0, 635, 636, 5, 53, 0, 0, 636, 637, 3, 46, 23, 0, 637, 638, 5, 54, 0, 0, 638, 639, 6, 32, -1, 0, 639, 65, 1, 0, 0, 0, 640, 641, 3, 70, 35, 0, 641, 642, 6, 33, -1, 0, 642, 656, 1, 0, 0, 0, 643, 644, 5, 63, 0, 0, 644, 656, 6, 33, -1, 0, 645, 646, 5, 60, 0, 0, 646, 656, 6, 33, -1, 0, 647, 648, 5, 61, 0, 0, 648, 656, 6, 33, -1, 0, 649, 650, 3, 68, 34, 0, 650, 651, 6, 33, -1, 0, 651, 656, 1, 0, 0, 0, 652, 653, 3, 72, 36, 0, 653, 654, 6, 33, -1, 0, 654, 656, 1, 0, 0, 0, 655, 640, 1, 0, 0, 0, 655, 643, 1, 0, 0, 0, 655, 645, 1, 0, 0, 0, 655, 647, 1, 0, 0, 0, 655, 649, 1, 0, 0, 0, 655, 652, 1, 0, 0, 0, 656, 67, 1, 0, 0, 0, 657, 658, 5, 51, 0, 0, 658, 659, 3, 10, 5, 0, 659, 660, 5, 52, 0, 0, 660, 661, 6, 34, -1, 0, 661, 69, 1, 0, 0, 0, 662, 663, 5, 38, 0, 0, 663, 667, 6, 35, -1, 0, 664, 665, 5, 39, 0, 0, 665, 667, 6, 35, -1, 0, 666, 662, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 667, 71, 1, 0, 0, 0, 668, 669, 5, 11, 0, 0, 669, 670, 5, 49, 0, 0, 670, 671, 5, 58, 0, 0, 671, 672, 5, 62, 0, 0, 672, 673, 5, 50, 0, 0, 673, 674, 6, 36, -1, 0, 674, 73, 1, 0, 0, 0, 48, 81, 83, 109, 128, 133, 135, 156, 180, 183, 190, 206, 216, 224, 231, 243, 248, 252, 257, 297, 305, 308, 310, 316, 345, 353, 371, 402, 416, 450, 458, 464, 477, 486, 494, 510, 517, 530, 537, 550, 557, 569, 577, 588, 596, 628, 631, 655, 666] \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraft.tokens b/Phase2Template/gen/main/grammar/FunctionCraft.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraft.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/gen/main/grammar/FunctionCraftBaseListener.java b/Phase2Template/gen/main/grammar/FunctionCraftBaseListener.java new file mode 100644 index 0000000..3debab6 --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftBaseListener.java @@ -0,0 +1,493 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link FunctionCraftListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseListener implements FunctionCraftListener { + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitProgram(FunctionCraftParser.ProgramContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitMain(FunctionCraftParser.MainContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitIfStatement(FunctionCraftParser.IfStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitCondition(FunctionCraftParser.ConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitLenStatement(FunctionCraftParser.LenStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitPushStatement(FunctionCraftParser.PushStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitForStatement(FunctionCraftParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitRange(FunctionCraftParser.RangeContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitAssignment(FunctionCraftParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitAccessList(FunctionCraftParser.AccessListContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitStatement(FunctionCraftParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitBody(FunctionCraftParser.BodyContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitExpression(FunctionCraftParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitValues(FunctionCraftParser.ValuesContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitListValue(FunctionCraftParser.ListValueContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitBoolValue(FunctionCraftParser.BoolValueContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { } + + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

    The default implementation does nothing.

    + */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftBaseVisitor.java b/Phase2Template/gen/main/grammar/FunctionCraftBaseVisitor.java new file mode 100644 index 0000000..009af9a --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftBaseVisitor.java @@ -0,0 +1,283 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link FunctionCraftVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class FunctionCraftBaseVisitor extends AbstractParseTreeVisitor implements FunctionCraftVisitor { + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitProgram(FunctionCraftParser.ProgramContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitMain(FunctionCraftParser.MainContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitIfStatement(FunctionCraftParser.IfStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitCondition(FunctionCraftParser.ConditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitLenStatement(FunctionCraftParser.LenStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitPushStatement(FunctionCraftParser.PushStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitForStatement(FunctionCraftParser.ForStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitRange(FunctionCraftParser.RangeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitAssignment(FunctionCraftParser.AssignmentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitAccessList(FunctionCraftParser.AccessListContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitStatement(FunctionCraftParser.StatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitBody(FunctionCraftParser.BodyContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitExpression(FunctionCraftParser.ExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitValues(FunctionCraftParser.ValuesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitListValue(FunctionCraftParser.ListValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitBoolValue(FunctionCraftParser.BoolValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

    The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

    + */ + @Override public T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftLexer.interp b/Phase2Template/gen/main/grammar/FunctionCraftLexer.interp new file mode 100644 index 0000000..6d42009 --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftLexer.interp @@ -0,0 +1,212 @@ +token literal names: +null +'def' +'end' +'main' +'puts' +'push' +'len' +'return' +'if' +'else' +'elseif' +'method' +'pattern' +'match' +'loop' +'for' +'in' +'do' +'chop' +'chomp' +'+' +'-' +'*' +'/' +'==' +'!=' +'<=' +'>=' +'>' +'<' +'&&' +'||' +'!' +'++' +'--' +' |' +'|' +'<<' +'true' +'false' +'break' +'next' +'->' +'+=' +'-=' +'*=' +'/=' +'%=' +'=' +'(' +')' +'[' +']' +'{' +'}' +',' +'.' +'..' +':' +';' +null +null +null +null +null +null + +token symbolic names: +null +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +rule names: +DEF +END +MAIN +PUTS +PUSH +LEN +RETURN +IF +ELSE +ELSEIF +METHOD +PATTERN +MATCH +LOOP +FOR +IN +DO +CHOP +CHOMP +PLUS +MINUS +MULT +DIVIDE +EQUAL +NOT_EQUAL +LESS_EQUAL_THAN +GREATER_EQUAL_THAN +GREATER_THAN +LESS_THAN +AND +OR +NOT +INCREMENT +DECREMENT +PATTERN_MATCHING_SEPARATOR +SEPARATOR +APPEND +TRUE +FALSE +BREAK +NEXT +ARROW +PLUS_ASSIGN +MINUS_ASSIGN +MULT_ASSIGN +DIVIDE_ASSIGN +MOD_ASSIGN +ASSIGN +LPAR +RPAR +LBRACK +RBRACK +LBRACE +RBRACE +COMMA +DOT +DOUBLEDOT +COLON +SEMICOLLON +INT_VALUE +FLOAT_VALUE +IDENTIFIER +STRING_VALUE +COMMENT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 65, 411, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 5, 59, 345, 8, 59, 10, 59, 12, 59, 348, 9, 59, 3, 59, 350, 8, 59, 1, 60, 5, 60, 353, 8, 60, 10, 60, 12, 60, 356, 9, 60, 1, 60, 1, 60, 4, 60, 360, 8, 60, 11, 60, 12, 60, 361, 1, 61, 1, 61, 5, 61, 366, 8, 61, 10, 61, 12, 61, 369, 9, 61, 1, 62, 1, 62, 5, 62, 373, 8, 62, 10, 62, 12, 62, 376, 9, 62, 1, 62, 1, 62, 1, 63, 1, 63, 5, 63, 382, 8, 63, 10, 63, 12, 63, 385, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 395, 8, 63, 10, 63, 12, 63, 398, 9, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 404, 8, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 396, 0, 65, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 1, 0, 7, 1, 0, 49, 57, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 34, 34, 2, 0, 10, 10, 13, 13, 3, 0, 9, 10, 13, 13, 32, 32, 419, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 1, 131, 1, 0, 0, 0, 3, 135, 1, 0, 0, 0, 5, 139, 1, 0, 0, 0, 7, 144, 1, 0, 0, 0, 9, 149, 1, 0, 0, 0, 11, 154, 1, 0, 0, 0, 13, 158, 1, 0, 0, 0, 15, 165, 1, 0, 0, 0, 17, 168, 1, 0, 0, 0, 19, 173, 1, 0, 0, 0, 21, 180, 1, 0, 0, 0, 23, 187, 1, 0, 0, 0, 25, 195, 1, 0, 0, 0, 27, 201, 1, 0, 0, 0, 29, 206, 1, 0, 0, 0, 31, 210, 1, 0, 0, 0, 33, 213, 1, 0, 0, 0, 35, 216, 1, 0, 0, 0, 37, 221, 1, 0, 0, 0, 39, 227, 1, 0, 0, 0, 41, 229, 1, 0, 0, 0, 43, 231, 1, 0, 0, 0, 45, 233, 1, 0, 0, 0, 47, 235, 1, 0, 0, 0, 49, 238, 1, 0, 0, 0, 51, 241, 1, 0, 0, 0, 53, 244, 1, 0, 0, 0, 55, 247, 1, 0, 0, 0, 57, 249, 1, 0, 0, 0, 59, 251, 1, 0, 0, 0, 61, 254, 1, 0, 0, 0, 63, 257, 1, 0, 0, 0, 65, 259, 1, 0, 0, 0, 67, 262, 1, 0, 0, 0, 69, 265, 1, 0, 0, 0, 71, 271, 1, 0, 0, 0, 73, 273, 1, 0, 0, 0, 75, 276, 1, 0, 0, 0, 77, 281, 1, 0, 0, 0, 79, 287, 1, 0, 0, 0, 81, 293, 1, 0, 0, 0, 83, 298, 1, 0, 0, 0, 85, 301, 1, 0, 0, 0, 87, 304, 1, 0, 0, 0, 89, 307, 1, 0, 0, 0, 91, 310, 1, 0, 0, 0, 93, 313, 1, 0, 0, 0, 95, 316, 1, 0, 0, 0, 97, 318, 1, 0, 0, 0, 99, 320, 1, 0, 0, 0, 101, 322, 1, 0, 0, 0, 103, 324, 1, 0, 0, 0, 105, 326, 1, 0, 0, 0, 107, 328, 1, 0, 0, 0, 109, 330, 1, 0, 0, 0, 111, 332, 1, 0, 0, 0, 113, 334, 1, 0, 0, 0, 115, 337, 1, 0, 0, 0, 117, 339, 1, 0, 0, 0, 119, 349, 1, 0, 0, 0, 121, 354, 1, 0, 0, 0, 123, 363, 1, 0, 0, 0, 125, 370, 1, 0, 0, 0, 127, 403, 1, 0, 0, 0, 129, 407, 1, 0, 0, 0, 131, 132, 5, 100, 0, 0, 132, 133, 5, 101, 0, 0, 133, 134, 5, 102, 0, 0, 134, 2, 1, 0, 0, 0, 135, 136, 5, 101, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 100, 0, 0, 138, 4, 1, 0, 0, 0, 139, 140, 5, 109, 0, 0, 140, 141, 5, 97, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 6, 1, 0, 0, 0, 144, 145, 5, 112, 0, 0, 145, 146, 5, 117, 0, 0, 146, 147, 5, 116, 0, 0, 147, 148, 5, 115, 0, 0, 148, 8, 1, 0, 0, 0, 149, 150, 5, 112, 0, 0, 150, 151, 5, 117, 0, 0, 151, 152, 5, 115, 0, 0, 152, 153, 5, 104, 0, 0, 153, 10, 1, 0, 0, 0, 154, 155, 5, 108, 0, 0, 155, 156, 5, 101, 0, 0, 156, 157, 5, 110, 0, 0, 157, 12, 1, 0, 0, 0, 158, 159, 5, 114, 0, 0, 159, 160, 5, 101, 0, 0, 160, 161, 5, 116, 0, 0, 161, 162, 5, 117, 0, 0, 162, 163, 5, 114, 0, 0, 163, 164, 5, 110, 0, 0, 164, 14, 1, 0, 0, 0, 165, 166, 5, 105, 0, 0, 166, 167, 5, 102, 0, 0, 167, 16, 1, 0, 0, 0, 168, 169, 5, 101, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 115, 0, 0, 171, 172, 5, 101, 0, 0, 172, 18, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 108, 0, 0, 175, 176, 5, 115, 0, 0, 176, 177, 5, 101, 0, 0, 177, 178, 5, 105, 0, 0, 178, 179, 5, 102, 0, 0, 179, 20, 1, 0, 0, 0, 180, 181, 5, 109, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 116, 0, 0, 183, 184, 5, 104, 0, 0, 184, 185, 5, 111, 0, 0, 185, 186, 5, 100, 0, 0, 186, 22, 1, 0, 0, 0, 187, 188, 5, 112, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 116, 0, 0, 190, 191, 5, 116, 0, 0, 191, 192, 5, 101, 0, 0, 192, 193, 5, 114, 0, 0, 193, 194, 5, 110, 0, 0, 194, 24, 1, 0, 0, 0, 195, 196, 5, 109, 0, 0, 196, 197, 5, 97, 0, 0, 197, 198, 5, 116, 0, 0, 198, 199, 5, 99, 0, 0, 199, 200, 5, 104, 0, 0, 200, 26, 1, 0, 0, 0, 201, 202, 5, 108, 0, 0, 202, 203, 5, 111, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 112, 0, 0, 205, 28, 1, 0, 0, 0, 206, 207, 5, 102, 0, 0, 207, 208, 5, 111, 0, 0, 208, 209, 5, 114, 0, 0, 209, 30, 1, 0, 0, 0, 210, 211, 5, 105, 0, 0, 211, 212, 5, 110, 0, 0, 212, 32, 1, 0, 0, 0, 213, 214, 5, 100, 0, 0, 214, 215, 5, 111, 0, 0, 215, 34, 1, 0, 0, 0, 216, 217, 5, 99, 0, 0, 217, 218, 5, 104, 0, 0, 218, 219, 5, 111, 0, 0, 219, 220, 5, 112, 0, 0, 220, 36, 1, 0, 0, 0, 221, 222, 5, 99, 0, 0, 222, 223, 5, 104, 0, 0, 223, 224, 5, 111, 0, 0, 224, 225, 5, 109, 0, 0, 225, 226, 5, 112, 0, 0, 226, 38, 1, 0, 0, 0, 227, 228, 5, 43, 0, 0, 228, 40, 1, 0, 0, 0, 229, 230, 5, 45, 0, 0, 230, 42, 1, 0, 0, 0, 231, 232, 5, 42, 0, 0, 232, 44, 1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 46, 1, 0, 0, 0, 235, 236, 5, 61, 0, 0, 236, 237, 5, 61, 0, 0, 237, 48, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 50, 1, 0, 0, 0, 241, 242, 5, 60, 0, 0, 242, 243, 5, 61, 0, 0, 243, 52, 1, 0, 0, 0, 244, 245, 5, 62, 0, 0, 245, 246, 5, 61, 0, 0, 246, 54, 1, 0, 0, 0, 247, 248, 5, 62, 0, 0, 248, 56, 1, 0, 0, 0, 249, 250, 5, 60, 0, 0, 250, 58, 1, 0, 0, 0, 251, 252, 5, 38, 0, 0, 252, 253, 5, 38, 0, 0, 253, 60, 1, 0, 0, 0, 254, 255, 5, 124, 0, 0, 255, 256, 5, 124, 0, 0, 256, 62, 1, 0, 0, 0, 257, 258, 5, 33, 0, 0, 258, 64, 1, 0, 0, 0, 259, 260, 5, 43, 0, 0, 260, 261, 5, 43, 0, 0, 261, 66, 1, 0, 0, 0, 262, 263, 5, 45, 0, 0, 263, 264, 5, 45, 0, 0, 264, 68, 1, 0, 0, 0, 265, 266, 5, 32, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 5, 32, 0, 0, 268, 269, 5, 32, 0, 0, 269, 270, 5, 124, 0, 0, 270, 70, 1, 0, 0, 0, 271, 272, 5, 124, 0, 0, 272, 72, 1, 0, 0, 0, 273, 274, 5, 60, 0, 0, 274, 275, 5, 60, 0, 0, 275, 74, 1, 0, 0, 0, 276, 277, 5, 116, 0, 0, 277, 278, 5, 114, 0, 0, 278, 279, 5, 117, 0, 0, 279, 280, 5, 101, 0, 0, 280, 76, 1, 0, 0, 0, 281, 282, 5, 102, 0, 0, 282, 283, 5, 97, 0, 0, 283, 284, 5, 108, 0, 0, 284, 285, 5, 115, 0, 0, 285, 286, 5, 101, 0, 0, 286, 78, 1, 0, 0, 0, 287, 288, 5, 98, 0, 0, 288, 289, 5, 114, 0, 0, 289, 290, 5, 101, 0, 0, 290, 291, 5, 97, 0, 0, 291, 292, 5, 107, 0, 0, 292, 80, 1, 0, 0, 0, 293, 294, 5, 110, 0, 0, 294, 295, 5, 101, 0, 0, 295, 296, 5, 120, 0, 0, 296, 297, 5, 116, 0, 0, 297, 82, 1, 0, 0, 0, 298, 299, 5, 45, 0, 0, 299, 300, 5, 62, 0, 0, 300, 84, 1, 0, 0, 0, 301, 302, 5, 43, 0, 0, 302, 303, 5, 61, 0, 0, 303, 86, 1, 0, 0, 0, 304, 305, 5, 45, 0, 0, 305, 306, 5, 61, 0, 0, 306, 88, 1, 0, 0, 0, 307, 308, 5, 42, 0, 0, 308, 309, 5, 61, 0, 0, 309, 90, 1, 0, 0, 0, 310, 311, 5, 47, 0, 0, 311, 312, 5, 61, 0, 0, 312, 92, 1, 0, 0, 0, 313, 314, 5, 37, 0, 0, 314, 315, 5, 61, 0, 0, 315, 94, 1, 0, 0, 0, 316, 317, 5, 61, 0, 0, 317, 96, 1, 0, 0, 0, 318, 319, 5, 40, 0, 0, 319, 98, 1, 0, 0, 0, 320, 321, 5, 41, 0, 0, 321, 100, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 102, 1, 0, 0, 0, 324, 325, 5, 93, 0, 0, 325, 104, 1, 0, 0, 0, 326, 327, 5, 123, 0, 0, 327, 106, 1, 0, 0, 0, 328, 329, 5, 125, 0, 0, 329, 108, 1, 0, 0, 0, 330, 331, 5, 44, 0, 0, 331, 110, 1, 0, 0, 0, 332, 333, 5, 46, 0, 0, 333, 112, 1, 0, 0, 0, 334, 335, 5, 46, 0, 0, 335, 336, 5, 46, 0, 0, 336, 114, 1, 0, 0, 0, 337, 338, 5, 58, 0, 0, 338, 116, 1, 0, 0, 0, 339, 340, 5, 59, 0, 0, 340, 118, 1, 0, 0, 0, 341, 350, 5, 48, 0, 0, 342, 346, 7, 0, 0, 0, 343, 345, 7, 1, 0, 0, 344, 343, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, 0, 0, 349, 342, 1, 0, 0, 0, 350, 120, 1, 0, 0, 0, 351, 353, 7, 1, 0, 0, 352, 351, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 46, 0, 0, 358, 360, 7, 1, 0, 0, 359, 358, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 122, 1, 0, 0, 0, 363, 367, 7, 2, 0, 0, 364, 366, 7, 3, 0, 0, 365, 364, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 124, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 374, 5, 34, 0, 0, 371, 373, 8, 4, 0, 0, 372, 371, 1, 0, 0, 0, 373, 376, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 374, 375, 1, 0, 0, 0, 375, 377, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 377, 378, 5, 34, 0, 0, 378, 126, 1, 0, 0, 0, 379, 383, 5, 35, 0, 0, 380, 382, 8, 5, 0, 0, 381, 380, 1, 0, 0, 0, 382, 385, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 404, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 386, 387, 5, 61, 0, 0, 387, 388, 5, 98, 0, 0, 388, 389, 5, 101, 0, 0, 389, 390, 5, 103, 0, 0, 390, 391, 5, 105, 0, 0, 391, 392, 5, 110, 0, 0, 392, 396, 1, 0, 0, 0, 393, 395, 9, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 398, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 399, 400, 5, 61, 0, 0, 400, 401, 5, 101, 0, 0, 401, 402, 5, 110, 0, 0, 402, 404, 5, 100, 0, 0, 403, 379, 1, 0, 0, 0, 403, 386, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 6, 63, 0, 0, 406, 128, 1, 0, 0, 0, 407, 408, 7, 6, 0, 0, 408, 409, 1, 0, 0, 0, 409, 410, 6, 64, 0, 0, 410, 130, 1, 0, 0, 0, 10, 0, 346, 349, 354, 361, 367, 374, 383, 396, 403, 1, 6, 0, 0] \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftLexer.java b/Phase2Template/gen/main/grammar/FunctionCraftLexer.java new file mode 100644 index 0000000..173033b --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftLexer.java @@ -0,0 +1,403 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class FunctionCraftLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public FunctionCraftLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000A\u019b\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+ + "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+ + "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+ + "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+ + "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+ + "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+ + "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ + "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+ + "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ + "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ + "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ + "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001"+ + "\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001"+ + "\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013"+ + "\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016"+ + "\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f"+ + "\u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001#\u0001#\u0001$\u0001$\u0001$\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001(\u0001("+ + "\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u00010\u00010\u00011\u00011\u00012\u00012\u00013\u00013\u00014\u0001"+ + "4\u00015\u00015\u00016\u00016\u00017\u00017\u00018\u00018\u00018\u0001"+ + "9\u00019\u0001:\u0001:\u0001;\u0001;\u0001;\u0005;\u0159\b;\n;\f;\u015c"+ + "\t;\u0003;\u015e\b;\u0001<\u0005<\u0161\b<\n<\f<\u0164\t<\u0001<\u0001"+ + "<\u0004<\u0168\b<\u000b<\f<\u0169\u0001=\u0001=\u0005=\u016e\b=\n=\f="+ + "\u0171\t=\u0001>\u0001>\u0005>\u0175\b>\n>\f>\u0178\t>\u0001>\u0001>\u0001"+ + "?\u0001?\u0005?\u017e\b?\n?\f?\u0181\t?\u0001?\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0005?\u018b\b?\n?\f?\u018e\t?\u0001?\u0001?\u0001"+ + "?\u0001?\u0003?\u0194\b?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001"+ + "\u018c\u0000A\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005"+ + "\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019"+ + "\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015"+ + "+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f"+ + "? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f"+ + "@\u0081A\u0001\u0000\u0007\u0001\u000019\u0001\u000009\u0003\u0000AZ_"+ + "_az\u0004\u000009AZ__az\u0001\u0000\"\"\u0002\u0000\n\n\r\r\u0003\u0000"+ + "\t\n\r\r \u01a3\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000\u0000"+ + "\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f\u0001\u0000\u0000"+ + "\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000\u0000\u0000\u0000"+ + "%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000\u0000\u0000)\u0001"+ + "\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000-\u0001\u0000\u0000"+ + "\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0000\u0000"+ + "3\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000\u0000\u00007\u0001"+ + "\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000;\u0001\u0000\u0000"+ + "\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001\u0000\u0000\u0000\u0000"+ + "A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000\u0000\u0000E\u0001"+ + "\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000I\u0001\u0000\u0000"+ + "\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001\u0000\u0000\u0000\u0000"+ + "O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000\u0000\u0000S\u0001"+ + "\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000W\u0001\u0000\u0000"+ + "\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001\u0000\u0000\u0000\u0000"+ + "]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000\u0000\u0000a\u0001"+ + "\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000e\u0001\u0000\u0000"+ + "\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001\u0000\u0000\u0000\u0000"+ + "k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000\u0000\u0000o\u0001"+ + "\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000s\u0001\u0000\u0000"+ + "\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001\u0000\u0000\u0000\u0000"+ + "y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000\u0000\u0000}\u0001"+ + "\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000\u0000\u0081\u0001"+ + "\u0000\u0000\u0000\u0001\u0083\u0001\u0000\u0000\u0000\u0003\u0087\u0001"+ + "\u0000\u0000\u0000\u0005\u008b\u0001\u0000\u0000\u0000\u0007\u0090\u0001"+ + "\u0000\u0000\u0000\t\u0095\u0001\u0000\u0000\u0000\u000b\u009a\u0001\u0000"+ + "\u0000\u0000\r\u009e\u0001\u0000\u0000\u0000\u000f\u00a5\u0001\u0000\u0000"+ + "\u0000\u0011\u00a8\u0001\u0000\u0000\u0000\u0013\u00ad\u0001\u0000\u0000"+ + "\u0000\u0015\u00b4\u0001\u0000\u0000\u0000\u0017\u00bb\u0001\u0000\u0000"+ + "\u0000\u0019\u00c3\u0001\u0000\u0000\u0000\u001b\u00c9\u0001\u0000\u0000"+ + "\u0000\u001d\u00ce\u0001\u0000\u0000\u0000\u001f\u00d2\u0001\u0000\u0000"+ + "\u0000!\u00d5\u0001\u0000\u0000\u0000#\u00d8\u0001\u0000\u0000\u0000%"+ + "\u00dd\u0001\u0000\u0000\u0000\'\u00e3\u0001\u0000\u0000\u0000)\u00e5"+ + "\u0001\u0000\u0000\u0000+\u00e7\u0001\u0000\u0000\u0000-\u00e9\u0001\u0000"+ + "\u0000\u0000/\u00eb\u0001\u0000\u0000\u00001\u00ee\u0001\u0000\u0000\u0000"+ + "3\u00f1\u0001\u0000\u0000\u00005\u00f4\u0001\u0000\u0000\u00007\u00f7"+ + "\u0001\u0000\u0000\u00009\u00f9\u0001\u0000\u0000\u0000;\u00fb\u0001\u0000"+ + "\u0000\u0000=\u00fe\u0001\u0000\u0000\u0000?\u0101\u0001\u0000\u0000\u0000"+ + "A\u0103\u0001\u0000\u0000\u0000C\u0106\u0001\u0000\u0000\u0000E\u0109"+ + "\u0001\u0000\u0000\u0000G\u010f\u0001\u0000\u0000\u0000I\u0111\u0001\u0000"+ + "\u0000\u0000K\u0114\u0001\u0000\u0000\u0000M\u0119\u0001\u0000\u0000\u0000"+ + "O\u011f\u0001\u0000\u0000\u0000Q\u0125\u0001\u0000\u0000\u0000S\u012a"+ + "\u0001\u0000\u0000\u0000U\u012d\u0001\u0000\u0000\u0000W\u0130\u0001\u0000"+ + "\u0000\u0000Y\u0133\u0001\u0000\u0000\u0000[\u0136\u0001\u0000\u0000\u0000"+ + "]\u0139\u0001\u0000\u0000\u0000_\u013c\u0001\u0000\u0000\u0000a\u013e"+ + "\u0001\u0000\u0000\u0000c\u0140\u0001\u0000\u0000\u0000e\u0142\u0001\u0000"+ + "\u0000\u0000g\u0144\u0001\u0000\u0000\u0000i\u0146\u0001\u0000\u0000\u0000"+ + "k\u0148\u0001\u0000\u0000\u0000m\u014a\u0001\u0000\u0000\u0000o\u014c"+ + "\u0001\u0000\u0000\u0000q\u014e\u0001\u0000\u0000\u0000s\u0151\u0001\u0000"+ + "\u0000\u0000u\u0153\u0001\u0000\u0000\u0000w\u015d\u0001\u0000\u0000\u0000"+ + "y\u0162\u0001\u0000\u0000\u0000{\u016b\u0001\u0000\u0000\u0000}\u0172"+ + "\u0001\u0000\u0000\u0000\u007f\u0193\u0001\u0000\u0000\u0000\u0081\u0197"+ + "\u0001\u0000\u0000\u0000\u0083\u0084\u0005d\u0000\u0000\u0084\u0085\u0005"+ + "e\u0000\u0000\u0085\u0086\u0005f\u0000\u0000\u0086\u0002\u0001\u0000\u0000"+ + "\u0000\u0087\u0088\u0005e\u0000\u0000\u0088\u0089\u0005n\u0000\u0000\u0089"+ + "\u008a\u0005d\u0000\u0000\u008a\u0004\u0001\u0000\u0000\u0000\u008b\u008c"+ + "\u0005m\u0000\u0000\u008c\u008d\u0005a\u0000\u0000\u008d\u008e\u0005i"+ + "\u0000\u0000\u008e\u008f\u0005n\u0000\u0000\u008f\u0006\u0001\u0000\u0000"+ + "\u0000\u0090\u0091\u0005p\u0000\u0000\u0091\u0092\u0005u\u0000\u0000\u0092"+ + "\u0093\u0005t\u0000\u0000\u0093\u0094\u0005s\u0000\u0000\u0094\b\u0001"+ + "\u0000\u0000\u0000\u0095\u0096\u0005p\u0000\u0000\u0096\u0097\u0005u\u0000"+ + "\u0000\u0097\u0098\u0005s\u0000\u0000\u0098\u0099\u0005h\u0000\u0000\u0099"+ + "\n\u0001\u0000\u0000\u0000\u009a\u009b\u0005l\u0000\u0000\u009b\u009c"+ + "\u0005e\u0000\u0000\u009c\u009d\u0005n\u0000\u0000\u009d\f\u0001\u0000"+ + "\u0000\u0000\u009e\u009f\u0005r\u0000\u0000\u009f\u00a0\u0005e\u0000\u0000"+ + "\u00a0\u00a1\u0005t\u0000\u0000\u00a1\u00a2\u0005u\u0000\u0000\u00a2\u00a3"+ + "\u0005r\u0000\u0000\u00a3\u00a4\u0005n\u0000\u0000\u00a4\u000e\u0001\u0000"+ + "\u0000\u0000\u00a5\u00a6\u0005i\u0000\u0000\u00a6\u00a7\u0005f\u0000\u0000"+ + "\u00a7\u0010\u0001\u0000\u0000\u0000\u00a8\u00a9\u0005e\u0000\u0000\u00a9"+ + "\u00aa\u0005l\u0000\u0000\u00aa\u00ab\u0005s\u0000\u0000\u00ab\u00ac\u0005"+ + "e\u0000\u0000\u00ac\u0012\u0001\u0000\u0000\u0000\u00ad\u00ae\u0005e\u0000"+ + "\u0000\u00ae\u00af\u0005l\u0000\u0000\u00af\u00b0\u0005s\u0000\u0000\u00b0"+ + "\u00b1\u0005e\u0000\u0000\u00b1\u00b2\u0005i\u0000\u0000\u00b2\u00b3\u0005"+ + "f\u0000\u0000\u00b3\u0014\u0001\u0000\u0000\u0000\u00b4\u00b5\u0005m\u0000"+ + "\u0000\u00b5\u00b6\u0005e\u0000\u0000\u00b6\u00b7\u0005t\u0000\u0000\u00b7"+ + "\u00b8\u0005h\u0000\u0000\u00b8\u00b9\u0005o\u0000\u0000\u00b9\u00ba\u0005"+ + "d\u0000\u0000\u00ba\u0016\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005p\u0000"+ + "\u0000\u00bc\u00bd\u0005a\u0000\u0000\u00bd\u00be\u0005t\u0000\u0000\u00be"+ + "\u00bf\u0005t\u0000\u0000\u00bf\u00c0\u0005e\u0000\u0000\u00c0\u00c1\u0005"+ + "r\u0000\u0000\u00c1\u00c2\u0005n\u0000\u0000\u00c2\u0018\u0001\u0000\u0000"+ + "\u0000\u00c3\u00c4\u0005m\u0000\u0000\u00c4\u00c5\u0005a\u0000\u0000\u00c5"+ + "\u00c6\u0005t\u0000\u0000\u00c6\u00c7\u0005c\u0000\u0000\u00c7\u00c8\u0005"+ + "h\u0000\u0000\u00c8\u001a\u0001\u0000\u0000\u0000\u00c9\u00ca\u0005l\u0000"+ + "\u0000\u00ca\u00cb\u0005o\u0000\u0000\u00cb\u00cc\u0005o\u0000\u0000\u00cc"+ + "\u00cd\u0005p\u0000\u0000\u00cd\u001c\u0001\u0000\u0000\u0000\u00ce\u00cf"+ + "\u0005f\u0000\u0000\u00cf\u00d0\u0005o\u0000\u0000\u00d0\u00d1\u0005r"+ + "\u0000\u0000\u00d1\u001e\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005i\u0000"+ + "\u0000\u00d3\u00d4\u0005n\u0000\u0000\u00d4 \u0001\u0000\u0000\u0000\u00d5"+ + "\u00d6\u0005d\u0000\u0000\u00d6\u00d7\u0005o\u0000\u0000\u00d7\"\u0001"+ + "\u0000\u0000\u0000\u00d8\u00d9\u0005c\u0000\u0000\u00d9\u00da\u0005h\u0000"+ + "\u0000\u00da\u00db\u0005o\u0000\u0000\u00db\u00dc\u0005p\u0000\u0000\u00dc"+ + "$\u0001\u0000\u0000\u0000\u00dd\u00de\u0005c\u0000\u0000\u00de\u00df\u0005"+ + "h\u0000\u0000\u00df\u00e0\u0005o\u0000\u0000\u00e0\u00e1\u0005m\u0000"+ + "\u0000\u00e1\u00e2\u0005p\u0000\u0000\u00e2&\u0001\u0000\u0000\u0000\u00e3"+ + "\u00e4\u0005+\u0000\u0000\u00e4(\u0001\u0000\u0000\u0000\u00e5\u00e6\u0005"+ + "-\u0000\u0000\u00e6*\u0001\u0000\u0000\u0000\u00e7\u00e8\u0005*\u0000"+ + "\u0000\u00e8,\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005/\u0000\u0000\u00ea"+ + ".\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005=\u0000\u0000\u00ec\u00ed\u0005"+ + "=\u0000\u0000\u00ed0\u0001\u0000\u0000\u0000\u00ee\u00ef\u0005!\u0000"+ + "\u0000\u00ef\u00f0\u0005=\u0000\u0000\u00f02\u0001\u0000\u0000\u0000\u00f1"+ + "\u00f2\u0005<\u0000\u0000\u00f2\u00f3\u0005=\u0000\u0000\u00f34\u0001"+ + "\u0000\u0000\u0000\u00f4\u00f5\u0005>\u0000\u0000\u00f5\u00f6\u0005=\u0000"+ + "\u0000\u00f66\u0001\u0000\u0000\u0000\u00f7\u00f8\u0005>\u0000\u0000\u00f8"+ + "8\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005<\u0000\u0000\u00fa:\u0001"+ + "\u0000\u0000\u0000\u00fb\u00fc\u0005&\u0000\u0000\u00fc\u00fd\u0005&\u0000"+ + "\u0000\u00fd<\u0001\u0000\u0000\u0000\u00fe\u00ff\u0005|\u0000\u0000\u00ff"+ + "\u0100\u0005|\u0000\u0000\u0100>\u0001\u0000\u0000\u0000\u0101\u0102\u0005"+ + "!\u0000\u0000\u0102@\u0001\u0000\u0000\u0000\u0103\u0104\u0005+\u0000"+ + "\u0000\u0104\u0105\u0005+\u0000\u0000\u0105B\u0001\u0000\u0000\u0000\u0106"+ + "\u0107\u0005-\u0000\u0000\u0107\u0108\u0005-\u0000\u0000\u0108D\u0001"+ + "\u0000\u0000\u0000\u0109\u010a\u0005 \u0000\u0000\u010a\u010b\u0005 \u0000"+ + "\u0000\u010b\u010c\u0005 \u0000\u0000\u010c\u010d\u0005 \u0000\u0000\u010d"+ + "\u010e\u0005|\u0000\u0000\u010eF\u0001\u0000\u0000\u0000\u010f\u0110\u0005"+ + "|\u0000\u0000\u0110H\u0001\u0000\u0000\u0000\u0111\u0112\u0005<\u0000"+ + "\u0000\u0112\u0113\u0005<\u0000\u0000\u0113J\u0001\u0000\u0000\u0000\u0114"+ + "\u0115\u0005t\u0000\u0000\u0115\u0116\u0005r\u0000\u0000\u0116\u0117\u0005"+ + "u\u0000\u0000\u0117\u0118\u0005e\u0000\u0000\u0118L\u0001\u0000\u0000"+ + "\u0000\u0119\u011a\u0005f\u0000\u0000\u011a\u011b\u0005a\u0000\u0000\u011b"+ + "\u011c\u0005l\u0000\u0000\u011c\u011d\u0005s\u0000\u0000\u011d\u011e\u0005"+ + "e\u0000\u0000\u011eN\u0001\u0000\u0000\u0000\u011f\u0120\u0005b\u0000"+ + "\u0000\u0120\u0121\u0005r\u0000\u0000\u0121\u0122\u0005e\u0000\u0000\u0122"+ + "\u0123\u0005a\u0000\u0000\u0123\u0124\u0005k\u0000\u0000\u0124P\u0001"+ + "\u0000\u0000\u0000\u0125\u0126\u0005n\u0000\u0000\u0126\u0127\u0005e\u0000"+ + "\u0000\u0127\u0128\u0005x\u0000\u0000\u0128\u0129\u0005t\u0000\u0000\u0129"+ + "R\u0001\u0000\u0000\u0000\u012a\u012b\u0005-\u0000\u0000\u012b\u012c\u0005"+ + ">\u0000\u0000\u012cT\u0001\u0000\u0000\u0000\u012d\u012e\u0005+\u0000"+ + "\u0000\u012e\u012f\u0005=\u0000\u0000\u012fV\u0001\u0000\u0000\u0000\u0130"+ + "\u0131\u0005-\u0000\u0000\u0131\u0132\u0005=\u0000\u0000\u0132X\u0001"+ + "\u0000\u0000\u0000\u0133\u0134\u0005*\u0000\u0000\u0134\u0135\u0005=\u0000"+ + "\u0000\u0135Z\u0001\u0000\u0000\u0000\u0136\u0137\u0005/\u0000\u0000\u0137"+ + "\u0138\u0005=\u0000\u0000\u0138\\\u0001\u0000\u0000\u0000\u0139\u013a"+ + "\u0005%\u0000\u0000\u013a\u013b\u0005=\u0000\u0000\u013b^\u0001\u0000"+ + "\u0000\u0000\u013c\u013d\u0005=\u0000\u0000\u013d`\u0001\u0000\u0000\u0000"+ + "\u013e\u013f\u0005(\u0000\u0000\u013fb\u0001\u0000\u0000\u0000\u0140\u0141"+ + "\u0005)\u0000\u0000\u0141d\u0001\u0000\u0000\u0000\u0142\u0143\u0005["+ + "\u0000\u0000\u0143f\u0001\u0000\u0000\u0000\u0144\u0145\u0005]\u0000\u0000"+ + "\u0145h\u0001\u0000\u0000\u0000\u0146\u0147\u0005{\u0000\u0000\u0147j"+ + "\u0001\u0000\u0000\u0000\u0148\u0149\u0005}\u0000\u0000\u0149l\u0001\u0000"+ + "\u0000\u0000\u014a\u014b\u0005,\u0000\u0000\u014bn\u0001\u0000\u0000\u0000"+ + "\u014c\u014d\u0005.\u0000\u0000\u014dp\u0001\u0000\u0000\u0000\u014e\u014f"+ + "\u0005.\u0000\u0000\u014f\u0150\u0005.\u0000\u0000\u0150r\u0001\u0000"+ + "\u0000\u0000\u0151\u0152\u0005:\u0000\u0000\u0152t\u0001\u0000\u0000\u0000"+ + "\u0153\u0154\u0005;\u0000\u0000\u0154v\u0001\u0000\u0000\u0000\u0155\u015e"+ + "\u00050\u0000\u0000\u0156\u015a\u0007\u0000\u0000\u0000\u0157\u0159\u0007"+ + "\u0001\u0000\u0000\u0158\u0157\u0001\u0000\u0000\u0000\u0159\u015c\u0001"+ + "\u0000\u0000\u0000\u015a\u0158\u0001\u0000\u0000\u0000\u015a\u015b\u0001"+ + "\u0000\u0000\u0000\u015b\u015e\u0001\u0000\u0000\u0000\u015c\u015a\u0001"+ + "\u0000\u0000\u0000\u015d\u0155\u0001\u0000\u0000\u0000\u015d\u0156\u0001"+ + "\u0000\u0000\u0000\u015ex\u0001\u0000\u0000\u0000\u015f\u0161\u0007\u0001"+ + "\u0000\u0000\u0160\u015f\u0001\u0000\u0000\u0000\u0161\u0164\u0001\u0000"+ + "\u0000\u0000\u0162\u0160\u0001\u0000\u0000\u0000\u0162\u0163\u0001\u0000"+ + "\u0000\u0000\u0163\u0165\u0001\u0000\u0000\u0000\u0164\u0162\u0001\u0000"+ + "\u0000\u0000\u0165\u0167\u0005.\u0000\u0000\u0166\u0168\u0007\u0001\u0000"+ + "\u0000\u0167\u0166\u0001\u0000\u0000\u0000\u0168\u0169\u0001\u0000\u0000"+ + "\u0000\u0169\u0167\u0001\u0000\u0000\u0000\u0169\u016a\u0001\u0000\u0000"+ + "\u0000\u016az\u0001\u0000\u0000\u0000\u016b\u016f\u0007\u0002\u0000\u0000"+ + "\u016c\u016e\u0007\u0003\u0000\u0000\u016d\u016c\u0001\u0000\u0000\u0000"+ + "\u016e\u0171\u0001\u0000\u0000\u0000\u016f\u016d\u0001\u0000\u0000\u0000"+ + "\u016f\u0170\u0001\u0000\u0000\u0000\u0170|\u0001\u0000\u0000\u0000\u0171"+ + "\u016f\u0001\u0000\u0000\u0000\u0172\u0176\u0005\"\u0000\u0000\u0173\u0175"+ + "\b\u0004\u0000\u0000\u0174\u0173\u0001\u0000\u0000\u0000\u0175\u0178\u0001"+ + "\u0000\u0000\u0000\u0176\u0174\u0001\u0000\u0000\u0000\u0176\u0177\u0001"+ + "\u0000\u0000\u0000\u0177\u0179\u0001\u0000\u0000\u0000\u0178\u0176\u0001"+ + "\u0000\u0000\u0000\u0179\u017a\u0005\"\u0000\u0000\u017a~\u0001\u0000"+ + "\u0000\u0000\u017b\u017f\u0005#\u0000\u0000\u017c\u017e\b\u0005\u0000"+ + "\u0000\u017d\u017c\u0001\u0000\u0000\u0000\u017e\u0181\u0001\u0000\u0000"+ + "\u0000\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000"+ + "\u0000\u0180\u0194\u0001\u0000\u0000\u0000\u0181\u017f\u0001\u0000\u0000"+ + "\u0000\u0182\u0183\u0005=\u0000\u0000\u0183\u0184\u0005b\u0000\u0000\u0184"+ + "\u0185\u0005e\u0000\u0000\u0185\u0186\u0005g\u0000\u0000\u0186\u0187\u0005"+ + "i\u0000\u0000\u0187\u0188\u0005n\u0000\u0000\u0188\u018c\u0001\u0000\u0000"+ + "\u0000\u0189\u018b\t\u0000\u0000\u0000\u018a\u0189\u0001\u0000\u0000\u0000"+ + "\u018b\u018e\u0001\u0000\u0000\u0000\u018c\u018d\u0001\u0000\u0000\u0000"+ + "\u018c\u018a\u0001\u0000\u0000\u0000\u018d\u018f\u0001\u0000\u0000\u0000"+ + "\u018e\u018c\u0001\u0000\u0000\u0000\u018f\u0190\u0005=\u0000\u0000\u0190"+ + "\u0191\u0005e\u0000\u0000\u0191\u0192\u0005n\u0000\u0000\u0192\u0194\u0005"+ + "d\u0000\u0000\u0193\u017b\u0001\u0000\u0000\u0000\u0193\u0182\u0001\u0000"+ + "\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u0196\u0006?\u0000"+ + "\u0000\u0196\u0080\u0001\u0000\u0000\u0000\u0197\u0198\u0007\u0006\u0000"+ + "\u0000\u0198\u0199\u0001\u0000\u0000\u0000\u0199\u019a\u0006@\u0000\u0000"+ + "\u019a\u0082\u0001\u0000\u0000\u0000\n\u0000\u015a\u015d\u0162\u0169\u016f"+ + "\u0176\u017f\u018c\u0193\u0001\u0006\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftLexer.tokens b/Phase2Template/gen/main/grammar/FunctionCraftLexer.tokens new file mode 100644 index 0000000..c103028 --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftLexer.tokens @@ -0,0 +1,124 @@ +DEF=1 +END=2 +MAIN=3 +PUTS=4 +PUSH=5 +LEN=6 +RETURN=7 +IF=8 +ELSE=9 +ELSEIF=10 +METHOD=11 +PATTERN=12 +MATCH=13 +LOOP=14 +FOR=15 +IN=16 +DO=17 +CHOP=18 +CHOMP=19 +PLUS=20 +MINUS=21 +MULT=22 +DIVIDE=23 +EQUAL=24 +NOT_EQUAL=25 +LESS_EQUAL_THAN=26 +GREATER_EQUAL_THAN=27 +GREATER_THAN=28 +LESS_THAN=29 +AND=30 +OR=31 +NOT=32 +INCREMENT=33 +DECREMENT=34 +PATTERN_MATCHING_SEPARATOR=35 +SEPARATOR=36 +APPEND=37 +TRUE=38 +FALSE=39 +BREAK=40 +NEXT=41 +ARROW=42 +PLUS_ASSIGN=43 +MINUS_ASSIGN=44 +MULT_ASSIGN=45 +DIVIDE_ASSIGN=46 +MOD_ASSIGN=47 +ASSIGN=48 +LPAR=49 +RPAR=50 +LBRACK=51 +RBRACK=52 +LBRACE=53 +RBRACE=54 +COMMA=55 +DOT=56 +DOUBLEDOT=57 +COLON=58 +SEMICOLLON=59 +INT_VALUE=60 +FLOAT_VALUE=61 +IDENTIFIER=62 +STRING_VALUE=63 +COMMENT=64 +WS=65 +'def'=1 +'end'=2 +'main'=3 +'puts'=4 +'push'=5 +'len'=6 +'return'=7 +'if'=8 +'else'=9 +'elseif'=10 +'method'=11 +'pattern'=12 +'match'=13 +'loop'=14 +'for'=15 +'in'=16 +'do'=17 +'chop'=18 +'chomp'=19 +'+'=20 +'-'=21 +'*'=22 +'/'=23 +'=='=24 +'!='=25 +'<='=26 +'>='=27 +'>'=28 +'<'=29 +'&&'=30 +'||'=31 +'!'=32 +'++'=33 +'--'=34 +' |'=35 +'|'=36 +'<<'=37 +'true'=38 +'false'=39 +'break'=40 +'next'=41 +'->'=42 +'+='=43 +'-='=44 +'*='=45 +'/='=46 +'%='=47 +'='=48 +'('=49 +')'=50 +'['=51 +']'=52 +'{'=53 +'}'=54 +','=55 +'.'=56 +'..'=57 +':'=58 +';'=59 diff --git a/Phase2Template/gen/main/grammar/FunctionCraftListener.java b/Phase2Template/gen/main/grammar/FunctionCraftListener.java new file mode 100644 index 0000000..b62b954 --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftListener.java @@ -0,0 +1,389 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link FunctionCraftParser}. + */ +public interface FunctionCraftListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void enterProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + */ + void exitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void enterPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + */ + void exitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void enterMain(FunctionCraftParser.MainContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + */ + void exitMain(FunctionCraftParser.MainContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void enterFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + */ + void exitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void enterReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + */ + void exitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void enterIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + */ + void exitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void enterCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + */ + void exitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void enterPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + */ + void exitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void enterLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + */ + void exitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void enterPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + */ + void exitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void enterLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + */ + void exitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void enterLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + */ + void exitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void enterForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + */ + void exitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void enterRange(FunctionCraftParser.RangeContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + */ + void exitRange(FunctionCraftParser.RangeContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void enterFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + */ + void exitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void enterMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + */ + void exitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void enterChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + */ + void exitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + */ + void enterChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + */ + void exitChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void enterAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + */ + void exitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void enterAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + */ + void exitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void enterStatement(FunctionCraftParser.StatementContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + */ + void exitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void enterBody(FunctionCraftParser.BodyContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + */ + void exitBody(FunctionCraftParser.BodyContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void enterExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + */ + void exitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void enterEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + */ + void exitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void enterRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + */ + void exitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void enterAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + */ + void exitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void enterMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void exitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void enterPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + */ + void exitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void enterAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + */ + void exitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void enterOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + */ + void exitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void enterLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + */ + void exitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void enterValues(FunctionCraftParser.ValuesContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + */ + void exitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void enterListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + */ + void exitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void enterBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + */ + void exitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Enter a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void enterFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); + /** + * Exit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + */ + void exitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftParser.java b/Phase2Template/gen/main/grammar/FunctionCraftParser.java new file mode 100644 index 0000000..49dee5c --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftParser.java @@ -0,0 +1,4435 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class FunctionCraftParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + DEF=1, END=2, MAIN=3, PUTS=4, PUSH=5, LEN=6, RETURN=7, IF=8, ELSE=9, ELSEIF=10, + METHOD=11, PATTERN=12, MATCH=13, LOOP=14, FOR=15, IN=16, DO=17, CHOP=18, + CHOMP=19, PLUS=20, MINUS=21, MULT=22, DIVIDE=23, EQUAL=24, NOT_EQUAL=25, + LESS_EQUAL_THAN=26, GREATER_EQUAL_THAN=27, GREATER_THAN=28, LESS_THAN=29, + AND=30, OR=31, NOT=32, INCREMENT=33, DECREMENT=34, PATTERN_MATCHING_SEPARATOR=35, + SEPARATOR=36, APPEND=37, TRUE=38, FALSE=39, BREAK=40, NEXT=41, ARROW=42, + PLUS_ASSIGN=43, MINUS_ASSIGN=44, MULT_ASSIGN=45, DIVIDE_ASSIGN=46, MOD_ASSIGN=47, + ASSIGN=48, LPAR=49, RPAR=50, LBRACK=51, RBRACK=52, LBRACE=53, RBRACE=54, + COMMA=55, DOT=56, DOUBLEDOT=57, COLON=58, SEMICOLLON=59, INT_VALUE=60, + FLOAT_VALUE=61, IDENTIFIER=62, STRING_VALUE=63, COMMENT=64, WS=65; + public static final int + RULE_program = 0, RULE_functionDeclaration = 1, RULE_functionArgumentsDeclaration = 2, + RULE_patternMatching = 3, RULE_main = 4, RULE_functionArguments = 5, RULE_returnStatement = 6, + RULE_ifStatement = 7, RULE_condition = 8, RULE_putsStatement = 9, RULE_lenStatement = 10, + RULE_pushStatement = 11, RULE_loopDoStatement = 12, RULE_loopBody = 13, + RULE_forStatement = 14, RULE_range = 15, RULE_filterStatement = 16, RULE_matchPatternStatement = 17, + RULE_chopStatement = 18, RULE_chompStatement = 19, RULE_assignment = 20, + RULE_accessList = 21, RULE_statement = 22, RULE_body = 23, RULE_expression = 24, + RULE_eqaulityExpression = 25, RULE_relationalExpression = 26, RULE_additiveExpression = 27, + RULE_multiplicativeExpression = 28, RULE_preUnaryExpression = 29, RULE_accessExpression = 30, + RULE_otherExpression = 31, RULE_lambdaFunction = 32, RULE_values = 33, + RULE_listValue = 34, RULE_boolValue = 35, RULE_functionPointer = 36; + private static String[] makeRuleNames() { + return new String[] { + "program", "functionDeclaration", "functionArgumentsDeclaration", "patternMatching", + "main", "functionArguments", "returnStatement", "ifStatement", "condition", + "putsStatement", "lenStatement", "pushStatement", "loopDoStatement", + "loopBody", "forStatement", "range", "filterStatement", "matchPatternStatement", + "chopStatement", "chompStatement", "assignment", "accessList", "statement", + "body", "expression", "eqaulityExpression", "relationalExpression", "additiveExpression", + "multiplicativeExpression", "preUnaryExpression", "accessExpression", + "otherExpression", "lambdaFunction", "values", "listValue", "boolValue", + "functionPointer" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'def'", "'end'", "'main'", "'puts'", "'push'", "'len'", "'return'", + "'if'", "'else'", "'elseif'", "'method'", "'pattern'", "'match'", "'loop'", + "'for'", "'in'", "'do'", "'chop'", "'chomp'", "'+'", "'-'", "'*'", "'/'", + "'=='", "'!='", "'<='", "'>='", "'>'", "'<'", "'&&'", "'||'", "'!'", + "'++'", "'--'", "' |'", "'|'", "'<<'", "'true'", "'false'", "'break'", + "'next'", "'->'", "'+='", "'-='", "'*='", "'/='", "'%='", "'='", "'('", + "')'", "'['", "']'", "'{'", "'}'", "','", "'.'", "'..'", "':'", "';'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "DEF", "END", "MAIN", "PUTS", "PUSH", "LEN", "RETURN", "IF", "ELSE", + "ELSEIF", "METHOD", "PATTERN", "MATCH", "LOOP", "FOR", "IN", "DO", "CHOP", + "CHOMP", "PLUS", "MINUS", "MULT", "DIVIDE", "EQUAL", "NOT_EQUAL", "LESS_EQUAL_THAN", + "GREATER_EQUAL_THAN", "GREATER_THAN", "LESS_THAN", "AND", "OR", "NOT", + "INCREMENT", "DECREMENT", "PATTERN_MATCHING_SEPARATOR", "SEPARATOR", + "APPEND", "TRUE", "FALSE", "BREAK", "NEXT", "ARROW", "PLUS_ASSIGN", "MINUS_ASSIGN", + "MULT_ASSIGN", "DIVIDE_ASSIGN", "MOD_ASSIGN", "ASSIGN", "LPAR", "RPAR", + "LBRACK", "RBRACK", "LBRACE", "RBRACE", "COMMA", "DOT", "DOUBLEDOT", + "COLON", "SEMICOLLON", "INT_VALUE", "FLOAT_VALUE", "IDENTIFIER", "STRING_VALUE", + "COMMENT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "FunctionCraft.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public FunctionCraftParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ProgramContext extends ParserRuleContext { + public Program flProgram; + public FunctionDeclarationContext f; + public PatternMatchingContext p; + public MainContext m; + public MainContext main() { + return getRuleContext(MainContext.class,0); + } + public List functionDeclaration() { + return getRuleContexts(FunctionDeclarationContext.class); + } + public FunctionDeclarationContext functionDeclaration(int i) { + return getRuleContext(FunctionDeclarationContext.class,i); + } + public List patternMatching() { + return getRuleContexts(PatternMatchingContext.class); + } + public PatternMatchingContext patternMatching(int i) { + return getRuleContext(PatternMatchingContext.class,i); + } + public ProgramContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_program; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterProgram(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitProgram(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitProgram(this); + else return visitor.visitChildren(this); + } + } + + public final ProgramContext program() throws RecognitionException { + ProgramContext _localctx = new ProgramContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_program); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((ProgramContext)_localctx).flProgram = new Program(); + _localctx.flProgram.setLine(1); + + setState(83); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(81); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DEF: + { + setState(75); + ((ProgramContext)_localctx).f = functionDeclaration(); + _localctx.flProgram.addFunctionDeclaration(((ProgramContext)_localctx).f.functionDeclarationRet); + } + break; + case PATTERN: + { + setState(78); + ((ProgramContext)_localctx).p = patternMatching(); + _localctx.flProgram.addPatternDeclaration(((ProgramContext)_localctx).p.patternRet); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(85); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + } + setState(86); + ((ProgramContext)_localctx).m = main(); + _localctx.flProgram.setMain(((ProgramContext)_localctx).m.mainRet); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionDeclarationContext extends ParserRuleContext { + public FunctionDeclaration functionDeclarationRet; + public Token def; + public Token id; + public FunctionArgumentsDeclarationContext f; + public BodyContext b; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionDeclarationContext functionDeclaration() throws RecognitionException { + FunctionDeclarationContext _localctx = new FunctionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_functionDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + + ((FunctionDeclarationContext)_localctx).functionDeclarationRet = new FunctionDeclaration(); + + setState(90); + ((FunctionDeclarationContext)_localctx).def = match(DEF); + _localctx.functionDeclarationRet.setLine((((FunctionDeclarationContext)_localctx).def!=null?((FunctionDeclarationContext)_localctx).def.getLine():0)); + setState(92); + ((FunctionDeclarationContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getText():null)); + id_.setLine((((FunctionDeclarationContext)_localctx).id!=null?((FunctionDeclarationContext)_localctx).id.getLine():0)); + _localctx.functionDeclarationRet.setFunctionName(id_); + _localctx.functionDeclarationRet.setLine((((FunctionDeclarationContext)_localctx).def!=null?((FunctionDeclarationContext)_localctx).def.getLine():0)); + + setState(94); + ((FunctionDeclarationContext)_localctx).f = functionArgumentsDeclaration(); + _localctx.functionDeclarationRet.setArgs(((FunctionDeclarationContext)_localctx).f.argRet); + setState(96); + ((FunctionDeclarationContext)_localctx).b = body(); + _localctx.functionDeclarationRet.setBody(((FunctionDeclarationContext)_localctx).b.bodyRet); + setState(98); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsDeclarationContext extends ParserRuleContext { + public ArrayList argRet; + public Token id1; + public Token id2; + public Token id3; + public ExpressionContext e1; + public Token id4; + public ExpressionContext e2; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public FunctionArgumentsDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArgumentsDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArgumentsDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArgumentsDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArgumentsDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsDeclarationContext functionArgumentsDeclaration() throws RecognitionException { + FunctionArgumentsDeclarationContext _localctx = new FunctionArgumentsDeclarationContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_functionArgumentsDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((FunctionArgumentsDeclarationContext)_localctx).argRet = new ArrayList(); + + setState(101); + match(LPAR); + setState(135); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IDENTIFIER) { + { + setState(102); + ((FunctionArgumentsDeclarationContext)_localctx).id1 = match(IDENTIFIER); + + Identifier id_ = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getText():null)); + id_.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); + VarDeclaration newVarDec = new VarDeclaration(id_); + newVarDec.setLine((((FunctionArgumentsDeclarationContext)_localctx).id1!=null?((FunctionArgumentsDeclarationContext)_localctx).id1.getLine():0)); + _localctx.argRet.add(newVarDec); + + setState(109); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(104); + match(COMMA); + setState(105); + ((FunctionArgumentsDeclarationContext)_localctx).id2 = match(IDENTIFIER); + + Identifier id_2 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getText():null)); + id_2.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); + VarDeclaration newVarDec2 = new VarDeclaration(id_2); + newVarDec2.setLine((((FunctionArgumentsDeclarationContext)_localctx).id2!=null?((FunctionArgumentsDeclarationContext)_localctx).id2.getLine():0)); + _localctx.argRet.add(newVarDec2); + + } + } + } + setState(111); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + setState(133); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(112); + match(COMMA); + setState(113); + match(LBRACK); + setState(114); + ((FunctionArgumentsDeclarationContext)_localctx).id3 = match(IDENTIFIER); + + Identifier id_3 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getText():null)); + id_3.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); + VarDeclaration newVarDec3 = new VarDeclaration(id_3); + newVarDec3.setLine((((FunctionArgumentsDeclarationContext)_localctx).id3!=null?((FunctionArgumentsDeclarationContext)_localctx).id3.getLine():0)); + + setState(116); + match(ASSIGN); + setState(117); + ((FunctionArgumentsDeclarationContext)_localctx).e1 = expression(0); + + newVarDec3.setDefaultVal(((FunctionArgumentsDeclarationContext)_localctx).e1.expRet); + _localctx.argRet.add(newVarDec3); + + setState(128); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(119); + match(COMMA); + setState(120); + ((FunctionArgumentsDeclarationContext)_localctx).id4 = match(IDENTIFIER); + + Identifier id_4 = new Identifier((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getText():null)); + id_4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); + VarDeclaration newVarDec4 = new VarDeclaration(id_4); + newVarDec4.setLine((((FunctionArgumentsDeclarationContext)_localctx).id4!=null?((FunctionArgumentsDeclarationContext)_localctx).id4.getLine():0)); + + setState(122); + match(ASSIGN); + setState(123); + ((FunctionArgumentsDeclarationContext)_localctx).e2 = expression(0); + + newVarDec4.setDefaultVal(((FunctionArgumentsDeclarationContext)_localctx).e2.expRet); + _localctx.argRet.add(newVarDec4); + + } + } + setState(130); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(131); + match(RBRACK); + } + } + + } + } + + setState(137); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PatternMatchingContext extends ParserRuleContext { + public PatternDeclaration patternRet; + public Token pat; + public Token patternName; + public Token targetVar; + public ConditionContext c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PATTERN() { return getToken(FunctionCraftParser.PATTERN, 0); } + public List IDENTIFIER() { return getTokens(FunctionCraftParser.IDENTIFIER); } + public TerminalNode IDENTIFIER(int i) { + return getToken(FunctionCraftParser.IDENTIFIER, i); + } + public List PATTERN_MATCHING_SEPARATOR() { return getTokens(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR); } + public TerminalNode PATTERN_MATCHING_SEPARATOR(int i) { + return getToken(FunctionCraftParser.PATTERN_MATCHING_SEPARATOR, i); + } + public List ASSIGN() { return getTokens(FunctionCraftParser.ASSIGN); } + public TerminalNode ASSIGN(int i) { + return getToken(FunctionCraftParser.ASSIGN, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PatternMatchingContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_patternMatching; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPatternMatching(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPatternMatching(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPatternMatching(this); + else return visitor.visitChildren(this); + } + } + + public final PatternMatchingContext patternMatching() throws RecognitionException { + PatternMatchingContext _localctx = new PatternMatchingContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_patternMatching); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(139); + ((PatternMatchingContext)_localctx).pat = match(PATTERN); + + int patternLine = (((PatternMatchingContext)_localctx).pat!=null?((PatternMatchingContext)_localctx).pat.getLine():0); + + setState(141); + ((PatternMatchingContext)_localctx).patternName = match(IDENTIFIER); + + Identifier patternNameId = new Identifier((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getText():null)); + patternNameId.setLine((((PatternMatchingContext)_localctx).patternName!=null?((PatternMatchingContext)_localctx).patternName.getLine():0)); + + setState(143); + match(LPAR); + setState(144); + ((PatternMatchingContext)_localctx).targetVar = match(IDENTIFIER); + + Identifier targetVariable = new Identifier((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getText():null)); + targetVariable.setLine((((PatternMatchingContext)_localctx).targetVar!=null?((PatternMatchingContext)_localctx).targetVar.getLine():0)); + ((PatternMatchingContext)_localctx).patternRet = new PatternDeclaration(patternNameId, targetVariable); + _localctx.patternRet.setLine(patternLine); + + setState(146); + match(RPAR); + setState(156); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==PATTERN_MATCHING_SEPARATOR) { + { + { + setState(147); + match(PATTERN_MATCHING_SEPARATOR); + setState(148); + ((PatternMatchingContext)_localctx).c = condition(); + + _localctx.patternRet.setConditions(((PatternMatchingContext)_localctx).c.conditionRet); + + setState(150); + match(ASSIGN); + setState(151); + ((PatternMatchingContext)_localctx).e = expression(0); + + _localctx.patternRet.addReturnExp(((PatternMatchingContext)_localctx).e.expRet); + + } + } + setState(158); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(159); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MainContext extends ParserRuleContext { + public MainDeclaration mainRet; + public Token m; + public BodyContext b; + public TerminalNode DEF() { return getToken(FunctionCraftParser.DEF, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode MAIN() { return getToken(FunctionCraftParser.MAIN, 0); } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public MainContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_main; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMain(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMain(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMain(this); + else return visitor.visitChildren(this); + } + } + + public final MainContext main() throws RecognitionException { + MainContext _localctx = new MainContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_main); + try { + enterOuterAlt(_localctx, 1); + { + + ((MainContext)_localctx).mainRet = new MainDeclaration(); + + setState(162); + match(DEF); + setState(163); + ((MainContext)_localctx).m = match(MAIN); + + _localctx.mainRet.setLine((((MainContext)_localctx).m!=null?((MainContext)_localctx).m.getLine():0)); + + setState(165); + match(LPAR); + setState(166); + match(RPAR); + setState(167); + ((MainContext)_localctx).b = body(); + _localctx.mainRet.setBody(((MainContext)_localctx).b.bodyRet); + setState(169); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionArgumentsContext extends ParserRuleContext { + public ArrayList funcArgsRet; + public ExpressionContext e1; + public ExpressionContext e2; + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public FunctionArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionArguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionArguments(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionArguments(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionArgumentsContext functionArguments() throws RecognitionException { + FunctionArgumentsContext _localctx = new FunctionArgumentsContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_functionArguments); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((FunctionArgumentsContext)_localctx).funcArgsRet = new ArrayList(); + + setState(183); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(172); + ((FunctionArgumentsContext)_localctx).e1 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e1.expRet); + + setState(180); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(174); + match(COMMA); + setState(175); + ((FunctionArgumentsContext)_localctx).e2 = expression(0); + + _localctx.funcArgsRet.add(((FunctionArgumentsContext)_localctx).e2.expRet); + + } + } + setState(182); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ReturnStatementContext extends ParserRuleContext { + public ReturnStatement returnStmtRet; + public Token r; + public ExpressionContext e; + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode RETURN() { return getToken(FunctionCraftParser.RETURN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterReturnStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitReturnStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitReturnStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_returnStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((ReturnStatementContext)_localctx).returnStmtRet = new ReturnStatement(); + + setState(186); + ((ReturnStatementContext)_localctx).r = match(RETURN); + setState(190); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(187); + ((ReturnStatementContext)_localctx).e = expression(0); + + _localctx.returnStmtRet.setReturnExp(((ReturnStatementContext)_localctx).e.expRet); + + } + } + + _localctx.returnStmtRet.setLine((((ReturnStatementContext)_localctx).r!=null?((ReturnStatementContext)_localctx).r.getLine():0)); + setState(193); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IfStatementContext extends ParserRuleContext { + public IfStatement ifRet; + public Token i; + public ConditionContext c1; + public ConditionContext c2; + public LoopBodyContext b; + public LoopBodyContext b1; + public LoopBodyContext b2; + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode IF() { return getToken(FunctionCraftParser.IF, 0); } + public List loopBody() { + return getRuleContexts(LoopBodyContext.class); + } + public LoopBodyContext loopBody(int i) { + return getRuleContext(LoopBodyContext.class,i); + } + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public List ELSEIF() { return getTokens(FunctionCraftParser.ELSEIF); } + public TerminalNode ELSEIF(int i) { + return getToken(FunctionCraftParser.ELSEIF, i); + } + public TerminalNode ELSE() { return getToken(FunctionCraftParser.ELSE, 0); } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_ifStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((IfStatementContext)_localctx).ifRet = new IfStatement(); + ArrayList tempThenStmts = new ArrayList<>(); + ArrayList tempElseStmts = new ArrayList<>(); + + setState(196); + ((IfStatementContext)_localctx).i = match(IF); + + _localctx.ifRet.setLine((((IfStatementContext)_localctx).i!=null?((IfStatementContext)_localctx).i.getLine():0)); + + setState(206); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + { + setState(198); + ((IfStatementContext)_localctx).c1 = condition(); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c1.conditionRet); + } + break; + case 2: + { + setState(201); + match(LPAR); + setState(202); + ((IfStatementContext)_localctx).c2 = condition(); + setState(203); + match(RPAR); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); + } + break; + } + setState(208); + ((IfStatementContext)_localctx).b = loopBody(); + + tempThenStmts.addAll(((IfStatementContext)_localctx).b.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b.loopExps); + if(((IfStatementContext)_localctx).b.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b.loopRetStmt); + } + + setState(224); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ELSEIF) { + { + { + setState(210); + match(ELSEIF); + setState(216); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + case 1: + { + setState(211); + match(LPAR); + setState(212); + ((IfStatementContext)_localctx).c2 = condition(); + setState(213); + match(RPAR); + } + break; + case 2: + { + setState(215); + ((IfStatementContext)_localctx).c2 = condition(); + } + break; + } + + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).c2.conditionRet); + + setState(219); + ((IfStatementContext)_localctx).b1 = loopBody(); + + tempElseStmts.addAll(((IfStatementContext)_localctx).b1.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b1.loopExps); + if(((IfStatementContext)_localctx).b1.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b1.loopRetStmt); + } + + } + } + setState(226); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(231); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(227); + match(ELSE); + setState(228); + ((IfStatementContext)_localctx).b2 = loopBody(); + + tempElseStmts.addAll(((IfStatementContext)_localctx).b2.loopStmts); + _localctx.ifRet.addCondition(((IfStatementContext)_localctx).b2.loopExps); + if(((IfStatementContext)_localctx).b2.loopRetStmt != null){ + tempThenStmts.add(((IfStatementContext)_localctx).b2.loopRetStmt); + } + + } + } + + + _localctx.ifRet.setThenBody(tempThenStmts); + _localctx.ifRet.setElseBody(tempElseStmts); + + setState(234); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ConditionContext extends ParserRuleContext { + public ArrayList conditionRet; + public ExpressionContext e; + public ConditionContext c; + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List AND() { return getTokens(FunctionCraftParser.AND); } + public TerminalNode AND(int i) { + return getToken(FunctionCraftParser.AND, i); + } + public List OR() { return getTokens(FunctionCraftParser.OR); } + public TerminalNode OR(int i) { + return getToken(FunctionCraftParser.OR, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public ConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_condition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitCondition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitCondition(this); + else return visitor.visitChildren(this); + } + } + + public final ConditionContext condition() throws RecognitionException { + ConditionContext _localctx = new ConditionContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_condition); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + ((ConditionContext)_localctx).conditionRet = new ArrayList(); + + setState(257); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,17,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(237); + match(LPAR); + setState(238); + ((ConditionContext)_localctx).e = expression(0); + _localctx.conditionRet.add(((ConditionContext)_localctx).e.expRet); + setState(240); + match(RPAR); + setState(252); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(241); + _la = _input.LA(1); + if ( !(_la==AND || _la==OR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(243); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: + { + setState(242); + match(LPAR); + } + break; + } + setState(245); + ((ConditionContext)_localctx).c = condition(); + + _localctx.conditionRet.addAll(((ConditionContext)_localctx).c.conditionRet); + + setState(248); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + case 1: + { + setState(247); + match(RPAR); + } + break; + } + } + } + } + setState(254); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + } + } + } + } + setState(259); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,17,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PutsStatementContext extends ParserRuleContext { + public PutStatement putRet; + public Token p; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUTS() { return getToken(FunctionCraftParser.PUTS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public PutsStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_putsStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPutsStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPutsStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPutsStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PutsStatementContext putsStatement() throws RecognitionException { + PutsStatementContext _localctx = new PutsStatementContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_putsStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(260); + ((PutsStatementContext)_localctx).p = match(PUTS); + setState(261); + match(LPAR); + setState(262); + ((PutsStatementContext)_localctx).e = expression(0); + + ((PutsStatementContext)_localctx).putRet = new PutStatement(((PutsStatementContext)_localctx).e.expRet); + _localctx.putRet.setLine((((PutsStatementContext)_localctx).p!=null?((PutsStatementContext)_localctx).p.getLine():0)); + + setState(264); + match(RPAR); + setState(265); + match(SEMICOLLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LenStatementContext extends ParserRuleContext { + public LenStatement lenRet; + public Token l; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode LEN() { return getToken(FunctionCraftParser.LEN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public LenStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lenStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLenStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLenStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLenStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LenStatementContext lenStatement() throws RecognitionException { + LenStatementContext _localctx = new LenStatementContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_lenStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(267); + ((LenStatementContext)_localctx).l = match(LEN); + setState(268); + match(LPAR); + setState(269); + ((LenStatementContext)_localctx).e = expression(0); + + ((LenStatementContext)_localctx).lenRet = new LenStatement(((LenStatementContext)_localctx).e.expRet); + _localctx.lenRet.setLine((((LenStatementContext)_localctx).l!=null?((LenStatementContext)_localctx).l.getLine():0)); + + setState(271); + match(RPAR); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PushStatementContext extends ParserRuleContext { + public PushStatement pushRet; + public Token p; + public ExpressionContext e1; + public ExpressionContext e2; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COMMA() { return getToken(FunctionCraftParser.COMMA, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode PUSH() { return getToken(FunctionCraftParser.PUSH, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PushStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pushStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPushStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPushStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPushStatement(this); + else return visitor.visitChildren(this); + } + } + + public final PushStatementContext pushStatement() throws RecognitionException { + PushStatementContext _localctx = new PushStatementContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_pushStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(273); + ((PushStatementContext)_localctx).p = match(PUSH); + setState(274); + match(LPAR); + setState(275); + ((PushStatementContext)_localctx).e1 = expression(0); + setState(276); + match(COMMA); + setState(277); + ((PushStatementContext)_localctx).e2 = expression(0); + setState(278); + match(RPAR); + setState(279); + match(SEMICOLLON); + + ((PushStatementContext)_localctx).pushRet = new PushStatement(((PushStatementContext)_localctx).e1.expRet, ((PushStatementContext)_localctx).e2.expRet); + _localctx.pushRet.setLine((((PushStatementContext)_localctx).p!=null?((PushStatementContext)_localctx).p.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopDoStatementContext extends ParserRuleContext { + public LoopDoStatement loopDoRet; + public Token l1; + public LoopBodyContext l2; + public TerminalNode DO() { return getToken(FunctionCraftParser.DO, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode LOOP() { return getToken(FunctionCraftParser.LOOP, 0); } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public LoopDoStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopDoStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopDoStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopDoStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopDoStatement(this); + else return visitor.visitChildren(this); + } + } + + public final LoopDoStatementContext loopDoStatement() throws RecognitionException { + LoopDoStatementContext _localctx = new LoopDoStatementContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_loopDoStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(282); + ((LoopDoStatementContext)_localctx).l1 = match(LOOP); + setState(283); + match(DO); + setState(284); + ((LoopDoStatementContext)_localctx).l2 = loopBody(); + + ((LoopDoStatementContext)_localctx).loopDoRet = new LoopDoStatement(((LoopDoStatementContext)_localctx).l2.loopStmts, ((LoopDoStatementContext)_localctx).l2.loopExps, ((LoopDoStatementContext)_localctx).l2.loopRetStmt); + _localctx.loopDoRet.setLine((((LoopDoStatementContext)_localctx).l1!=null?((LoopDoStatementContext)_localctx).l1.getLine():0)); + + setState(286); + match(END); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LoopBodyContext extends ParserRuleContext { + public ArrayList loopStmts; + public ArrayList loopExps; + public ReturnStatement loopRetStmt; + public StatementContext s; + public ConditionContext c1; + public ConditionContext c2; + public ReturnStatementContext r; + public List BREAK() { return getTokens(FunctionCraftParser.BREAK); } + public TerminalNode BREAK(int i) { + return getToken(FunctionCraftParser.BREAK, i); + } + public List SEMICOLLON() { return getTokens(FunctionCraftParser.SEMICOLLON); } + public TerminalNode SEMICOLLON(int i) { + return getToken(FunctionCraftParser.SEMICOLLON, i); + } + public List NEXT() { return getTokens(FunctionCraftParser.NEXT); } + public TerminalNode NEXT(int i) { + return getToken(FunctionCraftParser.NEXT, i); + } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public List IF() { return getTokens(FunctionCraftParser.IF); } + public TerminalNode IF(int i) { + return getToken(FunctionCraftParser.IF, i); + } + public List condition() { + return getRuleContexts(ConditionContext.class); + } + public ConditionContext condition(int i) { + return getRuleContext(ConditionContext.class,i); + } + public LoopBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLoopBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLoopBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLoopBody(this); + else return visitor.visitChildren(this); + } + } + + public final LoopBodyContext loopBody() throws RecognitionException { + LoopBodyContext _localctx = new LoopBodyContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_loopBody); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((LoopBodyContext)_localctx).loopStmts = new ArrayList(); + ((LoopBodyContext)_localctx).loopExps = new ArrayList(); + ((LoopBodyContext)_localctx).loopRetStmt = null; + + setState(310); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150098203556918928L) != 0)) { + { + setState(308); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PUTS: + case PUSH: + case LEN: + case IF: + case METHOD: + case LOOP: + case FOR: + case CHOP: + case CHOMP: + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + { + setState(289); + ((LoopBodyContext)_localctx).s = statement(); + _localctx.loopStmts.add(((LoopBodyContext)_localctx).s.stmtRet); + } + break; + case BREAK: + { + setState(292); + match(BREAK); + setState(297); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(293); + match(IF); + setState(294); + ((LoopBodyContext)_localctx).c1 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c1.conditionRet); + } + } + + setState(299); + match(SEMICOLLON); + } + break; + case NEXT: + { + setState(300); + match(NEXT); + setState(305); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IF) { + { + setState(301); + match(IF); + setState(302); + ((LoopBodyContext)_localctx).c2 = condition(); + _localctx.loopExps.addAll(((LoopBodyContext)_localctx).c2.conditionRet); + } + } + + setState(307); + match(SEMICOLLON); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(312); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(316); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(313); + ((LoopBodyContext)_localctx).r = returnStatement(); + ((LoopBodyContext)_localctx).loopRetStmt = ((LoopBodyContext)_localctx).r.returnStmtRet;_localctx.loopRetStmt.setLine(((LoopBodyContext)_localctx).r.returnStmtRet.getLine()); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForStatementContext extends ParserRuleContext { + public ForStatement forStRet; + public Token f; + public Token id; + public RangeContext r; + public LoopBodyContext l; + public TerminalNode IN() { return getToken(FunctionCraftParser.IN, 0); } + public TerminalNode END() { return getToken(FunctionCraftParser.END, 0); } + public TerminalNode FOR() { return getToken(FunctionCraftParser.FOR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public LoopBodyContext loopBody() { + return getRuleContext(LoopBodyContext.class,0); + } + public ForStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterForStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitForStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitForStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ForStatementContext forStatement() throws RecognitionException { + ForStatementContext _localctx = new ForStatementContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_forStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(318); + ((ForStatementContext)_localctx).f = match(FOR); + setState(319); + ((ForStatementContext)_localctx).id = match(IDENTIFIER); + setState(320); + match(IN); + setState(321); + ((ForStatementContext)_localctx).r = range(); + setState(322); + ((ForStatementContext)_localctx).l = loopBody(); + setState(323); + match(END); + + ((ForStatementContext)_localctx).forStRet = new ForStatement(new Identifier((((ForStatementContext)_localctx).id!=null?((ForStatementContext)_localctx).id.getText():null)), + ((ForStatementContext)_localctx).r.rangeRet, ((ForStatementContext)_localctx).l.loopExps, ((ForStatementContext)_localctx).l.loopStmts, + ((ForStatementContext)_localctx).l.loopRetStmt); + _localctx.forStRet.setLine((((ForStatementContext)_localctx).f!=null?((ForStatementContext)_localctx).f.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RangeContext extends ParserRuleContext { + public ArrayList rangeRet; + public ExpressionContext e1; + public ExpressionContext e2; + public ExpressionContext e3; + public ExpressionContext e4; + public Token id; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode DOUBLEDOT() { return getToken(FunctionCraftParser.DOUBLEDOT, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_range; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRange(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRange(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRange(this); + else return visitor.visitChildren(this); + } + } + + public final RangeContext range() throws RecognitionException { + RangeContext _localctx = new RangeContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_range); + int _la; + try { + setState(353); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAR: + enterOuterAlt(_localctx, 1); + { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + + { + setState(327); + match(LPAR); + setState(328); + ((RangeContext)_localctx).e1 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e1.expRet); + + setState(330); + match(DOUBLEDOT); + setState(331); + ((RangeContext)_localctx).e2 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e2.expRet); + + setState(333); + match(RPAR); + } + } + break; + case LBRACK: + enterOuterAlt(_localctx, 2); + { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + + { + setState(336); + match(LBRACK); + { + setState(337); + ((RangeContext)_localctx).e3 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e3.expRet); + + setState(345); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(339); + match(COMMA); + setState(340); + ((RangeContext)_localctx).e4 = expression(0); + + _localctx.rangeRet.add(((RangeContext)_localctx).e4.expRet); + + } + } + setState(347); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + setState(348); + match(RBRACK); + } + } + break; + case IDENTIFIER: + enterOuterAlt(_localctx, 3); + { + + ((RangeContext)_localctx).rangeRet = new ArrayList(); + + setState(351); + ((RangeContext)_localctx).id = match(IDENTIFIER); + + Identifier id_ = new Identifier((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getText():null)); + id_.setLine((((RangeContext)_localctx).id!=null?((RangeContext)_localctx).id.getLine():0)); + _localctx.rangeRet.add(id_); + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FilterStatementContext extends ParserRuleContext { + public FilterStatement filterStatementRet; + public Token brack; + public ExpressionContext e1; + public Token id; + public RangeContext r; + public ExpressionContext e2; + public ExpressionContext e3; + public TerminalNode SEPARATOR() { return getToken(FunctionCraftParser.SEPARATOR, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public List COMMA() { return getTokens(FunctionCraftParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(FunctionCraftParser.COMMA, i); + } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public RangeContext range() { + return getRuleContext(RangeContext.class,0); + } + public FilterStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_filterStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFilterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFilterStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFilterStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FilterStatementContext filterStatement() throws RecognitionException { + FilterStatementContext _localctx = new FilterStatementContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_filterStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ArrayList conditionExps = new ArrayList(); + + setState(356); + ((FilterStatementContext)_localctx).brack = match(LBRACK); + setState(357); + ((FilterStatementContext)_localctx).e1 = expression(0); + setState(358); + match(SEPARATOR); + setState(359); + ((FilterStatementContext)_localctx).id = match(IDENTIFIER); + setState(360); + match(ARROW); + setState(361); + ((FilterStatementContext)_localctx).r = range(); + setState(362); + match(COMMA); + setState(363); + ((FilterStatementContext)_localctx).e2 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e2.expRet); + + setState(371); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(365); + match(COMMA); + setState(366); + ((FilterStatementContext)_localctx).e3 = expression(0); + + conditionExps.add(((FilterStatementContext)_localctx).e3.expRet); + + } + } + setState(373); + _errHandler.sync(this); + _la = _input.LA(1); + } + + Identifier id_ = new Identifier((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getText():null)); + id_.setLine((((FilterStatementContext)_localctx).id!=null?((FilterStatementContext)_localctx).id.getLine():0)); + ((FilterStatementContext)_localctx).filterStatementRet = new FilterStatement(id_, ((FilterStatementContext)_localctx).e1.expRet, + conditionExps, ((FilterStatementContext)_localctx).r.rangeRet); + _localctx.filterStatementRet.setLine((((FilterStatementContext)_localctx).brack!=null?((FilterStatementContext)_localctx).brack.getLine():0)); + + setState(375); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MatchPatternStatementContext extends ParserRuleContext { + public MatchPatternStatement matchPatRet; + public Token id; + public Token m; + public ExpressionContext e; + public TerminalNode DOT() { return getToken(FunctionCraftParser.DOT, 0); } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public TerminalNode MATCH() { return getToken(FunctionCraftParser.MATCH, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public MatchPatternStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_matchPatternStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMatchPatternStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMatchPatternStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMatchPatternStatement(this); + else return visitor.visitChildren(this); + } + } + + public final MatchPatternStatementContext matchPatternStatement() throws RecognitionException { + MatchPatternStatementContext _localctx = new MatchPatternStatementContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_matchPatternStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(377); + ((MatchPatternStatementContext)_localctx).id = match(IDENTIFIER); + setState(378); + match(DOT); + setState(379); + ((MatchPatternStatementContext)_localctx).m = match(MATCH); + setState(380); + match(LPAR); + setState(381); + ((MatchPatternStatementContext)_localctx).e = expression(0); + setState(382); + match(RPAR); + + Identifier id_ = new Identifier((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getText():null)); + id_.setLine((((MatchPatternStatementContext)_localctx).id!=null?((MatchPatternStatementContext)_localctx).id.getLine():0)); + ((MatchPatternStatementContext)_localctx).matchPatRet = new MatchPatternStatement(id_, ((MatchPatternStatementContext)_localctx).e.expRet); + _localctx.matchPatRet.setLine((((MatchPatternStatementContext)_localctx).m!=null?((MatchPatternStatementContext)_localctx).m.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChopStatementContext extends ParserRuleContext { + public ChopStatement chopRet; + public Token c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOP() { return getToken(FunctionCraftParser.CHOP, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ChopStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chopStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChopStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChopStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChopStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChopStatementContext chopStatement() throws RecognitionException { + ChopStatementContext _localctx = new ChopStatementContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_chopStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(385); + ((ChopStatementContext)_localctx).c = match(CHOP); + setState(386); + match(LPAR); + setState(387); + ((ChopStatementContext)_localctx).e = expression(0); + setState(388); + match(RPAR); + + ((ChopStatementContext)_localctx).chopRet = new ChopStatement(((ChopStatementContext)_localctx).e.expRet); + _localctx.chopRet.setLine((((ChopStatementContext)_localctx).c!=null?((ChopStatementContext)_localctx).c.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ChompStatementContext extends ParserRuleContext { + public ChompStatement chompRet; + public Token c; + public ExpressionContext e; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode CHOMP() { return getToken(FunctionCraftParser.CHOMP, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ChompStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_chompStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterChompStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitChompStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitChompStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ChompStatementContext chompStatement() throws RecognitionException { + ChompStatementContext _localctx = new ChompStatementContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_chompStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(391); + ((ChompStatementContext)_localctx).c = match(CHOMP); + setState(392); + match(LPAR); + setState(393); + ((ChompStatementContext)_localctx).e = expression(0); + setState(394); + match(RPAR); + + ((ChompStatementContext)_localctx).chompRet = new ChompStatement(((ChompStatementContext)_localctx).e.expRet); + _localctx.chompRet.setLine((((ChompStatementContext)_localctx).c!=null?((ChompStatementContext)_localctx).c.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignmentContext extends ParserRuleContext { + public AssignStatement assignRet; + public Token id; + public AccessListContext a; + public Token as; + public Token pl; + public Token mi; + public Token di; + public Token mu; + public Token mo; + public ExpressionContext e; + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode ASSIGN() { return getToken(FunctionCraftParser.ASSIGN, 0); } + public TerminalNode PLUS_ASSIGN() { return getToken(FunctionCraftParser.PLUS_ASSIGN, 0); } + public TerminalNode MINUS_ASSIGN() { return getToken(FunctionCraftParser.MINUS_ASSIGN, 0); } + public TerminalNode DIVIDE_ASSIGN() { return getToken(FunctionCraftParser.DIVIDE_ASSIGN, 0); } + public TerminalNode MULT_ASSIGN() { return getToken(FunctionCraftParser.MULT_ASSIGN, 0); } + public TerminalNode MOD_ASSIGN() { return getToken(FunctionCraftParser.MOD_ASSIGN, 0); } + public AccessListContext accessList() { + return getRuleContext(AccessListContext.class,0); + } + public AssignmentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAssignment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAssignment(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAssignment(this); + else return visitor.visitChildren(this); + } + } + + public final AssignmentContext assignment() throws RecognitionException { + AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_assignment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + boolean access = false; + int line; + AssignOperator op; + + setState(398); + ((AssignmentContext)_localctx).id = match(IDENTIFIER); + setState(402); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LBRACK) { + { + setState(399); + ((AssignmentContext)_localctx).a = accessList(); + access = true; + } + } + + setState(416); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ASSIGN: + { + setState(404); + ((AssignmentContext)_localctx).as = match(ASSIGN); + op = AssignOperator.ASSIGN;line = (((AssignmentContext)_localctx).as!=null?((AssignmentContext)_localctx).as.getLine():0); + } + break; + case PLUS_ASSIGN: + { + setState(406); + ((AssignmentContext)_localctx).pl = match(PLUS_ASSIGN); + op = AssignOperator.PLUS_ASSIGN;line = (((AssignmentContext)_localctx).pl!=null?((AssignmentContext)_localctx).pl.getLine():0); + } + break; + case MINUS_ASSIGN: + { + setState(408); + ((AssignmentContext)_localctx).mi = match(MINUS_ASSIGN); + op = AssignOperator.MINUS_ASSIGN;line = (((AssignmentContext)_localctx).mi!=null?((AssignmentContext)_localctx).mi.getLine():0); + } + break; + case DIVIDE_ASSIGN: + { + setState(410); + ((AssignmentContext)_localctx).di = match(DIVIDE_ASSIGN); + op = AssignOperator.DIVIDE_ASSIGN;line = (((AssignmentContext)_localctx).di!=null?((AssignmentContext)_localctx).di.getLine():0); + } + break; + case MULT_ASSIGN: + { + setState(412); + ((AssignmentContext)_localctx).mu = match(MULT_ASSIGN); + op = AssignOperator.MULT_ASSIGN;line = (((AssignmentContext)_localctx).mu!=null?((AssignmentContext)_localctx).mu.getLine():0); + } + break; + case MOD_ASSIGN: + { + setState(414); + ((AssignmentContext)_localctx).mo = match(MOD_ASSIGN); + op = AssignOperator.MOD_ASSIGN;line = (((AssignmentContext)_localctx).mo!=null?((AssignmentContext)_localctx).mo.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(418); + ((AssignmentContext)_localctx).e = expression(0); + setState(419); + match(SEMICOLLON); + + Identifier id_ = new Identifier((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getText():null)); + id_.setLine((((AssignmentContext)_localctx).id!=null?((AssignmentContext)_localctx).id.getLine():0)); + ((AssignmentContext)_localctx).assignRet = new AssignStatement(access, id_, ((AssignmentContext)_localctx).e.expRet, op); + if(access){ + _localctx.assignRet.setAccessListExpression(((AssignmentContext)_localctx).a.accessListExp); + } + _localctx.assignRet.setLine(line); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessListContext extends ParserRuleContext { + public Expression accessListExp; + public ExpressionContext e; + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AccessListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessList(this); + else return visitor.visitChildren(this); + } + } + + public final AccessListContext accessList() throws RecognitionException { + AccessListContext _localctx = new AccessListContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_accessList); + try { + enterOuterAlt(_localctx, 1); + { + setState(422); + match(LBRACK); + setState(423); + ((AccessListContext)_localctx).e = expression(0); + ((AccessListContext)_localctx).accessListExp = ((AccessListContext)_localctx).e.expRet; + setState(425); + match(RBRACK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementContext extends ParserRuleContext { + public Statement stmtRet; + public IfStatementContext i; + public LoopDoStatementContext loop; + public ForStatementContext f; + public PutsStatementContext puts; + public PushStatementContext push; + public ExpressionContext e; + public AssignmentContext as; + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public LoopDoStatementContext loopDoStatement() { + return getRuleContext(LoopDoStatementContext.class,0); + } + public ForStatementContext forStatement() { + return getRuleContext(ForStatementContext.class,0); + } + public PutsStatementContext putsStatement() { + return getRuleContext(PutsStatementContext.class,0); + } + public PushStatementContext pushStatement() { + return getRuleContext(PushStatementContext.class,0); + } + public TerminalNode SEMICOLLON() { return getToken(FunctionCraftParser.SEMICOLLON, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AssignmentContext assignment() { + return getRuleContext(AssignmentContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitStatement(this); + else return visitor.visitChildren(this); + } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_statement); + try { + setState(450); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(427); + ((StatementContext)_localctx).i = ifStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).i.ifRet; + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(430); + ((StatementContext)_localctx).loop = loopDoStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).loop.loopDoRet; + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(433); + ((StatementContext)_localctx).f = forStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).f.forStRet; + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(436); + ((StatementContext)_localctx).puts = putsStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).puts.putRet; + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(439); + ((StatementContext)_localctx).push = pushStatement(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).push.pushRet; + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(442); + ((StatementContext)_localctx).e = expression(0); + ((StatementContext)_localctx).stmtRet = new ExpressionStatement(((StatementContext)_localctx).e.expRet); + + ExpressionStatement expStmt = new ExpressionStatement(((StatementContext)_localctx).e.expRet); + ((StatementContext)_localctx).stmtRet = expStmt; + _localctx.stmtRet.setLine(((StatementContext)_localctx).e.expRet.getLine()); + + setState(445); + match(SEMICOLLON); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(447); + ((StatementContext)_localctx).as = assignment(); + ((StatementContext)_localctx).stmtRet = ((StatementContext)_localctx).as.assignRet; + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BodyContext extends ParserRuleContext { + public ArrayList bodyRet; + public StatementContext s; + public ReturnStatementContext r; + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public BodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_body; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBody(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBody(this); + else return visitor.visitChildren(this); + } + } + + public final BodyContext body() throws RecognitionException { + BodyContext _localctx = new BodyContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_body); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + + ((BodyContext)_localctx).bodyRet = new ArrayList(); + + setState(458); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091802256L) != 0)) { + { + { + setState(453); + ((BodyContext)_localctx).s = statement(); + _localctx.bodyRet.add(((BodyContext)_localctx).s.stmtRet); + } + } + setState(460); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(464); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==RETURN) { + { + setState(461); + ((BodyContext)_localctx).r = returnStatement(); + _localctx.bodyRet.add(((BodyContext)_localctx).r.returnStmtRet); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends ParserRuleContext { + public Expression expRet; + public ExpressionContext e1; + public EqaulityExpressionContext e3; + public Token a; + public EqaulityExpressionContext e2; + public EqaulityExpressionContext eqaulityExpression() { + return getRuleContext(EqaulityExpressionContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode APPEND() { return getToken(FunctionCraftParser.APPEND, 0); } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitExpression(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 48; + enterRecursionRule(_localctx, 48, RULE_expression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(467); + ((ExpressionContext)_localctx).e3 = eqaulityExpression(); + ((ExpressionContext)_localctx).expRet = ((ExpressionContext)_localctx).e3.expRet; + } + _ctx.stop = _input.LT(-1); + setState(477); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExpressionContext(_parentctx, _parentState); + _localctx.e1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(470); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(471); + ((ExpressionContext)_localctx).a = match(APPEND); + setState(472); + ((ExpressionContext)_localctx).e2 = eqaulityExpression(); + + if(!(((ExpressionContext)_localctx).e1.expRet instanceof AppendExpression)){ + ((ExpressionContext)_localctx).expRet = new AppendExpression(((ExpressionContext)_localctx).e1.expRet); + _localctx.expRet.setLine((((ExpressionContext)_localctx).a!=null?((ExpressionContext)_localctx).a.getLine():0)); + } + else{ + AppendExpression appendExp = (AppendExpression) ((ExpressionContext)_localctx).e1.expRet; + appendExp.addAppendedExpression(((ExpressionContext)_localctx).e2.expRet); + ((ExpressionContext)_localctx).expRet = appendExp; + } + + } + } + } + setState(479); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,31,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class EqaulityExpressionContext extends ParserRuleContext { + public Expression expRet; + public RelationalExpressionContext e1; + public Token op1; + public Token op2; + public RelationalExpressionContext r1; + public RelationalExpressionContext r2; + public List relationalExpression() { + return getRuleContexts(RelationalExpressionContext.class); + } + public RelationalExpressionContext relationalExpression(int i) { + return getRuleContext(RelationalExpressionContext.class,i); + } + public TerminalNode EQUAL() { return getToken(FunctionCraftParser.EQUAL, 0); } + public TerminalNode NOT_EQUAL() { return getToken(FunctionCraftParser.NOT_EQUAL, 0); } + public EqaulityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_eqaulityExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterEqaulityExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitEqaulityExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitEqaulityExpression(this); + else return visitor.visitChildren(this); + } + } + + public final EqaulityExpressionContext eqaulityExpression() throws RecognitionException { + EqaulityExpressionContext _localctx = new EqaulityExpressionContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_eqaulityExpression); + try { + setState(494); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(480); + ((EqaulityExpressionContext)_localctx).e1 = relationalExpression(0); + + BinaryOperator op; + int line; + + setState(486); + _errHandler.sync(this); + switch (_input.LA(1)) { + case EQUAL: + { + setState(482); + ((EqaulityExpressionContext)_localctx).op1 = match(EQUAL); + op = BinaryOperator.EQUAL;line = (((EqaulityExpressionContext)_localctx).op1!=null?((EqaulityExpressionContext)_localctx).op1.getLine():0); + } + break; + case NOT_EQUAL: + { + setState(484); + ((EqaulityExpressionContext)_localctx).op2 = match(NOT_EQUAL); + op = BinaryOperator.NOT_EQUAL;line = (((EqaulityExpressionContext)_localctx).op2!=null?((EqaulityExpressionContext)_localctx).op2.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(488); + ((EqaulityExpressionContext)_localctx).r1 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = new BinaryExpression(((EqaulityExpressionContext)_localctx).e1.expRet, ((EqaulityExpressionContext)_localctx).r1.expRet, op);_localctx.expRet.setLine(line); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(491); + ((EqaulityExpressionContext)_localctx).r2 = relationalExpression(0); + ((EqaulityExpressionContext)_localctx).expRet = ((EqaulityExpressionContext)_localctx).r2.expRet; + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class RelationalExpressionContext extends ParserRuleContext { + public Expression expRet; + public RelationalExpressionContext r1; + public AdditiveExpressionContext a2; + public Token gt; + public Token lt; + public Token let; + public Token get; + public AdditiveExpressionContext a1; + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public RelationalExpressionContext relationalExpression() { + return getRuleContext(RelationalExpressionContext.class,0); + } + public TerminalNode GREATER_THAN() { return getToken(FunctionCraftParser.GREATER_THAN, 0); } + public TerminalNode LESS_THAN() { return getToken(FunctionCraftParser.LESS_THAN, 0); } + public TerminalNode LESS_EQUAL_THAN() { return getToken(FunctionCraftParser.LESS_EQUAL_THAN, 0); } + public TerminalNode GREATER_EQUAL_THAN() { return getToken(FunctionCraftParser.GREATER_EQUAL_THAN, 0); } + public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relationalExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterRelationalExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitRelationalExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitRelationalExpression(this); + else return visitor.visitChildren(this); + } + } + + public final RelationalExpressionContext relationalExpression() throws RecognitionException { + return relationalExpression(0); + } + + private RelationalExpressionContext relationalExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, _parentState); + RelationalExpressionContext _prevctx = _localctx; + int _startState = 52; + enterRecursionRule(_localctx, 52, RULE_relationalExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(497); + ((RelationalExpressionContext)_localctx).a2 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = ((RelationalExpressionContext)_localctx).a2.expRet; + } + _ctx.stop = _input.LT(-1); + setState(517); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new RelationalExpressionContext(_parentctx, _parentState); + _localctx.r1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_relationalExpression); + setState(500); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + int line; + + setState(510); + _errHandler.sync(this); + switch (_input.LA(1)) { + case GREATER_THAN: + { + setState(502); + ((RelationalExpressionContext)_localctx).gt = match(GREATER_THAN); + op = BinaryOperator.GREATER_THAN;line = (((RelationalExpressionContext)_localctx).gt!=null?((RelationalExpressionContext)_localctx).gt.getLine():0); + } + break; + case LESS_THAN: + { + setState(504); + ((RelationalExpressionContext)_localctx).lt = match(LESS_THAN); + op = BinaryOperator.LESS_THAN;line = (((RelationalExpressionContext)_localctx).lt!=null?((RelationalExpressionContext)_localctx).lt.getLine():0); + } + break; + case LESS_EQUAL_THAN: + { + setState(506); + ((RelationalExpressionContext)_localctx).let = match(LESS_EQUAL_THAN); + op = BinaryOperator.LESS_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).let!=null?((RelationalExpressionContext)_localctx).let.getLine():0); + } + break; + case GREATER_EQUAL_THAN: + { + setState(508); + ((RelationalExpressionContext)_localctx).get = match(GREATER_EQUAL_THAN); + op = BinaryOperator.GREATER_EQUAL_THAN;line = (((RelationalExpressionContext)_localctx).get!=null?((RelationalExpressionContext)_localctx).get.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(512); + ((RelationalExpressionContext)_localctx).a1 = additiveExpression(0); + ((RelationalExpressionContext)_localctx).expRet = new BinaryExpression(((RelationalExpressionContext)_localctx).r1.expRet, ((RelationalExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); + } + } + } + setState(519); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,35,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AdditiveExpressionContext extends ParserRuleContext { + public Expression expRet; + public AdditiveExpressionContext a1; + public MultiplicativeExpressionContext m2; + public Token p; + public Token m; + public MultiplicativeExpressionContext m1; + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public AdditiveExpressionContext additiveExpression() { + return getRuleContext(AdditiveExpressionContext.class,0); + } + public TerminalNode PLUS() { return getToken(FunctionCraftParser.PLUS, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAdditiveExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAdditiveExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAdditiveExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + return additiveExpression(0); + } + + private AdditiveExpressionContext additiveExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, _parentState); + AdditiveExpressionContext _prevctx = _localctx; + int _startState = 54; + enterRecursionRule(_localctx, 54, RULE_additiveExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(521); + ((AdditiveExpressionContext)_localctx).m2 = multiplicativeExpression(0); + + ((AdditiveExpressionContext)_localctx).expRet = ((AdditiveExpressionContext)_localctx).m2.expRet; + + } + _ctx.stop = _input.LT(-1); + setState(537); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new AdditiveExpressionContext(_parentctx, _parentState); + _localctx.a1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_additiveExpression); + setState(524); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + int line; + + setState(530); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PLUS: + { + setState(526); + ((AdditiveExpressionContext)_localctx).p = match(PLUS); + op = BinaryOperator.PLUS;line = (((AdditiveExpressionContext)_localctx).p!=null?((AdditiveExpressionContext)_localctx).p.getLine():0); + } + break; + case MINUS: + { + setState(528); + ((AdditiveExpressionContext)_localctx).m = match(MINUS); + op = BinaryOperator.MINUS;line = (((AdditiveExpressionContext)_localctx).m!=null?((AdditiveExpressionContext)_localctx).m.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(532); + ((AdditiveExpressionContext)_localctx).m1 = multiplicativeExpression(0); + ((AdditiveExpressionContext)_localctx).expRet = new BinaryExpression(((AdditiveExpressionContext)_localctx).a1.expRet, ((AdditiveExpressionContext)_localctx).m1.expRet, op);_localctx.expRet.setLine(line); + } + } + } + setState(539); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MultiplicativeExpressionContext extends ParserRuleContext { + public Expression expRet; + public MultiplicativeExpressionContext m1; + public PreUnaryExpressionContext p2; + public Token m; + public Token d; + public PreUnaryExpressionContext p1; + public PreUnaryExpressionContext preUnaryExpression() { + return getRuleContext(PreUnaryExpressionContext.class,0); + } + public MultiplicativeExpressionContext multiplicativeExpression() { + return getRuleContext(MultiplicativeExpressionContext.class,0); + } + public TerminalNode MULT() { return getToken(FunctionCraftParser.MULT, 0); } + public TerminalNode DIVIDE() { return getToken(FunctionCraftParser.DIVIDE, 0); } + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterMultiplicativeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitMultiplicativeExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitMultiplicativeExpression(this); + else return visitor.visitChildren(this); + } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + return multiplicativeExpression(0); + } + + private MultiplicativeExpressionContext multiplicativeExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, _parentState); + MultiplicativeExpressionContext _prevctx = _localctx; + int _startState = 56; + enterRecursionRule(_localctx, 56, RULE_multiplicativeExpression, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(541); + ((MultiplicativeExpressionContext)_localctx).p2 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = ((MultiplicativeExpressionContext)_localctx).p2.expRet; + } + _ctx.stop = _input.LT(-1); + setState(557); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new MultiplicativeExpressionContext(_parentctx, _parentState); + _localctx.m1 = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_multiplicativeExpression); + setState(544); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + + BinaryOperator op; + int line; + + setState(550); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MULT: + { + setState(546); + ((MultiplicativeExpressionContext)_localctx).m = match(MULT); + op = BinaryOperator.MULT;line = (((MultiplicativeExpressionContext)_localctx).m!=null?((MultiplicativeExpressionContext)_localctx).m.getLine():0); + } + break; + case DIVIDE: + { + setState(548); + ((MultiplicativeExpressionContext)_localctx).d = match(DIVIDE); + op = BinaryOperator.DIVIDE;line = (((MultiplicativeExpressionContext)_localctx).d!=null?((MultiplicativeExpressionContext)_localctx).d.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(552); + ((MultiplicativeExpressionContext)_localctx).p1 = preUnaryExpression(); + ((MultiplicativeExpressionContext)_localctx).expRet = new BinaryExpression(((MultiplicativeExpressionContext)_localctx).m1.expRet, ((MultiplicativeExpressionContext)_localctx).p1.expRet, op);_localctx.expRet.setLine(line); + } + } + } + setState(559); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PreUnaryExpressionContext extends ParserRuleContext { + public Expression expRet; + public Token n; + public Token m; + public Token i; + public Token d; + public AccessExpressionContext a1; + public AccessExpressionContext a2; + public AccessExpressionContext accessExpression() { + return getRuleContext(AccessExpressionContext.class,0); + } + public TerminalNode NOT() { return getToken(FunctionCraftParser.NOT, 0); } + public TerminalNode MINUS() { return getToken(FunctionCraftParser.MINUS, 0); } + public TerminalNode INCREMENT() { return getToken(FunctionCraftParser.INCREMENT, 0); } + public TerminalNode DECREMENT() { return getToken(FunctionCraftParser.DECREMENT, 0); } + public PreUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_preUnaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterPreUnaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitPreUnaryExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitPreUnaryExpression(this); + else return visitor.visitChildren(this); + } + } + + public final PreUnaryExpressionContext preUnaryExpression() throws RecognitionException { + PreUnaryExpressionContext _localctx = new PreUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_preUnaryExpression); + try { + setState(577); + _errHandler.sync(this); + switch (_input.LA(1)) { + case MINUS: + case NOT: + case INCREMENT: + case DECREMENT: + enterOuterAlt(_localctx, 1); + { + + UnaryOperator op; + int line; + + setState(569); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NOT: + { + setState(561); + ((PreUnaryExpressionContext)_localctx).n = match(NOT); + op = UnaryOperator.NOT;line = (((PreUnaryExpressionContext)_localctx).n!=null?((PreUnaryExpressionContext)_localctx).n.getLine():0); + } + break; + case MINUS: + { + setState(563); + ((PreUnaryExpressionContext)_localctx).m = match(MINUS); + op = UnaryOperator.MINUS;line = (((PreUnaryExpressionContext)_localctx).m!=null?((PreUnaryExpressionContext)_localctx).m.getLine():0); + } + break; + case INCREMENT: + { + setState(565); + ((PreUnaryExpressionContext)_localctx).i = match(INCREMENT); + op = UnaryOperator.INC;line = (((PreUnaryExpressionContext)_localctx).i!=null?((PreUnaryExpressionContext)_localctx).i.getLine():0); + } + break; + case DECREMENT: + { + setState(567); + ((PreUnaryExpressionContext)_localctx).d = match(DECREMENT); + op = UnaryOperator.DEC;line = (((PreUnaryExpressionContext)_localctx).d!=null?((PreUnaryExpressionContext)_localctx).d.getLine():0); + } + break; + default: + throw new NoViableAltException(this); + } + setState(571); + ((PreUnaryExpressionContext)_localctx).a1 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = new UnaryExpression(((PreUnaryExpressionContext)_localctx).a1.expRet, op);_localctx.expRet.setLine(line); + } + break; + case LEN: + case METHOD: + case CHOP: + case CHOMP: + case TRUE: + case FALSE: + case ARROW: + case LPAR: + case LBRACK: + case INT_VALUE: + case FLOAT_VALUE: + case IDENTIFIER: + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(574); + ((PreUnaryExpressionContext)_localctx).a2 = accessExpression(); + ((PreUnaryExpressionContext)_localctx).expRet = ((PreUnaryExpressionContext)_localctx).a2.expRet; + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AccessExpressionContext extends ParserRuleContext { + public Expression expRet; + public OtherExpressionContext o; + public FunctionArgumentsContext f; + public AccessListContext a; + public OtherExpressionContext otherExpression() { + return getRuleContext(OtherExpressionContext.class,0); + } + public List LPAR() { return getTokens(FunctionCraftParser.LPAR); } + public TerminalNode LPAR(int i) { + return getToken(FunctionCraftParser.LPAR, i); + } + public List RPAR() { return getTokens(FunctionCraftParser.RPAR); } + public TerminalNode RPAR(int i) { + return getToken(FunctionCraftParser.RPAR, i); + } + public List functionArguments() { + return getRuleContexts(FunctionArgumentsContext.class); + } + public FunctionArgumentsContext functionArguments(int i) { + return getRuleContext(FunctionArgumentsContext.class,i); + } + public List accessList() { + return getRuleContexts(AccessListContext.class); + } + public AccessListContext accessList(int i) { + return getRuleContext(AccessListContext.class,i); + } + public AccessExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterAccessExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitAccessExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitAccessExpression(this); + else return visitor.visitChildren(this); + } + } + + public final AccessExpressionContext accessExpression() throws RecognitionException { + AccessExpressionContext _localctx = new AccessExpressionContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_accessExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + + boolean isAccessExpression = false; + boolean isMultiDimentional = false; + ArrayList args = new ArrayList(); + ArrayList dimentions = new ArrayList(); + + setState(580); + ((AccessExpressionContext)_localctx).o = otherExpression(); + setState(588); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(581); + match(LPAR); + setState(582); + ((AccessExpressionContext)_localctx).f = functionArguments(); + + isAccessExpression = true; + args.addAll(((AccessExpressionContext)_localctx).f.funcArgsRet); + + setState(584); + match(RPAR); + } + } + } + setState(590); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,42,_ctx); + } + setState(596); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(591); + ((AccessExpressionContext)_localctx).a = accessList(); + + isMultiDimentional = true; + dimentions.add(((AccessExpressionContext)_localctx).a.accessListExp); + + } + } + } + setState(598); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } + + if(!isAccessExpression){ + System.out.println("here") + ((AccessExpressionContext)_localctx).expRet = ((AccessExpressionContext)_localctx).o.expRet; + } + else{ + AccessExpression accessExp = new AccessExpression(((AccessExpressionContext)_localctx).o.expRet, args); + accessExp.setIsFunctionCall(isAccessExpression); + if(isMultiDimentional){ + + accessExp.setDimentionalAccess(dimentions); + } + ((AccessExpressionContext)_localctx).expRet = accessExp; + _localctx.expRet.setLine(((AccessExpressionContext)_localctx).o.expRet.getLine()); + + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OtherExpressionContext extends ParserRuleContext { + public Expression expRet; + public ValuesContext v; + public Token id; + public LambdaFunctionContext lambda; + public ChopStatementContext chop; + public ChompStatementContext chomp; + public MatchPatternStatementContext match; + public FilterStatementContext f; + public LenStatementContext len_; + public ExpressionContext e; + public ValuesContext values() { + return getRuleContext(ValuesContext.class,0); + } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public LambdaFunctionContext lambdaFunction() { + return getRuleContext(LambdaFunctionContext.class,0); + } + public ChopStatementContext chopStatement() { + return getRuleContext(ChopStatementContext.class,0); + } + public ChompStatementContext chompStatement() { + return getRuleContext(ChompStatementContext.class,0); + } + public MatchPatternStatementContext matchPatternStatement() { + return getRuleContext(MatchPatternStatementContext.class,0); + } + public FilterStatementContext filterStatement() { + return getRuleContext(FilterStatementContext.class,0); + } + public LenStatementContext lenStatement() { + return getRuleContext(LenStatementContext.class,0); + } + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public OtherExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_otherExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterOtherExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitOtherExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitOtherExpression(this); + else return visitor.visitChildren(this); + } + } + + public final OtherExpressionContext otherExpression() throws RecognitionException { + OtherExpressionContext _localctx = new OtherExpressionContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_otherExpression); + int _la; + try { + setState(631); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(601); + ((OtherExpressionContext)_localctx).v = values(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).v.valRet; + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(604); + ((OtherExpressionContext)_localctx).id = match(IDENTIFIER); + + ((OtherExpressionContext)_localctx).expRet = new Identifier((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getText():null)); + _localctx.expRet.setLine((((OtherExpressionContext)_localctx).id!=null?((OtherExpressionContext)_localctx).id.getLine():0)); + + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(606); + ((OtherExpressionContext)_localctx).lambda = lambdaFunction(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).lambda.lambdaRet; + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(609); + ((OtherExpressionContext)_localctx).chop = chopStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chop.chopRet; + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(612); + ((OtherExpressionContext)_localctx).chomp = chompStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).chomp.chompRet; + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(615); + ((OtherExpressionContext)_localctx).match = matchPatternStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).match.matchPatRet; + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(618); + ((OtherExpressionContext)_localctx).f = filterStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).f.filterStatementRet; + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(621); + ((OtherExpressionContext)_localctx).len_ = lenStatement(); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).len_.lenRet; + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(624); + match(LPAR); + setState(628); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -1150101502091851712L) != 0)) { + { + setState(625); + ((OtherExpressionContext)_localctx).e = expression(0); + ((OtherExpressionContext)_localctx).expRet = ((OtherExpressionContext)_localctx).e.expRet; + } + } + + setState(630); + match(RPAR); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LambdaFunctionContext extends ParserRuleContext { + public Expression lambdaRet; + public Token a; + public FunctionArgumentsDeclarationContext fd; + public BodyContext b; + public TerminalNode LBRACE() { return getToken(FunctionCraftParser.LBRACE, 0); } + public TerminalNode RBRACE() { return getToken(FunctionCraftParser.RBRACE, 0); } + public TerminalNode ARROW() { return getToken(FunctionCraftParser.ARROW, 0); } + public FunctionArgumentsDeclarationContext functionArgumentsDeclaration() { + return getRuleContext(FunctionArgumentsDeclarationContext.class,0); + } + public BodyContext body() { + return getRuleContext(BodyContext.class,0); + } + public LambdaFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterLambdaFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitLambdaFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitLambdaFunction(this); + else return visitor.visitChildren(this); + } + } + + public final LambdaFunctionContext lambdaFunction() throws RecognitionException { + LambdaFunctionContext _localctx = new LambdaFunctionContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_lambdaFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(633); + ((LambdaFunctionContext)_localctx).a = match(ARROW); + setState(634); + ((LambdaFunctionContext)_localctx).fd = functionArgumentsDeclaration(); + setState(635); + match(LBRACE); + setState(636); + ((LambdaFunctionContext)_localctx).b = body(); + setState(637); + match(RBRACE); + + ((LambdaFunctionContext)_localctx).lambdaRet = new LambdaExpression(((LambdaFunctionContext)_localctx).fd.argRet, ((LambdaFunctionContext)_localctx).b.bodyRet); + _localctx.lambdaRet.setLine((((LambdaFunctionContext)_localctx).a!=null?((LambdaFunctionContext)_localctx).a.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ValuesContext extends ParserRuleContext { + public Value valRet; + public BoolValueContext b; + public Token s; + public Token i; + public Token float_; + public ListValueContext l; + public FunctionPointerContext f; + public BoolValueContext boolValue() { + return getRuleContext(BoolValueContext.class,0); + } + public TerminalNode STRING_VALUE() { return getToken(FunctionCraftParser.STRING_VALUE, 0); } + public TerminalNode INT_VALUE() { return getToken(FunctionCraftParser.INT_VALUE, 0); } + public TerminalNode FLOAT_VALUE() { return getToken(FunctionCraftParser.FLOAT_VALUE, 0); } + public ListValueContext listValue() { + return getRuleContext(ListValueContext.class,0); + } + public FunctionPointerContext functionPointer() { + return getRuleContext(FunctionPointerContext.class,0); + } + public ValuesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_values; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterValues(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitValues(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitValues(this); + else return visitor.visitChildren(this); + } + } + + public final ValuesContext values() throws RecognitionException { + ValuesContext _localctx = new ValuesContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_values); + try { + setState(655); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + case FALSE: + enterOuterAlt(_localctx, 1); + { + setState(640); + ((ValuesContext)_localctx).b = boolValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).b.boolValRet; + } + break; + case STRING_VALUE: + enterOuterAlt(_localctx, 2); + { + setState(643); + ((ValuesContext)_localctx).s = match(STRING_VALUE); + ((ValuesContext)_localctx).valRet = new StringValue((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getText():null)); _localctx.valRet.setLine((((ValuesContext)_localctx).s!=null?((ValuesContext)_localctx).s.getLine():0)); + } + break; + case INT_VALUE: + enterOuterAlt(_localctx, 3); + { + setState(645); + ((ValuesContext)_localctx).i = match(INT_VALUE); + ((ValuesContext)_localctx).valRet = new IntValue((((ValuesContext)_localctx).i!=null?Integer.valueOf(((ValuesContext)_localctx).i.getText()):0));_localctx.valRet.setLine((((ValuesContext)_localctx).i!=null?((ValuesContext)_localctx).i.getLine():0)); + } + break; + case FLOAT_VALUE: + enterOuterAlt(_localctx, 4); + { + setState(647); + ((ValuesContext)_localctx).float_ = match(FLOAT_VALUE); + ((ValuesContext)_localctx).valRet = new FloatValue(Float.parseFloat((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getText():null)));_localctx.valRet.setLine((((ValuesContext)_localctx).float_!=null?((ValuesContext)_localctx).float_.getLine():0)); + } + break; + case LBRACK: + enterOuterAlt(_localctx, 5); + { + setState(649); + ((ValuesContext)_localctx).l = listValue(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).l.listValRet; + } + break; + case METHOD: + enterOuterAlt(_localctx, 6); + { + setState(652); + ((ValuesContext)_localctx).f = functionPointer(); + ((ValuesContext)_localctx).valRet = ((ValuesContext)_localctx).f.fpRet; + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ListValueContext extends ParserRuleContext { + public ListValue listValRet; + public Token l; + public FunctionArgumentsContext f; + public TerminalNode RBRACK() { return getToken(FunctionCraftParser.RBRACK, 0); } + public TerminalNode LBRACK() { return getToken(FunctionCraftParser.LBRACK, 0); } + public FunctionArgumentsContext functionArguments() { + return getRuleContext(FunctionArgumentsContext.class,0); + } + public ListValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_listValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterListValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitListValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitListValue(this); + else return visitor.visitChildren(this); + } + } + + public final ListValueContext listValue() throws RecognitionException { + ListValueContext _localctx = new ListValueContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_listValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(657); + ((ListValueContext)_localctx).l = match(LBRACK); + setState(658); + ((ListValueContext)_localctx).f = functionArguments(); + setState(659); + match(RBRACK); + + ((ListValueContext)_localctx).listValRet = new ListValue(((ListValueContext)_localctx).f.funcArgsRet); + _localctx.listValRet.setLine((((ListValueContext)_localctx).l!=null?((ListValueContext)_localctx).l.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BoolValueContext extends ParserRuleContext { + public BoolValue boolValRet; + public Token t; + public Token f; + public TerminalNode TRUE() { return getToken(FunctionCraftParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(FunctionCraftParser.FALSE, 0); } + public BoolValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterBoolValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitBoolValue(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitBoolValue(this); + else return visitor.visitChildren(this); + } + } + + public final BoolValueContext boolValue() throws RecognitionException { + BoolValueContext _localctx = new BoolValueContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_boolValue); + try { + setState(666); + _errHandler.sync(this); + switch (_input.LA(1)) { + case TRUE: + enterOuterAlt(_localctx, 1); + { + setState(662); + ((BoolValueContext)_localctx).t = match(TRUE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(true); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).t!=null?((BoolValueContext)_localctx).t.getLine():0)); + } + break; + case FALSE: + enterOuterAlt(_localctx, 2); + { + setState(664); + ((BoolValueContext)_localctx).f = match(FALSE); + ((BoolValueContext)_localctx).boolValRet = new BoolValue(false); _localctx.boolValRet.setLine((((BoolValueContext)_localctx).f!=null?((BoolValueContext)_localctx).f.getLine():0)); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionPointerContext extends ParserRuleContext { + public FunctionPointer fpRet; + public Token m; + public Token id; + public TerminalNode LPAR() { return getToken(FunctionCraftParser.LPAR, 0); } + public TerminalNode COLON() { return getToken(FunctionCraftParser.COLON, 0); } + public TerminalNode RPAR() { return getToken(FunctionCraftParser.RPAR, 0); } + public TerminalNode METHOD() { return getToken(FunctionCraftParser.METHOD, 0); } + public TerminalNode IDENTIFIER() { return getToken(FunctionCraftParser.IDENTIFIER, 0); } + public FunctionPointerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionPointer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).enterFunctionPointer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof FunctionCraftListener ) ((FunctionCraftListener)listener).exitFunctionPointer(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof FunctionCraftVisitor ) return ((FunctionCraftVisitor)visitor).visitFunctionPointer(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionPointerContext functionPointer() throws RecognitionException { + FunctionPointerContext _localctx = new FunctionPointerContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_functionPointer); + try { + enterOuterAlt(_localctx, 1); + { + setState(668); + ((FunctionPointerContext)_localctx).m = match(METHOD); + setState(669); + match(LPAR); + setState(670); + match(COLON); + setState(671); + ((FunctionPointerContext)_localctx).id = match(IDENTIFIER); + setState(672); + match(RPAR); + + Identifier id_ = new Identifier((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getText():null)); + id_.setLine((((FunctionPointerContext)_localctx).id!=null?((FunctionPointerContext)_localctx).id.getLine():0)); + ((FunctionPointerContext)_localctx).fpRet = new FunctionPointer(id_); + _localctx.fpRet.setLine((((FunctionPointerContext)_localctx).m!=null?((FunctionPointerContext)_localctx).m.getLine():0)); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 24: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 26: + return relationalExpression_sempred((RelationalExpressionContext)_localctx, predIndex); + case 27: + return additiveExpression_sempred((AdditiveExpressionContext)_localctx, predIndex); + case 28: + return multiplicativeExpression_sempred((MultiplicativeExpressionContext)_localctx, predIndex); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean relationalExpression_sempred(RelationalExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean additiveExpression_sempred(AdditiveExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 2); + } + return true; + } + private boolean multiplicativeExpression_sempred(MultiplicativeExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 3: + return precpred(_ctx, 2); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001A\u02a4\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0002$\u0007$\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0005\u0000R\b\u0000\n\u0000\f\u0000"+ + "U\t\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002l\b\u0002"+ + "\n\u0002\f\u0002o\t\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\u007f\b\u0002"+ + "\n\u0002\f\u0002\u0082\t\u0002\u0001\u0002\u0001\u0002\u0003\u0002\u0086"+ + "\b\u0002\u0003\u0002\u0088\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0005\u0003\u009b\b\u0003\n\u0003\f\u0003\u009e"+ + "\t\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0005\u0005\u00b3\b\u0005\n\u0005\f\u0005\u00b6\t\u0005"+ + "\u0003\u0005\u00b8\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0003\u0006\u00bf\b\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007"+ + "\u00cf\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0003\u0007\u00d9\b\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0005\u0007\u00df\b\u0007\n\u0007"+ + "\f\u0007\u00e2\t\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0003\u0007\u00e8\b\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\b"+ + "\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b\u00f4\b\b\u0001"+ + "\b\u0001\b\u0001\b\u0003\b\u00f9\b\b\u0005\b\u00fb\b\b\n\b\f\b\u00fe\t"+ + "\b\u0005\b\u0100\b\b\n\b\f\b\u0103\t\b\u0001\t\u0001\t\u0001\t\u0001\t"+ + "\u0001\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b\u0001\u000b"+ + "\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0001"+ + "\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0001\r\u0003\r\u012a\b\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001\r\u0001"+ + "\r\u0003\r\u0132\b\r\u0001\r\u0005\r\u0135\b\r\n\r\f\r\u0138\t\r\u0001"+ + "\r\u0001\r\u0001\r\u0003\r\u013d\b\r\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f"+ + "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0005\u000f\u0158\b\u000f"+ + "\n\u000f\f\u000f\u015b\t\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0003\u000f\u0162\b\u000f\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0005"+ + "\u0010\u0172\b\u0010\n\u0010\f\u0010\u0175\t\u0010\u0001\u0010\u0001\u0010"+ + "\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012"+ + "\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013"+ + "\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0003\u0014\u0193\b\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0003\u0014\u01a1\b\u0014"+ + "\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015"+ + "\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016"+ + "\u0001\u0016\u0001\u0016\u0003\u0016\u01c3\b\u0016\u0001\u0017\u0001\u0017"+ + "\u0001\u0017\u0001\u0017\u0005\u0017\u01c9\b\u0017\n\u0017\f\u0017\u01cc"+ + "\t\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0003\u0017\u01d1\b\u0017"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018"+ + "\u0001\u0018\u0001\u0018\u0001\u0018\u0005\u0018\u01dc\b\u0018\n\u0018"+ + "\f\u0018\u01df\t\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0003\u0019\u01e7\b\u0019\u0001\u0019\u0001\u0019"+ + "\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0003\u0019\u01ef\b\u0019"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0001\u001a\u0003\u001a\u01ff\b\u001a\u0001\u001a\u0001\u001a"+ + "\u0001\u001a\u0005\u001a\u0204\b\u001a\n\u001a\f\u001a\u0207\t\u001a\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0001\u001b\u0003\u001b\u0213\b\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001b\u0005\u001b\u0218\b\u001b\n\u001b\f\u001b"+ + "\u021b\t\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c"+ + "\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c"+ + "\u0227\b\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0005\u001c\u022c\b"+ + "\u001c\n\u001c\f\u001c\u022f\t\u001c\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0003\u001d\u023a\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0001\u001d"+ + "\u0001\u001d\u0001\u001d\u0003\u001d\u0242\b\u001d\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e"+ + "\u024b\b\u001e\n\u001e\f\u001e\u024e\t\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0005\u001e\u0253\b\u001e\n\u001e\f\u001e\u0256\t\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0003\u001f\u0275\b\u001f"+ + "\u0001\u001f\u0003\u001f\u0278\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0290\b!\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0003#"+ + "\u029b\b#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0000"+ + "\u00040468%\u0000\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016"+ + "\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFH\u0000\u0001\u0001\u0000"+ + "\u001e\u001f\u02c8\u0000J\u0001\u0000\u0000\u0000\u0002Y\u0001\u0000\u0000"+ + "\u0000\u0004d\u0001\u0000\u0000\u0000\u0006\u008b\u0001\u0000\u0000\u0000"+ + "\b\u00a1\u0001\u0000\u0000\u0000\n\u00ab\u0001\u0000\u0000\u0000\f\u00b9"+ + "\u0001\u0000\u0000\u0000\u000e\u00c3\u0001\u0000\u0000\u0000\u0010\u00ec"+ + "\u0001\u0000\u0000\u0000\u0012\u0104\u0001\u0000\u0000\u0000\u0014\u010b"+ + "\u0001\u0000\u0000\u0000\u0016\u0111\u0001\u0000\u0000\u0000\u0018\u011a"+ + "\u0001\u0000\u0000\u0000\u001a\u0120\u0001\u0000\u0000\u0000\u001c\u013e"+ + "\u0001\u0000\u0000\u0000\u001e\u0161\u0001\u0000\u0000\u0000 \u0163\u0001"+ + "\u0000\u0000\u0000\"\u0179\u0001\u0000\u0000\u0000$\u0181\u0001\u0000"+ + "\u0000\u0000&\u0187\u0001\u0000\u0000\u0000(\u018d\u0001\u0000\u0000\u0000"+ + "*\u01a6\u0001\u0000\u0000\u0000,\u01c2\u0001\u0000\u0000\u0000.\u01c4"+ + "\u0001\u0000\u0000\u00000\u01d2\u0001\u0000\u0000\u00002\u01ee\u0001\u0000"+ + "\u0000\u00004\u01f0\u0001\u0000\u0000\u00006\u0208\u0001\u0000\u0000\u0000"+ + "8\u021c\u0001\u0000\u0000\u0000:\u0241\u0001\u0000\u0000\u0000<\u0243"+ + "\u0001\u0000\u0000\u0000>\u0277\u0001\u0000\u0000\u0000@\u0279\u0001\u0000"+ + "\u0000\u0000B\u028f\u0001\u0000\u0000\u0000D\u0291\u0001\u0000\u0000\u0000"+ + "F\u029a\u0001\u0000\u0000\u0000H\u029c\u0001\u0000\u0000\u0000JS\u0006"+ + "\u0000\uffff\uffff\u0000KL\u0003\u0002\u0001\u0000LM\u0006\u0000\uffff"+ + "\uffff\u0000MR\u0001\u0000\u0000\u0000NO\u0003\u0006\u0003\u0000OP\u0006"+ + "\u0000\uffff\uffff\u0000PR\u0001\u0000\u0000\u0000QK\u0001\u0000\u0000"+ + "\u0000QN\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000\u0000SQ\u0001\u0000"+ + "\u0000\u0000ST\u0001\u0000\u0000\u0000TV\u0001\u0000\u0000\u0000US\u0001"+ + "\u0000\u0000\u0000VW\u0003\b\u0004\u0000WX\u0006\u0000\uffff\uffff\u0000"+ + "X\u0001\u0001\u0000\u0000\u0000YZ\u0006\u0001\uffff\uffff\u0000Z[\u0005"+ + "\u0001\u0000\u0000[\\\u0006\u0001\uffff\uffff\u0000\\]\u0005>\u0000\u0000"+ + "]^\u0006\u0001\uffff\uffff\u0000^_\u0003\u0004\u0002\u0000_`\u0006\u0001"+ + "\uffff\uffff\u0000`a\u0003.\u0017\u0000ab\u0006\u0001\uffff\uffff\u0000"+ + "bc\u0005\u0002\u0000\u0000c\u0003\u0001\u0000\u0000\u0000de\u0006\u0002"+ + "\uffff\uffff\u0000e\u0087\u00051\u0000\u0000fg\u0005>\u0000\u0000gm\u0006"+ + "\u0002\uffff\uffff\u0000hi\u00057\u0000\u0000ij\u0005>\u0000\u0000jl\u0006"+ + "\u0002\uffff\uffff\u0000kh\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000"+ + "\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000n\u0085\u0001"+ + "\u0000\u0000\u0000om\u0001\u0000\u0000\u0000pq\u00057\u0000\u0000qr\u0005"+ + "3\u0000\u0000rs\u0005>\u0000\u0000st\u0006\u0002\uffff\uffff\u0000tu\u0005"+ + "0\u0000\u0000uv\u00030\u0018\u0000v\u0080\u0006\u0002\uffff\uffff\u0000"+ + "wx\u00057\u0000\u0000xy\u0005>\u0000\u0000yz\u0006\u0002\uffff\uffff\u0000"+ + "z{\u00050\u0000\u0000{|\u00030\u0018\u0000|}\u0006\u0002\uffff\uffff\u0000"+ + "}\u007f\u0001\u0000\u0000\u0000~w\u0001\u0000\u0000\u0000\u007f\u0082"+ + "\u0001\u0000\u0000\u0000\u0080~\u0001\u0000\u0000\u0000\u0080\u0081\u0001"+ + "\u0000\u0000\u0000\u0081\u0083\u0001\u0000\u0000\u0000\u0082\u0080\u0001"+ + "\u0000\u0000\u0000\u0083\u0084\u00054\u0000\u0000\u0084\u0086\u0001\u0000"+ + "\u0000\u0000\u0085p\u0001\u0000\u0000\u0000\u0085\u0086\u0001\u0000\u0000"+ + "\u0000\u0086\u0088\u0001\u0000\u0000\u0000\u0087f\u0001\u0000\u0000\u0000"+ + "\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0001\u0000\u0000\u0000"+ + "\u0089\u008a\u00052\u0000\u0000\u008a\u0005\u0001\u0000\u0000\u0000\u008b"+ + "\u008c\u0005\f\u0000\u0000\u008c\u008d\u0006\u0003\uffff\uffff\u0000\u008d"+ + "\u008e\u0005>\u0000\u0000\u008e\u008f\u0006\u0003\uffff\uffff\u0000\u008f"+ + "\u0090\u00051\u0000\u0000\u0090\u0091\u0005>\u0000\u0000\u0091\u0092\u0006"+ + "\u0003\uffff\uffff\u0000\u0092\u009c\u00052\u0000\u0000\u0093\u0094\u0005"+ + "#\u0000\u0000\u0094\u0095\u0003\u0010\b\u0000\u0095\u0096\u0006\u0003"+ + "\uffff\uffff\u0000\u0096\u0097\u00050\u0000\u0000\u0097\u0098\u00030\u0018"+ + "\u0000\u0098\u0099\u0006\u0003\uffff\uffff\u0000\u0099\u009b\u0001\u0000"+ + "\u0000\u0000\u009a\u0093\u0001\u0000\u0000\u0000\u009b\u009e\u0001\u0000"+ + "\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009c\u009d\u0001\u0000"+ + "\u0000\u0000\u009d\u009f\u0001\u0000\u0000\u0000\u009e\u009c\u0001\u0000"+ + "\u0000\u0000\u009f\u00a0\u0005;\u0000\u0000\u00a0\u0007\u0001\u0000\u0000"+ + "\u0000\u00a1\u00a2\u0006\u0004\uffff\uffff\u0000\u00a2\u00a3\u0005\u0001"+ + "\u0000\u0000\u00a3\u00a4\u0005\u0003\u0000\u0000\u00a4\u00a5\u0006\u0004"+ + "\uffff\uffff\u0000\u00a5\u00a6\u00051\u0000\u0000\u00a6\u00a7\u00052\u0000"+ + "\u0000\u00a7\u00a8\u0003.\u0017\u0000\u00a8\u00a9\u0006\u0004\uffff\uffff"+ + "\u0000\u00a9\u00aa\u0005\u0002\u0000\u0000\u00aa\t\u0001\u0000\u0000\u0000"+ + "\u00ab\u00b7\u0006\u0005\uffff\uffff\u0000\u00ac\u00ad\u00030\u0018\u0000"+ + "\u00ad\u00b4\u0006\u0005\uffff\uffff\u0000\u00ae\u00af\u00057\u0000\u0000"+ + "\u00af\u00b0\u00030\u0018\u0000\u00b0\u00b1\u0006\u0005\uffff\uffff\u0000"+ + "\u00b1\u00b3\u0001\u0000\u0000\u0000\u00b2\u00ae\u0001\u0000\u0000\u0000"+ + "\u00b3\u00b6\u0001\u0000\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000"+ + "\u00b4\u00b5\u0001\u0000\u0000\u0000\u00b5\u00b8\u0001\u0000\u0000\u0000"+ + "\u00b6\u00b4\u0001\u0000\u0000\u0000\u00b7\u00ac\u0001\u0000\u0000\u0000"+ + "\u00b7\u00b8\u0001\u0000\u0000\u0000\u00b8\u000b\u0001\u0000\u0000\u0000"+ + "\u00b9\u00ba\u0006\u0006\uffff\uffff\u0000\u00ba\u00be\u0005\u0007\u0000"+ + "\u0000\u00bb\u00bc\u00030\u0018\u0000\u00bc\u00bd\u0006\u0006\uffff\uffff"+ + "\u0000\u00bd\u00bf\u0001\u0000\u0000\u0000\u00be\u00bb\u0001\u0000\u0000"+ + "\u0000\u00be\u00bf\u0001\u0000\u0000\u0000\u00bf\u00c0\u0001\u0000\u0000"+ + "\u0000\u00c0\u00c1\u0006\u0006\uffff\uffff\u0000\u00c1\u00c2\u0005;\u0000"+ + "\u0000\u00c2\r\u0001\u0000\u0000\u0000\u00c3\u00c4\u0006\u0007\uffff\uffff"+ + "\u0000\u00c4\u00c5\u0005\b\u0000\u0000\u00c5\u00ce\u0006\u0007\uffff\uffff"+ + "\u0000\u00c6\u00c7\u0003\u0010\b\u0000\u00c7\u00c8\u0006\u0007\uffff\uffff"+ + "\u0000\u00c8\u00cf\u0001\u0000\u0000\u0000\u00c9\u00ca\u00051\u0000\u0000"+ + "\u00ca\u00cb\u0003\u0010\b\u0000\u00cb\u00cc\u00052\u0000\u0000\u00cc"+ + "\u00cd\u0006\u0007\uffff\uffff\u0000\u00cd\u00cf\u0001\u0000\u0000\u0000"+ + "\u00ce\u00c6\u0001\u0000\u0000\u0000\u00ce\u00c9\u0001\u0000\u0000\u0000"+ + "\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0003\u001a\r\u0000\u00d1"+ + "\u00e0\u0006\u0007\uffff\uffff\u0000\u00d2\u00d8\u0005\n\u0000\u0000\u00d3"+ + "\u00d4\u00051\u0000\u0000\u00d4\u00d5\u0003\u0010\b\u0000\u00d5\u00d6"+ + "\u00052\u0000\u0000\u00d6\u00d9\u0001\u0000\u0000\u0000\u00d7\u00d9\u0003"+ + "\u0010\b\u0000\u00d8\u00d3\u0001\u0000\u0000\u0000\u00d8\u00d7\u0001\u0000"+ + "\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000\u00da\u00db\u0006\u0007"+ + "\uffff\uffff\u0000\u00db\u00dc\u0003\u001a\r\u0000\u00dc\u00dd\u0006\u0007"+ + "\uffff\uffff\u0000\u00dd\u00df\u0001\u0000\u0000\u0000\u00de\u00d2\u0001"+ + "\u0000\u0000\u0000\u00df\u00e2\u0001\u0000\u0000\u0000\u00e0\u00de\u0001"+ + "\u0000\u0000\u0000\u00e0\u00e1\u0001\u0000\u0000\u0000\u00e1\u00e7\u0001"+ + "\u0000\u0000\u0000\u00e2\u00e0\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005"+ + "\t\u0000\u0000\u00e4\u00e5\u0003\u001a\r\u0000\u00e5\u00e6\u0006\u0007"+ + "\uffff\uffff\u0000\u00e6\u00e8\u0001\u0000\u0000\u0000\u00e7\u00e3\u0001"+ + "\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001"+ + "\u0000\u0000\u0000\u00e9\u00ea\u0006\u0007\uffff\uffff\u0000\u00ea\u00eb"+ + "\u0005\u0002\u0000\u0000\u00eb\u000f\u0001\u0000\u0000\u0000\u00ec\u0101"+ + "\u0006\b\uffff\uffff\u0000\u00ed\u00ee\u00051\u0000\u0000\u00ee\u00ef"+ + "\u00030\u0018\u0000\u00ef\u00f0\u0006\b\uffff\uffff\u0000\u00f0\u00fc"+ + "\u00052\u0000\u0000\u00f1\u00f3\u0007\u0000\u0000\u0000\u00f2\u00f4\u0005"+ + "1\u0000\u0000\u00f3\u00f2\u0001\u0000\u0000\u0000\u00f3\u00f4\u0001\u0000"+ + "\u0000\u0000\u00f4\u00f5\u0001\u0000\u0000\u0000\u00f5\u00f6\u0003\u0010"+ + "\b\u0000\u00f6\u00f8\u0006\b\uffff\uffff\u0000\u00f7\u00f9\u00052\u0000"+ + "\u0000\u00f8\u00f7\u0001\u0000\u0000\u0000\u00f8\u00f9\u0001\u0000\u0000"+ + "\u0000\u00f9\u00fb\u0001\u0000\u0000\u0000\u00fa\u00f1\u0001\u0000\u0000"+ + "\u0000\u00fb\u00fe\u0001\u0000\u0000\u0000\u00fc\u00fa\u0001\u0000\u0000"+ + "\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd\u0100\u0001\u0000\u0000"+ + "\u0000\u00fe\u00fc\u0001\u0000\u0000\u0000\u00ff\u00ed\u0001\u0000\u0000"+ + "\u0000\u0100\u0103\u0001\u0000\u0000\u0000\u0101\u00ff\u0001\u0000\u0000"+ + "\u0000\u0101\u0102\u0001\u0000\u0000\u0000\u0102\u0011\u0001\u0000\u0000"+ + "\u0000\u0103\u0101\u0001\u0000\u0000\u0000\u0104\u0105\u0005\u0004\u0000"+ + "\u0000\u0105\u0106\u00051\u0000\u0000\u0106\u0107\u00030\u0018\u0000\u0107"+ + "\u0108\u0006\t\uffff\uffff\u0000\u0108\u0109\u00052\u0000\u0000\u0109"+ + "\u010a\u0005;\u0000\u0000\u010a\u0013\u0001\u0000\u0000\u0000\u010b\u010c"+ + "\u0005\u0006\u0000\u0000\u010c\u010d\u00051\u0000\u0000\u010d\u010e\u0003"+ + "0\u0018\u0000\u010e\u010f\u0006\n\uffff\uffff\u0000\u010f\u0110\u0005"+ + "2\u0000\u0000\u0110\u0015\u0001\u0000\u0000\u0000\u0111\u0112\u0005\u0005"+ + "\u0000\u0000\u0112\u0113\u00051\u0000\u0000\u0113\u0114\u00030\u0018\u0000"+ + "\u0114\u0115\u00057\u0000\u0000\u0115\u0116\u00030\u0018\u0000\u0116\u0117"+ + "\u00052\u0000\u0000\u0117\u0118\u0005;\u0000\u0000\u0118\u0119\u0006\u000b"+ + "\uffff\uffff\u0000\u0119\u0017\u0001\u0000\u0000\u0000\u011a\u011b\u0005"+ + "\u000e\u0000\u0000\u011b\u011c\u0005\u0011\u0000\u0000\u011c\u011d\u0003"+ + "\u001a\r\u0000\u011d\u011e\u0006\f\uffff\uffff\u0000\u011e\u011f\u0005"+ + "\u0002\u0000\u0000\u011f\u0019\u0001\u0000\u0000\u0000\u0120\u0136\u0006"+ + "\r\uffff\uffff\u0000\u0121\u0122\u0003,\u0016\u0000\u0122\u0123\u0006"+ + "\r\uffff\uffff\u0000\u0123\u0135\u0001\u0000\u0000\u0000\u0124\u0129\u0005"+ + "(\u0000\u0000\u0125\u0126\u0005\b\u0000\u0000\u0126\u0127\u0003\u0010"+ + "\b\u0000\u0127\u0128\u0006\r\uffff\uffff\u0000\u0128\u012a\u0001\u0000"+ + "\u0000\u0000\u0129\u0125\u0001\u0000\u0000\u0000\u0129\u012a\u0001\u0000"+ + "\u0000\u0000\u012a\u012b\u0001\u0000\u0000\u0000\u012b\u0135\u0005;\u0000"+ + "\u0000\u012c\u0131\u0005)\u0000\u0000\u012d\u012e\u0005\b\u0000\u0000"+ + "\u012e\u012f\u0003\u0010\b\u0000\u012f\u0130\u0006\r\uffff\uffff\u0000"+ + "\u0130\u0132\u0001\u0000\u0000\u0000\u0131\u012d\u0001\u0000\u0000\u0000"+ + "\u0131\u0132\u0001\u0000\u0000\u0000\u0132\u0133\u0001\u0000\u0000\u0000"+ + "\u0133\u0135\u0005;\u0000\u0000\u0134\u0121\u0001\u0000\u0000\u0000\u0134"+ + "\u0124\u0001\u0000\u0000\u0000\u0134\u012c\u0001\u0000\u0000\u0000\u0135"+ + "\u0138\u0001\u0000\u0000\u0000\u0136\u0134\u0001\u0000\u0000\u0000\u0136"+ + "\u0137\u0001\u0000\u0000\u0000\u0137\u013c\u0001\u0000\u0000\u0000\u0138"+ + "\u0136\u0001\u0000\u0000\u0000\u0139\u013a\u0003\f\u0006\u0000\u013a\u013b"+ + "\u0006\r\uffff\uffff\u0000\u013b\u013d\u0001\u0000\u0000\u0000\u013c\u0139"+ + "\u0001\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d\u001b"+ + "\u0001\u0000\u0000\u0000\u013e\u013f\u0005\u000f\u0000\u0000\u013f\u0140"+ + "\u0005>\u0000\u0000\u0140\u0141\u0005\u0010\u0000\u0000\u0141\u0142\u0003"+ + "\u001e\u000f\u0000\u0142\u0143\u0003\u001a\r\u0000\u0143\u0144\u0005\u0002"+ + "\u0000\u0000\u0144\u0145\u0006\u000e\uffff\uffff\u0000\u0145\u001d\u0001"+ + "\u0000\u0000\u0000\u0146\u0147\u0006\u000f\uffff\uffff\u0000\u0147\u0148"+ + "\u00051\u0000\u0000\u0148\u0149\u00030\u0018\u0000\u0149\u014a\u0006\u000f"+ + "\uffff\uffff\u0000\u014a\u014b\u00059\u0000\u0000\u014b\u014c\u00030\u0018"+ + "\u0000\u014c\u014d\u0006\u000f\uffff\uffff\u0000\u014d\u014e\u00052\u0000"+ + "\u0000\u014e\u0162\u0001\u0000\u0000\u0000\u014f\u0150\u0006\u000f\uffff"+ + "\uffff\u0000\u0150\u0151\u00053\u0000\u0000\u0151\u0152\u00030\u0018\u0000"+ + "\u0152\u0159\u0006\u000f\uffff\uffff\u0000\u0153\u0154\u00057\u0000\u0000"+ + "\u0154\u0155\u00030\u0018\u0000\u0155\u0156\u0006\u000f\uffff\uffff\u0000"+ + "\u0156\u0158\u0001\u0000\u0000\u0000\u0157\u0153\u0001\u0000\u0000\u0000"+ + "\u0158\u015b\u0001\u0000\u0000\u0000\u0159\u0157\u0001\u0000\u0000\u0000"+ + "\u0159\u015a\u0001\u0000\u0000\u0000\u015a\u015c\u0001\u0000\u0000\u0000"+ + "\u015b\u0159\u0001\u0000\u0000\u0000\u015c\u015d\u00054\u0000\u0000\u015d"+ + "\u0162\u0001\u0000\u0000\u0000\u015e\u015f\u0006\u000f\uffff\uffff\u0000"+ + "\u015f\u0160\u0005>\u0000\u0000\u0160\u0162\u0006\u000f\uffff\uffff\u0000"+ + "\u0161\u0146\u0001\u0000\u0000\u0000\u0161\u014f\u0001\u0000\u0000\u0000"+ + "\u0161\u015e\u0001\u0000\u0000\u0000\u0162\u001f\u0001\u0000\u0000\u0000"+ + "\u0163\u0164\u0006\u0010\uffff\uffff\u0000\u0164\u0165\u00053\u0000\u0000"+ + "\u0165\u0166\u00030\u0018\u0000\u0166\u0167\u0005$\u0000\u0000\u0167\u0168"+ + "\u0005>\u0000\u0000\u0168\u0169\u0005*\u0000\u0000\u0169\u016a\u0003\u001e"+ + "\u000f\u0000\u016a\u016b\u00057\u0000\u0000\u016b\u016c\u00030\u0018\u0000"+ + "\u016c\u0173\u0006\u0010\uffff\uffff\u0000\u016d\u016e\u00057\u0000\u0000"+ + "\u016e\u016f\u00030\u0018\u0000\u016f\u0170\u0006\u0010\uffff\uffff\u0000"+ + "\u0170\u0172\u0001\u0000\u0000\u0000\u0171\u016d\u0001\u0000\u0000\u0000"+ + "\u0172\u0175\u0001\u0000\u0000\u0000\u0173\u0171\u0001\u0000\u0000\u0000"+ + "\u0173\u0174\u0001\u0000\u0000\u0000\u0174\u0176\u0001\u0000\u0000\u0000"+ + "\u0175\u0173\u0001\u0000\u0000\u0000\u0176\u0177\u0006\u0010\uffff\uffff"+ + "\u0000\u0177\u0178\u00054\u0000\u0000\u0178!\u0001\u0000\u0000\u0000\u0179"+ + "\u017a\u0005>\u0000\u0000\u017a\u017b\u00058\u0000\u0000\u017b\u017c\u0005"+ + "\r\u0000\u0000\u017c\u017d\u00051\u0000\u0000\u017d\u017e\u00030\u0018"+ + "\u0000\u017e\u017f\u00052\u0000\u0000\u017f\u0180\u0006\u0011\uffff\uffff"+ + "\u0000\u0180#\u0001\u0000\u0000\u0000\u0181\u0182\u0005\u0012\u0000\u0000"+ + "\u0182\u0183\u00051\u0000\u0000\u0183\u0184\u00030\u0018\u0000\u0184\u0185"+ + "\u00052\u0000\u0000\u0185\u0186\u0006\u0012\uffff\uffff\u0000\u0186%\u0001"+ + "\u0000\u0000\u0000\u0187\u0188\u0005\u0013\u0000\u0000\u0188\u0189\u0005"+ + "1\u0000\u0000\u0189\u018a\u00030\u0018\u0000\u018a\u018b\u00052\u0000"+ + "\u0000\u018b\u018c\u0006\u0013\uffff\uffff\u0000\u018c\'\u0001\u0000\u0000"+ + "\u0000\u018d\u018e\u0006\u0014\uffff\uffff\u0000\u018e\u0192\u0005>\u0000"+ + "\u0000\u018f\u0190\u0003*\u0015\u0000\u0190\u0191\u0006\u0014\uffff\uffff"+ + "\u0000\u0191\u0193\u0001\u0000\u0000\u0000\u0192\u018f\u0001\u0000\u0000"+ + "\u0000\u0192\u0193\u0001\u0000\u0000\u0000\u0193\u01a0\u0001\u0000\u0000"+ + "\u0000\u0194\u0195\u00050\u0000\u0000\u0195\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u0196\u0197\u0005+\u0000\u0000\u0197\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u0198\u0199\u0005,\u0000\u0000\u0199\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019a\u019b\u0005.\u0000\u0000\u019b\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019c\u019d\u0005-\u0000\u0000\u019d\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u019e\u019f\u0005/\u0000\u0000\u019f\u01a1\u0006\u0014\uffff\uffff"+ + "\u0000\u01a0\u0194\u0001\u0000\u0000\u0000\u01a0\u0196\u0001\u0000\u0000"+ + "\u0000\u01a0\u0198\u0001\u0000\u0000\u0000\u01a0\u019a\u0001\u0000\u0000"+ + "\u0000\u01a0\u019c\u0001\u0000\u0000\u0000\u01a0\u019e\u0001\u0000\u0000"+ + "\u0000\u01a1\u01a2\u0001\u0000\u0000\u0000\u01a2\u01a3\u00030\u0018\u0000"+ + "\u01a3\u01a4\u0005;\u0000\u0000\u01a4\u01a5\u0006\u0014\uffff\uffff\u0000"+ + "\u01a5)\u0001\u0000\u0000\u0000\u01a6\u01a7\u00053\u0000\u0000\u01a7\u01a8"+ + "\u00030\u0018\u0000\u01a8\u01a9\u0006\u0015\uffff\uffff\u0000\u01a9\u01aa"+ + "\u00054\u0000\u0000\u01aa+\u0001\u0000\u0000\u0000\u01ab\u01ac\u0003\u000e"+ + "\u0007\u0000\u01ac\u01ad\u0006\u0016\uffff\uffff\u0000\u01ad\u01c3\u0001"+ + "\u0000\u0000\u0000\u01ae\u01af\u0003\u0018\f\u0000\u01af\u01b0\u0006\u0016"+ + "\uffff\uffff\u0000\u01b0\u01c3\u0001\u0000\u0000\u0000\u01b1\u01b2\u0003"+ + "\u001c\u000e\u0000\u01b2\u01b3\u0006\u0016\uffff\uffff\u0000\u01b3\u01c3"+ + "\u0001\u0000\u0000\u0000\u01b4\u01b5\u0003\u0012\t\u0000\u01b5\u01b6\u0006"+ + "\u0016\uffff\uffff\u0000\u01b6\u01c3\u0001\u0000\u0000\u0000\u01b7\u01b8"+ + "\u0003\u0016\u000b\u0000\u01b8\u01b9\u0006\u0016\uffff\uffff\u0000\u01b9"+ + "\u01c3\u0001\u0000\u0000\u0000\u01ba\u01bb\u00030\u0018\u0000\u01bb\u01bc"+ + "\u0006\u0016\uffff\uffff\u0000\u01bc\u01bd\u0006\u0016\uffff\uffff\u0000"+ + "\u01bd\u01be\u0005;\u0000\u0000\u01be\u01c3\u0001\u0000\u0000\u0000\u01bf"+ + "\u01c0\u0003(\u0014\u0000\u01c0\u01c1\u0006\u0016\uffff\uffff\u0000\u01c1"+ + "\u01c3\u0001\u0000\u0000\u0000\u01c2\u01ab\u0001\u0000\u0000\u0000\u01c2"+ + "\u01ae\u0001\u0000\u0000\u0000\u01c2\u01b1\u0001\u0000\u0000\u0000\u01c2"+ + "\u01b4\u0001\u0000\u0000\u0000\u01c2\u01b7\u0001\u0000\u0000\u0000\u01c2"+ + "\u01ba\u0001\u0000\u0000\u0000\u01c2\u01bf\u0001\u0000\u0000\u0000\u01c3"+ + "-\u0001\u0000\u0000\u0000\u01c4\u01ca\u0006\u0017\uffff\uffff\u0000\u01c5"+ + "\u01c6\u0003,\u0016\u0000\u01c6\u01c7\u0006\u0017\uffff\uffff\u0000\u01c7"+ + "\u01c9\u0001\u0000\u0000\u0000\u01c8\u01c5\u0001\u0000\u0000\u0000\u01c9"+ + "\u01cc\u0001\u0000\u0000\u0000\u01ca\u01c8\u0001\u0000\u0000\u0000\u01ca"+ + "\u01cb\u0001\u0000\u0000\u0000\u01cb\u01d0\u0001\u0000\u0000\u0000\u01cc"+ + "\u01ca\u0001\u0000\u0000\u0000\u01cd\u01ce\u0003\f\u0006\u0000\u01ce\u01cf"+ + "\u0006\u0017\uffff\uffff\u0000\u01cf\u01d1\u0001\u0000\u0000\u0000\u01d0"+ + "\u01cd\u0001\u0000\u0000\u0000\u01d0\u01d1\u0001\u0000\u0000\u0000\u01d1"+ + "/\u0001\u0000\u0000\u0000\u01d2\u01d3\u0006\u0018\uffff\uffff\u0000\u01d3"+ + "\u01d4\u00032\u0019\u0000\u01d4\u01d5\u0006\u0018\uffff\uffff\u0000\u01d5"+ + "\u01dd\u0001\u0000\u0000\u0000\u01d6\u01d7\n\u0002\u0000\u0000\u01d7\u01d8"+ + "\u0005%\u0000\u0000\u01d8\u01d9\u00032\u0019\u0000\u01d9\u01da\u0006\u0018"+ + "\uffff\uffff\u0000\u01da\u01dc\u0001\u0000\u0000\u0000\u01db\u01d6\u0001"+ + "\u0000\u0000\u0000\u01dc\u01df\u0001\u0000\u0000\u0000\u01dd\u01db\u0001"+ + "\u0000\u0000\u0000\u01dd\u01de\u0001\u0000\u0000\u0000\u01de1\u0001\u0000"+ + "\u0000\u0000\u01df\u01dd\u0001\u0000\u0000\u0000\u01e0\u01e1\u00034\u001a"+ + "\u0000\u01e1\u01e6\u0006\u0019\uffff\uffff\u0000\u01e2\u01e3\u0005\u0018"+ + "\u0000\u0000\u01e3\u01e7\u0006\u0019\uffff\uffff\u0000\u01e4\u01e5\u0005"+ + "\u0019\u0000\u0000\u01e5\u01e7\u0006\u0019\uffff\uffff\u0000\u01e6\u01e2"+ + "\u0001\u0000\u0000\u0000\u01e6\u01e4\u0001\u0000\u0000\u0000\u01e7\u01e8"+ + "\u0001\u0000\u0000\u0000\u01e8\u01e9\u00034\u001a\u0000\u01e9\u01ea\u0006"+ + "\u0019\uffff\uffff\u0000\u01ea\u01ef\u0001\u0000\u0000\u0000\u01eb\u01ec"+ + "\u00034\u001a\u0000\u01ec\u01ed\u0006\u0019\uffff\uffff\u0000\u01ed\u01ef"+ + "\u0001\u0000\u0000\u0000\u01ee\u01e0\u0001\u0000\u0000\u0000\u01ee\u01eb"+ + "\u0001\u0000\u0000\u0000\u01ef3\u0001\u0000\u0000\u0000\u01f0\u01f1\u0006"+ + "\u001a\uffff\uffff\u0000\u01f1\u01f2\u00036\u001b\u0000\u01f2\u01f3\u0006"+ + "\u001a\uffff\uffff\u0000\u01f3\u0205\u0001\u0000\u0000\u0000\u01f4\u01f5"+ + "\n\u0002\u0000\u0000\u01f5\u01fe\u0006\u001a\uffff\uffff\u0000\u01f6\u01f7"+ + "\u0005\u001c\u0000\u0000\u01f7\u01ff\u0006\u001a\uffff\uffff\u0000\u01f8"+ + "\u01f9\u0005\u001d\u0000\u0000\u01f9\u01ff\u0006\u001a\uffff\uffff\u0000"+ + "\u01fa\u01fb\u0005\u001a\u0000\u0000\u01fb\u01ff\u0006\u001a\uffff\uffff"+ + "\u0000\u01fc\u01fd\u0005\u001b\u0000\u0000\u01fd\u01ff\u0006\u001a\uffff"+ + "\uffff\u0000\u01fe\u01f6\u0001\u0000\u0000\u0000\u01fe\u01f8\u0001\u0000"+ + "\u0000\u0000\u01fe\u01fa\u0001\u0000\u0000\u0000\u01fe\u01fc\u0001\u0000"+ + "\u0000\u0000\u01ff\u0200\u0001\u0000\u0000\u0000\u0200\u0201\u00036\u001b"+ + "\u0000\u0201\u0202\u0006\u001a\uffff\uffff\u0000\u0202\u0204\u0001\u0000"+ + "\u0000\u0000\u0203\u01f4\u0001\u0000\u0000\u0000\u0204\u0207\u0001\u0000"+ + "\u0000\u0000\u0205\u0203\u0001\u0000\u0000\u0000\u0205\u0206\u0001\u0000"+ + "\u0000\u0000\u02065\u0001\u0000\u0000\u0000\u0207\u0205\u0001\u0000\u0000"+ + "\u0000\u0208\u0209\u0006\u001b\uffff\uffff\u0000\u0209\u020a\u00038\u001c"+ + "\u0000\u020a\u020b\u0006\u001b\uffff\uffff\u0000\u020b\u0219\u0001\u0000"+ + "\u0000\u0000\u020c\u020d\n\u0002\u0000\u0000\u020d\u0212\u0006\u001b\uffff"+ + "\uffff\u0000\u020e\u020f\u0005\u0014\u0000\u0000\u020f\u0213\u0006\u001b"+ + "\uffff\uffff\u0000\u0210\u0211\u0005\u0015\u0000\u0000\u0211\u0213\u0006"+ + "\u001b\uffff\uffff\u0000\u0212\u020e\u0001\u0000\u0000\u0000\u0212\u0210"+ + "\u0001\u0000\u0000\u0000\u0213\u0214\u0001\u0000\u0000\u0000\u0214\u0215"+ + "\u00038\u001c\u0000\u0215\u0216\u0006\u001b\uffff\uffff\u0000\u0216\u0218"+ + "\u0001\u0000\u0000\u0000\u0217\u020c\u0001\u0000\u0000\u0000\u0218\u021b"+ + "\u0001\u0000\u0000\u0000\u0219\u0217\u0001\u0000\u0000\u0000\u0219\u021a"+ + "\u0001\u0000\u0000\u0000\u021a7\u0001\u0000\u0000\u0000\u021b\u0219\u0001"+ + "\u0000\u0000\u0000\u021c\u021d\u0006\u001c\uffff\uffff\u0000\u021d\u021e"+ + "\u0003:\u001d\u0000\u021e\u021f\u0006\u001c\uffff\uffff\u0000\u021f\u022d"+ + "\u0001\u0000\u0000\u0000\u0220\u0221\n\u0002\u0000\u0000\u0221\u0226\u0006"+ + "\u001c\uffff\uffff\u0000\u0222\u0223\u0005\u0016\u0000\u0000\u0223\u0227"+ + "\u0006\u001c\uffff\uffff\u0000\u0224\u0225\u0005\u0017\u0000\u0000\u0225"+ + "\u0227\u0006\u001c\uffff\uffff\u0000\u0226\u0222\u0001\u0000\u0000\u0000"+ + "\u0226\u0224\u0001\u0000\u0000\u0000\u0227\u0228\u0001\u0000\u0000\u0000"+ + "\u0228\u0229\u0003:\u001d\u0000\u0229\u022a\u0006\u001c\uffff\uffff\u0000"+ + "\u022a\u022c\u0001\u0000\u0000\u0000\u022b\u0220\u0001\u0000\u0000\u0000"+ + "\u022c\u022f\u0001\u0000\u0000\u0000\u022d\u022b\u0001\u0000\u0000\u0000"+ + "\u022d\u022e\u0001\u0000\u0000\u0000\u022e9\u0001\u0000\u0000\u0000\u022f"+ + "\u022d\u0001\u0000\u0000\u0000\u0230\u0239\u0006\u001d\uffff\uffff\u0000"+ + "\u0231\u0232\u0005 \u0000\u0000\u0232\u023a\u0006\u001d\uffff\uffff\u0000"+ + "\u0233\u0234\u0005\u0015\u0000\u0000\u0234\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0235\u0236\u0005!\u0000\u0000\u0236\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0237\u0238\u0005\"\u0000\u0000\u0238\u023a\u0006\u001d\uffff\uffff"+ + "\u0000\u0239\u0231\u0001\u0000\u0000\u0000\u0239\u0233\u0001\u0000\u0000"+ + "\u0000\u0239\u0235\u0001\u0000\u0000\u0000\u0239\u0237\u0001\u0000\u0000"+ + "\u0000\u023a\u023b\u0001\u0000\u0000\u0000\u023b\u023c\u0003<\u001e\u0000"+ + "\u023c\u023d\u0006\u001d\uffff\uffff\u0000\u023d\u0242\u0001\u0000\u0000"+ + "\u0000\u023e\u023f\u0003<\u001e\u0000\u023f\u0240\u0006\u001d\uffff\uffff"+ + "\u0000\u0240\u0242\u0001\u0000\u0000\u0000\u0241\u0230\u0001\u0000\u0000"+ + "\u0000\u0241\u023e\u0001\u0000\u0000\u0000\u0242;\u0001\u0000\u0000\u0000"+ + "\u0243\u0244\u0006\u001e\uffff\uffff\u0000\u0244\u024c\u0003>\u001f\u0000"+ + "\u0245\u0246\u00051\u0000\u0000\u0246\u0247\u0003\n\u0005\u0000\u0247"+ + "\u0248\u0006\u001e\uffff\uffff\u0000\u0248\u0249\u00052\u0000\u0000\u0249"+ + "\u024b\u0001\u0000\u0000\u0000\u024a\u0245\u0001\u0000\u0000\u0000\u024b"+ + "\u024e\u0001\u0000\u0000\u0000\u024c\u024a\u0001\u0000\u0000\u0000\u024c"+ + "\u024d\u0001\u0000\u0000\u0000\u024d\u0254\u0001\u0000\u0000\u0000\u024e"+ + "\u024c\u0001\u0000\u0000\u0000\u024f\u0250\u0003*\u0015\u0000\u0250\u0251"+ + "\u0006\u001e\uffff\uffff\u0000\u0251\u0253\u0001\u0000\u0000\u0000\u0252"+ + "\u024f\u0001\u0000\u0000\u0000\u0253\u0256\u0001\u0000\u0000\u0000\u0254"+ + "\u0252\u0001\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000\u0000\u0255"+ + "\u0257\u0001\u0000\u0000\u0000\u0256\u0254\u0001\u0000\u0000\u0000\u0257"+ + "\u0258\u0006\u001e\uffff\uffff\u0000\u0258=\u0001\u0000\u0000\u0000\u0259"+ + "\u025a\u0003B!\u0000\u025a\u025b\u0006\u001f\uffff\uffff\u0000\u025b\u0278"+ + "\u0001\u0000\u0000\u0000\u025c\u025d\u0005>\u0000\u0000\u025d\u0278\u0006"+ + "\u001f\uffff\uffff\u0000\u025e\u025f\u0003@ \u0000\u025f\u0260\u0006\u001f"+ + "\uffff\uffff\u0000\u0260\u0278\u0001\u0000\u0000\u0000\u0261\u0262\u0003"+ + "$\u0012\u0000\u0262\u0263\u0006\u001f\uffff\uffff\u0000\u0263\u0278\u0001"+ + "\u0000\u0000\u0000\u0264\u0265\u0003&\u0013\u0000\u0265\u0266\u0006\u001f"+ + "\uffff\uffff\u0000\u0266\u0278\u0001\u0000\u0000\u0000\u0267\u0268\u0003"+ + "\"\u0011\u0000\u0268\u0269\u0006\u001f\uffff\uffff\u0000\u0269\u0278\u0001"+ + "\u0000\u0000\u0000\u026a\u026b\u0003 \u0010\u0000\u026b\u026c\u0006\u001f"+ + "\uffff\uffff\u0000\u026c\u0278\u0001\u0000\u0000\u0000\u026d\u026e\u0003"+ + "\u0014\n\u0000\u026e\u026f\u0006\u001f\uffff\uffff\u0000\u026f\u0278\u0001"+ + "\u0000\u0000\u0000\u0270\u0274\u00051\u0000\u0000\u0271\u0272\u00030\u0018"+ + "\u0000\u0272\u0273\u0006\u001f\uffff\uffff\u0000\u0273\u0275\u0001\u0000"+ + "\u0000\u0000\u0274\u0271\u0001\u0000\u0000\u0000\u0274\u0275\u0001\u0000"+ + "\u0000\u0000\u0275\u0276\u0001\u0000\u0000\u0000\u0276\u0278\u00052\u0000"+ + "\u0000\u0277\u0259\u0001\u0000\u0000\u0000\u0277\u025c\u0001\u0000\u0000"+ + "\u0000\u0277\u025e\u0001\u0000\u0000\u0000\u0277\u0261\u0001\u0000\u0000"+ + "\u0000\u0277\u0264\u0001\u0000\u0000\u0000\u0277\u0267\u0001\u0000\u0000"+ + "\u0000\u0277\u026a\u0001\u0000\u0000\u0000\u0277\u026d\u0001\u0000\u0000"+ + "\u0000\u0277\u0270\u0001\u0000\u0000\u0000\u0278?\u0001\u0000\u0000\u0000"+ + "\u0279\u027a\u0005*\u0000\u0000\u027a\u027b\u0003\u0004\u0002\u0000\u027b"+ + "\u027c\u00055\u0000\u0000\u027c\u027d\u0003.\u0017\u0000\u027d\u027e\u0005"+ + "6\u0000\u0000\u027e\u027f\u0006 \uffff\uffff\u0000\u027fA\u0001\u0000"+ + "\u0000\u0000\u0280\u0281\u0003F#\u0000\u0281\u0282\u0006!\uffff\uffff"+ + "\u0000\u0282\u0290\u0001\u0000\u0000\u0000\u0283\u0284\u0005?\u0000\u0000"+ + "\u0284\u0290\u0006!\uffff\uffff\u0000\u0285\u0286\u0005<\u0000\u0000\u0286"+ + "\u0290\u0006!\uffff\uffff\u0000\u0287\u0288\u0005=\u0000\u0000\u0288\u0290"+ + "\u0006!\uffff\uffff\u0000\u0289\u028a\u0003D\"\u0000\u028a\u028b\u0006"+ + "!\uffff\uffff\u0000\u028b\u0290\u0001\u0000\u0000\u0000\u028c\u028d\u0003"+ + "H$\u0000\u028d\u028e\u0006!\uffff\uffff\u0000\u028e\u0290\u0001\u0000"+ + "\u0000\u0000\u028f\u0280\u0001\u0000\u0000\u0000\u028f\u0283\u0001\u0000"+ + "\u0000\u0000\u028f\u0285\u0001\u0000\u0000\u0000\u028f\u0287\u0001\u0000"+ + "\u0000\u0000\u028f\u0289\u0001\u0000\u0000\u0000\u028f\u028c\u0001\u0000"+ + "\u0000\u0000\u0290C\u0001\u0000\u0000\u0000\u0291\u0292\u00053\u0000\u0000"+ + "\u0292\u0293\u0003\n\u0005\u0000\u0293\u0294\u00054\u0000\u0000\u0294"+ + "\u0295\u0006\"\uffff\uffff\u0000\u0295E\u0001\u0000\u0000\u0000\u0296"+ + "\u0297\u0005&\u0000\u0000\u0297\u029b\u0006#\uffff\uffff\u0000\u0298\u0299"+ + "\u0005\'\u0000\u0000\u0299\u029b\u0006#\uffff\uffff\u0000\u029a\u0296"+ + "\u0001\u0000\u0000\u0000\u029a\u0298\u0001\u0000\u0000\u0000\u029bG\u0001"+ + "\u0000\u0000\u0000\u029c\u029d\u0005\u000b\u0000\u0000\u029d\u029e\u0005"+ + "1\u0000\u0000\u029e\u029f\u0005:\u0000\u0000\u029f\u02a0\u0005>\u0000"+ + "\u0000\u02a0\u02a1\u00052\u0000\u0000\u02a1\u02a2\u0006$\uffff\uffff\u0000"+ + "\u02a2I\u0001\u0000\u0000\u00000QSm\u0080\u0085\u0087\u009c\u00b4\u00b7"+ + "\u00be\u00ce\u00d8\u00e0\u00e7\u00f3\u00f8\u00fc\u0101\u0129\u0131\u0134"+ + "\u0136\u013c\u0159\u0161\u0173\u0192\u01a0\u01c2\u01ca\u01d0\u01dd\u01e6"+ + "\u01ee\u01fe\u0205\u0212\u0219\u0226\u022d\u0239\u0241\u024c\u0254\u0274"+ + "\u0277\u028f\u029a"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/Phase2Template/gen/main/grammar/FunctionCraftVisitor.java b/Phase2Template/gen/main/grammar/FunctionCraftVisitor.java new file mode 100644 index 0000000..4d0e09e --- /dev/null +++ b/Phase2Template/gen/main/grammar/FunctionCraftVisitor.java @@ -0,0 +1,244 @@ +// Generated from U:/UT/6/PLC_TA/Design-Compiler-Course-Projects/Phase2Template/Phase2/src/main/grammar/FunctionCraft.g4 by ANTLR 4.13.1 +package main.grammar; + + import main.ast.nodes.*; + import main.ast.nodes.declaration.*; + import main.ast.nodes.statement.*; + import main.ast.nodes.expression.*; + import main.ast.nodes.expression.operators.*; + import main.ast.nodes.expression.value.*; + import main.ast.nodes.expression.value.primitive.*; + +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link FunctionCraftParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface FunctionCraftVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link FunctionCraftParser#program}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProgram(FunctionCraftParser.ProgramContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionDeclaration(FunctionCraftParser.FunctionDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArgumentsDeclaration}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArgumentsDeclaration(FunctionCraftParser.FunctionArgumentsDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#patternMatching}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPatternMatching(FunctionCraftParser.PatternMatchingContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#main}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMain(FunctionCraftParser.MainContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionArguments}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionArguments(FunctionCraftParser.FunctionArgumentsContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#returnStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReturnStatement(FunctionCraftParser.ReturnStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#ifStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIfStatement(FunctionCraftParser.IfStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#condition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCondition(FunctionCraftParser.ConditionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#putsStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPutsStatement(FunctionCraftParser.PutsStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lenStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLenStatement(FunctionCraftParser.LenStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#pushStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPushStatement(FunctionCraftParser.PushStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopDoStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopDoStatement(FunctionCraftParser.LoopDoStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#loopBody}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLoopBody(FunctionCraftParser.LoopBodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#forStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitForStatement(FunctionCraftParser.ForStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#range}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRange(FunctionCraftParser.RangeContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#filterStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFilterStatement(FunctionCraftParser.FilterStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#matchPatternStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMatchPatternStatement(FunctionCraftParser.MatchPatternStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chopStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChopStatement(FunctionCraftParser.ChopStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#chompStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitChompStatement(FunctionCraftParser.ChompStatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#assignment}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAssignment(FunctionCraftParser.AssignmentContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessList(FunctionCraftParser.AccessListContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#statement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStatement(FunctionCraftParser.StatementContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#body}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBody(FunctionCraftParser.BodyContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpression(FunctionCraftParser.ExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#eqaulityExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEqaulityExpression(FunctionCraftParser.EqaulityExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#relationalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRelationalExpression(FunctionCraftParser.RelationalExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#additiveExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAdditiveExpression(FunctionCraftParser.AdditiveExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#multiplicativeExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMultiplicativeExpression(FunctionCraftParser.MultiplicativeExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#preUnaryExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPreUnaryExpression(FunctionCraftParser.PreUnaryExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#accessExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAccessExpression(FunctionCraftParser.AccessExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#otherExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOtherExpression(FunctionCraftParser.OtherExpressionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#lambdaFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLambdaFunction(FunctionCraftParser.LambdaFunctionContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#values}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValues(FunctionCraftParser.ValuesContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#listValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitListValue(FunctionCraftParser.ListValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#boolValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBoolValue(FunctionCraftParser.BoolValueContext ctx); + /** + * Visit a parse tree produced by {@link FunctionCraftParser#functionPointer}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionPointer(FunctionCraftParser.FunctionPointerContext ctx); +} \ No newline at end of file diff --git a/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/PatternDeclaration.class b/Phase2Template/out/production/Phase2Template/main/ast/nodes/declaration/PatternDeclaration.class index 6b250fc76bb7773d8feddd13b18da8204c10b806..4846bfdcc06d586433f0c1c98201b4eb13a1bace 100644 GIT binary patch delta 1214 zcmaJ<%T^OX5WPJinQ<6nPJ+Qiga{c4i7`G=2_i8*Pyz;gMDZC3YH*YdveVi42Yrr9 zzd??Q%EEKpy7fm~y7E{(nM|4(TugU$O;z2xx9Uy&b6o%NXY(6?0-mqyMV1XzYqf%9 zF~m}(nxBh9qY!$$v33kTY-?NBCZ)(tQlaRh%#|ijyB+Det=2L*A#Rf{%18qNZX=L_X&8 z>d&q^gUMg3rccE)KBvtLouXD1oTe{~U0`UwcarVL7@c|kT^nWN{I@n>pP}dkd~}+a zz*)M5HHj$22`fgHLUsY?L?-#h=&jHlNM}AFvQCzQaq)IC!Vncjj_@=q2Hc7aMVxo* zN z*fieeU}wmh#Z@{5%tRYZzXKzai*Ex{#vIjPm~YUeTF!vz79xeVXk?SO@4v*adBjU@ zN6xy0+DY$|x{=qVvAQkN0b1r3XIqfI-jQ^OwEdTKzXT&|8+J+GKvoh^Y<>@sj(owO zSda~*HgO2>G_c)ePe>Z{cIGU=~4syGGYkq=63Y2L^++`?^Yr^Q}) k7Rb|BtUDO?;VzX|a1ZzC*63H2z6W?hFP*HXScZkzUoqHo6#xJL delta 1174 zcmaJ=*-{fh6g@p5nXwsTD#660G>If5kf^u$JHNaOiZYu zO*Q`rv+GE4^)QJk?m9Y(BJ*@qW@IrwhH3qhcauC@+%v8AR}_{RS(wo0;6)x9QNPhQ zUBpa;C~zDnBAij~!e?5#^#z4b3{0Ftfa3<3=?F*A)I=7gIE$?tu+VB)6{or^rV!AG zSd`){iis>{aGG4ll`o6_n(}Q4xuN%GSaB9-^&1vC&%NiL)XY8w z1+4Qx&u`uEV4ydumvJR(_)^pjr``I2y;cBVwtUc_<@9>t;3}?>&YF6CbG@g&!?C%6 chW^*w#4XZr_|si}xAB-K$><55;RVY70PE*t_W%F@ diff --git a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 b/Phase2Template/out/production/Phase2Template/main/grammar/FunctionCraft.g4 similarity index 98% rename from Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 rename to Phase2Template/out/production/Phase2Template/main/grammar/FunctionCraft.g4 index 4a0f191..9a157a0 100644 --- a/Phase2Template/out/production/Phase2Template/main/grammer/FunctionCraft.g4 +++ b/Phase2Template/out/production/Phase2Template/main/grammar/FunctionCraft.g4 @@ -63,7 +63,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: COMMA LBRACK id3 = IDENTIFIER { Identifier id_3 = new Identifier($id3.text); - id_.setLine($id3.line); + id_3.setLine($id3.line); VarDeclaration newVarDec3 = new VarDeclaration(id_3); newVarDec3.setLine($id3.line); } @@ -76,7 +76,7 @@ functionArgumentsDeclaration returns [ArrayList argRet]: { Identifier id_4 = new Identifier($id4.text); id_4.setLine($id4.line); - VarDeclaration newVarDec4 = new VarDeclaration(id_); + VarDeclaration newVarDec4 = new VarDeclaration(id_4); newVarDec4.setLine($id4.line); } ASSIGN e2 = expression @@ -499,6 +499,7 @@ accessExpression returns [Expression expRet]: { boolean isAccessExpression = false; boolean isMultiDimentional = false; + boolean isFunctionCall = false; ArrayList args = new ArrayList(); ArrayList dimentions = new ArrayList(); } @@ -506,12 +507,14 @@ accessExpression returns [Expression expRet]: (LPAR f = functionArguments //arrayList of expression { isAccessExpression = true; + isFunctionCall =true; args.addAll($f.funcArgsRet); } RPAR)* (a = accessList //single expression { isMultiDimentional = true; + isAccessExpression = true; dimentions.add($a.accessListExp); } )* @@ -521,7 +524,7 @@ accessExpression returns [Expression expRet]: } else{ AccessExpression accessExp = new AccessExpression($o.expRet, args); - accessExp.setIsFunctionCall(isAccessExpression); + accessExp.setIsFunctionCall(isFunctionCall); if(isMultiDimentional){ accessExp.setDimentionalAccess(dimentions); diff --git a/Phase2Template/out/production/Phase2Template/main/symbolTable/SymbolTable.class b/Phase2Template/out/production/Phase2Template/main/symbolTable/SymbolTable.class index 5898fc1631af4bba3e6c7a01b10454959f22c4fd..a5cb3316f1763ee5f23e406286f9609ba5e001c8 100644 GIT binary patch delta 634 zcmYk4%PvDv6o&tO^yX;Vs!LU>S|Uz0G-4#`Qn$KPmAW%2At48iw4@^sQ4c~$1c|A{ z3mAC^6N!P~KU=l3vv>AcYyIE9_R6_%zPi-sulq*;F>GC_Z%SB!rv@Pm*)fa}0ZTTY zi|M+6TT2{dPBW2wZeNegWwHaImFo}XTd1a;<7`17poNOPRsLE5$ITA3K=;asVMy@+ delta 405 zcmYk1O-=$q5QSe2&;ui35QqbW7ziP{QDWRkf}jKb3n;pA<<6aZ@6ld_kZ2+a2XNsH zyaNYNofc8d+$GQa{!09op=jpx)J*peV^#;>_buZkYWfr%pG(Y zRn(&U0X-@Bd@Km{N21a0(U(J<`zmWW*795h^r@uj0`ntFK4u<+_ypupwt%Kum!2M~ zKtlbXYE1*n&;%5TED=`z2g>5af&{xb<;Oz(qFQ{vP{E#Qw?+-vT)IqlhI95=HZJ0V zh>eR a$_(kdSG1>aCzJ(dKE=~aDH!u~aPtecfGQdQ diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/DependencyDetector.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/DependencyDetector.class index d4ad7ad5e779f42be2e3a2cf43d62d48845f0394..7766dd7aea4103aed43c0172d9529b4a4a24b2c0 100644 GIT binary patch literal 10331 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 literal 3692 zcmbVOS#uOs7(Ja#(#g;ykw7p8Fd$17l16q(2!GGth zdBNyKq1I@46pachEYGBZNVTp&{7|spu>|Yzn2PlpHejQIWnn$CA_~+g!yPiud9p(% zghrEwX0#}X*m8S$)^@_MC-uYQXIOAnakGNpPcrOxI=ca~e_X#1k6!phLk@dJ9DqG_fW{KFyp3J(Ogf_9|$(zi2nh;JTqg6rI?o z;Yrc1D$C7QvByXx#L<2YJtCeJjK^0sq0VHIT-cKev=O*{FW9>H-9&x)ega2$9X7AcAmoY3%`D7(hg zeO;c52v2EvUZ62LVcGGXnOMSfRlLB~g_9=eO~tqZU4|1&CDT^IloX{4Qj;rJ@3EZN zGzlQ2wkQn51-UZs+8}Sqn!;j7^QfSLNexr5IJ&G5QITJrU{IS+L`kbJYDj>DQzpku z!TwRFG-buvpe0BNvuR>(p1FYH=Bp{F9JVHHgAHI_yA~q3PJgrtD%F!$ zwvH~gBGN-DB^U=R+Z>usj+>6;agy9XDrO``4aX9^9&ARuDT}PyUdT0z{8Q+qc49s| zE7(#z`->Hi5Kd<~|KVcgY^lgH!uZ?*_s!KwLVLc)81 zZZY*R-BOy)RVl0FjSvnsaEY2&JzJq>^C$~G<#I9%pH=A?ys2du}aKaI4bOV z!B0v8lxUBMiDY5&P$q|m{~vioNYoX=WhR}4%=#jw&iOneaM+P2mb=abvbkwpP*-U8 z&KsP?ptQhmkqHi(-c%}ng!hLeFGLRW+C0y47H11u2&A)r;ov8nAGfTjh&ei(ns#Dl zKUs|Tl&}fet600>KCC4@l<=Zh0l~)nvvWClLS5f-mu1j3i&pXOzJcD$Xq3zA=-*S`@)K%l{a^+I z_2qnIaO4V3(dfu5Mrm}!H#$0tgTmriXngGd8Nb(+SGNh&Gd)qUb>jYsCRT16Z=icw zpFV8D5$>Ge6>}0TIKy`m?d+A#zHPw;JdSs;6_==S8Qbvt5EVcma0%CBsbJ_6Ox}%UJTzBzQwSXw=nWEVggEJL}EC_oQ3mM g9{9b){W2cbKpOgdAw%|mGei?UMSOuTWdvXS3k|;IWB>pF diff --git a/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class b/Phase2Template/out/production/Phase2Template/main/visitor/nameAnalyzer/NameAnalyzer.class index 8580787d72fb97ed02f1032eed503f7a3e83b504..adadb96a4c2df1b5438cd96b92ea097584ad779a 100644 GIT binary patch literal 22761 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 diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$BoolValueContext.class index ab87651656dd10e7c25a1dadcd6292677f4abfe4..36bb83895c4925125965ee9f5e3e1008668f7422 100644 GIT binary patch delta 69 zcmX>scvx^lIUD2S$rWt&j87)-V6$U=#=yq+eDZHLKgJi6z1TfjUo!~uy_x)zU1RbA Yb`#e3K;8!+FNO6pgAm`B$w?fE0Gpp01ONa4 delta 69 zcmX>scvx^lIUD1H$rWt&j1MR8V6$U=%)rL?Wb$t|KgOq%z1TfjUoZ&ry`21$U1RbA Yb`#b&K;By*FNO63gAm`x$w?fE0GDbR;{X5v diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$FunctionPointerContext.class index af03e41ce373f339cb927ba41ad3d0e660557247..a75f3796f01ed90f7270c27eac5514c2feec3415 100644 GIT binary patch delta 90 zcmX>hd_s7`9=6Ff>|&EIv1v`-1Ehu6wHQ?=+p^m;s!gs1lIoN9vfHt0GO+P$P2%ul q)Sm3m;mNAUAjq#j`5%YIhd_s7`9yUgW$$Q!C85Jl01(HgWZQ1Q7?_m?0Jc(Uv@*g05iCvRbje(6{eG-Qs qqsC-^4o_BX20?zE$^SSsCLiT6Vburn41l~8R$~Ssev`@RoQVL}1sMJS diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$LambdaFunctionContext.class index 9ab5a37134c2b454ef2ca663165909c97d680365..da26418f7909c911203267377b2dd7e17b0ae5ba 100644 GIT binary patch delta 90 zcmcaCep!6OMh?awlQ(hLGya_X2}u5$Y{cm_c{``rBq=2*^A4Qm7PJ5k7M#rE{(|txJ+2Nfjk}{FNKw#L5NRaauRnT0DYYrlmGw# delta 90 zcmcaCep!6OMh?cWlQ(hLGk%-=2}pjQY{cor_;Ye8r_Bq=8*^A4Qm4!i&k9G1-E{(|txJ+0%fILnhFNKwdL5PocauRnT0GenUCIA2c diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ListValueContext.class index d7af7c12da2ae92e951d53d603b82293d1cd9bc1..7496fc7a20a3fef7737c7941266ad9e9cdfcd05e 100644 GIT binary patch delta 77 zcmdldvQK2ga`wqu96XaZvzsukn*4&@iE+(jZ4Nuu^$cu$8z$#*_%UvryqCk1bqj+a h-`2@FoEnpjIZar10C_usycE_w3_^T+Ctu~v1OVbU7|;L! delta 75 zcmdldvQK2ga(2dLlUK0YGcKR}g58O6OBmRAODA^=_%W7Ez9rzv kTFD^DTQ#{;P-Aj{pb2X&kXHxfrLZ`!G!>hMJ;at diff --git a/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class b/Phase2Template/out/production/Phase2Template/parsers/FunctionCraftParser$ValuesContext.class index 027dd8be6fecef3b1c93aff896f715a7f5ea8668..bfa2346ed6cdc1bef6ecb0ce8336ad2bbb7ea6b2 100644 GIT binary patch delta 97 zcmZ1=xj=G*87HItWOGh?M#stJoc5C~xp*cY;xu7&p8TEDX>tvh*kpe$T}F?|wOn?r z-VAJfK9dh{`7!!V=I8cg4PX%D3!J=hVFLaM;|;EL&P*eb>6K z_*`6#O~IPb4DgseD2{=^npTD@AthvHYPof^cGca*JnI7=NPCB4o#o8obLZaw{Qke+ z{h$9mS#900)9PyLdG7-NS@yy2x;|W`RN><6rA2d>6#lMg!kqc_EvpVil389`5m8=M zaf}@Gi?+>~&nFZ;UQzGR9_@KLz&kK3yYSi()EJ6l1Nzxbm4@ zu{LYE&1aS`>&mjd;P)Cc%2)ltkYUmB^Fp9}ZrhDD~-$RF>jzv>b1+ z{lc1VwT|`K%We!CRnu=9yeTPrZAp7=sSUQs*O9s3Hmu-o!e=(w?#poa9O1S`+lX*$ z1zbLd&)#Soo#JzpKXW6q*y(Si3qI$EDSPA)KB}b#`ggCV%NJ2_bnv4Z)2dl8>#L)80r2I;~1F8gz0RcfGsFuE1qQ=R)PCsG>&>1`1lcFMNfd?bH%W3+sL+n78kY3LwtHxla$ zZ?zc3CGhYD_;?fI_<8ub6btwTEaNTsBbQ-4mt!-(h;k0dBd9QEOBvii1A%CO8%5~^HF&w?X-_SqXYao9pW#j zjZetq_);FlNjk@;sFP0{;I9okpD{fAcO#n58VP*P7|fl<5WZxj@_8eTFBs{3(a7R| z8KG08kRyd$u|S-~Kh%%wsiP;u;ZYIrsYt}CC?uA-A zDgkrV06eXduvR7GRh5dJDh;nGKX$7W)Tn#VsD|Jp$sd+{t9VrGP`_-*r)H!0QMuJ@ zxz!xRsmI}0bMc&-hn4C#Sg#6Es-DKnYCg8BB2=pdctb5jomzzds3rJ8EyFeS9JCw zI<3m+d$pC$tC#4qs-&x`in>$<-B8=;j@oWG)GJ1)sxIkxGA31asg@_)pkB;trh2!LPz4(7GUs%&4 z4%$k^qv6qG;M19i)mcc^rCp3sx=TRjCOdMYaQ zG}+N~wCDn~>0jZf&PBVPf#Z56zR`KIs{(XN{<3&Y?9z|)?!+(Sq6C>{hxr+dK#_~~ zSZNyyy=VF9@665t#a`(cYe+5jtJ28UM5wja4Ghv!}CpcPqqnZW+=3FNpb*ST1-OC|ekFdONzmiGQU&g==a2g}Q)yh6$=@0Q>F zxjcoXyjsd@rM$kk95~424DAWtxOXsFVT3v1Fn?@1!<0b2sVMbM!%N;A?DRf_TJOVX z7F)eD0(~{5yX>-C71(_#@lVyNg92Z(*(EVkS$L8v5h#W3-4F=2{jw3=d!m@oDdgV*;L>%~~{q!=f5it%vD49~VFAkAq@lVE@( YCW(n+aDgPTOiUJ=#erhGI0(-F0o>>R*#H0l delta 2164 zcmYk-3s6+&6$kMDxx0HWyKug5m-h+^f)ZSckJ6xF2#SrQ8Xp)^j4f50hZ)0IV`Gz8 zqbnMVd0-OO@~|O_4W>r15dw@Fi(-s`F@#v6aXN8oO--86I#U%?ke;QQ$;{6FzCGvO z?{V(jvzvF?&(zvoowpAD1wgKqy5H5hzVY1pBe7%;v{pw4&Q*B=ZPiD}-nenwFN>V} zV22Z+bAjG#W5N#^*$Z2YoGizkff-2YyT`R6z8b~x_8qu4u&gh^@HzrzeYsQ~=<4&0 zdPs8l!CaEhW6W!&@-$zw?R1l4f<4pjH3Q!MjI8>R+u%t{d(ScUJ;%f*N9^0kIpoM# zcst;Av^eh0vb@&FX2+B$do^5M%WF0}veUd)ptOH#W{9tuzVe2&roAhB^->+}rEiAq zl6~)`b_&`>-9ceD56JfgObHD1d;RHQ1IP@!g?qz>FoS{FOekan#cabWwqrG0SkECS zWhb_<3l$uODrVHN#$I-#kt1=CqwoPo<8K^`f3O$5Jc104qfm|~Hz!aGCsG0@Q4%N9 z1Wu()9!JyIM-OwlpNe=qJ;{^kdHx}7;0!9|yJ-tgrmZ}M>i9m|%`<2(=TJRQr3Rix zhdGzpCH|4byTl&xEa#br??~zQkdNyro&QW3yq~hTfu?gK&EY1>=N4Mv=L58e57JUTL@W6) zt>RW%!$;+Dw9!j^jDF9@sftg~cJ82E+)4ZRBpu*W^gegdG47^L{*=1;v^<8t(gp6J zUjEDgpEWH0+;HRwFP~#UW3{V~!e$htwz(sRTT#67i%;!bX*h zH&r@zs`02(cVU-G#U3>d&B}+P5b6KiLmRf{FwHQ9N1kb5Q zu}(dXO=>C1)Dx&u%kT$Pj9RrEe^S3fgIa-a)k^$FJ&mjCHyBXQkg1-fJhhr;sx>rE zt))V>j+Q7t)uC{9aAq;rz)fFEVYF`SFh4V^*UWr0lKW- zpew3|`cwt=t4bPFRYr)aHX_s;MvSU4Mu-XGX!T}`%}$2#(^fga5jjAc)anDN)p4oS zhf=E(Qmb~URfp8-Bo?cW@LTnn9PA8A)F;@Wx>2e=MY%eS8j06R{4H^}xJR9B`I$+L z7I)dyvnnH98g^F%5T*nT-#)zOFkv#?!1AUm3k4|O3r^#YvI z`S@7R$7%f_zR(4-t3vcj{IYme?9&eq@5Co9qZCukF7p!@mD^qPuI;*cqw>K}TAo{k zF?tck>m`_?AHj6}n5@3^ySsq7xBEwM)M4HPNr#wg4g~wm@My3ij0&C05UGnXN-wWm z97dyQu(BkK3Y}A7uCz^wmL&5a3l3p$8HMi6Ize}%WNw1UidP#2> zPRHAO?xcfj4|gg%j7TR!%v&w2D2cqYQ09366`ncR>6wdto_S~!+dcCuf1)YVWe&-X z4GR`kZq_v4A8e04jHQ**=xow+4~X(7Nu9yQC!QBgIE^IH5;MdQaiQoGOGKAgEryD3 ziD6=k$YPJE;I!F9Ek=lLF9_qz2H_GY5F^A##7OaJF-m+{j23If7_mW&6_1Ku zu}d5Qr`;6e#06r!7`%R@*eH$?&xi?Pub2p@H1#}dG$uJ6lVp%2ftg~m7@S~?ST2qg N+r$*{WAQFH{|Ao}@1g(z diff --git a/Sources/Jepeto/2021-Spring(Jepeto)/plc-spring1400-jepeto/.idea/vcs.xml b/Sources/Jepeto/2021-Spring(Jepeto)/plc-spring1400-jepeto/.idea/vcs.xml index 35eb1dd..13b0196 100644 --- a/Sources/Jepeto/2021-Spring(Jepeto)/plc-spring1400-jepeto/.idea/vcs.xml +++ b/Sources/Jepeto/2021-Spring(Jepeto)/plc-spring1400-jepeto/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/Sources/Jepeto/Delivery_phase3/.idea/.gitignore b/Sources/Jepeto/Delivery_phase3/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Sources/Jepeto/Delivery_phase3/.idea/Delivery_phase3.iml b/Sources/Jepeto/Delivery_phase3/.idea/Delivery_phase3.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/Delivery_phase3.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Sources/Jepeto/Delivery_phase3/.idea/libraries/Delivery_phase3.xml b/Sources/Jepeto/Delivery_phase3/.idea/libraries/Delivery_phase3.xml new file mode 100644 index 0000000..eb58209 --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/libraries/Delivery_phase3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Sources/Jepeto/Delivery_phase3/.idea/misc.xml b/Sources/Jepeto/Delivery_phase3/.idea/misc.xml new file mode 100644 index 0000000..6f29fee --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Sources/Jepeto/Delivery_phase3/.idea/modules.xml b/Sources/Jepeto/Delivery_phase3/.idea/modules.xml new file mode 100644 index 0000000..843b0e2 --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Sources/Jepeto/Delivery_phase3/.idea/vcs.xml b/Sources/Jepeto/Delivery_phase3/.idea/vcs.xml new file mode 100644 index 0000000..c2365ab --- /dev/null +++ b/Sources/Jepeto/Delivery_phase3/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file