From f3dbea4b8067ec729d929ff206d152b9497fb3dc Mon Sep 17 00:00:00 2001 From: Chiara Liotta <liotta@astron.nl> Date: Tue, 3 Dec 2024 11:42:12 +0100 Subject: [PATCH] process control dependencies "when" field of steps --- README.md | 8 + antlr_gen/JavaScriptLexer.interp | 435 ++ antlr_gen/JavaScriptLexer.py | 1023 +++ antlr_gen/JavaScriptLexer.tokens | 235 + antlr_gen/JavaScriptLexerBase.py | 129 + antlr_gen/JavaScriptParser.interp | 359 + antlr_gen/JavaScriptParser.py | 9662 +++++++++++++++++++++++++ antlr_gen/JavaScriptParser.tokens | 235 + antlr_gen/JavaScriptParserBase.py | 87 + antlr_gen/JavaScriptParserListener.py | 1308 ++++ antlr_gen/__init__.py | 0 graph_creation/cst_processing.py | 61 + graph_creation/cwl_processing.py | 55 +- graph_creation/repo_processing.py | 2 +- neo4j_queries/edge_queries.py | 51 + neo4j_queries/node_queries.py | 40 +- parsers/__init__.py | 0 parsers/javascript_parsing.py | 39 + requirements.txt | 3 +- 19 files changed, 13716 insertions(+), 16 deletions(-) create mode 100644 antlr_gen/JavaScriptLexer.interp create mode 100644 antlr_gen/JavaScriptLexer.py create mode 100644 antlr_gen/JavaScriptLexer.tokens create mode 100644 antlr_gen/JavaScriptLexerBase.py create mode 100644 antlr_gen/JavaScriptParser.interp create mode 100644 antlr_gen/JavaScriptParser.py create mode 100644 antlr_gen/JavaScriptParser.tokens create mode 100644 antlr_gen/JavaScriptParserBase.py create mode 100644 antlr_gen/JavaScriptParserListener.py create mode 100644 antlr_gen/__init__.py create mode 100644 graph_creation/cst_processing.py create mode 100644 parsers/__init__.py create mode 100644 parsers/javascript_parsing.py diff --git a/README.md b/README.md index 1530601..333fcf0 100644 --- a/README.md +++ b/README.md @@ -91,3 +91,11 @@ For open source projects, say how it is licensed. ## Project status If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. + +## ANTLR + +JS: +1. Download lexer and parser from https://github.com/antlr/grammars-v4/tree/master/javascript/javascript +2. Download `JavaScriptLexerBase.py`, `JavaScriptParserBase.py`, `transformGrammar.py` from https://github.com/antlr/grammars-v4/tree/master/javascript/javascript/Python3 +3. Run `python transformGrammar.py` +4. Run `java -jar antlr-4.13.2-complete.jar -o antlr_gen *.g` diff --git a/antlr_gen/JavaScriptLexer.interp b/antlr_gen/JavaScriptLexer.interp new file mode 100644 index 0000000..b3bdd8c --- /dev/null +++ b/antlr_gen/JavaScriptLexer.interp @@ -0,0 +1,435 @@ +token literal names: +null +null +null +null +null +'[' +']' +'(' +')' +'{' +null +'}' +';' +',' +'=' +'?' +'?.' +':' +'...' +'.' +'++' +'--' +'+' +'-' +'~' +'!' +'*' +'/' +'%' +'**' +'??' +'#' +'>>' +'<<' +'>>>' +'<' +'>' +'<=' +'>=' +'==' +'!=' +'===' +'!==' +'&' +'^' +'|' +'&&' +'||' +'*=' +'/=' +'%=' +'+=' +'-=' +'<<=' +'>>=' +'>>>=' +'&=' +'^=' +'|=' +'**=' +'??=' +'=>' +'null' +null +null +null +null +null +null +null +null +null +null +'break' +'do' +'instanceof' +'typeof' +'case' +'else' +'new' +'var' +'catch' +'finally' +'return' +'void' +'continue' +'for' +'switch' +'while' +'debugger' +'function' +'this' +'with' +'default' +'if' +'throw' +'delete' +'in' +'try' +'as' +'from' +'of' +'yield' +'yield*' +'class' +'enum' +'extends' +'super' +'const' +'export' +'import' +'async' +'await' +'implements' +null +null +'private' +'public' +'interface' +'package' +'protected' +'static' +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +HashBangLine +MultiLineComment +SingleLineComment +RegularExpressionLiteral +OpenBracket +CloseBracket +OpenParen +CloseParen +OpenBrace +TemplateCloseBrace +CloseBrace +SemiColon +Comma +Assign +QuestionMark +QuestionMarkDot +Colon +Ellipsis +Dot +PlusPlus +MinusMinus +Plus +Minus +BitNot +Not +Multiply +Divide +Modulus +Power +NullCoalesce +Hashtag +RightShiftArithmetic +LeftShiftArithmetic +RightShiftLogical +LessThan +MoreThan +LessThanEquals +GreaterThanEquals +Equals_ +NotEquals +IdentityEquals +IdentityNotEquals +BitAnd +BitXOr +BitOr +And +Or +MultiplyAssign +DivideAssign +ModulusAssign +PlusAssign +MinusAssign +LeftShiftArithmeticAssign +RightShiftArithmeticAssign +RightShiftLogicalAssign +BitAndAssign +BitXorAssign +BitOrAssign +PowerAssign +NullishCoalescingAssign +ARROW +NullLiteral +BooleanLiteral +DecimalLiteral +HexIntegerLiteral +OctalIntegerLiteral +OctalIntegerLiteral2 +BinaryIntegerLiteral +BigHexIntegerLiteral +BigOctalIntegerLiteral +BigBinaryIntegerLiteral +BigDecimalIntegerLiteral +Break +Do +Instanceof +Typeof +Case +Else +New +Var +Catch +Finally +Return +Void +Continue +For +Switch +While +Debugger +Function_ +This +With +Default +If +Throw +Delete +In +Try +As +From +Of +Yield +YieldStar +Class +Enum +Extends +Super +Const +Export +Import +Async +Await +Implements +StrictLet +NonStrictLet +Private +Public +Interface +Package +Protected +Static +Identifier +StringLiteral +BackTick +WhiteSpaces +LineTerminator +HtmlComment +CDataComment +UnexpectedCharacter +TemplateStringStartExpression +TemplateStringAtom + +rule names: +HashBangLine +MultiLineComment +SingleLineComment +RegularExpressionLiteral +OpenBracket +CloseBracket +OpenParen +CloseParen +OpenBrace +TemplateCloseBrace +CloseBrace +SemiColon +Comma +Assign +QuestionMark +QuestionMarkDot +Colon +Ellipsis +Dot +PlusPlus +MinusMinus +Plus +Minus +BitNot +Not +Multiply +Divide +Modulus +Power +NullCoalesce +Hashtag +RightShiftArithmetic +LeftShiftArithmetic +RightShiftLogical +LessThan +MoreThan +LessThanEquals +GreaterThanEquals +Equals_ +NotEquals +IdentityEquals +IdentityNotEquals +BitAnd +BitXOr +BitOr +And +Or +MultiplyAssign +DivideAssign +ModulusAssign +PlusAssign +MinusAssign +LeftShiftArithmeticAssign +RightShiftArithmeticAssign +RightShiftLogicalAssign +BitAndAssign +BitXorAssign +BitOrAssign +PowerAssign +NullishCoalescingAssign +ARROW +NullLiteral +BooleanLiteral +DecimalLiteral +HexIntegerLiteral +OctalIntegerLiteral +OctalIntegerLiteral2 +BinaryIntegerLiteral +BigHexIntegerLiteral +BigOctalIntegerLiteral +BigBinaryIntegerLiteral +BigDecimalIntegerLiteral +Break +Do +Instanceof +Typeof +Case +Else +New +Var +Catch +Finally +Return +Void +Continue +For +Switch +While +Debugger +Function_ +This +With +Default +If +Throw +Delete +In +Try +As +From +Of +Yield +YieldStar +Class +Enum +Extends +Super +Const +Export +Import +Async +Await +Implements +StrictLet +NonStrictLet +Private +Public +Interface +Package +Protected +Static +Identifier +StringLiteral +BackTick +WhiteSpaces +LineTerminator +HtmlComment +CDataComment +UnexpectedCharacter +BackTickInside +TemplateStringStartExpression +TemplateStringAtom +DoubleStringCharacter +SingleStringCharacter +EscapeSequence +CharacterEscapeSequence +HexEscapeSequence +UnicodeEscapeSequence +ExtendedUnicodeEscapeSequence +SingleEscapeCharacter +NonEscapeCharacter +EscapeCharacter +LineContinuation +HexDigit +DecimalIntegerLiteral +ExponentPart +IdentifierPart +IdentifierStart +RegularExpressionFirstChar +RegularExpressionChar +RegularExpressionClassChar +RegularExpressionBackslashSequence + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN +null +null +ERROR + +mode names: +DEFAULT_MODE +TEMPLATE + +atn: +[4, 0, 131, 1186, 6, -1, 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, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 312, 8, 0, 10, 0, 12, 0, 315, 9, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 321, 8, 1, 10, 1, 12, 1, 324, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 335, 8, 2, 10, 2, 12, 2, 338, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 5, 3, 345, 8, 3, 10, 3, 12, 3, 348, 9, 3, 1, 3, 1, 3, 1, 3, 5, 3, 353, 8, 3, 10, 3, 12, 3, 356, 9, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 533, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 5, 63, 539, 8, 63, 10, 63, 12, 63, 542, 9, 63, 1, 63, 3, 63, 545, 8, 63, 1, 63, 1, 63, 1, 63, 5, 63, 550, 8, 63, 10, 63, 12, 63, 553, 9, 63, 1, 63, 3, 63, 556, 8, 63, 1, 63, 1, 63, 3, 63, 560, 8, 63, 3, 63, 562, 8, 63, 1, 64, 1, 64, 1, 64, 1, 64, 5, 64, 568, 8, 64, 10, 64, 12, 64, 571, 9, 64, 1, 65, 1, 65, 4, 65, 575, 8, 65, 11, 65, 12, 65, 576, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 5, 66, 585, 8, 66, 10, 66, 12, 66, 588, 9, 66, 1, 67, 1, 67, 1, 67, 1, 67, 5, 67, 594, 8, 67, 10, 67, 12, 67, 597, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 603, 8, 68, 10, 68, 12, 68, 606, 9, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 5, 69, 614, 8, 69, 10, 69, 12, 69, 617, 9, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 5, 70, 625, 8, 70, 10, 70, 12, 70, 628, 9, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 5, 121, 961, 8, 121, 10, 121, 12, 121, 964, 9, 121, 1, 122, 1, 122, 5, 122, 968, 8, 122, 10, 122, 12, 122, 971, 9, 122, 1, 122, 1, 122, 1, 122, 5, 122, 976, 8, 122, 10, 122, 12, 122, 979, 9, 122, 1, 122, 3, 122, 982, 8, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 4, 124, 991, 8, 124, 11, 124, 12, 124, 992, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 5, 126, 1007, 8, 126, 10, 126, 12, 126, 1010, 9, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 5, 127, 1029, 8, 127, 10, 127, 12, 127, 1032, 9, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1062, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1068, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1075, 8, 134, 1, 135, 1, 135, 3, 135, 1079, 8, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 4, 137, 1095, 8, 137, 11, 137, 12, 137, 1096, 1, 137, 1, 137, 3, 137, 1101, 8, 137, 1, 138, 1, 138, 1, 138, 4, 138, 1106, 8, 138, 11, 138, 12, 138, 1107, 1, 138, 1, 138, 1, 139, 1, 139, 1, 140, 1, 140, 1, 141, 1, 141, 3, 141, 1118, 8, 141, 1, 142, 1, 142, 4, 142, 1122, 8, 142, 11, 142, 12, 142, 1123, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 5, 144, 1131, 8, 144, 10, 144, 12, 144, 1134, 9, 144, 3, 144, 1136, 8, 144, 1, 145, 1, 145, 3, 145, 1140, 8, 145, 1, 145, 4, 145, 1143, 8, 145, 11, 145, 12, 145, 1144, 1, 146, 1, 146, 3, 146, 1149, 8, 146, 1, 147, 1, 147, 1, 147, 3, 147, 1154, 8, 147, 1, 148, 1, 148, 1, 148, 1, 148, 5, 148, 1160, 8, 148, 10, 148, 12, 148, 1163, 9, 148, 1, 148, 3, 148, 1166, 8, 148, 1, 149, 1, 149, 1, 149, 1, 149, 5, 149, 1172, 8, 149, 10, 149, 12, 149, 1175, 9, 149, 1, 149, 3, 149, 1178, 8, 149, 1, 150, 1, 150, 3, 150, 1182, 8, 150, 1, 151, 1, 151, 1, 151, 3, 322, 1008, 1030, 0, 152, 2, 1, 4, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18, 9, 20, 10, 22, 11, 24, 12, 26, 13, 28, 14, 30, 15, 32, 16, 34, 17, 36, 18, 38, 19, 40, 20, 42, 21, 44, 22, 46, 23, 48, 24, 50, 25, 52, 26, 54, 27, 56, 28, 58, 29, 60, 30, 62, 31, 64, 32, 66, 33, 68, 34, 70, 35, 72, 36, 74, 37, 76, 38, 78, 39, 80, 40, 82, 41, 84, 42, 86, 43, 88, 44, 90, 45, 92, 46, 94, 47, 96, 48, 98, 49, 100, 50, 102, 51, 104, 52, 106, 53, 108, 54, 110, 55, 112, 56, 114, 57, 116, 58, 118, 59, 120, 60, 122, 61, 124, 62, 126, 63, 128, 64, 130, 65, 132, 66, 134, 67, 136, 68, 138, 69, 140, 70, 142, 71, 144, 72, 146, 73, 148, 74, 150, 75, 152, 76, 154, 77, 156, 78, 158, 79, 160, 80, 162, 81, 164, 82, 166, 83, 168, 84, 170, 85, 172, 86, 174, 87, 176, 88, 178, 89, 180, 90, 182, 91, 184, 92, 186, 93, 188, 94, 190, 95, 192, 96, 194, 97, 196, 98, 198, 99, 200, 100, 202, 101, 204, 102, 206, 103, 208, 104, 210, 105, 212, 106, 214, 107, 216, 108, 218, 109, 220, 110, 222, 111, 224, 112, 226, 113, 228, 114, 230, 115, 232, 116, 234, 117, 236, 118, 238, 119, 240, 120, 242, 121, 244, 122, 246, 123, 248, 124, 250, 125, 252, 126, 254, 127, 256, 128, 258, 129, 260, 0, 262, 130, 264, 131, 266, 0, 268, 0, 270, 0, 272, 0, 274, 0, 276, 0, 278, 0, 280, 0, 282, 0, 284, 0, 286, 0, 288, 0, 290, 0, 292, 0, 294, 0, 296, 0, 298, 0, 300, 0, 302, 0, 304, 0, 2, 0, 1, 27, 3, 0, 10, 10, 13, 13, 8232, 8233, 1, 0, 48, 57, 2, 0, 48, 57, 95, 95, 2, 0, 88, 88, 120, 120, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 48, 55, 2, 0, 79, 79, 111, 111, 2, 0, 48, 55, 95, 95, 2, 0, 66, 66, 98, 98, 1, 0, 48, 49, 2, 0, 48, 49, 95, 95, 4, 0, 9, 9, 11, 12, 32, 32, 160, 160, 1, 0, 96, 96, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92, 92, 9, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 12, 0, 10, 10, 13, 13, 34, 34, 39, 39, 48, 57, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 118, 120, 120, 3, 0, 48, 57, 117, 117, 120, 120, 4, 0, 48, 57, 65, 70, 95, 95, 97, 102, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 408, 0, 48, 57, 95, 95, 768, 879, 1155, 1159, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1552, 1562, 1611, 1641, 1648, 1648, 1750, 1756, 1759, 1764, 1767, 1768, 1770, 1773, 1776, 1785, 1809, 1809, 1840, 1866, 1958, 1968, 1984, 1993, 2027, 2035, 2045, 2045, 2070, 2073, 2075, 2083, 2085, 2087, 2089, 2093, 2137, 2139, 2200, 2207, 2250, 2273, 2275, 2306, 2362, 2362, 2364, 2364, 2369, 2376, 2381, 2381, 2385, 2391, 2402, 2403, 2406, 2415, 2433, 2433, 2492, 2492, 2497, 2500, 2509, 2509, 2530, 2531, 2534, 2543, 2558, 2558, 2561, 2562, 2620, 2620, 2625, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2662, 2673, 2677, 2677, 2689, 2690, 2748, 2748, 2753, 2757, 2759, 2760, 2765, 2765, 2786, 2787, 2790, 2799, 2810, 2815, 2817, 2817, 2876, 2876, 2879, 2879, 2881, 2884, 2893, 2893, 2901, 2902, 2914, 2915, 2918, 2927, 2946, 2946, 3008, 3008, 3021, 3021, 3046, 3055, 3072, 3072, 3076, 3076, 3132, 3132, 3134, 3136, 3142, 3144, 3146, 3149, 3157, 3158, 3170, 3171, 3174, 3183, 3201, 3201, 3260, 3260, 3263, 3263, 3270, 3270, 3276, 3277, 3298, 3299, 3302, 3311, 3328, 3329, 3387, 3388, 3393, 3396, 3405, 3405, 3426, 3427, 3430, 3439, 3457, 3457, 3530, 3530, 3538, 3540, 3542, 3542, 3558, 3567, 3633, 3633, 3636, 3642, 3655, 3662, 3664, 3673, 3761, 3761, 3764, 3772, 3784, 3790, 3792, 3801, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3953, 3966, 3968, 3972, 3974, 3975, 3981, 3991, 3993, 4028, 4038, 4038, 4141, 4144, 4146, 4151, 4153, 4154, 4157, 4158, 4160, 4169, 4184, 4185, 4190, 4192, 4209, 4212, 4226, 4226, 4229, 4230, 4237, 4237, 4240, 4249, 4253, 4253, 4957, 4959, 5906, 5908, 5938, 5939, 5970, 5971, 6002, 6003, 6068, 6069, 6071, 6077, 6086, 6086, 6089, 6099, 6109, 6109, 6112, 6121, 6155, 6157, 6159, 6169, 6277, 6278, 6313, 6313, 6432, 6434, 6439, 6440, 6450, 6450, 6457, 6459, 6470, 6479, 6608, 6617, 6679, 6680, 6683, 6683, 6742, 6742, 6744, 6750, 6752, 6752, 6754, 6754, 6757, 6764, 6771, 6780, 6783, 6793, 6800, 6809, 6832, 6845, 6847, 6862, 6912, 6915, 6964, 6964, 6966, 6970, 6972, 6972, 6978, 6978, 6992, 7001, 7019, 7027, 7040, 7041, 7074, 7077, 7080, 7081, 7083, 7085, 7088, 7097, 7142, 7142, 7144, 7145, 7149, 7149, 7151, 7153, 7212, 7219, 7222, 7223, 7232, 7241, 7248, 7257, 7376, 7378, 7380, 7392, 7394, 7400, 7405, 7405, 7412, 7412, 7416, 7417, 7616, 7679, 8204, 8205, 8255, 8256, 8276, 8276, 8400, 8412, 8417, 8417, 8421, 8432, 11503, 11505, 11647, 11647, 11744, 11775, 12330, 12333, 12441, 12442, 42528, 42537, 42607, 42607, 42612, 42621, 42654, 42655, 42736, 42737, 43010, 43010, 43014, 43014, 43019, 43019, 43045, 43046, 43052, 43052, 43204, 43205, 43216, 43225, 43232, 43249, 43263, 43273, 43302, 43309, 43335, 43345, 43392, 43394, 43443, 43443, 43446, 43449, 43452, 43453, 43472, 43481, 43493, 43493, 43504, 43513, 43561, 43566, 43569, 43570, 43573, 43574, 43587, 43587, 43596, 43596, 43600, 43609, 43644, 43644, 43696, 43696, 43698, 43700, 43703, 43704, 43710, 43711, 43713, 43713, 43756, 43757, 43766, 43766, 44005, 44005, 44008, 44008, 44013, 44013, 44016, 44025, 64286, 64286, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65296, 65305, 65343, 65343, 66045, 66045, 66272, 66272, 66422, 66426, 66720, 66729, 68097, 68099, 68101, 68102, 68108, 68111, 68152, 68154, 68159, 68159, 68325, 68326, 68900, 68903, 68912, 68921, 69291, 69292, 69373, 69375, 69446, 69456, 69506, 69509, 69633, 69633, 69688, 69702, 69734, 69744, 69747, 69748, 69759, 69761, 69811, 69814, 69817, 69818, 69826, 69826, 69872, 69881, 69888, 69890, 69927, 69931, 69933, 69940, 69942, 69951, 70003, 70003, 70016, 70017, 70070, 70078, 70089, 70092, 70095, 70105, 70191, 70193, 70196, 70196, 70198, 70199, 70206, 70206, 70209, 70209, 70367, 70367, 70371, 70378, 70384, 70393, 70400, 70401, 70459, 70460, 70464, 70464, 70502, 70508, 70512, 70516, 70712, 70719, 70722, 70724, 70726, 70726, 70736, 70745, 70750, 70750, 70835, 70840, 70842, 70842, 70847, 70848, 70850, 70851, 70864, 70873, 71090, 71093, 71100, 71101, 71103, 71104, 71132, 71133, 71219, 71226, 71229, 71229, 71231, 71232, 71248, 71257, 71339, 71339, 71341, 71341, 71344, 71349, 71351, 71351, 71360, 71369, 71453, 71455, 71458, 71461, 71463, 71467, 71472, 71481, 71727, 71735, 71737, 71738, 71904, 71913, 71995, 71996, 71998, 71998, 72003, 72003, 72016, 72025, 72148, 72151, 72154, 72155, 72160, 72160, 72193, 72202, 72243, 72248, 72251, 72254, 72263, 72263, 72273, 72278, 72281, 72283, 72330, 72342, 72344, 72345, 72752, 72758, 72760, 72765, 72767, 72767, 72784, 72793, 72850, 72871, 72874, 72880, 72882, 72883, 72885, 72886, 73009, 73014, 73018, 73018, 73020, 73021, 73023, 73029, 73031, 73031, 73040, 73049, 73104, 73105, 73109, 73109, 73111, 73111, 73120, 73129, 73459, 73460, 73472, 73473, 73526, 73530, 73536, 73536, 73538, 73538, 73552, 73561, 78912, 78912, 78919, 78933, 92768, 92777, 92864, 92873, 92912, 92916, 92976, 92982, 93008, 93017, 94031, 94031, 94095, 94098, 94180, 94180, 113821, 113822, 118528, 118573, 118576, 118598, 119143, 119145, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 123023, 123023, 123184, 123190, 123200, 123209, 123566, 123566, 123628, 123641, 124140, 124153, 125136, 125142, 125252, 125258, 125264, 125273, 130032, 130041, 917760, 917999, 661, 0, 36, 36, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2160, 2183, 2185, 2190, 2208, 2249, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3165, 3165, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3293, 3294, 3296, 3297, 3313, 3314, 3332, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5873, 5880, 5888, 5905, 5919, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6276, 6279, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6988, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8579, 8580, 11264, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12294, 12337, 12341, 12347, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42725, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66368, 66370, 66377, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69248, 69289, 69296, 69297, 69376, 69404, 69415, 69415, 69424, 69445, 69488, 69505, 69552, 69572, 69600, 69622, 69635, 69687, 69745, 69746, 69749, 69749, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69959, 69959, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70207, 70208, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70753, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71488, 71494, 71680, 71723, 71840, 71903, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71983, 71999, 71999, 72001, 72001, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73474, 73474, 73476, 73488, 73490, 73523, 73648, 73648, 73728, 74649, 74880, 75075, 77712, 77808, 77824, 78895, 78913, 78918, 82944, 83526, 92160, 92728, 92736, 92766, 92784, 92862, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 122624, 122654, 122661, 122666, 122928, 122989, 123136, 123180, 123191, 123197, 123214, 123214, 123536, 123565, 123584, 123627, 124112, 124139, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 194560, 195101, 196608, 201546, 201552, 205743, 6, 0, 10, 10, 13, 13, 42, 42, 47, 47, 91, 92, 8232, 8233, 5, 0, 10, 10, 13, 13, 47, 47, 91, 92, 8232, 8233, 4, 0, 10, 10, 13, 13, 92, 93, 8232, 8233, 1218, 0, 2, 1, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 30, 1, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 36, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 102, 1, 0, 0, 0, 0, 104, 1, 0, 0, 0, 0, 106, 1, 0, 0, 0, 0, 108, 1, 0, 0, 0, 0, 110, 1, 0, 0, 0, 0, 112, 1, 0, 0, 0, 0, 114, 1, 0, 0, 0, 0, 116, 1, 0, 0, 0, 0, 118, 1, 0, 0, 0, 0, 120, 1, 0, 0, 0, 0, 122, 1, 0, 0, 0, 0, 124, 1, 0, 0, 0, 0, 126, 1, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 130, 1, 0, 0, 0, 0, 132, 1, 0, 0, 0, 0, 134, 1, 0, 0, 0, 0, 136, 1, 0, 0, 0, 0, 138, 1, 0, 0, 0, 0, 140, 1, 0, 0, 0, 0, 142, 1, 0, 0, 0, 0, 144, 1, 0, 0, 0, 0, 146, 1, 0, 0, 0, 0, 148, 1, 0, 0, 0, 0, 150, 1, 0, 0, 0, 0, 152, 1, 0, 0, 0, 0, 154, 1, 0, 0, 0, 0, 156, 1, 0, 0, 0, 0, 158, 1, 0, 0, 0, 0, 160, 1, 0, 0, 0, 0, 162, 1, 0, 0, 0, 0, 164, 1, 0, 0, 0, 0, 166, 1, 0, 0, 0, 0, 168, 1, 0, 0, 0, 0, 170, 1, 0, 0, 0, 0, 172, 1, 0, 0, 0, 0, 174, 1, 0, 0, 0, 0, 176, 1, 0, 0, 0, 0, 178, 1, 0, 0, 0, 0, 180, 1, 0, 0, 0, 0, 182, 1, 0, 0, 0, 0, 184, 1, 0, 0, 0, 0, 186, 1, 0, 0, 0, 0, 188, 1, 0, 0, 0, 0, 190, 1, 0, 0, 0, 0, 192, 1, 0, 0, 0, 0, 194, 1, 0, 0, 0, 0, 196, 1, 0, 0, 0, 0, 198, 1, 0, 0, 0, 0, 200, 1, 0, 0, 0, 0, 202, 1, 0, 0, 0, 0, 204, 1, 0, 0, 0, 0, 206, 1, 0, 0, 0, 0, 208, 1, 0, 0, 0, 0, 210, 1, 0, 0, 0, 0, 212, 1, 0, 0, 0, 0, 214, 1, 0, 0, 0, 0, 216, 1, 0, 0, 0, 0, 218, 1, 0, 0, 0, 0, 220, 1, 0, 0, 0, 0, 222, 1, 0, 0, 0, 0, 224, 1, 0, 0, 0, 0, 226, 1, 0, 0, 0, 0, 228, 1, 0, 0, 0, 0, 230, 1, 0, 0, 0, 0, 232, 1, 0, 0, 0, 0, 234, 1, 0, 0, 0, 0, 236, 1, 0, 0, 0, 0, 238, 1, 0, 0, 0, 0, 240, 1, 0, 0, 0, 0, 242, 1, 0, 0, 0, 0, 244, 1, 0, 0, 0, 0, 246, 1, 0, 0, 0, 0, 248, 1, 0, 0, 0, 0, 250, 1, 0, 0, 0, 0, 252, 1, 0, 0, 0, 0, 254, 1, 0, 0, 0, 0, 256, 1, 0, 0, 0, 0, 258, 1, 0, 0, 0, 1, 260, 1, 0, 0, 0, 1, 262, 1, 0, 0, 0, 1, 264, 1, 0, 0, 0, 2, 306, 1, 0, 0, 0, 4, 316, 1, 0, 0, 0, 6, 330, 1, 0, 0, 0, 8, 341, 1, 0, 0, 0, 10, 357, 1, 0, 0, 0, 12, 359, 1, 0, 0, 0, 14, 361, 1, 0, 0, 0, 16, 363, 1, 0, 0, 0, 18, 365, 1, 0, 0, 0, 20, 368, 1, 0, 0, 0, 22, 374, 1, 0, 0, 0, 24, 377, 1, 0, 0, 0, 26, 379, 1, 0, 0, 0, 28, 381, 1, 0, 0, 0, 30, 383, 1, 0, 0, 0, 32, 385, 1, 0, 0, 0, 34, 388, 1, 0, 0, 0, 36, 390, 1, 0, 0, 0, 38, 394, 1, 0, 0, 0, 40, 396, 1, 0, 0, 0, 42, 399, 1, 0, 0, 0, 44, 402, 1, 0, 0, 0, 46, 404, 1, 0, 0, 0, 48, 406, 1, 0, 0, 0, 50, 408, 1, 0, 0, 0, 52, 410, 1, 0, 0, 0, 54, 412, 1, 0, 0, 0, 56, 414, 1, 0, 0, 0, 58, 416, 1, 0, 0, 0, 60, 419, 1, 0, 0, 0, 62, 422, 1, 0, 0, 0, 64, 424, 1, 0, 0, 0, 66, 427, 1, 0, 0, 0, 68, 430, 1, 0, 0, 0, 70, 434, 1, 0, 0, 0, 72, 436, 1, 0, 0, 0, 74, 438, 1, 0, 0, 0, 76, 441, 1, 0, 0, 0, 78, 444, 1, 0, 0, 0, 80, 447, 1, 0, 0, 0, 82, 450, 1, 0, 0, 0, 84, 454, 1, 0, 0, 0, 86, 458, 1, 0, 0, 0, 88, 460, 1, 0, 0, 0, 90, 462, 1, 0, 0, 0, 92, 464, 1, 0, 0, 0, 94, 467, 1, 0, 0, 0, 96, 470, 1, 0, 0, 0, 98, 473, 1, 0, 0, 0, 100, 476, 1, 0, 0, 0, 102, 479, 1, 0, 0, 0, 104, 482, 1, 0, 0, 0, 106, 485, 1, 0, 0, 0, 108, 489, 1, 0, 0, 0, 110, 493, 1, 0, 0, 0, 112, 498, 1, 0, 0, 0, 114, 501, 1, 0, 0, 0, 116, 504, 1, 0, 0, 0, 118, 507, 1, 0, 0, 0, 120, 511, 1, 0, 0, 0, 122, 515, 1, 0, 0, 0, 124, 518, 1, 0, 0, 0, 126, 532, 1, 0, 0, 0, 128, 561, 1, 0, 0, 0, 130, 563, 1, 0, 0, 0, 132, 572, 1, 0, 0, 0, 134, 580, 1, 0, 0, 0, 136, 589, 1, 0, 0, 0, 138, 598, 1, 0, 0, 0, 140, 609, 1, 0, 0, 0, 142, 620, 1, 0, 0, 0, 144, 631, 1, 0, 0, 0, 146, 634, 1, 0, 0, 0, 148, 640, 1, 0, 0, 0, 150, 643, 1, 0, 0, 0, 152, 654, 1, 0, 0, 0, 154, 661, 1, 0, 0, 0, 156, 666, 1, 0, 0, 0, 158, 671, 1, 0, 0, 0, 160, 675, 1, 0, 0, 0, 162, 679, 1, 0, 0, 0, 164, 685, 1, 0, 0, 0, 166, 693, 1, 0, 0, 0, 168, 700, 1, 0, 0, 0, 170, 705, 1, 0, 0, 0, 172, 714, 1, 0, 0, 0, 174, 718, 1, 0, 0, 0, 176, 725, 1, 0, 0, 0, 178, 731, 1, 0, 0, 0, 180, 740, 1, 0, 0, 0, 182, 749, 1, 0, 0, 0, 184, 754, 1, 0, 0, 0, 186, 759, 1, 0, 0, 0, 188, 767, 1, 0, 0, 0, 190, 770, 1, 0, 0, 0, 192, 776, 1, 0, 0, 0, 194, 783, 1, 0, 0, 0, 196, 786, 1, 0, 0, 0, 198, 790, 1, 0, 0, 0, 200, 793, 1, 0, 0, 0, 202, 798, 1, 0, 0, 0, 204, 801, 1, 0, 0, 0, 206, 807, 1, 0, 0, 0, 208, 814, 1, 0, 0, 0, 210, 820, 1, 0, 0, 0, 212, 825, 1, 0, 0, 0, 214, 833, 1, 0, 0, 0, 216, 839, 1, 0, 0, 0, 218, 845, 1, 0, 0, 0, 220, 852, 1, 0, 0, 0, 222, 859, 1, 0, 0, 0, 224, 865, 1, 0, 0, 0, 226, 871, 1, 0, 0, 0, 228, 884, 1, 0, 0, 0, 230, 890, 1, 0, 0, 0, 232, 896, 1, 0, 0, 0, 234, 906, 1, 0, 0, 0, 236, 915, 1, 0, 0, 0, 238, 927, 1, 0, 0, 0, 240, 937, 1, 0, 0, 0, 242, 949, 1, 0, 0, 0, 244, 958, 1, 0, 0, 0, 246, 981, 1, 0, 0, 0, 248, 985, 1, 0, 0, 0, 250, 990, 1, 0, 0, 0, 252, 996, 1, 0, 0, 0, 254, 1000, 1, 0, 0, 0, 256, 1017, 1, 0, 0, 0, 258, 1039, 1, 0, 0, 0, 260, 1043, 1, 0, 0, 0, 262, 1048, 1, 0, 0, 0, 264, 1055, 1, 0, 0, 0, 266, 1061, 1, 0, 0, 0, 268, 1067, 1, 0, 0, 0, 270, 1074, 1, 0, 0, 0, 272, 1078, 1, 0, 0, 0, 274, 1080, 1, 0, 0, 0, 276, 1100, 1, 0, 0, 0, 278, 1102, 1, 0, 0, 0, 280, 1111, 1, 0, 0, 0, 282, 1113, 1, 0, 0, 0, 284, 1117, 1, 0, 0, 0, 286, 1119, 1, 0, 0, 0, 288, 1125, 1, 0, 0, 0, 290, 1135, 1, 0, 0, 0, 292, 1137, 1, 0, 0, 0, 294, 1148, 1, 0, 0, 0, 296, 1153, 1, 0, 0, 0, 298, 1165, 1, 0, 0, 0, 300, 1177, 1, 0, 0, 0, 302, 1181, 1, 0, 0, 0, 304, 1183, 1, 0, 0, 0, 306, 307, 4, 0, 0, 0, 307, 308, 5, 35, 0, 0, 308, 309, 5, 33, 0, 0, 309, 313, 1, 0, 0, 0, 310, 312, 8, 0, 0, 0, 311, 310, 1, 0, 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 3, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 317, 5, 47, 0, 0, 317, 318, 5, 42, 0, 0, 318, 322, 1, 0, 0, 0, 319, 321, 9, 0, 0, 0, 320, 319, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 325, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 326, 5, 42, 0, 0, 326, 327, 5, 47, 0, 0, 327, 328, 1, 0, 0, 0, 328, 329, 6, 1, 0, 0, 329, 5, 1, 0, 0, 0, 330, 331, 5, 47, 0, 0, 331, 332, 5, 47, 0, 0, 332, 336, 1, 0, 0, 0, 333, 335, 8, 0, 0, 0, 334, 333, 1, 0, 0, 0, 335, 338, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 337, 339, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 339, 340, 6, 2, 0, 0, 340, 7, 1, 0, 0, 0, 341, 342, 5, 47, 0, 0, 342, 346, 3, 298, 148, 0, 343, 345, 3, 300, 149, 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, 349, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 350, 4, 3, 1, 0, 350, 354, 5, 47, 0, 0, 351, 353, 3, 294, 146, 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, 9, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 358, 5, 91, 0, 0, 358, 11, 1, 0, 0, 0, 359, 360, 5, 93, 0, 0, 360, 13, 1, 0, 0, 0, 361, 362, 5, 40, 0, 0, 362, 15, 1, 0, 0, 0, 363, 364, 5, 41, 0, 0, 364, 17, 1, 0, 0, 0, 365, 366, 5, 123, 0, 0, 366, 367, 6, 8, 1, 0, 367, 19, 1, 0, 0, 0, 368, 369, 4, 9, 2, 0, 369, 370, 5, 125, 0, 0, 370, 371, 6, 9, 2, 0, 371, 372, 1, 0, 0, 0, 372, 373, 6, 9, 3, 0, 373, 21, 1, 0, 0, 0, 374, 375, 5, 125, 0, 0, 375, 376, 6, 10, 4, 0, 376, 23, 1, 0, 0, 0, 377, 378, 5, 59, 0, 0, 378, 25, 1, 0, 0, 0, 379, 380, 5, 44, 0, 0, 380, 27, 1, 0, 0, 0, 381, 382, 5, 61, 0, 0, 382, 29, 1, 0, 0, 0, 383, 384, 5, 63, 0, 0, 384, 31, 1, 0, 0, 0, 385, 386, 5, 63, 0, 0, 386, 387, 5, 46, 0, 0, 387, 33, 1, 0, 0, 0, 388, 389, 5, 58, 0, 0, 389, 35, 1, 0, 0, 0, 390, 391, 5, 46, 0, 0, 391, 392, 5, 46, 0, 0, 392, 393, 5, 46, 0, 0, 393, 37, 1, 0, 0, 0, 394, 395, 5, 46, 0, 0, 395, 39, 1, 0, 0, 0, 396, 397, 5, 43, 0, 0, 397, 398, 5, 43, 0, 0, 398, 41, 1, 0, 0, 0, 399, 400, 5, 45, 0, 0, 400, 401, 5, 45, 0, 0, 401, 43, 1, 0, 0, 0, 402, 403, 5, 43, 0, 0, 403, 45, 1, 0, 0, 0, 404, 405, 5, 45, 0, 0, 405, 47, 1, 0, 0, 0, 406, 407, 5, 126, 0, 0, 407, 49, 1, 0, 0, 0, 408, 409, 5, 33, 0, 0, 409, 51, 1, 0, 0, 0, 410, 411, 5, 42, 0, 0, 411, 53, 1, 0, 0, 0, 412, 413, 5, 47, 0, 0, 413, 55, 1, 0, 0, 0, 414, 415, 5, 37, 0, 0, 415, 57, 1, 0, 0, 0, 416, 417, 5, 42, 0, 0, 417, 418, 5, 42, 0, 0, 418, 59, 1, 0, 0, 0, 419, 420, 5, 63, 0, 0, 420, 421, 5, 63, 0, 0, 421, 61, 1, 0, 0, 0, 422, 423, 5, 35, 0, 0, 423, 63, 1, 0, 0, 0, 424, 425, 5, 62, 0, 0, 425, 426, 5, 62, 0, 0, 426, 65, 1, 0, 0, 0, 427, 428, 5, 60, 0, 0, 428, 429, 5, 60, 0, 0, 429, 67, 1, 0, 0, 0, 430, 431, 5, 62, 0, 0, 431, 432, 5, 62, 0, 0, 432, 433, 5, 62, 0, 0, 433, 69, 1, 0, 0, 0, 434, 435, 5, 60, 0, 0, 435, 71, 1, 0, 0, 0, 436, 437, 5, 62, 0, 0, 437, 73, 1, 0, 0, 0, 438, 439, 5, 60, 0, 0, 439, 440, 5, 61, 0, 0, 440, 75, 1, 0, 0, 0, 441, 442, 5, 62, 0, 0, 442, 443, 5, 61, 0, 0, 443, 77, 1, 0, 0, 0, 444, 445, 5, 61, 0, 0, 445, 446, 5, 61, 0, 0, 446, 79, 1, 0, 0, 0, 447, 448, 5, 33, 0, 0, 448, 449, 5, 61, 0, 0, 449, 81, 1, 0, 0, 0, 450, 451, 5, 61, 0, 0, 451, 452, 5, 61, 0, 0, 452, 453, 5, 61, 0, 0, 453, 83, 1, 0, 0, 0, 454, 455, 5, 33, 0, 0, 455, 456, 5, 61, 0, 0, 456, 457, 5, 61, 0, 0, 457, 85, 1, 0, 0, 0, 458, 459, 5, 38, 0, 0, 459, 87, 1, 0, 0, 0, 460, 461, 5, 94, 0, 0, 461, 89, 1, 0, 0, 0, 462, 463, 5, 124, 0, 0, 463, 91, 1, 0, 0, 0, 464, 465, 5, 38, 0, 0, 465, 466, 5, 38, 0, 0, 466, 93, 1, 0, 0, 0, 467, 468, 5, 124, 0, 0, 468, 469, 5, 124, 0, 0, 469, 95, 1, 0, 0, 0, 470, 471, 5, 42, 0, 0, 471, 472, 5, 61, 0, 0, 472, 97, 1, 0, 0, 0, 473, 474, 5, 47, 0, 0, 474, 475, 5, 61, 0, 0, 475, 99, 1, 0, 0, 0, 476, 477, 5, 37, 0, 0, 477, 478, 5, 61, 0, 0, 478, 101, 1, 0, 0, 0, 479, 480, 5, 43, 0, 0, 480, 481, 5, 61, 0, 0, 481, 103, 1, 0, 0, 0, 482, 483, 5, 45, 0, 0, 483, 484, 5, 61, 0, 0, 484, 105, 1, 0, 0, 0, 485, 486, 5, 60, 0, 0, 486, 487, 5, 60, 0, 0, 487, 488, 5, 61, 0, 0, 488, 107, 1, 0, 0, 0, 489, 490, 5, 62, 0, 0, 490, 491, 5, 62, 0, 0, 491, 492, 5, 61, 0, 0, 492, 109, 1, 0, 0, 0, 493, 494, 5, 62, 0, 0, 494, 495, 5, 62, 0, 0, 495, 496, 5, 62, 0, 0, 496, 497, 5, 61, 0, 0, 497, 111, 1, 0, 0, 0, 498, 499, 5, 38, 0, 0, 499, 500, 5, 61, 0, 0, 500, 113, 1, 0, 0, 0, 501, 502, 5, 94, 0, 0, 502, 503, 5, 61, 0, 0, 503, 115, 1, 0, 0, 0, 504, 505, 5, 124, 0, 0, 505, 506, 5, 61, 0, 0, 506, 117, 1, 0, 0, 0, 507, 508, 5, 42, 0, 0, 508, 509, 5, 42, 0, 0, 509, 510, 5, 61, 0, 0, 510, 119, 1, 0, 0, 0, 511, 512, 5, 63, 0, 0, 512, 513, 5, 63, 0, 0, 513, 514, 5, 61, 0, 0, 514, 121, 1, 0, 0, 0, 515, 516, 5, 61, 0, 0, 516, 517, 5, 62, 0, 0, 517, 123, 1, 0, 0, 0, 518, 519, 5, 110, 0, 0, 519, 520, 5, 117, 0, 0, 520, 521, 5, 108, 0, 0, 521, 522, 5, 108, 0, 0, 522, 125, 1, 0, 0, 0, 523, 524, 5, 116, 0, 0, 524, 525, 5, 114, 0, 0, 525, 526, 5, 117, 0, 0, 526, 533, 5, 101, 0, 0, 527, 528, 5, 102, 0, 0, 528, 529, 5, 97, 0, 0, 529, 530, 5, 108, 0, 0, 530, 531, 5, 115, 0, 0, 531, 533, 5, 101, 0, 0, 532, 523, 1, 0, 0, 0, 532, 527, 1, 0, 0, 0, 533, 127, 1, 0, 0, 0, 534, 535, 3, 290, 144, 0, 535, 536, 5, 46, 0, 0, 536, 540, 7, 1, 0, 0, 537, 539, 7, 2, 0, 0, 538, 537, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 543, 545, 3, 292, 145, 0, 544, 543, 1, 0, 0, 0, 544, 545, 1, 0, 0, 0, 545, 562, 1, 0, 0, 0, 546, 547, 5, 46, 0, 0, 547, 551, 7, 1, 0, 0, 548, 550, 7, 2, 0, 0, 549, 548, 1, 0, 0, 0, 550, 553, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 555, 1, 0, 0, 0, 553, 551, 1, 0, 0, 0, 554, 556, 3, 292, 145, 0, 555, 554, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 562, 1, 0, 0, 0, 557, 559, 3, 290, 144, 0, 558, 560, 3, 292, 145, 0, 559, 558, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 562, 1, 0, 0, 0, 561, 534, 1, 0, 0, 0, 561, 546, 1, 0, 0, 0, 561, 557, 1, 0, 0, 0, 562, 129, 1, 0, 0, 0, 563, 564, 5, 48, 0, 0, 564, 565, 7, 3, 0, 0, 565, 569, 7, 4, 0, 0, 566, 568, 3, 288, 143, 0, 567, 566, 1, 0, 0, 0, 568, 571, 1, 0, 0, 0, 569, 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 131, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 572, 574, 5, 48, 0, 0, 573, 575, 7, 5, 0, 0, 574, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 4, 65, 3, 0, 579, 133, 1, 0, 0, 0, 580, 581, 5, 48, 0, 0, 581, 582, 7, 6, 0, 0, 582, 586, 7, 5, 0, 0, 583, 585, 7, 7, 0, 0, 584, 583, 1, 0, 0, 0, 585, 588, 1, 0, 0, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 135, 1, 0, 0, 0, 588, 586, 1, 0, 0, 0, 589, 590, 5, 48, 0, 0, 590, 591, 7, 8, 0, 0, 591, 595, 7, 9, 0, 0, 592, 594, 7, 10, 0, 0, 593, 592, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 137, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 5, 48, 0, 0, 599, 600, 7, 3, 0, 0, 600, 604, 7, 4, 0, 0, 601, 603, 3, 288, 143, 0, 602, 601, 1, 0, 0, 0, 603, 606, 1, 0, 0, 0, 604, 602, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 607, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 607, 608, 5, 110, 0, 0, 608, 139, 1, 0, 0, 0, 609, 610, 5, 48, 0, 0, 610, 611, 7, 6, 0, 0, 611, 615, 7, 5, 0, 0, 612, 614, 7, 7, 0, 0, 613, 612, 1, 0, 0, 0, 614, 617, 1, 0, 0, 0, 615, 613, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 618, 1, 0, 0, 0, 617, 615, 1, 0, 0, 0, 618, 619, 5, 110, 0, 0, 619, 141, 1, 0, 0, 0, 620, 621, 5, 48, 0, 0, 621, 622, 7, 8, 0, 0, 622, 626, 7, 9, 0, 0, 623, 625, 7, 10, 0, 0, 624, 623, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 5, 110, 0, 0, 630, 143, 1, 0, 0, 0, 631, 632, 3, 290, 144, 0, 632, 633, 5, 110, 0, 0, 633, 145, 1, 0, 0, 0, 634, 635, 5, 98, 0, 0, 635, 636, 5, 114, 0, 0, 636, 637, 5, 101, 0, 0, 637, 638, 5, 97, 0, 0, 638, 639, 5, 107, 0, 0, 639, 147, 1, 0, 0, 0, 640, 641, 5, 100, 0, 0, 641, 642, 5, 111, 0, 0, 642, 149, 1, 0, 0, 0, 643, 644, 5, 105, 0, 0, 644, 645, 5, 110, 0, 0, 645, 646, 5, 115, 0, 0, 646, 647, 5, 116, 0, 0, 647, 648, 5, 97, 0, 0, 648, 649, 5, 110, 0, 0, 649, 650, 5, 99, 0, 0, 650, 651, 5, 101, 0, 0, 651, 652, 5, 111, 0, 0, 652, 653, 5, 102, 0, 0, 653, 151, 1, 0, 0, 0, 654, 655, 5, 116, 0, 0, 655, 656, 5, 121, 0, 0, 656, 657, 5, 112, 0, 0, 657, 658, 5, 101, 0, 0, 658, 659, 5, 111, 0, 0, 659, 660, 5, 102, 0, 0, 660, 153, 1, 0, 0, 0, 661, 662, 5, 99, 0, 0, 662, 663, 5, 97, 0, 0, 663, 664, 5, 115, 0, 0, 664, 665, 5, 101, 0, 0, 665, 155, 1, 0, 0, 0, 666, 667, 5, 101, 0, 0, 667, 668, 5, 108, 0, 0, 668, 669, 5, 115, 0, 0, 669, 670, 5, 101, 0, 0, 670, 157, 1, 0, 0, 0, 671, 672, 5, 110, 0, 0, 672, 673, 5, 101, 0, 0, 673, 674, 5, 119, 0, 0, 674, 159, 1, 0, 0, 0, 675, 676, 5, 118, 0, 0, 676, 677, 5, 97, 0, 0, 677, 678, 5, 114, 0, 0, 678, 161, 1, 0, 0, 0, 679, 680, 5, 99, 0, 0, 680, 681, 5, 97, 0, 0, 681, 682, 5, 116, 0, 0, 682, 683, 5, 99, 0, 0, 683, 684, 5, 104, 0, 0, 684, 163, 1, 0, 0, 0, 685, 686, 5, 102, 0, 0, 686, 687, 5, 105, 0, 0, 687, 688, 5, 110, 0, 0, 688, 689, 5, 97, 0, 0, 689, 690, 5, 108, 0, 0, 690, 691, 5, 108, 0, 0, 691, 692, 5, 121, 0, 0, 692, 165, 1, 0, 0, 0, 693, 694, 5, 114, 0, 0, 694, 695, 5, 101, 0, 0, 695, 696, 5, 116, 0, 0, 696, 697, 5, 117, 0, 0, 697, 698, 5, 114, 0, 0, 698, 699, 5, 110, 0, 0, 699, 167, 1, 0, 0, 0, 700, 701, 5, 118, 0, 0, 701, 702, 5, 111, 0, 0, 702, 703, 5, 105, 0, 0, 703, 704, 5, 100, 0, 0, 704, 169, 1, 0, 0, 0, 705, 706, 5, 99, 0, 0, 706, 707, 5, 111, 0, 0, 707, 708, 5, 110, 0, 0, 708, 709, 5, 116, 0, 0, 709, 710, 5, 105, 0, 0, 710, 711, 5, 110, 0, 0, 711, 712, 5, 117, 0, 0, 712, 713, 5, 101, 0, 0, 713, 171, 1, 0, 0, 0, 714, 715, 5, 102, 0, 0, 715, 716, 5, 111, 0, 0, 716, 717, 5, 114, 0, 0, 717, 173, 1, 0, 0, 0, 718, 719, 5, 115, 0, 0, 719, 720, 5, 119, 0, 0, 720, 721, 5, 105, 0, 0, 721, 722, 5, 116, 0, 0, 722, 723, 5, 99, 0, 0, 723, 724, 5, 104, 0, 0, 724, 175, 1, 0, 0, 0, 725, 726, 5, 119, 0, 0, 726, 727, 5, 104, 0, 0, 727, 728, 5, 105, 0, 0, 728, 729, 5, 108, 0, 0, 729, 730, 5, 101, 0, 0, 730, 177, 1, 0, 0, 0, 731, 732, 5, 100, 0, 0, 732, 733, 5, 101, 0, 0, 733, 734, 5, 98, 0, 0, 734, 735, 5, 117, 0, 0, 735, 736, 5, 103, 0, 0, 736, 737, 5, 103, 0, 0, 737, 738, 5, 101, 0, 0, 738, 739, 5, 114, 0, 0, 739, 179, 1, 0, 0, 0, 740, 741, 5, 102, 0, 0, 741, 742, 5, 117, 0, 0, 742, 743, 5, 110, 0, 0, 743, 744, 5, 99, 0, 0, 744, 745, 5, 116, 0, 0, 745, 746, 5, 105, 0, 0, 746, 747, 5, 111, 0, 0, 747, 748, 5, 110, 0, 0, 748, 181, 1, 0, 0, 0, 749, 750, 5, 116, 0, 0, 750, 751, 5, 104, 0, 0, 751, 752, 5, 105, 0, 0, 752, 753, 5, 115, 0, 0, 753, 183, 1, 0, 0, 0, 754, 755, 5, 119, 0, 0, 755, 756, 5, 105, 0, 0, 756, 757, 5, 116, 0, 0, 757, 758, 5, 104, 0, 0, 758, 185, 1, 0, 0, 0, 759, 760, 5, 100, 0, 0, 760, 761, 5, 101, 0, 0, 761, 762, 5, 102, 0, 0, 762, 763, 5, 97, 0, 0, 763, 764, 5, 117, 0, 0, 764, 765, 5, 108, 0, 0, 765, 766, 5, 116, 0, 0, 766, 187, 1, 0, 0, 0, 767, 768, 5, 105, 0, 0, 768, 769, 5, 102, 0, 0, 769, 189, 1, 0, 0, 0, 770, 771, 5, 116, 0, 0, 771, 772, 5, 104, 0, 0, 772, 773, 5, 114, 0, 0, 773, 774, 5, 111, 0, 0, 774, 775, 5, 119, 0, 0, 775, 191, 1, 0, 0, 0, 776, 777, 5, 100, 0, 0, 777, 778, 5, 101, 0, 0, 778, 779, 5, 108, 0, 0, 779, 780, 5, 101, 0, 0, 780, 781, 5, 116, 0, 0, 781, 782, 5, 101, 0, 0, 782, 193, 1, 0, 0, 0, 783, 784, 5, 105, 0, 0, 784, 785, 5, 110, 0, 0, 785, 195, 1, 0, 0, 0, 786, 787, 5, 116, 0, 0, 787, 788, 5, 114, 0, 0, 788, 789, 5, 121, 0, 0, 789, 197, 1, 0, 0, 0, 790, 791, 5, 97, 0, 0, 791, 792, 5, 115, 0, 0, 792, 199, 1, 0, 0, 0, 793, 794, 5, 102, 0, 0, 794, 795, 5, 114, 0, 0, 795, 796, 5, 111, 0, 0, 796, 797, 5, 109, 0, 0, 797, 201, 1, 0, 0, 0, 798, 799, 5, 111, 0, 0, 799, 800, 5, 102, 0, 0, 800, 203, 1, 0, 0, 0, 801, 802, 5, 121, 0, 0, 802, 803, 5, 105, 0, 0, 803, 804, 5, 101, 0, 0, 804, 805, 5, 108, 0, 0, 805, 806, 5, 100, 0, 0, 806, 205, 1, 0, 0, 0, 807, 808, 5, 121, 0, 0, 808, 809, 5, 105, 0, 0, 809, 810, 5, 101, 0, 0, 810, 811, 5, 108, 0, 0, 811, 812, 5, 100, 0, 0, 812, 813, 5, 42, 0, 0, 813, 207, 1, 0, 0, 0, 814, 815, 5, 99, 0, 0, 815, 816, 5, 108, 0, 0, 816, 817, 5, 97, 0, 0, 817, 818, 5, 115, 0, 0, 818, 819, 5, 115, 0, 0, 819, 209, 1, 0, 0, 0, 820, 821, 5, 101, 0, 0, 821, 822, 5, 110, 0, 0, 822, 823, 5, 117, 0, 0, 823, 824, 5, 109, 0, 0, 824, 211, 1, 0, 0, 0, 825, 826, 5, 101, 0, 0, 826, 827, 5, 120, 0, 0, 827, 828, 5, 116, 0, 0, 828, 829, 5, 101, 0, 0, 829, 830, 5, 110, 0, 0, 830, 831, 5, 100, 0, 0, 831, 832, 5, 115, 0, 0, 832, 213, 1, 0, 0, 0, 833, 834, 5, 115, 0, 0, 834, 835, 5, 117, 0, 0, 835, 836, 5, 112, 0, 0, 836, 837, 5, 101, 0, 0, 837, 838, 5, 114, 0, 0, 838, 215, 1, 0, 0, 0, 839, 840, 5, 99, 0, 0, 840, 841, 5, 111, 0, 0, 841, 842, 5, 110, 0, 0, 842, 843, 5, 115, 0, 0, 843, 844, 5, 116, 0, 0, 844, 217, 1, 0, 0, 0, 845, 846, 5, 101, 0, 0, 846, 847, 5, 120, 0, 0, 847, 848, 5, 112, 0, 0, 848, 849, 5, 111, 0, 0, 849, 850, 5, 114, 0, 0, 850, 851, 5, 116, 0, 0, 851, 219, 1, 0, 0, 0, 852, 853, 5, 105, 0, 0, 853, 854, 5, 109, 0, 0, 854, 855, 5, 112, 0, 0, 855, 856, 5, 111, 0, 0, 856, 857, 5, 114, 0, 0, 857, 858, 5, 116, 0, 0, 858, 221, 1, 0, 0, 0, 859, 860, 5, 97, 0, 0, 860, 861, 5, 115, 0, 0, 861, 862, 5, 121, 0, 0, 862, 863, 5, 110, 0, 0, 863, 864, 5, 99, 0, 0, 864, 223, 1, 0, 0, 0, 865, 866, 5, 97, 0, 0, 866, 867, 5, 119, 0, 0, 867, 868, 5, 97, 0, 0, 868, 869, 5, 105, 0, 0, 869, 870, 5, 116, 0, 0, 870, 225, 1, 0, 0, 0, 871, 872, 5, 105, 0, 0, 872, 873, 5, 109, 0, 0, 873, 874, 5, 112, 0, 0, 874, 875, 5, 108, 0, 0, 875, 876, 5, 101, 0, 0, 876, 877, 5, 109, 0, 0, 877, 878, 5, 101, 0, 0, 878, 879, 5, 110, 0, 0, 879, 880, 5, 116, 0, 0, 880, 881, 5, 115, 0, 0, 881, 882, 1, 0, 0, 0, 882, 883, 4, 112, 4, 0, 883, 227, 1, 0, 0, 0, 884, 885, 5, 108, 0, 0, 885, 886, 5, 101, 0, 0, 886, 887, 5, 116, 0, 0, 887, 888, 1, 0, 0, 0, 888, 889, 4, 113, 5, 0, 889, 229, 1, 0, 0, 0, 890, 891, 5, 108, 0, 0, 891, 892, 5, 101, 0, 0, 892, 893, 5, 116, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 4, 114, 6, 0, 895, 231, 1, 0, 0, 0, 896, 897, 5, 112, 0, 0, 897, 898, 5, 114, 0, 0, 898, 899, 5, 105, 0, 0, 899, 900, 5, 118, 0, 0, 900, 901, 5, 97, 0, 0, 901, 902, 5, 116, 0, 0, 902, 903, 5, 101, 0, 0, 903, 904, 1, 0, 0, 0, 904, 905, 4, 115, 7, 0, 905, 233, 1, 0, 0, 0, 906, 907, 5, 112, 0, 0, 907, 908, 5, 117, 0, 0, 908, 909, 5, 98, 0, 0, 909, 910, 5, 108, 0, 0, 910, 911, 5, 105, 0, 0, 911, 912, 5, 99, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 4, 116, 8, 0, 914, 235, 1, 0, 0, 0, 915, 916, 5, 105, 0, 0, 916, 917, 5, 110, 0, 0, 917, 918, 5, 116, 0, 0, 918, 919, 5, 101, 0, 0, 919, 920, 5, 114, 0, 0, 920, 921, 5, 102, 0, 0, 921, 922, 5, 97, 0, 0, 922, 923, 5, 99, 0, 0, 923, 924, 5, 101, 0, 0, 924, 925, 1, 0, 0, 0, 925, 926, 4, 117, 9, 0, 926, 237, 1, 0, 0, 0, 927, 928, 5, 112, 0, 0, 928, 929, 5, 97, 0, 0, 929, 930, 5, 99, 0, 0, 930, 931, 5, 107, 0, 0, 931, 932, 5, 97, 0, 0, 932, 933, 5, 103, 0, 0, 933, 934, 5, 101, 0, 0, 934, 935, 1, 0, 0, 0, 935, 936, 4, 118, 10, 0, 936, 239, 1, 0, 0, 0, 937, 938, 5, 112, 0, 0, 938, 939, 5, 114, 0, 0, 939, 940, 5, 111, 0, 0, 940, 941, 5, 116, 0, 0, 941, 942, 5, 101, 0, 0, 942, 943, 5, 99, 0, 0, 943, 944, 5, 116, 0, 0, 944, 945, 5, 101, 0, 0, 945, 946, 5, 100, 0, 0, 946, 947, 1, 0, 0, 0, 947, 948, 4, 119, 11, 0, 948, 241, 1, 0, 0, 0, 949, 950, 5, 115, 0, 0, 950, 951, 5, 116, 0, 0, 951, 952, 5, 97, 0, 0, 952, 953, 5, 116, 0, 0, 953, 954, 5, 105, 0, 0, 954, 955, 5, 99, 0, 0, 955, 956, 1, 0, 0, 0, 956, 957, 4, 120, 12, 0, 957, 243, 1, 0, 0, 0, 958, 962, 3, 296, 147, 0, 959, 961, 3, 294, 146, 0, 960, 959, 1, 0, 0, 0, 961, 964, 1, 0, 0, 0, 962, 960, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 245, 1, 0, 0, 0, 964, 962, 1, 0, 0, 0, 965, 969, 5, 34, 0, 0, 966, 968, 3, 266, 132, 0, 967, 966, 1, 0, 0, 0, 968, 971, 1, 0, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 972, 1, 0, 0, 0, 971, 969, 1, 0, 0, 0, 972, 982, 5, 34, 0, 0, 973, 977, 5, 39, 0, 0, 974, 976, 3, 268, 133, 0, 975, 974, 1, 0, 0, 0, 976, 979, 1, 0, 0, 0, 977, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 980, 1, 0, 0, 0, 979, 977, 1, 0, 0, 0, 980, 982, 5, 39, 0, 0, 981, 965, 1, 0, 0, 0, 981, 973, 1, 0, 0, 0, 982, 983, 1, 0, 0, 0, 983, 984, 6, 122, 5, 0, 984, 247, 1, 0, 0, 0, 985, 986, 5, 96, 0, 0, 986, 987, 1, 0, 0, 0, 987, 988, 6, 123, 6, 0, 988, 249, 1, 0, 0, 0, 989, 991, 7, 11, 0, 0, 990, 989, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 990, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 994, 1, 0, 0, 0, 994, 995, 6, 124, 0, 0, 995, 251, 1, 0, 0, 0, 996, 997, 7, 0, 0, 0, 997, 998, 1, 0, 0, 0, 998, 999, 6, 125, 0, 0, 999, 253, 1, 0, 0, 0, 1000, 1001, 5, 60, 0, 0, 1001, 1002, 5, 33, 0, 0, 1002, 1003, 5, 45, 0, 0, 1003, 1004, 5, 45, 0, 0, 1004, 1008, 1, 0, 0, 0, 1005, 1007, 9, 0, 0, 0, 1006, 1005, 1, 0, 0, 0, 1007, 1010, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1008, 1006, 1, 0, 0, 0, 1009, 1011, 1, 0, 0, 0, 1010, 1008, 1, 0, 0, 0, 1011, 1012, 5, 45, 0, 0, 1012, 1013, 5, 45, 0, 0, 1013, 1014, 5, 62, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1016, 6, 126, 0, 0, 1016, 255, 1, 0, 0, 0, 1017, 1018, 5, 60, 0, 0, 1018, 1019, 5, 33, 0, 0, 1019, 1020, 5, 91, 0, 0, 1020, 1021, 5, 67, 0, 0, 1021, 1022, 5, 68, 0, 0, 1022, 1023, 5, 65, 0, 0, 1023, 1024, 5, 84, 0, 0, 1024, 1025, 5, 65, 0, 0, 1025, 1026, 5, 91, 0, 0, 1026, 1030, 1, 0, 0, 0, 1027, 1029, 9, 0, 0, 0, 1028, 1027, 1, 0, 0, 0, 1029, 1032, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1030, 1028, 1, 0, 0, 0, 1031, 1033, 1, 0, 0, 0, 1032, 1030, 1, 0, 0, 0, 1033, 1034, 5, 93, 0, 0, 1034, 1035, 5, 93, 0, 0, 1035, 1036, 5, 62, 0, 0, 1036, 1037, 1, 0, 0, 0, 1037, 1038, 6, 127, 0, 0, 1038, 257, 1, 0, 0, 0, 1039, 1040, 9, 0, 0, 0, 1040, 1041, 1, 0, 0, 0, 1041, 1042, 6, 128, 7, 0, 1042, 259, 1, 0, 0, 0, 1043, 1044, 5, 96, 0, 0, 1044, 1045, 1, 0, 0, 0, 1045, 1046, 6, 129, 8, 0, 1046, 1047, 6, 129, 3, 0, 1047, 261, 1, 0, 0, 0, 1048, 1049, 5, 36, 0, 0, 1049, 1050, 5, 123, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1052, 6, 130, 9, 0, 1052, 1053, 1, 0, 0, 0, 1053, 1054, 6, 130, 10, 0, 1054, 263, 1, 0, 0, 0, 1055, 1056, 8, 12, 0, 0, 1056, 265, 1, 0, 0, 0, 1057, 1062, 8, 13, 0, 0, 1058, 1059, 5, 92, 0, 0, 1059, 1062, 3, 270, 134, 0, 1060, 1062, 3, 286, 142, 0, 1061, 1057, 1, 0, 0, 0, 1061, 1058, 1, 0, 0, 0, 1061, 1060, 1, 0, 0, 0, 1062, 267, 1, 0, 0, 0, 1063, 1068, 8, 14, 0, 0, 1064, 1065, 5, 92, 0, 0, 1065, 1068, 3, 270, 134, 0, 1066, 1068, 3, 286, 142, 0, 1067, 1063, 1, 0, 0, 0, 1067, 1064, 1, 0, 0, 0, 1067, 1066, 1, 0, 0, 0, 1068, 269, 1, 0, 0, 0, 1069, 1075, 3, 272, 135, 0, 1070, 1075, 5, 48, 0, 0, 1071, 1075, 3, 274, 136, 0, 1072, 1075, 3, 276, 137, 0, 1073, 1075, 3, 278, 138, 0, 1074, 1069, 1, 0, 0, 0, 1074, 1070, 1, 0, 0, 0, 1074, 1071, 1, 0, 0, 0, 1074, 1072, 1, 0, 0, 0, 1074, 1073, 1, 0, 0, 0, 1075, 271, 1, 0, 0, 0, 1076, 1079, 3, 280, 139, 0, 1077, 1079, 3, 282, 140, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1077, 1, 0, 0, 0, 1079, 273, 1, 0, 0, 0, 1080, 1081, 5, 120, 0, 0, 1081, 1082, 3, 288, 143, 0, 1082, 1083, 3, 288, 143, 0, 1083, 275, 1, 0, 0, 0, 1084, 1085, 5, 117, 0, 0, 1085, 1086, 3, 288, 143, 0, 1086, 1087, 3, 288, 143, 0, 1087, 1088, 3, 288, 143, 0, 1088, 1089, 3, 288, 143, 0, 1089, 1101, 1, 0, 0, 0, 1090, 1091, 5, 117, 0, 0, 1091, 1092, 5, 123, 0, 0, 1092, 1094, 3, 288, 143, 0, 1093, 1095, 3, 288, 143, 0, 1094, 1093, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1098, 1, 0, 0, 0, 1098, 1099, 5, 125, 0, 0, 1099, 1101, 1, 0, 0, 0, 1100, 1084, 1, 0, 0, 0, 1100, 1090, 1, 0, 0, 0, 1101, 277, 1, 0, 0, 0, 1102, 1103, 5, 117, 0, 0, 1103, 1105, 5, 123, 0, 0, 1104, 1106, 3, 288, 143, 0, 1105, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1109, 1, 0, 0, 0, 1109, 1110, 5, 125, 0, 0, 1110, 279, 1, 0, 0, 0, 1111, 1112, 7, 15, 0, 0, 1112, 281, 1, 0, 0, 0, 1113, 1114, 8, 16, 0, 0, 1114, 283, 1, 0, 0, 0, 1115, 1118, 3, 280, 139, 0, 1116, 1118, 7, 17, 0, 0, 1117, 1115, 1, 0, 0, 0, 1117, 1116, 1, 0, 0, 0, 1118, 285, 1, 0, 0, 0, 1119, 1121, 5, 92, 0, 0, 1120, 1122, 7, 0, 0, 0, 1121, 1120, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 287, 1, 0, 0, 0, 1125, 1126, 7, 18, 0, 0, 1126, 289, 1, 0, 0, 0, 1127, 1136, 5, 48, 0, 0, 1128, 1132, 7, 19, 0, 0, 1129, 1131, 7, 2, 0, 0, 1130, 1129, 1, 0, 0, 0, 1131, 1134, 1, 0, 0, 0, 1132, 1130, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 1136, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1135, 1127, 1, 0, 0, 0, 1135, 1128, 1, 0, 0, 0, 1136, 291, 1, 0, 0, 0, 1137, 1139, 7, 20, 0, 0, 1138, 1140, 7, 21, 0, 0, 1139, 1138, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1142, 1, 0, 0, 0, 1141, 1143, 7, 2, 0, 0, 1142, 1141, 1, 0, 0, 0, 1143, 1144, 1, 0, 0, 0, 1144, 1142, 1, 0, 0, 0, 1144, 1145, 1, 0, 0, 0, 1145, 293, 1, 0, 0, 0, 1146, 1149, 3, 296, 147, 0, 1147, 1149, 7, 22, 0, 0, 1148, 1146, 1, 0, 0, 0, 1148, 1147, 1, 0, 0, 0, 1149, 295, 1, 0, 0, 0, 1150, 1154, 7, 23, 0, 0, 1151, 1152, 5, 92, 0, 0, 1152, 1154, 3, 276, 137, 0, 1153, 1150, 1, 0, 0, 0, 1153, 1151, 1, 0, 0, 0, 1154, 297, 1, 0, 0, 0, 1155, 1166, 8, 24, 0, 0, 1156, 1166, 3, 304, 151, 0, 1157, 1161, 5, 91, 0, 0, 1158, 1160, 3, 302, 150, 0, 1159, 1158, 1, 0, 0, 0, 1160, 1163, 1, 0, 0, 0, 1161, 1159, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1164, 1, 0, 0, 0, 1163, 1161, 1, 0, 0, 0, 1164, 1166, 5, 93, 0, 0, 1165, 1155, 1, 0, 0, 0, 1165, 1156, 1, 0, 0, 0, 1165, 1157, 1, 0, 0, 0, 1166, 299, 1, 0, 0, 0, 1167, 1178, 8, 25, 0, 0, 1168, 1178, 3, 304, 151, 0, 1169, 1173, 5, 91, 0, 0, 1170, 1172, 3, 302, 150, 0, 1171, 1170, 1, 0, 0, 0, 1172, 1175, 1, 0, 0, 0, 1173, 1171, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 1176, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1176, 1178, 5, 93, 0, 0, 1177, 1167, 1, 0, 0, 0, 1177, 1168, 1, 0, 0, 0, 1177, 1169, 1, 0, 0, 0, 1178, 301, 1, 0, 0, 0, 1179, 1182, 8, 26, 0, 0, 1180, 1182, 3, 304, 151, 0, 1181, 1179, 1, 0, 0, 0, 1181, 1180, 1, 0, 0, 0, 1182, 303, 1, 0, 0, 0, 1183, 1184, 5, 92, 0, 0, 1184, 1185, 8, 0, 0, 0, 1185, 305, 1, 0, 0, 0, 48, 0, 1, 313, 322, 336, 346, 354, 532, 540, 544, 551, 555, 559, 561, 569, 576, 586, 595, 604, 615, 626, 962, 969, 977, 981, 992, 1008, 1030, 1061, 1067, 1074, 1078, 1096, 1100, 1107, 1117, 1123, 1132, 1135, 1139, 1144, 1148, 1153, 1161, 1165, 1173, 1177, 1181, 11, 0, 1, 0, 1, 8, 0, 1, 9, 1, 4, 0, 0, 1, 10, 2, 1, 122, 3, 5, 1, 0, 0, 2, 0, 7, 124, 0, 1, 130, 4, 5, 0, 0] \ No newline at end of file diff --git a/antlr_gen/JavaScriptLexer.py b/antlr_gen/JavaScriptLexer.py new file mode 100644 index 0000000..abf24bf --- /dev/null +++ b/antlr_gen/JavaScriptLexer.py @@ -0,0 +1,1023 @@ +# Generated from JavaScriptLexer.g4 by ANTLR 4.13.2 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + + +if "." in __name__: + from .JavaScriptLexerBase import JavaScriptLexerBase +else: + from JavaScriptLexerBase import JavaScriptLexerBase + +def serializedATN(): + return [ + 4,0,131,1186,6,-1,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,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2, + 71,7,71,2,72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7, + 77,2,78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2, + 84,7,84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7, + 90,2,91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2, + 97,7,97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102, + 2,103,7,103,2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108, + 7,108,2,109,7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113, + 2,114,7,114,2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119, + 7,119,2,120,7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124, + 2,125,7,125,2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130, + 7,130,2,131,7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135, + 2,136,7,136,2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141, + 7,141,2,142,7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146, + 2,147,7,147,2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,1,0, + 1,0,1,0,1,0,1,0,5,0,312,8,0,10,0,12,0,315,9,0,1,1,1,1,1,1,1,1,5, + 1,321,8,1,10,1,12,1,324,9,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2, + 5,2,335,8,2,10,2,12,2,338,9,2,1,2,1,2,1,3,1,3,1,3,5,3,345,8,3,10, + 3,12,3,348,9,3,1,3,1,3,1,3,5,3,353,8,3,10,3,12,3,356,9,3,1,4,1,4, + 1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10, + 1,10,1,10,1,11,1,11,1,12,1,12,1,13,1,13,1,14,1,14,1,15,1,15,1,15, + 1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,19,1,19,1,19,1,20,1,20, + 1,20,1,21,1,21,1,22,1,22,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26, + 1,27,1,27,1,28,1,28,1,28,1,29,1,29,1,29,1,30,1,30,1,31,1,31,1,31, + 1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,34,1,34,1,35,1,35,1,36,1,36, + 1,36,1,37,1,37,1,37,1,38,1,38,1,38,1,39,1,39,1,39,1,40,1,40,1,40, + 1,40,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,44,1,44,1,45,1,45, + 1,45,1,46,1,46,1,46,1,47,1,47,1,47,1,48,1,48,1,48,1,49,1,49,1,49, + 1,50,1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,53,1,53,1,53, + 1,53,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,56,1,56,1,56,1,57, + 1,57,1,57,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,60,1,60,1,60, + 1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62, + 1,62,3,62,533,8,62,1,63,1,63,1,63,1,63,5,63,539,8,63,10,63,12,63, + 542,9,63,1,63,3,63,545,8,63,1,63,1,63,1,63,5,63,550,8,63,10,63,12, + 63,553,9,63,1,63,3,63,556,8,63,1,63,1,63,3,63,560,8,63,3,63,562, + 8,63,1,64,1,64,1,64,1,64,5,64,568,8,64,10,64,12,64,571,9,64,1,65, + 1,65,4,65,575,8,65,11,65,12,65,576,1,65,1,65,1,66,1,66,1,66,1,66, + 5,66,585,8,66,10,66,12,66,588,9,66,1,67,1,67,1,67,1,67,5,67,594, + 8,67,10,67,12,67,597,9,67,1,68,1,68,1,68,1,68,5,68,603,8,68,10,68, + 12,68,606,9,68,1,68,1,68,1,69,1,69,1,69,1,69,5,69,614,8,69,10,69, + 12,69,617,9,69,1,69,1,69,1,70,1,70,1,70,1,70,5,70,625,8,70,10,70, + 12,70,628,9,70,1,70,1,70,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72, + 1,72,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74, + 1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,76,1,76, + 1,76,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,79,1,79,1,79, + 1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81, + 1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83, + 1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85, + 1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87, + 1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89, + 1,89,1,89,1,89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,91,1,91, + 1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,93,1,93, + 1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95, + 1,95,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,99,1,99, + 1,99,1,99,1,99,1,100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1, + 101,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,103,1,103,1,103, + 1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105, + 1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106, + 1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,108,1,108,1,108, + 1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,110,1,110, + 1,110,1,110,1,110,1,110,1,111,1,111,1,111,1,111,1,111,1,111,1,112, + 1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112, + 1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1,114, + 1,114,1,114,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115,1,115, + 1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1,117, + 1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117,1,117, + 1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,1,119, + 1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119, + 1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121, + 5,121,961,8,121,10,121,12,121,964,9,121,1,122,1,122,5,122,968,8, + 122,10,122,12,122,971,9,122,1,122,1,122,1,122,5,122,976,8,122,10, + 122,12,122,979,9,122,1,122,3,122,982,8,122,1,122,1,122,1,123,1,123, + 1,123,1,123,1,124,4,124,991,8,124,11,124,12,124,992,1,124,1,124, + 1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1,126,1,126,5,126, + 1007,8,126,10,126,12,126,1010,9,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,127, + 1,127,5,127,1029,8,127,10,127,12,127,1032,9,127,1,127,1,127,1,127, + 1,127,1,127,1,127,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129, + 1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,132, + 1,132,1,132,1,132,3,132,1062,8,132,1,133,1,133,1,133,1,133,3,133, + 1068,8,133,1,134,1,134,1,134,1,134,1,134,3,134,1075,8,134,1,135, + 1,135,3,135,1079,8,135,1,136,1,136,1,136,1,136,1,137,1,137,1,137, + 1,137,1,137,1,137,1,137,1,137,1,137,1,137,4,137,1095,8,137,11,137, + 12,137,1096,1,137,1,137,3,137,1101,8,137,1,138,1,138,1,138,4,138, + 1106,8,138,11,138,12,138,1107,1,138,1,138,1,139,1,139,1,140,1,140, + 1,141,1,141,3,141,1118,8,141,1,142,1,142,4,142,1122,8,142,11,142, + 12,142,1123,1,143,1,143,1,144,1,144,1,144,5,144,1131,8,144,10,144, + 12,144,1134,9,144,3,144,1136,8,144,1,145,1,145,3,145,1140,8,145, + 1,145,4,145,1143,8,145,11,145,12,145,1144,1,146,1,146,3,146,1149, + 8,146,1,147,1,147,1,147,3,147,1154,8,147,1,148,1,148,1,148,1,148, + 5,148,1160,8,148,10,148,12,148,1163,9,148,1,148,3,148,1166,8,148, + 1,149,1,149,1,149,1,149,5,149,1172,8,149,10,149,12,149,1175,9,149, + 1,149,3,149,1178,8,149,1,150,1,150,3,150,1182,8,150,1,151,1,151, + 1,151,3,322,1008,1030,0,152,2,1,4,2,6,3,8,4,10,5,12,6,14,7,16,8, + 18,9,20,10,22,11,24,12,26,13,28,14,30,15,32,16,34,17,36,18,38,19, + 40,20,42,21,44,22,46,23,48,24,50,25,52,26,54,27,56,28,58,29,60,30, + 62,31,64,32,66,33,68,34,70,35,72,36,74,37,76,38,78,39,80,40,82,41, + 84,42,86,43,88,44,90,45,92,46,94,47,96,48,98,49,100,50,102,51,104, + 52,106,53,108,54,110,55,112,56,114,57,116,58,118,59,120,60,122,61, + 124,62,126,63,128,64,130,65,132,66,134,67,136,68,138,69,140,70,142, + 71,144,72,146,73,148,74,150,75,152,76,154,77,156,78,158,79,160,80, + 162,81,164,82,166,83,168,84,170,85,172,86,174,87,176,88,178,89,180, + 90,182,91,184,92,186,93,188,94,190,95,192,96,194,97,196,98,198,99, + 200,100,202,101,204,102,206,103,208,104,210,105,212,106,214,107, + 216,108,218,109,220,110,222,111,224,112,226,113,228,114,230,115, + 232,116,234,117,236,118,238,119,240,120,242,121,244,122,246,123, + 248,124,250,125,252,126,254,127,256,128,258,129,260,0,262,130,264, + 131,266,0,268,0,270,0,272,0,274,0,276,0,278,0,280,0,282,0,284,0, + 286,0,288,0,290,0,292,0,294,0,296,0,298,0,300,0,302,0,304,0,2,0, + 1,27,3,0,10,10,13,13,8232,8233,1,0,48,57,2,0,48,57,95,95,2,0,88, + 88,120,120,3,0,48,57,65,70,97,102,1,0,48,55,2,0,79,79,111,111,2, + 0,48,55,95,95,2,0,66,66,98,98,1,0,48,49,2,0,48,49,95,95,4,0,9,9, + 11,12,32,32,160,160,1,0,96,96,4,0,10,10,13,13,34,34,92,92,4,0,10, + 10,13,13,39,39,92,92,9,0,34,34,39,39,92,92,98,98,102,102,110,110, + 114,114,116,116,118,118,12,0,10,10,13,13,34,34,39,39,48,57,92,92, + 98,98,102,102,110,110,114,114,116,118,120,120,3,0,48,57,117,117, + 120,120,4,0,48,57,65,70,95,95,97,102,1,0,49,57,2,0,69,69,101,101, + 2,0,43,43,45,45,408,0,48,57,95,95,768,879,1155,1159,1425,1469,1471, + 1471,1473,1474,1476,1477,1479,1479,1552,1562,1611,1641,1648,1648, + 1750,1756,1759,1764,1767,1768,1770,1773,1776,1785,1809,1809,1840, + 1866,1958,1968,1984,1993,2027,2035,2045,2045,2070,2073,2075,2083, + 2085,2087,2089,2093,2137,2139,2200,2207,2250,2273,2275,2306,2362, + 2362,2364,2364,2369,2376,2381,2381,2385,2391,2402,2403,2406,2415, + 2433,2433,2492,2492,2497,2500,2509,2509,2530,2531,2534,2543,2558, + 2558,2561,2562,2620,2620,2625,2626,2631,2632,2635,2637,2641,2641, + 2662,2673,2677,2677,2689,2690,2748,2748,2753,2757,2759,2760,2765, + 2765,2786,2787,2790,2799,2810,2815,2817,2817,2876,2876,2879,2879, + 2881,2884,2893,2893,2901,2902,2914,2915,2918,2927,2946,2946,3008, + 3008,3021,3021,3046,3055,3072,3072,3076,3076,3132,3132,3134,3136, + 3142,3144,3146,3149,3157,3158,3170,3171,3174,3183,3201,3201,3260, + 3260,3263,3263,3270,3270,3276,3277,3298,3299,3302,3311,3328,3329, + 3387,3388,3393,3396,3405,3405,3426,3427,3430,3439,3457,3457,3530, + 3530,3538,3540,3542,3542,3558,3567,3633,3633,3636,3642,3655,3662, + 3664,3673,3761,3761,3764,3772,3784,3790,3792,3801,3864,3865,3872, + 3881,3893,3893,3895,3895,3897,3897,3953,3966,3968,3972,3974,3975, + 3981,3991,3993,4028,4038,4038,4141,4144,4146,4151,4153,4154,4157, + 4158,4160,4169,4184,4185,4190,4192,4209,4212,4226,4226,4229,4230, + 4237,4237,4240,4249,4253,4253,4957,4959,5906,5908,5938,5939,5970, + 5971,6002,6003,6068,6069,6071,6077,6086,6086,6089,6099,6109,6109, + 6112,6121,6155,6157,6159,6169,6277,6278,6313,6313,6432,6434,6439, + 6440,6450,6450,6457,6459,6470,6479,6608,6617,6679,6680,6683,6683, + 6742,6742,6744,6750,6752,6752,6754,6754,6757,6764,6771,6780,6783, + 6793,6800,6809,6832,6845,6847,6862,6912,6915,6964,6964,6966,6970, + 6972,6972,6978,6978,6992,7001,7019,7027,7040,7041,7074,7077,7080, + 7081,7083,7085,7088,7097,7142,7142,7144,7145,7149,7149,7151,7153, + 7212,7219,7222,7223,7232,7241,7248,7257,7376,7378,7380,7392,7394, + 7400,7405,7405,7412,7412,7416,7417,7616,7679,8204,8205,8255,8256, + 8276,8276,8400,8412,8417,8417,8421,8432,11503,11505,11647,11647, + 11744,11775,12330,12333,12441,12442,42528,42537,42607,42607,42612, + 42621,42654,42655,42736,42737,43010,43010,43014,43014,43019,43019, + 43045,43046,43052,43052,43204,43205,43216,43225,43232,43249,43263, + 43273,43302,43309,43335,43345,43392,43394,43443,43443,43446,43449, + 43452,43453,43472,43481,43493,43493,43504,43513,43561,43566,43569, + 43570,43573,43574,43587,43587,43596,43596,43600,43609,43644,43644, + 43696,43696,43698,43700,43703,43704,43710,43711,43713,43713,43756, + 43757,43766,43766,44005,44005,44008,44008,44013,44013,44016,44025, + 64286,64286,65024,65039,65056,65071,65075,65076,65101,65103,65296, + 65305,65343,65343,66045,66045,66272,66272,66422,66426,66720,66729, + 68097,68099,68101,68102,68108,68111,68152,68154,68159,68159,68325, + 68326,68900,68903,68912,68921,69291,69292,69373,69375,69446,69456, + 69506,69509,69633,69633,69688,69702,69734,69744,69747,69748,69759, + 69761,69811,69814,69817,69818,69826,69826,69872,69881,69888,69890, + 69927,69931,69933,69940,69942,69951,70003,70003,70016,70017,70070, + 70078,70089,70092,70095,70105,70191,70193,70196,70196,70198,70199, + 70206,70206,70209,70209,70367,70367,70371,70378,70384,70393,70400, + 70401,70459,70460,70464,70464,70502,70508,70512,70516,70712,70719, + 70722,70724,70726,70726,70736,70745,70750,70750,70835,70840,70842, + 70842,70847,70848,70850,70851,70864,70873,71090,71093,71100,71101, + 71103,71104,71132,71133,71219,71226,71229,71229,71231,71232,71248, + 71257,71339,71339,71341,71341,71344,71349,71351,71351,71360,71369, + 71453,71455,71458,71461,71463,71467,71472,71481,71727,71735,71737, + 71738,71904,71913,71995,71996,71998,71998,72003,72003,72016,72025, + 72148,72151,72154,72155,72160,72160,72193,72202,72243,72248,72251, + 72254,72263,72263,72273,72278,72281,72283,72330,72342,72344,72345, + 72752,72758,72760,72765,72767,72767,72784,72793,72850,72871,72874, + 72880,72882,72883,72885,72886,73009,73014,73018,73018,73020,73021, + 73023,73029,73031,73031,73040,73049,73104,73105,73109,73109,73111, + 73111,73120,73129,73459,73460,73472,73473,73526,73530,73536,73536, + 73538,73538,73552,73561,78912,78912,78919,78933,92768,92777,92864, + 92873,92912,92916,92976,92982,93008,93017,94031,94031,94095,94098, + 94180,94180,113821,113822,118528,118573,118576,118598,119143,119145, + 119163,119170,119173,119179,119210,119213,119362,119364,120782,120831, + 121344,121398,121403,121452,121461,121461,121476,121476,121499,121503, + 121505,121519,122880,122886,122888,122904,122907,122913,122915,122916, + 122918,122922,123023,123023,123184,123190,123200,123209,123566,123566, + 123628,123641,124140,124153,125136,125142,125252,125258,125264,125273, + 130032,130041,917760,917999,661,0,36,36,65,90,95,95,97,122,170,170, + 181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748, + 750,750,880,884,886,887,890,893,895,895,902,902,904,906,908,908, + 910,929,931,1013,1015,1153,1162,1327,1329,1366,1369,1369,1376,1416, + 1488,1514,1519,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765, + 1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957, + 1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084, + 2084,2088,2088,2112,2136,2144,2154,2160,2183,2185,2190,2208,2249, + 2308,2361,2365,2365,2384,2384,2392,2401,2417,2432,2437,2444,2447, + 2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510, + 2524,2525,2527,2529,2544,2545,2556,2556,2565,2570,2575,2576,2579, + 2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654, + 2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741, + 2745,2749,2749,2768,2768,2784,2785,2809,2809,2821,2828,2831,2832, + 2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911, + 2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970, + 2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077, + 3084,3086,3088,3090,3112,3114,3129,3133,3133,3160,3162,3165,3165, + 3168,3169,3200,3200,3205,3212,3214,3216,3218,3240,3242,3251,3253, + 3257,3261,3261,3293,3294,3296,3297,3313,3314,3332,3340,3342,3344, + 3346,3386,3389,3389,3406,3406,3412,3414,3423,3425,3450,3455,3461, + 3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635, + 3648,3654,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751, + 3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840, + 3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186, + 4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293, + 4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696, + 4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798, + 4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992, + 5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866, + 5873,5880,5888,5905,5919,5937,5952,5969,5984,5996,5998,6000,6016, + 6067,6103,6103,6108,6108,6176,6264,6272,6276,6279,6312,6314,6314, + 6320,6389,6400,6430,6480,6509,6512,6516,6528,6571,6576,6601,6656, + 6678,6688,6740,6823,6823,6917,6963,6981,6988,7043,7072,7086,7087, + 7098,7141,7168,7203,7245,7247,7258,7293,7296,7304,7312,7354,7357, + 7359,7401,7404,7406,7411,7413,7414,7418,7418,7424,7615,7680,7957, + 7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029, + 8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140, + 8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319, + 8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477, + 8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517, + 8521,8526,8526,8579,8580,11264,11492,11499,11502,11506,11507,11520, + 11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670, + 11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720, + 11726,11728,11734,11736,11742,11823,11823,12293,12294,12337,12341, + 12347,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549, + 12591,12593,12686,12704,12735,12784,12799,13312,19903,19968,42124, + 42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623, + 42653,42656,42725,42775,42783,42786,42888,42891,42954,42960,42961, + 42963,42963,42965,42969,42994,43009,43011,43013,43015,43018,43020, + 43042,43072,43123,43138,43187,43250,43255,43259,43259,43261,43262, + 43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43488, + 43492,43494,43503,43514,43518,43520,43560,43584,43586,43588,43595, + 43616,43638,43642,43642,43646,43695,43697,43697,43701,43702,43705, + 43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764, + 43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824, + 43866,43868,43881,43888,44002,44032,55203,55216,55238,55243,55291, + 63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287, + 64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324, + 64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136, + 65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479, + 65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576, + 65594,65596,65597,65599,65613,65616,65629,65664,65786,66176,66204, + 66208,66256,66304,66335,66349,66368,66370,66377,66384,66421,66432, + 66461,66464,66499,66504,66511,66560,66717,66736,66771,66776,66811, + 66816,66855,66864,66915,66928,66938,66940,66954,66956,66962,66964, + 66965,66967,66977,66979,66993,66995,67001,67003,67004,67072,67382, + 67392,67413,67424,67431,67456,67461,67463,67504,67506,67514,67584, + 67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669, + 67680,67702,67712,67742,67808,67826,67828,67829,67840,67861,67872, + 67897,67968,68023,68030,68031,68096,68096,68112,68115,68117,68119, + 68121,68149,68192,68220,68224,68252,68288,68295,68297,68324,68352, + 68405,68416,68437,68448,68466,68480,68497,68608,68680,68736,68786, + 68800,68850,68864,68899,69248,69289,69296,69297,69376,69404,69415, + 69415,69424,69445,69488,69505,69552,69572,69600,69622,69635,69687, + 69745,69746,69749,69749,69763,69807,69840,69864,69891,69926,69956, + 69956,69959,69959,69968,70002,70006,70006,70019,70066,70081,70084, + 70106,70106,70108,70108,70144,70161,70163,70187,70207,70208,70272, + 70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70366, + 70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453, + 70457,70461,70461,70480,70480,70493,70497,70656,70708,70727,70730, + 70751,70753,70784,70831,70852,70853,70855,70855,71040,71086,71128, + 71131,71168,71215,71236,71236,71296,71338,71352,71352,71424,71450, + 71488,71494,71680,71723,71840,71903,71935,71942,71945,71945,71948, + 71955,71957,71958,71960,71983,71999,71999,72001,72001,72096,72103, + 72106,72144,72161,72161,72163,72163,72192,72192,72203,72242,72250, + 72250,72272,72272,72284,72329,72349,72349,72368,72440,72704,72712, + 72714,72750,72768,72768,72818,72847,72960,72966,72968,72969,72971, + 73008,73030,73030,73056,73061,73063,73064,73066,73097,73112,73112, + 73440,73458,73474,73474,73476,73488,73490,73523,73648,73648,73728, + 74649,74880,75075,77712,77808,77824,78895,78913,78918,82944,83526, + 92160,92728,92736,92766,92784,92862,92880,92909,92928,92975,92992, + 92995,93027,93047,93053,93071,93760,93823,93952,94026,94032,94032, + 94099,94111,94176,94177,94179,94179,94208,100343,100352,101589,101632, + 101640,110576,110579,110581,110587,110589,110590,110592,110882,110898, + 110898,110928,110930,110933,110933,110948,110951,110960,111355,113664, + 113770,113776,113788,113792,113800,113808,113817,119808,119892,119894, + 119964,119966,119967,119970,119970,119973,119974,119977,119980,119982, + 119993,119995,119995,119997,120003,120005,120069,120071,120074,120077, + 120084,120086,120092,120094,120121,120123,120126,120128,120132,120134, + 120134,120138,120144,120146,120485,120488,120512,120514,120538,120540, + 120570,120572,120596,120598,120628,120630,120654,120656,120686,120688, + 120712,120714,120744,120746,120770,120772,120779,122624,122654,122661, + 122666,122928,122989,123136,123180,123191,123197,123214,123214,123536, + 123565,123584,123627,124112,124139,124896,124902,124904,124907,124909, + 124910,124912,124926,124928,125124,125184,125251,125259,125259,126464, + 126467,126469,126495,126497,126498,126500,126500,126503,126503,126505, + 126514,126516,126519,126521,126521,126523,126523,126530,126530,126535, + 126535,126537,126537,126539,126539,126541,126543,126545,126546,126548, + 126548,126551,126551,126553,126553,126555,126555,126557,126557,126559, + 126559,126561,126562,126564,126564,126567,126570,126572,126578,126580, + 126583,126585,126588,126590,126590,126592,126601,126603,126619,126625, + 126627,126629,126633,126635,126651,131072,173791,173824,177977,177984, + 178205,178208,183969,183984,191456,194560,195101,196608,201546,201552, + 205743,6,0,10,10,13,13,42,42,47,47,91,92,8232,8233,5,0,10,10,13, + 13,47,47,91,92,8232,8233,4,0,10,10,13,13,92,93,8232,8233,1218,0, + 2,1,0,0,0,0,4,1,0,0,0,0,6,1,0,0,0,0,8,1,0,0,0,0,10,1,0,0,0,0,12, + 1,0,0,0,0,14,1,0,0,0,0,16,1,0,0,0,0,18,1,0,0,0,0,20,1,0,0,0,0,22, + 1,0,0,0,0,24,1,0,0,0,0,26,1,0,0,0,0,28,1,0,0,0,0,30,1,0,0,0,0,32, + 1,0,0,0,0,34,1,0,0,0,0,36,1,0,0,0,0,38,1,0,0,0,0,40,1,0,0,0,0,42, + 1,0,0,0,0,44,1,0,0,0,0,46,1,0,0,0,0,48,1,0,0,0,0,50,1,0,0,0,0,52, + 1,0,0,0,0,54,1,0,0,0,0,56,1,0,0,0,0,58,1,0,0,0,0,60,1,0,0,0,0,62, + 1,0,0,0,0,64,1,0,0,0,0,66,1,0,0,0,0,68,1,0,0,0,0,70,1,0,0,0,0,72, + 1,0,0,0,0,74,1,0,0,0,0,76,1,0,0,0,0,78,1,0,0,0,0,80,1,0,0,0,0,82, + 1,0,0,0,0,84,1,0,0,0,0,86,1,0,0,0,0,88,1,0,0,0,0,90,1,0,0,0,0,92, + 1,0,0,0,0,94,1,0,0,0,0,96,1,0,0,0,0,98,1,0,0,0,0,100,1,0,0,0,0,102, + 1,0,0,0,0,104,1,0,0,0,0,106,1,0,0,0,0,108,1,0,0,0,0,110,1,0,0,0, + 0,112,1,0,0,0,0,114,1,0,0,0,0,116,1,0,0,0,0,118,1,0,0,0,0,120,1, + 0,0,0,0,122,1,0,0,0,0,124,1,0,0,0,0,126,1,0,0,0,0,128,1,0,0,0,0, + 130,1,0,0,0,0,132,1,0,0,0,0,134,1,0,0,0,0,136,1,0,0,0,0,138,1,0, + 0,0,0,140,1,0,0,0,0,142,1,0,0,0,0,144,1,0,0,0,0,146,1,0,0,0,0,148, + 1,0,0,0,0,150,1,0,0,0,0,152,1,0,0,0,0,154,1,0,0,0,0,156,1,0,0,0, + 0,158,1,0,0,0,0,160,1,0,0,0,0,162,1,0,0,0,0,164,1,0,0,0,0,166,1, + 0,0,0,0,168,1,0,0,0,0,170,1,0,0,0,0,172,1,0,0,0,0,174,1,0,0,0,0, + 176,1,0,0,0,0,178,1,0,0,0,0,180,1,0,0,0,0,182,1,0,0,0,0,184,1,0, + 0,0,0,186,1,0,0,0,0,188,1,0,0,0,0,190,1,0,0,0,0,192,1,0,0,0,0,194, + 1,0,0,0,0,196,1,0,0,0,0,198,1,0,0,0,0,200,1,0,0,0,0,202,1,0,0,0, + 0,204,1,0,0,0,0,206,1,0,0,0,0,208,1,0,0,0,0,210,1,0,0,0,0,212,1, + 0,0,0,0,214,1,0,0,0,0,216,1,0,0,0,0,218,1,0,0,0,0,220,1,0,0,0,0, + 222,1,0,0,0,0,224,1,0,0,0,0,226,1,0,0,0,0,228,1,0,0,0,0,230,1,0, + 0,0,0,232,1,0,0,0,0,234,1,0,0,0,0,236,1,0,0,0,0,238,1,0,0,0,0,240, + 1,0,0,0,0,242,1,0,0,0,0,244,1,0,0,0,0,246,1,0,0,0,0,248,1,0,0,0, + 0,250,1,0,0,0,0,252,1,0,0,0,0,254,1,0,0,0,0,256,1,0,0,0,0,258,1, + 0,0,0,1,260,1,0,0,0,1,262,1,0,0,0,1,264,1,0,0,0,2,306,1,0,0,0,4, + 316,1,0,0,0,6,330,1,0,0,0,8,341,1,0,0,0,10,357,1,0,0,0,12,359,1, + 0,0,0,14,361,1,0,0,0,16,363,1,0,0,0,18,365,1,0,0,0,20,368,1,0,0, + 0,22,374,1,0,0,0,24,377,1,0,0,0,26,379,1,0,0,0,28,381,1,0,0,0,30, + 383,1,0,0,0,32,385,1,0,0,0,34,388,1,0,0,0,36,390,1,0,0,0,38,394, + 1,0,0,0,40,396,1,0,0,0,42,399,1,0,0,0,44,402,1,0,0,0,46,404,1,0, + 0,0,48,406,1,0,0,0,50,408,1,0,0,0,52,410,1,0,0,0,54,412,1,0,0,0, + 56,414,1,0,0,0,58,416,1,0,0,0,60,419,1,0,0,0,62,422,1,0,0,0,64,424, + 1,0,0,0,66,427,1,0,0,0,68,430,1,0,0,0,70,434,1,0,0,0,72,436,1,0, + 0,0,74,438,1,0,0,0,76,441,1,0,0,0,78,444,1,0,0,0,80,447,1,0,0,0, + 82,450,1,0,0,0,84,454,1,0,0,0,86,458,1,0,0,0,88,460,1,0,0,0,90,462, + 1,0,0,0,92,464,1,0,0,0,94,467,1,0,0,0,96,470,1,0,0,0,98,473,1,0, + 0,0,100,476,1,0,0,0,102,479,1,0,0,0,104,482,1,0,0,0,106,485,1,0, + 0,0,108,489,1,0,0,0,110,493,1,0,0,0,112,498,1,0,0,0,114,501,1,0, + 0,0,116,504,1,0,0,0,118,507,1,0,0,0,120,511,1,0,0,0,122,515,1,0, + 0,0,124,518,1,0,0,0,126,532,1,0,0,0,128,561,1,0,0,0,130,563,1,0, + 0,0,132,572,1,0,0,0,134,580,1,0,0,0,136,589,1,0,0,0,138,598,1,0, + 0,0,140,609,1,0,0,0,142,620,1,0,0,0,144,631,1,0,0,0,146,634,1,0, + 0,0,148,640,1,0,0,0,150,643,1,0,0,0,152,654,1,0,0,0,154,661,1,0, + 0,0,156,666,1,0,0,0,158,671,1,0,0,0,160,675,1,0,0,0,162,679,1,0, + 0,0,164,685,1,0,0,0,166,693,1,0,0,0,168,700,1,0,0,0,170,705,1,0, + 0,0,172,714,1,0,0,0,174,718,1,0,0,0,176,725,1,0,0,0,178,731,1,0, + 0,0,180,740,1,0,0,0,182,749,1,0,0,0,184,754,1,0,0,0,186,759,1,0, + 0,0,188,767,1,0,0,0,190,770,1,0,0,0,192,776,1,0,0,0,194,783,1,0, + 0,0,196,786,1,0,0,0,198,790,1,0,0,0,200,793,1,0,0,0,202,798,1,0, + 0,0,204,801,1,0,0,0,206,807,1,0,0,0,208,814,1,0,0,0,210,820,1,0, + 0,0,212,825,1,0,0,0,214,833,1,0,0,0,216,839,1,0,0,0,218,845,1,0, + 0,0,220,852,1,0,0,0,222,859,1,0,0,0,224,865,1,0,0,0,226,871,1,0, + 0,0,228,884,1,0,0,0,230,890,1,0,0,0,232,896,1,0,0,0,234,906,1,0, + 0,0,236,915,1,0,0,0,238,927,1,0,0,0,240,937,1,0,0,0,242,949,1,0, + 0,0,244,958,1,0,0,0,246,981,1,0,0,0,248,985,1,0,0,0,250,990,1,0, + 0,0,252,996,1,0,0,0,254,1000,1,0,0,0,256,1017,1,0,0,0,258,1039,1, + 0,0,0,260,1043,1,0,0,0,262,1048,1,0,0,0,264,1055,1,0,0,0,266,1061, + 1,0,0,0,268,1067,1,0,0,0,270,1074,1,0,0,0,272,1078,1,0,0,0,274,1080, + 1,0,0,0,276,1100,1,0,0,0,278,1102,1,0,0,0,280,1111,1,0,0,0,282,1113, + 1,0,0,0,284,1117,1,0,0,0,286,1119,1,0,0,0,288,1125,1,0,0,0,290,1135, + 1,0,0,0,292,1137,1,0,0,0,294,1148,1,0,0,0,296,1153,1,0,0,0,298,1165, + 1,0,0,0,300,1177,1,0,0,0,302,1181,1,0,0,0,304,1183,1,0,0,0,306,307, + 4,0,0,0,307,308,5,35,0,0,308,309,5,33,0,0,309,313,1,0,0,0,310,312, + 8,0,0,0,311,310,1,0,0,0,312,315,1,0,0,0,313,311,1,0,0,0,313,314, + 1,0,0,0,314,3,1,0,0,0,315,313,1,0,0,0,316,317,5,47,0,0,317,318,5, + 42,0,0,318,322,1,0,0,0,319,321,9,0,0,0,320,319,1,0,0,0,321,324,1, + 0,0,0,322,323,1,0,0,0,322,320,1,0,0,0,323,325,1,0,0,0,324,322,1, + 0,0,0,325,326,5,42,0,0,326,327,5,47,0,0,327,328,1,0,0,0,328,329, + 6,1,0,0,329,5,1,0,0,0,330,331,5,47,0,0,331,332,5,47,0,0,332,336, + 1,0,0,0,333,335,8,0,0,0,334,333,1,0,0,0,335,338,1,0,0,0,336,334, + 1,0,0,0,336,337,1,0,0,0,337,339,1,0,0,0,338,336,1,0,0,0,339,340, + 6,2,0,0,340,7,1,0,0,0,341,342,5,47,0,0,342,346,3,298,148,0,343,345, + 3,300,149,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,349,1,0,0,0,348,346,1,0,0,0,349,350,4,3,1,0,350, + 354,5,47,0,0,351,353,3,294,146,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,9,1,0,0,0,356,354,1,0,0,0,357, + 358,5,91,0,0,358,11,1,0,0,0,359,360,5,93,0,0,360,13,1,0,0,0,361, + 362,5,40,0,0,362,15,1,0,0,0,363,364,5,41,0,0,364,17,1,0,0,0,365, + 366,5,123,0,0,366,367,6,8,1,0,367,19,1,0,0,0,368,369,4,9,2,0,369, + 370,5,125,0,0,370,371,6,9,2,0,371,372,1,0,0,0,372,373,6,9,3,0,373, + 21,1,0,0,0,374,375,5,125,0,0,375,376,6,10,4,0,376,23,1,0,0,0,377, + 378,5,59,0,0,378,25,1,0,0,0,379,380,5,44,0,0,380,27,1,0,0,0,381, + 382,5,61,0,0,382,29,1,0,0,0,383,384,5,63,0,0,384,31,1,0,0,0,385, + 386,5,63,0,0,386,387,5,46,0,0,387,33,1,0,0,0,388,389,5,58,0,0,389, + 35,1,0,0,0,390,391,5,46,0,0,391,392,5,46,0,0,392,393,5,46,0,0,393, + 37,1,0,0,0,394,395,5,46,0,0,395,39,1,0,0,0,396,397,5,43,0,0,397, + 398,5,43,0,0,398,41,1,0,0,0,399,400,5,45,0,0,400,401,5,45,0,0,401, + 43,1,0,0,0,402,403,5,43,0,0,403,45,1,0,0,0,404,405,5,45,0,0,405, + 47,1,0,0,0,406,407,5,126,0,0,407,49,1,0,0,0,408,409,5,33,0,0,409, + 51,1,0,0,0,410,411,5,42,0,0,411,53,1,0,0,0,412,413,5,47,0,0,413, + 55,1,0,0,0,414,415,5,37,0,0,415,57,1,0,0,0,416,417,5,42,0,0,417, + 418,5,42,0,0,418,59,1,0,0,0,419,420,5,63,0,0,420,421,5,63,0,0,421, + 61,1,0,0,0,422,423,5,35,0,0,423,63,1,0,0,0,424,425,5,62,0,0,425, + 426,5,62,0,0,426,65,1,0,0,0,427,428,5,60,0,0,428,429,5,60,0,0,429, + 67,1,0,0,0,430,431,5,62,0,0,431,432,5,62,0,0,432,433,5,62,0,0,433, + 69,1,0,0,0,434,435,5,60,0,0,435,71,1,0,0,0,436,437,5,62,0,0,437, + 73,1,0,0,0,438,439,5,60,0,0,439,440,5,61,0,0,440,75,1,0,0,0,441, + 442,5,62,0,0,442,443,5,61,0,0,443,77,1,0,0,0,444,445,5,61,0,0,445, + 446,5,61,0,0,446,79,1,0,0,0,447,448,5,33,0,0,448,449,5,61,0,0,449, + 81,1,0,0,0,450,451,5,61,0,0,451,452,5,61,0,0,452,453,5,61,0,0,453, + 83,1,0,0,0,454,455,5,33,0,0,455,456,5,61,0,0,456,457,5,61,0,0,457, + 85,1,0,0,0,458,459,5,38,0,0,459,87,1,0,0,0,460,461,5,94,0,0,461, + 89,1,0,0,0,462,463,5,124,0,0,463,91,1,0,0,0,464,465,5,38,0,0,465, + 466,5,38,0,0,466,93,1,0,0,0,467,468,5,124,0,0,468,469,5,124,0,0, + 469,95,1,0,0,0,470,471,5,42,0,0,471,472,5,61,0,0,472,97,1,0,0,0, + 473,474,5,47,0,0,474,475,5,61,0,0,475,99,1,0,0,0,476,477,5,37,0, + 0,477,478,5,61,0,0,478,101,1,0,0,0,479,480,5,43,0,0,480,481,5,61, + 0,0,481,103,1,0,0,0,482,483,5,45,0,0,483,484,5,61,0,0,484,105,1, + 0,0,0,485,486,5,60,0,0,486,487,5,60,0,0,487,488,5,61,0,0,488,107, + 1,0,0,0,489,490,5,62,0,0,490,491,5,62,0,0,491,492,5,61,0,0,492,109, + 1,0,0,0,493,494,5,62,0,0,494,495,5,62,0,0,495,496,5,62,0,0,496,497, + 5,61,0,0,497,111,1,0,0,0,498,499,5,38,0,0,499,500,5,61,0,0,500,113, + 1,0,0,0,501,502,5,94,0,0,502,503,5,61,0,0,503,115,1,0,0,0,504,505, + 5,124,0,0,505,506,5,61,0,0,506,117,1,0,0,0,507,508,5,42,0,0,508, + 509,5,42,0,0,509,510,5,61,0,0,510,119,1,0,0,0,511,512,5,63,0,0,512, + 513,5,63,0,0,513,514,5,61,0,0,514,121,1,0,0,0,515,516,5,61,0,0,516, + 517,5,62,0,0,517,123,1,0,0,0,518,519,5,110,0,0,519,520,5,117,0,0, + 520,521,5,108,0,0,521,522,5,108,0,0,522,125,1,0,0,0,523,524,5,116, + 0,0,524,525,5,114,0,0,525,526,5,117,0,0,526,533,5,101,0,0,527,528, + 5,102,0,0,528,529,5,97,0,0,529,530,5,108,0,0,530,531,5,115,0,0,531, + 533,5,101,0,0,532,523,1,0,0,0,532,527,1,0,0,0,533,127,1,0,0,0,534, + 535,3,290,144,0,535,536,5,46,0,0,536,540,7,1,0,0,537,539,7,2,0,0, + 538,537,1,0,0,0,539,542,1,0,0,0,540,538,1,0,0,0,540,541,1,0,0,0, + 541,544,1,0,0,0,542,540,1,0,0,0,543,545,3,292,145,0,544,543,1,0, + 0,0,544,545,1,0,0,0,545,562,1,0,0,0,546,547,5,46,0,0,547,551,7,1, + 0,0,548,550,7,2,0,0,549,548,1,0,0,0,550,553,1,0,0,0,551,549,1,0, + 0,0,551,552,1,0,0,0,552,555,1,0,0,0,553,551,1,0,0,0,554,556,3,292, + 145,0,555,554,1,0,0,0,555,556,1,0,0,0,556,562,1,0,0,0,557,559,3, + 290,144,0,558,560,3,292,145,0,559,558,1,0,0,0,559,560,1,0,0,0,560, + 562,1,0,0,0,561,534,1,0,0,0,561,546,1,0,0,0,561,557,1,0,0,0,562, + 129,1,0,0,0,563,564,5,48,0,0,564,565,7,3,0,0,565,569,7,4,0,0,566, + 568,3,288,143,0,567,566,1,0,0,0,568,571,1,0,0,0,569,567,1,0,0,0, + 569,570,1,0,0,0,570,131,1,0,0,0,571,569,1,0,0,0,572,574,5,48,0,0, + 573,575,7,5,0,0,574,573,1,0,0,0,575,576,1,0,0,0,576,574,1,0,0,0, + 576,577,1,0,0,0,577,578,1,0,0,0,578,579,4,65,3,0,579,133,1,0,0,0, + 580,581,5,48,0,0,581,582,7,6,0,0,582,586,7,5,0,0,583,585,7,7,0,0, + 584,583,1,0,0,0,585,588,1,0,0,0,586,584,1,0,0,0,586,587,1,0,0,0, + 587,135,1,0,0,0,588,586,1,0,0,0,589,590,5,48,0,0,590,591,7,8,0,0, + 591,595,7,9,0,0,592,594,7,10,0,0,593,592,1,0,0,0,594,597,1,0,0,0, + 595,593,1,0,0,0,595,596,1,0,0,0,596,137,1,0,0,0,597,595,1,0,0,0, + 598,599,5,48,0,0,599,600,7,3,0,0,600,604,7,4,0,0,601,603,3,288,143, + 0,602,601,1,0,0,0,603,606,1,0,0,0,604,602,1,0,0,0,604,605,1,0,0, + 0,605,607,1,0,0,0,606,604,1,0,0,0,607,608,5,110,0,0,608,139,1,0, + 0,0,609,610,5,48,0,0,610,611,7,6,0,0,611,615,7,5,0,0,612,614,7,7, + 0,0,613,612,1,0,0,0,614,617,1,0,0,0,615,613,1,0,0,0,615,616,1,0, + 0,0,616,618,1,0,0,0,617,615,1,0,0,0,618,619,5,110,0,0,619,141,1, + 0,0,0,620,621,5,48,0,0,621,622,7,8,0,0,622,626,7,9,0,0,623,625,7, + 10,0,0,624,623,1,0,0,0,625,628,1,0,0,0,626,624,1,0,0,0,626,627,1, + 0,0,0,627,629,1,0,0,0,628,626,1,0,0,0,629,630,5,110,0,0,630,143, + 1,0,0,0,631,632,3,290,144,0,632,633,5,110,0,0,633,145,1,0,0,0,634, + 635,5,98,0,0,635,636,5,114,0,0,636,637,5,101,0,0,637,638,5,97,0, + 0,638,639,5,107,0,0,639,147,1,0,0,0,640,641,5,100,0,0,641,642,5, + 111,0,0,642,149,1,0,0,0,643,644,5,105,0,0,644,645,5,110,0,0,645, + 646,5,115,0,0,646,647,5,116,0,0,647,648,5,97,0,0,648,649,5,110,0, + 0,649,650,5,99,0,0,650,651,5,101,0,0,651,652,5,111,0,0,652,653,5, + 102,0,0,653,151,1,0,0,0,654,655,5,116,0,0,655,656,5,121,0,0,656, + 657,5,112,0,0,657,658,5,101,0,0,658,659,5,111,0,0,659,660,5,102, + 0,0,660,153,1,0,0,0,661,662,5,99,0,0,662,663,5,97,0,0,663,664,5, + 115,0,0,664,665,5,101,0,0,665,155,1,0,0,0,666,667,5,101,0,0,667, + 668,5,108,0,0,668,669,5,115,0,0,669,670,5,101,0,0,670,157,1,0,0, + 0,671,672,5,110,0,0,672,673,5,101,0,0,673,674,5,119,0,0,674,159, + 1,0,0,0,675,676,5,118,0,0,676,677,5,97,0,0,677,678,5,114,0,0,678, + 161,1,0,0,0,679,680,5,99,0,0,680,681,5,97,0,0,681,682,5,116,0,0, + 682,683,5,99,0,0,683,684,5,104,0,0,684,163,1,0,0,0,685,686,5,102, + 0,0,686,687,5,105,0,0,687,688,5,110,0,0,688,689,5,97,0,0,689,690, + 5,108,0,0,690,691,5,108,0,0,691,692,5,121,0,0,692,165,1,0,0,0,693, + 694,5,114,0,0,694,695,5,101,0,0,695,696,5,116,0,0,696,697,5,117, + 0,0,697,698,5,114,0,0,698,699,5,110,0,0,699,167,1,0,0,0,700,701, + 5,118,0,0,701,702,5,111,0,0,702,703,5,105,0,0,703,704,5,100,0,0, + 704,169,1,0,0,0,705,706,5,99,0,0,706,707,5,111,0,0,707,708,5,110, + 0,0,708,709,5,116,0,0,709,710,5,105,0,0,710,711,5,110,0,0,711,712, + 5,117,0,0,712,713,5,101,0,0,713,171,1,0,0,0,714,715,5,102,0,0,715, + 716,5,111,0,0,716,717,5,114,0,0,717,173,1,0,0,0,718,719,5,115,0, + 0,719,720,5,119,0,0,720,721,5,105,0,0,721,722,5,116,0,0,722,723, + 5,99,0,0,723,724,5,104,0,0,724,175,1,0,0,0,725,726,5,119,0,0,726, + 727,5,104,0,0,727,728,5,105,0,0,728,729,5,108,0,0,729,730,5,101, + 0,0,730,177,1,0,0,0,731,732,5,100,0,0,732,733,5,101,0,0,733,734, + 5,98,0,0,734,735,5,117,0,0,735,736,5,103,0,0,736,737,5,103,0,0,737, + 738,5,101,0,0,738,739,5,114,0,0,739,179,1,0,0,0,740,741,5,102,0, + 0,741,742,5,117,0,0,742,743,5,110,0,0,743,744,5,99,0,0,744,745,5, + 116,0,0,745,746,5,105,0,0,746,747,5,111,0,0,747,748,5,110,0,0,748, + 181,1,0,0,0,749,750,5,116,0,0,750,751,5,104,0,0,751,752,5,105,0, + 0,752,753,5,115,0,0,753,183,1,0,0,0,754,755,5,119,0,0,755,756,5, + 105,0,0,756,757,5,116,0,0,757,758,5,104,0,0,758,185,1,0,0,0,759, + 760,5,100,0,0,760,761,5,101,0,0,761,762,5,102,0,0,762,763,5,97,0, + 0,763,764,5,117,0,0,764,765,5,108,0,0,765,766,5,116,0,0,766,187, + 1,0,0,0,767,768,5,105,0,0,768,769,5,102,0,0,769,189,1,0,0,0,770, + 771,5,116,0,0,771,772,5,104,0,0,772,773,5,114,0,0,773,774,5,111, + 0,0,774,775,5,119,0,0,775,191,1,0,0,0,776,777,5,100,0,0,777,778, + 5,101,0,0,778,779,5,108,0,0,779,780,5,101,0,0,780,781,5,116,0,0, + 781,782,5,101,0,0,782,193,1,0,0,0,783,784,5,105,0,0,784,785,5,110, + 0,0,785,195,1,0,0,0,786,787,5,116,0,0,787,788,5,114,0,0,788,789, + 5,121,0,0,789,197,1,0,0,0,790,791,5,97,0,0,791,792,5,115,0,0,792, + 199,1,0,0,0,793,794,5,102,0,0,794,795,5,114,0,0,795,796,5,111,0, + 0,796,797,5,109,0,0,797,201,1,0,0,0,798,799,5,111,0,0,799,800,5, + 102,0,0,800,203,1,0,0,0,801,802,5,121,0,0,802,803,5,105,0,0,803, + 804,5,101,0,0,804,805,5,108,0,0,805,806,5,100,0,0,806,205,1,0,0, + 0,807,808,5,121,0,0,808,809,5,105,0,0,809,810,5,101,0,0,810,811, + 5,108,0,0,811,812,5,100,0,0,812,813,5,42,0,0,813,207,1,0,0,0,814, + 815,5,99,0,0,815,816,5,108,0,0,816,817,5,97,0,0,817,818,5,115,0, + 0,818,819,5,115,0,0,819,209,1,0,0,0,820,821,5,101,0,0,821,822,5, + 110,0,0,822,823,5,117,0,0,823,824,5,109,0,0,824,211,1,0,0,0,825, + 826,5,101,0,0,826,827,5,120,0,0,827,828,5,116,0,0,828,829,5,101, + 0,0,829,830,5,110,0,0,830,831,5,100,0,0,831,832,5,115,0,0,832,213, + 1,0,0,0,833,834,5,115,0,0,834,835,5,117,0,0,835,836,5,112,0,0,836, + 837,5,101,0,0,837,838,5,114,0,0,838,215,1,0,0,0,839,840,5,99,0,0, + 840,841,5,111,0,0,841,842,5,110,0,0,842,843,5,115,0,0,843,844,5, + 116,0,0,844,217,1,0,0,0,845,846,5,101,0,0,846,847,5,120,0,0,847, + 848,5,112,0,0,848,849,5,111,0,0,849,850,5,114,0,0,850,851,5,116, + 0,0,851,219,1,0,0,0,852,853,5,105,0,0,853,854,5,109,0,0,854,855, + 5,112,0,0,855,856,5,111,0,0,856,857,5,114,0,0,857,858,5,116,0,0, + 858,221,1,0,0,0,859,860,5,97,0,0,860,861,5,115,0,0,861,862,5,121, + 0,0,862,863,5,110,0,0,863,864,5,99,0,0,864,223,1,0,0,0,865,866,5, + 97,0,0,866,867,5,119,0,0,867,868,5,97,0,0,868,869,5,105,0,0,869, + 870,5,116,0,0,870,225,1,0,0,0,871,872,5,105,0,0,872,873,5,109,0, + 0,873,874,5,112,0,0,874,875,5,108,0,0,875,876,5,101,0,0,876,877, + 5,109,0,0,877,878,5,101,0,0,878,879,5,110,0,0,879,880,5,116,0,0, + 880,881,5,115,0,0,881,882,1,0,0,0,882,883,4,112,4,0,883,227,1,0, + 0,0,884,885,5,108,0,0,885,886,5,101,0,0,886,887,5,116,0,0,887,888, + 1,0,0,0,888,889,4,113,5,0,889,229,1,0,0,0,890,891,5,108,0,0,891, + 892,5,101,0,0,892,893,5,116,0,0,893,894,1,0,0,0,894,895,4,114,6, + 0,895,231,1,0,0,0,896,897,5,112,0,0,897,898,5,114,0,0,898,899,5, + 105,0,0,899,900,5,118,0,0,900,901,5,97,0,0,901,902,5,116,0,0,902, + 903,5,101,0,0,903,904,1,0,0,0,904,905,4,115,7,0,905,233,1,0,0,0, + 906,907,5,112,0,0,907,908,5,117,0,0,908,909,5,98,0,0,909,910,5,108, + 0,0,910,911,5,105,0,0,911,912,5,99,0,0,912,913,1,0,0,0,913,914,4, + 116,8,0,914,235,1,0,0,0,915,916,5,105,0,0,916,917,5,110,0,0,917, + 918,5,116,0,0,918,919,5,101,0,0,919,920,5,114,0,0,920,921,5,102, + 0,0,921,922,5,97,0,0,922,923,5,99,0,0,923,924,5,101,0,0,924,925, + 1,0,0,0,925,926,4,117,9,0,926,237,1,0,0,0,927,928,5,112,0,0,928, + 929,5,97,0,0,929,930,5,99,0,0,930,931,5,107,0,0,931,932,5,97,0,0, + 932,933,5,103,0,0,933,934,5,101,0,0,934,935,1,0,0,0,935,936,4,118, + 10,0,936,239,1,0,0,0,937,938,5,112,0,0,938,939,5,114,0,0,939,940, + 5,111,0,0,940,941,5,116,0,0,941,942,5,101,0,0,942,943,5,99,0,0,943, + 944,5,116,0,0,944,945,5,101,0,0,945,946,5,100,0,0,946,947,1,0,0, + 0,947,948,4,119,11,0,948,241,1,0,0,0,949,950,5,115,0,0,950,951,5, + 116,0,0,951,952,5,97,0,0,952,953,5,116,0,0,953,954,5,105,0,0,954, + 955,5,99,0,0,955,956,1,0,0,0,956,957,4,120,12,0,957,243,1,0,0,0, + 958,962,3,296,147,0,959,961,3,294,146,0,960,959,1,0,0,0,961,964, + 1,0,0,0,962,960,1,0,0,0,962,963,1,0,0,0,963,245,1,0,0,0,964,962, + 1,0,0,0,965,969,5,34,0,0,966,968,3,266,132,0,967,966,1,0,0,0,968, + 971,1,0,0,0,969,967,1,0,0,0,969,970,1,0,0,0,970,972,1,0,0,0,971, + 969,1,0,0,0,972,982,5,34,0,0,973,977,5,39,0,0,974,976,3,268,133, + 0,975,974,1,0,0,0,976,979,1,0,0,0,977,975,1,0,0,0,977,978,1,0,0, + 0,978,980,1,0,0,0,979,977,1,0,0,0,980,982,5,39,0,0,981,965,1,0,0, + 0,981,973,1,0,0,0,982,983,1,0,0,0,983,984,6,122,5,0,984,247,1,0, + 0,0,985,986,5,96,0,0,986,987,1,0,0,0,987,988,6,123,6,0,988,249,1, + 0,0,0,989,991,7,11,0,0,990,989,1,0,0,0,991,992,1,0,0,0,992,990,1, + 0,0,0,992,993,1,0,0,0,993,994,1,0,0,0,994,995,6,124,0,0,995,251, + 1,0,0,0,996,997,7,0,0,0,997,998,1,0,0,0,998,999,6,125,0,0,999,253, + 1,0,0,0,1000,1001,5,60,0,0,1001,1002,5,33,0,0,1002,1003,5,45,0,0, + 1003,1004,5,45,0,0,1004,1008,1,0,0,0,1005,1007,9,0,0,0,1006,1005, + 1,0,0,0,1007,1010,1,0,0,0,1008,1009,1,0,0,0,1008,1006,1,0,0,0,1009, + 1011,1,0,0,0,1010,1008,1,0,0,0,1011,1012,5,45,0,0,1012,1013,5,45, + 0,0,1013,1014,5,62,0,0,1014,1015,1,0,0,0,1015,1016,6,126,0,0,1016, + 255,1,0,0,0,1017,1018,5,60,0,0,1018,1019,5,33,0,0,1019,1020,5,91, + 0,0,1020,1021,5,67,0,0,1021,1022,5,68,0,0,1022,1023,5,65,0,0,1023, + 1024,5,84,0,0,1024,1025,5,65,0,0,1025,1026,5,91,0,0,1026,1030,1, + 0,0,0,1027,1029,9,0,0,0,1028,1027,1,0,0,0,1029,1032,1,0,0,0,1030, + 1031,1,0,0,0,1030,1028,1,0,0,0,1031,1033,1,0,0,0,1032,1030,1,0,0, + 0,1033,1034,5,93,0,0,1034,1035,5,93,0,0,1035,1036,5,62,0,0,1036, + 1037,1,0,0,0,1037,1038,6,127,0,0,1038,257,1,0,0,0,1039,1040,9,0, + 0,0,1040,1041,1,0,0,0,1041,1042,6,128,7,0,1042,259,1,0,0,0,1043, + 1044,5,96,0,0,1044,1045,1,0,0,0,1045,1046,6,129,8,0,1046,1047,6, + 129,3,0,1047,261,1,0,0,0,1048,1049,5,36,0,0,1049,1050,5,123,0,0, + 1050,1051,1,0,0,0,1051,1052,6,130,9,0,1052,1053,1,0,0,0,1053,1054, + 6,130,10,0,1054,263,1,0,0,0,1055,1056,8,12,0,0,1056,265,1,0,0,0, + 1057,1062,8,13,0,0,1058,1059,5,92,0,0,1059,1062,3,270,134,0,1060, + 1062,3,286,142,0,1061,1057,1,0,0,0,1061,1058,1,0,0,0,1061,1060,1, + 0,0,0,1062,267,1,0,0,0,1063,1068,8,14,0,0,1064,1065,5,92,0,0,1065, + 1068,3,270,134,0,1066,1068,3,286,142,0,1067,1063,1,0,0,0,1067,1064, + 1,0,0,0,1067,1066,1,0,0,0,1068,269,1,0,0,0,1069,1075,3,272,135,0, + 1070,1075,5,48,0,0,1071,1075,3,274,136,0,1072,1075,3,276,137,0,1073, + 1075,3,278,138,0,1074,1069,1,0,0,0,1074,1070,1,0,0,0,1074,1071,1, + 0,0,0,1074,1072,1,0,0,0,1074,1073,1,0,0,0,1075,271,1,0,0,0,1076, + 1079,3,280,139,0,1077,1079,3,282,140,0,1078,1076,1,0,0,0,1078,1077, + 1,0,0,0,1079,273,1,0,0,0,1080,1081,5,120,0,0,1081,1082,3,288,143, + 0,1082,1083,3,288,143,0,1083,275,1,0,0,0,1084,1085,5,117,0,0,1085, + 1086,3,288,143,0,1086,1087,3,288,143,0,1087,1088,3,288,143,0,1088, + 1089,3,288,143,0,1089,1101,1,0,0,0,1090,1091,5,117,0,0,1091,1092, + 5,123,0,0,1092,1094,3,288,143,0,1093,1095,3,288,143,0,1094,1093, + 1,0,0,0,1095,1096,1,0,0,0,1096,1094,1,0,0,0,1096,1097,1,0,0,0,1097, + 1098,1,0,0,0,1098,1099,5,125,0,0,1099,1101,1,0,0,0,1100,1084,1,0, + 0,0,1100,1090,1,0,0,0,1101,277,1,0,0,0,1102,1103,5,117,0,0,1103, + 1105,5,123,0,0,1104,1106,3,288,143,0,1105,1104,1,0,0,0,1106,1107, + 1,0,0,0,1107,1105,1,0,0,0,1107,1108,1,0,0,0,1108,1109,1,0,0,0,1109, + 1110,5,125,0,0,1110,279,1,0,0,0,1111,1112,7,15,0,0,1112,281,1,0, + 0,0,1113,1114,8,16,0,0,1114,283,1,0,0,0,1115,1118,3,280,139,0,1116, + 1118,7,17,0,0,1117,1115,1,0,0,0,1117,1116,1,0,0,0,1118,285,1,0,0, + 0,1119,1121,5,92,0,0,1120,1122,7,0,0,0,1121,1120,1,0,0,0,1122,1123, + 1,0,0,0,1123,1121,1,0,0,0,1123,1124,1,0,0,0,1124,287,1,0,0,0,1125, + 1126,7,18,0,0,1126,289,1,0,0,0,1127,1136,5,48,0,0,1128,1132,7,19, + 0,0,1129,1131,7,2,0,0,1130,1129,1,0,0,0,1131,1134,1,0,0,0,1132,1130, + 1,0,0,0,1132,1133,1,0,0,0,1133,1136,1,0,0,0,1134,1132,1,0,0,0,1135, + 1127,1,0,0,0,1135,1128,1,0,0,0,1136,291,1,0,0,0,1137,1139,7,20,0, + 0,1138,1140,7,21,0,0,1139,1138,1,0,0,0,1139,1140,1,0,0,0,1140,1142, + 1,0,0,0,1141,1143,7,2,0,0,1142,1141,1,0,0,0,1143,1144,1,0,0,0,1144, + 1142,1,0,0,0,1144,1145,1,0,0,0,1145,293,1,0,0,0,1146,1149,3,296, + 147,0,1147,1149,7,22,0,0,1148,1146,1,0,0,0,1148,1147,1,0,0,0,1149, + 295,1,0,0,0,1150,1154,7,23,0,0,1151,1152,5,92,0,0,1152,1154,3,276, + 137,0,1153,1150,1,0,0,0,1153,1151,1,0,0,0,1154,297,1,0,0,0,1155, + 1166,8,24,0,0,1156,1166,3,304,151,0,1157,1161,5,91,0,0,1158,1160, + 3,302,150,0,1159,1158,1,0,0,0,1160,1163,1,0,0,0,1161,1159,1,0,0, + 0,1161,1162,1,0,0,0,1162,1164,1,0,0,0,1163,1161,1,0,0,0,1164,1166, + 5,93,0,0,1165,1155,1,0,0,0,1165,1156,1,0,0,0,1165,1157,1,0,0,0,1166, + 299,1,0,0,0,1167,1178,8,25,0,0,1168,1178,3,304,151,0,1169,1173,5, + 91,0,0,1170,1172,3,302,150,0,1171,1170,1,0,0,0,1172,1175,1,0,0,0, + 1173,1171,1,0,0,0,1173,1174,1,0,0,0,1174,1176,1,0,0,0,1175,1173, + 1,0,0,0,1176,1178,5,93,0,0,1177,1167,1,0,0,0,1177,1168,1,0,0,0,1177, + 1169,1,0,0,0,1178,301,1,0,0,0,1179,1182,8,26,0,0,1180,1182,3,304, + 151,0,1181,1179,1,0,0,0,1181,1180,1,0,0,0,1182,303,1,0,0,0,1183, + 1184,5,92,0,0,1184,1185,8,0,0,0,1185,305,1,0,0,0,48,0,1,313,322, + 336,346,354,532,540,544,551,555,559,561,569,576,586,595,604,615, + 626,962,969,977,981,992,1008,1030,1061,1067,1074,1078,1096,1100, + 1107,1117,1123,1132,1135,1139,1144,1148,1153,1161,1165,1173,1177, + 1181,11,0,1,0,1,8,0,1,9,1,4,0,0,1,10,2,1,122,3,5,1,0,0,2,0,7,124, + 0,1,130,4,5,0,0 + ] + +class JavaScriptLexer(JavaScriptLexerBase): + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + ERROR = 2 + + TEMPLATE = 1 + + HashBangLine = 1 + MultiLineComment = 2 + SingleLineComment = 3 + RegularExpressionLiteral = 4 + OpenBracket = 5 + CloseBracket = 6 + OpenParen = 7 + CloseParen = 8 + OpenBrace = 9 + TemplateCloseBrace = 10 + CloseBrace = 11 + SemiColon = 12 + Comma = 13 + Assign = 14 + QuestionMark = 15 + QuestionMarkDot = 16 + Colon = 17 + Ellipsis = 18 + Dot = 19 + PlusPlus = 20 + MinusMinus = 21 + Plus = 22 + Minus = 23 + BitNot = 24 + Not = 25 + Multiply = 26 + Divide = 27 + Modulus = 28 + Power = 29 + NullCoalesce = 30 + Hashtag = 31 + RightShiftArithmetic = 32 + LeftShiftArithmetic = 33 + RightShiftLogical = 34 + LessThan = 35 + MoreThan = 36 + LessThanEquals = 37 + GreaterThanEquals = 38 + Equals_ = 39 + NotEquals = 40 + IdentityEquals = 41 + IdentityNotEquals = 42 + BitAnd = 43 + BitXOr = 44 + BitOr = 45 + And = 46 + Or = 47 + MultiplyAssign = 48 + DivideAssign = 49 + ModulusAssign = 50 + PlusAssign = 51 + MinusAssign = 52 + LeftShiftArithmeticAssign = 53 + RightShiftArithmeticAssign = 54 + RightShiftLogicalAssign = 55 + BitAndAssign = 56 + BitXorAssign = 57 + BitOrAssign = 58 + PowerAssign = 59 + NullishCoalescingAssign = 60 + ARROW = 61 + NullLiteral = 62 + BooleanLiteral = 63 + DecimalLiteral = 64 + HexIntegerLiteral = 65 + OctalIntegerLiteral = 66 + OctalIntegerLiteral2 = 67 + BinaryIntegerLiteral = 68 + BigHexIntegerLiteral = 69 + BigOctalIntegerLiteral = 70 + BigBinaryIntegerLiteral = 71 + BigDecimalIntegerLiteral = 72 + Break = 73 + Do = 74 + Instanceof = 75 + Typeof = 76 + Case = 77 + Else = 78 + New = 79 + Var = 80 + Catch = 81 + Finally = 82 + Return = 83 + Void = 84 + Continue = 85 + For = 86 + Switch = 87 + While = 88 + Debugger = 89 + Function_ = 90 + This = 91 + With = 92 + Default = 93 + If = 94 + Throw = 95 + Delete = 96 + In = 97 + Try = 98 + As = 99 + From = 100 + Of = 101 + Yield = 102 + YieldStar = 103 + Class = 104 + Enum = 105 + Extends = 106 + Super = 107 + Const = 108 + Export = 109 + Import = 110 + Async = 111 + Await = 112 + Implements = 113 + StrictLet = 114 + NonStrictLet = 115 + Private = 116 + Public = 117 + Interface = 118 + Package = 119 + Protected = 120 + Static = 121 + Identifier = 122 + StringLiteral = 123 + BackTick = 124 + WhiteSpaces = 125 + LineTerminator = 126 + HtmlComment = 127 + CDataComment = 128 + UnexpectedCharacter = 129 + TemplateStringStartExpression = 130 + TemplateStringAtom = 131 + + channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN", u"ERROR" ] + + modeNames = [ "DEFAULT_MODE", "TEMPLATE" ] + + literalNames = [ "<INVALID>", + "'['", "']'", "'('", "')'", "'{'", "'}'", "';'", "','", "'='", + "'?'", "'?.'", "':'", "'...'", "'.'", "'++'", "'--'", "'+'", + "'-'", "'~'", "'!'", "'*'", "'/'", "'%'", "'**'", "'??'", "'#'", + "'>>'", "'<<'", "'>>>'", "'<'", "'>'", "'<='", "'>='", "'=='", + "'!='", "'==='", "'!=='", "'&'", "'^'", "'|'", "'&&'", "'||'", + "'*='", "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'>>>='", + "'&='", "'^='", "'|='", "'**='", "'??='", "'=>'", "'null'", + "'break'", "'do'", "'instanceof'", "'typeof'", "'case'", "'else'", + "'new'", "'var'", "'catch'", "'finally'", "'return'", "'void'", + "'continue'", "'for'", "'switch'", "'while'", "'debugger'", + "'function'", "'this'", "'with'", "'default'", "'if'", "'throw'", + "'delete'", "'in'", "'try'", "'as'", "'from'", "'of'", "'yield'", + "'yield*'", "'class'", "'enum'", "'extends'", "'super'", "'const'", + "'export'", "'import'", "'async'", "'await'", "'implements'", + "'private'", "'public'", "'interface'", "'package'", "'protected'", + "'static'" ] + + symbolicNames = [ "<INVALID>", + "HashBangLine", "MultiLineComment", "SingleLineComment", "RegularExpressionLiteral", + "OpenBracket", "CloseBracket", "OpenParen", "CloseParen", "OpenBrace", + "TemplateCloseBrace", "CloseBrace", "SemiColon", "Comma", "Assign", + "QuestionMark", "QuestionMarkDot", "Colon", "Ellipsis", "Dot", + "PlusPlus", "MinusMinus", "Plus", "Minus", "BitNot", "Not", + "Multiply", "Divide", "Modulus", "Power", "NullCoalesce", "Hashtag", + "RightShiftArithmetic", "LeftShiftArithmetic", "RightShiftLogical", + "LessThan", "MoreThan", "LessThanEquals", "GreaterThanEquals", + "Equals_", "NotEquals", "IdentityEquals", "IdentityNotEquals", + "BitAnd", "BitXOr", "BitOr", "And", "Or", "MultiplyAssign", + "DivideAssign", "ModulusAssign", "PlusAssign", "MinusAssign", + "LeftShiftArithmeticAssign", "RightShiftArithmeticAssign", "RightShiftLogicalAssign", + "BitAndAssign", "BitXorAssign", "BitOrAssign", "PowerAssign", + "NullishCoalescingAssign", "ARROW", "NullLiteral", "BooleanLiteral", + "DecimalLiteral", "HexIntegerLiteral", "OctalIntegerLiteral", + "OctalIntegerLiteral2", "BinaryIntegerLiteral", "BigHexIntegerLiteral", + "BigOctalIntegerLiteral", "BigBinaryIntegerLiteral", "BigDecimalIntegerLiteral", + "Break", "Do", "Instanceof", "Typeof", "Case", "Else", "New", + "Var", "Catch", "Finally", "Return", "Void", "Continue", "For", + "Switch", "While", "Debugger", "Function_", "This", "With", + "Default", "If", "Throw", "Delete", "In", "Try", "As", "From", + "Of", "Yield", "YieldStar", "Class", "Enum", "Extends", "Super", + "Const", "Export", "Import", "Async", "Await", "Implements", + "StrictLet", "NonStrictLet", "Private", "Public", "Interface", + "Package", "Protected", "Static", "Identifier", "StringLiteral", + "BackTick", "WhiteSpaces", "LineTerminator", "HtmlComment", + "CDataComment", "UnexpectedCharacter", "TemplateStringStartExpression", + "TemplateStringAtom" ] + + ruleNames = [ "HashBangLine", "MultiLineComment", "SingleLineComment", + "RegularExpressionLiteral", "OpenBracket", "CloseBracket", + "OpenParen", "CloseParen", "OpenBrace", "TemplateCloseBrace", + "CloseBrace", "SemiColon", "Comma", "Assign", "QuestionMark", + "QuestionMarkDot", "Colon", "Ellipsis", "Dot", "PlusPlus", + "MinusMinus", "Plus", "Minus", "BitNot", "Not", "Multiply", + "Divide", "Modulus", "Power", "NullCoalesce", "Hashtag", + "RightShiftArithmetic", "LeftShiftArithmetic", "RightShiftLogical", + "LessThan", "MoreThan", "LessThanEquals", "GreaterThanEquals", + "Equals_", "NotEquals", "IdentityEquals", "IdentityNotEquals", + "BitAnd", "BitXOr", "BitOr", "And", "Or", "MultiplyAssign", + "DivideAssign", "ModulusAssign", "PlusAssign", "MinusAssign", + "LeftShiftArithmeticAssign", "RightShiftArithmeticAssign", + "RightShiftLogicalAssign", "BitAndAssign", "BitXorAssign", + "BitOrAssign", "PowerAssign", "NullishCoalescingAssign", + "ARROW", "NullLiteral", "BooleanLiteral", "DecimalLiteral", + "HexIntegerLiteral", "OctalIntegerLiteral", "OctalIntegerLiteral2", + "BinaryIntegerLiteral", "BigHexIntegerLiteral", "BigOctalIntegerLiteral", + "BigBinaryIntegerLiteral", "BigDecimalIntegerLiteral", + "Break", "Do", "Instanceof", "Typeof", "Case", "Else", + "New", "Var", "Catch", "Finally", "Return", "Void", "Continue", + "For", "Switch", "While", "Debugger", "Function_", "This", + "With", "Default", "If", "Throw", "Delete", "In", "Try", + "As", "From", "Of", "Yield", "YieldStar", "Class", "Enum", + "Extends", "Super", "Const", "Export", "Import", "Async", + "Await", "Implements", "StrictLet", "NonStrictLet", "Private", + "Public", "Interface", "Package", "Protected", "Static", + "Identifier", "StringLiteral", "BackTick", "WhiteSpaces", + "LineTerminator", "HtmlComment", "CDataComment", "UnexpectedCharacter", + "BackTickInside", "TemplateStringStartExpression", "TemplateStringAtom", + "DoubleStringCharacter", "SingleStringCharacter", "EscapeSequence", + "CharacterEscapeSequence", "HexEscapeSequence", "UnicodeEscapeSequence", + "ExtendedUnicodeEscapeSequence", "SingleEscapeCharacter", + "NonEscapeCharacter", "EscapeCharacter", "LineContinuation", + "HexDigit", "DecimalIntegerLiteral", "ExponentPart", "IdentifierPart", + "IdentifierStart", "RegularExpressionFirstChar", "RegularExpressionChar", + "RegularExpressionClassChar", "RegularExpressionBackslashSequence" ] + + grammarFileName = "JavaScriptLexer.g4" + + def __init__(self, input=None, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) + self._actions = None + self._predicates = None + + + def action(self, localctx:RuleContext, ruleIndex:int, actionIndex:int): + if self._actions is None: + actions = dict() + actions[8] = self.OpenBrace_action + actions[9] = self.TemplateCloseBrace_action + actions[10] = self.CloseBrace_action + actions[122] = self.StringLiteral_action + actions[130] = self.TemplateStringStartExpression_action + self._actions = actions + action = self._actions.get(ruleIndex, None) + if action is not None: + action(localctx, actionIndex) + else: + raise Exception("No registered action for:" + str(ruleIndex)) + + + def OpenBrace_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 0: + self.ProcessOpenBrace(); + + + def TemplateCloseBrace_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 1: + self.ProcessTemplateCloseBrace(); + + + def CloseBrace_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 2: + self.ProcessCloseBrace(); + + + def StringLiteral_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 3: + self.ProcessStringLiteral(); + + + def TemplateStringStartExpression_action(self, localctx:RuleContext , actionIndex:int): + if actionIndex == 4: + self.ProcessTemplateOpenBrace(); + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates is None: + preds = dict() + preds[0] = self.HashBangLine_sempred + preds[3] = self.RegularExpressionLiteral_sempred + preds[9] = self.TemplateCloseBrace_sempred + preds[65] = self.OctalIntegerLiteral_sempred + preds[112] = self.Implements_sempred + preds[113] = self.StrictLet_sempred + preds[114] = self.NonStrictLet_sempred + preds[115] = self.Private_sempred + preds[116] = self.Public_sempred + preds[117] = self.Interface_sempred + preds[118] = self.Package_sempred + preds[119] = self.Protected_sempred + preds[120] = self.Static_sempred + self._predicates = preds + pred = self._predicates.get(ruleIndex, None) + if pred is not None: + return pred(localctx, predIndex) + else: + raise Exception("No registered predicate for:" + str(ruleIndex)) + + def HashBangLine_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 0: + return self.IsStartOfFile() + + + def RegularExpressionLiteral_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 1: + return self.IsRegexPossible() + + + def TemplateCloseBrace_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 2: + return self.IsInTemplateString() + + + def OctalIntegerLiteral_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 3: + return not self.IsStrictMode() + + + def Implements_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 4: + return self.IsStrictMode() + + + def StrictLet_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 5: + return self.IsStrictMode() + + + def NonStrictLet_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 6: + return not self.IsStrictMode() + + + def Private_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 7: + return self.IsStrictMode() + + + def Public_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 8: + return self.IsStrictMode() + + + def Interface_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 9: + return self.IsStrictMode() + + + def Package_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 10: + return self.IsStrictMode() + + + def Protected_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 11: + return self.IsStrictMode() + + + def Static_sempred(self, localctx:RuleContext, predIndex:int): + if predIndex == 12: + return self.IsStrictMode() + + + diff --git a/antlr_gen/JavaScriptLexer.tokens b/antlr_gen/JavaScriptLexer.tokens new file mode 100644 index 0000000..320dde0 --- /dev/null +++ b/antlr_gen/JavaScriptLexer.tokens @@ -0,0 +1,235 @@ +HashBangLine=1 +MultiLineComment=2 +SingleLineComment=3 +RegularExpressionLiteral=4 +OpenBracket=5 +CloseBracket=6 +OpenParen=7 +CloseParen=8 +OpenBrace=9 +TemplateCloseBrace=10 +CloseBrace=11 +SemiColon=12 +Comma=13 +Assign=14 +QuestionMark=15 +QuestionMarkDot=16 +Colon=17 +Ellipsis=18 +Dot=19 +PlusPlus=20 +MinusMinus=21 +Plus=22 +Minus=23 +BitNot=24 +Not=25 +Multiply=26 +Divide=27 +Modulus=28 +Power=29 +NullCoalesce=30 +Hashtag=31 +RightShiftArithmetic=32 +LeftShiftArithmetic=33 +RightShiftLogical=34 +LessThan=35 +MoreThan=36 +LessThanEquals=37 +GreaterThanEquals=38 +Equals_=39 +NotEquals=40 +IdentityEquals=41 +IdentityNotEquals=42 +BitAnd=43 +BitXOr=44 +BitOr=45 +And=46 +Or=47 +MultiplyAssign=48 +DivideAssign=49 +ModulusAssign=50 +PlusAssign=51 +MinusAssign=52 +LeftShiftArithmeticAssign=53 +RightShiftArithmeticAssign=54 +RightShiftLogicalAssign=55 +BitAndAssign=56 +BitXorAssign=57 +BitOrAssign=58 +PowerAssign=59 +NullishCoalescingAssign=60 +ARROW=61 +NullLiteral=62 +BooleanLiteral=63 +DecimalLiteral=64 +HexIntegerLiteral=65 +OctalIntegerLiteral=66 +OctalIntegerLiteral2=67 +BinaryIntegerLiteral=68 +BigHexIntegerLiteral=69 +BigOctalIntegerLiteral=70 +BigBinaryIntegerLiteral=71 +BigDecimalIntegerLiteral=72 +Break=73 +Do=74 +Instanceof=75 +Typeof=76 +Case=77 +Else=78 +New=79 +Var=80 +Catch=81 +Finally=82 +Return=83 +Void=84 +Continue=85 +For=86 +Switch=87 +While=88 +Debugger=89 +Function_=90 +This=91 +With=92 +Default=93 +If=94 +Throw=95 +Delete=96 +In=97 +Try=98 +As=99 +From=100 +Of=101 +Yield=102 +YieldStar=103 +Class=104 +Enum=105 +Extends=106 +Super=107 +Const=108 +Export=109 +Import=110 +Async=111 +Await=112 +Implements=113 +StrictLet=114 +NonStrictLet=115 +Private=116 +Public=117 +Interface=118 +Package=119 +Protected=120 +Static=121 +Identifier=122 +StringLiteral=123 +BackTick=124 +WhiteSpaces=125 +LineTerminator=126 +HtmlComment=127 +CDataComment=128 +UnexpectedCharacter=129 +TemplateStringStartExpression=130 +TemplateStringAtom=131 +'['=5 +']'=6 +'('=7 +')'=8 +'{'=9 +'}'=11 +';'=12 +','=13 +'='=14 +'?'=15 +'?.'=16 +':'=17 +'...'=18 +'.'=19 +'++'=20 +'--'=21 +'+'=22 +'-'=23 +'~'=24 +'!'=25 +'*'=26 +'/'=27 +'%'=28 +'**'=29 +'??'=30 +'#'=31 +'>>'=32 +'<<'=33 +'>>>'=34 +'<'=35 +'>'=36 +'<='=37 +'>='=38 +'=='=39 +'!='=40 +'==='=41 +'!=='=42 +'&'=43 +'^'=44 +'|'=45 +'&&'=46 +'||'=47 +'*='=48 +'/='=49 +'%='=50 +'+='=51 +'-='=52 +'<<='=53 +'>>='=54 +'>>>='=55 +'&='=56 +'^='=57 +'|='=58 +'**='=59 +'??='=60 +'=>'=61 +'null'=62 +'break'=73 +'do'=74 +'instanceof'=75 +'typeof'=76 +'case'=77 +'else'=78 +'new'=79 +'var'=80 +'catch'=81 +'finally'=82 +'return'=83 +'void'=84 +'continue'=85 +'for'=86 +'switch'=87 +'while'=88 +'debugger'=89 +'function'=90 +'this'=91 +'with'=92 +'default'=93 +'if'=94 +'throw'=95 +'delete'=96 +'in'=97 +'try'=98 +'as'=99 +'from'=100 +'of'=101 +'yield'=102 +'yield*'=103 +'class'=104 +'enum'=105 +'extends'=106 +'super'=107 +'const'=108 +'export'=109 +'import'=110 +'async'=111 +'await'=112 +'implements'=113 +'private'=116 +'public'=117 +'interface'=118 +'package'=119 +'protected'=120 +'static'=121 diff --git a/antlr_gen/JavaScriptLexerBase.py b/antlr_gen/JavaScriptLexerBase.py new file mode 100644 index 0000000..2808652 --- /dev/null +++ b/antlr_gen/JavaScriptLexerBase.py @@ -0,0 +1,129 @@ + +from antlr4 import * + +relativeImport = False +if __name__ is not None and "." in __name__: + relativeImport = True + +class JavaScriptLexerBase(Lexer): + def __init__(self, *args, **kwargs): + super(JavaScriptLexerBase, self).__init__(*args, **kwargs) + + """Stores values of nested modes. By default mode is strict or + defined externally (useStrictDefault)""" + self.scopeStrictModes = [] + self.lastToken: Token = None + + """Default value of strict mode + Can be defined externally by setUseStrictDefault""" + self.useStrictDefault = False + + """Current value of strict mode + Can be defined during parsing, see StringFunctions.js and StringGlobal.js samples""" + self.useStrictCurrent = False + + """Preserve nesting depth of template literals""" + self.currentDepth = 0 + self.templateDepthStack = [] + + def IsStartOfFile(self) -> bool: + return self.lastToken == null + + def getStrictDefault(self) -> bool: + return self.useStrictDefault + + def setUseStrictDefault(self, value: bool): + self.useStrictDefault = value + self.useStrictCurrent = value + + def IsStrictMode(self): + return self.useStrictCurrent + + def IsInTemplateString(self) -> bool: + return len(self.templateDepthStack) > 0 and self.templateDepthStack[-1] == self.currentDepth + + def IsStartOfFile(self): + return self.lastToken is None + + def nextToken(self) -> Token: + """Return the next token from the character stream and records this last + token in case it resides on the default channel. This recorded token + is used to determine when the lexer could possibly match a regex + literal. Also changes scopeStrictModes stack if tokenize special + string 'use strict'; + + :return the next token from the character stream.""" + next_token: Token = super(JavaScriptLexerBase, self).nextToken() + + if next_token.channel == Token.DEFAULT_CHANNEL: + self.lastToken = next_token + + return next_token + + def ProcessOpenBrace(self): + self.currentDepth += 1 + self.useStrictCurrent = bool(self.scopeStrictModes) and (True if self.scopeStrictModes[-1] else self.useStrictDefault) + self.scopeStrictModes.append(self.useStrictCurrent) + + def ProcessCloseBrace(self): + self.useStrictCurrent = bool(self.scopeStrictModes) and (True if self.scopeStrictModes.pop(-1) else self.useStrictDefault) + self.currentDepth -= 1 + + def ProcessStringLiteral(self): + if relativeImport: + from .JavaScriptLexer import JavaScriptLexer + else: + from JavaScriptLexer import JavaScriptLexer + if not self.lastToken or self.lastToken.type == JavaScriptLexer.OpenBrace: + text = self.text + if text == '"use strict"' or text == "'use strict'": + if self.scopeStrictModes: + self.scopeStrictModes.pop(-1) + self.useStrictCurrent = True + self.scopeStrictModes.append(self.useStrictCurrent) + + def ProcessTemplateOpenBrace(self): + self.currentDepth += 1 + self.templateDepthStack.append(self.currentDepth) + + def ProcessTemplateCloseBrace(self): + self.templateDepthStack.pop(-1) + self.currentDepth -= 1 + + def IsRegexPossible(self) -> bool: + """Returns {@code true} if the lexer can match a regex literal. """ + if relativeImport: + from .JavaScriptLexer import JavaScriptLexer + else: + from JavaScriptLexer import JavaScriptLexer + + if not self.lastToken: + # No token has been produced yet: at the start of the input, + # no division is possible, so a regex literal _is_ possible. + return True + + if self.lastToken.type in [ + JavaScriptLexer.Identifier, + JavaScriptLexer.NullLiteral, + JavaScriptLexer.BooleanLiteral, + JavaScriptLexer.This, + JavaScriptLexer.CloseBracket, + JavaScriptLexer.CloseParen, + JavaScriptLexer.OctalIntegerLiteral, + JavaScriptLexer.DecimalLiteral, + JavaScriptLexer.HexIntegerLiteral, + JavaScriptLexer.StringLiteral, + JavaScriptLexer.PlusPlus, + JavaScriptLexer.MinusMinus]: + return False + + return True + + def reset(self): + self.scopeStrictModes = [] + self.lastToken: Token = None + self.useStrictDefault = False + self.useStrictCurrent = False + self.currentDepth = 0 + self.templateDepthStack = [] + super(JavaScriptLexerBase, self).reset() diff --git a/antlr_gen/JavaScriptParser.interp b/antlr_gen/JavaScriptParser.interp new file mode 100644 index 0000000..255ced6 --- /dev/null +++ b/antlr_gen/JavaScriptParser.interp @@ -0,0 +1,359 @@ +token literal names: +null +null +null +null +null +'[' +']' +'(' +')' +'{' +null +'}' +';' +',' +'=' +'?' +'?.' +':' +'...' +'.' +'++' +'--' +'+' +'-' +'~' +'!' +'*' +'/' +'%' +'**' +'??' +'#' +'>>' +'<<' +'>>>' +'<' +'>' +'<=' +'>=' +'==' +'!=' +'===' +'!==' +'&' +'^' +'|' +'&&' +'||' +'*=' +'/=' +'%=' +'+=' +'-=' +'<<=' +'>>=' +'>>>=' +'&=' +'^=' +'|=' +'**=' +'??=' +'=>' +'null' +null +null +null +null +null +null +null +null +null +null +'break' +'do' +'instanceof' +'typeof' +'case' +'else' +'new' +'var' +'catch' +'finally' +'return' +'void' +'continue' +'for' +'switch' +'while' +'debugger' +'function' +'this' +'with' +'default' +'if' +'throw' +'delete' +'in' +'try' +'as' +'from' +'of' +'yield' +'yield*' +'class' +'enum' +'extends' +'super' +'const' +'export' +'import' +'async' +'await' +'implements' +null +null +'private' +'public' +'interface' +'package' +'protected' +'static' +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +HashBangLine +MultiLineComment +SingleLineComment +RegularExpressionLiteral +OpenBracket +CloseBracket +OpenParen +CloseParen +OpenBrace +TemplateCloseBrace +CloseBrace +SemiColon +Comma +Assign +QuestionMark +QuestionMarkDot +Colon +Ellipsis +Dot +PlusPlus +MinusMinus +Plus +Minus +BitNot +Not +Multiply +Divide +Modulus +Power +NullCoalesce +Hashtag +RightShiftArithmetic +LeftShiftArithmetic +RightShiftLogical +LessThan +MoreThan +LessThanEquals +GreaterThanEquals +Equals_ +NotEquals +IdentityEquals +IdentityNotEquals +BitAnd +BitXOr +BitOr +And +Or +MultiplyAssign +DivideAssign +ModulusAssign +PlusAssign +MinusAssign +LeftShiftArithmeticAssign +RightShiftArithmeticAssign +RightShiftLogicalAssign +BitAndAssign +BitXorAssign +BitOrAssign +PowerAssign +NullishCoalescingAssign +ARROW +NullLiteral +BooleanLiteral +DecimalLiteral +HexIntegerLiteral +OctalIntegerLiteral +OctalIntegerLiteral2 +BinaryIntegerLiteral +BigHexIntegerLiteral +BigOctalIntegerLiteral +BigBinaryIntegerLiteral +BigDecimalIntegerLiteral +Break +Do +Instanceof +Typeof +Case +Else +New +Var +Catch +Finally +Return +Void +Continue +For +Switch +While +Debugger +Function_ +This +With +Default +If +Throw +Delete +In +Try +As +From +Of +Yield +YieldStar +Class +Enum +Extends +Super +Const +Export +Import +Async +Await +Implements +StrictLet +NonStrictLet +Private +Public +Interface +Package +Protected +Static +Identifier +StringLiteral +BackTick +WhiteSpaces +LineTerminator +HtmlComment +CDataComment +UnexpectedCharacter +TemplateStringStartExpression +TemplateStringAtom + +rule names: +program +sourceElement +statement +block +statementList +importStatement +importFromBlock +importModuleItems +importAliasName +moduleExportName +importedBinding +importDefault +importNamespace +importFrom +aliasName +exportStatement +exportFromBlock +exportModuleItems +exportAliasName +declaration +variableStatement +variableDeclarationList +variableDeclaration +emptyStatement_ +expressionStatement +ifStatement +iterationStatement +varModifier +continueStatement +breakStatement +returnStatement +yieldStatement +withStatement +switchStatement +caseBlock +caseClauses +caseClause +defaultClause +labelledStatement +throwStatement +tryStatement +catchProduction +finallyProduction +debuggerStatement +functionDeclaration +classDeclaration +classTail +classElement +methodDefinition +fieldDefinition +classElementName +privateIdentifier +formalParameterList +formalParameterArg +lastFormalParameterArg +functionBody +sourceElements +arrayLiteral +elementList +arrayElement +propertyAssignment +propertyName +arguments +argument +expressionSequence +singleExpression +initializer +assignable +objectLiteral +anonymousFunction +arrowFunctionParameters +arrowFunctionBody +assignmentOperator +literal +templateStringLiteral +templateStringAtom +numericLiteral +bigintLiteral +getter +setter +identifierName +identifier +reservedWord +keyword +let_ +eos + + +atn: +[4, 1, 131, 1098, 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, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 1, 0, 3, 0, 174, 8, 0, 1, 0, 3, 0, 177, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 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, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 203, 8, 2, 1, 3, 1, 3, 3, 3, 207, 8, 3, 1, 3, 1, 3, 1, 4, 4, 4, 212, 8, 4, 11, 4, 12, 4, 213, 1, 5, 1, 5, 1, 5, 1, 6, 3, 6, 220, 8, 6, 1, 6, 1, 6, 3, 6, 224, 8, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 231, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 237, 8, 7, 10, 7, 12, 7, 240, 9, 7, 1, 7, 1, 7, 3, 7, 244, 8, 7, 3, 7, 246, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 3, 8, 253, 8, 8, 1, 9, 1, 9, 3, 9, 257, 8, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 3, 12, 266, 8, 12, 1, 12, 1, 12, 3, 12, 270, 8, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 3, 14, 278, 8, 14, 1, 15, 1, 15, 3, 15, 282, 8, 15, 1, 15, 1, 15, 3, 15, 286, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 295, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 303, 8, 16, 1, 16, 1, 16, 3, 16, 307, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 313, 8, 17, 10, 17, 12, 17, 316, 9, 17, 1, 17, 1, 17, 3, 17, 320, 8, 17, 3, 17, 322, 8, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 329, 8, 18, 1, 19, 1, 19, 1, 19, 3, 19, 334, 8, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 343, 8, 21, 10, 21, 12, 21, 346, 9, 21, 1, 22, 1, 22, 1, 22, 3, 22, 351, 8, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 366, 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, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 386, 8, 26, 1, 26, 1, 26, 3, 26, 390, 8, 26, 1, 26, 1, 26, 3, 26, 394, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 402, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 411, 8, 26, 1, 26, 1, 26, 1, 26, 3, 26, 416, 8, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 423, 8, 26, 1, 27, 1, 27, 1, 27, 3, 27, 428, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 433, 8, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 3, 29, 440, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 3, 30, 447, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 3, 31, 454, 8, 31, 1, 31, 1, 31, 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, 34, 1, 34, 3, 34, 472, 8, 34, 1, 34, 1, 34, 3, 34, 476, 8, 34, 3, 34, 478, 8, 34, 1, 34, 1, 34, 1, 35, 4, 35, 483, 8, 35, 11, 35, 12, 35, 484, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 491, 8, 36, 1, 37, 1, 37, 1, 37, 3, 37, 496, 8, 37, 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, 40, 3, 40, 511, 8, 40, 1, 40, 3, 40, 514, 8, 40, 1, 41, 1, 41, 1, 41, 3, 41, 519, 8, 41, 1, 41, 3, 41, 522, 8, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 3, 44, 533, 8, 44, 1, 44, 1, 44, 3, 44, 537, 8, 44, 1, 44, 1, 44, 1, 44, 3, 44, 542, 8, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 553, 8, 46, 1, 46, 1, 46, 5, 46, 557, 8, 46, 10, 46, 12, 46, 560, 9, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 567, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 573, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 579, 8, 47, 1, 47, 1, 47, 3, 47, 583, 8, 47, 1, 48, 1, 48, 3, 48, 587, 8, 48, 1, 48, 3, 48, 590, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 595, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 601, 8, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 609, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 614, 8, 48, 1, 48, 1, 48, 1, 48, 3, 48, 619, 8, 48, 1, 49, 1, 49, 3, 49, 623, 8, 49, 1, 50, 1, 50, 3, 50, 627, 8, 50, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 5, 52, 635, 8, 52, 10, 52, 12, 52, 638, 9, 52, 1, 52, 1, 52, 3, 52, 642, 8, 52, 1, 52, 3, 52, 645, 8, 52, 1, 53, 1, 53, 1, 53, 3, 53, 650, 8, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 3, 55, 657, 8, 55, 1, 55, 1, 55, 1, 56, 4, 56, 662, 8, 56, 11, 56, 12, 56, 663, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 5, 58, 671, 8, 58, 10, 58, 12, 58, 674, 9, 58, 1, 58, 3, 58, 677, 8, 58, 1, 58, 4, 58, 680, 8, 58, 11, 58, 12, 58, 681, 1, 58, 5, 58, 685, 8, 58, 10, 58, 12, 58, 688, 9, 58, 1, 58, 5, 58, 691, 8, 58, 10, 58, 12, 58, 694, 9, 58, 1, 59, 3, 59, 697, 8, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 712, 8, 60, 1, 60, 3, 60, 715, 8, 60, 1, 60, 1, 60, 1, 60, 3, 60, 720, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 737, 8, 60, 1, 60, 3, 60, 740, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 749, 8, 61, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 755, 8, 62, 10, 62, 12, 62, 758, 9, 62, 1, 62, 3, 62, 761, 8, 62, 3, 62, 763, 8, 62, 1, 62, 1, 62, 1, 63, 3, 63, 768, 8, 63, 1, 63, 1, 63, 3, 63, 772, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 777, 8, 64, 10, 64, 12, 64, 780, 9, 64, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 786, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 838, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 900, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 908, 8, 65, 1, 65, 1, 65, 3, 65, 912, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 5, 65, 925, 8, 65, 10, 65, 12, 65, 928, 9, 65, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 937, 8, 67, 1, 68, 1, 68, 1, 68, 1, 68, 5, 68, 943, 8, 68, 10, 68, 12, 68, 946, 9, 68, 1, 68, 3, 68, 949, 8, 68, 3, 68, 951, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 957, 8, 69, 1, 69, 1, 69, 3, 69, 961, 8, 69, 1, 69, 1, 69, 3, 69, 965, 8, 69, 1, 69, 1, 69, 1, 69, 3, 69, 970, 8, 69, 1, 69, 1, 69, 1, 69, 1, 69, 3, 69, 976, 8, 69, 1, 70, 1, 70, 1, 70, 3, 70, 981, 8, 70, 1, 70, 3, 70, 984, 8, 70, 1, 71, 1, 71, 3, 71, 988, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 999, 8, 73, 1, 74, 1, 74, 5, 74, 1003, 8, 74, 10, 74, 12, 74, 1006, 9, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 1015, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 3, 80, 1031, 8, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 3, 82, 1038, 8, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1088, 8, 83, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1096, 8, 85, 1, 85, 0, 1, 130, 86, 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, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 0, 12, 3, 0, 102, 102, 112, 112, 122, 122, 1, 0, 102, 103, 1, 0, 26, 28, 1, 0, 22, 23, 1, 0, 32, 34, 1, 0, 35, 38, 1, 0, 39, 42, 1, 0, 48, 60, 1, 0, 64, 68, 1, 0, 69, 72, 4, 0, 99, 102, 111, 111, 115, 115, 122, 122, 1, 0, 114, 115, 1267, 0, 173, 1, 0, 0, 0, 2, 180, 1, 0, 0, 0, 4, 202, 1, 0, 0, 0, 6, 204, 1, 0, 0, 0, 8, 211, 1, 0, 0, 0, 10, 215, 1, 0, 0, 0, 12, 230, 1, 0, 0, 0, 14, 232, 1, 0, 0, 0, 16, 249, 1, 0, 0, 0, 18, 256, 1, 0, 0, 0, 20, 258, 1, 0, 0, 0, 22, 260, 1, 0, 0, 0, 24, 265, 1, 0, 0, 0, 26, 271, 1, 0, 0, 0, 28, 274, 1, 0, 0, 0, 30, 294, 1, 0, 0, 0, 32, 306, 1, 0, 0, 0, 34, 308, 1, 0, 0, 0, 36, 325, 1, 0, 0, 0, 38, 333, 1, 0, 0, 0, 40, 335, 1, 0, 0, 0, 42, 338, 1, 0, 0, 0, 44, 347, 1, 0, 0, 0, 46, 352, 1, 0, 0, 0, 48, 354, 1, 0, 0, 0, 50, 358, 1, 0, 0, 0, 52, 422, 1, 0, 0, 0, 54, 427, 1, 0, 0, 0, 56, 429, 1, 0, 0, 0, 58, 436, 1, 0, 0, 0, 60, 443, 1, 0, 0, 0, 62, 450, 1, 0, 0, 0, 64, 457, 1, 0, 0, 0, 66, 463, 1, 0, 0, 0, 68, 469, 1, 0, 0, 0, 70, 482, 1, 0, 0, 0, 72, 486, 1, 0, 0, 0, 74, 492, 1, 0, 0, 0, 76, 497, 1, 0, 0, 0, 78, 501, 1, 0, 0, 0, 80, 506, 1, 0, 0, 0, 82, 515, 1, 0, 0, 0, 84, 525, 1, 0, 0, 0, 86, 528, 1, 0, 0, 0, 88, 532, 1, 0, 0, 0, 90, 546, 1, 0, 0, 0, 92, 552, 1, 0, 0, 0, 94, 582, 1, 0, 0, 0, 96, 618, 1, 0, 0, 0, 98, 620, 1, 0, 0, 0, 100, 626, 1, 0, 0, 0, 102, 628, 1, 0, 0, 0, 104, 644, 1, 0, 0, 0, 106, 646, 1, 0, 0, 0, 108, 651, 1, 0, 0, 0, 110, 654, 1, 0, 0, 0, 112, 661, 1, 0, 0, 0, 114, 665, 1, 0, 0, 0, 116, 672, 1, 0, 0, 0, 118, 696, 1, 0, 0, 0, 120, 739, 1, 0, 0, 0, 122, 748, 1, 0, 0, 0, 124, 750, 1, 0, 0, 0, 126, 767, 1, 0, 0, 0, 128, 773, 1, 0, 0, 0, 130, 837, 1, 0, 0, 0, 132, 929, 1, 0, 0, 0, 134, 936, 1, 0, 0, 0, 136, 938, 1, 0, 0, 0, 138, 975, 1, 0, 0, 0, 140, 983, 1, 0, 0, 0, 142, 987, 1, 0, 0, 0, 144, 989, 1, 0, 0, 0, 146, 998, 1, 0, 0, 0, 148, 1000, 1, 0, 0, 0, 150, 1014, 1, 0, 0, 0, 152, 1016, 1, 0, 0, 0, 154, 1018, 1, 0, 0, 0, 156, 1020, 1, 0, 0, 0, 158, 1024, 1, 0, 0, 0, 160, 1030, 1, 0, 0, 0, 162, 1032, 1, 0, 0, 0, 164, 1037, 1, 0, 0, 0, 166, 1087, 1, 0, 0, 0, 168, 1089, 1, 0, 0, 0, 170, 1095, 1, 0, 0, 0, 172, 174, 5, 1, 0, 0, 173, 172, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 176, 1, 0, 0, 0, 175, 177, 3, 112, 56, 0, 176, 175, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 5, 0, 0, 1, 179, 1, 1, 0, 0, 0, 180, 181, 3, 4, 2, 0, 181, 3, 1, 0, 0, 0, 182, 203, 3, 6, 3, 0, 183, 203, 3, 40, 20, 0, 184, 203, 3, 10, 5, 0, 185, 203, 3, 30, 15, 0, 186, 203, 3, 46, 23, 0, 187, 203, 3, 90, 45, 0, 188, 203, 3, 88, 44, 0, 189, 203, 3, 48, 24, 0, 190, 203, 3, 50, 25, 0, 191, 203, 3, 52, 26, 0, 192, 203, 3, 56, 28, 0, 193, 203, 3, 58, 29, 0, 194, 203, 3, 60, 30, 0, 195, 203, 3, 62, 31, 0, 196, 203, 3, 64, 32, 0, 197, 203, 3, 76, 38, 0, 198, 203, 3, 66, 33, 0, 199, 203, 3, 78, 39, 0, 200, 203, 3, 80, 40, 0, 201, 203, 3, 86, 43, 0, 202, 182, 1, 0, 0, 0, 202, 183, 1, 0, 0, 0, 202, 184, 1, 0, 0, 0, 202, 185, 1, 0, 0, 0, 202, 186, 1, 0, 0, 0, 202, 187, 1, 0, 0, 0, 202, 188, 1, 0, 0, 0, 202, 189, 1, 0, 0, 0, 202, 190, 1, 0, 0, 0, 202, 191, 1, 0, 0, 0, 202, 192, 1, 0, 0, 0, 202, 193, 1, 0, 0, 0, 202, 194, 1, 0, 0, 0, 202, 195, 1, 0, 0, 0, 202, 196, 1, 0, 0, 0, 202, 197, 1, 0, 0, 0, 202, 198, 1, 0, 0, 0, 202, 199, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 201, 1, 0, 0, 0, 203, 5, 1, 0, 0, 0, 204, 206, 5, 9, 0, 0, 205, 207, 3, 8, 4, 0, 206, 205, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 5, 11, 0, 0, 209, 7, 1, 0, 0, 0, 210, 212, 3, 4, 2, 0, 211, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 9, 1, 0, 0, 0, 215, 216, 5, 110, 0, 0, 216, 217, 3, 12, 6, 0, 217, 11, 1, 0, 0, 0, 218, 220, 3, 22, 11, 0, 219, 218, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 224, 3, 24, 12, 0, 222, 224, 3, 14, 7, 0, 223, 221, 1, 0, 0, 0, 223, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 226, 3, 26, 13, 0, 226, 227, 3, 170, 85, 0, 227, 231, 1, 0, 0, 0, 228, 229, 5, 123, 0, 0, 229, 231, 3, 170, 85, 0, 230, 219, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 231, 13, 1, 0, 0, 0, 232, 238, 5, 9, 0, 0, 233, 234, 3, 16, 8, 0, 234, 235, 5, 13, 0, 0, 235, 237, 1, 0, 0, 0, 236, 233, 1, 0, 0, 0, 237, 240, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 238, 239, 1, 0, 0, 0, 239, 245, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 243, 3, 16, 8, 0, 242, 244, 5, 13, 0, 0, 243, 242, 1, 0, 0, 0, 243, 244, 1, 0, 0, 0, 244, 246, 1, 0, 0, 0, 245, 241, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 5, 11, 0, 0, 248, 15, 1, 0, 0, 0, 249, 252, 3, 18, 9, 0, 250, 251, 5, 99, 0, 0, 251, 253, 3, 20, 10, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 17, 1, 0, 0, 0, 254, 257, 3, 160, 80, 0, 255, 257, 5, 123, 0, 0, 256, 254, 1, 0, 0, 0, 256, 255, 1, 0, 0, 0, 257, 19, 1, 0, 0, 0, 258, 259, 7, 0, 0, 0, 259, 21, 1, 0, 0, 0, 260, 261, 3, 28, 14, 0, 261, 262, 5, 13, 0, 0, 262, 23, 1, 0, 0, 0, 263, 266, 5, 26, 0, 0, 264, 266, 3, 160, 80, 0, 265, 263, 1, 0, 0, 0, 265, 264, 1, 0, 0, 0, 266, 269, 1, 0, 0, 0, 267, 268, 5, 99, 0, 0, 268, 270, 3, 160, 80, 0, 269, 267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 25, 1, 0, 0, 0, 271, 272, 5, 100, 0, 0, 272, 273, 5, 123, 0, 0, 273, 27, 1, 0, 0, 0, 274, 277, 3, 160, 80, 0, 275, 276, 5, 99, 0, 0, 276, 278, 3, 160, 80, 0, 277, 275, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 29, 1, 0, 0, 0, 279, 281, 5, 109, 0, 0, 280, 282, 5, 93, 0, 0, 281, 280, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 285, 1, 0, 0, 0, 283, 286, 3, 32, 16, 0, 284, 286, 3, 38, 19, 0, 285, 283, 1, 0, 0, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 288, 3, 170, 85, 0, 288, 295, 1, 0, 0, 0, 289, 290, 5, 109, 0, 0, 290, 291, 5, 93, 0, 0, 291, 292, 3, 130, 65, 0, 292, 293, 3, 170, 85, 0, 293, 295, 1, 0, 0, 0, 294, 279, 1, 0, 0, 0, 294, 289, 1, 0, 0, 0, 295, 31, 1, 0, 0, 0, 296, 297, 3, 24, 12, 0, 297, 298, 3, 26, 13, 0, 298, 299, 3, 170, 85, 0, 299, 307, 1, 0, 0, 0, 300, 302, 3, 34, 17, 0, 301, 303, 3, 26, 13, 0, 302, 301, 1, 0, 0, 0, 302, 303, 1, 0, 0, 0, 303, 304, 1, 0, 0, 0, 304, 305, 3, 170, 85, 0, 305, 307, 1, 0, 0, 0, 306, 296, 1, 0, 0, 0, 306, 300, 1, 0, 0, 0, 307, 33, 1, 0, 0, 0, 308, 314, 5, 9, 0, 0, 309, 310, 3, 36, 18, 0, 310, 311, 5, 13, 0, 0, 311, 313, 1, 0, 0, 0, 312, 309, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 321, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 319, 3, 36, 18, 0, 318, 320, 5, 13, 0, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 322, 1, 0, 0, 0, 321, 317, 1, 0, 0, 0, 321, 322, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 324, 5, 11, 0, 0, 324, 35, 1, 0, 0, 0, 325, 328, 3, 18, 9, 0, 326, 327, 5, 99, 0, 0, 327, 329, 3, 18, 9, 0, 328, 326, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 37, 1, 0, 0, 0, 330, 334, 3, 40, 20, 0, 331, 334, 3, 90, 45, 0, 332, 334, 3, 88, 44, 0, 333, 330, 1, 0, 0, 0, 333, 331, 1, 0, 0, 0, 333, 332, 1, 0, 0, 0, 334, 39, 1, 0, 0, 0, 335, 336, 3, 42, 21, 0, 336, 337, 3, 170, 85, 0, 337, 41, 1, 0, 0, 0, 338, 339, 3, 54, 27, 0, 339, 344, 3, 44, 22, 0, 340, 341, 5, 13, 0, 0, 341, 343, 3, 44, 22, 0, 342, 340, 1, 0, 0, 0, 343, 346, 1, 0, 0, 0, 344, 342, 1, 0, 0, 0, 344, 345, 1, 0, 0, 0, 345, 43, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 347, 350, 3, 134, 67, 0, 348, 349, 5, 14, 0, 0, 349, 351, 3, 130, 65, 0, 350, 348, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 45, 1, 0, 0, 0, 352, 353, 5, 12, 0, 0, 353, 47, 1, 0, 0, 0, 354, 355, 4, 24, 0, 0, 355, 356, 3, 128, 64, 0, 356, 357, 3, 170, 85, 0, 357, 49, 1, 0, 0, 0, 358, 359, 5, 94, 0, 0, 359, 360, 5, 7, 0, 0, 360, 361, 3, 128, 64, 0, 361, 362, 5, 8, 0, 0, 362, 365, 3, 4, 2, 0, 363, 364, 5, 78, 0, 0, 364, 366, 3, 4, 2, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 51, 1, 0, 0, 0, 367, 368, 5, 74, 0, 0, 368, 369, 3, 4, 2, 0, 369, 370, 5, 88, 0, 0, 370, 371, 5, 7, 0, 0, 371, 372, 3, 128, 64, 0, 372, 373, 5, 8, 0, 0, 373, 374, 3, 170, 85, 0, 374, 423, 1, 0, 0, 0, 375, 376, 5, 88, 0, 0, 376, 377, 5, 7, 0, 0, 377, 378, 3, 128, 64, 0, 378, 379, 5, 8, 0, 0, 379, 380, 3, 4, 2, 0, 380, 423, 1, 0, 0, 0, 381, 382, 5, 86, 0, 0, 382, 385, 5, 7, 0, 0, 383, 386, 3, 128, 64, 0, 384, 386, 3, 42, 21, 0, 385, 383, 1, 0, 0, 0, 385, 384, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 389, 5, 12, 0, 0, 388, 390, 3, 128, 64, 0, 389, 388, 1, 0, 0, 0, 389, 390, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 393, 5, 12, 0, 0, 392, 394, 3, 128, 64, 0, 393, 392, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 396, 5, 8, 0, 0, 396, 423, 3, 4, 2, 0, 397, 398, 5, 86, 0, 0, 398, 401, 5, 7, 0, 0, 399, 402, 3, 130, 65, 0, 400, 402, 3, 42, 21, 0, 401, 399, 1, 0, 0, 0, 401, 400, 1, 0, 0, 0, 402, 403, 1, 0, 0, 0, 403, 404, 5, 97, 0, 0, 404, 405, 3, 128, 64, 0, 405, 406, 5, 8, 0, 0, 406, 407, 3, 4, 2, 0, 407, 423, 1, 0, 0, 0, 408, 410, 5, 86, 0, 0, 409, 411, 5, 112, 0, 0, 410, 409, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 5, 7, 0, 0, 413, 416, 3, 130, 65, 0, 414, 416, 3, 42, 21, 0, 415, 413, 1, 0, 0, 0, 415, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 5, 101, 0, 0, 418, 419, 3, 128, 64, 0, 419, 420, 5, 8, 0, 0, 420, 421, 3, 4, 2, 0, 421, 423, 1, 0, 0, 0, 422, 367, 1, 0, 0, 0, 422, 375, 1, 0, 0, 0, 422, 381, 1, 0, 0, 0, 422, 397, 1, 0, 0, 0, 422, 408, 1, 0, 0, 0, 423, 53, 1, 0, 0, 0, 424, 428, 5, 80, 0, 0, 425, 428, 3, 168, 84, 0, 426, 428, 5, 108, 0, 0, 427, 424, 1, 0, 0, 0, 427, 425, 1, 0, 0, 0, 427, 426, 1, 0, 0, 0, 428, 55, 1, 0, 0, 0, 429, 432, 5, 85, 0, 0, 430, 431, 4, 28, 1, 0, 431, 433, 3, 162, 81, 0, 432, 430, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 435, 3, 170, 85, 0, 435, 57, 1, 0, 0, 0, 436, 439, 5, 73, 0, 0, 437, 438, 4, 29, 2, 0, 438, 440, 3, 162, 81, 0, 439, 437, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 442, 3, 170, 85, 0, 442, 59, 1, 0, 0, 0, 443, 446, 5, 83, 0, 0, 444, 445, 4, 30, 3, 0, 445, 447, 3, 128, 64, 0, 446, 444, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 3, 170, 85, 0, 449, 61, 1, 0, 0, 0, 450, 453, 7, 1, 0, 0, 451, 452, 4, 31, 4, 0, 452, 454, 3, 128, 64, 0, 453, 451, 1, 0, 0, 0, 453, 454, 1, 0, 0, 0, 454, 455, 1, 0, 0, 0, 455, 456, 3, 170, 85, 0, 456, 63, 1, 0, 0, 0, 457, 458, 5, 92, 0, 0, 458, 459, 5, 7, 0, 0, 459, 460, 3, 128, 64, 0, 460, 461, 5, 8, 0, 0, 461, 462, 3, 4, 2, 0, 462, 65, 1, 0, 0, 0, 463, 464, 5, 87, 0, 0, 464, 465, 5, 7, 0, 0, 465, 466, 3, 128, 64, 0, 466, 467, 5, 8, 0, 0, 467, 468, 3, 68, 34, 0, 468, 67, 1, 0, 0, 0, 469, 471, 5, 9, 0, 0, 470, 472, 3, 70, 35, 0, 471, 470, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 477, 1, 0, 0, 0, 473, 475, 3, 74, 37, 0, 474, 476, 3, 70, 35, 0, 475, 474, 1, 0, 0, 0, 475, 476, 1, 0, 0, 0, 476, 478, 1, 0, 0, 0, 477, 473, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 5, 11, 0, 0, 480, 69, 1, 0, 0, 0, 481, 483, 3, 72, 36, 0, 482, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 71, 1, 0, 0, 0, 486, 487, 5, 77, 0, 0, 487, 488, 3, 128, 64, 0, 488, 490, 5, 17, 0, 0, 489, 491, 3, 8, 4, 0, 490, 489, 1, 0, 0, 0, 490, 491, 1, 0, 0, 0, 491, 73, 1, 0, 0, 0, 492, 493, 5, 93, 0, 0, 493, 495, 5, 17, 0, 0, 494, 496, 3, 8, 4, 0, 495, 494, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 75, 1, 0, 0, 0, 497, 498, 3, 162, 81, 0, 498, 499, 5, 17, 0, 0, 499, 500, 3, 4, 2, 0, 500, 77, 1, 0, 0, 0, 501, 502, 5, 95, 0, 0, 502, 503, 4, 39, 5, 0, 503, 504, 3, 128, 64, 0, 504, 505, 3, 170, 85, 0, 505, 79, 1, 0, 0, 0, 506, 507, 5, 98, 0, 0, 507, 513, 3, 6, 3, 0, 508, 510, 3, 82, 41, 0, 509, 511, 3, 84, 42, 0, 510, 509, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 514, 1, 0, 0, 0, 512, 514, 3, 84, 42, 0, 513, 508, 1, 0, 0, 0, 513, 512, 1, 0, 0, 0, 514, 81, 1, 0, 0, 0, 515, 521, 5, 81, 0, 0, 516, 518, 5, 7, 0, 0, 517, 519, 3, 134, 67, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 522, 5, 8, 0, 0, 521, 516, 1, 0, 0, 0, 521, 522, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 3, 6, 3, 0, 524, 83, 1, 0, 0, 0, 525, 526, 5, 82, 0, 0, 526, 527, 3, 6, 3, 0, 527, 85, 1, 0, 0, 0, 528, 529, 5, 89, 0, 0, 529, 530, 3, 170, 85, 0, 530, 87, 1, 0, 0, 0, 531, 533, 5, 111, 0, 0, 532, 531, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 534, 1, 0, 0, 0, 534, 536, 5, 90, 0, 0, 535, 537, 5, 26, 0, 0, 536, 535, 1, 0, 0, 0, 536, 537, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 539, 3, 162, 81, 0, 539, 541, 5, 7, 0, 0, 540, 542, 3, 104, 52, 0, 541, 540, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 544, 5, 8, 0, 0, 544, 545, 3, 110, 55, 0, 545, 89, 1, 0, 0, 0, 546, 547, 5, 104, 0, 0, 547, 548, 3, 162, 81, 0, 548, 549, 3, 92, 46, 0, 549, 91, 1, 0, 0, 0, 550, 551, 5, 106, 0, 0, 551, 553, 3, 130, 65, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 558, 5, 9, 0, 0, 555, 557, 3, 94, 47, 0, 556, 555, 1, 0, 0, 0, 557, 560, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 561, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 562, 5, 11, 0, 0, 562, 93, 1, 0, 0, 0, 563, 567, 5, 121, 0, 0, 564, 565, 4, 47, 6, 0, 565, 567, 3, 162, 81, 0, 566, 563, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 583, 3, 96, 48, 0, 569, 573, 5, 121, 0, 0, 570, 571, 4, 47, 7, 0, 571, 573, 3, 162, 81, 0, 572, 569, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 574, 1, 0, 0, 0, 574, 583, 3, 98, 49, 0, 575, 579, 5, 121, 0, 0, 576, 577, 4, 47, 8, 0, 577, 579, 3, 162, 81, 0, 578, 575, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 583, 3, 6, 3, 0, 581, 583, 3, 46, 23, 0, 582, 566, 1, 0, 0, 0, 582, 572, 1, 0, 0, 0, 582, 578, 1, 0, 0, 0, 582, 581, 1, 0, 0, 0, 583, 95, 1, 0, 0, 0, 584, 585, 5, 111, 0, 0, 585, 587, 4, 48, 9, 0, 586, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 589, 1, 0, 0, 0, 588, 590, 5, 26, 0, 0, 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 592, 3, 100, 50, 0, 592, 594, 5, 7, 0, 0, 593, 595, 3, 104, 52, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 5, 8, 0, 0, 597, 598, 3, 110, 55, 0, 598, 619, 1, 0, 0, 0, 599, 601, 5, 26, 0, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 603, 3, 156, 78, 0, 603, 604, 5, 7, 0, 0, 604, 605, 5, 8, 0, 0, 605, 606, 3, 110, 55, 0, 606, 619, 1, 0, 0, 0, 607, 609, 5, 26, 0, 0, 608, 607, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 611, 3, 158, 79, 0, 611, 613, 5, 7, 0, 0, 612, 614, 3, 104, 52, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 5, 8, 0, 0, 616, 617, 3, 110, 55, 0, 617, 619, 1, 0, 0, 0, 618, 586, 1, 0, 0, 0, 618, 600, 1, 0, 0, 0, 618, 608, 1, 0, 0, 0, 619, 97, 1, 0, 0, 0, 620, 622, 3, 100, 50, 0, 621, 623, 3, 132, 66, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 99, 1, 0, 0, 0, 624, 627, 3, 122, 61, 0, 625, 627, 3, 102, 51, 0, 626, 624, 1, 0, 0, 0, 626, 625, 1, 0, 0, 0, 627, 101, 1, 0, 0, 0, 628, 629, 5, 31, 0, 0, 629, 630, 3, 160, 80, 0, 630, 103, 1, 0, 0, 0, 631, 636, 3, 106, 53, 0, 632, 633, 5, 13, 0, 0, 633, 635, 3, 106, 53, 0, 634, 632, 1, 0, 0, 0, 635, 638, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 641, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 639, 640, 5, 13, 0, 0, 640, 642, 3, 108, 54, 0, 641, 639, 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 645, 1, 0, 0, 0, 643, 645, 3, 108, 54, 0, 644, 631, 1, 0, 0, 0, 644, 643, 1, 0, 0, 0, 645, 105, 1, 0, 0, 0, 646, 649, 3, 134, 67, 0, 647, 648, 5, 14, 0, 0, 648, 650, 3, 130, 65, 0, 649, 647, 1, 0, 0, 0, 649, 650, 1, 0, 0, 0, 650, 107, 1, 0, 0, 0, 651, 652, 5, 18, 0, 0, 652, 653, 3, 130, 65, 0, 653, 109, 1, 0, 0, 0, 654, 656, 5, 9, 0, 0, 655, 657, 3, 112, 56, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 659, 5, 11, 0, 0, 659, 111, 1, 0, 0, 0, 660, 662, 3, 2, 1, 0, 661, 660, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 661, 1, 0, 0, 0, 663, 664, 1, 0, 0, 0, 664, 113, 1, 0, 0, 0, 665, 666, 5, 5, 0, 0, 666, 667, 3, 116, 58, 0, 667, 668, 5, 6, 0, 0, 668, 115, 1, 0, 0, 0, 669, 671, 5, 13, 0, 0, 670, 669, 1, 0, 0, 0, 671, 674, 1, 0, 0, 0, 672, 670, 1, 0, 0, 0, 672, 673, 1, 0, 0, 0, 673, 676, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 675, 677, 3, 118, 59, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 686, 1, 0, 0, 0, 678, 680, 5, 13, 0, 0, 679, 678, 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 682, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 685, 3, 118, 59, 0, 684, 679, 1, 0, 0, 0, 685, 688, 1, 0, 0, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 692, 1, 0, 0, 0, 688, 686, 1, 0, 0, 0, 689, 691, 5, 13, 0, 0, 690, 689, 1, 0, 0, 0, 691, 694, 1, 0, 0, 0, 692, 690, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 117, 1, 0, 0, 0, 694, 692, 1, 0, 0, 0, 695, 697, 5, 18, 0, 0, 696, 695, 1, 0, 0, 0, 696, 697, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 699, 3, 130, 65, 0, 699, 119, 1, 0, 0, 0, 700, 701, 3, 122, 61, 0, 701, 702, 5, 17, 0, 0, 702, 703, 3, 130, 65, 0, 703, 740, 1, 0, 0, 0, 704, 705, 5, 5, 0, 0, 705, 706, 3, 130, 65, 0, 706, 707, 5, 6, 0, 0, 707, 708, 5, 17, 0, 0, 708, 709, 3, 130, 65, 0, 709, 740, 1, 0, 0, 0, 710, 712, 5, 111, 0, 0, 711, 710, 1, 0, 0, 0, 711, 712, 1, 0, 0, 0, 712, 714, 1, 0, 0, 0, 713, 715, 5, 26, 0, 0, 714, 713, 1, 0, 0, 0, 714, 715, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 3, 122, 61, 0, 717, 719, 5, 7, 0, 0, 718, 720, 3, 104, 52, 0, 719, 718, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, 722, 5, 8, 0, 0, 722, 723, 3, 110, 55, 0, 723, 740, 1, 0, 0, 0, 724, 725, 3, 156, 78, 0, 725, 726, 5, 7, 0, 0, 726, 727, 5, 8, 0, 0, 727, 728, 3, 110, 55, 0, 728, 740, 1, 0, 0, 0, 729, 730, 3, 158, 79, 0, 730, 731, 5, 7, 0, 0, 731, 732, 3, 106, 53, 0, 732, 733, 5, 8, 0, 0, 733, 734, 3, 110, 55, 0, 734, 740, 1, 0, 0, 0, 735, 737, 5, 18, 0, 0, 736, 735, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 738, 1, 0, 0, 0, 738, 740, 3, 130, 65, 0, 739, 700, 1, 0, 0, 0, 739, 704, 1, 0, 0, 0, 739, 711, 1, 0, 0, 0, 739, 724, 1, 0, 0, 0, 739, 729, 1, 0, 0, 0, 739, 736, 1, 0, 0, 0, 740, 121, 1, 0, 0, 0, 741, 749, 3, 160, 80, 0, 742, 749, 5, 123, 0, 0, 743, 749, 3, 152, 76, 0, 744, 745, 5, 5, 0, 0, 745, 746, 3, 130, 65, 0, 746, 747, 5, 6, 0, 0, 747, 749, 1, 0, 0, 0, 748, 741, 1, 0, 0, 0, 748, 742, 1, 0, 0, 0, 748, 743, 1, 0, 0, 0, 748, 744, 1, 0, 0, 0, 749, 123, 1, 0, 0, 0, 750, 762, 5, 7, 0, 0, 751, 756, 3, 126, 63, 0, 752, 753, 5, 13, 0, 0, 753, 755, 3, 126, 63, 0, 754, 752, 1, 0, 0, 0, 755, 758, 1, 0, 0, 0, 756, 754, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 760, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 759, 761, 5, 13, 0, 0, 760, 759, 1, 0, 0, 0, 760, 761, 1, 0, 0, 0, 761, 763, 1, 0, 0, 0, 762, 751, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 8, 0, 0, 765, 125, 1, 0, 0, 0, 766, 768, 5, 18, 0, 0, 767, 766, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 771, 1, 0, 0, 0, 769, 772, 3, 130, 65, 0, 770, 772, 3, 162, 81, 0, 771, 769, 1, 0, 0, 0, 771, 770, 1, 0, 0, 0, 772, 127, 1, 0, 0, 0, 773, 778, 3, 130, 65, 0, 774, 775, 5, 13, 0, 0, 775, 777, 3, 130, 65, 0, 776, 774, 1, 0, 0, 0, 777, 780, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 778, 779, 1, 0, 0, 0, 779, 129, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 781, 782, 6, 65, -1, 0, 782, 838, 3, 138, 69, 0, 783, 785, 5, 104, 0, 0, 784, 786, 3, 162, 81, 0, 785, 784, 1, 0, 0, 0, 785, 786, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 838, 3, 92, 46, 0, 788, 789, 5, 79, 0, 0, 789, 790, 3, 162, 81, 0, 790, 791, 3, 124, 62, 0, 791, 838, 1, 0, 0, 0, 792, 793, 5, 79, 0, 0, 793, 794, 3, 130, 65, 0, 794, 795, 3, 124, 62, 0, 795, 838, 1, 0, 0, 0, 796, 797, 5, 79, 0, 0, 797, 838, 3, 130, 65, 42, 798, 799, 5, 79, 0, 0, 799, 800, 5, 19, 0, 0, 800, 838, 3, 162, 81, 0, 801, 802, 5, 96, 0, 0, 802, 838, 3, 130, 65, 37, 803, 804, 5, 84, 0, 0, 804, 838, 3, 130, 65, 36, 805, 806, 5, 76, 0, 0, 806, 838, 3, 130, 65, 35, 807, 808, 5, 20, 0, 0, 808, 838, 3, 130, 65, 34, 809, 810, 5, 21, 0, 0, 810, 838, 3, 130, 65, 33, 811, 812, 5, 22, 0, 0, 812, 838, 3, 130, 65, 32, 813, 814, 5, 23, 0, 0, 814, 838, 3, 130, 65, 31, 815, 816, 5, 24, 0, 0, 816, 838, 3, 130, 65, 30, 817, 818, 5, 25, 0, 0, 818, 838, 3, 130, 65, 29, 819, 820, 5, 112, 0, 0, 820, 838, 3, 130, 65, 28, 821, 822, 5, 110, 0, 0, 822, 823, 5, 7, 0, 0, 823, 824, 3, 130, 65, 0, 824, 825, 5, 8, 0, 0, 825, 838, 1, 0, 0, 0, 826, 838, 3, 62, 31, 0, 827, 838, 5, 91, 0, 0, 828, 838, 3, 162, 81, 0, 829, 838, 5, 107, 0, 0, 830, 838, 3, 146, 73, 0, 831, 838, 3, 114, 57, 0, 832, 838, 3, 136, 68, 0, 833, 834, 5, 7, 0, 0, 834, 835, 3, 128, 64, 0, 835, 836, 5, 8, 0, 0, 836, 838, 1, 0, 0, 0, 837, 781, 1, 0, 0, 0, 837, 783, 1, 0, 0, 0, 837, 788, 1, 0, 0, 0, 837, 792, 1, 0, 0, 0, 837, 796, 1, 0, 0, 0, 837, 798, 1, 0, 0, 0, 837, 801, 1, 0, 0, 0, 837, 803, 1, 0, 0, 0, 837, 805, 1, 0, 0, 0, 837, 807, 1, 0, 0, 0, 837, 809, 1, 0, 0, 0, 837, 811, 1, 0, 0, 0, 837, 813, 1, 0, 0, 0, 837, 815, 1, 0, 0, 0, 837, 817, 1, 0, 0, 0, 837, 819, 1, 0, 0, 0, 837, 821, 1, 0, 0, 0, 837, 826, 1, 0, 0, 0, 837, 827, 1, 0, 0, 0, 837, 828, 1, 0, 0, 0, 837, 829, 1, 0, 0, 0, 837, 830, 1, 0, 0, 0, 837, 831, 1, 0, 0, 0, 837, 832, 1, 0, 0, 0, 837, 833, 1, 0, 0, 0, 838, 926, 1, 0, 0, 0, 839, 840, 10, 47, 0, 0, 840, 841, 5, 16, 0, 0, 841, 925, 3, 130, 65, 48, 842, 843, 10, 27, 0, 0, 843, 844, 5, 29, 0, 0, 844, 925, 3, 130, 65, 27, 845, 846, 10, 26, 0, 0, 846, 847, 7, 2, 0, 0, 847, 925, 3, 130, 65, 27, 848, 849, 10, 25, 0, 0, 849, 850, 7, 3, 0, 0, 850, 925, 3, 130, 65, 26, 851, 852, 10, 24, 0, 0, 852, 853, 5, 30, 0, 0, 853, 925, 3, 130, 65, 25, 854, 855, 10, 23, 0, 0, 855, 856, 7, 4, 0, 0, 856, 925, 3, 130, 65, 24, 857, 858, 10, 22, 0, 0, 858, 859, 7, 5, 0, 0, 859, 925, 3, 130, 65, 23, 860, 861, 10, 21, 0, 0, 861, 862, 5, 75, 0, 0, 862, 925, 3, 130, 65, 22, 863, 864, 10, 20, 0, 0, 864, 865, 5, 97, 0, 0, 865, 925, 3, 130, 65, 21, 866, 867, 10, 19, 0, 0, 867, 868, 7, 6, 0, 0, 868, 925, 3, 130, 65, 20, 869, 870, 10, 18, 0, 0, 870, 871, 5, 43, 0, 0, 871, 925, 3, 130, 65, 19, 872, 873, 10, 17, 0, 0, 873, 874, 5, 44, 0, 0, 874, 925, 3, 130, 65, 18, 875, 876, 10, 16, 0, 0, 876, 877, 5, 45, 0, 0, 877, 925, 3, 130, 65, 17, 878, 879, 10, 15, 0, 0, 879, 880, 5, 46, 0, 0, 880, 925, 3, 130, 65, 16, 881, 882, 10, 14, 0, 0, 882, 883, 5, 47, 0, 0, 883, 925, 3, 130, 65, 15, 884, 885, 10, 13, 0, 0, 885, 886, 5, 15, 0, 0, 886, 887, 3, 130, 65, 0, 887, 888, 5, 17, 0, 0, 888, 889, 3, 130, 65, 14, 889, 925, 1, 0, 0, 0, 890, 891, 10, 12, 0, 0, 891, 892, 5, 14, 0, 0, 892, 925, 3, 130, 65, 12, 893, 894, 10, 11, 0, 0, 894, 895, 3, 144, 72, 0, 895, 896, 3, 130, 65, 11, 896, 925, 1, 0, 0, 0, 897, 899, 10, 46, 0, 0, 898, 900, 5, 16, 0, 0, 899, 898, 1, 0, 0, 0, 899, 900, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 902, 5, 5, 0, 0, 902, 903, 3, 128, 64, 0, 903, 904, 5, 6, 0, 0, 904, 925, 1, 0, 0, 0, 905, 907, 10, 45, 0, 0, 906, 908, 5, 15, 0, 0, 907, 906, 1, 0, 0, 0, 907, 908, 1, 0, 0, 0, 908, 909, 1, 0, 0, 0, 909, 911, 5, 19, 0, 0, 910, 912, 5, 31, 0, 0, 911, 910, 1, 0, 0, 0, 911, 912, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 925, 3, 160, 80, 0, 914, 915, 10, 41, 0, 0, 915, 925, 3, 124, 62, 0, 916, 917, 10, 39, 0, 0, 917, 918, 4, 65, 32, 0, 918, 925, 5, 20, 0, 0, 919, 920, 10, 38, 0, 0, 920, 921, 4, 65, 34, 0, 921, 925, 5, 21, 0, 0, 922, 923, 10, 9, 0, 0, 923, 925, 3, 148, 74, 0, 924, 839, 1, 0, 0, 0, 924, 842, 1, 0, 0, 0, 924, 845, 1, 0, 0, 0, 924, 848, 1, 0, 0, 0, 924, 851, 1, 0, 0, 0, 924, 854, 1, 0, 0, 0, 924, 857, 1, 0, 0, 0, 924, 860, 1, 0, 0, 0, 924, 863, 1, 0, 0, 0, 924, 866, 1, 0, 0, 0, 924, 869, 1, 0, 0, 0, 924, 872, 1, 0, 0, 0, 924, 875, 1, 0, 0, 0, 924, 878, 1, 0, 0, 0, 924, 881, 1, 0, 0, 0, 924, 884, 1, 0, 0, 0, 924, 890, 1, 0, 0, 0, 924, 893, 1, 0, 0, 0, 924, 897, 1, 0, 0, 0, 924, 905, 1, 0, 0, 0, 924, 914, 1, 0, 0, 0, 924, 916, 1, 0, 0, 0, 924, 919, 1, 0, 0, 0, 924, 922, 1, 0, 0, 0, 925, 928, 1, 0, 0, 0, 926, 924, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 131, 1, 0, 0, 0, 928, 926, 1, 0, 0, 0, 929, 930, 5, 14, 0, 0, 930, 931, 3, 130, 65, 0, 931, 133, 1, 0, 0, 0, 932, 937, 3, 162, 81, 0, 933, 937, 3, 166, 83, 0, 934, 937, 3, 114, 57, 0, 935, 937, 3, 136, 68, 0, 936, 932, 1, 0, 0, 0, 936, 933, 1, 0, 0, 0, 936, 934, 1, 0, 0, 0, 936, 935, 1, 0, 0, 0, 937, 135, 1, 0, 0, 0, 938, 950, 5, 9, 0, 0, 939, 944, 3, 120, 60, 0, 940, 941, 5, 13, 0, 0, 941, 943, 3, 120, 60, 0, 942, 940, 1, 0, 0, 0, 943, 946, 1, 0, 0, 0, 944, 942, 1, 0, 0, 0, 944, 945, 1, 0, 0, 0, 945, 948, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 947, 949, 5, 13, 0, 0, 948, 947, 1, 0, 0, 0, 948, 949, 1, 0, 0, 0, 949, 951, 1, 0, 0, 0, 950, 939, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 953, 5, 11, 0, 0, 953, 137, 1, 0, 0, 0, 954, 976, 3, 88, 44, 0, 955, 957, 5, 111, 0, 0, 956, 955, 1, 0, 0, 0, 956, 957, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 960, 5, 90, 0, 0, 959, 961, 5, 26, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 964, 5, 7, 0, 0, 963, 965, 3, 104, 52, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 966, 1, 0, 0, 0, 966, 967, 5, 8, 0, 0, 967, 976, 3, 110, 55, 0, 968, 970, 5, 111, 0, 0, 969, 968, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 971, 1, 0, 0, 0, 971, 972, 3, 140, 70, 0, 972, 973, 5, 61, 0, 0, 973, 974, 3, 142, 71, 0, 974, 976, 1, 0, 0, 0, 975, 954, 1, 0, 0, 0, 975, 956, 1, 0, 0, 0, 975, 969, 1, 0, 0, 0, 976, 139, 1, 0, 0, 0, 977, 984, 3, 122, 61, 0, 978, 980, 5, 7, 0, 0, 979, 981, 3, 104, 52, 0, 980, 979, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 5, 8, 0, 0, 983, 977, 1, 0, 0, 0, 983, 978, 1, 0, 0, 0, 984, 141, 1, 0, 0, 0, 985, 988, 3, 130, 65, 0, 986, 988, 3, 110, 55, 0, 987, 985, 1, 0, 0, 0, 987, 986, 1, 0, 0, 0, 988, 143, 1, 0, 0, 0, 989, 990, 7, 7, 0, 0, 990, 145, 1, 0, 0, 0, 991, 999, 5, 62, 0, 0, 992, 999, 5, 63, 0, 0, 993, 999, 5, 123, 0, 0, 994, 999, 3, 148, 74, 0, 995, 999, 5, 4, 0, 0, 996, 999, 3, 152, 76, 0, 997, 999, 3, 154, 77, 0, 998, 991, 1, 0, 0, 0, 998, 992, 1, 0, 0, 0, 998, 993, 1, 0, 0, 0, 998, 994, 1, 0, 0, 0, 998, 995, 1, 0, 0, 0, 998, 996, 1, 0, 0, 0, 998, 997, 1, 0, 0, 0, 999, 147, 1, 0, 0, 0, 1000, 1004, 5, 124, 0, 0, 1001, 1003, 3, 150, 75, 0, 1002, 1001, 1, 0, 0, 0, 1003, 1006, 1, 0, 0, 0, 1004, 1002, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 1, 0, 0, 0, 1006, 1004, 1, 0, 0, 0, 1007, 1008, 5, 124, 0, 0, 1008, 149, 1, 0, 0, 0, 1009, 1015, 5, 131, 0, 0, 1010, 1011, 5, 130, 0, 0, 1011, 1012, 3, 130, 65, 0, 1012, 1013, 5, 10, 0, 0, 1013, 1015, 1, 0, 0, 0, 1014, 1009, 1, 0, 0, 0, 1014, 1010, 1, 0, 0, 0, 1015, 151, 1, 0, 0, 0, 1016, 1017, 7, 8, 0, 0, 1017, 153, 1, 0, 0, 0, 1018, 1019, 7, 9, 0, 0, 1019, 155, 1, 0, 0, 0, 1020, 1021, 4, 78, 36, 0, 1021, 1022, 3, 162, 81, 0, 1022, 1023, 3, 100, 50, 0, 1023, 157, 1, 0, 0, 0, 1024, 1025, 4, 79, 37, 0, 1025, 1026, 3, 162, 81, 0, 1026, 1027, 3, 100, 50, 0, 1027, 159, 1, 0, 0, 0, 1028, 1031, 3, 162, 81, 0, 1029, 1031, 3, 164, 82, 0, 1030, 1028, 1, 0, 0, 0, 1030, 1029, 1, 0, 0, 0, 1031, 161, 1, 0, 0, 0, 1032, 1033, 7, 10, 0, 0, 1033, 163, 1, 0, 0, 0, 1034, 1038, 3, 166, 83, 0, 1035, 1038, 5, 62, 0, 0, 1036, 1038, 5, 63, 0, 0, 1037, 1034, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 165, 1, 0, 0, 0, 1039, 1088, 5, 73, 0, 0, 1040, 1088, 5, 74, 0, 0, 1041, 1088, 5, 75, 0, 0, 1042, 1088, 5, 76, 0, 0, 1043, 1088, 5, 77, 0, 0, 1044, 1088, 5, 78, 0, 0, 1045, 1088, 5, 79, 0, 0, 1046, 1088, 5, 80, 0, 0, 1047, 1088, 5, 81, 0, 0, 1048, 1088, 5, 82, 0, 0, 1049, 1088, 5, 83, 0, 0, 1050, 1088, 5, 84, 0, 0, 1051, 1088, 5, 85, 0, 0, 1052, 1088, 5, 86, 0, 0, 1053, 1088, 5, 87, 0, 0, 1054, 1088, 5, 88, 0, 0, 1055, 1088, 5, 89, 0, 0, 1056, 1088, 5, 90, 0, 0, 1057, 1088, 5, 91, 0, 0, 1058, 1088, 5, 92, 0, 0, 1059, 1088, 5, 93, 0, 0, 1060, 1088, 5, 94, 0, 0, 1061, 1088, 5, 95, 0, 0, 1062, 1088, 5, 96, 0, 0, 1063, 1088, 5, 97, 0, 0, 1064, 1088, 5, 98, 0, 0, 1065, 1088, 5, 104, 0, 0, 1066, 1088, 5, 105, 0, 0, 1067, 1088, 5, 106, 0, 0, 1068, 1088, 5, 107, 0, 0, 1069, 1088, 5, 108, 0, 0, 1070, 1088, 5, 109, 0, 0, 1071, 1088, 5, 110, 0, 0, 1072, 1088, 5, 113, 0, 0, 1073, 1088, 3, 168, 84, 0, 1074, 1088, 5, 116, 0, 0, 1075, 1088, 5, 117, 0, 0, 1076, 1088, 5, 118, 0, 0, 1077, 1088, 5, 119, 0, 0, 1078, 1088, 5, 120, 0, 0, 1079, 1088, 5, 121, 0, 0, 1080, 1088, 5, 102, 0, 0, 1081, 1088, 5, 103, 0, 0, 1082, 1088, 5, 111, 0, 0, 1083, 1088, 5, 112, 0, 0, 1084, 1088, 5, 100, 0, 0, 1085, 1088, 5, 99, 0, 0, 1086, 1088, 5, 101, 0, 0, 1087, 1039, 1, 0, 0, 0, 1087, 1040, 1, 0, 0, 0, 1087, 1041, 1, 0, 0, 0, 1087, 1042, 1, 0, 0, 0, 1087, 1043, 1, 0, 0, 0, 1087, 1044, 1, 0, 0, 0, 1087, 1045, 1, 0, 0, 0, 1087, 1046, 1, 0, 0, 0, 1087, 1047, 1, 0, 0, 0, 1087, 1048, 1, 0, 0, 0, 1087, 1049, 1, 0, 0, 0, 1087, 1050, 1, 0, 0, 0, 1087, 1051, 1, 0, 0, 0, 1087, 1052, 1, 0, 0, 0, 1087, 1053, 1, 0, 0, 0, 1087, 1054, 1, 0, 0, 0, 1087, 1055, 1, 0, 0, 0, 1087, 1056, 1, 0, 0, 0, 1087, 1057, 1, 0, 0, 0, 1087, 1058, 1, 0, 0, 0, 1087, 1059, 1, 0, 0, 0, 1087, 1060, 1, 0, 0, 0, 1087, 1061, 1, 0, 0, 0, 1087, 1062, 1, 0, 0, 0, 1087, 1063, 1, 0, 0, 0, 1087, 1064, 1, 0, 0, 0, 1087, 1065, 1, 0, 0, 0, 1087, 1066, 1, 0, 0, 0, 1087, 1067, 1, 0, 0, 0, 1087, 1068, 1, 0, 0, 0, 1087, 1069, 1, 0, 0, 0, 1087, 1070, 1, 0, 0, 0, 1087, 1071, 1, 0, 0, 0, 1087, 1072, 1, 0, 0, 0, 1087, 1073, 1, 0, 0, 0, 1087, 1074, 1, 0, 0, 0, 1087, 1075, 1, 0, 0, 0, 1087, 1076, 1, 0, 0, 0, 1087, 1077, 1, 0, 0, 0, 1087, 1078, 1, 0, 0, 0, 1087, 1079, 1, 0, 0, 0, 1087, 1080, 1, 0, 0, 0, 1087, 1081, 1, 0, 0, 0, 1087, 1082, 1, 0, 0, 0, 1087, 1083, 1, 0, 0, 0, 1087, 1084, 1, 0, 0, 0, 1087, 1085, 1, 0, 0, 0, 1087, 1086, 1, 0, 0, 0, 1088, 167, 1, 0, 0, 0, 1089, 1090, 7, 11, 0, 0, 1090, 169, 1, 0, 0, 0, 1091, 1096, 5, 12, 0, 0, 1092, 1096, 5, 0, 0, 1, 1093, 1096, 4, 85, 38, 0, 1094, 1096, 4, 85, 39, 0, 1095, 1091, 1, 0, 0, 0, 1095, 1092, 1, 0, 0, 0, 1095, 1093, 1, 0, 0, 0, 1095, 1094, 1, 0, 0, 0, 1096, 171, 1, 0, 0, 0, 119, 173, 176, 202, 206, 213, 219, 223, 230, 238, 243, 245, 252, 256, 265, 269, 277, 281, 285, 294, 302, 306, 314, 319, 321, 328, 333, 344, 350, 365, 385, 389, 393, 401, 410, 415, 422, 427, 432, 439, 446, 453, 471, 475, 477, 484, 490, 495, 510, 513, 518, 521, 532, 536, 541, 552, 558, 566, 572, 578, 582, 586, 589, 594, 600, 608, 613, 618, 622, 626, 636, 641, 644, 649, 656, 663, 672, 676, 681, 686, 692, 696, 711, 714, 719, 736, 739, 748, 756, 760, 762, 767, 771, 778, 785, 837, 899, 907, 911, 924, 926, 936, 944, 948, 950, 956, 960, 964, 969, 975, 980, 983, 987, 998, 1004, 1014, 1030, 1037, 1087, 1095] \ No newline at end of file diff --git a/antlr_gen/JavaScriptParser.py b/antlr_gen/JavaScriptParser.py new file mode 100644 index 0000000..de0bb04 --- /dev/null +++ b/antlr_gen/JavaScriptParser.py @@ -0,0 +1,9662 @@ +# Generated from JavaScriptParser.g4 by ANTLR 4.13.2 +# encoding: utf-8 +from antlr4 import * +from io import StringIO +import sys +if sys.version_info[1] > 5: + from typing import TextIO +else: + from typing.io import TextIO + +if "." in __name__: + from .JavaScriptParserBase import JavaScriptParserBase +else: + from JavaScriptParserBase import JavaScriptParserBase + +def serializedATN(): + return [ + 4,1,131,1098,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,2,65,7, + 65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2, + 72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7, + 78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2, + 85,7,85,1,0,3,0,174,8,0,1,0,3,0,177,8,0,1,0,1,0,1,1,1,1,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,1,2,1,2,1,2,1,2, + 1,2,1,2,3,2,203,8,2,1,3,1,3,3,3,207,8,3,1,3,1,3,1,4,4,4,212,8,4, + 11,4,12,4,213,1,5,1,5,1,5,1,6,3,6,220,8,6,1,6,1,6,3,6,224,8,6,1, + 6,1,6,1,6,1,6,1,6,3,6,231,8,6,1,7,1,7,1,7,1,7,5,7,237,8,7,10,7,12, + 7,240,9,7,1,7,1,7,3,7,244,8,7,3,7,246,8,7,1,7,1,7,1,8,1,8,1,8,3, + 8,253,8,8,1,9,1,9,3,9,257,8,9,1,10,1,10,1,11,1,11,1,11,1,12,1,12, + 3,12,266,8,12,1,12,1,12,3,12,270,8,12,1,13,1,13,1,13,1,14,1,14,1, + 14,3,14,278,8,14,1,15,1,15,3,15,282,8,15,1,15,1,15,3,15,286,8,15, + 1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,295,8,15,1,16,1,16,1,16, + 1,16,1,16,1,16,3,16,303,8,16,1,16,1,16,3,16,307,8,16,1,17,1,17,1, + 17,1,17,5,17,313,8,17,10,17,12,17,316,9,17,1,17,1,17,3,17,320,8, + 17,3,17,322,8,17,1,17,1,17,1,18,1,18,1,18,3,18,329,8,18,1,19,1,19, + 1,19,3,19,334,8,19,1,20,1,20,1,20,1,21,1,21,1,21,1,21,5,21,343,8, + 21,10,21,12,21,346,9,21,1,22,1,22,1,22,3,22,351,8,22,1,23,1,23,1, + 24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,3,25,366,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,1,26,1,26,1,26,1,26,3,26,386,8,26,1,26,1,26,3,26,390,8,26, + 1,26,1,26,3,26,394,8,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,402,8, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,411,8,26,1,26,1,26,1, + 26,3,26,416,8,26,1,26,1,26,1,26,1,26,1,26,3,26,423,8,26,1,27,1,27, + 1,27,3,27,428,8,27,1,28,1,28,1,28,3,28,433,8,28,1,28,1,28,1,29,1, + 29,1,29,3,29,440,8,29,1,29,1,29,1,30,1,30,1,30,3,30,447,8,30,1,30, + 1,30,1,31,1,31,1,31,3,31,454,8,31,1,31,1,31,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,34,1,34,3,34,472,8,34, + 1,34,1,34,3,34,476,8,34,3,34,478,8,34,1,34,1,34,1,35,4,35,483,8, + 35,11,35,12,35,484,1,36,1,36,1,36,1,36,3,36,491,8,36,1,37,1,37,1, + 37,3,37,496,8,37,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,40,3,40,511,8,40,1,40,3,40,514,8,40,1,41,1,41,1,41, + 3,41,519,8,41,1,41,3,41,522,8,41,1,41,1,41,1,42,1,42,1,42,1,43,1, + 43,1,43,1,44,3,44,533,8,44,1,44,1,44,3,44,537,8,44,1,44,1,44,1,44, + 3,44,542,8,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,3,46, + 553,8,46,1,46,1,46,5,46,557,8,46,10,46,12,46,560,9,46,1,46,1,46, + 1,47,1,47,1,47,3,47,567,8,47,1,47,1,47,1,47,1,47,3,47,573,8,47,1, + 47,1,47,1,47,1,47,3,47,579,8,47,1,47,1,47,3,47,583,8,47,1,48,1,48, + 3,48,587,8,48,1,48,3,48,590,8,48,1,48,1,48,1,48,3,48,595,8,48,1, + 48,1,48,1,48,1,48,3,48,601,8,48,1,48,1,48,1,48,1,48,1,48,1,48,3, + 48,609,8,48,1,48,1,48,1,48,3,48,614,8,48,1,48,1,48,1,48,3,48,619, + 8,48,1,49,1,49,3,49,623,8,49,1,50,1,50,3,50,627,8,50,1,51,1,51,1, + 51,1,52,1,52,1,52,5,52,635,8,52,10,52,12,52,638,9,52,1,52,1,52,3, + 52,642,8,52,1,52,3,52,645,8,52,1,53,1,53,1,53,3,53,650,8,53,1,54, + 1,54,1,54,1,55,1,55,3,55,657,8,55,1,55,1,55,1,56,4,56,662,8,56,11, + 56,12,56,663,1,57,1,57,1,57,1,57,1,58,5,58,671,8,58,10,58,12,58, + 674,9,58,1,58,3,58,677,8,58,1,58,4,58,680,8,58,11,58,12,58,681,1, + 58,5,58,685,8,58,10,58,12,58,688,9,58,1,58,5,58,691,8,58,10,58,12, + 58,694,9,58,1,59,3,59,697,8,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60, + 1,60,1,60,1,60,1,60,1,60,1,60,3,60,712,8,60,1,60,3,60,715,8,60,1, + 60,1,60,1,60,3,60,720,8,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1, + 60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,737,8,60,1,60,3,60,740, + 8,60,1,61,1,61,1,61,1,61,1,61,1,61,1,61,3,61,749,8,61,1,62,1,62, + 1,62,1,62,5,62,755,8,62,10,62,12,62,758,9,62,1,62,3,62,761,8,62, + 3,62,763,8,62,1,62,1,62,1,63,3,63,768,8,63,1,63,1,63,3,63,772,8, + 63,1,64,1,64,1,64,5,64,777,8,64,10,64,12,64,780,9,64,1,65,1,65,1, + 65,1,65,3,65,786,8,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,3,65,838,8,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,3,65,900,8,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,908,8,65,1,65, + 1,65,3,65,912,8,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65, + 1,65,1,65,5,65,925,8,65,10,65,12,65,928,9,65,1,66,1,66,1,66,1,67, + 1,67,1,67,1,67,3,67,937,8,67,1,68,1,68,1,68,1,68,5,68,943,8,68,10, + 68,12,68,946,9,68,1,68,3,68,949,8,68,3,68,951,8,68,1,68,1,68,1,69, + 1,69,3,69,957,8,69,1,69,1,69,3,69,961,8,69,1,69,1,69,3,69,965,8, + 69,1,69,1,69,1,69,3,69,970,8,69,1,69,1,69,1,69,1,69,3,69,976,8,69, + 1,70,1,70,1,70,3,70,981,8,70,1,70,3,70,984,8,70,1,71,1,71,3,71,988, + 8,71,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,1,73,3,73,999,8,73, + 1,74,1,74,5,74,1003,8,74,10,74,12,74,1006,9,74,1,74,1,74,1,75,1, + 75,1,75,1,75,1,75,3,75,1015,8,75,1,76,1,76,1,77,1,77,1,78,1,78,1, + 78,1,78,1,79,1,79,1,79,1,79,1,80,1,80,3,80,1031,8,80,1,81,1,81,1, + 82,1,82,1,82,3,82,1038,8,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1, + 83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1, + 83,1,83,3,83,1088,8,83,1,84,1,84,1,85,1,85,1,85,1,85,3,85,1096,8, + 85,1,85,0,1,130,86,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,74,76, + 78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114, + 116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146, + 148,150,152,154,156,158,160,162,164,166,168,170,0,12,3,0,102,102, + 112,112,122,122,1,0,102,103,1,0,26,28,1,0,22,23,1,0,32,34,1,0,35, + 38,1,0,39,42,1,0,48,60,1,0,64,68,1,0,69,72,4,0,99,102,111,111,115, + 115,122,122,1,0,114,115,1267,0,173,1,0,0,0,2,180,1,0,0,0,4,202,1, + 0,0,0,6,204,1,0,0,0,8,211,1,0,0,0,10,215,1,0,0,0,12,230,1,0,0,0, + 14,232,1,0,0,0,16,249,1,0,0,0,18,256,1,0,0,0,20,258,1,0,0,0,22,260, + 1,0,0,0,24,265,1,0,0,0,26,271,1,0,0,0,28,274,1,0,0,0,30,294,1,0, + 0,0,32,306,1,0,0,0,34,308,1,0,0,0,36,325,1,0,0,0,38,333,1,0,0,0, + 40,335,1,0,0,0,42,338,1,0,0,0,44,347,1,0,0,0,46,352,1,0,0,0,48,354, + 1,0,0,0,50,358,1,0,0,0,52,422,1,0,0,0,54,427,1,0,0,0,56,429,1,0, + 0,0,58,436,1,0,0,0,60,443,1,0,0,0,62,450,1,0,0,0,64,457,1,0,0,0, + 66,463,1,0,0,0,68,469,1,0,0,0,70,482,1,0,0,0,72,486,1,0,0,0,74,492, + 1,0,0,0,76,497,1,0,0,0,78,501,1,0,0,0,80,506,1,0,0,0,82,515,1,0, + 0,0,84,525,1,0,0,0,86,528,1,0,0,0,88,532,1,0,0,0,90,546,1,0,0,0, + 92,552,1,0,0,0,94,582,1,0,0,0,96,618,1,0,0,0,98,620,1,0,0,0,100, + 626,1,0,0,0,102,628,1,0,0,0,104,644,1,0,0,0,106,646,1,0,0,0,108, + 651,1,0,0,0,110,654,1,0,0,0,112,661,1,0,0,0,114,665,1,0,0,0,116, + 672,1,0,0,0,118,696,1,0,0,0,120,739,1,0,0,0,122,748,1,0,0,0,124, + 750,1,0,0,0,126,767,1,0,0,0,128,773,1,0,0,0,130,837,1,0,0,0,132, + 929,1,0,0,0,134,936,1,0,0,0,136,938,1,0,0,0,138,975,1,0,0,0,140, + 983,1,0,0,0,142,987,1,0,0,0,144,989,1,0,0,0,146,998,1,0,0,0,148, + 1000,1,0,0,0,150,1014,1,0,0,0,152,1016,1,0,0,0,154,1018,1,0,0,0, + 156,1020,1,0,0,0,158,1024,1,0,0,0,160,1030,1,0,0,0,162,1032,1,0, + 0,0,164,1037,1,0,0,0,166,1087,1,0,0,0,168,1089,1,0,0,0,170,1095, + 1,0,0,0,172,174,5,1,0,0,173,172,1,0,0,0,173,174,1,0,0,0,174,176, + 1,0,0,0,175,177,3,112,56,0,176,175,1,0,0,0,176,177,1,0,0,0,177,178, + 1,0,0,0,178,179,5,0,0,1,179,1,1,0,0,0,180,181,3,4,2,0,181,3,1,0, + 0,0,182,203,3,6,3,0,183,203,3,40,20,0,184,203,3,10,5,0,185,203,3, + 30,15,0,186,203,3,46,23,0,187,203,3,90,45,0,188,203,3,88,44,0,189, + 203,3,48,24,0,190,203,3,50,25,0,191,203,3,52,26,0,192,203,3,56,28, + 0,193,203,3,58,29,0,194,203,3,60,30,0,195,203,3,62,31,0,196,203, + 3,64,32,0,197,203,3,76,38,0,198,203,3,66,33,0,199,203,3,78,39,0, + 200,203,3,80,40,0,201,203,3,86,43,0,202,182,1,0,0,0,202,183,1,0, + 0,0,202,184,1,0,0,0,202,185,1,0,0,0,202,186,1,0,0,0,202,187,1,0, + 0,0,202,188,1,0,0,0,202,189,1,0,0,0,202,190,1,0,0,0,202,191,1,0, + 0,0,202,192,1,0,0,0,202,193,1,0,0,0,202,194,1,0,0,0,202,195,1,0, + 0,0,202,196,1,0,0,0,202,197,1,0,0,0,202,198,1,0,0,0,202,199,1,0, + 0,0,202,200,1,0,0,0,202,201,1,0,0,0,203,5,1,0,0,0,204,206,5,9,0, + 0,205,207,3,8,4,0,206,205,1,0,0,0,206,207,1,0,0,0,207,208,1,0,0, + 0,208,209,5,11,0,0,209,7,1,0,0,0,210,212,3,4,2,0,211,210,1,0,0,0, + 212,213,1,0,0,0,213,211,1,0,0,0,213,214,1,0,0,0,214,9,1,0,0,0,215, + 216,5,110,0,0,216,217,3,12,6,0,217,11,1,0,0,0,218,220,3,22,11,0, + 219,218,1,0,0,0,219,220,1,0,0,0,220,223,1,0,0,0,221,224,3,24,12, + 0,222,224,3,14,7,0,223,221,1,0,0,0,223,222,1,0,0,0,224,225,1,0,0, + 0,225,226,3,26,13,0,226,227,3,170,85,0,227,231,1,0,0,0,228,229,5, + 123,0,0,229,231,3,170,85,0,230,219,1,0,0,0,230,228,1,0,0,0,231,13, + 1,0,0,0,232,238,5,9,0,0,233,234,3,16,8,0,234,235,5,13,0,0,235,237, + 1,0,0,0,236,233,1,0,0,0,237,240,1,0,0,0,238,236,1,0,0,0,238,239, + 1,0,0,0,239,245,1,0,0,0,240,238,1,0,0,0,241,243,3,16,8,0,242,244, + 5,13,0,0,243,242,1,0,0,0,243,244,1,0,0,0,244,246,1,0,0,0,245,241, + 1,0,0,0,245,246,1,0,0,0,246,247,1,0,0,0,247,248,5,11,0,0,248,15, + 1,0,0,0,249,252,3,18,9,0,250,251,5,99,0,0,251,253,3,20,10,0,252, + 250,1,0,0,0,252,253,1,0,0,0,253,17,1,0,0,0,254,257,3,160,80,0,255, + 257,5,123,0,0,256,254,1,0,0,0,256,255,1,0,0,0,257,19,1,0,0,0,258, + 259,7,0,0,0,259,21,1,0,0,0,260,261,3,28,14,0,261,262,5,13,0,0,262, + 23,1,0,0,0,263,266,5,26,0,0,264,266,3,160,80,0,265,263,1,0,0,0,265, + 264,1,0,0,0,266,269,1,0,0,0,267,268,5,99,0,0,268,270,3,160,80,0, + 269,267,1,0,0,0,269,270,1,0,0,0,270,25,1,0,0,0,271,272,5,100,0,0, + 272,273,5,123,0,0,273,27,1,0,0,0,274,277,3,160,80,0,275,276,5,99, + 0,0,276,278,3,160,80,0,277,275,1,0,0,0,277,278,1,0,0,0,278,29,1, + 0,0,0,279,281,5,109,0,0,280,282,5,93,0,0,281,280,1,0,0,0,281,282, + 1,0,0,0,282,285,1,0,0,0,283,286,3,32,16,0,284,286,3,38,19,0,285, + 283,1,0,0,0,285,284,1,0,0,0,286,287,1,0,0,0,287,288,3,170,85,0,288, + 295,1,0,0,0,289,290,5,109,0,0,290,291,5,93,0,0,291,292,3,130,65, + 0,292,293,3,170,85,0,293,295,1,0,0,0,294,279,1,0,0,0,294,289,1,0, + 0,0,295,31,1,0,0,0,296,297,3,24,12,0,297,298,3,26,13,0,298,299,3, + 170,85,0,299,307,1,0,0,0,300,302,3,34,17,0,301,303,3,26,13,0,302, + 301,1,0,0,0,302,303,1,0,0,0,303,304,1,0,0,0,304,305,3,170,85,0,305, + 307,1,0,0,0,306,296,1,0,0,0,306,300,1,0,0,0,307,33,1,0,0,0,308,314, + 5,9,0,0,309,310,3,36,18,0,310,311,5,13,0,0,311,313,1,0,0,0,312,309, + 1,0,0,0,313,316,1,0,0,0,314,312,1,0,0,0,314,315,1,0,0,0,315,321, + 1,0,0,0,316,314,1,0,0,0,317,319,3,36,18,0,318,320,5,13,0,0,319,318, + 1,0,0,0,319,320,1,0,0,0,320,322,1,0,0,0,321,317,1,0,0,0,321,322, + 1,0,0,0,322,323,1,0,0,0,323,324,5,11,0,0,324,35,1,0,0,0,325,328, + 3,18,9,0,326,327,5,99,0,0,327,329,3,18,9,0,328,326,1,0,0,0,328,329, + 1,0,0,0,329,37,1,0,0,0,330,334,3,40,20,0,331,334,3,90,45,0,332,334, + 3,88,44,0,333,330,1,0,0,0,333,331,1,0,0,0,333,332,1,0,0,0,334,39, + 1,0,0,0,335,336,3,42,21,0,336,337,3,170,85,0,337,41,1,0,0,0,338, + 339,3,54,27,0,339,344,3,44,22,0,340,341,5,13,0,0,341,343,3,44,22, + 0,342,340,1,0,0,0,343,346,1,0,0,0,344,342,1,0,0,0,344,345,1,0,0, + 0,345,43,1,0,0,0,346,344,1,0,0,0,347,350,3,134,67,0,348,349,5,14, + 0,0,349,351,3,130,65,0,350,348,1,0,0,0,350,351,1,0,0,0,351,45,1, + 0,0,0,352,353,5,12,0,0,353,47,1,0,0,0,354,355,4,24,0,0,355,356,3, + 128,64,0,356,357,3,170,85,0,357,49,1,0,0,0,358,359,5,94,0,0,359, + 360,5,7,0,0,360,361,3,128,64,0,361,362,5,8,0,0,362,365,3,4,2,0,363, + 364,5,78,0,0,364,366,3,4,2,0,365,363,1,0,0,0,365,366,1,0,0,0,366, + 51,1,0,0,0,367,368,5,74,0,0,368,369,3,4,2,0,369,370,5,88,0,0,370, + 371,5,7,0,0,371,372,3,128,64,0,372,373,5,8,0,0,373,374,3,170,85, + 0,374,423,1,0,0,0,375,376,5,88,0,0,376,377,5,7,0,0,377,378,3,128, + 64,0,378,379,5,8,0,0,379,380,3,4,2,0,380,423,1,0,0,0,381,382,5,86, + 0,0,382,385,5,7,0,0,383,386,3,128,64,0,384,386,3,42,21,0,385,383, + 1,0,0,0,385,384,1,0,0,0,385,386,1,0,0,0,386,387,1,0,0,0,387,389, + 5,12,0,0,388,390,3,128,64,0,389,388,1,0,0,0,389,390,1,0,0,0,390, + 391,1,0,0,0,391,393,5,12,0,0,392,394,3,128,64,0,393,392,1,0,0,0, + 393,394,1,0,0,0,394,395,1,0,0,0,395,396,5,8,0,0,396,423,3,4,2,0, + 397,398,5,86,0,0,398,401,5,7,0,0,399,402,3,130,65,0,400,402,3,42, + 21,0,401,399,1,0,0,0,401,400,1,0,0,0,402,403,1,0,0,0,403,404,5,97, + 0,0,404,405,3,128,64,0,405,406,5,8,0,0,406,407,3,4,2,0,407,423,1, + 0,0,0,408,410,5,86,0,0,409,411,5,112,0,0,410,409,1,0,0,0,410,411, + 1,0,0,0,411,412,1,0,0,0,412,415,5,7,0,0,413,416,3,130,65,0,414,416, + 3,42,21,0,415,413,1,0,0,0,415,414,1,0,0,0,416,417,1,0,0,0,417,418, + 5,101,0,0,418,419,3,128,64,0,419,420,5,8,0,0,420,421,3,4,2,0,421, + 423,1,0,0,0,422,367,1,0,0,0,422,375,1,0,0,0,422,381,1,0,0,0,422, + 397,1,0,0,0,422,408,1,0,0,0,423,53,1,0,0,0,424,428,5,80,0,0,425, + 428,3,168,84,0,426,428,5,108,0,0,427,424,1,0,0,0,427,425,1,0,0,0, + 427,426,1,0,0,0,428,55,1,0,0,0,429,432,5,85,0,0,430,431,4,28,1,0, + 431,433,3,162,81,0,432,430,1,0,0,0,432,433,1,0,0,0,433,434,1,0,0, + 0,434,435,3,170,85,0,435,57,1,0,0,0,436,439,5,73,0,0,437,438,4,29, + 2,0,438,440,3,162,81,0,439,437,1,0,0,0,439,440,1,0,0,0,440,441,1, + 0,0,0,441,442,3,170,85,0,442,59,1,0,0,0,443,446,5,83,0,0,444,445, + 4,30,3,0,445,447,3,128,64,0,446,444,1,0,0,0,446,447,1,0,0,0,447, + 448,1,0,0,0,448,449,3,170,85,0,449,61,1,0,0,0,450,453,7,1,0,0,451, + 452,4,31,4,0,452,454,3,128,64,0,453,451,1,0,0,0,453,454,1,0,0,0, + 454,455,1,0,0,0,455,456,3,170,85,0,456,63,1,0,0,0,457,458,5,92,0, + 0,458,459,5,7,0,0,459,460,3,128,64,0,460,461,5,8,0,0,461,462,3,4, + 2,0,462,65,1,0,0,0,463,464,5,87,0,0,464,465,5,7,0,0,465,466,3,128, + 64,0,466,467,5,8,0,0,467,468,3,68,34,0,468,67,1,0,0,0,469,471,5, + 9,0,0,470,472,3,70,35,0,471,470,1,0,0,0,471,472,1,0,0,0,472,477, + 1,0,0,0,473,475,3,74,37,0,474,476,3,70,35,0,475,474,1,0,0,0,475, + 476,1,0,0,0,476,478,1,0,0,0,477,473,1,0,0,0,477,478,1,0,0,0,478, + 479,1,0,0,0,479,480,5,11,0,0,480,69,1,0,0,0,481,483,3,72,36,0,482, + 481,1,0,0,0,483,484,1,0,0,0,484,482,1,0,0,0,484,485,1,0,0,0,485, + 71,1,0,0,0,486,487,5,77,0,0,487,488,3,128,64,0,488,490,5,17,0,0, + 489,491,3,8,4,0,490,489,1,0,0,0,490,491,1,0,0,0,491,73,1,0,0,0,492, + 493,5,93,0,0,493,495,5,17,0,0,494,496,3,8,4,0,495,494,1,0,0,0,495, + 496,1,0,0,0,496,75,1,0,0,0,497,498,3,162,81,0,498,499,5,17,0,0,499, + 500,3,4,2,0,500,77,1,0,0,0,501,502,5,95,0,0,502,503,4,39,5,0,503, + 504,3,128,64,0,504,505,3,170,85,0,505,79,1,0,0,0,506,507,5,98,0, + 0,507,513,3,6,3,0,508,510,3,82,41,0,509,511,3,84,42,0,510,509,1, + 0,0,0,510,511,1,0,0,0,511,514,1,0,0,0,512,514,3,84,42,0,513,508, + 1,0,0,0,513,512,1,0,0,0,514,81,1,0,0,0,515,521,5,81,0,0,516,518, + 5,7,0,0,517,519,3,134,67,0,518,517,1,0,0,0,518,519,1,0,0,0,519,520, + 1,0,0,0,520,522,5,8,0,0,521,516,1,0,0,0,521,522,1,0,0,0,522,523, + 1,0,0,0,523,524,3,6,3,0,524,83,1,0,0,0,525,526,5,82,0,0,526,527, + 3,6,3,0,527,85,1,0,0,0,528,529,5,89,0,0,529,530,3,170,85,0,530,87, + 1,0,0,0,531,533,5,111,0,0,532,531,1,0,0,0,532,533,1,0,0,0,533,534, + 1,0,0,0,534,536,5,90,0,0,535,537,5,26,0,0,536,535,1,0,0,0,536,537, + 1,0,0,0,537,538,1,0,0,0,538,539,3,162,81,0,539,541,5,7,0,0,540,542, + 3,104,52,0,541,540,1,0,0,0,541,542,1,0,0,0,542,543,1,0,0,0,543,544, + 5,8,0,0,544,545,3,110,55,0,545,89,1,0,0,0,546,547,5,104,0,0,547, + 548,3,162,81,0,548,549,3,92,46,0,549,91,1,0,0,0,550,551,5,106,0, + 0,551,553,3,130,65,0,552,550,1,0,0,0,552,553,1,0,0,0,553,554,1,0, + 0,0,554,558,5,9,0,0,555,557,3,94,47,0,556,555,1,0,0,0,557,560,1, + 0,0,0,558,556,1,0,0,0,558,559,1,0,0,0,559,561,1,0,0,0,560,558,1, + 0,0,0,561,562,5,11,0,0,562,93,1,0,0,0,563,567,5,121,0,0,564,565, + 4,47,6,0,565,567,3,162,81,0,566,563,1,0,0,0,566,564,1,0,0,0,566, + 567,1,0,0,0,567,568,1,0,0,0,568,583,3,96,48,0,569,573,5,121,0,0, + 570,571,4,47,7,0,571,573,3,162,81,0,572,569,1,0,0,0,572,570,1,0, + 0,0,572,573,1,0,0,0,573,574,1,0,0,0,574,583,3,98,49,0,575,579,5, + 121,0,0,576,577,4,47,8,0,577,579,3,162,81,0,578,575,1,0,0,0,578, + 576,1,0,0,0,579,580,1,0,0,0,580,583,3,6,3,0,581,583,3,46,23,0,582, + 566,1,0,0,0,582,572,1,0,0,0,582,578,1,0,0,0,582,581,1,0,0,0,583, + 95,1,0,0,0,584,585,5,111,0,0,585,587,4,48,9,0,586,584,1,0,0,0,586, + 587,1,0,0,0,587,589,1,0,0,0,588,590,5,26,0,0,589,588,1,0,0,0,589, + 590,1,0,0,0,590,591,1,0,0,0,591,592,3,100,50,0,592,594,5,7,0,0,593, + 595,3,104,52,0,594,593,1,0,0,0,594,595,1,0,0,0,595,596,1,0,0,0,596, + 597,5,8,0,0,597,598,3,110,55,0,598,619,1,0,0,0,599,601,5,26,0,0, + 600,599,1,0,0,0,600,601,1,0,0,0,601,602,1,0,0,0,602,603,3,156,78, + 0,603,604,5,7,0,0,604,605,5,8,0,0,605,606,3,110,55,0,606,619,1,0, + 0,0,607,609,5,26,0,0,608,607,1,0,0,0,608,609,1,0,0,0,609,610,1,0, + 0,0,610,611,3,158,79,0,611,613,5,7,0,0,612,614,3,104,52,0,613,612, + 1,0,0,0,613,614,1,0,0,0,614,615,1,0,0,0,615,616,5,8,0,0,616,617, + 3,110,55,0,617,619,1,0,0,0,618,586,1,0,0,0,618,600,1,0,0,0,618,608, + 1,0,0,0,619,97,1,0,0,0,620,622,3,100,50,0,621,623,3,132,66,0,622, + 621,1,0,0,0,622,623,1,0,0,0,623,99,1,0,0,0,624,627,3,122,61,0,625, + 627,3,102,51,0,626,624,1,0,0,0,626,625,1,0,0,0,627,101,1,0,0,0,628, + 629,5,31,0,0,629,630,3,160,80,0,630,103,1,0,0,0,631,636,3,106,53, + 0,632,633,5,13,0,0,633,635,3,106,53,0,634,632,1,0,0,0,635,638,1, + 0,0,0,636,634,1,0,0,0,636,637,1,0,0,0,637,641,1,0,0,0,638,636,1, + 0,0,0,639,640,5,13,0,0,640,642,3,108,54,0,641,639,1,0,0,0,641,642, + 1,0,0,0,642,645,1,0,0,0,643,645,3,108,54,0,644,631,1,0,0,0,644,643, + 1,0,0,0,645,105,1,0,0,0,646,649,3,134,67,0,647,648,5,14,0,0,648, + 650,3,130,65,0,649,647,1,0,0,0,649,650,1,0,0,0,650,107,1,0,0,0,651, + 652,5,18,0,0,652,653,3,130,65,0,653,109,1,0,0,0,654,656,5,9,0,0, + 655,657,3,112,56,0,656,655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0, + 0,658,659,5,11,0,0,659,111,1,0,0,0,660,662,3,2,1,0,661,660,1,0,0, + 0,662,663,1,0,0,0,663,661,1,0,0,0,663,664,1,0,0,0,664,113,1,0,0, + 0,665,666,5,5,0,0,666,667,3,116,58,0,667,668,5,6,0,0,668,115,1,0, + 0,0,669,671,5,13,0,0,670,669,1,0,0,0,671,674,1,0,0,0,672,670,1,0, + 0,0,672,673,1,0,0,0,673,676,1,0,0,0,674,672,1,0,0,0,675,677,3,118, + 59,0,676,675,1,0,0,0,676,677,1,0,0,0,677,686,1,0,0,0,678,680,5,13, + 0,0,679,678,1,0,0,0,680,681,1,0,0,0,681,679,1,0,0,0,681,682,1,0, + 0,0,682,683,1,0,0,0,683,685,3,118,59,0,684,679,1,0,0,0,685,688,1, + 0,0,0,686,684,1,0,0,0,686,687,1,0,0,0,687,692,1,0,0,0,688,686,1, + 0,0,0,689,691,5,13,0,0,690,689,1,0,0,0,691,694,1,0,0,0,692,690,1, + 0,0,0,692,693,1,0,0,0,693,117,1,0,0,0,694,692,1,0,0,0,695,697,5, + 18,0,0,696,695,1,0,0,0,696,697,1,0,0,0,697,698,1,0,0,0,698,699,3, + 130,65,0,699,119,1,0,0,0,700,701,3,122,61,0,701,702,5,17,0,0,702, + 703,3,130,65,0,703,740,1,0,0,0,704,705,5,5,0,0,705,706,3,130,65, + 0,706,707,5,6,0,0,707,708,5,17,0,0,708,709,3,130,65,0,709,740,1, + 0,0,0,710,712,5,111,0,0,711,710,1,0,0,0,711,712,1,0,0,0,712,714, + 1,0,0,0,713,715,5,26,0,0,714,713,1,0,0,0,714,715,1,0,0,0,715,716, + 1,0,0,0,716,717,3,122,61,0,717,719,5,7,0,0,718,720,3,104,52,0,719, + 718,1,0,0,0,719,720,1,0,0,0,720,721,1,0,0,0,721,722,5,8,0,0,722, + 723,3,110,55,0,723,740,1,0,0,0,724,725,3,156,78,0,725,726,5,7,0, + 0,726,727,5,8,0,0,727,728,3,110,55,0,728,740,1,0,0,0,729,730,3,158, + 79,0,730,731,5,7,0,0,731,732,3,106,53,0,732,733,5,8,0,0,733,734, + 3,110,55,0,734,740,1,0,0,0,735,737,5,18,0,0,736,735,1,0,0,0,736, + 737,1,0,0,0,737,738,1,0,0,0,738,740,3,130,65,0,739,700,1,0,0,0,739, + 704,1,0,0,0,739,711,1,0,0,0,739,724,1,0,0,0,739,729,1,0,0,0,739, + 736,1,0,0,0,740,121,1,0,0,0,741,749,3,160,80,0,742,749,5,123,0,0, + 743,749,3,152,76,0,744,745,5,5,0,0,745,746,3,130,65,0,746,747,5, + 6,0,0,747,749,1,0,0,0,748,741,1,0,0,0,748,742,1,0,0,0,748,743,1, + 0,0,0,748,744,1,0,0,0,749,123,1,0,0,0,750,762,5,7,0,0,751,756,3, + 126,63,0,752,753,5,13,0,0,753,755,3,126,63,0,754,752,1,0,0,0,755, + 758,1,0,0,0,756,754,1,0,0,0,756,757,1,0,0,0,757,760,1,0,0,0,758, + 756,1,0,0,0,759,761,5,13,0,0,760,759,1,0,0,0,760,761,1,0,0,0,761, + 763,1,0,0,0,762,751,1,0,0,0,762,763,1,0,0,0,763,764,1,0,0,0,764, + 765,5,8,0,0,765,125,1,0,0,0,766,768,5,18,0,0,767,766,1,0,0,0,767, + 768,1,0,0,0,768,771,1,0,0,0,769,772,3,130,65,0,770,772,3,162,81, + 0,771,769,1,0,0,0,771,770,1,0,0,0,772,127,1,0,0,0,773,778,3,130, + 65,0,774,775,5,13,0,0,775,777,3,130,65,0,776,774,1,0,0,0,777,780, + 1,0,0,0,778,776,1,0,0,0,778,779,1,0,0,0,779,129,1,0,0,0,780,778, + 1,0,0,0,781,782,6,65,-1,0,782,838,3,138,69,0,783,785,5,104,0,0,784, + 786,3,162,81,0,785,784,1,0,0,0,785,786,1,0,0,0,786,787,1,0,0,0,787, + 838,3,92,46,0,788,789,5,79,0,0,789,790,3,162,81,0,790,791,3,124, + 62,0,791,838,1,0,0,0,792,793,5,79,0,0,793,794,3,130,65,0,794,795, + 3,124,62,0,795,838,1,0,0,0,796,797,5,79,0,0,797,838,3,130,65,42, + 798,799,5,79,0,0,799,800,5,19,0,0,800,838,3,162,81,0,801,802,5,96, + 0,0,802,838,3,130,65,37,803,804,5,84,0,0,804,838,3,130,65,36,805, + 806,5,76,0,0,806,838,3,130,65,35,807,808,5,20,0,0,808,838,3,130, + 65,34,809,810,5,21,0,0,810,838,3,130,65,33,811,812,5,22,0,0,812, + 838,3,130,65,32,813,814,5,23,0,0,814,838,3,130,65,31,815,816,5,24, + 0,0,816,838,3,130,65,30,817,818,5,25,0,0,818,838,3,130,65,29,819, + 820,5,112,0,0,820,838,3,130,65,28,821,822,5,110,0,0,822,823,5,7, + 0,0,823,824,3,130,65,0,824,825,5,8,0,0,825,838,1,0,0,0,826,838,3, + 62,31,0,827,838,5,91,0,0,828,838,3,162,81,0,829,838,5,107,0,0,830, + 838,3,146,73,0,831,838,3,114,57,0,832,838,3,136,68,0,833,834,5,7, + 0,0,834,835,3,128,64,0,835,836,5,8,0,0,836,838,1,0,0,0,837,781,1, + 0,0,0,837,783,1,0,0,0,837,788,1,0,0,0,837,792,1,0,0,0,837,796,1, + 0,0,0,837,798,1,0,0,0,837,801,1,0,0,0,837,803,1,0,0,0,837,805,1, + 0,0,0,837,807,1,0,0,0,837,809,1,0,0,0,837,811,1,0,0,0,837,813,1, + 0,0,0,837,815,1,0,0,0,837,817,1,0,0,0,837,819,1,0,0,0,837,821,1, + 0,0,0,837,826,1,0,0,0,837,827,1,0,0,0,837,828,1,0,0,0,837,829,1, + 0,0,0,837,830,1,0,0,0,837,831,1,0,0,0,837,832,1,0,0,0,837,833,1, + 0,0,0,838,926,1,0,0,0,839,840,10,47,0,0,840,841,5,16,0,0,841,925, + 3,130,65,48,842,843,10,27,0,0,843,844,5,29,0,0,844,925,3,130,65, + 27,845,846,10,26,0,0,846,847,7,2,0,0,847,925,3,130,65,27,848,849, + 10,25,0,0,849,850,7,3,0,0,850,925,3,130,65,26,851,852,10,24,0,0, + 852,853,5,30,0,0,853,925,3,130,65,25,854,855,10,23,0,0,855,856,7, + 4,0,0,856,925,3,130,65,24,857,858,10,22,0,0,858,859,7,5,0,0,859, + 925,3,130,65,23,860,861,10,21,0,0,861,862,5,75,0,0,862,925,3,130, + 65,22,863,864,10,20,0,0,864,865,5,97,0,0,865,925,3,130,65,21,866, + 867,10,19,0,0,867,868,7,6,0,0,868,925,3,130,65,20,869,870,10,18, + 0,0,870,871,5,43,0,0,871,925,3,130,65,19,872,873,10,17,0,0,873,874, + 5,44,0,0,874,925,3,130,65,18,875,876,10,16,0,0,876,877,5,45,0,0, + 877,925,3,130,65,17,878,879,10,15,0,0,879,880,5,46,0,0,880,925,3, + 130,65,16,881,882,10,14,0,0,882,883,5,47,0,0,883,925,3,130,65,15, + 884,885,10,13,0,0,885,886,5,15,0,0,886,887,3,130,65,0,887,888,5, + 17,0,0,888,889,3,130,65,14,889,925,1,0,0,0,890,891,10,12,0,0,891, + 892,5,14,0,0,892,925,3,130,65,12,893,894,10,11,0,0,894,895,3,144, + 72,0,895,896,3,130,65,11,896,925,1,0,0,0,897,899,10,46,0,0,898,900, + 5,16,0,0,899,898,1,0,0,0,899,900,1,0,0,0,900,901,1,0,0,0,901,902, + 5,5,0,0,902,903,3,128,64,0,903,904,5,6,0,0,904,925,1,0,0,0,905,907, + 10,45,0,0,906,908,5,15,0,0,907,906,1,0,0,0,907,908,1,0,0,0,908,909, + 1,0,0,0,909,911,5,19,0,0,910,912,5,31,0,0,911,910,1,0,0,0,911,912, + 1,0,0,0,912,913,1,0,0,0,913,925,3,160,80,0,914,915,10,41,0,0,915, + 925,3,124,62,0,916,917,10,39,0,0,917,918,4,65,32,0,918,925,5,20, + 0,0,919,920,10,38,0,0,920,921,4,65,34,0,921,925,5,21,0,0,922,923, + 10,9,0,0,923,925,3,148,74,0,924,839,1,0,0,0,924,842,1,0,0,0,924, + 845,1,0,0,0,924,848,1,0,0,0,924,851,1,0,0,0,924,854,1,0,0,0,924, + 857,1,0,0,0,924,860,1,0,0,0,924,863,1,0,0,0,924,866,1,0,0,0,924, + 869,1,0,0,0,924,872,1,0,0,0,924,875,1,0,0,0,924,878,1,0,0,0,924, + 881,1,0,0,0,924,884,1,0,0,0,924,890,1,0,0,0,924,893,1,0,0,0,924, + 897,1,0,0,0,924,905,1,0,0,0,924,914,1,0,0,0,924,916,1,0,0,0,924, + 919,1,0,0,0,924,922,1,0,0,0,925,928,1,0,0,0,926,924,1,0,0,0,926, + 927,1,0,0,0,927,131,1,0,0,0,928,926,1,0,0,0,929,930,5,14,0,0,930, + 931,3,130,65,0,931,133,1,0,0,0,932,937,3,162,81,0,933,937,3,166, + 83,0,934,937,3,114,57,0,935,937,3,136,68,0,936,932,1,0,0,0,936,933, + 1,0,0,0,936,934,1,0,0,0,936,935,1,0,0,0,937,135,1,0,0,0,938,950, + 5,9,0,0,939,944,3,120,60,0,940,941,5,13,0,0,941,943,3,120,60,0,942, + 940,1,0,0,0,943,946,1,0,0,0,944,942,1,0,0,0,944,945,1,0,0,0,945, + 948,1,0,0,0,946,944,1,0,0,0,947,949,5,13,0,0,948,947,1,0,0,0,948, + 949,1,0,0,0,949,951,1,0,0,0,950,939,1,0,0,0,950,951,1,0,0,0,951, + 952,1,0,0,0,952,953,5,11,0,0,953,137,1,0,0,0,954,976,3,88,44,0,955, + 957,5,111,0,0,956,955,1,0,0,0,956,957,1,0,0,0,957,958,1,0,0,0,958, + 960,5,90,0,0,959,961,5,26,0,0,960,959,1,0,0,0,960,961,1,0,0,0,961, + 962,1,0,0,0,962,964,5,7,0,0,963,965,3,104,52,0,964,963,1,0,0,0,964, + 965,1,0,0,0,965,966,1,0,0,0,966,967,5,8,0,0,967,976,3,110,55,0,968, + 970,5,111,0,0,969,968,1,0,0,0,969,970,1,0,0,0,970,971,1,0,0,0,971, + 972,3,140,70,0,972,973,5,61,0,0,973,974,3,142,71,0,974,976,1,0,0, + 0,975,954,1,0,0,0,975,956,1,0,0,0,975,969,1,0,0,0,976,139,1,0,0, + 0,977,984,3,122,61,0,978,980,5,7,0,0,979,981,3,104,52,0,980,979, + 1,0,0,0,980,981,1,0,0,0,981,982,1,0,0,0,982,984,5,8,0,0,983,977, + 1,0,0,0,983,978,1,0,0,0,984,141,1,0,0,0,985,988,3,130,65,0,986,988, + 3,110,55,0,987,985,1,0,0,0,987,986,1,0,0,0,988,143,1,0,0,0,989,990, + 7,7,0,0,990,145,1,0,0,0,991,999,5,62,0,0,992,999,5,63,0,0,993,999, + 5,123,0,0,994,999,3,148,74,0,995,999,5,4,0,0,996,999,3,152,76,0, + 997,999,3,154,77,0,998,991,1,0,0,0,998,992,1,0,0,0,998,993,1,0,0, + 0,998,994,1,0,0,0,998,995,1,0,0,0,998,996,1,0,0,0,998,997,1,0,0, + 0,999,147,1,0,0,0,1000,1004,5,124,0,0,1001,1003,3,150,75,0,1002, + 1001,1,0,0,0,1003,1006,1,0,0,0,1004,1002,1,0,0,0,1004,1005,1,0,0, + 0,1005,1007,1,0,0,0,1006,1004,1,0,0,0,1007,1008,5,124,0,0,1008,149, + 1,0,0,0,1009,1015,5,131,0,0,1010,1011,5,130,0,0,1011,1012,3,130, + 65,0,1012,1013,5,10,0,0,1013,1015,1,0,0,0,1014,1009,1,0,0,0,1014, + 1010,1,0,0,0,1015,151,1,0,0,0,1016,1017,7,8,0,0,1017,153,1,0,0,0, + 1018,1019,7,9,0,0,1019,155,1,0,0,0,1020,1021,4,78,36,0,1021,1022, + 3,162,81,0,1022,1023,3,100,50,0,1023,157,1,0,0,0,1024,1025,4,79, + 37,0,1025,1026,3,162,81,0,1026,1027,3,100,50,0,1027,159,1,0,0,0, + 1028,1031,3,162,81,0,1029,1031,3,164,82,0,1030,1028,1,0,0,0,1030, + 1029,1,0,0,0,1031,161,1,0,0,0,1032,1033,7,10,0,0,1033,163,1,0,0, + 0,1034,1038,3,166,83,0,1035,1038,5,62,0,0,1036,1038,5,63,0,0,1037, + 1034,1,0,0,0,1037,1035,1,0,0,0,1037,1036,1,0,0,0,1038,165,1,0,0, + 0,1039,1088,5,73,0,0,1040,1088,5,74,0,0,1041,1088,5,75,0,0,1042, + 1088,5,76,0,0,1043,1088,5,77,0,0,1044,1088,5,78,0,0,1045,1088,5, + 79,0,0,1046,1088,5,80,0,0,1047,1088,5,81,0,0,1048,1088,5,82,0,0, + 1049,1088,5,83,0,0,1050,1088,5,84,0,0,1051,1088,5,85,0,0,1052,1088, + 5,86,0,0,1053,1088,5,87,0,0,1054,1088,5,88,0,0,1055,1088,5,89,0, + 0,1056,1088,5,90,0,0,1057,1088,5,91,0,0,1058,1088,5,92,0,0,1059, + 1088,5,93,0,0,1060,1088,5,94,0,0,1061,1088,5,95,0,0,1062,1088,5, + 96,0,0,1063,1088,5,97,0,0,1064,1088,5,98,0,0,1065,1088,5,104,0,0, + 1066,1088,5,105,0,0,1067,1088,5,106,0,0,1068,1088,5,107,0,0,1069, + 1088,5,108,0,0,1070,1088,5,109,0,0,1071,1088,5,110,0,0,1072,1088, + 5,113,0,0,1073,1088,3,168,84,0,1074,1088,5,116,0,0,1075,1088,5,117, + 0,0,1076,1088,5,118,0,0,1077,1088,5,119,0,0,1078,1088,5,120,0,0, + 1079,1088,5,121,0,0,1080,1088,5,102,0,0,1081,1088,5,103,0,0,1082, + 1088,5,111,0,0,1083,1088,5,112,0,0,1084,1088,5,100,0,0,1085,1088, + 5,99,0,0,1086,1088,5,101,0,0,1087,1039,1,0,0,0,1087,1040,1,0,0,0, + 1087,1041,1,0,0,0,1087,1042,1,0,0,0,1087,1043,1,0,0,0,1087,1044, + 1,0,0,0,1087,1045,1,0,0,0,1087,1046,1,0,0,0,1087,1047,1,0,0,0,1087, + 1048,1,0,0,0,1087,1049,1,0,0,0,1087,1050,1,0,0,0,1087,1051,1,0,0, + 0,1087,1052,1,0,0,0,1087,1053,1,0,0,0,1087,1054,1,0,0,0,1087,1055, + 1,0,0,0,1087,1056,1,0,0,0,1087,1057,1,0,0,0,1087,1058,1,0,0,0,1087, + 1059,1,0,0,0,1087,1060,1,0,0,0,1087,1061,1,0,0,0,1087,1062,1,0,0, + 0,1087,1063,1,0,0,0,1087,1064,1,0,0,0,1087,1065,1,0,0,0,1087,1066, + 1,0,0,0,1087,1067,1,0,0,0,1087,1068,1,0,0,0,1087,1069,1,0,0,0,1087, + 1070,1,0,0,0,1087,1071,1,0,0,0,1087,1072,1,0,0,0,1087,1073,1,0,0, + 0,1087,1074,1,0,0,0,1087,1075,1,0,0,0,1087,1076,1,0,0,0,1087,1077, + 1,0,0,0,1087,1078,1,0,0,0,1087,1079,1,0,0,0,1087,1080,1,0,0,0,1087, + 1081,1,0,0,0,1087,1082,1,0,0,0,1087,1083,1,0,0,0,1087,1084,1,0,0, + 0,1087,1085,1,0,0,0,1087,1086,1,0,0,0,1088,167,1,0,0,0,1089,1090, + 7,11,0,0,1090,169,1,0,0,0,1091,1096,5,12,0,0,1092,1096,5,0,0,1,1093, + 1096,4,85,38,0,1094,1096,4,85,39,0,1095,1091,1,0,0,0,1095,1092,1, + 0,0,0,1095,1093,1,0,0,0,1095,1094,1,0,0,0,1096,171,1,0,0,0,119,173, + 176,202,206,213,219,223,230,238,243,245,252,256,265,269,277,281, + 285,294,302,306,314,319,321,328,333,344,350,365,385,389,393,401, + 410,415,422,427,432,439,446,453,471,475,477,484,490,495,510,513, + 518,521,532,536,541,552,558,566,572,578,582,586,589,594,600,608, + 613,618,622,626,636,641,644,649,656,663,672,676,681,686,692,696, + 711,714,719,736,739,748,756,760,762,767,771,778,785,837,899,907, + 911,924,926,936,944,948,950,956,960,964,969,975,980,983,987,998, + 1004,1014,1030,1037,1087,1095 + ] + +class JavaScriptParser ( JavaScriptParserBase ): + + grammarFileName = "JavaScriptParser.g4" + + atn = ATNDeserializer().deserialize(serializedATN()) + + decisionsToDFA = [ DFA(ds, i) for i, ds in enumerate(atn.decisionToState) ] + + sharedContextCache = PredictionContextCache() + + literalNames = [ "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "'['", "']'", "'('", "')'", "'{'", "<INVALID>", + "'}'", "';'", "','", "'='", "'?'", "'?.'", "':'", "'...'", + "'.'", "'++'", "'--'", "'+'", "'-'", "'~'", "'!'", + "'*'", "'/'", "'%'", "'**'", "'??'", "'#'", "'>>'", + "'<<'", "'>>>'", "'<'", "'>'", "'<='", "'>='", "'=='", + "'!='", "'==='", "'!=='", "'&'", "'^'", "'|'", "'&&'", + "'||'", "'*='", "'/='", "'%='", "'+='", "'-='", "'<<='", + "'>>='", "'>>>='", "'&='", "'^='", "'|='", "'**='", + "'??='", "'=>'", "'null'", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "<INVALID>", "<INVALID>", "<INVALID>", "<INVALID>", + "'break'", "'do'", "'instanceof'", "'typeof'", "'case'", + "'else'", "'new'", "'var'", "'catch'", "'finally'", + "'return'", "'void'", "'continue'", "'for'", "'switch'", + "'while'", "'debugger'", "'function'", "'this'", "'with'", + "'default'", "'if'", "'throw'", "'delete'", "'in'", + "'try'", "'as'", "'from'", "'of'", "'yield'", "'yield*'", + "'class'", "'enum'", "'extends'", "'super'", "'const'", + "'export'", "'import'", "'async'", "'await'", "'implements'", + "<INVALID>", "<INVALID>", "'private'", "'public'", + "'interface'", "'package'", "'protected'", "'static'" ] + + symbolicNames = [ "<INVALID>", "HashBangLine", "MultiLineComment", "SingleLineComment", + "RegularExpressionLiteral", "OpenBracket", "CloseBracket", + "OpenParen", "CloseParen", "OpenBrace", "TemplateCloseBrace", + "CloseBrace", "SemiColon", "Comma", "Assign", "QuestionMark", + "QuestionMarkDot", "Colon", "Ellipsis", "Dot", "PlusPlus", + "MinusMinus", "Plus", "Minus", "BitNot", "Not", "Multiply", + "Divide", "Modulus", "Power", "NullCoalesce", "Hashtag", + "RightShiftArithmetic", "LeftShiftArithmetic", "RightShiftLogical", + "LessThan", "MoreThan", "LessThanEquals", "GreaterThanEquals", + "Equals_", "NotEquals", "IdentityEquals", "IdentityNotEquals", + "BitAnd", "BitXOr", "BitOr", "And", "Or", "MultiplyAssign", + "DivideAssign", "ModulusAssign", "PlusAssign", "MinusAssign", + "LeftShiftArithmeticAssign", "RightShiftArithmeticAssign", + "RightShiftLogicalAssign", "BitAndAssign", "BitXorAssign", + "BitOrAssign", "PowerAssign", "NullishCoalescingAssign", + "ARROW", "NullLiteral", "BooleanLiteral", "DecimalLiteral", + "HexIntegerLiteral", "OctalIntegerLiteral", "OctalIntegerLiteral2", + "BinaryIntegerLiteral", "BigHexIntegerLiteral", "BigOctalIntegerLiteral", + "BigBinaryIntegerLiteral", "BigDecimalIntegerLiteral", + "Break", "Do", "Instanceof", "Typeof", "Case", "Else", + "New", "Var", "Catch", "Finally", "Return", "Void", + "Continue", "For", "Switch", "While", "Debugger", + "Function_", "This", "With", "Default", "If", "Throw", + "Delete", "In", "Try", "As", "From", "Of", "Yield", + "YieldStar", "Class", "Enum", "Extends", "Super", + "Const", "Export", "Import", "Async", "Await", "Implements", + "StrictLet", "NonStrictLet", "Private", "Public", + "Interface", "Package", "Protected", "Static", "Identifier", + "StringLiteral", "BackTick", "WhiteSpaces", "LineTerminator", + "HtmlComment", "CDataComment", "UnexpectedCharacter", + "TemplateStringStartExpression", "TemplateStringAtom" ] + + RULE_program = 0 + RULE_sourceElement = 1 + RULE_statement = 2 + RULE_block = 3 + RULE_statementList = 4 + RULE_importStatement = 5 + RULE_importFromBlock = 6 + RULE_importModuleItems = 7 + RULE_importAliasName = 8 + RULE_moduleExportName = 9 + RULE_importedBinding = 10 + RULE_importDefault = 11 + RULE_importNamespace = 12 + RULE_importFrom = 13 + RULE_aliasName = 14 + RULE_exportStatement = 15 + RULE_exportFromBlock = 16 + RULE_exportModuleItems = 17 + RULE_exportAliasName = 18 + RULE_declaration = 19 + RULE_variableStatement = 20 + RULE_variableDeclarationList = 21 + RULE_variableDeclaration = 22 + RULE_emptyStatement_ = 23 + RULE_expressionStatement = 24 + RULE_ifStatement = 25 + RULE_iterationStatement = 26 + RULE_varModifier = 27 + RULE_continueStatement = 28 + RULE_breakStatement = 29 + RULE_returnStatement = 30 + RULE_yieldStatement = 31 + RULE_withStatement = 32 + RULE_switchStatement = 33 + RULE_caseBlock = 34 + RULE_caseClauses = 35 + RULE_caseClause = 36 + RULE_defaultClause = 37 + RULE_labelledStatement = 38 + RULE_throwStatement = 39 + RULE_tryStatement = 40 + RULE_catchProduction = 41 + RULE_finallyProduction = 42 + RULE_debuggerStatement = 43 + RULE_functionDeclaration = 44 + RULE_classDeclaration = 45 + RULE_classTail = 46 + RULE_classElement = 47 + RULE_methodDefinition = 48 + RULE_fieldDefinition = 49 + RULE_classElementName = 50 + RULE_privateIdentifier = 51 + RULE_formalParameterList = 52 + RULE_formalParameterArg = 53 + RULE_lastFormalParameterArg = 54 + RULE_functionBody = 55 + RULE_sourceElements = 56 + RULE_arrayLiteral = 57 + RULE_elementList = 58 + RULE_arrayElement = 59 + RULE_propertyAssignment = 60 + RULE_propertyName = 61 + RULE_arguments = 62 + RULE_argument = 63 + RULE_expressionSequence = 64 + RULE_singleExpression = 65 + RULE_initializer = 66 + RULE_assignable = 67 + RULE_objectLiteral = 68 + RULE_anonymousFunction = 69 + RULE_arrowFunctionParameters = 70 + RULE_arrowFunctionBody = 71 + RULE_assignmentOperator = 72 + RULE_literal = 73 + RULE_templateStringLiteral = 74 + RULE_templateStringAtom = 75 + RULE_numericLiteral = 76 + RULE_bigintLiteral = 77 + RULE_getter = 78 + RULE_setter = 79 + RULE_identifierName = 80 + RULE_identifier = 81 + RULE_reservedWord = 82 + RULE_keyword = 83 + RULE_let_ = 84 + RULE_eos = 85 + + ruleNames = [ "program", "sourceElement", "statement", "block", "statementList", + "importStatement", "importFromBlock", "importModuleItems", + "importAliasName", "moduleExportName", "importedBinding", + "importDefault", "importNamespace", "importFrom", "aliasName", + "exportStatement", "exportFromBlock", "exportModuleItems", + "exportAliasName", "declaration", "variableStatement", + "variableDeclarationList", "variableDeclaration", "emptyStatement_", + "expressionStatement", "ifStatement", "iterationStatement", + "varModifier", "continueStatement", "breakStatement", + "returnStatement", "yieldStatement", "withStatement", + "switchStatement", "caseBlock", "caseClauses", "caseClause", + "defaultClause", "labelledStatement", "throwStatement", + "tryStatement", "catchProduction", "finallyProduction", + "debuggerStatement", "functionDeclaration", "classDeclaration", + "classTail", "classElement", "methodDefinition", "fieldDefinition", + "classElementName", "privateIdentifier", "formalParameterList", + "formalParameterArg", "lastFormalParameterArg", "functionBody", + "sourceElements", "arrayLiteral", "elementList", "arrayElement", + "propertyAssignment", "propertyName", "arguments", "argument", + "expressionSequence", "singleExpression", "initializer", + "assignable", "objectLiteral", "anonymousFunction", "arrowFunctionParameters", + "arrowFunctionBody", "assignmentOperator", "literal", + "templateStringLiteral", "templateStringAtom", "numericLiteral", + "bigintLiteral", "getter", "setter", "identifierName", + "identifier", "reservedWord", "keyword", "let_", "eos" ] + + EOF = Token.EOF + HashBangLine=1 + MultiLineComment=2 + SingleLineComment=3 + RegularExpressionLiteral=4 + OpenBracket=5 + CloseBracket=6 + OpenParen=7 + CloseParen=8 + OpenBrace=9 + TemplateCloseBrace=10 + CloseBrace=11 + SemiColon=12 + Comma=13 + Assign=14 + QuestionMark=15 + QuestionMarkDot=16 + Colon=17 + Ellipsis=18 + Dot=19 + PlusPlus=20 + MinusMinus=21 + Plus=22 + Minus=23 + BitNot=24 + Not=25 + Multiply=26 + Divide=27 + Modulus=28 + Power=29 + NullCoalesce=30 + Hashtag=31 + RightShiftArithmetic=32 + LeftShiftArithmetic=33 + RightShiftLogical=34 + LessThan=35 + MoreThan=36 + LessThanEquals=37 + GreaterThanEquals=38 + Equals_=39 + NotEquals=40 + IdentityEquals=41 + IdentityNotEquals=42 + BitAnd=43 + BitXOr=44 + BitOr=45 + And=46 + Or=47 + MultiplyAssign=48 + DivideAssign=49 + ModulusAssign=50 + PlusAssign=51 + MinusAssign=52 + LeftShiftArithmeticAssign=53 + RightShiftArithmeticAssign=54 + RightShiftLogicalAssign=55 + BitAndAssign=56 + BitXorAssign=57 + BitOrAssign=58 + PowerAssign=59 + NullishCoalescingAssign=60 + ARROW=61 + NullLiteral=62 + BooleanLiteral=63 + DecimalLiteral=64 + HexIntegerLiteral=65 + OctalIntegerLiteral=66 + OctalIntegerLiteral2=67 + BinaryIntegerLiteral=68 + BigHexIntegerLiteral=69 + BigOctalIntegerLiteral=70 + BigBinaryIntegerLiteral=71 + BigDecimalIntegerLiteral=72 + Break=73 + Do=74 + Instanceof=75 + Typeof=76 + Case=77 + Else=78 + New=79 + Var=80 + Catch=81 + Finally=82 + Return=83 + Void=84 + Continue=85 + For=86 + Switch=87 + While=88 + Debugger=89 + Function_=90 + This=91 + With=92 + Default=93 + If=94 + Throw=95 + Delete=96 + In=97 + Try=98 + As=99 + From=100 + Of=101 + Yield=102 + YieldStar=103 + Class=104 + Enum=105 + Extends=106 + Super=107 + Const=108 + Export=109 + Import=110 + Async=111 + Await=112 + Implements=113 + StrictLet=114 + NonStrictLet=115 + Private=116 + Public=117 + Interface=118 + Package=119 + Protected=120 + Static=121 + Identifier=122 + StringLiteral=123 + BackTick=124 + WhiteSpaces=125 + LineTerminator=126 + HtmlComment=127 + CDataComment=128 + UnexpectedCharacter=129 + TemplateStringStartExpression=130 + TemplateStringAtom=131 + + def __init__(self, input:TokenStream, output:TextIO = sys.stdout): + super().__init__(input, output) + self.checkVersion("4.13.2") + self._interp = ParserATNSimulator(self, self.atn, self.decisionsToDFA, self.sharedContextCache) + self._predicates = None + + + + + class ProgramContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def EOF(self): + return self.getToken(JavaScriptParser.EOF, 0) + + def HashBangLine(self): + return self.getToken(JavaScriptParser.HashBangLine, 0) + + def sourceElements(self): + return self.getTypedRuleContext(JavaScriptParser.SourceElementsContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_program + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterProgram" ): + listener.enterProgram(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitProgram" ): + listener.exitProgram(self) + + + + + def program(self): + + localctx = JavaScriptParser.ProgramContext(self, self._ctx, self.state) + self.enterRule(localctx, 0, self.RULE_program) + try: + self.enterOuterAlt(localctx, 1) + self.state = 173 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,0,self._ctx) + if la_ == 1: + self.state = 172 + self.match(JavaScriptParser.HashBangLine) + + + self.state = 176 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,1,self._ctx) + if la_ == 1: + self.state = 175 + self.sourceElements() + + + self.state = 178 + self.match(JavaScriptParser.EOF) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SourceElementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_sourceElement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSourceElement" ): + listener.enterSourceElement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSourceElement" ): + listener.exitSourceElement(self) + + + + + def sourceElement(self): + + localctx = JavaScriptParser.SourceElementContext(self, self._ctx, self.state) + self.enterRule(localctx, 2, self.RULE_sourceElement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 180 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def block(self): + return self.getTypedRuleContext(JavaScriptParser.BlockContext,0) + + + def variableStatement(self): + return self.getTypedRuleContext(JavaScriptParser.VariableStatementContext,0) + + + def importStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ImportStatementContext,0) + + + def exportStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ExportStatementContext,0) + + + def emptyStatement_(self): + return self.getTypedRuleContext(JavaScriptParser.EmptyStatement_Context,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(JavaScriptParser.ClassDeclarationContext,0) + + + def functionDeclaration(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionDeclarationContext,0) + + + def expressionStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionStatementContext,0) + + + def ifStatement(self): + return self.getTypedRuleContext(JavaScriptParser.IfStatementContext,0) + + + def iterationStatement(self): + return self.getTypedRuleContext(JavaScriptParser.IterationStatementContext,0) + + + def continueStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ContinueStatementContext,0) + + + def breakStatement(self): + return self.getTypedRuleContext(JavaScriptParser.BreakStatementContext,0) + + + def returnStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ReturnStatementContext,0) + + + def yieldStatement(self): + return self.getTypedRuleContext(JavaScriptParser.YieldStatementContext,0) + + + def withStatement(self): + return self.getTypedRuleContext(JavaScriptParser.WithStatementContext,0) + + + def labelledStatement(self): + return self.getTypedRuleContext(JavaScriptParser.LabelledStatementContext,0) + + + def switchStatement(self): + return self.getTypedRuleContext(JavaScriptParser.SwitchStatementContext,0) + + + def throwStatement(self): + return self.getTypedRuleContext(JavaScriptParser.ThrowStatementContext,0) + + + def tryStatement(self): + return self.getTypedRuleContext(JavaScriptParser.TryStatementContext,0) + + + def debuggerStatement(self): + return self.getTypedRuleContext(JavaScriptParser.DebuggerStatementContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_statement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatement" ): + listener.enterStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatement" ): + listener.exitStatement(self) + + + + + def statement(self): + + localctx = JavaScriptParser.StatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 4, self.RULE_statement) + try: + self.state = 202 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,2,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 182 + self.block() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 183 + self.variableStatement() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 184 + self.importStatement() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 185 + self.exportStatement() + pass + + elif la_ == 5: + self.enterOuterAlt(localctx, 5) + self.state = 186 + self.emptyStatement_() + pass + + elif la_ == 6: + self.enterOuterAlt(localctx, 6) + self.state = 187 + self.classDeclaration() + pass + + elif la_ == 7: + self.enterOuterAlt(localctx, 7) + self.state = 188 + self.functionDeclaration() + pass + + elif la_ == 8: + self.enterOuterAlt(localctx, 8) + self.state = 189 + self.expressionStatement() + pass + + elif la_ == 9: + self.enterOuterAlt(localctx, 9) + self.state = 190 + self.ifStatement() + pass + + elif la_ == 10: + self.enterOuterAlt(localctx, 10) + self.state = 191 + self.iterationStatement() + pass + + elif la_ == 11: + self.enterOuterAlt(localctx, 11) + self.state = 192 + self.continueStatement() + pass + + elif la_ == 12: + self.enterOuterAlt(localctx, 12) + self.state = 193 + self.breakStatement() + pass + + elif la_ == 13: + self.enterOuterAlt(localctx, 13) + self.state = 194 + self.returnStatement() + pass + + elif la_ == 14: + self.enterOuterAlt(localctx, 14) + self.state = 195 + self.yieldStatement() + pass + + elif la_ == 15: + self.enterOuterAlt(localctx, 15) + self.state = 196 + self.withStatement() + pass + + elif la_ == 16: + self.enterOuterAlt(localctx, 16) + self.state = 197 + self.labelledStatement() + pass + + elif la_ == 17: + self.enterOuterAlt(localctx, 17) + self.state = 198 + self.switchStatement() + pass + + elif la_ == 18: + self.enterOuterAlt(localctx, 18) + self.state = 199 + self.throwStatement() + pass + + elif la_ == 19: + self.enterOuterAlt(localctx, 19) + self.state = 200 + self.tryStatement() + pass + + elif la_ == 20: + self.enterOuterAlt(localctx, 20) + self.state = 201 + self.debuggerStatement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def statementList(self): + return self.getTypedRuleContext(JavaScriptParser.StatementListContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_block + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBlock" ): + listener.enterBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBlock" ): + listener.exitBlock(self) + + + + + def block(self): + + localctx = JavaScriptParser.BlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 6, self.RULE_block) + try: + self.enterOuterAlt(localctx, 1) + self.state = 204 + self.match(JavaScriptParser.OpenBrace) + self.state = 206 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,3,self._ctx) + if la_ == 1: + self.state = 205 + self.statementList() + + + self.state = 208 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class StatementListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.StatementContext) + else: + return self.getTypedRuleContext(JavaScriptParser.StatementContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_statementList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterStatementList" ): + listener.enterStatementList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitStatementList" ): + listener.exitStatementList(self) + + + + + def statementList(self): + + localctx = JavaScriptParser.StatementListContext(self, self._ctx, self.state) + self.enterRule(localctx, 8, self.RULE_statementList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 211 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 210 + self.statement() + + else: + raise NoViableAltException(self) + self.state = 213 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,4,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Import(self): + return self.getToken(JavaScriptParser.Import, 0) + + def importFromBlock(self): + return self.getTypedRuleContext(JavaScriptParser.ImportFromBlockContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_importStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportStatement" ): + listener.enterImportStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportStatement" ): + listener.exitImportStatement(self) + + + + + def importStatement(self): + + localctx = JavaScriptParser.ImportStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 10, self.RULE_importStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 215 + self.match(JavaScriptParser.Import) + self.state = 216 + self.importFromBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportFromBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def importFrom(self): + return self.getTypedRuleContext(JavaScriptParser.ImportFromContext,0) + + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def importNamespace(self): + return self.getTypedRuleContext(JavaScriptParser.ImportNamespaceContext,0) + + + def importModuleItems(self): + return self.getTypedRuleContext(JavaScriptParser.ImportModuleItemsContext,0) + + + def importDefault(self): + return self.getTypedRuleContext(JavaScriptParser.ImportDefaultContext,0) + + + def StringLiteral(self): + return self.getToken(JavaScriptParser.StringLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importFromBlock + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportFromBlock" ): + listener.enterImportFromBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportFromBlock" ): + listener.exitImportFromBlock(self) + + + + + def importFromBlock(self): + + localctx = JavaScriptParser.ImportFromBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 12, self.RULE_importFromBlock) + try: + self.state = 230 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [9, 26, 62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.enterOuterAlt(localctx, 1) + self.state = 219 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,5,self._ctx) + if la_ == 1: + self.state = 218 + self.importDefault() + + + self.state = 223 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26, 62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.state = 221 + self.importNamespace() + pass + elif token in [9]: + self.state = 222 + self.importModuleItems() + pass + else: + raise NoViableAltException(self) + + self.state = 225 + self.importFrom() + self.state = 226 + self.eos() + pass + elif token in [123]: + self.enterOuterAlt(localctx, 2) + self.state = 228 + self.match(JavaScriptParser.StringLiteral) + self.state = 229 + self.eos() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportModuleItemsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def importAliasName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ImportAliasNameContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ImportAliasNameContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importModuleItems + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportModuleItems" ): + listener.enterImportModuleItems(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportModuleItems" ): + listener.exitImportModuleItems(self) + + + + + def importModuleItems(self): + + localctx = JavaScriptParser.ImportModuleItemsContext(self, self._ctx, self.state) + self.enterRule(localctx, 14, self.RULE_importModuleItems) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 232 + self.match(JavaScriptParser.OpenBrace) + self.state = 238 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,8,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 233 + self.importAliasName() + self.state = 234 + self.match(JavaScriptParser.Comma) + self.state = 240 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,8,self._ctx) + + self.state = 245 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 62)) & ~0x3f) == 0 and ((1 << (_la - 62)) & 4611686018427385859) != 0): + self.state = 241 + self.importAliasName() + self.state = 243 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==13: + self.state = 242 + self.match(JavaScriptParser.Comma) + + + + + self.state = 247 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportAliasNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleExportName(self): + return self.getTypedRuleContext(JavaScriptParser.ModuleExportNameContext,0) + + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def importedBinding(self): + return self.getTypedRuleContext(JavaScriptParser.ImportedBindingContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_importAliasName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportAliasName" ): + listener.enterImportAliasName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportAliasName" ): + listener.exitImportAliasName(self) + + + + + def importAliasName(self): + + localctx = JavaScriptParser.ImportAliasNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 16, self.RULE_importAliasName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 249 + self.moduleExportName() + self.state = 252 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==99: + self.state = 250 + self.match(JavaScriptParser.As) + self.state = 251 + self.importedBinding() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ModuleExportNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifierName(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,0) + + + def StringLiteral(self): + return self.getToken(JavaScriptParser.StringLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_moduleExportName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterModuleExportName" ): + listener.enterModuleExportName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitModuleExportName" ): + listener.exitModuleExportName(self) + + + + + def moduleExportName(self): + + localctx = JavaScriptParser.ModuleExportNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 18, self.RULE_moduleExportName) + try: + self.state = 256 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.enterOuterAlt(localctx, 1) + self.state = 254 + self.identifierName() + pass + elif token in [123]: + self.enterOuterAlt(localctx, 2) + self.state = 255 + self.match(JavaScriptParser.StringLiteral) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportedBindingContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaScriptParser.Identifier, 0) + + def Yield(self): + return self.getToken(JavaScriptParser.Yield, 0) + + def Await(self): + return self.getToken(JavaScriptParser.Await, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importedBinding + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportedBinding" ): + listener.enterImportedBinding(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportedBinding" ): + listener.exitImportedBinding(self) + + + + + def importedBinding(self): + + localctx = JavaScriptParser.ImportedBindingContext(self, self._ctx, self.state) + self.enterRule(localctx, 20, self.RULE_importedBinding) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 258 + _la = self._input.LA(1) + if not(((((_la - 102)) & ~0x3f) == 0 and ((1 << (_la - 102)) & 1049601) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportDefaultContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def aliasName(self): + return self.getTypedRuleContext(JavaScriptParser.AliasNameContext,0) + + + def Comma(self): + return self.getToken(JavaScriptParser.Comma, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importDefault + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportDefault" ): + listener.enterImportDefault(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportDefault" ): + listener.exitImportDefault(self) + + + + + def importDefault(self): + + localctx = JavaScriptParser.ImportDefaultContext(self, self._ctx, self.state) + self.enterRule(localctx, 22, self.RULE_importDefault) + try: + self.enterOuterAlt(localctx, 1) + self.state = 260 + self.aliasName() + self.state = 261 + self.match(JavaScriptParser.Comma) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportNamespaceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + + def identifierName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.IdentifierNameContext) + else: + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,i) + + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importNamespace + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportNamespace" ): + listener.enterImportNamespace(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportNamespace" ): + listener.exitImportNamespace(self) + + + + + def importNamespace(self): + + localctx = JavaScriptParser.ImportNamespaceContext(self, self._ctx, self.state) + self.enterRule(localctx, 24, self.RULE_importNamespace) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 265 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26]: + self.state = 263 + self.match(JavaScriptParser.Multiply) + pass + elif token in [62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.state = 264 + self.identifierName() + pass + else: + raise NoViableAltException(self) + + self.state = 269 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==99: + self.state = 267 + self.match(JavaScriptParser.As) + self.state = 268 + self.identifierName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ImportFromContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def From(self): + return self.getToken(JavaScriptParser.From, 0) + + def StringLiteral(self): + return self.getToken(JavaScriptParser.StringLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_importFrom + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportFrom" ): + listener.enterImportFrom(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportFrom" ): + listener.exitImportFrom(self) + + + + + def importFrom(self): + + localctx = JavaScriptParser.ImportFromContext(self, self._ctx, self.state) + self.enterRule(localctx, 26, self.RULE_importFrom) + try: + self.enterOuterAlt(localctx, 1) + self.state = 271 + self.match(JavaScriptParser.From) + self.state = 272 + self.match(JavaScriptParser.StringLiteral) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AliasNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifierName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.IdentifierNameContext) + else: + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,i) + + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_aliasName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAliasName" ): + listener.enterAliasName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAliasName" ): + listener.exitAliasName(self) + + + + + def aliasName(self): + + localctx = JavaScriptParser.AliasNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 28, self.RULE_aliasName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 274 + self.identifierName() + self.state = 277 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==99: + self.state = 275 + self.match(JavaScriptParser.As) + self.state = 276 + self.identifierName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExportStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return JavaScriptParser.RULE_exportStatement + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class ExportDefaultDeclarationContext(ExportStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.ExportStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def Export(self): + return self.getToken(JavaScriptParser.Export, 0) + def Default(self): + return self.getToken(JavaScriptParser.Default, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExportDefaultDeclaration" ): + listener.enterExportDefaultDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExportDefaultDeclaration" ): + listener.exitExportDefaultDeclaration(self) + + + class ExportDeclarationContext(ExportStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.ExportStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def Export(self): + return self.getToken(JavaScriptParser.Export, 0) + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + def exportFromBlock(self): + return self.getTypedRuleContext(JavaScriptParser.ExportFromBlockContext,0) + + def declaration(self): + return self.getTypedRuleContext(JavaScriptParser.DeclarationContext,0) + + def Default(self): + return self.getToken(JavaScriptParser.Default, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExportDeclaration" ): + listener.enterExportDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExportDeclaration" ): + listener.exitExportDeclaration(self) + + + + def exportStatement(self): + + localctx = JavaScriptParser.ExportStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 30, self.RULE_exportStatement) + try: + self.state = 294 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,18,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.ExportDeclarationContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 279 + self.match(JavaScriptParser.Export) + self.state = 281 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,16,self._ctx) + if la_ == 1: + self.state = 280 + self.match(JavaScriptParser.Default) + + + self.state = 285 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,17,self._ctx) + if la_ == 1: + self.state = 283 + self.exportFromBlock() + pass + + elif la_ == 2: + self.state = 284 + self.declaration() + pass + + + self.state = 287 + self.eos() + pass + + elif la_ == 2: + localctx = JavaScriptParser.ExportDefaultDeclarationContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 289 + self.match(JavaScriptParser.Export) + self.state = 290 + self.match(JavaScriptParser.Default) + self.state = 291 + self.singleExpression(0) + self.state = 292 + self.eos() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExportFromBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def importNamespace(self): + return self.getTypedRuleContext(JavaScriptParser.ImportNamespaceContext,0) + + + def importFrom(self): + return self.getTypedRuleContext(JavaScriptParser.ImportFromContext,0) + + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def exportModuleItems(self): + return self.getTypedRuleContext(JavaScriptParser.ExportModuleItemsContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_exportFromBlock + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExportFromBlock" ): + listener.enterExportFromBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExportFromBlock" ): + listener.exitExportFromBlock(self) + + + + + def exportFromBlock(self): + + localctx = JavaScriptParser.ExportFromBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 32, self.RULE_exportFromBlock) + try: + self.state = 306 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [26, 62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.enterOuterAlt(localctx, 1) + self.state = 296 + self.importNamespace() + self.state = 297 + self.importFrom() + self.state = 298 + self.eos() + pass + elif token in [9]: + self.enterOuterAlt(localctx, 2) + self.state = 300 + self.exportModuleItems() + self.state = 302 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,19,self._ctx) + if la_ == 1: + self.state = 301 + self.importFrom() + + + self.state = 304 + self.eos() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExportModuleItemsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def exportAliasName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ExportAliasNameContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ExportAliasNameContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_exportModuleItems + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExportModuleItems" ): + listener.enterExportModuleItems(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExportModuleItems" ): + listener.exitExportModuleItems(self) + + + + + def exportModuleItems(self): + + localctx = JavaScriptParser.ExportModuleItemsContext(self, self._ctx, self.state) + self.enterRule(localctx, 34, self.RULE_exportModuleItems) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 308 + self.match(JavaScriptParser.OpenBrace) + self.state = 314 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 309 + self.exportAliasName() + self.state = 310 + self.match(JavaScriptParser.Comma) + self.state = 316 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,21,self._ctx) + + self.state = 321 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 62)) & ~0x3f) == 0 and ((1 << (_la - 62)) & 4611686018427385859) != 0): + self.state = 317 + self.exportAliasName() + self.state = 319 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==13: + self.state = 318 + self.match(JavaScriptParser.Comma) + + + + + self.state = 323 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExportAliasNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def moduleExportName(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ModuleExportNameContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ModuleExportNameContext,i) + + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_exportAliasName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExportAliasName" ): + listener.enterExportAliasName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExportAliasName" ): + listener.exitExportAliasName(self) + + + + + def exportAliasName(self): + + localctx = JavaScriptParser.ExportAliasNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 36, self.RULE_exportAliasName) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 325 + self.moduleExportName() + self.state = 328 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==99: + self.state = 326 + self.match(JavaScriptParser.As) + self.state = 327 + self.moduleExportName() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableStatement(self): + return self.getTypedRuleContext(JavaScriptParser.VariableStatementContext,0) + + + def classDeclaration(self): + return self.getTypedRuleContext(JavaScriptParser.ClassDeclarationContext,0) + + + def functionDeclaration(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionDeclarationContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_declaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDeclaration" ): + listener.enterDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDeclaration" ): + listener.exitDeclaration(self) + + + + + def declaration(self): + + localctx = JavaScriptParser.DeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 38, self.RULE_declaration) + try: + self.state = 333 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [80, 108, 114, 115]: + self.enterOuterAlt(localctx, 1) + self.state = 330 + self.variableStatement() + pass + elif token in [104]: + self.enterOuterAlt(localctx, 2) + self.state = 331 + self.classDeclaration() + pass + elif token in [90, 111]: + self.enterOuterAlt(localctx, 3) + self.state = 332 + self.functionDeclaration() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def variableDeclarationList(self): + return self.getTypedRuleContext(JavaScriptParser.VariableDeclarationListContext,0) + + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_variableStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableStatement" ): + listener.enterVariableStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableStatement" ): + listener.exitVariableStatement(self) + + + + + def variableStatement(self): + + localctx = JavaScriptParser.VariableStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 40, self.RULE_variableStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 335 + self.variableDeclarationList() + self.state = 336 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclarationListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def varModifier(self): + return self.getTypedRuleContext(JavaScriptParser.VarModifierContext,0) + + + def variableDeclaration(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.VariableDeclarationContext) + else: + return self.getTypedRuleContext(JavaScriptParser.VariableDeclarationContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_variableDeclarationList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableDeclarationList" ): + listener.enterVariableDeclarationList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableDeclarationList" ): + listener.exitVariableDeclarationList(self) + + + + + def variableDeclarationList(self): + + localctx = JavaScriptParser.VariableDeclarationListContext(self, self._ctx, self.state) + self.enterRule(localctx, 42, self.RULE_variableDeclarationList) + try: + self.enterOuterAlt(localctx, 1) + self.state = 338 + self.varModifier() + self.state = 339 + self.variableDeclaration() + self.state = 344 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 340 + self.match(JavaScriptParser.Comma) + self.state = 341 + self.variableDeclaration() + self.state = 346 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,26,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VariableDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignable(self): + return self.getTypedRuleContext(JavaScriptParser.AssignableContext,0) + + + def Assign(self): + return self.getToken(JavaScriptParser.Assign, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_variableDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVariableDeclaration" ): + listener.enterVariableDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVariableDeclaration" ): + listener.exitVariableDeclaration(self) + + + + + def variableDeclaration(self): + + localctx = JavaScriptParser.VariableDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 44, self.RULE_variableDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 347 + self.assignable() + self.state = 350 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,27,self._ctx) + if la_ == 1: + self.state = 348 + self.match(JavaScriptParser.Assign) + self.state = 349 + self.singleExpression(0) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EmptyStatement_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SemiColon(self): + return self.getToken(JavaScriptParser.SemiColon, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_emptyStatement_ + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEmptyStatement_" ): + listener.enterEmptyStatement_(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEmptyStatement_" ): + listener.exitEmptyStatement_(self) + + + + + def emptyStatement_(self): + + localctx = JavaScriptParser.EmptyStatement_Context(self, self._ctx, self.state) + self.enterRule(localctx, 46, self.RULE_emptyStatement_) + try: + self.enterOuterAlt(localctx, 1) + self.state = 352 + self.match(JavaScriptParser.SemiColon) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_expressionStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionStatement" ): + listener.enterExpressionStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionStatement" ): + listener.exitExpressionStatement(self) + + + + + def expressionStatement(self): + + localctx = JavaScriptParser.ExpressionStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 48, self.RULE_expressionStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 354 + if not self.notOpenBraceAndNotFunction(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notOpenBraceAndNotFunction()") + self.state = 355 + self.expressionSequence() + self.state = 356 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IfStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def If(self): + return self.getToken(JavaScriptParser.If, 0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def statement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.StatementContext) + else: + return self.getTypedRuleContext(JavaScriptParser.StatementContext,i) + + + def Else(self): + return self.getToken(JavaScriptParser.Else, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_ifStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIfStatement" ): + listener.enterIfStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIfStatement" ): + listener.exitIfStatement(self) + + + + + def ifStatement(self): + + localctx = JavaScriptParser.IfStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 50, self.RULE_ifStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 358 + self.match(JavaScriptParser.If) + self.state = 359 + self.match(JavaScriptParser.OpenParen) + self.state = 360 + self.expressionSequence() + self.state = 361 + self.match(JavaScriptParser.CloseParen) + self.state = 362 + self.statement() + self.state = 365 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,28,self._ctx) + if la_ == 1: + self.state = 363 + self.match(JavaScriptParser.Else) + self.state = 364 + self.statement() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IterationStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return JavaScriptParser.RULE_iterationStatement + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class DoStatementContext(IterationStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.IterationStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def Do(self): + return self.getToken(JavaScriptParser.Do, 0) + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + def While(self): + return self.getToken(JavaScriptParser.While, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDoStatement" ): + listener.enterDoStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDoStatement" ): + listener.exitDoStatement(self) + + + class WhileStatementContext(IterationStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.IterationStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def While(self): + return self.getToken(JavaScriptParser.While, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWhileStatement" ): + listener.enterWhileStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWhileStatement" ): + listener.exitWhileStatement(self) + + + class ForStatementContext(IterationStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.IterationStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def For(self): + return self.getToken(JavaScriptParser.For, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def SemiColon(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.SemiColon) + else: + return self.getToken(JavaScriptParser.SemiColon, i) + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + def expressionSequence(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ExpressionSequenceContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,i) + + def variableDeclarationList(self): + return self.getTypedRuleContext(JavaScriptParser.VariableDeclarationListContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForStatement" ): + listener.enterForStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForStatement" ): + listener.exitForStatement(self) + + + class ForInStatementContext(IterationStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.IterationStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def For(self): + return self.getToken(JavaScriptParser.For, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def In(self): + return self.getToken(JavaScriptParser.In, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def variableDeclarationList(self): + return self.getTypedRuleContext(JavaScriptParser.VariableDeclarationListContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForInStatement" ): + listener.enterForInStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForInStatement" ): + listener.exitForInStatement(self) + + + class ForOfStatementContext(IterationStatementContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.IterationStatementContext + super().__init__(parser) + self.copyFrom(ctx) + + def For(self): + return self.getToken(JavaScriptParser.For, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def Of(self): + return self.getToken(JavaScriptParser.Of, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def variableDeclarationList(self): + return self.getTypedRuleContext(JavaScriptParser.VariableDeclarationListContext,0) + + def Await(self): + return self.getToken(JavaScriptParser.Await, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterForOfStatement" ): + listener.enterForOfStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitForOfStatement" ): + listener.exitForOfStatement(self) + + + + def iterationStatement(self): + + localctx = JavaScriptParser.IterationStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 52, self.RULE_iterationStatement) + self._la = 0 # Token type + try: + self.state = 422 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,35,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.DoStatementContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 367 + self.match(JavaScriptParser.Do) + self.state = 368 + self.statement() + self.state = 369 + self.match(JavaScriptParser.While) + self.state = 370 + self.match(JavaScriptParser.OpenParen) + self.state = 371 + self.expressionSequence() + self.state = 372 + self.match(JavaScriptParser.CloseParen) + self.state = 373 + self.eos() + pass + + elif la_ == 2: + localctx = JavaScriptParser.WhileStatementContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 375 + self.match(JavaScriptParser.While) + self.state = 376 + self.match(JavaScriptParser.OpenParen) + self.state = 377 + self.expressionSequence() + self.state = 378 + self.match(JavaScriptParser.CloseParen) + self.state = 379 + self.statement() + pass + + elif la_ == 3: + localctx = JavaScriptParser.ForStatementContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 381 + self.match(JavaScriptParser.For) + self.state = 382 + self.match(JavaScriptParser.OpenParen) + self.state = 385 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,29,self._ctx) + if la_ == 1: + self.state = 383 + self.expressionSequence() + + elif la_ == 2: + self.state = 384 + self.variableDeclarationList() + + + self.state = 387 + self.match(JavaScriptParser.SemiColon) + self.state = 389 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4611686018361326928) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 2305843009213693951) != 0): + self.state = 388 + self.expressionSequence() + + + self.state = 391 + self.match(JavaScriptParser.SemiColon) + self.state = 393 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4611686018361326928) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 2305843009213693951) != 0): + self.state = 392 + self.expressionSequence() + + + self.state = 395 + self.match(JavaScriptParser.CloseParen) + self.state = 396 + self.statement() + pass + + elif la_ == 4: + localctx = JavaScriptParser.ForInStatementContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 397 + self.match(JavaScriptParser.For) + self.state = 398 + self.match(JavaScriptParser.OpenParen) + self.state = 401 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,32,self._ctx) + if la_ == 1: + self.state = 399 + self.singleExpression(0) + pass + + elif la_ == 2: + self.state = 400 + self.variableDeclarationList() + pass + + + self.state = 403 + self.match(JavaScriptParser.In) + self.state = 404 + self.expressionSequence() + self.state = 405 + self.match(JavaScriptParser.CloseParen) + self.state = 406 + self.statement() + pass + + elif la_ == 5: + localctx = JavaScriptParser.ForOfStatementContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 408 + self.match(JavaScriptParser.For) + self.state = 410 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==112: + self.state = 409 + self.match(JavaScriptParser.Await) + + + self.state = 412 + self.match(JavaScriptParser.OpenParen) + self.state = 415 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,34,self._ctx) + if la_ == 1: + self.state = 413 + self.singleExpression(0) + pass + + elif la_ == 2: + self.state = 414 + self.variableDeclarationList() + pass + + + self.state = 417 + self.match(JavaScriptParser.Of) + self.state = 418 + self.expressionSequence() + self.state = 419 + self.match(JavaScriptParser.CloseParen) + self.state = 420 + self.statement() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class VarModifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Var(self): + return self.getToken(JavaScriptParser.Var, 0) + + def let_(self): + return self.getTypedRuleContext(JavaScriptParser.Let_Context,0) + + + def Const(self): + return self.getToken(JavaScriptParser.Const, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_varModifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVarModifier" ): + listener.enterVarModifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVarModifier" ): + listener.exitVarModifier(self) + + + + + def varModifier(self): + + localctx = JavaScriptParser.VarModifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 54, self.RULE_varModifier) + try: + self.state = 427 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [80]: + self.enterOuterAlt(localctx, 1) + self.state = 424 + self.match(JavaScriptParser.Var) + pass + elif token in [114, 115]: + self.enterOuterAlt(localctx, 2) + self.state = 425 + self.let_() + pass + elif token in [108]: + self.enterOuterAlt(localctx, 3) + self.state = 426 + self.match(JavaScriptParser.Const) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ContinueStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Continue(self): + return self.getToken(JavaScriptParser.Continue, 0) + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_continueStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterContinueStatement" ): + listener.enterContinueStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitContinueStatement" ): + listener.exitContinueStatement(self) + + + + + def continueStatement(self): + + localctx = JavaScriptParser.ContinueStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 56, self.RULE_continueStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 429 + self.match(JavaScriptParser.Continue) + self.state = 432 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,37,self._ctx) + if la_ == 1: + self.state = 430 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 431 + self.identifier() + + + self.state = 434 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BreakStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Break(self): + return self.getToken(JavaScriptParser.Break, 0) + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_breakStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBreakStatement" ): + listener.enterBreakStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBreakStatement" ): + listener.exitBreakStatement(self) + + + + + def breakStatement(self): + + localctx = JavaScriptParser.BreakStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 58, self.RULE_breakStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 436 + self.match(JavaScriptParser.Break) + self.state = 439 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,38,self._ctx) + if la_ == 1: + self.state = 437 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 438 + self.identifier() + + + self.state = 441 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReturnStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Return(self): + return self.getToken(JavaScriptParser.Return, 0) + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_returnStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterReturnStatement" ): + listener.enterReturnStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitReturnStatement" ): + listener.exitReturnStatement(self) + + + + + def returnStatement(self): + + localctx = JavaScriptParser.ReturnStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 60, self.RULE_returnStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 443 + self.match(JavaScriptParser.Return) + self.state = 446 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,39,self._ctx) + if la_ == 1: + self.state = 444 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 445 + self.expressionSequence() + + + self.state = 448 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class YieldStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def Yield(self): + return self.getToken(JavaScriptParser.Yield, 0) + + def YieldStar(self): + return self.getToken(JavaScriptParser.YieldStar, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_yieldStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterYieldStatement" ): + listener.enterYieldStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitYieldStatement" ): + listener.exitYieldStatement(self) + + + + + def yieldStatement(self): + + localctx = JavaScriptParser.YieldStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 62, self.RULE_yieldStatement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 450 + _la = self._input.LA(1) + if not(_la==102 or _la==103): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 453 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,40,self._ctx) + if la_ == 1: + self.state = 451 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 452 + self.expressionSequence() + + + self.state = 455 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class WithStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def With(self): + return self.getToken(JavaScriptParser.With, 0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_withStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterWithStatement" ): + listener.enterWithStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitWithStatement" ): + listener.exitWithStatement(self) + + + + + def withStatement(self): + + localctx = JavaScriptParser.WithStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 64, self.RULE_withStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 457 + self.match(JavaScriptParser.With) + self.state = 458 + self.match(JavaScriptParser.OpenParen) + self.state = 459 + self.expressionSequence() + self.state = 460 + self.match(JavaScriptParser.CloseParen) + self.state = 461 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SwitchStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Switch(self): + return self.getToken(JavaScriptParser.Switch, 0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def caseBlock(self): + return self.getTypedRuleContext(JavaScriptParser.CaseBlockContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_switchStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSwitchStatement" ): + listener.enterSwitchStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSwitchStatement" ): + listener.exitSwitchStatement(self) + + + + + def switchStatement(self): + + localctx = JavaScriptParser.SwitchStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 66, self.RULE_switchStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 463 + self.match(JavaScriptParser.Switch) + self.state = 464 + self.match(JavaScriptParser.OpenParen) + self.state = 465 + self.expressionSequence() + self.state = 466 + self.match(JavaScriptParser.CloseParen) + self.state = 467 + self.caseBlock() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaseBlockContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def caseClauses(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.CaseClausesContext) + else: + return self.getTypedRuleContext(JavaScriptParser.CaseClausesContext,i) + + + def defaultClause(self): + return self.getTypedRuleContext(JavaScriptParser.DefaultClauseContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_caseBlock + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCaseBlock" ): + listener.enterCaseBlock(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCaseBlock" ): + listener.exitCaseBlock(self) + + + + + def caseBlock(self): + + localctx = JavaScriptParser.CaseBlockContext(self, self._ctx, self.state) + self.enterRule(localctx, 68, self.RULE_caseBlock) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 469 + self.match(JavaScriptParser.OpenBrace) + self.state = 471 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==77: + self.state = 470 + self.caseClauses() + + + self.state = 477 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==93: + self.state = 473 + self.defaultClause() + self.state = 475 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==77: + self.state = 474 + self.caseClauses() + + + + + self.state = 479 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaseClausesContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def caseClause(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.CaseClauseContext) + else: + return self.getTypedRuleContext(JavaScriptParser.CaseClauseContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_caseClauses + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCaseClauses" ): + listener.enterCaseClauses(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCaseClauses" ): + listener.exitCaseClauses(self) + + + + + def caseClauses(self): + + localctx = JavaScriptParser.CaseClausesContext(self, self._ctx, self.state) + self.enterRule(localctx, 70, self.RULE_caseClauses) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 482 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 481 + self.caseClause() + self.state = 484 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==77): + break + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CaseClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Case(self): + return self.getToken(JavaScriptParser.Case, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + + def statementList(self): + return self.getTypedRuleContext(JavaScriptParser.StatementListContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_caseClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCaseClause" ): + listener.enterCaseClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCaseClause" ): + listener.exitCaseClause(self) + + + + + def caseClause(self): + + localctx = JavaScriptParser.CaseClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 72, self.RULE_caseClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 486 + self.match(JavaScriptParser.Case) + self.state = 487 + self.expressionSequence() + self.state = 488 + self.match(JavaScriptParser.Colon) + self.state = 490 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,45,self._ctx) + if la_ == 1: + self.state = 489 + self.statementList() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DefaultClauseContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Default(self): + return self.getToken(JavaScriptParser.Default, 0) + + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + + def statementList(self): + return self.getTypedRuleContext(JavaScriptParser.StatementListContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_defaultClause + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDefaultClause" ): + listener.enterDefaultClause(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDefaultClause" ): + listener.exitDefaultClause(self) + + + + + def defaultClause(self): + + localctx = JavaScriptParser.DefaultClauseContext(self, self._ctx, self.state) + self.enterRule(localctx, 74, self.RULE_defaultClause) + try: + self.enterOuterAlt(localctx, 1) + self.state = 492 + self.match(JavaScriptParser.Default) + self.state = 493 + self.match(JavaScriptParser.Colon) + self.state = 495 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,46,self._ctx) + if la_ == 1: + self.state = 494 + self.statementList() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LabelledStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + + def statement(self): + return self.getTypedRuleContext(JavaScriptParser.StatementContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_labelledStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLabelledStatement" ): + listener.enterLabelledStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLabelledStatement" ): + listener.exitLabelledStatement(self) + + + + + def labelledStatement(self): + + localctx = JavaScriptParser.LabelledStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 76, self.RULE_labelledStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 497 + self.identifier() + self.state = 498 + self.match(JavaScriptParser.Colon) + self.state = 499 + self.statement() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ThrowStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Throw(self): + return self.getToken(JavaScriptParser.Throw, 0) + + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_throwStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterThrowStatement" ): + listener.enterThrowStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitThrowStatement" ): + listener.exitThrowStatement(self) + + + + + def throwStatement(self): + + localctx = JavaScriptParser.ThrowStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 78, self.RULE_throwStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 501 + self.match(JavaScriptParser.Throw) + self.state = 502 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 503 + self.expressionSequence() + self.state = 504 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TryStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Try(self): + return self.getToken(JavaScriptParser.Try, 0) + + def block(self): + return self.getTypedRuleContext(JavaScriptParser.BlockContext,0) + + + def catchProduction(self): + return self.getTypedRuleContext(JavaScriptParser.CatchProductionContext,0) + + + def finallyProduction(self): + return self.getTypedRuleContext(JavaScriptParser.FinallyProductionContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_tryStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTryStatement" ): + listener.enterTryStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTryStatement" ): + listener.exitTryStatement(self) + + + + + def tryStatement(self): + + localctx = JavaScriptParser.TryStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 80, self.RULE_tryStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 506 + self.match(JavaScriptParser.Try) + self.state = 507 + self.block() + self.state = 513 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [81]: + self.state = 508 + self.catchProduction() + self.state = 510 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,47,self._ctx) + if la_ == 1: + self.state = 509 + self.finallyProduction() + + + pass + elif token in [82]: + self.state = 512 + self.finallyProduction() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class CatchProductionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Catch(self): + return self.getToken(JavaScriptParser.Catch, 0) + + def block(self): + return self.getTypedRuleContext(JavaScriptParser.BlockContext,0) + + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def assignable(self): + return self.getTypedRuleContext(JavaScriptParser.AssignableContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_catchProduction + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCatchProduction" ): + listener.enterCatchProduction(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCatchProduction" ): + listener.exitCatchProduction(self) + + + + + def catchProduction(self): + + localctx = JavaScriptParser.CatchProductionContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_catchProduction) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 515 + self.match(JavaScriptParser.Catch) + self.state = 521 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==7: + self.state = 516 + self.match(JavaScriptParser.OpenParen) + self.state = 518 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==5 or _la==9 or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 517 + self.assignable() + + + self.state = 520 + self.match(JavaScriptParser.CloseParen) + + + self.state = 523 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FinallyProductionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Finally(self): + return self.getToken(JavaScriptParser.Finally, 0) + + def block(self): + return self.getTypedRuleContext(JavaScriptParser.BlockContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_finallyProduction + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFinallyProduction" ): + listener.enterFinallyProduction(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFinallyProduction" ): + listener.exitFinallyProduction(self) + + + + + def finallyProduction(self): + + localctx = JavaScriptParser.FinallyProductionContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_finallyProduction) + try: + self.enterOuterAlt(localctx, 1) + self.state = 525 + self.match(JavaScriptParser.Finally) + self.state = 526 + self.block() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class DebuggerStatementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Debugger(self): + return self.getToken(JavaScriptParser.Debugger, 0) + + def eos(self): + return self.getTypedRuleContext(JavaScriptParser.EosContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_debuggerStatement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDebuggerStatement" ): + listener.enterDebuggerStatement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDebuggerStatement" ): + listener.exitDebuggerStatement(self) + + + + + def debuggerStatement(self): + + localctx = JavaScriptParser.DebuggerStatementContext(self, self._ctx, self.state) + self.enterRule(localctx, 86, self.RULE_debuggerStatement) + try: + self.enterOuterAlt(localctx, 1) + self.state = 528 + self.match(JavaScriptParser.Debugger) + self.state = 529 + self.eos() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Function_(self): + return self.getToken(JavaScriptParser.Function_, 0) + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterListContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_functionDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFunctionDeclaration" ): + listener.enterFunctionDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFunctionDeclaration" ): + listener.exitFunctionDeclaration(self) + + + + + def functionDeclaration(self): + + localctx = JavaScriptParser.FunctionDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 88, self.RULE_functionDeclaration) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 532 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==111: + self.state = 531 + self.match(JavaScriptParser.Async) + + + self.state = 534 + self.match(JavaScriptParser.Function_) + self.state = 536 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26: + self.state = 535 + self.match(JavaScriptParser.Multiply) + + + self.state = 538 + self.identifier() + self.state = 539 + self.match(JavaScriptParser.OpenParen) + self.state = 541 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 540 + self.formalParameterList() + + + self.state = 543 + self.match(JavaScriptParser.CloseParen) + self.state = 544 + self.functionBody() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassDeclarationContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Class(self): + return self.getToken(JavaScriptParser.Class, 0) + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def classTail(self): + return self.getTypedRuleContext(JavaScriptParser.ClassTailContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_classDeclaration + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassDeclaration" ): + listener.enterClassDeclaration(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassDeclaration" ): + listener.exitClassDeclaration(self) + + + + + def classDeclaration(self): + + localctx = JavaScriptParser.ClassDeclarationContext(self, self._ctx, self.state) + self.enterRule(localctx, 90, self.RULE_classDeclaration) + try: + self.enterOuterAlt(localctx, 1) + self.state = 546 + self.match(JavaScriptParser.Class) + self.state = 547 + self.identifier() + self.state = 548 + self.classTail() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassTailContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def Extends(self): + return self.getToken(JavaScriptParser.Extends, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def classElement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ClassElementContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ClassElementContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_classTail + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassTail" ): + listener.enterClassTail(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassTail" ): + listener.exitClassTail(self) + + + + + def classTail(self): + + localctx = JavaScriptParser.ClassTailContext(self, self._ctx, self.state) + self.enterRule(localctx, 92, self.RULE_classTail) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 552 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==106: + self.state = 550 + self.match(JavaScriptParser.Extends) + self.state = 551 + self.singleExpression(0) + + + self.state = 554 + self.match(JavaScriptParser.OpenBrace) + self.state = 558 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,55,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 555 + self.classElement() + self.state = 560 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,55,self._ctx) + + self.state = 561 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassElementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def methodDefinition(self): + return self.getTypedRuleContext(JavaScriptParser.MethodDefinitionContext,0) + + + def Static(self): + return self.getToken(JavaScriptParser.Static, 0) + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def fieldDefinition(self): + return self.getTypedRuleContext(JavaScriptParser.FieldDefinitionContext,0) + + + def block(self): + return self.getTypedRuleContext(JavaScriptParser.BlockContext,0) + + + def emptyStatement_(self): + return self.getTypedRuleContext(JavaScriptParser.EmptyStatement_Context,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_classElement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassElement" ): + listener.enterClassElement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassElement" ): + listener.exitClassElement(self) + + + + + def classElement(self): + + localctx = JavaScriptParser.ClassElementContext(self, self._ctx, self.state) + self.enterRule(localctx, 94, self.RULE_classElement) + try: + self.state = 582 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,59,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 566 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,56,self._ctx) + if la_ == 1: + self.state = 563 + self.match(JavaScriptParser.Static) + + elif la_ == 2: + self.state = 564 + if not self.n("static"): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.n(\"static\")") + self.state = 565 + self.identifier() + + + self.state = 568 + self.methodDefinition() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 572 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,57,self._ctx) + if la_ == 1: + self.state = 569 + self.match(JavaScriptParser.Static) + + elif la_ == 2: + self.state = 570 + if not self.n("static"): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.n(\"static\")") + self.state = 571 + self.identifier() + + + self.state = 574 + self.fieldDefinition() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 578 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,58,self._ctx) + if la_ == 1: + self.state = 575 + self.match(JavaScriptParser.Static) + pass + + elif la_ == 2: + self.state = 576 + if not self.n("static"): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.n(\"static\")") + self.state = 577 + self.identifier() + pass + + + self.state = 580 + self.block() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 581 + self.emptyStatement_() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class MethodDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classElementName(self): + return self.getTypedRuleContext(JavaScriptParser.ClassElementNameContext,0) + + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterListContext,0) + + + def getter(self): + return self.getTypedRuleContext(JavaScriptParser.GetterContext,0) + + + def setter(self): + return self.getTypedRuleContext(JavaScriptParser.SetterContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_methodDefinition + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMethodDefinition" ): + listener.enterMethodDefinition(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMethodDefinition" ): + listener.exitMethodDefinition(self) + + + + + def methodDefinition(self): + + localctx = JavaScriptParser.MethodDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 96, self.RULE_methodDefinition) + self._la = 0 # Token type + try: + self.state = 618 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,66,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 586 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,60,self._ctx) + if la_ == 1: + self.state = 584 + self.match(JavaScriptParser.Async) + self.state = 585 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + + + self.state = 589 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26: + self.state = 588 + self.match(JavaScriptParser.Multiply) + + + self.state = 591 + self.classElementName() + self.state = 592 + self.match(JavaScriptParser.OpenParen) + self.state = 594 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 593 + self.formalParameterList() + + + self.state = 596 + self.match(JavaScriptParser.CloseParen) + self.state = 597 + self.functionBody() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 600 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,63,self._ctx) + if la_ == 1: + self.state = 599 + self.match(JavaScriptParser.Multiply) + + + self.state = 602 + self.getter() + self.state = 603 + self.match(JavaScriptParser.OpenParen) + self.state = 604 + self.match(JavaScriptParser.CloseParen) + self.state = 605 + self.functionBody() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 608 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,64,self._ctx) + if la_ == 1: + self.state = 607 + self.match(JavaScriptParser.Multiply) + + + self.state = 610 + self.setter() + self.state = 611 + self.match(JavaScriptParser.OpenParen) + self.state = 613 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 612 + self.formalParameterList() + + + self.state = 615 + self.match(JavaScriptParser.CloseParen) + self.state = 616 + self.functionBody() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FieldDefinitionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def classElementName(self): + return self.getTypedRuleContext(JavaScriptParser.ClassElementNameContext,0) + + + def initializer(self): + return self.getTypedRuleContext(JavaScriptParser.InitializerContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_fieldDefinition + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFieldDefinition" ): + listener.enterFieldDefinition(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFieldDefinition" ): + listener.exitFieldDefinition(self) + + + + + def fieldDefinition(self): + + localctx = JavaScriptParser.FieldDefinitionContext(self, self._ctx, self.state) + self.enterRule(localctx, 98, self.RULE_fieldDefinition) + try: + self.enterOuterAlt(localctx, 1) + self.state = 620 + self.classElementName() + self.state = 622 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,67,self._ctx) + if la_ == 1: + self.state = 621 + self.initializer() + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ClassElementNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def propertyName(self): + return self.getTypedRuleContext(JavaScriptParser.PropertyNameContext,0) + + + def privateIdentifier(self): + return self.getTypedRuleContext(JavaScriptParser.PrivateIdentifierContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_classElementName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassElementName" ): + listener.enterClassElementName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassElementName" ): + listener.exitClassElementName(self) + + + + + def classElementName(self): + + localctx = JavaScriptParser.ClassElementNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 100, self.RULE_classElementName) + try: + self.state = 626 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [5, 62, 63, 64, 65, 66, 67, 68, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 624 + self.propertyName() + pass + elif token in [31]: + self.enterOuterAlt(localctx, 2) + self.state = 625 + self.privateIdentifier() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PrivateIdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Hashtag(self): + return self.getToken(JavaScriptParser.Hashtag, 0) + + def identifierName(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_privateIdentifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPrivateIdentifier" ): + listener.enterPrivateIdentifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPrivateIdentifier" ): + listener.exitPrivateIdentifier(self) + + + + + def privateIdentifier(self): + + localctx = JavaScriptParser.PrivateIdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 102, self.RULE_privateIdentifier) + try: + self.enterOuterAlt(localctx, 1) + self.state = 628 + self.match(JavaScriptParser.Hashtag) + self.state = 629 + self.identifierName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def formalParameterArg(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.FormalParameterArgContext) + else: + return self.getTypedRuleContext(JavaScriptParser.FormalParameterArgContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def lastFormalParameterArg(self): + return self.getTypedRuleContext(JavaScriptParser.LastFormalParameterArgContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_formalParameterList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFormalParameterList" ): + listener.enterFormalParameterList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFormalParameterList" ): + listener.exitFormalParameterList(self) + + + + + def formalParameterList(self): + + localctx = JavaScriptParser.FormalParameterListContext(self, self._ctx, self.state) + self.enterRule(localctx, 104, self.RULE_formalParameterList) + self._la = 0 # Token type + try: + self.state = 644 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [5, 9, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.enterOuterAlt(localctx, 1) + self.state = 631 + self.formalParameterArg() + self.state = 636 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,69,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 632 + self.match(JavaScriptParser.Comma) + self.state = 633 + self.formalParameterArg() + self.state = 638 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,69,self._ctx) + + self.state = 641 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==13: + self.state = 639 + self.match(JavaScriptParser.Comma) + self.state = 640 + self.lastFormalParameterArg() + + + pass + elif token in [18]: + self.enterOuterAlt(localctx, 2) + self.state = 643 + self.lastFormalParameterArg() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FormalParameterArgContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def assignable(self): + return self.getTypedRuleContext(JavaScriptParser.AssignableContext,0) + + + def Assign(self): + return self.getToken(JavaScriptParser.Assign, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_formalParameterArg + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFormalParameterArg" ): + listener.enterFormalParameterArg(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFormalParameterArg" ): + listener.exitFormalParameterArg(self) + + + + + def formalParameterArg(self): + + localctx = JavaScriptParser.FormalParameterArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 106, self.RULE_formalParameterArg) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 646 + self.assignable() + self.state = 649 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==14: + self.state = 647 + self.match(JavaScriptParser.Assign) + self.state = 648 + self.singleExpression(0) + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LastFormalParameterArgContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Ellipsis(self): + return self.getToken(JavaScriptParser.Ellipsis, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_lastFormalParameterArg + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLastFormalParameterArg" ): + listener.enterLastFormalParameterArg(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLastFormalParameterArg" ): + listener.exitLastFormalParameterArg(self) + + + + + def lastFormalParameterArg(self): + + localctx = JavaScriptParser.LastFormalParameterArgContext(self, self._ctx, self.state) + self.enterRule(localctx, 108, self.RULE_lastFormalParameterArg) + try: + self.enterOuterAlt(localctx, 1) + self.state = 651 + self.match(JavaScriptParser.Ellipsis) + self.state = 652 + self.singleExpression(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class FunctionBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def sourceElements(self): + return self.getTypedRuleContext(JavaScriptParser.SourceElementsContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_functionBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFunctionBody" ): + listener.enterFunctionBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFunctionBody" ): + listener.exitFunctionBody(self) + + + + + def functionBody(self): + + localctx = JavaScriptParser.FunctionBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 110, self.RULE_functionBody) + try: + self.enterOuterAlt(localctx, 1) + self.state = 654 + self.match(JavaScriptParser.OpenBrace) + self.state = 656 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,73,self._ctx) + if la_ == 1: + self.state = 655 + self.sourceElements() + + + self.state = 658 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SourceElementsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def sourceElement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SourceElementContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SourceElementContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_sourceElements + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSourceElements" ): + listener.enterSourceElements(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSourceElements" ): + listener.exitSourceElements(self) + + + + + def sourceElements(self): + + localctx = JavaScriptParser.SourceElementsContext(self, self._ctx, self.state) + self.enterRule(localctx, 112, self.RULE_sourceElements) + try: + self.enterOuterAlt(localctx, 1) + self.state = 661 + self._errHandler.sync(self) + _alt = 1 + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt == 1: + self.state = 660 + self.sourceElement() + + else: + raise NoViableAltException(self) + self.state = 663 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,74,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBracket(self): + return self.getToken(JavaScriptParser.OpenBracket, 0) + + def elementList(self): + return self.getTypedRuleContext(JavaScriptParser.ElementListContext,0) + + + def CloseBracket(self): + return self.getToken(JavaScriptParser.CloseBracket, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_arrayLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayLiteral" ): + listener.enterArrayLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayLiteral" ): + listener.exitArrayLiteral(self) + + + + + def arrayLiteral(self): + + localctx = JavaScriptParser.ArrayLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 114, self.RULE_arrayLiteral) + try: + self.enterOuterAlt(localctx, 1) + self.state = 665 + self.match(JavaScriptParser.OpenBracket) + self.state = 666 + self.elementList() + self.state = 667 + self.match(JavaScriptParser.CloseBracket) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ElementListContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def arrayElement(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ArrayElementContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ArrayElementContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_elementList + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterElementList" ): + listener.enterElementList(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitElementList" ): + listener.exitElementList(self) + + + + + def elementList(self): + + localctx = JavaScriptParser.ElementListContext(self, self._ctx, self.state) + self.enterRule(localctx, 116, self.RULE_elementList) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 672 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,75,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 669 + self.match(JavaScriptParser.Comma) + self.state = 674 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,75,self._ctx) + + self.state = 676 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4611686018361064784) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 2305843009213693951) != 0): + self.state = 675 + self.arrayElement() + + + self.state = 686 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,78,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 679 + self._errHandler.sync(self) + _la = self._input.LA(1) + while True: + self.state = 678 + self.match(JavaScriptParser.Comma) + self.state = 681 + self._errHandler.sync(self) + _la = self._input.LA(1) + if not (_la==13): + break + + self.state = 683 + self.arrayElement() + self.state = 688 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,78,self._ctx) + + self.state = 692 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==13: + self.state = 689 + self.match(JavaScriptParser.Comma) + self.state = 694 + self._errHandler.sync(self) + _la = self._input.LA(1) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrayElementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def Ellipsis(self): + return self.getToken(JavaScriptParser.Ellipsis, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_arrayElement + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayElement" ): + listener.enterArrayElement(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayElement" ): + listener.exitArrayElement(self) + + + + + def arrayElement(self): + + localctx = JavaScriptParser.ArrayElementContext(self, self._ctx, self.state) + self.enterRule(localctx, 118, self.RULE_arrayElement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 696 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==18: + self.state = 695 + self.match(JavaScriptParser.Ellipsis) + + + self.state = 698 + self.singleExpression(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PropertyAssignmentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return JavaScriptParser.RULE_propertyAssignment + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class PropertyExpressionAssignmentContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def propertyName(self): + return self.getTypedRuleContext(JavaScriptParser.PropertyNameContext,0) + + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertyExpressionAssignment" ): + listener.enterPropertyExpressionAssignment(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertyExpressionAssignment" ): + listener.exitPropertyExpressionAssignment(self) + + + class ComputedPropertyExpressionAssignmentContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def OpenBracket(self): + return self.getToken(JavaScriptParser.OpenBracket, 0) + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def CloseBracket(self): + return self.getToken(JavaScriptParser.CloseBracket, 0) + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterComputedPropertyExpressionAssignment" ): + listener.enterComputedPropertyExpressionAssignment(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitComputedPropertyExpressionAssignment" ): + listener.exitComputedPropertyExpressionAssignment(self) + + + class PropertyShorthandContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def Ellipsis(self): + return self.getToken(JavaScriptParser.Ellipsis, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertyShorthand" ): + listener.enterPropertyShorthand(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertyShorthand" ): + listener.exitPropertyShorthand(self) + + + class PropertySetterContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def setter(self): + return self.getTypedRuleContext(JavaScriptParser.SetterContext,0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def formalParameterArg(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterArgContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertySetter" ): + listener.enterPropertySetter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertySetter" ): + listener.exitPropertySetter(self) + + + class PropertyGetterContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def getter(self): + return self.getTypedRuleContext(JavaScriptParser.GetterContext,0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertyGetter" ): + listener.enterPropertyGetter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertyGetter" ): + listener.exitPropertyGetter(self) + + + class FunctionPropertyContext(PropertyAssignmentContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.PropertyAssignmentContext + super().__init__(parser) + self.copyFrom(ctx) + + def propertyName(self): + return self.getTypedRuleContext(JavaScriptParser.PropertyNameContext,0) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + def formalParameterList(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterListContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFunctionProperty" ): + listener.enterFunctionProperty(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFunctionProperty" ): + listener.exitFunctionProperty(self) + + + + def propertyAssignment(self): + + localctx = JavaScriptParser.PropertyAssignmentContext(self, self._ctx, self.state) + self.enterRule(localctx, 120, self.RULE_propertyAssignment) + self._la = 0 # Token type + try: + self.state = 739 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,85,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.PropertyExpressionAssignmentContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 700 + self.propertyName() + self.state = 701 + self.match(JavaScriptParser.Colon) + self.state = 702 + self.singleExpression(0) + pass + + elif la_ == 2: + localctx = JavaScriptParser.ComputedPropertyExpressionAssignmentContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 704 + self.match(JavaScriptParser.OpenBracket) + self.state = 705 + self.singleExpression(0) + self.state = 706 + self.match(JavaScriptParser.CloseBracket) + self.state = 707 + self.match(JavaScriptParser.Colon) + self.state = 708 + self.singleExpression(0) + pass + + elif la_ == 3: + localctx = JavaScriptParser.FunctionPropertyContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 711 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,81,self._ctx) + if la_ == 1: + self.state = 710 + self.match(JavaScriptParser.Async) + + + self.state = 714 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26: + self.state = 713 + self.match(JavaScriptParser.Multiply) + + + self.state = 716 + self.propertyName() + self.state = 717 + self.match(JavaScriptParser.OpenParen) + self.state = 719 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 718 + self.formalParameterList() + + + self.state = 721 + self.match(JavaScriptParser.CloseParen) + self.state = 722 + self.functionBody() + pass + + elif la_ == 4: + localctx = JavaScriptParser.PropertyGetterContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 724 + self.getter() + self.state = 725 + self.match(JavaScriptParser.OpenParen) + self.state = 726 + self.match(JavaScriptParser.CloseParen) + self.state = 727 + self.functionBody() + pass + + elif la_ == 5: + localctx = JavaScriptParser.PropertySetterContext(self, localctx) + self.enterOuterAlt(localctx, 5) + self.state = 729 + self.setter() + self.state = 730 + self.match(JavaScriptParser.OpenParen) + self.state = 731 + self.formalParameterArg() + self.state = 732 + self.match(JavaScriptParser.CloseParen) + self.state = 733 + self.functionBody() + pass + + elif la_ == 6: + localctx = JavaScriptParser.PropertyShorthandContext(self, localctx) + self.enterOuterAlt(localctx, 6) + self.state = 736 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==18: + self.state = 735 + self.match(JavaScriptParser.Ellipsis) + + + self.state = 738 + self.singleExpression(0) + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class PropertyNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifierName(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,0) + + + def StringLiteral(self): + return self.getToken(JavaScriptParser.StringLiteral, 0) + + def numericLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.NumericLiteralContext,0) + + + def OpenBracket(self): + return self.getToken(JavaScriptParser.OpenBracket, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def CloseBracket(self): + return self.getToken(JavaScriptParser.CloseBracket, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_propertyName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPropertyName" ): + listener.enterPropertyName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPropertyName" ): + listener.exitPropertyName(self) + + + + + def propertyName(self): + + localctx = JavaScriptParser.PropertyNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_propertyName) + try: + self.state = 748 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [62, 63, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122]: + self.enterOuterAlt(localctx, 1) + self.state = 741 + self.identifierName() + pass + elif token in [123]: + self.enterOuterAlt(localctx, 2) + self.state = 742 + self.match(JavaScriptParser.StringLiteral) + pass + elif token in [64, 65, 66, 67, 68]: + self.enterOuterAlt(localctx, 3) + self.state = 743 + self.numericLiteral() + pass + elif token in [5]: + self.enterOuterAlt(localctx, 4) + self.state = 744 + self.match(JavaScriptParser.OpenBracket) + self.state = 745 + self.singleExpression(0) + self.state = 746 + self.match(JavaScriptParser.CloseBracket) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArgumentsContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def argument(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.ArgumentContext) + else: + return self.getTypedRuleContext(JavaScriptParser.ArgumentContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_arguments + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArguments" ): + listener.enterArguments(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArguments" ): + listener.exitArguments(self) + + + + + def arguments(self): + + localctx = JavaScriptParser.ArgumentsContext(self, self._ctx, self.state) + self.enterRule(localctx, 124, self.RULE_arguments) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 750 + self.match(JavaScriptParser.OpenParen) + self.state = 762 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4611686018361064784) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 2305843009213693951) != 0): + self.state = 751 + self.argument() + self.state = 756 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 752 + self.match(JavaScriptParser.Comma) + self.state = 753 + self.argument() + self.state = 758 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,87,self._ctx) + + self.state = 760 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==13: + self.state = 759 + self.match(JavaScriptParser.Comma) + + + + + self.state = 764 + self.match(JavaScriptParser.CloseParen) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArgumentContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def Ellipsis(self): + return self.getToken(JavaScriptParser.Ellipsis, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_argument + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArgument" ): + listener.enterArgument(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArgument" ): + listener.exitArgument(self) + + + + + def argument(self): + + localctx = JavaScriptParser.ArgumentContext(self, self._ctx, self.state) + self.enterRule(localctx, 126, self.RULE_argument) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 767 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==18: + self.state = 766 + self.match(JavaScriptParser.Ellipsis) + + + self.state = 771 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,91,self._ctx) + if la_ == 1: + self.state = 769 + self.singleExpression(0) + pass + + elif la_ == 2: + self.state = 770 + self.identifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ExpressionSequenceContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_expressionSequence + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterExpressionSequence" ): + listener.enterExpressionSequence(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitExpressionSequence" ): + listener.exitExpressionSequence(self) + + + + + def expressionSequence(self): + + localctx = JavaScriptParser.ExpressionSequenceContext(self, self._ctx, self.state) + self.enterRule(localctx, 128, self.RULE_expressionSequence) + try: + self.enterOuterAlt(localctx, 1) + self.state = 773 + self.singleExpression(0) + self.state = 778 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,92,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 774 + self.match(JavaScriptParser.Comma) + self.state = 775 + self.singleExpression(0) + self.state = 780 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,92,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SingleExpressionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return JavaScriptParser.RULE_singleExpression + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + class TemplateStringExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def templateStringLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.TemplateStringLiteralContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTemplateStringExpression" ): + listener.enterTemplateStringExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTemplateStringExpression" ): + listener.exitTemplateStringExpression(self) + + + class TernaryExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def QuestionMark(self): + return self.getToken(JavaScriptParser.QuestionMark, 0) + def Colon(self): + return self.getToken(JavaScriptParser.Colon, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTernaryExpression" ): + listener.enterTernaryExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTernaryExpression" ): + listener.exitTernaryExpression(self) + + + class LogicalAndExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def And(self): + return self.getToken(JavaScriptParser.And, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLogicalAndExpression" ): + listener.enterLogicalAndExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLogicalAndExpression" ): + listener.exitLogicalAndExpression(self) + + + class PowerExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Power(self): + return self.getToken(JavaScriptParser.Power, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPowerExpression" ): + listener.enterPowerExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPowerExpression" ): + listener.exitPowerExpression(self) + + + class PreIncrementExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def PlusPlus(self): + return self.getToken(JavaScriptParser.PlusPlus, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPreIncrementExpression" ): + listener.enterPreIncrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPreIncrementExpression" ): + listener.exitPreIncrementExpression(self) + + + class ObjectLiteralExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def objectLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.ObjectLiteralContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterObjectLiteralExpression" ): + listener.enterObjectLiteralExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitObjectLiteralExpression" ): + listener.exitObjectLiteralExpression(self) + + + class MetaExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def New(self): + return self.getToken(JavaScriptParser.New, 0) + def Dot(self): + return self.getToken(JavaScriptParser.Dot, 0) + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMetaExpression" ): + listener.enterMetaExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMetaExpression" ): + listener.exitMetaExpression(self) + + + class InExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def In(self): + return self.getToken(JavaScriptParser.In, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInExpression" ): + listener.enterInExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInExpression" ): + listener.exitInExpression(self) + + + class LogicalOrExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Or(self): + return self.getToken(JavaScriptParser.Or, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLogicalOrExpression" ): + listener.enterLogicalOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLogicalOrExpression" ): + listener.exitLogicalOrExpression(self) + + + class OptionalChainExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def QuestionMarkDot(self): + return self.getToken(JavaScriptParser.QuestionMarkDot, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterOptionalChainExpression" ): + listener.enterOptionalChainExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitOptionalChainExpression" ): + listener.exitOptionalChainExpression(self) + + + class NotExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Not(self): + return self.getToken(JavaScriptParser.Not, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNotExpression" ): + listener.enterNotExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNotExpression" ): + listener.exitNotExpression(self) + + + class PreDecreaseExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def MinusMinus(self): + return self.getToken(JavaScriptParser.MinusMinus, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPreDecreaseExpression" ): + listener.enterPreDecreaseExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPreDecreaseExpression" ): + listener.exitPreDecreaseExpression(self) + + + class ArgumentsExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def arguments(self): + return self.getTypedRuleContext(JavaScriptParser.ArgumentsContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArgumentsExpression" ): + listener.enterArgumentsExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArgumentsExpression" ): + listener.exitArgumentsExpression(self) + + + class AwaitExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Await(self): + return self.getToken(JavaScriptParser.Await, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAwaitExpression" ): + listener.enterAwaitExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAwaitExpression" ): + listener.exitAwaitExpression(self) + + + class ThisExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def This(self): + return self.getToken(JavaScriptParser.This, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterThisExpression" ): + listener.enterThisExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitThisExpression" ): + listener.exitThisExpression(self) + + + class FunctionExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def anonymousFunction(self): + return self.getTypedRuleContext(JavaScriptParser.AnonymousFunctionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFunctionExpression" ): + listener.enterFunctionExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFunctionExpression" ): + listener.exitFunctionExpression(self) + + + class UnaryMinusExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Minus(self): + return self.getToken(JavaScriptParser.Minus, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnaryMinusExpression" ): + listener.enterUnaryMinusExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnaryMinusExpression" ): + listener.exitUnaryMinusExpression(self) + + + class AssignmentExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Assign(self): + return self.getToken(JavaScriptParser.Assign, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignmentExpression" ): + listener.enterAssignmentExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignmentExpression" ): + listener.exitAssignmentExpression(self) + + + class PostDecreaseExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def MinusMinus(self): + return self.getToken(JavaScriptParser.MinusMinus, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPostDecreaseExpression" ): + listener.enterPostDecreaseExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPostDecreaseExpression" ): + listener.exitPostDecreaseExpression(self) + + + class TypeofExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Typeof(self): + return self.getToken(JavaScriptParser.Typeof, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTypeofExpression" ): + listener.enterTypeofExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTypeofExpression" ): + listener.exitTypeofExpression(self) + + + class InstanceofExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Instanceof(self): + return self.getToken(JavaScriptParser.Instanceof, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInstanceofExpression" ): + listener.enterInstanceofExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInstanceofExpression" ): + listener.exitInstanceofExpression(self) + + + class UnaryPlusExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Plus(self): + return self.getToken(JavaScriptParser.Plus, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnaryPlusExpression" ): + listener.enterUnaryPlusExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnaryPlusExpression" ): + listener.exitUnaryPlusExpression(self) + + + class DeleteExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Delete(self): + return self.getToken(JavaScriptParser.Delete, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterDeleteExpression" ): + listener.enterDeleteExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitDeleteExpression" ): + listener.exitDeleteExpression(self) + + + class ImportExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Import(self): + return self.getToken(JavaScriptParser.Import, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterImportExpression" ): + listener.enterImportExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitImportExpression" ): + listener.exitImportExpression(self) + + + class EqualityExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Equals_(self): + return self.getToken(JavaScriptParser.Equals_, 0) + def NotEquals(self): + return self.getToken(JavaScriptParser.NotEquals, 0) + def IdentityEquals(self): + return self.getToken(JavaScriptParser.IdentityEquals, 0) + def IdentityNotEquals(self): + return self.getToken(JavaScriptParser.IdentityNotEquals, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEqualityExpression" ): + listener.enterEqualityExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEqualityExpression" ): + listener.exitEqualityExpression(self) + + + class BitXOrExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def BitXOr(self): + return self.getToken(JavaScriptParser.BitXOr, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBitXOrExpression" ): + listener.enterBitXOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBitXOrExpression" ): + listener.exitBitXOrExpression(self) + + + class SuperExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Super(self): + return self.getToken(JavaScriptParser.Super, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSuperExpression" ): + listener.enterSuperExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSuperExpression" ): + listener.exitSuperExpression(self) + + + class MultiplicativeExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + def Divide(self): + return self.getToken(JavaScriptParser.Divide, 0) + def Modulus(self): + return self.getToken(JavaScriptParser.Modulus, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMultiplicativeExpression" ): + listener.enterMultiplicativeExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMultiplicativeExpression" ): + listener.exitMultiplicativeExpression(self) + + + class BitShiftExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def LeftShiftArithmetic(self): + return self.getToken(JavaScriptParser.LeftShiftArithmetic, 0) + def RightShiftArithmetic(self): + return self.getToken(JavaScriptParser.RightShiftArithmetic, 0) + def RightShiftLogical(self): + return self.getToken(JavaScriptParser.RightShiftLogical, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBitShiftExpression" ): + listener.enterBitShiftExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBitShiftExpression" ): + listener.exitBitShiftExpression(self) + + + class ParenthesizedExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterParenthesizedExpression" ): + listener.enterParenthesizedExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitParenthesizedExpression" ): + listener.exitParenthesizedExpression(self) + + + class AdditiveExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def Plus(self): + return self.getToken(JavaScriptParser.Plus, 0) + def Minus(self): + return self.getToken(JavaScriptParser.Minus, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAdditiveExpression" ): + listener.enterAdditiveExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAdditiveExpression" ): + listener.exitAdditiveExpression(self) + + + class RelationalExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def LessThan(self): + return self.getToken(JavaScriptParser.LessThan, 0) + def MoreThan(self): + return self.getToken(JavaScriptParser.MoreThan, 0) + def LessThanEquals(self): + return self.getToken(JavaScriptParser.LessThanEquals, 0) + def GreaterThanEquals(self): + return self.getToken(JavaScriptParser.GreaterThanEquals, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterRelationalExpression" ): + listener.enterRelationalExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitRelationalExpression" ): + listener.exitRelationalExpression(self) + + + class PostIncrementExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def PlusPlus(self): + return self.getToken(JavaScriptParser.PlusPlus, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterPostIncrementExpression" ): + listener.enterPostIncrementExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitPostIncrementExpression" ): + listener.exitPostIncrementExpression(self) + + + class YieldExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def yieldStatement(self): + return self.getTypedRuleContext(JavaScriptParser.YieldStatementContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterYieldExpression" ): + listener.enterYieldExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitYieldExpression" ): + listener.exitYieldExpression(self) + + + class BitNotExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def BitNot(self): + return self.getToken(JavaScriptParser.BitNot, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBitNotExpression" ): + listener.enterBitNotExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBitNotExpression" ): + listener.exitBitNotExpression(self) + + + class NewExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def New(self): + return self.getToken(JavaScriptParser.New, 0) + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + def arguments(self): + return self.getTypedRuleContext(JavaScriptParser.ArgumentsContext,0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNewExpression" ): + listener.enterNewExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNewExpression" ): + listener.exitNewExpression(self) + + + class LiteralExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def literal(self): + return self.getTypedRuleContext(JavaScriptParser.LiteralContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLiteralExpression" ): + listener.enterLiteralExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLiteralExpression" ): + listener.exitLiteralExpression(self) + + + class ArrayLiteralExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def arrayLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.ArrayLiteralContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrayLiteralExpression" ): + listener.enterArrayLiteralExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrayLiteralExpression" ): + listener.exitArrayLiteralExpression(self) + + + class MemberDotExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def Dot(self): + return self.getToken(JavaScriptParser.Dot, 0) + def identifierName(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierNameContext,0) + + def QuestionMark(self): + return self.getToken(JavaScriptParser.QuestionMark, 0) + def Hashtag(self): + return self.getToken(JavaScriptParser.Hashtag, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMemberDotExpression" ): + listener.enterMemberDotExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMemberDotExpression" ): + listener.exitMemberDotExpression(self) + + + class ClassExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Class(self): + return self.getToken(JavaScriptParser.Class, 0) + def classTail(self): + return self.getTypedRuleContext(JavaScriptParser.ClassTailContext,0) + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterClassExpression" ): + listener.enterClassExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitClassExpression" ): + listener.exitClassExpression(self) + + + class MemberIndexExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + def OpenBracket(self): + return self.getToken(JavaScriptParser.OpenBracket, 0) + def expressionSequence(self): + return self.getTypedRuleContext(JavaScriptParser.ExpressionSequenceContext,0) + + def CloseBracket(self): + return self.getToken(JavaScriptParser.CloseBracket, 0) + def QuestionMarkDot(self): + return self.getToken(JavaScriptParser.QuestionMarkDot, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterMemberIndexExpression" ): + listener.enterMemberIndexExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitMemberIndexExpression" ): + listener.exitMemberIndexExpression(self) + + + class IdentifierExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIdentifierExpression" ): + listener.enterIdentifierExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIdentifierExpression" ): + listener.exitIdentifierExpression(self) + + + class BitAndExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def BitAnd(self): + return self.getToken(JavaScriptParser.BitAnd, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBitAndExpression" ): + listener.enterBitAndExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBitAndExpression" ): + listener.exitBitAndExpression(self) + + + class BitOrExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def BitOr(self): + return self.getToken(JavaScriptParser.BitOr, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBitOrExpression" ): + listener.enterBitOrExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBitOrExpression" ): + listener.exitBitOrExpression(self) + + + class AssignmentOperatorExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def assignmentOperator(self): + return self.getTypedRuleContext(JavaScriptParser.AssignmentOperatorContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignmentOperatorExpression" ): + listener.enterAssignmentOperatorExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignmentOperatorExpression" ): + listener.exitAssignmentOperatorExpression(self) + + + class VoidExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Void(self): + return self.getToken(JavaScriptParser.Void, 0) + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterVoidExpression" ): + listener.enterVoidExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitVoidExpression" ): + listener.exitVoidExpression(self) + + + class CoalesceExpressionContext(SingleExpressionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.SingleExpressionContext + super().__init__(parser) + self.copyFrom(ctx) + + def singleExpression(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.SingleExpressionContext) + else: + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,i) + + def NullCoalesce(self): + return self.getToken(JavaScriptParser.NullCoalesce, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterCoalesceExpression" ): + listener.enterCoalesceExpression(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitCoalesceExpression" ): + listener.exitCoalesceExpression(self) + + + + def singleExpression(self, _p:int=0): + _parentctx = self._ctx + _parentState = self.state + localctx = JavaScriptParser.SingleExpressionContext(self, self._ctx, _parentState) + _prevctx = localctx + _startState = 130 + self.enterRecursionRule(localctx, 130, self.RULE_singleExpression, _p) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 837 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,94,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.FunctionExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + + self.state = 782 + self.anonymousFunction() + pass + + elif la_ == 2: + localctx = JavaScriptParser.ClassExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 783 + self.match(JavaScriptParser.Class) + self.state = 785 + self._errHandler.sync(self) + _la = self._input.LA(1) + if ((((_la - 99)) & ~0x3f) == 0 and ((1 << (_la - 99)) & 8458255) != 0): + self.state = 784 + self.identifier() + + + self.state = 787 + self.classTail() + pass + + elif la_ == 3: + localctx = JavaScriptParser.NewExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 788 + self.match(JavaScriptParser.New) + self.state = 789 + self.identifier() + self.state = 790 + self.arguments() + pass + + elif la_ == 4: + localctx = JavaScriptParser.NewExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 792 + self.match(JavaScriptParser.New) + self.state = 793 + self.singleExpression(0) + self.state = 794 + self.arguments() + pass + + elif la_ == 5: + localctx = JavaScriptParser.NewExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 796 + self.match(JavaScriptParser.New) + self.state = 797 + self.singleExpression(42) + pass + + elif la_ == 6: + localctx = JavaScriptParser.MetaExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 798 + self.match(JavaScriptParser.New) + self.state = 799 + self.match(JavaScriptParser.Dot) + self.state = 800 + self.identifier() + pass + + elif la_ == 7: + localctx = JavaScriptParser.DeleteExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 801 + self.match(JavaScriptParser.Delete) + self.state = 802 + self.singleExpression(37) + pass + + elif la_ == 8: + localctx = JavaScriptParser.VoidExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 803 + self.match(JavaScriptParser.Void) + self.state = 804 + self.singleExpression(36) + pass + + elif la_ == 9: + localctx = JavaScriptParser.TypeofExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 805 + self.match(JavaScriptParser.Typeof) + self.state = 806 + self.singleExpression(35) + pass + + elif la_ == 10: + localctx = JavaScriptParser.PreIncrementExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 807 + self.match(JavaScriptParser.PlusPlus) + self.state = 808 + self.singleExpression(34) + pass + + elif la_ == 11: + localctx = JavaScriptParser.PreDecreaseExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 809 + self.match(JavaScriptParser.MinusMinus) + self.state = 810 + self.singleExpression(33) + pass + + elif la_ == 12: + localctx = JavaScriptParser.UnaryPlusExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 811 + self.match(JavaScriptParser.Plus) + self.state = 812 + self.singleExpression(32) + pass + + elif la_ == 13: + localctx = JavaScriptParser.UnaryMinusExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 813 + self.match(JavaScriptParser.Minus) + self.state = 814 + self.singleExpression(31) + pass + + elif la_ == 14: + localctx = JavaScriptParser.BitNotExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 815 + self.match(JavaScriptParser.BitNot) + self.state = 816 + self.singleExpression(30) + pass + + elif la_ == 15: + localctx = JavaScriptParser.NotExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 817 + self.match(JavaScriptParser.Not) + self.state = 818 + self.singleExpression(29) + pass + + elif la_ == 16: + localctx = JavaScriptParser.AwaitExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 819 + self.match(JavaScriptParser.Await) + self.state = 820 + self.singleExpression(28) + pass + + elif la_ == 17: + localctx = JavaScriptParser.ImportExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 821 + self.match(JavaScriptParser.Import) + self.state = 822 + self.match(JavaScriptParser.OpenParen) + self.state = 823 + self.singleExpression(0) + self.state = 824 + self.match(JavaScriptParser.CloseParen) + pass + + elif la_ == 18: + localctx = JavaScriptParser.YieldExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 826 + self.yieldStatement() + pass + + elif la_ == 19: + localctx = JavaScriptParser.ThisExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 827 + self.match(JavaScriptParser.This) + pass + + elif la_ == 20: + localctx = JavaScriptParser.IdentifierExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 828 + self.identifier() + pass + + elif la_ == 21: + localctx = JavaScriptParser.SuperExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 829 + self.match(JavaScriptParser.Super) + pass + + elif la_ == 22: + localctx = JavaScriptParser.LiteralExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 830 + self.literal() + pass + + elif la_ == 23: + localctx = JavaScriptParser.ArrayLiteralExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 831 + self.arrayLiteral() + pass + + elif la_ == 24: + localctx = JavaScriptParser.ObjectLiteralExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 832 + self.objectLiteral() + pass + + elif la_ == 25: + localctx = JavaScriptParser.ParenthesizedExpressionContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 833 + self.match(JavaScriptParser.OpenParen) + self.state = 834 + self.expressionSequence() + self.state = 835 + self.match(JavaScriptParser.CloseParen) + pass + + + self._ctx.stop = self._input.LT(-1) + self.state = 926 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,99,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + if self._parseListeners is not None: + self.triggerExitRuleEvent() + _prevctx = localctx + self.state = 924 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,98,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.OptionalChainExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 839 + if not self.precpred(self._ctx, 47): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 47)") + self.state = 840 + self.match(JavaScriptParser.QuestionMarkDot) + self.state = 841 + self.singleExpression(48) + pass + + elif la_ == 2: + localctx = JavaScriptParser.PowerExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 842 + if not self.precpred(self._ctx, 27): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 27)") + self.state = 843 + self.match(JavaScriptParser.Power) + self.state = 844 + self.singleExpression(27) + pass + + elif la_ == 3: + localctx = JavaScriptParser.MultiplicativeExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 845 + if not self.precpred(self._ctx, 26): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 26)") + self.state = 846 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 469762048) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 847 + self.singleExpression(27) + pass + + elif la_ == 4: + localctx = JavaScriptParser.AdditiveExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 848 + if not self.precpred(self._ctx, 25): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 25)") + self.state = 849 + _la = self._input.LA(1) + if not(_la==22 or _la==23): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 850 + self.singleExpression(26) + pass + + elif la_ == 5: + localctx = JavaScriptParser.CoalesceExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 851 + if not self.precpred(self._ctx, 24): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 24)") + self.state = 852 + self.match(JavaScriptParser.NullCoalesce) + self.state = 853 + self.singleExpression(25) + pass + + elif la_ == 6: + localctx = JavaScriptParser.BitShiftExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 854 + if not self.precpred(self._ctx, 23): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 23)") + self.state = 855 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 30064771072) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 856 + self.singleExpression(24) + pass + + elif la_ == 7: + localctx = JavaScriptParser.RelationalExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 857 + if not self.precpred(self._ctx, 22): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 22)") + self.state = 858 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 515396075520) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 859 + self.singleExpression(23) + pass + + elif la_ == 8: + localctx = JavaScriptParser.InstanceofExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 860 + if not self.precpred(self._ctx, 21): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") + self.state = 861 + self.match(JavaScriptParser.Instanceof) + self.state = 862 + self.singleExpression(22) + pass + + elif la_ == 9: + localctx = JavaScriptParser.InExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 863 + if not self.precpred(self._ctx, 20): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") + self.state = 864 + self.match(JavaScriptParser.In) + self.state = 865 + self.singleExpression(21) + pass + + elif la_ == 10: + localctx = JavaScriptParser.EqualityExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 866 + if not self.precpred(self._ctx, 19): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") + self.state = 867 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 8246337208320) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + self.state = 868 + self.singleExpression(20) + pass + + elif la_ == 11: + localctx = JavaScriptParser.BitAndExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 869 + if not self.precpred(self._ctx, 18): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 18)") + self.state = 870 + self.match(JavaScriptParser.BitAnd) + self.state = 871 + self.singleExpression(19) + pass + + elif la_ == 12: + localctx = JavaScriptParser.BitXOrExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 872 + if not self.precpred(self._ctx, 17): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") + self.state = 873 + self.match(JavaScriptParser.BitXOr) + self.state = 874 + self.singleExpression(18) + pass + + elif la_ == 13: + localctx = JavaScriptParser.BitOrExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 875 + if not self.precpred(self._ctx, 16): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") + self.state = 876 + self.match(JavaScriptParser.BitOr) + self.state = 877 + self.singleExpression(17) + pass + + elif la_ == 14: + localctx = JavaScriptParser.LogicalAndExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 878 + if not self.precpred(self._ctx, 15): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") + self.state = 879 + self.match(JavaScriptParser.And) + self.state = 880 + self.singleExpression(16) + pass + + elif la_ == 15: + localctx = JavaScriptParser.LogicalOrExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 881 + if not self.precpred(self._ctx, 14): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") + self.state = 882 + self.match(JavaScriptParser.Or) + self.state = 883 + self.singleExpression(15) + pass + + elif la_ == 16: + localctx = JavaScriptParser.TernaryExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 884 + if not self.precpred(self._ctx, 13): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") + self.state = 885 + self.match(JavaScriptParser.QuestionMark) + self.state = 886 + self.singleExpression(0) + self.state = 887 + self.match(JavaScriptParser.Colon) + self.state = 888 + self.singleExpression(14) + pass + + elif la_ == 17: + localctx = JavaScriptParser.AssignmentExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 890 + if not self.precpred(self._ctx, 12): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 12)") + self.state = 891 + self.match(JavaScriptParser.Assign) + self.state = 892 + self.singleExpression(12) + pass + + elif la_ == 18: + localctx = JavaScriptParser.AssignmentOperatorExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 893 + if not self.precpred(self._ctx, 11): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") + self.state = 894 + self.assignmentOperator() + self.state = 895 + self.singleExpression(11) + pass + + elif la_ == 19: + localctx = JavaScriptParser.MemberIndexExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 897 + if not self.precpred(self._ctx, 46): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 46)") + self.state = 899 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==16: + self.state = 898 + self.match(JavaScriptParser.QuestionMarkDot) + + + self.state = 901 + self.match(JavaScriptParser.OpenBracket) + self.state = 902 + self.expressionSequence() + self.state = 903 + self.match(JavaScriptParser.CloseBracket) + pass + + elif la_ == 20: + localctx = JavaScriptParser.MemberDotExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 905 + if not self.precpred(self._ctx, 45): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 45)") + self.state = 907 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==15: + self.state = 906 + self.match(JavaScriptParser.QuestionMark) + + + self.state = 909 + self.match(JavaScriptParser.Dot) + self.state = 911 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==31: + self.state = 910 + self.match(JavaScriptParser.Hashtag) + + + self.state = 913 + self.identifierName() + pass + + elif la_ == 21: + localctx = JavaScriptParser.ArgumentsExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 914 + if not self.precpred(self._ctx, 41): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 41)") + self.state = 915 + self.arguments() + pass + + elif la_ == 22: + localctx = JavaScriptParser.PostIncrementExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 916 + if not self.precpred(self._ctx, 39): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 39)") + self.state = 917 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 918 + self.match(JavaScriptParser.PlusPlus) + pass + + elif la_ == 23: + localctx = JavaScriptParser.PostDecreaseExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 919 + if not self.precpred(self._ctx, 38): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 38)") + self.state = 920 + if not self.notLineTerminator(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.notLineTerminator()") + self.state = 921 + self.match(JavaScriptParser.MinusMinus) + pass + + elif la_ == 24: + localctx = JavaScriptParser.TemplateStringExpressionContext(self, JavaScriptParser.SingleExpressionContext(self, _parentctx, _parentState)) + self.pushNewRecursionContext(localctx, _startState, self.RULE_singleExpression) + self.state = 922 + if not self.precpred(self._ctx, 9): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") + self.state = 923 + self.templateStringLiteral() + pass + + + self.state = 928 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,99,self._ctx) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.unrollRecursionContexts(_parentctx) + return localctx + + + class InitializerContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Assign(self): + return self.getToken(JavaScriptParser.Assign, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_initializer + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterInitializer" ): + listener.enterInitializer(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitInitializer" ): + listener.exitInitializer(self) + + + + + def initializer(self): + + localctx = JavaScriptParser.InitializerContext(self, self._ctx, self.state) + self.enterRule(localctx, 132, self.RULE_initializer) + try: + self.enterOuterAlt(localctx, 1) + self.state = 929 + self.match(JavaScriptParser.Assign) + self.state = 930 + self.singleExpression(0) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignableContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def keyword(self): + return self.getTypedRuleContext(JavaScriptParser.KeywordContext,0) + + + def arrayLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.ArrayLiteralContext,0) + + + def objectLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.ObjectLiteralContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_assignable + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignable" ): + listener.enterAssignable(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignable" ): + listener.exitAssignable(self) + + + + + def assignable(self): + + localctx = JavaScriptParser.AssignableContext(self, self._ctx, self.state) + self.enterRule(localctx, 134, self.RULE_assignable) + try: + self.state = 936 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,100,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 932 + self.identifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 933 + self.keyword() + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 934 + self.arrayLiteral() + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 935 + self.objectLiteral() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ObjectLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def OpenBrace(self): + return self.getToken(JavaScriptParser.OpenBrace, 0) + + def CloseBrace(self): + return self.getToken(JavaScriptParser.CloseBrace, 0) + + def propertyAssignment(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.PropertyAssignmentContext) + else: + return self.getTypedRuleContext(JavaScriptParser.PropertyAssignmentContext,i) + + + def Comma(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.Comma) + else: + return self.getToken(JavaScriptParser.Comma, i) + + def getRuleIndex(self): + return JavaScriptParser.RULE_objectLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterObjectLiteral" ): + listener.enterObjectLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitObjectLiteral" ): + listener.exitObjectLiteral(self) + + + + + def objectLiteral(self): + + localctx = JavaScriptParser.ObjectLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 136, self.RULE_objectLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 938 + self.match(JavaScriptParser.OpenBrace) + self.state = 950 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,103,self._ctx) + if la_ == 1: + self.state = 939 + self.propertyAssignment() + self.state = 944 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,101,self._ctx) + while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: + if _alt==1: + self.state = 940 + self.match(JavaScriptParser.Comma) + self.state = 941 + self.propertyAssignment() + self.state = 946 + self._errHandler.sync(self) + _alt = self._interp.adaptivePredict(self._input,101,self._ctx) + + self.state = 948 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==13: + self.state = 947 + self.match(JavaScriptParser.Comma) + + + + + self.state = 952 + self.match(JavaScriptParser.CloseBrace) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AnonymousFunctionContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + + def getRuleIndex(self): + return JavaScriptParser.RULE_anonymousFunction + + + def copyFrom(self, ctx:ParserRuleContext): + super().copyFrom(ctx) + + + + class AnonymousFunctionDeclContext(AnonymousFunctionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.AnonymousFunctionContext + super().__init__(parser) + self.copyFrom(ctx) + + def Function_(self): + return self.getToken(JavaScriptParser.Function_, 0) + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + def Multiply(self): + return self.getToken(JavaScriptParser.Multiply, 0) + def formalParameterList(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterListContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAnonymousFunctionDecl" ): + listener.enterAnonymousFunctionDecl(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAnonymousFunctionDecl" ): + listener.exitAnonymousFunctionDecl(self) + + + class ArrowFunctionContext(AnonymousFunctionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.AnonymousFunctionContext + super().__init__(parser) + self.copyFrom(ctx) + + def arrowFunctionParameters(self): + return self.getTypedRuleContext(JavaScriptParser.ArrowFunctionParametersContext,0) + + def ARROW(self): + return self.getToken(JavaScriptParser.ARROW, 0) + def arrowFunctionBody(self): + return self.getTypedRuleContext(JavaScriptParser.ArrowFunctionBodyContext,0) + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrowFunction" ): + listener.enterArrowFunction(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrowFunction" ): + listener.exitArrowFunction(self) + + + class NamedFunctionContext(AnonymousFunctionContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a JavaScriptParser.AnonymousFunctionContext + super().__init__(parser) + self.copyFrom(ctx) + + def functionDeclaration(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionDeclarationContext,0) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNamedFunction" ): + listener.enterNamedFunction(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNamedFunction" ): + listener.exitNamedFunction(self) + + + + def anonymousFunction(self): + + localctx = JavaScriptParser.AnonymousFunctionContext(self, self._ctx, self.state) + self.enterRule(localctx, 138, self.RULE_anonymousFunction) + self._la = 0 # Token type + try: + self.state = 975 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,108,self._ctx) + if la_ == 1: + localctx = JavaScriptParser.NamedFunctionContext(self, localctx) + self.enterOuterAlt(localctx, 1) + self.state = 954 + self.functionDeclaration() + pass + + elif la_ == 2: + localctx = JavaScriptParser.AnonymousFunctionDeclContext(self, localctx) + self.enterOuterAlt(localctx, 2) + self.state = 956 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==111: + self.state = 955 + self.match(JavaScriptParser.Async) + + + self.state = 958 + self.match(JavaScriptParser.Function_) + self.state = 960 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==26: + self.state = 959 + self.match(JavaScriptParser.Multiply) + + + self.state = 962 + self.match(JavaScriptParser.OpenParen) + self.state = 964 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 963 + self.formalParameterList() + + + self.state = 966 + self.match(JavaScriptParser.CloseParen) + self.state = 967 + self.functionBody() + pass + + elif la_ == 3: + localctx = JavaScriptParser.ArrowFunctionContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 969 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,107,self._ctx) + if la_ == 1: + self.state = 968 + self.match(JavaScriptParser.Async) + + + self.state = 971 + self.arrowFunctionParameters() + self.state = 972 + self.match(JavaScriptParser.ARROW) + self.state = 973 + self.arrowFunctionBody() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrowFunctionParametersContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def propertyName(self): + return self.getTypedRuleContext(JavaScriptParser.PropertyNameContext,0) + + + def OpenParen(self): + return self.getToken(JavaScriptParser.OpenParen, 0) + + def CloseParen(self): + return self.getToken(JavaScriptParser.CloseParen, 0) + + def formalParameterList(self): + return self.getTypedRuleContext(JavaScriptParser.FormalParameterListContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_arrowFunctionParameters + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrowFunctionParameters" ): + listener.enterArrowFunctionParameters(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrowFunctionParameters" ): + listener.exitArrowFunctionParameters(self) + + + + + def arrowFunctionParameters(self): + + localctx = JavaScriptParser.ArrowFunctionParametersContext(self, self._ctx, self.state) + self.enterRule(localctx, 140, self.RULE_arrowFunctionParameters) + self._la = 0 # Token type + try: + self.state = 983 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [5, 62, 63, 64, 65, 66, 67, 68, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123]: + self.enterOuterAlt(localctx, 1) + self.state = 977 + self.propertyName() + pass + elif token in [7]: + self.enterOuterAlt(localctx, 2) + self.state = 978 + self.match(JavaScriptParser.OpenParen) + self.state = 980 + self._errHandler.sync(self) + _la = self._input.LA(1) + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 262688) != 0) or ((((_la - 73)) & ~0x3f) == 0 and ((1 << (_la - 73)) & 1125899906842623) != 0): + self.state = 979 + self.formalParameterList() + + + self.state = 982 + self.match(JavaScriptParser.CloseParen) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ArrowFunctionBodyContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def functionBody(self): + return self.getTypedRuleContext(JavaScriptParser.FunctionBodyContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_arrowFunctionBody + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterArrowFunctionBody" ): + listener.enterArrowFunctionBody(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitArrowFunctionBody" ): + listener.exitArrowFunctionBody(self) + + + + + def arrowFunctionBody(self): + + localctx = JavaScriptParser.ArrowFunctionBodyContext(self, self._ctx, self.state) + self.enterRule(localctx, 142, self.RULE_arrowFunctionBody) + try: + self.state = 987 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,111,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 985 + self.singleExpression(0) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 986 + self.functionBody() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class AssignmentOperatorContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def MultiplyAssign(self): + return self.getToken(JavaScriptParser.MultiplyAssign, 0) + + def DivideAssign(self): + return self.getToken(JavaScriptParser.DivideAssign, 0) + + def ModulusAssign(self): + return self.getToken(JavaScriptParser.ModulusAssign, 0) + + def PlusAssign(self): + return self.getToken(JavaScriptParser.PlusAssign, 0) + + def MinusAssign(self): + return self.getToken(JavaScriptParser.MinusAssign, 0) + + def LeftShiftArithmeticAssign(self): + return self.getToken(JavaScriptParser.LeftShiftArithmeticAssign, 0) + + def RightShiftArithmeticAssign(self): + return self.getToken(JavaScriptParser.RightShiftArithmeticAssign, 0) + + def RightShiftLogicalAssign(self): + return self.getToken(JavaScriptParser.RightShiftLogicalAssign, 0) + + def BitAndAssign(self): + return self.getToken(JavaScriptParser.BitAndAssign, 0) + + def BitXorAssign(self): + return self.getToken(JavaScriptParser.BitXorAssign, 0) + + def BitOrAssign(self): + return self.getToken(JavaScriptParser.BitOrAssign, 0) + + def PowerAssign(self): + return self.getToken(JavaScriptParser.PowerAssign, 0) + + def NullishCoalescingAssign(self): + return self.getToken(JavaScriptParser.NullishCoalescingAssign, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_assignmentOperator + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterAssignmentOperator" ): + listener.enterAssignmentOperator(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitAssignmentOperator" ): + listener.exitAssignmentOperator(self) + + + + + def assignmentOperator(self): + + localctx = JavaScriptParser.AssignmentOperatorContext(self, self._ctx, self.state) + self.enterRule(localctx, 144, self.RULE_assignmentOperator) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 989 + _la = self._input.LA(1) + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 2305561534236983296) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class LiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NullLiteral(self): + return self.getToken(JavaScriptParser.NullLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(JavaScriptParser.BooleanLiteral, 0) + + def StringLiteral(self): + return self.getToken(JavaScriptParser.StringLiteral, 0) + + def templateStringLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.TemplateStringLiteralContext,0) + + + def RegularExpressionLiteral(self): + return self.getToken(JavaScriptParser.RegularExpressionLiteral, 0) + + def numericLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.NumericLiteralContext,0) + + + def bigintLiteral(self): + return self.getTypedRuleContext(JavaScriptParser.BigintLiteralContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_literal + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLiteral" ): + listener.enterLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLiteral" ): + listener.exitLiteral(self) + + + + + def literal(self): + + localctx = JavaScriptParser.LiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 146, self.RULE_literal) + try: + self.state = 998 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [62]: + self.enterOuterAlt(localctx, 1) + self.state = 991 + self.match(JavaScriptParser.NullLiteral) + pass + elif token in [63]: + self.enterOuterAlt(localctx, 2) + self.state = 992 + self.match(JavaScriptParser.BooleanLiteral) + pass + elif token in [123]: + self.enterOuterAlt(localctx, 3) + self.state = 993 + self.match(JavaScriptParser.StringLiteral) + pass + elif token in [124]: + self.enterOuterAlt(localctx, 4) + self.state = 994 + self.templateStringLiteral() + pass + elif token in [4]: + self.enterOuterAlt(localctx, 5) + self.state = 995 + self.match(JavaScriptParser.RegularExpressionLiteral) + pass + elif token in [64, 65, 66, 67, 68]: + self.enterOuterAlt(localctx, 6) + self.state = 996 + self.numericLiteral() + pass + elif token in [69, 70, 71, 72]: + self.enterOuterAlt(localctx, 7) + self.state = 997 + self.bigintLiteral() + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TemplateStringLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BackTick(self, i:int=None): + if i is None: + return self.getTokens(JavaScriptParser.BackTick) + else: + return self.getToken(JavaScriptParser.BackTick, i) + + def templateStringAtom(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(JavaScriptParser.TemplateStringAtomContext) + else: + return self.getTypedRuleContext(JavaScriptParser.TemplateStringAtomContext,i) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_templateStringLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTemplateStringLiteral" ): + listener.enterTemplateStringLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTemplateStringLiteral" ): + listener.exitTemplateStringLiteral(self) + + + + + def templateStringLiteral(self): + + localctx = JavaScriptParser.TemplateStringLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 148, self.RULE_templateStringLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1000 + self.match(JavaScriptParser.BackTick) + self.state = 1004 + self._errHandler.sync(self) + _la = self._input.LA(1) + while _la==130 or _la==131: + self.state = 1001 + self.templateStringAtom() + self.state = 1006 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 1007 + self.match(JavaScriptParser.BackTick) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class TemplateStringAtomContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def TemplateStringAtom(self): + return self.getToken(JavaScriptParser.TemplateStringAtom, 0) + + def TemplateStringStartExpression(self): + return self.getToken(JavaScriptParser.TemplateStringStartExpression, 0) + + def singleExpression(self): + return self.getTypedRuleContext(JavaScriptParser.SingleExpressionContext,0) + + + def TemplateCloseBrace(self): + return self.getToken(JavaScriptParser.TemplateCloseBrace, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_templateStringAtom + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTemplateStringAtom" ): + listener.enterTemplateStringAtom(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTemplateStringAtom" ): + listener.exitTemplateStringAtom(self) + + + + + def templateStringAtom(self): + + localctx = JavaScriptParser.TemplateStringAtomContext(self, self._ctx, self.state) + self.enterRule(localctx, 150, self.RULE_templateStringAtom) + try: + self.state = 1014 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [131]: + self.enterOuterAlt(localctx, 1) + self.state = 1009 + self.match(JavaScriptParser.TemplateStringAtom) + pass + elif token in [130]: + self.enterOuterAlt(localctx, 2) + self.state = 1010 + self.match(JavaScriptParser.TemplateStringStartExpression) + self.state = 1011 + self.singleExpression(0) + self.state = 1012 + self.match(JavaScriptParser.TemplateCloseBrace) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class NumericLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def DecimalLiteral(self): + return self.getToken(JavaScriptParser.DecimalLiteral, 0) + + def HexIntegerLiteral(self): + return self.getToken(JavaScriptParser.HexIntegerLiteral, 0) + + def OctalIntegerLiteral(self): + return self.getToken(JavaScriptParser.OctalIntegerLiteral, 0) + + def OctalIntegerLiteral2(self): + return self.getToken(JavaScriptParser.OctalIntegerLiteral2, 0) + + def BinaryIntegerLiteral(self): + return self.getToken(JavaScriptParser.BinaryIntegerLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_numericLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterNumericLiteral" ): + listener.enterNumericLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitNumericLiteral" ): + listener.exitNumericLiteral(self) + + + + + def numericLiteral(self): + + localctx = JavaScriptParser.NumericLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 152, self.RULE_numericLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1016 + _la = self._input.LA(1) + if not(((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 31) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class BigintLiteralContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def BigDecimalIntegerLiteral(self): + return self.getToken(JavaScriptParser.BigDecimalIntegerLiteral, 0) + + def BigHexIntegerLiteral(self): + return self.getToken(JavaScriptParser.BigHexIntegerLiteral, 0) + + def BigOctalIntegerLiteral(self): + return self.getToken(JavaScriptParser.BigOctalIntegerLiteral, 0) + + def BigBinaryIntegerLiteral(self): + return self.getToken(JavaScriptParser.BigBinaryIntegerLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_bigintLiteral + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBigintLiteral" ): + listener.enterBigintLiteral(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBigintLiteral" ): + listener.exitBigintLiteral(self) + + + + + def bigintLiteral(self): + + localctx = JavaScriptParser.BigintLiteralContext(self, self._ctx, self.state) + self.enterRule(localctx, 154, self.RULE_bigintLiteral) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1018 + _la = self._input.LA(1) + if not(((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & 15) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class GetterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def classElementName(self): + return self.getTypedRuleContext(JavaScriptParser.ClassElementNameContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_getter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterGetter" ): + listener.enterGetter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitGetter" ): + listener.exitGetter(self) + + + + + def getter(self): + + localctx = JavaScriptParser.GetterContext(self, self._ctx, self.state) + self.enterRule(localctx, 156, self.RULE_getter) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1020 + if not self.n("get"): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.n(\"get\")") + self.state = 1021 + self.identifier() + self.state = 1022 + self.classElementName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class SetterContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def classElementName(self): + return self.getTypedRuleContext(JavaScriptParser.ClassElementNameContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_setter + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterSetter" ): + listener.enterSetter(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitSetter" ): + listener.exitSetter(self) + + + + + def setter(self): + + localctx = JavaScriptParser.SetterContext(self, self._ctx, self.state) + self.enterRule(localctx, 158, self.RULE_setter) + try: + self.enterOuterAlt(localctx, 1) + self.state = 1024 + if not self.n("set"): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.n(\"set\")") + self.state = 1025 + self.identifier() + self.state = 1026 + self.classElementName() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IdentifierNameContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(JavaScriptParser.IdentifierContext,0) + + + def reservedWord(self): + return self.getTypedRuleContext(JavaScriptParser.ReservedWordContext,0) + + + def getRuleIndex(self): + return JavaScriptParser.RULE_identifierName + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIdentifierName" ): + listener.enterIdentifierName(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIdentifierName" ): + listener.exitIdentifierName(self) + + + + + def identifierName(self): + + localctx = JavaScriptParser.IdentifierNameContext(self, self._ctx, self.state) + self.enterRule(localctx, 160, self.RULE_identifierName) + try: + self.state = 1030 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,115,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1028 + self.identifier() + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1029 + self.reservedWord() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class IdentifierContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Identifier(self): + return self.getToken(JavaScriptParser.Identifier, 0) + + def NonStrictLet(self): + return self.getToken(JavaScriptParser.NonStrictLet, 0) + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def From(self): + return self.getToken(JavaScriptParser.From, 0) + + def Yield(self): + return self.getToken(JavaScriptParser.Yield, 0) + + def Of(self): + return self.getToken(JavaScriptParser.Of, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_identifier + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterIdentifier" ): + listener.enterIdentifier(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitIdentifier" ): + listener.exitIdentifier(self) + + + + + def identifier(self): + + localctx = JavaScriptParser.IdentifierContext(self, self._ctx, self.state) + self.enterRule(localctx, 162, self.RULE_identifier) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1032 + _la = self._input.LA(1) + if not(((((_la - 99)) & ~0x3f) == 0 and ((1 << (_la - 99)) & 8458255) != 0)): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class ReservedWordContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def keyword(self): + return self.getTypedRuleContext(JavaScriptParser.KeywordContext,0) + + + def NullLiteral(self): + return self.getToken(JavaScriptParser.NullLiteral, 0) + + def BooleanLiteral(self): + return self.getToken(JavaScriptParser.BooleanLiteral, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_reservedWord + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterReservedWord" ): + listener.enterReservedWord(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitReservedWord" ): + listener.exitReservedWord(self) + + + + + def reservedWord(self): + + localctx = JavaScriptParser.ReservedWordContext(self, self._ctx, self.state) + self.enterRule(localctx, 164, self.RULE_reservedWord) + try: + self.state = 1037 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121]: + self.enterOuterAlt(localctx, 1) + self.state = 1034 + self.keyword() + pass + elif token in [62]: + self.enterOuterAlt(localctx, 2) + self.state = 1035 + self.match(JavaScriptParser.NullLiteral) + pass + elif token in [63]: + self.enterOuterAlt(localctx, 3) + self.state = 1036 + self.match(JavaScriptParser.BooleanLiteral) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class KeywordContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def Break(self): + return self.getToken(JavaScriptParser.Break, 0) + + def Do(self): + return self.getToken(JavaScriptParser.Do, 0) + + def Instanceof(self): + return self.getToken(JavaScriptParser.Instanceof, 0) + + def Typeof(self): + return self.getToken(JavaScriptParser.Typeof, 0) + + def Case(self): + return self.getToken(JavaScriptParser.Case, 0) + + def Else(self): + return self.getToken(JavaScriptParser.Else, 0) + + def New(self): + return self.getToken(JavaScriptParser.New, 0) + + def Var(self): + return self.getToken(JavaScriptParser.Var, 0) + + def Catch(self): + return self.getToken(JavaScriptParser.Catch, 0) + + def Finally(self): + return self.getToken(JavaScriptParser.Finally, 0) + + def Return(self): + return self.getToken(JavaScriptParser.Return, 0) + + def Void(self): + return self.getToken(JavaScriptParser.Void, 0) + + def Continue(self): + return self.getToken(JavaScriptParser.Continue, 0) + + def For(self): + return self.getToken(JavaScriptParser.For, 0) + + def Switch(self): + return self.getToken(JavaScriptParser.Switch, 0) + + def While(self): + return self.getToken(JavaScriptParser.While, 0) + + def Debugger(self): + return self.getToken(JavaScriptParser.Debugger, 0) + + def Function_(self): + return self.getToken(JavaScriptParser.Function_, 0) + + def This(self): + return self.getToken(JavaScriptParser.This, 0) + + def With(self): + return self.getToken(JavaScriptParser.With, 0) + + def Default(self): + return self.getToken(JavaScriptParser.Default, 0) + + def If(self): + return self.getToken(JavaScriptParser.If, 0) + + def Throw(self): + return self.getToken(JavaScriptParser.Throw, 0) + + def Delete(self): + return self.getToken(JavaScriptParser.Delete, 0) + + def In(self): + return self.getToken(JavaScriptParser.In, 0) + + def Try(self): + return self.getToken(JavaScriptParser.Try, 0) + + def Class(self): + return self.getToken(JavaScriptParser.Class, 0) + + def Enum(self): + return self.getToken(JavaScriptParser.Enum, 0) + + def Extends(self): + return self.getToken(JavaScriptParser.Extends, 0) + + def Super(self): + return self.getToken(JavaScriptParser.Super, 0) + + def Const(self): + return self.getToken(JavaScriptParser.Const, 0) + + def Export(self): + return self.getToken(JavaScriptParser.Export, 0) + + def Import(self): + return self.getToken(JavaScriptParser.Import, 0) + + def Implements(self): + return self.getToken(JavaScriptParser.Implements, 0) + + def let_(self): + return self.getTypedRuleContext(JavaScriptParser.Let_Context,0) + + + def Private(self): + return self.getToken(JavaScriptParser.Private, 0) + + def Public(self): + return self.getToken(JavaScriptParser.Public, 0) + + def Interface(self): + return self.getToken(JavaScriptParser.Interface, 0) + + def Package(self): + return self.getToken(JavaScriptParser.Package, 0) + + def Protected(self): + return self.getToken(JavaScriptParser.Protected, 0) + + def Static(self): + return self.getToken(JavaScriptParser.Static, 0) + + def Yield(self): + return self.getToken(JavaScriptParser.Yield, 0) + + def YieldStar(self): + return self.getToken(JavaScriptParser.YieldStar, 0) + + def Async(self): + return self.getToken(JavaScriptParser.Async, 0) + + def Await(self): + return self.getToken(JavaScriptParser.Await, 0) + + def From(self): + return self.getToken(JavaScriptParser.From, 0) + + def As(self): + return self.getToken(JavaScriptParser.As, 0) + + def Of(self): + return self.getToken(JavaScriptParser.Of, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_keyword + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterKeyword" ): + listener.enterKeyword(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitKeyword" ): + listener.exitKeyword(self) + + + + + def keyword(self): + + localctx = JavaScriptParser.KeywordContext(self, self._ctx, self.state) + self.enterRule(localctx, 166, self.RULE_keyword) + try: + self.state = 1087 + self._errHandler.sync(self) + token = self._input.LA(1) + if token in [73]: + self.enterOuterAlt(localctx, 1) + self.state = 1039 + self.match(JavaScriptParser.Break) + pass + elif token in [74]: + self.enterOuterAlt(localctx, 2) + self.state = 1040 + self.match(JavaScriptParser.Do) + pass + elif token in [75]: + self.enterOuterAlt(localctx, 3) + self.state = 1041 + self.match(JavaScriptParser.Instanceof) + pass + elif token in [76]: + self.enterOuterAlt(localctx, 4) + self.state = 1042 + self.match(JavaScriptParser.Typeof) + pass + elif token in [77]: + self.enterOuterAlt(localctx, 5) + self.state = 1043 + self.match(JavaScriptParser.Case) + pass + elif token in [78]: + self.enterOuterAlt(localctx, 6) + self.state = 1044 + self.match(JavaScriptParser.Else) + pass + elif token in [79]: + self.enterOuterAlt(localctx, 7) + self.state = 1045 + self.match(JavaScriptParser.New) + pass + elif token in [80]: + self.enterOuterAlt(localctx, 8) + self.state = 1046 + self.match(JavaScriptParser.Var) + pass + elif token in [81]: + self.enterOuterAlt(localctx, 9) + self.state = 1047 + self.match(JavaScriptParser.Catch) + pass + elif token in [82]: + self.enterOuterAlt(localctx, 10) + self.state = 1048 + self.match(JavaScriptParser.Finally) + pass + elif token in [83]: + self.enterOuterAlt(localctx, 11) + self.state = 1049 + self.match(JavaScriptParser.Return) + pass + elif token in [84]: + self.enterOuterAlt(localctx, 12) + self.state = 1050 + self.match(JavaScriptParser.Void) + pass + elif token in [85]: + self.enterOuterAlt(localctx, 13) + self.state = 1051 + self.match(JavaScriptParser.Continue) + pass + elif token in [86]: + self.enterOuterAlt(localctx, 14) + self.state = 1052 + self.match(JavaScriptParser.For) + pass + elif token in [87]: + self.enterOuterAlt(localctx, 15) + self.state = 1053 + self.match(JavaScriptParser.Switch) + pass + elif token in [88]: + self.enterOuterAlt(localctx, 16) + self.state = 1054 + self.match(JavaScriptParser.While) + pass + elif token in [89]: + self.enterOuterAlt(localctx, 17) + self.state = 1055 + self.match(JavaScriptParser.Debugger) + pass + elif token in [90]: + self.enterOuterAlt(localctx, 18) + self.state = 1056 + self.match(JavaScriptParser.Function_) + pass + elif token in [91]: + self.enterOuterAlt(localctx, 19) + self.state = 1057 + self.match(JavaScriptParser.This) + pass + elif token in [92]: + self.enterOuterAlt(localctx, 20) + self.state = 1058 + self.match(JavaScriptParser.With) + pass + elif token in [93]: + self.enterOuterAlt(localctx, 21) + self.state = 1059 + self.match(JavaScriptParser.Default) + pass + elif token in [94]: + self.enterOuterAlt(localctx, 22) + self.state = 1060 + self.match(JavaScriptParser.If) + pass + elif token in [95]: + self.enterOuterAlt(localctx, 23) + self.state = 1061 + self.match(JavaScriptParser.Throw) + pass + elif token in [96]: + self.enterOuterAlt(localctx, 24) + self.state = 1062 + self.match(JavaScriptParser.Delete) + pass + elif token in [97]: + self.enterOuterAlt(localctx, 25) + self.state = 1063 + self.match(JavaScriptParser.In) + pass + elif token in [98]: + self.enterOuterAlt(localctx, 26) + self.state = 1064 + self.match(JavaScriptParser.Try) + pass + elif token in [104]: + self.enterOuterAlt(localctx, 27) + self.state = 1065 + self.match(JavaScriptParser.Class) + pass + elif token in [105]: + self.enterOuterAlt(localctx, 28) + self.state = 1066 + self.match(JavaScriptParser.Enum) + pass + elif token in [106]: + self.enterOuterAlt(localctx, 29) + self.state = 1067 + self.match(JavaScriptParser.Extends) + pass + elif token in [107]: + self.enterOuterAlt(localctx, 30) + self.state = 1068 + self.match(JavaScriptParser.Super) + pass + elif token in [108]: + self.enterOuterAlt(localctx, 31) + self.state = 1069 + self.match(JavaScriptParser.Const) + pass + elif token in [109]: + self.enterOuterAlt(localctx, 32) + self.state = 1070 + self.match(JavaScriptParser.Export) + pass + elif token in [110]: + self.enterOuterAlt(localctx, 33) + self.state = 1071 + self.match(JavaScriptParser.Import) + pass + elif token in [113]: + self.enterOuterAlt(localctx, 34) + self.state = 1072 + self.match(JavaScriptParser.Implements) + pass + elif token in [114, 115]: + self.enterOuterAlt(localctx, 35) + self.state = 1073 + self.let_() + pass + elif token in [116]: + self.enterOuterAlt(localctx, 36) + self.state = 1074 + self.match(JavaScriptParser.Private) + pass + elif token in [117]: + self.enterOuterAlt(localctx, 37) + self.state = 1075 + self.match(JavaScriptParser.Public) + pass + elif token in [118]: + self.enterOuterAlt(localctx, 38) + self.state = 1076 + self.match(JavaScriptParser.Interface) + pass + elif token in [119]: + self.enterOuterAlt(localctx, 39) + self.state = 1077 + self.match(JavaScriptParser.Package) + pass + elif token in [120]: + self.enterOuterAlt(localctx, 40) + self.state = 1078 + self.match(JavaScriptParser.Protected) + pass + elif token in [121]: + self.enterOuterAlt(localctx, 41) + self.state = 1079 + self.match(JavaScriptParser.Static) + pass + elif token in [102]: + self.enterOuterAlt(localctx, 42) + self.state = 1080 + self.match(JavaScriptParser.Yield) + pass + elif token in [103]: + self.enterOuterAlt(localctx, 43) + self.state = 1081 + self.match(JavaScriptParser.YieldStar) + pass + elif token in [111]: + self.enterOuterAlt(localctx, 44) + self.state = 1082 + self.match(JavaScriptParser.Async) + pass + elif token in [112]: + self.enterOuterAlt(localctx, 45) + self.state = 1083 + self.match(JavaScriptParser.Await) + pass + elif token in [100]: + self.enterOuterAlt(localctx, 46) + self.state = 1084 + self.match(JavaScriptParser.From) + pass + elif token in [99]: + self.enterOuterAlt(localctx, 47) + self.state = 1085 + self.match(JavaScriptParser.As) + pass + elif token in [101]: + self.enterOuterAlt(localctx, 48) + self.state = 1086 + self.match(JavaScriptParser.Of) + pass + else: + raise NoViableAltException(self) + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class Let_Context(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def NonStrictLet(self): + return self.getToken(JavaScriptParser.NonStrictLet, 0) + + def StrictLet(self): + return self.getToken(JavaScriptParser.StrictLet, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_let_ + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterLet_" ): + listener.enterLet_(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitLet_" ): + listener.exitLet_(self) + + + + + def let_(self): + + localctx = JavaScriptParser.Let_Context(self, self._ctx, self.state) + self.enterRule(localctx, 168, self.RULE_let_) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 1089 + _la = self._input.LA(1) + if not(_la==114 or _la==115): + self._errHandler.recoverInline(self) + else: + self._errHandler.reportMatch(self) + self.consume() + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class EosContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def SemiColon(self): + return self.getToken(JavaScriptParser.SemiColon, 0) + + def EOF(self): + return self.getToken(JavaScriptParser.EOF, 0) + + def getRuleIndex(self): + return JavaScriptParser.RULE_eos + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterEos" ): + listener.enterEos(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitEos" ): + listener.exitEos(self) + + + + + def eos(self): + + localctx = JavaScriptParser.EosContext(self, self._ctx, self.state) + self.enterRule(localctx, 170, self.RULE_eos) + try: + self.state = 1095 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,118,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 1091 + self.match(JavaScriptParser.SemiColon) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 1092 + self.match(JavaScriptParser.EOF) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 1093 + if not self.lineTerminatorAhead(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.lineTerminatorAhead()") + pass + + elif la_ == 4: + self.enterOuterAlt(localctx, 4) + self.state = 1094 + if not self.closeBrace(): + from antlr4.error.Errors import FailedPredicateException + raise FailedPredicateException(self, "self.closeBrace()") + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): + if self._predicates == None: + self._predicates = dict() + self._predicates[24] = self.expressionStatement_sempred + self._predicates[28] = self.continueStatement_sempred + self._predicates[29] = self.breakStatement_sempred + self._predicates[30] = self.returnStatement_sempred + self._predicates[31] = self.yieldStatement_sempred + self._predicates[39] = self.throwStatement_sempred + self._predicates[47] = self.classElement_sempred + self._predicates[48] = self.methodDefinition_sempred + self._predicates[65] = self.singleExpression_sempred + self._predicates[78] = self.getter_sempred + self._predicates[79] = self.setter_sempred + self._predicates[85] = self.eos_sempred + pred = self._predicates.get(ruleIndex, None) + if pred is None: + raise Exception("No predicate with index:" + str(ruleIndex)) + else: + return pred(localctx, predIndex) + + def expressionStatement_sempred(self, localctx:ExpressionStatementContext, predIndex:int): + if predIndex == 0: + return self.notOpenBraceAndNotFunction() + + + def continueStatement_sempred(self, localctx:ContinueStatementContext, predIndex:int): + if predIndex == 1: + return self.notLineTerminator() + + + def breakStatement_sempred(self, localctx:BreakStatementContext, predIndex:int): + if predIndex == 2: + return self.notLineTerminator() + + + def returnStatement_sempred(self, localctx:ReturnStatementContext, predIndex:int): + if predIndex == 3: + return self.notLineTerminator() + + + def yieldStatement_sempred(self, localctx:YieldStatementContext, predIndex:int): + if predIndex == 4: + return self.notLineTerminator() + + + def throwStatement_sempred(self, localctx:ThrowStatementContext, predIndex:int): + if predIndex == 5: + return self.notLineTerminator() + + + def classElement_sempred(self, localctx:ClassElementContext, predIndex:int): + if predIndex == 6: + return self.n("static") + + + if predIndex == 7: + return self.n("static") + + + if predIndex == 8: + return self.n("static") + + + def methodDefinition_sempred(self, localctx:MethodDefinitionContext, predIndex:int): + if predIndex == 9: + return self.notLineTerminator() + + + def singleExpression_sempred(self, localctx:SingleExpressionContext, predIndex:int): + if predIndex == 10: + return self.precpred(self._ctx, 47) + + + if predIndex == 11: + return self.precpred(self._ctx, 27) + + + if predIndex == 12: + return self.precpred(self._ctx, 26) + + + if predIndex == 13: + return self.precpred(self._ctx, 25) + + + if predIndex == 14: + return self.precpred(self._ctx, 24) + + + if predIndex == 15: + return self.precpred(self._ctx, 23) + + + if predIndex == 16: + return self.precpred(self._ctx, 22) + + + if predIndex == 17: + return self.precpred(self._ctx, 21) + + + if predIndex == 18: + return self.precpred(self._ctx, 20) + + + if predIndex == 19: + return self.precpred(self._ctx, 19) + + + if predIndex == 20: + return self.precpred(self._ctx, 18) + + + if predIndex == 21: + return self.precpred(self._ctx, 17) + + + if predIndex == 22: + return self.precpred(self._ctx, 16) + + + if predIndex == 23: + return self.precpred(self._ctx, 15) + + + if predIndex == 24: + return self.precpred(self._ctx, 14) + + + if predIndex == 25: + return self.precpred(self._ctx, 13) + + + if predIndex == 26: + return self.precpred(self._ctx, 12) + + + if predIndex == 27: + return self.precpred(self._ctx, 11) + + + if predIndex == 28: + return self.precpred(self._ctx, 46) + + + if predIndex == 29: + return self.precpred(self._ctx, 45) + + + if predIndex == 30: + return self.precpred(self._ctx, 41) + + + if predIndex == 31: + return self.precpred(self._ctx, 39) + + + if predIndex == 32: + return self.notLineTerminator() + + + if predIndex == 33: + return self.precpred(self._ctx, 38) + + + if predIndex == 34: + return self.notLineTerminator() + + + if predIndex == 35: + return self.precpred(self._ctx, 9) + + + def getter_sempred(self, localctx:GetterContext, predIndex:int): + if predIndex == 36: + return self.n("get") + + + def setter_sempred(self, localctx:SetterContext, predIndex:int): + if predIndex == 37: + return self.n("set") + + + def eos_sempred(self, localctx:EosContext, predIndex:int): + if predIndex == 38: + return self.lineTerminatorAhead() + + + if predIndex == 39: + return self.closeBrace() + + + + + diff --git a/antlr_gen/JavaScriptParser.tokens b/antlr_gen/JavaScriptParser.tokens new file mode 100644 index 0000000..320dde0 --- /dev/null +++ b/antlr_gen/JavaScriptParser.tokens @@ -0,0 +1,235 @@ +HashBangLine=1 +MultiLineComment=2 +SingleLineComment=3 +RegularExpressionLiteral=4 +OpenBracket=5 +CloseBracket=6 +OpenParen=7 +CloseParen=8 +OpenBrace=9 +TemplateCloseBrace=10 +CloseBrace=11 +SemiColon=12 +Comma=13 +Assign=14 +QuestionMark=15 +QuestionMarkDot=16 +Colon=17 +Ellipsis=18 +Dot=19 +PlusPlus=20 +MinusMinus=21 +Plus=22 +Minus=23 +BitNot=24 +Not=25 +Multiply=26 +Divide=27 +Modulus=28 +Power=29 +NullCoalesce=30 +Hashtag=31 +RightShiftArithmetic=32 +LeftShiftArithmetic=33 +RightShiftLogical=34 +LessThan=35 +MoreThan=36 +LessThanEquals=37 +GreaterThanEquals=38 +Equals_=39 +NotEquals=40 +IdentityEquals=41 +IdentityNotEquals=42 +BitAnd=43 +BitXOr=44 +BitOr=45 +And=46 +Or=47 +MultiplyAssign=48 +DivideAssign=49 +ModulusAssign=50 +PlusAssign=51 +MinusAssign=52 +LeftShiftArithmeticAssign=53 +RightShiftArithmeticAssign=54 +RightShiftLogicalAssign=55 +BitAndAssign=56 +BitXorAssign=57 +BitOrAssign=58 +PowerAssign=59 +NullishCoalescingAssign=60 +ARROW=61 +NullLiteral=62 +BooleanLiteral=63 +DecimalLiteral=64 +HexIntegerLiteral=65 +OctalIntegerLiteral=66 +OctalIntegerLiteral2=67 +BinaryIntegerLiteral=68 +BigHexIntegerLiteral=69 +BigOctalIntegerLiteral=70 +BigBinaryIntegerLiteral=71 +BigDecimalIntegerLiteral=72 +Break=73 +Do=74 +Instanceof=75 +Typeof=76 +Case=77 +Else=78 +New=79 +Var=80 +Catch=81 +Finally=82 +Return=83 +Void=84 +Continue=85 +For=86 +Switch=87 +While=88 +Debugger=89 +Function_=90 +This=91 +With=92 +Default=93 +If=94 +Throw=95 +Delete=96 +In=97 +Try=98 +As=99 +From=100 +Of=101 +Yield=102 +YieldStar=103 +Class=104 +Enum=105 +Extends=106 +Super=107 +Const=108 +Export=109 +Import=110 +Async=111 +Await=112 +Implements=113 +StrictLet=114 +NonStrictLet=115 +Private=116 +Public=117 +Interface=118 +Package=119 +Protected=120 +Static=121 +Identifier=122 +StringLiteral=123 +BackTick=124 +WhiteSpaces=125 +LineTerminator=126 +HtmlComment=127 +CDataComment=128 +UnexpectedCharacter=129 +TemplateStringStartExpression=130 +TemplateStringAtom=131 +'['=5 +']'=6 +'('=7 +')'=8 +'{'=9 +'}'=11 +';'=12 +','=13 +'='=14 +'?'=15 +'?.'=16 +':'=17 +'...'=18 +'.'=19 +'++'=20 +'--'=21 +'+'=22 +'-'=23 +'~'=24 +'!'=25 +'*'=26 +'/'=27 +'%'=28 +'**'=29 +'??'=30 +'#'=31 +'>>'=32 +'<<'=33 +'>>>'=34 +'<'=35 +'>'=36 +'<='=37 +'>='=38 +'=='=39 +'!='=40 +'==='=41 +'!=='=42 +'&'=43 +'^'=44 +'|'=45 +'&&'=46 +'||'=47 +'*='=48 +'/='=49 +'%='=50 +'+='=51 +'-='=52 +'<<='=53 +'>>='=54 +'>>>='=55 +'&='=56 +'^='=57 +'|='=58 +'**='=59 +'??='=60 +'=>'=61 +'null'=62 +'break'=73 +'do'=74 +'instanceof'=75 +'typeof'=76 +'case'=77 +'else'=78 +'new'=79 +'var'=80 +'catch'=81 +'finally'=82 +'return'=83 +'void'=84 +'continue'=85 +'for'=86 +'switch'=87 +'while'=88 +'debugger'=89 +'function'=90 +'this'=91 +'with'=92 +'default'=93 +'if'=94 +'throw'=95 +'delete'=96 +'in'=97 +'try'=98 +'as'=99 +'from'=100 +'of'=101 +'yield'=102 +'yield*'=103 +'class'=104 +'enum'=105 +'extends'=106 +'super'=107 +'const'=108 +'export'=109 +'import'=110 +'async'=111 +'await'=112 +'implements'=113 +'private'=116 +'public'=117 +'interface'=118 +'package'=119 +'protected'=120 +'static'=121 diff --git a/antlr_gen/JavaScriptParserBase.py b/antlr_gen/JavaScriptParserBase.py new file mode 100644 index 0000000..67a4620 --- /dev/null +++ b/antlr_gen/JavaScriptParserBase.py @@ -0,0 +1,87 @@ + +from antlr4 import * + +relativeImport = False +if __name__ is not None and "." in __name__: + relativeImport = True + +class JavaScriptParserBase(Parser): + @staticmethod + def parser(): + if relativeImport: + from .JavaScriptParser import JavaScriptParser + else: + from JavaScriptParser import JavaScriptParser + return JavaScriptParser + + def p(self, s : str) -> bool: + return self.prev(s) + + def prev(self, s : str) -> bool: + return self._input.LT(-1).text == s + + def n(self, s : str) -> bool: + return self.next(s) + + def next(self, s: str) -> bool: + return self._input.LT(1).text == s + + def notLineTerminator(self) -> bool: + JavaScriptParser = self.parser() + + return not self.lineTerminatorAhead() + + def notOpenBraceAndNotFunction(self) -> bool: + JavaScriptParser = self.parser() + + nextTokenType = self._input.LT(1).type + return nextTokenType != JavaScriptParser.OpenBrace and nextTokenType != JavaScriptParser.Function_ + + def closeBrace(self) -> bool: + JavaScriptParser = self.parser() + + return self._input.LT(1).type == JavaScriptParser.CloseBrace + + def lineTerminatorAhead(self) -> bool: + """ + Returns {@code true} iff on the current index of the parser's + token stream a token exists on the {@code HIDDEN} channel which + either is a line terminator, or is a multi line comment that + contains a line terminator. + + :return: {@code true} iff on the current index of the parser's + token stream a token exists on the {@code HIDDEN} channel which + either is a line terminator, or is a multi line comment that + contains a line terminator. + """ + JavaScriptParser = self.parser() + + # Get the token ahead of the current index. + possibleIndexEosToken: Token = self.getCurrentToken().tokenIndex - 1 + if (possibleIndexEosToken < 0): + return False + ahead: Token = self._input.get(possibleIndexEosToken) + + if ahead.channel != Lexer.HIDDEN: + # We're only interested in tokens on the HIDDEN channel. + return False + + if ahead.type == JavaScriptParser.LineTerminator: + # There is definitely a line terminator ahead. + return True + + if ahead.type == JavaScriptParser.WhiteSpaces: + # Get the token ahead of the current whitespaces. + possibleIndexEosToken = self.getCurrentToken().tokenIndex - 2 + if (possibleIndexEosToken < 0): + return False + ahead = self._input.get(possibleIndexEosToken) + + # Get the token's text and type. + text = ahead.text + tokenType = ahead.type + + # Check if the token is, or contains a line terminator. + + return (tokenType == JavaScriptParser.MultiLineComment and (("\r" in text) or ("\n" in text))) or \ + (tokenType == JavaScriptParser.LineTerminator) diff --git a/antlr_gen/JavaScriptParserListener.py b/antlr_gen/JavaScriptParserListener.py new file mode 100644 index 0000000..2f199f6 --- /dev/null +++ b/antlr_gen/JavaScriptParserListener.py @@ -0,0 +1,1308 @@ +# Generated from JavaScriptParser.g4 by ANTLR 4.13.2 +from antlr4 import * +if "." in __name__: + from .JavaScriptParser import JavaScriptParser +else: + from JavaScriptParser import JavaScriptParser + +# This class defines a complete listener for a parse tree produced by JavaScriptParser. +class JavaScriptParserListener(ParseTreeListener): + + # Enter a parse tree produced by JavaScriptParser#program. + def enterProgram(self, ctx:JavaScriptParser.ProgramContext): + pass + + # Exit a parse tree produced by JavaScriptParser#program. + def exitProgram(self, ctx:JavaScriptParser.ProgramContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#sourceElement. + def enterSourceElement(self, ctx:JavaScriptParser.SourceElementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#sourceElement. + def exitSourceElement(self, ctx:JavaScriptParser.SourceElementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#statement. + def enterStatement(self, ctx:JavaScriptParser.StatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#statement. + def exitStatement(self, ctx:JavaScriptParser.StatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#block. + def enterBlock(self, ctx:JavaScriptParser.BlockContext): + pass + + # Exit a parse tree produced by JavaScriptParser#block. + def exitBlock(self, ctx:JavaScriptParser.BlockContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#statementList. + def enterStatementList(self, ctx:JavaScriptParser.StatementListContext): + pass + + # Exit a parse tree produced by JavaScriptParser#statementList. + def exitStatementList(self, ctx:JavaScriptParser.StatementListContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importStatement. + def enterImportStatement(self, ctx:JavaScriptParser.ImportStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importStatement. + def exitImportStatement(self, ctx:JavaScriptParser.ImportStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importFromBlock. + def enterImportFromBlock(self, ctx:JavaScriptParser.ImportFromBlockContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importFromBlock. + def exitImportFromBlock(self, ctx:JavaScriptParser.ImportFromBlockContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importModuleItems. + def enterImportModuleItems(self, ctx:JavaScriptParser.ImportModuleItemsContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importModuleItems. + def exitImportModuleItems(self, ctx:JavaScriptParser.ImportModuleItemsContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importAliasName. + def enterImportAliasName(self, ctx:JavaScriptParser.ImportAliasNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importAliasName. + def exitImportAliasName(self, ctx:JavaScriptParser.ImportAliasNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#moduleExportName. + def enterModuleExportName(self, ctx:JavaScriptParser.ModuleExportNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#moduleExportName. + def exitModuleExportName(self, ctx:JavaScriptParser.ModuleExportNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importedBinding. + def enterImportedBinding(self, ctx:JavaScriptParser.ImportedBindingContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importedBinding. + def exitImportedBinding(self, ctx:JavaScriptParser.ImportedBindingContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importDefault. + def enterImportDefault(self, ctx:JavaScriptParser.ImportDefaultContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importDefault. + def exitImportDefault(self, ctx:JavaScriptParser.ImportDefaultContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importNamespace. + def enterImportNamespace(self, ctx:JavaScriptParser.ImportNamespaceContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importNamespace. + def exitImportNamespace(self, ctx:JavaScriptParser.ImportNamespaceContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#importFrom. + def enterImportFrom(self, ctx:JavaScriptParser.ImportFromContext): + pass + + # Exit a parse tree produced by JavaScriptParser#importFrom. + def exitImportFrom(self, ctx:JavaScriptParser.ImportFromContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#aliasName. + def enterAliasName(self, ctx:JavaScriptParser.AliasNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#aliasName. + def exitAliasName(self, ctx:JavaScriptParser.AliasNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ExportDeclaration. + def enterExportDeclaration(self, ctx:JavaScriptParser.ExportDeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ExportDeclaration. + def exitExportDeclaration(self, ctx:JavaScriptParser.ExportDeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ExportDefaultDeclaration. + def enterExportDefaultDeclaration(self, ctx:JavaScriptParser.ExportDefaultDeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ExportDefaultDeclaration. + def exitExportDefaultDeclaration(self, ctx:JavaScriptParser.ExportDefaultDeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#exportFromBlock. + def enterExportFromBlock(self, ctx:JavaScriptParser.ExportFromBlockContext): + pass + + # Exit a parse tree produced by JavaScriptParser#exportFromBlock. + def exitExportFromBlock(self, ctx:JavaScriptParser.ExportFromBlockContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#exportModuleItems. + def enterExportModuleItems(self, ctx:JavaScriptParser.ExportModuleItemsContext): + pass + + # Exit a parse tree produced by JavaScriptParser#exportModuleItems. + def exitExportModuleItems(self, ctx:JavaScriptParser.ExportModuleItemsContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#exportAliasName. + def enterExportAliasName(self, ctx:JavaScriptParser.ExportAliasNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#exportAliasName. + def exitExportAliasName(self, ctx:JavaScriptParser.ExportAliasNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#declaration. + def enterDeclaration(self, ctx:JavaScriptParser.DeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#declaration. + def exitDeclaration(self, ctx:JavaScriptParser.DeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#variableStatement. + def enterVariableStatement(self, ctx:JavaScriptParser.VariableStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#variableStatement. + def exitVariableStatement(self, ctx:JavaScriptParser.VariableStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#variableDeclarationList. + def enterVariableDeclarationList(self, ctx:JavaScriptParser.VariableDeclarationListContext): + pass + + # Exit a parse tree produced by JavaScriptParser#variableDeclarationList. + def exitVariableDeclarationList(self, ctx:JavaScriptParser.VariableDeclarationListContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#variableDeclaration. + def enterVariableDeclaration(self, ctx:JavaScriptParser.VariableDeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#variableDeclaration. + def exitVariableDeclaration(self, ctx:JavaScriptParser.VariableDeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#emptyStatement_. + def enterEmptyStatement_(self, ctx:JavaScriptParser.EmptyStatement_Context): + pass + + # Exit a parse tree produced by JavaScriptParser#emptyStatement_. + def exitEmptyStatement_(self, ctx:JavaScriptParser.EmptyStatement_Context): + pass + + + # Enter a parse tree produced by JavaScriptParser#expressionStatement. + def enterExpressionStatement(self, ctx:JavaScriptParser.ExpressionStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#expressionStatement. + def exitExpressionStatement(self, ctx:JavaScriptParser.ExpressionStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ifStatement. + def enterIfStatement(self, ctx:JavaScriptParser.IfStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ifStatement. + def exitIfStatement(self, ctx:JavaScriptParser.IfStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#DoStatement. + def enterDoStatement(self, ctx:JavaScriptParser.DoStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#DoStatement. + def exitDoStatement(self, ctx:JavaScriptParser.DoStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#WhileStatement. + def enterWhileStatement(self, ctx:JavaScriptParser.WhileStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#WhileStatement. + def exitWhileStatement(self, ctx:JavaScriptParser.WhileStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ForStatement. + def enterForStatement(self, ctx:JavaScriptParser.ForStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ForStatement. + def exitForStatement(self, ctx:JavaScriptParser.ForStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ForInStatement. + def enterForInStatement(self, ctx:JavaScriptParser.ForInStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ForInStatement. + def exitForInStatement(self, ctx:JavaScriptParser.ForInStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ForOfStatement. + def enterForOfStatement(self, ctx:JavaScriptParser.ForOfStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ForOfStatement. + def exitForOfStatement(self, ctx:JavaScriptParser.ForOfStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#varModifier. + def enterVarModifier(self, ctx:JavaScriptParser.VarModifierContext): + pass + + # Exit a parse tree produced by JavaScriptParser#varModifier. + def exitVarModifier(self, ctx:JavaScriptParser.VarModifierContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#continueStatement. + def enterContinueStatement(self, ctx:JavaScriptParser.ContinueStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#continueStatement. + def exitContinueStatement(self, ctx:JavaScriptParser.ContinueStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#breakStatement. + def enterBreakStatement(self, ctx:JavaScriptParser.BreakStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#breakStatement. + def exitBreakStatement(self, ctx:JavaScriptParser.BreakStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#returnStatement. + def enterReturnStatement(self, ctx:JavaScriptParser.ReturnStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#returnStatement. + def exitReturnStatement(self, ctx:JavaScriptParser.ReturnStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#yieldStatement. + def enterYieldStatement(self, ctx:JavaScriptParser.YieldStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#yieldStatement. + def exitYieldStatement(self, ctx:JavaScriptParser.YieldStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#withStatement. + def enterWithStatement(self, ctx:JavaScriptParser.WithStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#withStatement. + def exitWithStatement(self, ctx:JavaScriptParser.WithStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#switchStatement. + def enterSwitchStatement(self, ctx:JavaScriptParser.SwitchStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#switchStatement. + def exitSwitchStatement(self, ctx:JavaScriptParser.SwitchStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#caseBlock. + def enterCaseBlock(self, ctx:JavaScriptParser.CaseBlockContext): + pass + + # Exit a parse tree produced by JavaScriptParser#caseBlock. + def exitCaseBlock(self, ctx:JavaScriptParser.CaseBlockContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#caseClauses. + def enterCaseClauses(self, ctx:JavaScriptParser.CaseClausesContext): + pass + + # Exit a parse tree produced by JavaScriptParser#caseClauses. + def exitCaseClauses(self, ctx:JavaScriptParser.CaseClausesContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#caseClause. + def enterCaseClause(self, ctx:JavaScriptParser.CaseClauseContext): + pass + + # Exit a parse tree produced by JavaScriptParser#caseClause. + def exitCaseClause(self, ctx:JavaScriptParser.CaseClauseContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#defaultClause. + def enterDefaultClause(self, ctx:JavaScriptParser.DefaultClauseContext): + pass + + # Exit a parse tree produced by JavaScriptParser#defaultClause. + def exitDefaultClause(self, ctx:JavaScriptParser.DefaultClauseContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#labelledStatement. + def enterLabelledStatement(self, ctx:JavaScriptParser.LabelledStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#labelledStatement. + def exitLabelledStatement(self, ctx:JavaScriptParser.LabelledStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#throwStatement. + def enterThrowStatement(self, ctx:JavaScriptParser.ThrowStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#throwStatement. + def exitThrowStatement(self, ctx:JavaScriptParser.ThrowStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#tryStatement. + def enterTryStatement(self, ctx:JavaScriptParser.TryStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#tryStatement. + def exitTryStatement(self, ctx:JavaScriptParser.TryStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#catchProduction. + def enterCatchProduction(self, ctx:JavaScriptParser.CatchProductionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#catchProduction. + def exitCatchProduction(self, ctx:JavaScriptParser.CatchProductionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#finallyProduction. + def enterFinallyProduction(self, ctx:JavaScriptParser.FinallyProductionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#finallyProduction. + def exitFinallyProduction(self, ctx:JavaScriptParser.FinallyProductionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#debuggerStatement. + def enterDebuggerStatement(self, ctx:JavaScriptParser.DebuggerStatementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#debuggerStatement. + def exitDebuggerStatement(self, ctx:JavaScriptParser.DebuggerStatementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#functionDeclaration. + def enterFunctionDeclaration(self, ctx:JavaScriptParser.FunctionDeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#functionDeclaration. + def exitFunctionDeclaration(self, ctx:JavaScriptParser.FunctionDeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#classDeclaration. + def enterClassDeclaration(self, ctx:JavaScriptParser.ClassDeclarationContext): + pass + + # Exit a parse tree produced by JavaScriptParser#classDeclaration. + def exitClassDeclaration(self, ctx:JavaScriptParser.ClassDeclarationContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#classTail. + def enterClassTail(self, ctx:JavaScriptParser.ClassTailContext): + pass + + # Exit a parse tree produced by JavaScriptParser#classTail. + def exitClassTail(self, ctx:JavaScriptParser.ClassTailContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#classElement. + def enterClassElement(self, ctx:JavaScriptParser.ClassElementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#classElement. + def exitClassElement(self, ctx:JavaScriptParser.ClassElementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#methodDefinition. + def enterMethodDefinition(self, ctx:JavaScriptParser.MethodDefinitionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#methodDefinition. + def exitMethodDefinition(self, ctx:JavaScriptParser.MethodDefinitionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#fieldDefinition. + def enterFieldDefinition(self, ctx:JavaScriptParser.FieldDefinitionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#fieldDefinition. + def exitFieldDefinition(self, ctx:JavaScriptParser.FieldDefinitionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#classElementName. + def enterClassElementName(self, ctx:JavaScriptParser.ClassElementNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#classElementName. + def exitClassElementName(self, ctx:JavaScriptParser.ClassElementNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#privateIdentifier. + def enterPrivateIdentifier(self, ctx:JavaScriptParser.PrivateIdentifierContext): + pass + + # Exit a parse tree produced by JavaScriptParser#privateIdentifier. + def exitPrivateIdentifier(self, ctx:JavaScriptParser.PrivateIdentifierContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#formalParameterList. + def enterFormalParameterList(self, ctx:JavaScriptParser.FormalParameterListContext): + pass + + # Exit a parse tree produced by JavaScriptParser#formalParameterList. + def exitFormalParameterList(self, ctx:JavaScriptParser.FormalParameterListContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#formalParameterArg. + def enterFormalParameterArg(self, ctx:JavaScriptParser.FormalParameterArgContext): + pass + + # Exit a parse tree produced by JavaScriptParser#formalParameterArg. + def exitFormalParameterArg(self, ctx:JavaScriptParser.FormalParameterArgContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#lastFormalParameterArg. + def enterLastFormalParameterArg(self, ctx:JavaScriptParser.LastFormalParameterArgContext): + pass + + # Exit a parse tree produced by JavaScriptParser#lastFormalParameterArg. + def exitLastFormalParameterArg(self, ctx:JavaScriptParser.LastFormalParameterArgContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#functionBody. + def enterFunctionBody(self, ctx:JavaScriptParser.FunctionBodyContext): + pass + + # Exit a parse tree produced by JavaScriptParser#functionBody. + def exitFunctionBody(self, ctx:JavaScriptParser.FunctionBodyContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#sourceElements. + def enterSourceElements(self, ctx:JavaScriptParser.SourceElementsContext): + pass + + # Exit a parse tree produced by JavaScriptParser#sourceElements. + def exitSourceElements(self, ctx:JavaScriptParser.SourceElementsContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#arrayLiteral. + def enterArrayLiteral(self, ctx:JavaScriptParser.ArrayLiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#arrayLiteral. + def exitArrayLiteral(self, ctx:JavaScriptParser.ArrayLiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#elementList. + def enterElementList(self, ctx:JavaScriptParser.ElementListContext): + pass + + # Exit a parse tree produced by JavaScriptParser#elementList. + def exitElementList(self, ctx:JavaScriptParser.ElementListContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#arrayElement. + def enterArrayElement(self, ctx:JavaScriptParser.ArrayElementContext): + pass + + # Exit a parse tree produced by JavaScriptParser#arrayElement. + def exitArrayElement(self, ctx:JavaScriptParser.ArrayElementContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PropertyExpressionAssignment. + def enterPropertyExpressionAssignment(self, ctx:JavaScriptParser.PropertyExpressionAssignmentContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PropertyExpressionAssignment. + def exitPropertyExpressionAssignment(self, ctx:JavaScriptParser.PropertyExpressionAssignmentContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ComputedPropertyExpressionAssignment. + def enterComputedPropertyExpressionAssignment(self, ctx:JavaScriptParser.ComputedPropertyExpressionAssignmentContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ComputedPropertyExpressionAssignment. + def exitComputedPropertyExpressionAssignment(self, ctx:JavaScriptParser.ComputedPropertyExpressionAssignmentContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#FunctionProperty. + def enterFunctionProperty(self, ctx:JavaScriptParser.FunctionPropertyContext): + pass + + # Exit a parse tree produced by JavaScriptParser#FunctionProperty. + def exitFunctionProperty(self, ctx:JavaScriptParser.FunctionPropertyContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PropertyGetter. + def enterPropertyGetter(self, ctx:JavaScriptParser.PropertyGetterContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PropertyGetter. + def exitPropertyGetter(self, ctx:JavaScriptParser.PropertyGetterContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PropertySetter. + def enterPropertySetter(self, ctx:JavaScriptParser.PropertySetterContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PropertySetter. + def exitPropertySetter(self, ctx:JavaScriptParser.PropertySetterContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PropertyShorthand. + def enterPropertyShorthand(self, ctx:JavaScriptParser.PropertyShorthandContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PropertyShorthand. + def exitPropertyShorthand(self, ctx:JavaScriptParser.PropertyShorthandContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#propertyName. + def enterPropertyName(self, ctx:JavaScriptParser.PropertyNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#propertyName. + def exitPropertyName(self, ctx:JavaScriptParser.PropertyNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#arguments. + def enterArguments(self, ctx:JavaScriptParser.ArgumentsContext): + pass + + # Exit a parse tree produced by JavaScriptParser#arguments. + def exitArguments(self, ctx:JavaScriptParser.ArgumentsContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#argument. + def enterArgument(self, ctx:JavaScriptParser.ArgumentContext): + pass + + # Exit a parse tree produced by JavaScriptParser#argument. + def exitArgument(self, ctx:JavaScriptParser.ArgumentContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#expressionSequence. + def enterExpressionSequence(self, ctx:JavaScriptParser.ExpressionSequenceContext): + pass + + # Exit a parse tree produced by JavaScriptParser#expressionSequence. + def exitExpressionSequence(self, ctx:JavaScriptParser.ExpressionSequenceContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#TemplateStringExpression. + def enterTemplateStringExpression(self, ctx:JavaScriptParser.TemplateStringExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#TemplateStringExpression. + def exitTemplateStringExpression(self, ctx:JavaScriptParser.TemplateStringExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#TernaryExpression. + def enterTernaryExpression(self, ctx:JavaScriptParser.TernaryExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#TernaryExpression. + def exitTernaryExpression(self, ctx:JavaScriptParser.TernaryExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#LogicalAndExpression. + def enterLogicalAndExpression(self, ctx:JavaScriptParser.LogicalAndExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#LogicalAndExpression. + def exitLogicalAndExpression(self, ctx:JavaScriptParser.LogicalAndExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PowerExpression. + def enterPowerExpression(self, ctx:JavaScriptParser.PowerExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PowerExpression. + def exitPowerExpression(self, ctx:JavaScriptParser.PowerExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PreIncrementExpression. + def enterPreIncrementExpression(self, ctx:JavaScriptParser.PreIncrementExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PreIncrementExpression. + def exitPreIncrementExpression(self, ctx:JavaScriptParser.PreIncrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ObjectLiteralExpression. + def enterObjectLiteralExpression(self, ctx:JavaScriptParser.ObjectLiteralExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ObjectLiteralExpression. + def exitObjectLiteralExpression(self, ctx:JavaScriptParser.ObjectLiteralExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#MetaExpression. + def enterMetaExpression(self, ctx:JavaScriptParser.MetaExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#MetaExpression. + def exitMetaExpression(self, ctx:JavaScriptParser.MetaExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#InExpression. + def enterInExpression(self, ctx:JavaScriptParser.InExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#InExpression. + def exitInExpression(self, ctx:JavaScriptParser.InExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#LogicalOrExpression. + def enterLogicalOrExpression(self, ctx:JavaScriptParser.LogicalOrExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#LogicalOrExpression. + def exitLogicalOrExpression(self, ctx:JavaScriptParser.LogicalOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#OptionalChainExpression. + def enterOptionalChainExpression(self, ctx:JavaScriptParser.OptionalChainExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#OptionalChainExpression. + def exitOptionalChainExpression(self, ctx:JavaScriptParser.OptionalChainExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#NotExpression. + def enterNotExpression(self, ctx:JavaScriptParser.NotExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#NotExpression. + def exitNotExpression(self, ctx:JavaScriptParser.NotExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PreDecreaseExpression. + def enterPreDecreaseExpression(self, ctx:JavaScriptParser.PreDecreaseExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PreDecreaseExpression. + def exitPreDecreaseExpression(self, ctx:JavaScriptParser.PreDecreaseExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ArgumentsExpression. + def enterArgumentsExpression(self, ctx:JavaScriptParser.ArgumentsExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ArgumentsExpression. + def exitArgumentsExpression(self, ctx:JavaScriptParser.ArgumentsExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#AwaitExpression. + def enterAwaitExpression(self, ctx:JavaScriptParser.AwaitExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#AwaitExpression. + def exitAwaitExpression(self, ctx:JavaScriptParser.AwaitExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ThisExpression. + def enterThisExpression(self, ctx:JavaScriptParser.ThisExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ThisExpression. + def exitThisExpression(self, ctx:JavaScriptParser.ThisExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#FunctionExpression. + def enterFunctionExpression(self, ctx:JavaScriptParser.FunctionExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#FunctionExpression. + def exitFunctionExpression(self, ctx:JavaScriptParser.FunctionExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#UnaryMinusExpression. + def enterUnaryMinusExpression(self, ctx:JavaScriptParser.UnaryMinusExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#UnaryMinusExpression. + def exitUnaryMinusExpression(self, ctx:JavaScriptParser.UnaryMinusExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#AssignmentExpression. + def enterAssignmentExpression(self, ctx:JavaScriptParser.AssignmentExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#AssignmentExpression. + def exitAssignmentExpression(self, ctx:JavaScriptParser.AssignmentExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PostDecreaseExpression. + def enterPostDecreaseExpression(self, ctx:JavaScriptParser.PostDecreaseExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PostDecreaseExpression. + def exitPostDecreaseExpression(self, ctx:JavaScriptParser.PostDecreaseExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#TypeofExpression. + def enterTypeofExpression(self, ctx:JavaScriptParser.TypeofExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#TypeofExpression. + def exitTypeofExpression(self, ctx:JavaScriptParser.TypeofExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#InstanceofExpression. + def enterInstanceofExpression(self, ctx:JavaScriptParser.InstanceofExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#InstanceofExpression. + def exitInstanceofExpression(self, ctx:JavaScriptParser.InstanceofExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#UnaryPlusExpression. + def enterUnaryPlusExpression(self, ctx:JavaScriptParser.UnaryPlusExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#UnaryPlusExpression. + def exitUnaryPlusExpression(self, ctx:JavaScriptParser.UnaryPlusExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#DeleteExpression. + def enterDeleteExpression(self, ctx:JavaScriptParser.DeleteExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#DeleteExpression. + def exitDeleteExpression(self, ctx:JavaScriptParser.DeleteExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ImportExpression. + def enterImportExpression(self, ctx:JavaScriptParser.ImportExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ImportExpression. + def exitImportExpression(self, ctx:JavaScriptParser.ImportExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#EqualityExpression. + def enterEqualityExpression(self, ctx:JavaScriptParser.EqualityExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#EqualityExpression. + def exitEqualityExpression(self, ctx:JavaScriptParser.EqualityExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#BitXOrExpression. + def enterBitXOrExpression(self, ctx:JavaScriptParser.BitXOrExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#BitXOrExpression. + def exitBitXOrExpression(self, ctx:JavaScriptParser.BitXOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#SuperExpression. + def enterSuperExpression(self, ctx:JavaScriptParser.SuperExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#SuperExpression. + def exitSuperExpression(self, ctx:JavaScriptParser.SuperExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#MultiplicativeExpression. + def enterMultiplicativeExpression(self, ctx:JavaScriptParser.MultiplicativeExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#MultiplicativeExpression. + def exitMultiplicativeExpression(self, ctx:JavaScriptParser.MultiplicativeExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#BitShiftExpression. + def enterBitShiftExpression(self, ctx:JavaScriptParser.BitShiftExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#BitShiftExpression. + def exitBitShiftExpression(self, ctx:JavaScriptParser.BitShiftExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ParenthesizedExpression. + def enterParenthesizedExpression(self, ctx:JavaScriptParser.ParenthesizedExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ParenthesizedExpression. + def exitParenthesizedExpression(self, ctx:JavaScriptParser.ParenthesizedExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#AdditiveExpression. + def enterAdditiveExpression(self, ctx:JavaScriptParser.AdditiveExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#AdditiveExpression. + def exitAdditiveExpression(self, ctx:JavaScriptParser.AdditiveExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#RelationalExpression. + def enterRelationalExpression(self, ctx:JavaScriptParser.RelationalExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#RelationalExpression. + def exitRelationalExpression(self, ctx:JavaScriptParser.RelationalExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#PostIncrementExpression. + def enterPostIncrementExpression(self, ctx:JavaScriptParser.PostIncrementExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#PostIncrementExpression. + def exitPostIncrementExpression(self, ctx:JavaScriptParser.PostIncrementExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#YieldExpression. + def enterYieldExpression(self, ctx:JavaScriptParser.YieldExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#YieldExpression. + def exitYieldExpression(self, ctx:JavaScriptParser.YieldExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#BitNotExpression. + def enterBitNotExpression(self, ctx:JavaScriptParser.BitNotExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#BitNotExpression. + def exitBitNotExpression(self, ctx:JavaScriptParser.BitNotExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#NewExpression. + def enterNewExpression(self, ctx:JavaScriptParser.NewExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#NewExpression. + def exitNewExpression(self, ctx:JavaScriptParser.NewExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#LiteralExpression. + def enterLiteralExpression(self, ctx:JavaScriptParser.LiteralExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#LiteralExpression. + def exitLiteralExpression(self, ctx:JavaScriptParser.LiteralExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ArrayLiteralExpression. + def enterArrayLiteralExpression(self, ctx:JavaScriptParser.ArrayLiteralExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ArrayLiteralExpression. + def exitArrayLiteralExpression(self, ctx:JavaScriptParser.ArrayLiteralExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#MemberDotExpression. + def enterMemberDotExpression(self, ctx:JavaScriptParser.MemberDotExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#MemberDotExpression. + def exitMemberDotExpression(self, ctx:JavaScriptParser.MemberDotExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ClassExpression. + def enterClassExpression(self, ctx:JavaScriptParser.ClassExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ClassExpression. + def exitClassExpression(self, ctx:JavaScriptParser.ClassExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#MemberIndexExpression. + def enterMemberIndexExpression(self, ctx:JavaScriptParser.MemberIndexExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#MemberIndexExpression. + def exitMemberIndexExpression(self, ctx:JavaScriptParser.MemberIndexExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#IdentifierExpression. + def enterIdentifierExpression(self, ctx:JavaScriptParser.IdentifierExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#IdentifierExpression. + def exitIdentifierExpression(self, ctx:JavaScriptParser.IdentifierExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#BitAndExpression. + def enterBitAndExpression(self, ctx:JavaScriptParser.BitAndExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#BitAndExpression. + def exitBitAndExpression(self, ctx:JavaScriptParser.BitAndExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#BitOrExpression. + def enterBitOrExpression(self, ctx:JavaScriptParser.BitOrExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#BitOrExpression. + def exitBitOrExpression(self, ctx:JavaScriptParser.BitOrExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#AssignmentOperatorExpression. + def enterAssignmentOperatorExpression(self, ctx:JavaScriptParser.AssignmentOperatorExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#AssignmentOperatorExpression. + def exitAssignmentOperatorExpression(self, ctx:JavaScriptParser.AssignmentOperatorExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#VoidExpression. + def enterVoidExpression(self, ctx:JavaScriptParser.VoidExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#VoidExpression. + def exitVoidExpression(self, ctx:JavaScriptParser.VoidExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#CoalesceExpression. + def enterCoalesceExpression(self, ctx:JavaScriptParser.CoalesceExpressionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#CoalesceExpression. + def exitCoalesceExpression(self, ctx:JavaScriptParser.CoalesceExpressionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#initializer. + def enterInitializer(self, ctx:JavaScriptParser.InitializerContext): + pass + + # Exit a parse tree produced by JavaScriptParser#initializer. + def exitInitializer(self, ctx:JavaScriptParser.InitializerContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#assignable. + def enterAssignable(self, ctx:JavaScriptParser.AssignableContext): + pass + + # Exit a parse tree produced by JavaScriptParser#assignable. + def exitAssignable(self, ctx:JavaScriptParser.AssignableContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#objectLiteral. + def enterObjectLiteral(self, ctx:JavaScriptParser.ObjectLiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#objectLiteral. + def exitObjectLiteral(self, ctx:JavaScriptParser.ObjectLiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#NamedFunction. + def enterNamedFunction(self, ctx:JavaScriptParser.NamedFunctionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#NamedFunction. + def exitNamedFunction(self, ctx:JavaScriptParser.NamedFunctionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#AnonymousFunctionDecl. + def enterAnonymousFunctionDecl(self, ctx:JavaScriptParser.AnonymousFunctionDeclContext): + pass + + # Exit a parse tree produced by JavaScriptParser#AnonymousFunctionDecl. + def exitAnonymousFunctionDecl(self, ctx:JavaScriptParser.AnonymousFunctionDeclContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#ArrowFunction. + def enterArrowFunction(self, ctx:JavaScriptParser.ArrowFunctionContext): + pass + + # Exit a parse tree produced by JavaScriptParser#ArrowFunction. + def exitArrowFunction(self, ctx:JavaScriptParser.ArrowFunctionContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#arrowFunctionParameters. + def enterArrowFunctionParameters(self, ctx:JavaScriptParser.ArrowFunctionParametersContext): + pass + + # Exit a parse tree produced by JavaScriptParser#arrowFunctionParameters. + def exitArrowFunctionParameters(self, ctx:JavaScriptParser.ArrowFunctionParametersContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#arrowFunctionBody. + def enterArrowFunctionBody(self, ctx:JavaScriptParser.ArrowFunctionBodyContext): + pass + + # Exit a parse tree produced by JavaScriptParser#arrowFunctionBody. + def exitArrowFunctionBody(self, ctx:JavaScriptParser.ArrowFunctionBodyContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#assignmentOperator. + def enterAssignmentOperator(self, ctx:JavaScriptParser.AssignmentOperatorContext): + pass + + # Exit a parse tree produced by JavaScriptParser#assignmentOperator. + def exitAssignmentOperator(self, ctx:JavaScriptParser.AssignmentOperatorContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#literal. + def enterLiteral(self, ctx:JavaScriptParser.LiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#literal. + def exitLiteral(self, ctx:JavaScriptParser.LiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#templateStringLiteral. + def enterTemplateStringLiteral(self, ctx:JavaScriptParser.TemplateStringLiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#templateStringLiteral. + def exitTemplateStringLiteral(self, ctx:JavaScriptParser.TemplateStringLiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#templateStringAtom. + def enterTemplateStringAtom(self, ctx:JavaScriptParser.TemplateStringAtomContext): + pass + + # Exit a parse tree produced by JavaScriptParser#templateStringAtom. + def exitTemplateStringAtom(self, ctx:JavaScriptParser.TemplateStringAtomContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#numericLiteral. + def enterNumericLiteral(self, ctx:JavaScriptParser.NumericLiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#numericLiteral. + def exitNumericLiteral(self, ctx:JavaScriptParser.NumericLiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#bigintLiteral. + def enterBigintLiteral(self, ctx:JavaScriptParser.BigintLiteralContext): + pass + + # Exit a parse tree produced by JavaScriptParser#bigintLiteral. + def exitBigintLiteral(self, ctx:JavaScriptParser.BigintLiteralContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#getter. + def enterGetter(self, ctx:JavaScriptParser.GetterContext): + pass + + # Exit a parse tree produced by JavaScriptParser#getter. + def exitGetter(self, ctx:JavaScriptParser.GetterContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#setter. + def enterSetter(self, ctx:JavaScriptParser.SetterContext): + pass + + # Exit a parse tree produced by JavaScriptParser#setter. + def exitSetter(self, ctx:JavaScriptParser.SetterContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#identifierName. + def enterIdentifierName(self, ctx:JavaScriptParser.IdentifierNameContext): + pass + + # Exit a parse tree produced by JavaScriptParser#identifierName. + def exitIdentifierName(self, ctx:JavaScriptParser.IdentifierNameContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#identifier. + def enterIdentifier(self, ctx:JavaScriptParser.IdentifierContext): + pass + + # Exit a parse tree produced by JavaScriptParser#identifier. + def exitIdentifier(self, ctx:JavaScriptParser.IdentifierContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#reservedWord. + def enterReservedWord(self, ctx:JavaScriptParser.ReservedWordContext): + pass + + # Exit a parse tree produced by JavaScriptParser#reservedWord. + def exitReservedWord(self, ctx:JavaScriptParser.ReservedWordContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#keyword. + def enterKeyword(self, ctx:JavaScriptParser.KeywordContext): + pass + + # Exit a parse tree produced by JavaScriptParser#keyword. + def exitKeyword(self, ctx:JavaScriptParser.KeywordContext): + pass + + + # Enter a parse tree produced by JavaScriptParser#let_. + def enterLet_(self, ctx:JavaScriptParser.Let_Context): + pass + + # Exit a parse tree produced by JavaScriptParser#let_. + def exitLet_(self, ctx:JavaScriptParser.Let_Context): + pass + + + # Enter a parse tree produced by JavaScriptParser#eos. + def enterEos(self, ctx:JavaScriptParser.EosContext): + pass + + # Exit a parse tree produced by JavaScriptParser#eos. + def exitEos(self, ctx:JavaScriptParser.EosContext): + pass + + + +del JavaScriptParser \ No newline at end of file diff --git a/antlr_gen/__init__.py b/antlr_gen/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/graph_creation/cst_processing.py b/graph_creation/cst_processing.py new file mode 100644 index 0000000..2e99434 --- /dev/null +++ b/graph_creation/cst_processing.py @@ -0,0 +1,61 @@ +from antlr4 import ParserRuleContext +from neo4j import Driver + +from neo4j_queries.edge_queries import create_has_child_relationship +from neo4j_queries.node_queries import create_ast_node + +def traverse_and_create(driver: Driver, tree, parent_node_id=None): + # Create a Neo4j node for the current tree node + rule_name = type(tree).__name__ + text = tree.getText() if tree.getText() else None + + current_node_id = create_ast_node(driver, rule_name, text) + + # If there's a parent, create a relationship + if parent_node_id is not None: + create_has_child_relationship(driver, parent_node_id, current_node_id) + + # Recursively process all children + for i in range(tree.getChildCount()): + child = tree.getChild(i) + traverse_and_create(driver, child, current_node_id) + + +def traverse_when_statement_extract_dependencies(tree: ParserRuleContext) -> list[tuple[str,str]]: + """ + This function traverses a ParserRuleContext tree of a JS expression created by ANTLR + to extract dependencies specified in a "when" statement of a CWL workflow step. + Dependencies include references to step input parameter and outputs of other steps, + which are identified and categorized during the traversal. + + Parameters: + tree (ParserRuleContext): the tree obtained by parsing a JS expression statement + + Returns: + list[tuple[str,str]]: a list of references to inputs or outputs. Each reference is a tuple. + The first element of the tuple is either "parameter" or "step_output", the second parameter is the ID of the element. + In the case of the step output, the ID is [workflow-level step ID]/[output ID] + """ + rule_name = type(tree).__name__ + text = tree.getText() if tree.getText() else None + ref_list = [] + + # The "when" field of a step can reference: + # - inputs (parameters) of that step in the form input.[param ID] + # - outputs of different steps in the form steps.[step ID].outputs.[output ID] + if rule_name == "MemberDotExpressionContext": + split_text = text.split(".") + if len(split_text) == 2: + if split_text[0] == "inputs": + ref_list.append(("parameter", split_text[1])) + elif len(split_text) == 4: + if split_text[0] == "steps" and split_text[2] == "outputs": + ref_list.append(("step_output", split_text[1] + "/" + split_text[3])) + + # Recursively process all children + for i in range(tree.getChildCount()): + child = tree.getChild(i) + ref_list_child = traverse_when_statement_extract_dependencies(child) + ref_list.extend(ref_list_child) + + return ref_list diff --git a/graph_creation/cwl_processing.py b/graph_creation/cwl_processing.py index 57ab18f..8fea8e1 100644 --- a/graph_creation/cwl_processing.py +++ b/graph_creation/cwl_processing.py @@ -1,9 +1,12 @@ from neo4j import Driver +from graph_creation.cst_processing import traverse_when_statement_extract_dependencies from graph_creation.utils import create_input_nodes_and_relationships, process_source_relationship, resolve_relative_path -from neo4j_queries.node_queries import ensure_component_node, ensure_data_node, ensure_parameter_node -from neo4j_queries.edge_queries import create_data_relationship, create_out_param_relationship +from neo4j_queries.node_queries import ensure_component_node, ensure_data_node, ensure_parameter_node, get_wf_data_nodes_from_step_in_param +from neo4j_queries.edge_queries import create_control_relationship, create_data_relationship, create_out_param_relationship from pathlib import Path +from parsers.javascript_parsing import parse_javascript_expression_string + # TODO: deal with inputBindings def process_cwl_inputs(driver: Driver, cwl_entity: dict) -> None: """ @@ -68,23 +71,30 @@ def process_cwl_outputs(driver: Driver, cwl_entity: dict) -> None: def process_cwl_steps(driver: Driver, cwl_entity: dict) -> None: """ - Processes the steps of a CWL Workflow component( which we will refer to as outer workflow component). + Processes the steps of a CWL Workflow component (which we will refer to as outer workflow component). A step can be a Workflow, CommandLineTool or ExpressionTool. For each step, a component node is created with component ID equal to the path of the step. Then, the lists of inputs and outputs are processed. - For each input, the following nodes and edges are created: - - in-parameter node with ID as defined in the component and component ID equal to the path of the step - - a data edge from the step component node to the in-parameter node - - potentially a data node corresponding to the source of the input, with ID equal to the source ID defined in the outer workflow + + - For each input, the following nodes and edges are created: + - in-parameter node with ID as defined in the component and component ID equal to the path of the step + - a data edge from the step component node to the in-parameter node + - potentially a data node corresponding to the source of the input, with ID equal to the source ID defined in the outer workflow and component ID equal to the path of the outer workflow - - potentially a data edge from the in-parameter node to the data node of the source + - potentially a data edge from the in-parameter node to the data node of the source - For each output, the following nodes and edges are created: - - out-parameter node with ID as defined in the component and component ID equal to the path of the step - - a data edge from the out-parameter node to the step component node - - a data node representing the outer-workflow-level output, with ID equal to [step id]/[output id as defined in workflow] + - If the step has a "when" field, then the JS expression is parsed and its dependencies are extracted. + - The step is control dependent on data node x with component_id equal to the outer workflow id if: + - the when expression mentions a step parameter which is data dependent on x + - the when expression mentions the data_id of x + - A control edge is created from the step component node to the data node x. + + - For each output, the following nodes and edges are created: + - out-parameter node with ID as defined in the component and component ID equal to the path of the step + - a data edge from the out-parameter node to the step component node + - a data node representing the outer-workflow-level output, with ID equal to [step id]/[output id as defined in workflow] and component ID equal to the path of the outer workflow - - a data edge from the out-parameter node to the data node + - a data edge from the out-parameter node to the data node Parameters: driver (Driver): the driver used to connect to Neo4j @@ -119,6 +129,25 @@ def process_cwl_steps(driver: Driver, cwl_entity: dict) -> None: for source_id in input['source']: process_source_relationship(driver, source_id, cwl_entity['path'], param_node_internal_id) + # Process the "when" field, aka control dependencies + if 'when' in step: + when_expr = step['when'] + expr_tree = parse_javascript_expression_string(when_expr) + when_refs = traverse_when_statement_extract_dependencies(expr_tree) + + data_nodes = [] + for ref in when_refs: + ref_id = ref[1] + if ref[0] == "parameter": + input_data = get_wf_data_nodes_from_step_in_param(driver, ref_id, step_path, cwl_entity['path']) + data_nodes.extend(input_data) + elif ref[0] == "step_output": + step_output = ensure_data_node(driver, ref_id, cwl_entity['path'])[0] + data_nodes.append(step_output) + + for data_node in data_nodes: + create_control_relationship(driver, s_node_internal_id, data_node) + # Process the list of outputs of the step for output in step['out']: # An output can be defined as a dictionary or simply as a string (ID only) diff --git a/graph_creation/repo_processing.py b/graph_creation/repo_processing.py index 34850ab..c69bc75 100644 --- a/graph_creation/repo_processing.py +++ b/graph_creation/repo_processing.py @@ -22,4 +22,4 @@ def process_repos(repo_list: list[str], driver: Driver) -> None: process_cwl_inputs(driver, entity) process_cwl_outputs(driver, entity) if entity['class'] == 'Workflow': - process_cwl_steps(driver, entity, repo) + process_cwl_steps(driver, entity) diff --git a/neo4j_queries/edge_queries.py b/neo4j_queries/edge_queries.py index a8bd1d2..634673b 100644 --- a/neo4j_queries/edge_queries.py +++ b/neo4j_queries/edge_queries.py @@ -84,4 +84,55 @@ def create_data_relationship(driver: Driver, from_internal_node_id: int, to_inte to_internal_node_id=to_internal_node_id) record = result.single() return record["id_1"], record["id_2"] + + +def create_control_relationship(driver: Driver, from_internal_node_id: int, to_internal_node_id: int) -> tuple[int,int]: + """ + Creates a control dependency relationship in Neo4j between the two nodes with Neo4j internal IDs given as parameters. + This relationship is an outgoing control edge from the node with internal ID from_internal_node_id + to the node with internal ID to_internal_node_id. + + Parameters: + driver (Driver): the Neo4j driver + from_internal_node_id (int): the internal Neo4j ID of the first node + to_internal_node_id (int): the internal Neo4j ID of the second node + + Returns: + tuple[int,int]: from_internal_node_id, to_internal_node_id + """ + query = """ + MATCH (a), (b) + WHERE elementId(a) = $from_internal_node_id AND elementId(b) = $to_internal_node_id + MERGE (a)-[:CONTROL]->(b) + RETURN elementId(a) AS id_1, elementId(b) AS id_2 + """ + with driver.session() as session: + result = session.run(query, from_internal_node_id=from_internal_node_id, + to_internal_node_id=to_internal_node_id) + record = result.single() + return record["id_1"], record["id_2"] + +def create_has_child_relationship(driver: Driver, parent_internal_node_id: int, child_internal_node_id: int) -> tuple[int,int]: + """ + Creates a "has child" relationship in Neo4j between the two nodes with Neo4j internal IDs given as parameters. + This relationship is an outgoing "has child" edge from the parent node to the child node. + + Parameters: + driver (Driver): the Neo4j driver + parent_internal_node_id (int): the internal Neo4j ID of the parent node + child_internal_node_id (int): the internal Neo4j ID of the child node + + Returns: + tuple[int,int]: parent_internal_node_id, child_internal_node_id + """ + query = """ + MATCH (parent), (child) + WHERE elementId(parent) = $parent_id AND elementId(child) = $child_id + CREATE (parent)-[:HAS_CHILD]->(child) + RETURN elementId(parent) AS id_1, elementId(child) AS id_2 + """ + with driver.session() as session: + result = session.run(query, parent_id=parent_internal_node_id, + child_id=child_internal_node_id) + record = result.single() return record["id_1"], record["id_2"] \ No newline at end of file diff --git a/neo4j_queries/node_queries.py b/neo4j_queries/node_queries.py index 21d1f76..361ff44 100644 --- a/neo4j_queries/node_queries.py +++ b/neo4j_queries/node_queries.py @@ -66,7 +66,7 @@ def ensure_data_node(driver: Driver, node_id: str, prefixed_component_id: str) - prefixed_component_id (str): the local relative path of the component Returns: - tuple[int,str,str, str]: the Neoj4 internal ID of the data node, the data ID, the component ID + tuple[int,str,str]: the Neoj4 internal ID of the data node, the data ID, the component ID """ component_id = clean_component_id(prefixed_component_id) query = """ @@ -77,3 +77,41 @@ def ensure_data_node(driver: Driver, node_id: str, prefixed_component_id: str) - result = session.run(query, node_id=node_id, component_id=component_id) record = result.single() return record["node_internal_id"], record["id_property"], record["component_id_property"] + + +def create_ast_node(driver, rule, text): + query = """ + CREATE (n:ASTNode {rule: $rule, text: $text}) + RETURN elementId(n) AS node_id + """ + with driver.session() as session: + result = session.run(query, rule=rule, text=text) + record = result.single() + return record["node_id"] + +def get_wf_data_nodes_from_step_in_param(driver: Driver, param_id: str, prefixed_step_id: str, prefixed_workflow_id: str) -> list[int]: + """ + Retrieves the internal IDs of data nodes (in a Neo4j database) belonging to the workflow with ID workflow_id + such that the in parameter with ID param_id of workflow step step_id has a data dependency on these data nodes. + This means that in said workflow these data nodes are injected into the parameter param_id of the step. + The ID of the component can be given based on the local relative path, so it is cleaned + before querying Neo4j. + + Parameters: + param_id: the parameter ID of the step parameter + prefixed_step_id: the unique ID of the step + prefixed_workflow_id: the unique ID of the workflow the step is part of + + Returns: + list[int]: the Neo4j internal IDs of the data nodes connected to the parameter node of the step in the mentioned workflow + """ + step_id = clean_component_id(prefixed_step_id) + workflow_id = clean_component_id(prefixed_workflow_id) + + query = """ + MATCH (n1:Data {component_id: $workflow_id})<-[:DATA]-(n2:Parameter {component_id: $step_id, parameter_type: "in", parameter_id: $param_id}) + RETURN elementId(n1) AS internal_id + """ + with driver.session() as session: + result = session.run(query, workflow_id=workflow_id, step_id=step_id, param_id=param_id) + return [record["internal_id"] for record in result] diff --git a/parsers/__init__.py b/parsers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/parsers/javascript_parsing.py b/parsers/javascript_parsing.py new file mode 100644 index 0000000..a47b089 --- /dev/null +++ b/parsers/javascript_parsing.py @@ -0,0 +1,39 @@ +from antlr4 import FileStream, CommonTokenStream, InputStream +from antlr_gen import JavaScriptLexer +from antlr_gen import JavaScriptParser + +JSL = JavaScriptLexer.JavaScriptLexer +JSP = JavaScriptParser.JavaScriptParser + +def parse_javascript_file(file_path): + input_stream = FileStream(file_path) + + lexer = JSL(input_stream) + token_stream = CommonTokenStream(lexer) + parser = JSP(token_stream) + + tree = parser.program() + + return tree + +def parse_javascript_string(js_code): + input_stream = InputStream(js_code) + + lexer = JSL(input_stream) + token_stream = CommonTokenStream(lexer) + parser = JSP(token_stream) + + tree = parser.program() + + return tree + +def parse_javascript_expression_string(js_code): + input_stream = InputStream(js_code) + + lexer = JSL(input_stream) + token_stream = CommonTokenStream(lexer) + parser = JSP(token_stream) + + tree = parser.expressionStatement() + + return tree diff --git a/requirements.txt b/requirements.txt index 31918a8..f7ebe0c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,5 @@ python-gitlab python-dotenv neo4j ruamel.yaml -cwl-utils \ No newline at end of file +cwl-utils +antlr4-python3-runtime \ No newline at end of file -- GitLab