From 229b38dbb543768e2b087573b1525cfb60396b5d Mon Sep 17 00:00:00 2001 From: rat Date: Mon, 29 Jul 2024 08:00:53 +0200 Subject: [PATCH 01/81] WIP --- kipper/core/KipperLexer.g4 | 1 + kipper/core/KipperLexer.tokens | 218 +- kipper/core/KipperParser.g4 | 5 +- kipper/core/KipperParser.tokens | 218 +- kipper/core/src/compiler/ast/ast-generator.ts | 12 + .../core/src/compiler/ast/common/ast-types.ts | 8 +- .../src/compiler/ast/compilable-ast-node.ts | 6 +- .../compiler/ast/mapping/ast-node-mapper.ts | 5 + .../ast/nodes/declarations/declaration.ts | 2 +- .../function-declaration.ts | 9 +- .../class-declaration/class-declaration.ts | 8 +- .../class-constructor-declaration.ts | 14 +- .../class-member-declaration.ts | 9 + .../class-method-declaration.ts | 14 +- .../class-property-declaration.ts | 13 +- .../variable-declaration.ts | 11 +- .../new-instantiation-expression/index.ts | 3 + .../new-instantiation-expression-semantics.ts | 8 + ...instantiation-expression-type-semantics.ts | 4 + .../new-instantiation-expression.ts | 72 + .../lexer-parser/antlr/KipperLexer.interp | 5 +- .../lexer-parser/antlr/KipperLexer.tokens | 218 +- .../lexer-parser/antlr/KipperLexer.ts | 836 ++++---- .../lexer-parser/antlr/KipperParser.interp | 4 +- .../lexer-parser/antlr/KipperParser.tokens | 218 +- .../lexer-parser/antlr/KipperParser.ts | 1758 +++++++++-------- .../antlr/KipperParserListener.ts | 58 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 33 +- .../lexer-parser/parse-rule-kind-mapping.ts | 1 + .../semantics/symbol-table/class-scope.ts | 78 +- .../entry/scope-function-declaration.ts | 39 +- .../entry/scope-variable-declaration.ts | 27 +- .../semantics/symbol-table/global-scope.ts | 2 +- .../compiler/semantics/symbol-table/index.ts | 1 + .../semantics/symbol-table/local-scope.ts | 6 +- .../target-presets/semantic-analyser.ts | 6 + .../translation/code-generator.ts | 10 +- kipper/target-js/src/code-generator.ts | 13 + kipper/target-js/src/semantic-analyser.ts | 5 + test/module/core/core-functionality.test.ts | 23 + 40 files changed, 2225 insertions(+), 1756 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts diff --git a/kipper/core/KipperLexer.g4 b/kipper/core/KipperLexer.g4 index 512ba06a8..c939cf9de 100644 --- a/kipper/core/KipperLexer.g4 +++ b/kipper/core/KipperLexer.g4 @@ -81,6 +81,7 @@ RetIndicator : '->'; Class : 'class'; Interface : 'interface'; Constructor : 'constructor'; +New : 'new'; // boolean constants True : 'true'; diff --git a/kipper/core/KipperLexer.tokens b/kipper/core/KipperLexer.tokens index 730d75c01..dfd693766 100644 --- a/kipper/core/KipperLexer.tokens +++ b/kipper/core/KipperLexer.tokens @@ -24,67 +24,68 @@ RetIndicator=23 Class=24 Interface=25 Constructor=26 -True=27 -False=28 -Typeof=29 -Void=30 -Null=31 -Undefined=32 -Comma=33 -SemiColon=34 -QuestionMark=35 -Colon=36 -LeftParen=37 -RightParen=38 -LeftBracket=39 -RightBracket=40 -FStringExpEnd=41 -LeftBrace=42 -RightBrace=43 -Plus=44 -PlusPlus=45 -Minus=46 -MinusMinus=47 -Star=48 -Div=49 -Mod=50 -PowerTo=51 -AndAnd=52 -OrOr=53 -Not=54 -Assign=55 -PlusAssign=56 -MinusAssign=57 -StarAssign=58 -DivAssign=59 -ModAssign=60 -Equal=61 -NotEqual=62 -Less=63 -LessEqual=64 -Greater=65 -GreaterEqual=66 -BitwiseAnd=67 -BitwiseOr=68 -BitwiseXor=69 -BitwiseNot=70 -BitwiseZeroFillLeftShift=71 -BitwiseSignedRightShift=72 -BitwiseZeroFillRightShift=73 -Dot=74 -Identifier=75 -IntegerConstant=76 -SingleQuoteStringLiteral=77 -DoubleQuoteStringLiteral=78 -FloatingConstant=79 -Whitespace=80 -Newline=81 -FStringSingleQuoteStart=82 -FStringDoubleQuoteStart=83 -FStringSingleQuoteEnd=84 -FStringSingleQuoteAtom=85 -FStringDoubleQuoteEnd=86 -FStringDoubleQuoteAtom=87 +New=27 +True=28 +False=29 +Typeof=30 +Void=31 +Null=32 +Undefined=33 +Comma=34 +SemiColon=35 +QuestionMark=36 +Colon=37 +LeftParen=38 +RightParen=39 +LeftBracket=40 +RightBracket=41 +FStringExpEnd=42 +LeftBrace=43 +RightBrace=44 +Plus=45 +PlusPlus=46 +Minus=47 +MinusMinus=48 +Star=49 +Div=50 +Mod=51 +PowerTo=52 +AndAnd=53 +OrOr=54 +Not=55 +Assign=56 +PlusAssign=57 +MinusAssign=58 +StarAssign=59 +DivAssign=60 +ModAssign=61 +Equal=62 +NotEqual=63 +Less=64 +LessEqual=65 +Greater=66 +GreaterEqual=67 +BitwiseAnd=68 +BitwiseOr=69 +BitwiseXor=70 +BitwiseNot=71 +BitwiseZeroFillLeftShift=72 +BitwiseSignedRightShift=73 +BitwiseZeroFillRightShift=74 +Dot=75 +Identifier=76 +IntegerConstant=77 +SingleQuoteStringLiteral=78 +DoubleQuoteStringLiteral=79 +FloatingConstant=80 +Whitespace=81 +Newline=82 +FStringSingleQuoteStart=83 +FStringDoubleQuoteStart=84 +FStringSingleQuoteEnd=85 +FStringSingleQuoteAtom=86 +FStringDoubleQuoteEnd=87 +FStringDoubleQuoteAtom=88 'const'=5 'var'=6 'as'=7 @@ -107,50 +108,51 @@ FStringDoubleQuoteAtom=87 'class'=24 'interface'=25 'constructor'=26 -'true'=27 -'false'=28 -'typeof'=29 -'void'=30 -'null'=31 -'undefined'=32 -','=33 -';'=34 -'?'=35 -':'=36 -'('=37 -')'=38 -'['=39 -']'=40 -'{'=42 -'}'=43 -'+'=44 -'++'=45 -'-'=46 -'--'=47 -'*'=48 -'/'=49 -'%'=50 -'**'=51 -'&&'=52 -'||'=53 -'!'=54 -'='=55 -'+='=56 -'-='=57 -'*='=58 -'/='=59 -'%='=60 -'=='=61 -'!='=62 -'<'=63 -'<='=64 -'>'=65 -'>='=66 -'&'=67 -'|'=68 -'^'=69 -'~'=70 -'<<'=71 -'>>'=72 -'>>>'=73 -'.'=74 +'new'=27 +'true'=28 +'false'=29 +'typeof'=30 +'void'=31 +'null'=32 +'undefined'=33 +','=34 +';'=35 +'?'=36 +':'=37 +'('=38 +')'=39 +'['=40 +']'=41 +'{'=43 +'}'=44 +'+'=45 +'++'=46 +'-'=47 +'--'=48 +'*'=49 +'/'=50 +'%'=51 +'**'=52 +'&&'=53 +'||'=54 +'!'=55 +'='=56 +'+='=57 +'-='=58 +'*='=59 +'/='=60 +'%='=61 +'=='=62 +'!='=63 +'<'=64 +'<='=65 +'>'=66 +'>='=67 +'&'=68 +'|'=69 +'^'=70 +'~'=71 +'<<'=72 +'>>'=73 +'>>>'=74 +'.'=75 diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 93528cbd8..ad5c79c7a 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -283,11 +283,12 @@ voidOrNullOrUndefinedPrimaryExpression computedPrimaryExpression locals[_labelASTKind: ASTKind | undefined] : primaryExpression # passOncomputedPrimaryExpression - | computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # functionCallExpression - | 'call' computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # explicitCallFunctionCallExpression | computedPrimaryExpression dotNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # dotNotationMemberAccessExpression | computedPrimaryExpression bracketNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # bracketNotationMemberAccessExpression | computedPrimaryExpression sliceNotation { _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } # sliceNotationMemberAccessExpression + | computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # functionCallExpression + | 'call' computedPrimaryExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } # explicitCallFunctionCallExpression + | 'new' typeSpecifierExpression '(' argumentExpressionList? ')' { _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression } # newInstantiationExpression ; argumentExpressionList diff --git a/kipper/core/KipperParser.tokens b/kipper/core/KipperParser.tokens index 730d75c01..dfd693766 100644 --- a/kipper/core/KipperParser.tokens +++ b/kipper/core/KipperParser.tokens @@ -24,67 +24,68 @@ RetIndicator=23 Class=24 Interface=25 Constructor=26 -True=27 -False=28 -Typeof=29 -Void=30 -Null=31 -Undefined=32 -Comma=33 -SemiColon=34 -QuestionMark=35 -Colon=36 -LeftParen=37 -RightParen=38 -LeftBracket=39 -RightBracket=40 -FStringExpEnd=41 -LeftBrace=42 -RightBrace=43 -Plus=44 -PlusPlus=45 -Minus=46 -MinusMinus=47 -Star=48 -Div=49 -Mod=50 -PowerTo=51 -AndAnd=52 -OrOr=53 -Not=54 -Assign=55 -PlusAssign=56 -MinusAssign=57 -StarAssign=58 -DivAssign=59 -ModAssign=60 -Equal=61 -NotEqual=62 -Less=63 -LessEqual=64 -Greater=65 -GreaterEqual=66 -BitwiseAnd=67 -BitwiseOr=68 -BitwiseXor=69 -BitwiseNot=70 -BitwiseZeroFillLeftShift=71 -BitwiseSignedRightShift=72 -BitwiseZeroFillRightShift=73 -Dot=74 -Identifier=75 -IntegerConstant=76 -SingleQuoteStringLiteral=77 -DoubleQuoteStringLiteral=78 -FloatingConstant=79 -Whitespace=80 -Newline=81 -FStringSingleQuoteStart=82 -FStringDoubleQuoteStart=83 -FStringSingleQuoteEnd=84 -FStringSingleQuoteAtom=85 -FStringDoubleQuoteEnd=86 -FStringDoubleQuoteAtom=87 +New=27 +True=28 +False=29 +Typeof=30 +Void=31 +Null=32 +Undefined=33 +Comma=34 +SemiColon=35 +QuestionMark=36 +Colon=37 +LeftParen=38 +RightParen=39 +LeftBracket=40 +RightBracket=41 +FStringExpEnd=42 +LeftBrace=43 +RightBrace=44 +Plus=45 +PlusPlus=46 +Minus=47 +MinusMinus=48 +Star=49 +Div=50 +Mod=51 +PowerTo=52 +AndAnd=53 +OrOr=54 +Not=55 +Assign=56 +PlusAssign=57 +MinusAssign=58 +StarAssign=59 +DivAssign=60 +ModAssign=61 +Equal=62 +NotEqual=63 +Less=64 +LessEqual=65 +Greater=66 +GreaterEqual=67 +BitwiseAnd=68 +BitwiseOr=69 +BitwiseXor=70 +BitwiseNot=71 +BitwiseZeroFillLeftShift=72 +BitwiseSignedRightShift=73 +BitwiseZeroFillRightShift=74 +Dot=75 +Identifier=76 +IntegerConstant=77 +SingleQuoteStringLiteral=78 +DoubleQuoteStringLiteral=79 +FloatingConstant=80 +Whitespace=81 +Newline=82 +FStringSingleQuoteStart=83 +FStringDoubleQuoteStart=84 +FStringSingleQuoteEnd=85 +FStringSingleQuoteAtom=86 +FStringDoubleQuoteEnd=87 +FStringDoubleQuoteAtom=88 'const'=5 'var'=6 'as'=7 @@ -107,50 +108,51 @@ FStringDoubleQuoteAtom=87 'class'=24 'interface'=25 'constructor'=26 -'true'=27 -'false'=28 -'typeof'=29 -'void'=30 -'null'=31 -'undefined'=32 -','=33 -';'=34 -'?'=35 -':'=36 -'('=37 -')'=38 -'['=39 -']'=40 -'{'=42 -'}'=43 -'+'=44 -'++'=45 -'-'=46 -'--'=47 -'*'=48 -'/'=49 -'%'=50 -'**'=51 -'&&'=52 -'||'=53 -'!'=54 -'='=55 -'+='=56 -'-='=57 -'*='=58 -'/='=59 -'%='=60 -'=='=61 -'!='=62 -'<'=63 -'<='=64 -'>'=65 -'>='=66 -'&'=67 -'|'=68 -'^'=69 -'~'=70 -'<<'=71 -'>>'=72 -'>>>'=73 -'.'=74 +'new'=27 +'true'=28 +'false'=29 +'typeof'=30 +'void'=31 +'null'=32 +'undefined'=33 +','=34 +';'=35 +'?'=36 +':'=37 +'('=38 +')'=39 +'['=40 +']'=41 +'{'=43 +'}'=44 +'+'=45 +'++'=46 +'-'=47 +'--'=48 +'*'=49 +'/'=50 +'%'=51 +'**'=52 +'&&'=53 +'||'=54 +'!'=55 +'='=56 +'+='=57 +'-='=58 +'*='=59 +'/='=60 +'%='=61 +'=='=62 +'!='=63 +'<'=64 +'<='=65 +'>'=66 +'>='=67 +'&'=68 +'|'=69 +'^'=70 +'~'=71 +'<<'=72 +'>>'=73 +'>>>'=74 +'.'=75 diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index a6b252aea..fd84ac135 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -83,6 +83,7 @@ import type { ClassPropertyDeclarationContext, ClassMethodDeclarationContext, ClassConstructorDeclarationContext, + NewInstantiationExpressionContext, } from "../lexer-parser"; import { InterfaceMemberDeclarationContext } from "../lexer-parser"; import type { KipperProgramContext } from "../program-ctx"; @@ -1094,6 +1095,17 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitClassDeclaration: (ctx: ClassDeclarationContext) => void = this.handleExitingTreeNode; + /** + * Enter a parse tree produced by `KipperParser.newInstantiationExpression`. + */ + public enterNewInstantiationExpression: (ctx: NewInstantiationExpressionContext) => void = + this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by `KipperParser.newInstantiationExpression`. + */ + public exitNewInstantiationExpression: (ctx: NewInstantiationExpressionContext) => void = this.handleExitingTreeNode; + /** * Enter a parse tree produced by `KipperParser.classProperty`. */ diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index e3faf7f6d..5d74bf090 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -41,6 +41,7 @@ import type { LogicalAndExpressionContext, LogicalOrExpressionContext, MultiplicativeExpressionContext, + NewInstantiationExpressionContext, NumberPrimaryExpressionContext, OperatorModifiedUnaryExpressionContext, ParameterDeclarationContext, @@ -90,6 +91,7 @@ export type ParserExpressionContext = | BitwiseOrExpressionContext | BitwiseAndExpressionContext | BitwiseXorExpressionContext + | NewInstantiationExpressionContext | BitwiseShiftExpressionContext; /** @@ -204,7 +206,8 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_bitwiseXorExpression | typeof ParseRuleKindMapping.RULE_bitwiseShiftExpression | typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression - | typeof ParseRuleKindMapping.RULE_memberAccessExpression; + | typeof ParseRuleKindMapping.RULE_memberAccessExpression + | typeof ParseRuleKindMapping.RULE_newInstantiationExpression; /** * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link CompilableASTNode}. @@ -285,7 +288,8 @@ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseXorExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_bitwiseShiftExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression] - | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_newInstantiationExpression]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link CompilableASTNode}. diff --git a/kipper/core/src/compiler/ast/compilable-ast-node.ts b/kipper/core/src/compiler/ast/compilable-ast-node.ts index 3a73de8e6..6703ed614 100644 --- a/kipper/core/src/compiler/ast/compilable-ast-node.ts +++ b/kipper/core/src/compiler/ast/compilable-ast-node.ts @@ -13,7 +13,7 @@ import type { KipperParser, KipperParserRuleContext } from "../lexer-parser"; import type { TypeData } from "./ast-node"; import type { TokenStream } from "antlr4ts/TokenStream"; import type { RootASTNode, SemanticData } from "./index"; -import type { GlobalScope, LocalScope } from "../semantics"; +import type { GlobalScope, LocalScope, ClassScope } from "../semantics"; import type { ScopeNode } from "./scope-node"; import type { TargetCompilableNode } from "./target-node"; import { AnalysableASTNode } from "./analysable-ast-node"; @@ -109,7 +109,7 @@ export abstract class CompilableASTNode< * The {@link scope} of this AST node. * @since 0.8.0 */ - public get scope(): LocalScope | GlobalScope { + public get scope(): LocalScope | ClassScope | GlobalScope { return this.scopeCtx.innerScope; } @@ -117,7 +117,7 @@ export abstract class CompilableASTNode< * The context / AST node of the {@link scope}. * @since 0.8.0 */ - public get scopeCtx(): ScopeNode { + public get scopeCtx(): ScopeNode { let parent: CompilableNodeParent = this.parent; while (parent.parent !== undefined && !("innerScope" in parent)) { parent = parent.parent; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 688c23d73..0ab7d42f0 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -43,6 +43,7 @@ import { LogicalAndExpressionContext, LogicalOrExpressionContext, MultiplicativeExpressionContext, + NewInstantiationExpressionContext, NumberPrimaryExpressionContext, ObjectPrimaryExpressionContext, ObjectPropertyContext, @@ -122,6 +123,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; +import { NewInstantiationExpression } from "../nodes/expressions/new-instantiation-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -181,6 +183,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_genericTypeSpecifierExpression]: GenericTypeSpecifierExpression, [ParseRuleKindMapping.RULE_typeofTypeSpecifierExpression]: TypeofTypeSpecifierExpression, [ParseRuleKindMapping.RULE_memberAccessExpression]: MemberAccessExpression, + [ParseRuleKindMapping.RULE_newInstantiationExpression]: NewInstantiationExpression, [ParseRuleKindMapping.RULE_bitwiseOrExpression]: BitwiseOrExpression, [ParseRuleKindMapping.RULE_bitwiseAndExpression]: BitwiseAndExpression, [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpression, @@ -260,6 +263,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseXorExpression]: BitwiseXorExpressionContext, [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpressionContext, [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpressionContext, + [ParseRuleKindMapping.RULE_newInstantiationExpression]: NewInstantiationExpressionContext, [ParseRuleKindMapping.RULE_memberAccessExpression]: [ // Due to the nature of the parser not handling the notations as one rule, it's an array DotNotationMemberAccessExpressionContext, @@ -341,6 +345,7 @@ export class ASTNodeMapper { RULE_bitwiseXorExpression: BitwiseXorExpression, RULE_bitwiseShiftExpression: BitwiseShiftExpression, RULE_lambdaPrimaryExpression: LambdaPrimaryExpression, + RULE_newInstantiationExpression: NewInstantiationExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index fe1dff331..788b48478 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -14,7 +14,7 @@ import type { DeclarationTypeSemantics } from "./declaration-type-semantics"; import type { TranslatedCodeLine } from "../../../const"; import type { ASTDeclarationKind, ASTDeclarationRuleName, ParserDeclarationContext } from "../../common"; import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; -import type { ScopeDeclaration } from "../../../semantics"; +import type { ClassScope, ScopeDeclaration } from "../../../semantics"; import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; import { MissingRequiredSemanticDataError, UndefinedDeclarationCtxError } from "../../../../errors"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index 1e8aa46c4..2fbf96f13 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -9,7 +9,7 @@ import type { FunctionDeclarationTypeSemantics } from "./function-declaration-ty import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { CompoundStatement, Statement } from "../../statements"; import type { IdentifierTypeSpecifierExpression } from "../../expressions"; -import type { RawType, ScopeFunctionDeclaration } from "../../../../semantics"; +import { ClassScope, GlobalScope, RawType, ScopeFunctionDeclaration } from "../../../../semantics"; import { FunctionScope } from "../../../../semantics"; import type { FunctionDeclarationContext } from "../../../../lexer-parser"; import { @@ -123,6 +123,13 @@ export class FunctionDeclaration return this._innerScope; } + /** + * The {@link scope} of this AST node. + */ + public get scope(): GlobalScope { + return this.scopeCtx.innerScope; + } + public getScopeDeclaration(): ScopeFunctionDeclaration { /* istanbul ignore next: super function already being run/tested */ return super.getScopeDeclaration(); diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts index 1bdc3cf21..0e2150c09 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts @@ -7,15 +7,13 @@ import type { ClassDeclarationSemantics } from "./class-declaration-semantics"; import type { ClassDeclarationTypeSemantics } from "./class-declaration-type-semantics"; import type { CompilableNodeParent } from "../../../../compilable-ast-node"; import type { ScopeTypeDeclaration } from "../../../../../semantics"; -import { CustomType, ProcessedType } from "../../../../../semantics"; -import { GlobalScope } from "../../../../../semantics"; +import { CustomType } from "../../../../../semantics"; import type { ClassDeclarationContext } from "../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer-parser"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { ClassScope } from "../../../../../semantics/symbol-table/class-scope"; import { TypeDeclaration } from "../type-declaration"; -import type { ClassMemberDeclaration } from "./class-member-declaration"; -import type { ClassConstructorDeclaration } from "./class-member-declaration/class-constructor-declaration/class-constructor-declaration"; +import type { ClassMemberDeclaration, ClassConstructorDeclaration } from "./class-member-declaration"; /** * Represents a class declaration in the Kipper language, which may contain methods and fields. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts index 26bce3653..25b980268 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts @@ -2,7 +2,8 @@ * Represents a class declaration in the Kipper language, which may contain methods and fields. * @since 0.12.0 */ -import type { ScopeTypeDeclaration } from "../../../../../../../semantics"; +import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; +import { ScopeTypeDeclaration, ScopeVariableDeclaration } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassConstructorDeclarationContext } from "../../../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -36,7 +37,7 @@ export class ClassConstructorDeclaration * which is returned inside the {@link this.scopeDeclaration}. * @private */ - protected override _scopeDeclaration: ScopeTypeDeclaration | undefined; + protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; /** /** @@ -99,17 +100,17 @@ export class ClassConstructorDeclaration * in the {@link scope parent scope}. * @since 0.12.0 */ - public get scopeDeclaration(): ScopeTypeDeclaration | undefined { + public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { return this._scopeDeclaration; } - protected set scopeDeclaration(declaration: ScopeTypeDeclaration | undefined) { + protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { this._scopeDeclaration = declaration; } - public getScopeDeclaration(): ScopeTypeDeclaration { + public getScopeDeclaration(): ScopeFunctionDeclaration { /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); + return super.getScopeDeclaration(); } /** @@ -150,6 +151,7 @@ export class ClassConstructorDeclaration parameters: params, functionBody: functionBody, }; + this.scopeDeclaration = this.scope.addConstructor(this); } /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts index bcda7fafa..54e53d09b 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts @@ -5,6 +5,8 @@ import type { InterfaceMemberDeclarationTypeSemantics } from "../../interface-de import { TypeDeclaration } from "../../type-declaration"; import type { ClassMemberDeclarationSemantics } from "./class-member-declaration-semantics"; import type { ClassMemberDeclarationTypeSemantics } from "./class-member-declaration-type-semantics"; +import type { GlobalScope, LocalScope } from "../../../../../../semantics"; +import type { ClassScope } from "../../../../../../semantics/symbol-table/class-scope"; export type ASTClassMemberDeclarationKind = | typeof ParseRuleKindMapping.RULE_classPropertyDeclaration @@ -39,4 +41,11 @@ export abstract class ClassMemberDeclaration< protected abstract readonly _antlrRuleCtx: ParserClassMemberDeclarationContext; public abstract get kind(): ASTClassMemberDeclarationKind; public abstract get ruleName(): ParserClassMemberDeclarationRuleName; + + /** + * The {@link scope} of this AST node. + */ + public get scope(): ClassScope { + return this.scopeCtx.innerScope; + } } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts index 70a32ac05..08a2788a3 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts @@ -2,7 +2,8 @@ * Represents a class declaration in the Kipper language, which may contain methods and fields. * @since 0.12.0 */ -import type { ScopeTypeDeclaration } from "../../../../../../../semantics"; +import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; +import { ScopeTypeDeclaration } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassMethodDeclarationContext } from "../../../../../../../lexer-parser"; import { DeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -36,7 +37,7 @@ export class ClassMethodDeclaration * which is returned inside the {@link this.scopeDeclaration}. * @private */ - protected override _scopeDeclaration: ScopeTypeDeclaration | undefined; + protected override _scopeDeclaration: ScopeFunctionDeclaration | undefined; /** /** @@ -99,17 +100,17 @@ export class ClassMethodDeclaration * in the {@link scope parent scope}. * @since 0.12.0 */ - public get scopeDeclaration(): ScopeTypeDeclaration | undefined { + public get scopeDeclaration(): ScopeFunctionDeclaration | undefined { return this._scopeDeclaration; } - protected set scopeDeclaration(declaration: ScopeTypeDeclaration | undefined) { + protected set scopeDeclaration(declaration: ScopeFunctionDeclaration | undefined) { this._scopeDeclaration = declaration; } - public getScopeDeclaration(): ScopeTypeDeclaration { + public getScopeDeclaration(): ScopeFunctionDeclaration { /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); + return super.getScopeDeclaration(); } /** @@ -167,6 +168,7 @@ export class ClassMethodDeclaration parameters: params, functionBody: functionBody, }; + this.scopeDeclaration = this.scope.addFunction(this); } /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts index f3452d242..9bd25e857 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts @@ -2,7 +2,7 @@ * Represents a class declaration in the Kipper language, which may contain methods and fields. * @since 0.12.0 */ -import type { ScopeTypeDeclaration } from "../../../../../../../semantics"; +import type { ScopeVariableDeclaration } from "../../../../../../../semantics"; import type { ClassPropertyDeclarationContext, InterfacePropertyDeclarationContext, @@ -35,7 +35,7 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< * which is returned inside the {@link this.scopeDeclaration}. * @private */ - protected override _scopeDeclaration: ScopeTypeDeclaration | undefined; + protected override _scopeDeclaration: ScopeVariableDeclaration | undefined; /** /** @@ -90,17 +90,17 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< * in the {@link scope parent scope}. * @since 0.12.0 */ - public get scopeDeclaration(): ScopeTypeDeclaration | undefined { + public get scopeDeclaration(): ScopeVariableDeclaration | undefined { return this._scopeDeclaration; } - protected set scopeDeclaration(declaration: ScopeTypeDeclaration | undefined) { + protected set scopeDeclaration(declaration: ScopeVariableDeclaration | undefined) { this._scopeDeclaration = declaration; } - public getScopeDeclaration(): ScopeTypeDeclaration { + public getScopeDeclaration(): ScopeVariableDeclaration { /* istanbul ignore next: super function already being run/tested */ - return super.getScopeDeclaration(); + return super.getScopeDeclaration(); } /** @@ -124,6 +124,7 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< typeSpecifier: typeSpecifier, type: typeSpecifier.getSemanticData().rawType, }; + this.scopeDeclaration = this.scope.addVariable(this); } /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index c5731051e..78dad1048 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -8,7 +8,7 @@ import type { VariableDeclarationSemantics } from "./variable-declaration-semantics"; import type { VariableDeclarationTypeSemantics } from "./variable-declaration-type-semantics"; import type { CompilableNodeParent } from "../../../compilable-ast-node"; -import type { RawType, ScopeVariableDeclaration } from "../../../../semantics"; +import { GlobalScope, LocalScope, RawType, ScopeVariableDeclaration } from "../../../../semantics"; import type { Expression, IdentifierTypeSpecifierExpression } from "../../expressions"; import type { ParseTree } from "antlr4ts/tree"; import type { KipperStorageType } from "../../../../const"; @@ -122,6 +122,13 @@ export class VariableDeclaration extends Declarationsuper.getScopeDeclaration(); } + /** + * The {@link scope} of this AST node. + */ + public get scope(): GlobalScope | LocalScope { + return this.scopeCtx.innerScope; + } + /** * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} * and throw errors if encountered. @@ -171,8 +178,6 @@ export class VariableDeclaration extends Declaration; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts new file mode 100644 index 000000000..d5e7bdaa3 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts @@ -0,0 +1,4 @@ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; +import type { ProcessedType } from "../../../../semantics"; + +export interface NewInstantiationExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts new file mode 100644 index 000000000..86d9ee243 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts @@ -0,0 +1,72 @@ +import type { ASTExpressionKind, ASTExpressionRuleName } from "../../../common"; +import { Expression } from "../expression"; +import type { NewInstantiationExpressionSemantics } from "./new-instantiation-expression-semantics"; +import type { NewInstantiationExpressionTypeSemantics } from "./new-instantiation-expression-type-semantics"; +import type { NewInstantiationExpressionContext } from "../../../../lexer-parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; + +export class NewInstantiationExpression extends Expression< + NewInstantiationExpressionSemantics, + NewInstantiationExpressionTypeSemantics +> { + /** + * The static kind for this AST Node. + * @since 0.11.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_newInstantiationExpression; + + /** + * The static rule name for this AST Node. + * @since 0.11.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: NewInstantiationExpressionContext; + + public get kind(): ASTExpressionKind { + return NewInstantiationExpression.kind; + } + public get ruleName(): ASTExpressionRuleName { + return NewInstantiationExpression.ruleName; + } + public async primarySemanticAnalysis?(): Promise { + const children = this.children; + + const classIdentifier = children[0]; + const args = >children.slice(1); + + if (!classIdentifier || !args) { + throw new UnableToDetermineSemanticDataError(); + } + + this.semanticData = { + class: classIdentifier, + args: args, + }; + } + + public async primarySemanticTypeChecking?(): Promise { + const typeSepcifier = this.semanticData!.class.getTypeSemanticData().storedType; + + this.typeSemantics = { + evaluatedType: typeSepcifier, + }; + } + + constructor(antlrRuleCtx: NewInstantiationExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + public checkForWarnings = undefined; + public targetCodeGenerator = this.codeGenerator.newInstantiationExpression; + targetSemanticAnalysis = this.semanticAnalyser.newInstantiationExpression; +} diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp index 5905b7800..e91f2b974 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp @@ -26,6 +26,7 @@ null 'class' 'interface' 'constructor' +'new' 'true' 'false' 'typeof' @@ -116,6 +117,7 @@ RetIndicator Class Interface Constructor +New True False Typeof @@ -204,6 +206,7 @@ RetIndicator Class Interface Constructor +New True False Typeof @@ -313,4 +316,4 @@ SINGLE_QUOTE_FSTRING DOUBLE_QUOTE_FSTRING atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 89, 770, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 248, 10, 2, 12, 2, 14, 2, 251, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 7, 75, 548, 10, 75, 12, 75, 14, 75, 551, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 557, 10, 76, 3, 77, 3, 77, 5, 77, 561, 10, 77, 3, 77, 3, 77, 3, 78, 3, 78, 5, 78, 567, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 80, 6, 80, 574, 10, 80, 13, 80, 14, 80, 575, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 6, 93, 631, 10, 93, 13, 93, 14, 93, 632, 3, 94, 3, 94, 3, 94, 6, 94, 638, 10, 94, 13, 94, 14, 94, 639, 3, 95, 3, 95, 3, 95, 6, 95, 645, 10, 95, 13, 95, 14, 95, 646, 3, 96, 3, 96, 3, 96, 6, 96, 652, 10, 96, 13, 96, 14, 96, 653, 3, 97, 3, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 5, 101, 666, 10, 101, 3, 101, 3, 101, 3, 101, 5, 101, 671, 10, 101, 3, 102, 5, 102, 674, 10, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 5, 102, 681, 10, 102, 3, 103, 3, 103, 5, 103, 685, 10, 103, 3, 103, 3, 103, 3, 104, 6, 104, 690, 10, 104, 13, 104, 14, 104, 691, 3, 105, 3, 105, 3, 106, 6, 106, 697, 10, 106, 13, 106, 14, 106, 698, 3, 107, 3, 107, 5, 107, 703, 10, 107, 3, 108, 3, 108, 3, 108, 5, 108, 708, 10, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 5, 110, 716, 10, 110, 3, 110, 5, 110, 719, 10, 110, 3, 111, 3, 111, 3, 111, 3, 111, 6, 111, 725, 10, 111, 13, 111, 14, 111, 726, 3, 112, 6, 112, 730, 10, 112, 13, 112, 14, 112, 731, 3, 113, 3, 113, 5, 113, 736, 10, 113, 3, 114, 6, 114, 739, 10, 114, 13, 114, 14, 114, 740, 3, 115, 3, 115, 5, 115, 745, 10, 115, 3, 116, 6, 116, 748, 10, 116, 13, 116, 14, 116, 749, 3, 117, 3, 117, 5, 117, 754, 10, 117, 3, 118, 6, 118, 757, 10, 118, 13, 118, 14, 118, 758, 3, 119, 3, 119, 5, 119, 763, 10, 119, 3, 120, 7, 120, 766, 10, 120, 12, 120, 14, 120, 769, 11, 120, 3, 249, 2, 2, 121, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 2, 171, 2, 86, 173, 2, 87, 175, 2, 2, 177, 2, 88, 179, 2, 89, 181, 2, 2, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 771, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 3, 169, 3, 2, 2, 2, 3, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 4, 175, 3, 2, 2, 2, 4, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 5, 243, 3, 2, 2, 2, 7, 257, 3, 2, 2, 2, 9, 264, 3, 2, 2, 2, 11, 276, 3, 2, 2, 2, 13, 282, 3, 2, 2, 2, 15, 286, 3, 2, 2, 2, 17, 289, 3, 2, 2, 2, 19, 293, 3, 2, 2, 2, 21, 300, 3, 2, 2, 2, 23, 305, 3, 2, 2, 2, 25, 313, 3, 2, 2, 2, 27, 319, 3, 2, 2, 2, 29, 328, 3, 2, 2, 2, 31, 331, 3, 2, 2, 2, 33, 337, 3, 2, 2, 2, 35, 340, 3, 2, 2, 2, 37, 345, 3, 2, 2, 2, 39, 349, 3, 2, 2, 2, 41, 354, 3, 2, 2, 2, 43, 358, 3, 2, 2, 2, 45, 365, 3, 2, 2, 2, 47, 370, 3, 2, 2, 2, 49, 373, 3, 2, 2, 2, 51, 379, 3, 2, 2, 2, 53, 389, 3, 2, 2, 2, 55, 401, 3, 2, 2, 2, 57, 406, 3, 2, 2, 2, 59, 412, 3, 2, 2, 2, 61, 419, 3, 2, 2, 2, 63, 424, 3, 2, 2, 2, 65, 429, 3, 2, 2, 2, 67, 439, 3, 2, 2, 2, 69, 441, 3, 2, 2, 2, 71, 443, 3, 2, 2, 2, 73, 445, 3, 2, 2, 2, 75, 447, 3, 2, 2, 2, 77, 449, 3, 2, 2, 2, 79, 451, 3, 2, 2, 2, 81, 453, 3, 2, 2, 2, 83, 455, 3, 2, 2, 2, 85, 460, 3, 2, 2, 2, 87, 462, 3, 2, 2, 2, 89, 464, 3, 2, 2, 2, 91, 466, 3, 2, 2, 2, 93, 469, 3, 2, 2, 2, 95, 471, 3, 2, 2, 2, 97, 474, 3, 2, 2, 2, 99, 476, 3, 2, 2, 2, 101, 478, 3, 2, 2, 2, 103, 480, 3, 2, 2, 2, 105, 483, 3, 2, 2, 2, 107, 486, 3, 2, 2, 2, 109, 489, 3, 2, 2, 2, 111, 491, 3, 2, 2, 2, 113, 493, 3, 2, 2, 2, 115, 496, 3, 2, 2, 2, 117, 499, 3, 2, 2, 2, 119, 502, 3, 2, 2, 2, 121, 505, 3, 2, 2, 2, 123, 508, 3, 2, 2, 2, 125, 511, 3, 2, 2, 2, 127, 514, 3, 2, 2, 2, 129, 516, 3, 2, 2, 2, 131, 519, 3, 2, 2, 2, 133, 521, 3, 2, 2, 2, 135, 524, 3, 2, 2, 2, 137, 526, 3, 2, 2, 2, 139, 528, 3, 2, 2, 2, 141, 530, 3, 2, 2, 2, 143, 532, 3, 2, 2, 2, 145, 535, 3, 2, 2, 2, 147, 538, 3, 2, 2, 2, 149, 542, 3, 2, 2, 2, 151, 544, 3, 2, 2, 2, 153, 556, 3, 2, 2, 2, 155, 558, 3, 2, 2, 2, 157, 564, 3, 2, 2, 2, 159, 570, 3, 2, 2, 2, 161, 573, 3, 2, 2, 2, 163, 579, 3, 2, 2, 2, 165, 583, 3, 2, 2, 2, 167, 590, 3, 2, 2, 2, 169, 597, 3, 2, 2, 2, 171, 603, 3, 2, 2, 2, 173, 608, 3, 2, 2, 2, 175, 610, 3, 2, 2, 2, 177, 616, 3, 2, 2, 2, 179, 621, 3, 2, 2, 2, 181, 623, 3, 2, 2, 2, 183, 625, 3, 2, 2, 2, 185, 627, 3, 2, 2, 2, 187, 630, 3, 2, 2, 2, 189, 634, 3, 2, 2, 2, 191, 641, 3, 2, 2, 2, 193, 648, 3, 2, 2, 2, 195, 655, 3, 2, 2, 2, 197, 657, 3, 2, 2, 2, 199, 659, 3, 2, 2, 2, 201, 661, 3, 2, 2, 2, 203, 670, 3, 2, 2, 2, 205, 680, 3, 2, 2, 2, 207, 682, 3, 2, 2, 2, 209, 689, 3, 2, 2, 2, 211, 693, 3, 2, 2, 2, 213, 696, 3, 2, 2, 2, 215, 702, 3, 2, 2, 2, 217, 707, 3, 2, 2, 2, 219, 709, 3, 2, 2, 2, 221, 712, 3, 2, 2, 2, 223, 720, 3, 2, 2, 2, 225, 729, 3, 2, 2, 2, 227, 735, 3, 2, 2, 2, 229, 738, 3, 2, 2, 2, 231, 744, 3, 2, 2, 2, 233, 747, 3, 2, 2, 2, 235, 753, 3, 2, 2, 2, 237, 756, 3, 2, 2, 2, 239, 762, 3, 2, 2, 2, 241, 767, 3, 2, 2, 2, 243, 244, 7, 49, 2, 2, 244, 245, 7, 44, 2, 2, 245, 249, 3, 2, 2, 2, 246, 248, 11, 2, 2, 2, 247, 246, 3, 2, 2, 2, 248, 251, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 249, 247, 3, 2, 2, 2, 250, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 253, 7, 44, 2, 2, 253, 254, 7, 49, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 8, 2, 2, 2, 256, 6, 3, 2, 2, 2, 257, 258, 7, 49, 2, 2, 258, 259, 7, 49, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 5, 241, 120, 2, 261, 262, 3, 2, 2, 2, 262, 263, 8, 3, 2, 2, 263, 8, 3, 2, 2, 2, 264, 265, 7, 37, 2, 2, 265, 266, 7, 114, 2, 2, 266, 267, 7, 116, 2, 2, 267, 268, 7, 99, 2, 2, 268, 269, 7, 105, 2, 2, 269, 270, 7, 111, 2, 2, 270, 271, 7, 99, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 5, 241, 120, 2, 273, 274, 3, 2, 2, 2, 274, 275, 8, 4, 3, 2, 275, 10, 3, 2, 2, 2, 276, 277, 7, 101, 2, 2, 277, 278, 7, 113, 2, 2, 278, 279, 7, 112, 2, 2, 279, 280, 7, 117, 2, 2, 280, 281, 7, 118, 2, 2, 281, 12, 3, 2, 2, 2, 282, 283, 7, 120, 2, 2, 283, 284, 7, 99, 2, 2, 284, 285, 7, 116, 2, 2, 285, 14, 3, 2, 2, 2, 286, 287, 7, 99, 2, 2, 287, 288, 7, 117, 2, 2, 288, 16, 3, 2, 2, 2, 289, 290, 7, 48, 2, 2, 290, 291, 7, 48, 2, 2, 291, 292, 7, 48, 2, 2, 292, 18, 3, 2, 2, 2, 293, 294, 7, 117, 2, 2, 294, 295, 7, 121, 2, 2, 295, 296, 7, 107, 2, 2, 296, 297, 7, 118, 2, 2, 297, 298, 7, 101, 2, 2, 298, 299, 7, 106, 2, 2, 299, 20, 3, 2, 2, 2, 300, 301, 7, 101, 2, 2, 301, 302, 7, 99, 2, 2, 302, 303, 7, 117, 2, 2, 303, 304, 7, 103, 2, 2, 304, 22, 3, 2, 2, 2, 305, 306, 7, 102, 2, 2, 306, 307, 7, 103, 2, 2, 307, 308, 7, 104, 2, 2, 308, 309, 7, 99, 2, 2, 309, 310, 7, 119, 2, 2, 310, 311, 7, 110, 2, 2, 311, 312, 7, 118, 2, 2, 312, 24, 3, 2, 2, 2, 313, 314, 7, 100, 2, 2, 314, 315, 7, 116, 2, 2, 315, 316, 7, 103, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 109, 2, 2, 318, 26, 3, 2, 2, 2, 319, 320, 7, 101, 2, 2, 320, 321, 7, 113, 2, 2, 321, 322, 7, 112, 2, 2, 322, 323, 7, 118, 2, 2, 323, 324, 7, 107, 2, 2, 324, 325, 7, 112, 2, 2, 325, 326, 7, 119, 2, 2, 326, 327, 7, 103, 2, 2, 327, 28, 3, 2, 2, 2, 328, 329, 7, 102, 2, 2, 329, 330, 7, 113, 2, 2, 330, 30, 3, 2, 2, 2, 331, 332, 7, 121, 2, 2, 332, 333, 7, 106, 2, 2, 333, 334, 7, 107, 2, 2, 334, 335, 7, 110, 2, 2, 335, 336, 7, 103, 2, 2, 336, 32, 3, 2, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 104, 2, 2, 339, 34, 3, 2, 2, 2, 340, 341, 7, 103, 2, 2, 341, 342, 7, 110, 2, 2, 342, 343, 7, 117, 2, 2, 343, 344, 7, 103, 2, 2, 344, 36, 3, 2, 2, 2, 345, 346, 7, 104, 2, 2, 346, 347, 7, 113, 2, 2, 347, 348, 7, 116, 2, 2, 348, 38, 3, 2, 2, 2, 349, 350, 7, 103, 2, 2, 350, 351, 7, 112, 2, 2, 351, 352, 7, 119, 2, 2, 352, 353, 7, 111, 2, 2, 353, 40, 3, 2, 2, 2, 354, 355, 7, 102, 2, 2, 355, 356, 7, 103, 2, 2, 356, 357, 7, 104, 2, 2, 357, 42, 3, 2, 2, 2, 358, 359, 7, 116, 2, 2, 359, 360, 7, 103, 2, 2, 360, 361, 7, 118, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 116, 2, 2, 363, 364, 7, 112, 2, 2, 364, 44, 3, 2, 2, 2, 365, 366, 7, 101, 2, 2, 366, 367, 7, 99, 2, 2, 367, 368, 7, 110, 2, 2, 368, 369, 7, 110, 2, 2, 369, 46, 3, 2, 2, 2, 370, 371, 7, 47, 2, 2, 371, 372, 7, 64, 2, 2, 372, 48, 3, 2, 2, 2, 373, 374, 7, 101, 2, 2, 374, 375, 7, 110, 2, 2, 375, 376, 7, 99, 2, 2, 376, 377, 7, 117, 2, 2, 377, 378, 7, 117, 2, 2, 378, 50, 3, 2, 2, 2, 379, 380, 7, 107, 2, 2, 380, 381, 7, 112, 2, 2, 381, 382, 7, 118, 2, 2, 382, 383, 7, 103, 2, 2, 383, 384, 7, 116, 2, 2, 384, 385, 7, 104, 2, 2, 385, 386, 7, 99, 2, 2, 386, 387, 7, 101, 2, 2, 387, 388, 7, 103, 2, 2, 388, 52, 3, 2, 2, 2, 389, 390, 7, 101, 2, 2, 390, 391, 7, 113, 2, 2, 391, 392, 7, 112, 2, 2, 392, 393, 7, 117, 2, 2, 393, 394, 7, 118, 2, 2, 394, 395, 7, 116, 2, 2, 395, 396, 7, 119, 2, 2, 396, 397, 7, 101, 2, 2, 397, 398, 7, 118, 2, 2, 398, 399, 7, 113, 2, 2, 399, 400, 7, 116, 2, 2, 400, 54, 3, 2, 2, 2, 401, 402, 7, 118, 2, 2, 402, 403, 7, 116, 2, 2, 403, 404, 7, 119, 2, 2, 404, 405, 7, 103, 2, 2, 405, 56, 3, 2, 2, 2, 406, 407, 7, 104, 2, 2, 407, 408, 7, 99, 2, 2, 408, 409, 7, 110, 2, 2, 409, 410, 7, 117, 2, 2, 410, 411, 7, 103, 2, 2, 411, 58, 3, 2, 2, 2, 412, 413, 7, 118, 2, 2, 413, 414, 7, 123, 2, 2, 414, 415, 7, 114, 2, 2, 415, 416, 7, 103, 2, 2, 416, 417, 7, 113, 2, 2, 417, 418, 7, 104, 2, 2, 418, 60, 3, 2, 2, 2, 419, 420, 7, 120, 2, 2, 420, 421, 7, 113, 2, 2, 421, 422, 7, 107, 2, 2, 422, 423, 7, 102, 2, 2, 423, 62, 3, 2, 2, 2, 424, 425, 7, 112, 2, 2, 425, 426, 7, 119, 2, 2, 426, 427, 7, 110, 2, 2, 427, 428, 7, 110, 2, 2, 428, 64, 3, 2, 2, 2, 429, 430, 7, 119, 2, 2, 430, 431, 7, 112, 2, 2, 431, 432, 7, 102, 2, 2, 432, 433, 7, 103, 2, 2, 433, 434, 7, 104, 2, 2, 434, 435, 7, 107, 2, 2, 435, 436, 7, 112, 2, 2, 436, 437, 7, 103, 2, 2, 437, 438, 7, 102, 2, 2, 438, 66, 3, 2, 2, 2, 439, 440, 7, 46, 2, 2, 440, 68, 3, 2, 2, 2, 441, 442, 7, 61, 2, 2, 442, 70, 3, 2, 2, 2, 443, 444, 7, 65, 2, 2, 444, 72, 3, 2, 2, 2, 445, 446, 7, 60, 2, 2, 446, 74, 3, 2, 2, 2, 447, 448, 7, 42, 2, 2, 448, 76, 3, 2, 2, 2, 449, 450, 7, 43, 2, 2, 450, 78, 3, 2, 2, 2, 451, 452, 7, 93, 2, 2, 452, 80, 3, 2, 2, 2, 453, 454, 7, 95, 2, 2, 454, 82, 3, 2, 2, 2, 455, 456, 6, 41, 2, 2, 456, 457, 7, 127, 2, 2, 457, 458, 3, 2, 2, 2, 458, 459, 8, 41, 4, 2, 459, 84, 3, 2, 2, 2, 460, 461, 7, 125, 2, 2, 461, 86, 3, 2, 2, 2, 462, 463, 7, 127, 2, 2, 463, 88, 3, 2, 2, 2, 464, 465, 7, 45, 2, 2, 465, 90, 3, 2, 2, 2, 466, 467, 7, 45, 2, 2, 467, 468, 7, 45, 2, 2, 468, 92, 3, 2, 2, 2, 469, 470, 7, 47, 2, 2, 470, 94, 3, 2, 2, 2, 471, 472, 7, 47, 2, 2, 472, 473, 7, 47, 2, 2, 473, 96, 3, 2, 2, 2, 474, 475, 7, 44, 2, 2, 475, 98, 3, 2, 2, 2, 476, 477, 7, 49, 2, 2, 477, 100, 3, 2, 2, 2, 478, 479, 7, 39, 2, 2, 479, 102, 3, 2, 2, 2, 480, 481, 7, 44, 2, 2, 481, 482, 7, 44, 2, 2, 482, 104, 3, 2, 2, 2, 483, 484, 7, 40, 2, 2, 484, 485, 7, 40, 2, 2, 485, 106, 3, 2, 2, 2, 486, 487, 7, 126, 2, 2, 487, 488, 7, 126, 2, 2, 488, 108, 3, 2, 2, 2, 489, 490, 7, 35, 2, 2, 490, 110, 3, 2, 2, 2, 491, 492, 7, 63, 2, 2, 492, 112, 3, 2, 2, 2, 493, 494, 7, 45, 2, 2, 494, 495, 7, 63, 2, 2, 495, 114, 3, 2, 2, 2, 496, 497, 7, 47, 2, 2, 497, 498, 7, 63, 2, 2, 498, 116, 3, 2, 2, 2, 499, 500, 7, 44, 2, 2, 500, 501, 7, 63, 2, 2, 501, 118, 3, 2, 2, 2, 502, 503, 7, 49, 2, 2, 503, 504, 7, 63, 2, 2, 504, 120, 3, 2, 2, 2, 505, 506, 7, 39, 2, 2, 506, 507, 7, 63, 2, 2, 507, 122, 3, 2, 2, 2, 508, 509, 7, 63, 2, 2, 509, 510, 7, 63, 2, 2, 510, 124, 3, 2, 2, 2, 511, 512, 7, 35, 2, 2, 512, 513, 7, 63, 2, 2, 513, 126, 3, 2, 2, 2, 514, 515, 7, 62, 2, 2, 515, 128, 3, 2, 2, 2, 516, 517, 7, 62, 2, 2, 517, 518, 7, 63, 2, 2, 518, 130, 3, 2, 2, 2, 519, 520, 7, 64, 2, 2, 520, 132, 3, 2, 2, 2, 521, 522, 7, 64, 2, 2, 522, 523, 7, 63, 2, 2, 523, 134, 3, 2, 2, 2, 524, 525, 7, 40, 2, 2, 525, 136, 3, 2, 2, 2, 526, 527, 7, 126, 2, 2, 527, 138, 3, 2, 2, 2, 528, 529, 7, 96, 2, 2, 529, 140, 3, 2, 2, 2, 530, 531, 7, 128, 2, 2, 531, 142, 3, 2, 2, 2, 532, 533, 7, 62, 2, 2, 533, 534, 7, 62, 2, 2, 534, 144, 3, 2, 2, 2, 535, 536, 7, 64, 2, 2, 536, 537, 7, 64, 2, 2, 537, 146, 3, 2, 2, 2, 538, 539, 7, 64, 2, 2, 539, 540, 7, 64, 2, 2, 540, 541, 7, 64, 2, 2, 541, 148, 3, 2, 2, 2, 542, 543, 7, 48, 2, 2, 543, 150, 3, 2, 2, 2, 544, 549, 5, 181, 90, 2, 545, 548, 5, 181, 90, 2, 546, 548, 5, 185, 92, 2, 547, 545, 3, 2, 2, 2, 547, 546, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 152, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 557, 5, 187, 93, 2, 553, 557, 5, 191, 95, 2, 554, 557, 5, 193, 96, 2, 555, 557, 5, 189, 94, 2, 556, 552, 3, 2, 2, 2, 556, 553, 3, 2, 2, 2, 556, 554, 3, 2, 2, 2, 556, 555, 3, 2, 2, 2, 557, 154, 3, 2, 2, 2, 558, 560, 7, 41, 2, 2, 559, 561, 5, 233, 116, 2, 560, 559, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 7, 41, 2, 2, 563, 156, 3, 2, 2, 2, 564, 566, 7, 36, 2, 2, 565, 567, 5, 237, 118, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 7, 36, 2, 2, 569, 158, 3, 2, 2, 2, 570, 571, 5, 203, 101, 2, 571, 160, 3, 2, 2, 2, 572, 574, 9, 2, 2, 2, 573, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 578, 8, 80, 5, 2, 578, 162, 3, 2, 2, 2, 579, 580, 9, 3, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 8, 81, 5, 2, 582, 164, 3, 2, 2, 2, 583, 584, 7, 104, 2, 2, 584, 585, 7, 41, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 8, 82, 6, 2, 587, 588, 3, 2, 2, 2, 588, 589, 8, 82, 7, 2, 589, 166, 3, 2, 2, 2, 590, 591, 7, 104, 2, 2, 591, 592, 7, 36, 2, 2, 592, 593, 3, 2, 2, 2, 593, 594, 8, 83, 8, 2, 594, 595, 3, 2, 2, 2, 595, 596, 8, 83, 9, 2, 596, 168, 3, 2, 2, 2, 597, 598, 6, 84, 3, 2, 598, 599, 7, 125, 2, 2, 599, 600, 3, 2, 2, 2, 600, 601, 8, 84, 10, 2, 601, 602, 8, 84, 11, 2, 602, 170, 3, 2, 2, 2, 603, 604, 7, 41, 2, 2, 604, 605, 8, 85, 12, 2, 605, 606, 3, 2, 2, 2, 606, 607, 8, 85, 4, 2, 607, 172, 3, 2, 2, 2, 608, 609, 5, 225, 112, 2, 609, 174, 3, 2, 2, 2, 610, 611, 6, 87, 4, 2, 611, 612, 7, 125, 2, 2, 612, 613, 3, 2, 2, 2, 613, 614, 8, 87, 10, 2, 614, 615, 8, 87, 11, 2, 615, 176, 3, 2, 2, 2, 616, 617, 7, 36, 2, 2, 617, 618, 8, 88, 13, 2, 618, 619, 3, 2, 2, 2, 619, 620, 8, 88, 4, 2, 620, 178, 3, 2, 2, 2, 621, 622, 5, 229, 114, 2, 622, 180, 3, 2, 2, 2, 623, 624, 5, 183, 91, 2, 624, 182, 3, 2, 2, 2, 625, 626, 9, 4, 2, 2, 626, 184, 3, 2, 2, 2, 627, 628, 9, 5, 2, 2, 628, 186, 3, 2, 2, 2, 629, 631, 5, 185, 92, 2, 630, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 633, 3, 2, 2, 2, 633, 188, 3, 2, 2, 2, 634, 635, 7, 50, 2, 2, 635, 637, 9, 6, 2, 2, 636, 638, 5, 197, 98, 2, 637, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 637, 3, 2, 2, 2, 639, 640, 3, 2, 2, 2, 640, 190, 3, 2, 2, 2, 641, 642, 7, 50, 2, 2, 642, 644, 9, 7, 2, 2, 643, 645, 5, 199, 99, 2, 644, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 192, 3, 2, 2, 2, 648, 649, 7, 50, 2, 2, 649, 651, 9, 8, 2, 2, 650, 652, 5, 201, 100, 2, 651, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 194, 3, 2, 2, 2, 655, 656, 9, 9, 2, 2, 656, 196, 3, 2, 2, 2, 657, 658, 9, 10, 2, 2, 658, 198, 3, 2, 2, 2, 659, 660, 9, 11, 2, 2, 660, 200, 3, 2, 2, 2, 661, 662, 9, 12, 2, 2, 662, 202, 3, 2, 2, 2, 663, 665, 5, 205, 102, 2, 664, 666, 5, 207, 103, 2, 665, 664, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 671, 3, 2, 2, 2, 667, 668, 5, 209, 104, 2, 668, 669, 5, 207, 103, 2, 669, 671, 3, 2, 2, 2, 670, 663, 3, 2, 2, 2, 670, 667, 3, 2, 2, 2, 671, 204, 3, 2, 2, 2, 672, 674, 5, 209, 104, 2, 673, 672, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 7, 48, 2, 2, 676, 681, 5, 209, 104, 2, 677, 678, 5, 209, 104, 2, 678, 679, 7, 48, 2, 2, 679, 681, 3, 2, 2, 2, 680, 673, 3, 2, 2, 2, 680, 677, 3, 2, 2, 2, 681, 206, 3, 2, 2, 2, 682, 684, 9, 13, 2, 2, 683, 685, 5, 211, 105, 2, 684, 683, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 687, 5, 209, 104, 2, 687, 208, 3, 2, 2, 2, 688, 690, 5, 185, 92, 2, 689, 688, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 689, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 210, 3, 2, 2, 2, 693, 694, 9, 14, 2, 2, 694, 212, 3, 2, 2, 2, 695, 697, 5, 215, 107, 2, 696, 695, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 214, 3, 2, 2, 2, 700, 703, 10, 15, 2, 2, 701, 703, 5, 217, 108, 2, 702, 700, 3, 2, 2, 2, 702, 701, 3, 2, 2, 2, 703, 216, 3, 2, 2, 2, 704, 708, 5, 219, 109, 2, 705, 708, 5, 221, 110, 2, 706, 708, 5, 223, 111, 2, 707, 704, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 707, 706, 3, 2, 2, 2, 708, 218, 3, 2, 2, 2, 709, 710, 7, 94, 2, 2, 710, 711, 9, 16, 2, 2, 711, 220, 3, 2, 2, 2, 712, 713, 7, 94, 2, 2, 713, 715, 5, 199, 99, 2, 714, 716, 5, 199, 99, 2, 715, 714, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 718, 3, 2, 2, 2, 717, 719, 5, 199, 99, 2, 718, 717, 3, 2, 2, 2, 718, 719, 3, 2, 2, 2, 719, 222, 3, 2, 2, 2, 720, 721, 7, 94, 2, 2, 721, 722, 7, 122, 2, 2, 722, 724, 3, 2, 2, 2, 723, 725, 5, 201, 100, 2, 724, 723, 3, 2, 2, 2, 725, 726, 3, 2, 2, 2, 726, 724, 3, 2, 2, 2, 726, 727, 3, 2, 2, 2, 727, 224, 3, 2, 2, 2, 728, 730, 5, 227, 113, 2, 729, 728, 3, 2, 2, 2, 730, 731, 3, 2, 2, 2, 731, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 226, 3, 2, 2, 2, 733, 736, 10, 17, 2, 2, 734, 736, 5, 217, 108, 2, 735, 733, 3, 2, 2, 2, 735, 734, 3, 2, 2, 2, 736, 228, 3, 2, 2, 2, 737, 739, 5, 231, 115, 2, 738, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 230, 3, 2, 2, 2, 742, 745, 10, 18, 2, 2, 743, 745, 5, 217, 108, 2, 744, 742, 3, 2, 2, 2, 744, 743, 3, 2, 2, 2, 745, 232, 3, 2, 2, 2, 746, 748, 5, 235, 117, 2, 747, 746, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 747, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 234, 3, 2, 2, 2, 751, 754, 10, 15, 2, 2, 752, 754, 5, 217, 108, 2, 753, 751, 3, 2, 2, 2, 753, 752, 3, 2, 2, 2, 754, 236, 3, 2, 2, 2, 755, 757, 5, 239, 119, 2, 756, 755, 3, 2, 2, 2, 757, 758, 3, 2, 2, 2, 758, 756, 3, 2, 2, 2, 758, 759, 3, 2, 2, 2, 759, 238, 3, 2, 2, 2, 760, 763, 10, 19, 2, 2, 761, 763, 5, 217, 108, 2, 762, 760, 3, 2, 2, 2, 762, 761, 3, 2, 2, 2, 763, 240, 3, 2, 2, 2, 764, 766, 10, 3, 2, 2, 765, 764, 3, 2, 2, 2, 766, 769, 3, 2, 2, 2, 767, 765, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 242, 3, 2, 2, 2, 769, 767, 3, 2, 2, 2, 37, 2, 3, 4, 249, 547, 549, 556, 560, 566, 575, 632, 639, 646, 653, 665, 670, 673, 680, 684, 691, 698, 702, 707, 715, 718, 726, 731, 735, 740, 744, 749, 753, 758, 762, 767, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 82, 2, 7, 3, 2, 3, 83, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 85, 4, 3, 88, 5] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 90, 776, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 250, 10, 2, 12, 2, 14, 2, 253, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 7, 76, 554, 10, 76, 12, 76, 14, 76, 557, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 563, 10, 77, 3, 78, 3, 78, 5, 78, 567, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 5, 79, 573, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 6, 81, 580, 10, 81, 13, 81, 14, 81, 581, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 6, 94, 637, 10, 94, 13, 94, 14, 94, 638, 3, 95, 3, 95, 3, 95, 6, 95, 644, 10, 95, 13, 95, 14, 95, 645, 3, 96, 3, 96, 3, 96, 6, 96, 651, 10, 96, 13, 96, 14, 96, 652, 3, 97, 3, 97, 3, 97, 6, 97, 658, 10, 97, 13, 97, 14, 97, 659, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 5, 102, 672, 10, 102, 3, 102, 3, 102, 3, 102, 5, 102, 677, 10, 102, 3, 103, 5, 103, 680, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 687, 10, 103, 3, 104, 3, 104, 5, 104, 691, 10, 104, 3, 104, 3, 104, 3, 105, 6, 105, 696, 10, 105, 13, 105, 14, 105, 697, 3, 106, 3, 106, 3, 107, 6, 107, 703, 10, 107, 13, 107, 14, 107, 704, 3, 108, 3, 108, 5, 108, 709, 10, 108, 3, 109, 3, 109, 3, 109, 5, 109, 714, 10, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 5, 111, 722, 10, 111, 3, 111, 5, 111, 725, 10, 111, 3, 112, 3, 112, 3, 112, 3, 112, 6, 112, 731, 10, 112, 13, 112, 14, 112, 732, 3, 113, 6, 113, 736, 10, 113, 13, 113, 14, 113, 737, 3, 114, 3, 114, 5, 114, 742, 10, 114, 3, 115, 6, 115, 745, 10, 115, 13, 115, 14, 115, 746, 3, 116, 3, 116, 5, 116, 751, 10, 116, 3, 117, 6, 117, 754, 10, 117, 13, 117, 14, 117, 755, 3, 118, 3, 118, 5, 118, 760, 10, 118, 3, 119, 6, 119, 763, 10, 119, 13, 119, 14, 119, 764, 3, 120, 3, 120, 5, 120, 769, 10, 120, 3, 121, 7, 121, 772, 10, 121, 12, 121, 14, 121, 775, 11, 121, 3, 251, 2, 2, 122, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 2, 173, 2, 87, 175, 2, 88, 177, 2, 2, 179, 2, 89, 181, 2, 90, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 777, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 3, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 3, 175, 3, 2, 2, 2, 4, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 4, 181, 3, 2, 2, 2, 5, 245, 3, 2, 2, 2, 7, 259, 3, 2, 2, 2, 9, 266, 3, 2, 2, 2, 11, 278, 3, 2, 2, 2, 13, 284, 3, 2, 2, 2, 15, 288, 3, 2, 2, 2, 17, 291, 3, 2, 2, 2, 19, 295, 3, 2, 2, 2, 21, 302, 3, 2, 2, 2, 23, 307, 3, 2, 2, 2, 25, 315, 3, 2, 2, 2, 27, 321, 3, 2, 2, 2, 29, 330, 3, 2, 2, 2, 31, 333, 3, 2, 2, 2, 33, 339, 3, 2, 2, 2, 35, 342, 3, 2, 2, 2, 37, 347, 3, 2, 2, 2, 39, 351, 3, 2, 2, 2, 41, 356, 3, 2, 2, 2, 43, 360, 3, 2, 2, 2, 45, 367, 3, 2, 2, 2, 47, 372, 3, 2, 2, 2, 49, 375, 3, 2, 2, 2, 51, 381, 3, 2, 2, 2, 53, 391, 3, 2, 2, 2, 55, 403, 3, 2, 2, 2, 57, 407, 3, 2, 2, 2, 59, 412, 3, 2, 2, 2, 61, 418, 3, 2, 2, 2, 63, 425, 3, 2, 2, 2, 65, 430, 3, 2, 2, 2, 67, 435, 3, 2, 2, 2, 69, 445, 3, 2, 2, 2, 71, 447, 3, 2, 2, 2, 73, 449, 3, 2, 2, 2, 75, 451, 3, 2, 2, 2, 77, 453, 3, 2, 2, 2, 79, 455, 3, 2, 2, 2, 81, 457, 3, 2, 2, 2, 83, 459, 3, 2, 2, 2, 85, 461, 3, 2, 2, 2, 87, 466, 3, 2, 2, 2, 89, 468, 3, 2, 2, 2, 91, 470, 3, 2, 2, 2, 93, 472, 3, 2, 2, 2, 95, 475, 3, 2, 2, 2, 97, 477, 3, 2, 2, 2, 99, 480, 3, 2, 2, 2, 101, 482, 3, 2, 2, 2, 103, 484, 3, 2, 2, 2, 105, 486, 3, 2, 2, 2, 107, 489, 3, 2, 2, 2, 109, 492, 3, 2, 2, 2, 111, 495, 3, 2, 2, 2, 113, 497, 3, 2, 2, 2, 115, 499, 3, 2, 2, 2, 117, 502, 3, 2, 2, 2, 119, 505, 3, 2, 2, 2, 121, 508, 3, 2, 2, 2, 123, 511, 3, 2, 2, 2, 125, 514, 3, 2, 2, 2, 127, 517, 3, 2, 2, 2, 129, 520, 3, 2, 2, 2, 131, 522, 3, 2, 2, 2, 133, 525, 3, 2, 2, 2, 135, 527, 3, 2, 2, 2, 137, 530, 3, 2, 2, 2, 139, 532, 3, 2, 2, 2, 141, 534, 3, 2, 2, 2, 143, 536, 3, 2, 2, 2, 145, 538, 3, 2, 2, 2, 147, 541, 3, 2, 2, 2, 149, 544, 3, 2, 2, 2, 151, 548, 3, 2, 2, 2, 153, 550, 3, 2, 2, 2, 155, 562, 3, 2, 2, 2, 157, 564, 3, 2, 2, 2, 159, 570, 3, 2, 2, 2, 161, 576, 3, 2, 2, 2, 163, 579, 3, 2, 2, 2, 165, 585, 3, 2, 2, 2, 167, 589, 3, 2, 2, 2, 169, 596, 3, 2, 2, 2, 171, 603, 3, 2, 2, 2, 173, 609, 3, 2, 2, 2, 175, 614, 3, 2, 2, 2, 177, 616, 3, 2, 2, 2, 179, 622, 3, 2, 2, 2, 181, 627, 3, 2, 2, 2, 183, 629, 3, 2, 2, 2, 185, 631, 3, 2, 2, 2, 187, 633, 3, 2, 2, 2, 189, 636, 3, 2, 2, 2, 191, 640, 3, 2, 2, 2, 193, 647, 3, 2, 2, 2, 195, 654, 3, 2, 2, 2, 197, 661, 3, 2, 2, 2, 199, 663, 3, 2, 2, 2, 201, 665, 3, 2, 2, 2, 203, 667, 3, 2, 2, 2, 205, 676, 3, 2, 2, 2, 207, 686, 3, 2, 2, 2, 209, 688, 3, 2, 2, 2, 211, 695, 3, 2, 2, 2, 213, 699, 3, 2, 2, 2, 215, 702, 3, 2, 2, 2, 217, 708, 3, 2, 2, 2, 219, 713, 3, 2, 2, 2, 221, 715, 3, 2, 2, 2, 223, 718, 3, 2, 2, 2, 225, 726, 3, 2, 2, 2, 227, 735, 3, 2, 2, 2, 229, 741, 3, 2, 2, 2, 231, 744, 3, 2, 2, 2, 233, 750, 3, 2, 2, 2, 235, 753, 3, 2, 2, 2, 237, 759, 3, 2, 2, 2, 239, 762, 3, 2, 2, 2, 241, 768, 3, 2, 2, 2, 243, 773, 3, 2, 2, 2, 245, 246, 7, 49, 2, 2, 246, 247, 7, 44, 2, 2, 247, 251, 3, 2, 2, 2, 248, 250, 11, 2, 2, 2, 249, 248, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 254, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 255, 7, 44, 2, 2, 255, 256, 7, 49, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 2, 2, 2, 258, 6, 3, 2, 2, 2, 259, 260, 7, 49, 2, 2, 260, 261, 7, 49, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 5, 243, 121, 2, 263, 264, 3, 2, 2, 2, 264, 265, 8, 3, 2, 2, 265, 8, 3, 2, 2, 2, 266, 267, 7, 37, 2, 2, 267, 268, 7, 114, 2, 2, 268, 269, 7, 116, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 105, 2, 2, 271, 272, 7, 111, 2, 2, 272, 273, 7, 99, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 5, 243, 121, 2, 275, 276, 3, 2, 2, 2, 276, 277, 8, 4, 3, 2, 277, 10, 3, 2, 2, 2, 278, 279, 7, 101, 2, 2, 279, 280, 7, 113, 2, 2, 280, 281, 7, 112, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 12, 3, 2, 2, 2, 284, 285, 7, 120, 2, 2, 285, 286, 7, 99, 2, 2, 286, 287, 7, 116, 2, 2, 287, 14, 3, 2, 2, 2, 288, 289, 7, 99, 2, 2, 289, 290, 7, 117, 2, 2, 290, 16, 3, 2, 2, 2, 291, 292, 7, 48, 2, 2, 292, 293, 7, 48, 2, 2, 293, 294, 7, 48, 2, 2, 294, 18, 3, 2, 2, 2, 295, 296, 7, 117, 2, 2, 296, 297, 7, 121, 2, 2, 297, 298, 7, 107, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 101, 2, 2, 300, 301, 7, 106, 2, 2, 301, 20, 3, 2, 2, 2, 302, 303, 7, 101, 2, 2, 303, 304, 7, 99, 2, 2, 304, 305, 7, 117, 2, 2, 305, 306, 7, 103, 2, 2, 306, 22, 3, 2, 2, 2, 307, 308, 7, 102, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 104, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 110, 2, 2, 313, 314, 7, 118, 2, 2, 314, 24, 3, 2, 2, 2, 315, 316, 7, 100, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 99, 2, 2, 319, 320, 7, 109, 2, 2, 320, 26, 3, 2, 2, 2, 321, 322, 7, 101, 2, 2, 322, 323, 7, 113, 2, 2, 323, 324, 7, 112, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 107, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 119, 2, 2, 328, 329, 7, 103, 2, 2, 329, 28, 3, 2, 2, 2, 330, 331, 7, 102, 2, 2, 331, 332, 7, 113, 2, 2, 332, 30, 3, 2, 2, 2, 333, 334, 7, 121, 2, 2, 334, 335, 7, 106, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 110, 2, 2, 337, 338, 7, 103, 2, 2, 338, 32, 3, 2, 2, 2, 339, 340, 7, 107, 2, 2, 340, 341, 7, 104, 2, 2, 341, 34, 3, 2, 2, 2, 342, 343, 7, 103, 2, 2, 343, 344, 7, 110, 2, 2, 344, 345, 7, 117, 2, 2, 345, 346, 7, 103, 2, 2, 346, 36, 3, 2, 2, 2, 347, 348, 7, 104, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 116, 2, 2, 350, 38, 3, 2, 2, 2, 351, 352, 7, 103, 2, 2, 352, 353, 7, 112, 2, 2, 353, 354, 7, 119, 2, 2, 354, 355, 7, 111, 2, 2, 355, 40, 3, 2, 2, 2, 356, 357, 7, 102, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 104, 2, 2, 359, 42, 3, 2, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 103, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 119, 2, 2, 364, 365, 7, 116, 2, 2, 365, 366, 7, 112, 2, 2, 366, 44, 3, 2, 2, 2, 367, 368, 7, 101, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 110, 2, 2, 370, 371, 7, 110, 2, 2, 371, 46, 3, 2, 2, 2, 372, 373, 7, 47, 2, 2, 373, 374, 7, 64, 2, 2, 374, 48, 3, 2, 2, 2, 375, 376, 7, 101, 2, 2, 376, 377, 7, 110, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 117, 2, 2, 379, 380, 7, 117, 2, 2, 380, 50, 3, 2, 2, 2, 381, 382, 7, 107, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 103, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 104, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 101, 2, 2, 389, 390, 7, 103, 2, 2, 390, 52, 3, 2, 2, 2, 391, 392, 7, 101, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 112, 2, 2, 394, 395, 7, 117, 2, 2, 395, 396, 7, 118, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 119, 2, 2, 398, 399, 7, 101, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 113, 2, 2, 401, 402, 7, 116, 2, 2, 402, 54, 3, 2, 2, 2, 403, 404, 7, 112, 2, 2, 404, 405, 7, 103, 2, 2, 405, 406, 7, 121, 2, 2, 406, 56, 3, 2, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 119, 2, 2, 410, 411, 7, 103, 2, 2, 411, 58, 3, 2, 2, 2, 412, 413, 7, 104, 2, 2, 413, 414, 7, 99, 2, 2, 414, 415, 7, 110, 2, 2, 415, 416, 7, 117, 2, 2, 416, 417, 7, 103, 2, 2, 417, 60, 3, 2, 2, 2, 418, 419, 7, 118, 2, 2, 419, 420, 7, 123, 2, 2, 420, 421, 7, 114, 2, 2, 421, 422, 7, 103, 2, 2, 422, 423, 7, 113, 2, 2, 423, 424, 7, 104, 2, 2, 424, 62, 3, 2, 2, 2, 425, 426, 7, 120, 2, 2, 426, 427, 7, 113, 2, 2, 427, 428, 7, 107, 2, 2, 428, 429, 7, 102, 2, 2, 429, 64, 3, 2, 2, 2, 430, 431, 7, 112, 2, 2, 431, 432, 7, 119, 2, 2, 432, 433, 7, 110, 2, 2, 433, 434, 7, 110, 2, 2, 434, 66, 3, 2, 2, 2, 435, 436, 7, 119, 2, 2, 436, 437, 7, 112, 2, 2, 437, 438, 7, 102, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 104, 2, 2, 440, 441, 7, 107, 2, 2, 441, 442, 7, 112, 2, 2, 442, 443, 7, 103, 2, 2, 443, 444, 7, 102, 2, 2, 444, 68, 3, 2, 2, 2, 445, 446, 7, 46, 2, 2, 446, 70, 3, 2, 2, 2, 447, 448, 7, 61, 2, 2, 448, 72, 3, 2, 2, 2, 449, 450, 7, 65, 2, 2, 450, 74, 3, 2, 2, 2, 451, 452, 7, 60, 2, 2, 452, 76, 3, 2, 2, 2, 453, 454, 7, 42, 2, 2, 454, 78, 3, 2, 2, 2, 455, 456, 7, 43, 2, 2, 456, 80, 3, 2, 2, 2, 457, 458, 7, 93, 2, 2, 458, 82, 3, 2, 2, 2, 459, 460, 7, 95, 2, 2, 460, 84, 3, 2, 2, 2, 461, 462, 6, 42, 2, 2, 462, 463, 7, 127, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 8, 42, 4, 2, 465, 86, 3, 2, 2, 2, 466, 467, 7, 125, 2, 2, 467, 88, 3, 2, 2, 2, 468, 469, 7, 127, 2, 2, 469, 90, 3, 2, 2, 2, 470, 471, 7, 45, 2, 2, 471, 92, 3, 2, 2, 2, 472, 473, 7, 45, 2, 2, 473, 474, 7, 45, 2, 2, 474, 94, 3, 2, 2, 2, 475, 476, 7, 47, 2, 2, 476, 96, 3, 2, 2, 2, 477, 478, 7, 47, 2, 2, 478, 479, 7, 47, 2, 2, 479, 98, 3, 2, 2, 2, 480, 481, 7, 44, 2, 2, 481, 100, 3, 2, 2, 2, 482, 483, 7, 49, 2, 2, 483, 102, 3, 2, 2, 2, 484, 485, 7, 39, 2, 2, 485, 104, 3, 2, 2, 2, 486, 487, 7, 44, 2, 2, 487, 488, 7, 44, 2, 2, 488, 106, 3, 2, 2, 2, 489, 490, 7, 40, 2, 2, 490, 491, 7, 40, 2, 2, 491, 108, 3, 2, 2, 2, 492, 493, 7, 126, 2, 2, 493, 494, 7, 126, 2, 2, 494, 110, 3, 2, 2, 2, 495, 496, 7, 35, 2, 2, 496, 112, 3, 2, 2, 2, 497, 498, 7, 63, 2, 2, 498, 114, 3, 2, 2, 2, 499, 500, 7, 45, 2, 2, 500, 501, 7, 63, 2, 2, 501, 116, 3, 2, 2, 2, 502, 503, 7, 47, 2, 2, 503, 504, 7, 63, 2, 2, 504, 118, 3, 2, 2, 2, 505, 506, 7, 44, 2, 2, 506, 507, 7, 63, 2, 2, 507, 120, 3, 2, 2, 2, 508, 509, 7, 49, 2, 2, 509, 510, 7, 63, 2, 2, 510, 122, 3, 2, 2, 2, 511, 512, 7, 39, 2, 2, 512, 513, 7, 63, 2, 2, 513, 124, 3, 2, 2, 2, 514, 515, 7, 63, 2, 2, 515, 516, 7, 63, 2, 2, 516, 126, 3, 2, 2, 2, 517, 518, 7, 35, 2, 2, 518, 519, 7, 63, 2, 2, 519, 128, 3, 2, 2, 2, 520, 521, 7, 62, 2, 2, 521, 130, 3, 2, 2, 2, 522, 523, 7, 62, 2, 2, 523, 524, 7, 63, 2, 2, 524, 132, 3, 2, 2, 2, 525, 526, 7, 64, 2, 2, 526, 134, 3, 2, 2, 2, 527, 528, 7, 64, 2, 2, 528, 529, 7, 63, 2, 2, 529, 136, 3, 2, 2, 2, 530, 531, 7, 40, 2, 2, 531, 138, 3, 2, 2, 2, 532, 533, 7, 126, 2, 2, 533, 140, 3, 2, 2, 2, 534, 535, 7, 96, 2, 2, 535, 142, 3, 2, 2, 2, 536, 537, 7, 128, 2, 2, 537, 144, 3, 2, 2, 2, 538, 539, 7, 62, 2, 2, 539, 540, 7, 62, 2, 2, 540, 146, 3, 2, 2, 2, 541, 542, 7, 64, 2, 2, 542, 543, 7, 64, 2, 2, 543, 148, 3, 2, 2, 2, 544, 545, 7, 64, 2, 2, 545, 546, 7, 64, 2, 2, 546, 547, 7, 64, 2, 2, 547, 150, 3, 2, 2, 2, 548, 549, 7, 48, 2, 2, 549, 152, 3, 2, 2, 2, 550, 555, 5, 183, 91, 2, 551, 554, 5, 183, 91, 2, 552, 554, 5, 187, 93, 2, 553, 551, 3, 2, 2, 2, 553, 552, 3, 2, 2, 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 154, 3, 2, 2, 2, 557, 555, 3, 2, 2, 2, 558, 563, 5, 189, 94, 2, 559, 563, 5, 193, 96, 2, 560, 563, 5, 195, 97, 2, 561, 563, 5, 191, 95, 2, 562, 558, 3, 2, 2, 2, 562, 559, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 562, 561, 3, 2, 2, 2, 563, 156, 3, 2, 2, 2, 564, 566, 7, 41, 2, 2, 565, 567, 5, 235, 117, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 158, 3, 2, 2, 2, 570, 572, 7, 36, 2, 2, 571, 573, 5, 239, 119, 2, 572, 571, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 7, 36, 2, 2, 575, 160, 3, 2, 2, 2, 576, 577, 5, 205, 102, 2, 577, 162, 3, 2, 2, 2, 578, 580, 9, 2, 2, 2, 579, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 8, 81, 5, 2, 584, 164, 3, 2, 2, 2, 585, 586, 9, 3, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 8, 82, 5, 2, 588, 166, 3, 2, 2, 2, 589, 590, 7, 104, 2, 2, 590, 591, 7, 41, 2, 2, 591, 592, 3, 2, 2, 2, 592, 593, 8, 83, 6, 2, 593, 594, 3, 2, 2, 2, 594, 595, 8, 83, 7, 2, 595, 168, 3, 2, 2, 2, 596, 597, 7, 104, 2, 2, 597, 598, 7, 36, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 8, 84, 8, 2, 600, 601, 3, 2, 2, 2, 601, 602, 8, 84, 9, 2, 602, 170, 3, 2, 2, 2, 603, 604, 6, 85, 3, 2, 604, 605, 7, 125, 2, 2, 605, 606, 3, 2, 2, 2, 606, 607, 8, 85, 10, 2, 607, 608, 8, 85, 11, 2, 608, 172, 3, 2, 2, 2, 609, 610, 7, 41, 2, 2, 610, 611, 8, 86, 12, 2, 611, 612, 3, 2, 2, 2, 612, 613, 8, 86, 4, 2, 613, 174, 3, 2, 2, 2, 614, 615, 5, 227, 113, 2, 615, 176, 3, 2, 2, 2, 616, 617, 6, 88, 4, 2, 617, 618, 7, 125, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 8, 88, 10, 2, 620, 621, 8, 88, 11, 2, 621, 178, 3, 2, 2, 2, 622, 623, 7, 36, 2, 2, 623, 624, 8, 89, 13, 2, 624, 625, 3, 2, 2, 2, 625, 626, 8, 89, 4, 2, 626, 180, 3, 2, 2, 2, 627, 628, 5, 231, 115, 2, 628, 182, 3, 2, 2, 2, 629, 630, 5, 185, 92, 2, 630, 184, 3, 2, 2, 2, 631, 632, 9, 4, 2, 2, 632, 186, 3, 2, 2, 2, 633, 634, 9, 5, 2, 2, 634, 188, 3, 2, 2, 2, 635, 637, 5, 187, 93, 2, 636, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 190, 3, 2, 2, 2, 640, 641, 7, 50, 2, 2, 641, 643, 9, 6, 2, 2, 642, 644, 5, 199, 99, 2, 643, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 192, 3, 2, 2, 2, 647, 648, 7, 50, 2, 2, 648, 650, 9, 7, 2, 2, 649, 651, 5, 201, 100, 2, 650, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 194, 3, 2, 2, 2, 654, 655, 7, 50, 2, 2, 655, 657, 9, 8, 2, 2, 656, 658, 5, 203, 101, 2, 657, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 196, 3, 2, 2, 2, 661, 662, 9, 9, 2, 2, 662, 198, 3, 2, 2, 2, 663, 664, 9, 10, 2, 2, 664, 200, 3, 2, 2, 2, 665, 666, 9, 11, 2, 2, 666, 202, 3, 2, 2, 2, 667, 668, 9, 12, 2, 2, 668, 204, 3, 2, 2, 2, 669, 671, 5, 207, 103, 2, 670, 672, 5, 209, 104, 2, 671, 670, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 677, 3, 2, 2, 2, 673, 674, 5, 211, 105, 2, 674, 675, 5, 209, 104, 2, 675, 677, 3, 2, 2, 2, 676, 669, 3, 2, 2, 2, 676, 673, 3, 2, 2, 2, 677, 206, 3, 2, 2, 2, 678, 680, 5, 211, 105, 2, 679, 678, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 682, 7, 48, 2, 2, 682, 687, 5, 211, 105, 2, 683, 684, 5, 211, 105, 2, 684, 685, 7, 48, 2, 2, 685, 687, 3, 2, 2, 2, 686, 679, 3, 2, 2, 2, 686, 683, 3, 2, 2, 2, 687, 208, 3, 2, 2, 2, 688, 690, 9, 13, 2, 2, 689, 691, 5, 213, 106, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 693, 5, 211, 105, 2, 693, 210, 3, 2, 2, 2, 694, 696, 5, 187, 93, 2, 695, 694, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 212, 3, 2, 2, 2, 699, 700, 9, 14, 2, 2, 700, 214, 3, 2, 2, 2, 701, 703, 5, 217, 108, 2, 702, 701, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 216, 3, 2, 2, 2, 706, 709, 10, 15, 2, 2, 707, 709, 5, 219, 109, 2, 708, 706, 3, 2, 2, 2, 708, 707, 3, 2, 2, 2, 709, 218, 3, 2, 2, 2, 710, 714, 5, 221, 110, 2, 711, 714, 5, 223, 111, 2, 712, 714, 5, 225, 112, 2, 713, 710, 3, 2, 2, 2, 713, 711, 3, 2, 2, 2, 713, 712, 3, 2, 2, 2, 714, 220, 3, 2, 2, 2, 715, 716, 7, 94, 2, 2, 716, 717, 9, 16, 2, 2, 717, 222, 3, 2, 2, 2, 718, 719, 7, 94, 2, 2, 719, 721, 5, 201, 100, 2, 720, 722, 5, 201, 100, 2, 721, 720, 3, 2, 2, 2, 721, 722, 3, 2, 2, 2, 722, 724, 3, 2, 2, 2, 723, 725, 5, 201, 100, 2, 724, 723, 3, 2, 2, 2, 724, 725, 3, 2, 2, 2, 725, 224, 3, 2, 2, 2, 726, 727, 7, 94, 2, 2, 727, 728, 7, 122, 2, 2, 728, 730, 3, 2, 2, 2, 729, 731, 5, 203, 101, 2, 730, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 730, 3, 2, 2, 2, 732, 733, 3, 2, 2, 2, 733, 226, 3, 2, 2, 2, 734, 736, 5, 229, 114, 2, 735, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 228, 3, 2, 2, 2, 739, 742, 10, 17, 2, 2, 740, 742, 5, 219, 109, 2, 741, 739, 3, 2, 2, 2, 741, 740, 3, 2, 2, 2, 742, 230, 3, 2, 2, 2, 743, 745, 5, 233, 116, 2, 744, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 232, 3, 2, 2, 2, 748, 751, 10, 18, 2, 2, 749, 751, 5, 219, 109, 2, 750, 748, 3, 2, 2, 2, 750, 749, 3, 2, 2, 2, 751, 234, 3, 2, 2, 2, 752, 754, 5, 237, 118, 2, 753, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 236, 3, 2, 2, 2, 757, 760, 10, 15, 2, 2, 758, 760, 5, 219, 109, 2, 759, 757, 3, 2, 2, 2, 759, 758, 3, 2, 2, 2, 760, 238, 3, 2, 2, 2, 761, 763, 5, 241, 120, 2, 762, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 240, 3, 2, 2, 2, 766, 769, 10, 19, 2, 2, 767, 769, 5, 219, 109, 2, 768, 766, 3, 2, 2, 2, 768, 767, 3, 2, 2, 2, 769, 242, 3, 2, 2, 2, 770, 772, 10, 3, 2, 2, 771, 770, 3, 2, 2, 2, 772, 775, 3, 2, 2, 2, 773, 771, 3, 2, 2, 2, 773, 774, 3, 2, 2, 2, 774, 244, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 37, 2, 3, 4, 251, 553, 555, 562, 566, 572, 581, 638, 645, 652, 659, 671, 676, 679, 686, 690, 697, 704, 708, 713, 721, 724, 732, 737, 741, 746, 750, 755, 759, 764, 768, 773, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 83, 2, 7, 3, 2, 3, 84, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 86, 4, 3, 89, 5] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens index 730d75c01..dfd693766 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens @@ -24,67 +24,68 @@ RetIndicator=23 Class=24 Interface=25 Constructor=26 -True=27 -False=28 -Typeof=29 -Void=30 -Null=31 -Undefined=32 -Comma=33 -SemiColon=34 -QuestionMark=35 -Colon=36 -LeftParen=37 -RightParen=38 -LeftBracket=39 -RightBracket=40 -FStringExpEnd=41 -LeftBrace=42 -RightBrace=43 -Plus=44 -PlusPlus=45 -Minus=46 -MinusMinus=47 -Star=48 -Div=49 -Mod=50 -PowerTo=51 -AndAnd=52 -OrOr=53 -Not=54 -Assign=55 -PlusAssign=56 -MinusAssign=57 -StarAssign=58 -DivAssign=59 -ModAssign=60 -Equal=61 -NotEqual=62 -Less=63 -LessEqual=64 -Greater=65 -GreaterEqual=66 -BitwiseAnd=67 -BitwiseOr=68 -BitwiseXor=69 -BitwiseNot=70 -BitwiseZeroFillLeftShift=71 -BitwiseSignedRightShift=72 -BitwiseZeroFillRightShift=73 -Dot=74 -Identifier=75 -IntegerConstant=76 -SingleQuoteStringLiteral=77 -DoubleQuoteStringLiteral=78 -FloatingConstant=79 -Whitespace=80 -Newline=81 -FStringSingleQuoteStart=82 -FStringDoubleQuoteStart=83 -FStringSingleQuoteEnd=84 -FStringSingleQuoteAtom=85 -FStringDoubleQuoteEnd=86 -FStringDoubleQuoteAtom=87 +New=27 +True=28 +False=29 +Typeof=30 +Void=31 +Null=32 +Undefined=33 +Comma=34 +SemiColon=35 +QuestionMark=36 +Colon=37 +LeftParen=38 +RightParen=39 +LeftBracket=40 +RightBracket=41 +FStringExpEnd=42 +LeftBrace=43 +RightBrace=44 +Plus=45 +PlusPlus=46 +Minus=47 +MinusMinus=48 +Star=49 +Div=50 +Mod=51 +PowerTo=52 +AndAnd=53 +OrOr=54 +Not=55 +Assign=56 +PlusAssign=57 +MinusAssign=58 +StarAssign=59 +DivAssign=60 +ModAssign=61 +Equal=62 +NotEqual=63 +Less=64 +LessEqual=65 +Greater=66 +GreaterEqual=67 +BitwiseAnd=68 +BitwiseOr=69 +BitwiseXor=70 +BitwiseNot=71 +BitwiseZeroFillLeftShift=72 +BitwiseSignedRightShift=73 +BitwiseZeroFillRightShift=74 +Dot=75 +Identifier=76 +IntegerConstant=77 +SingleQuoteStringLiteral=78 +DoubleQuoteStringLiteral=79 +FloatingConstant=80 +Whitespace=81 +Newline=82 +FStringSingleQuoteStart=83 +FStringDoubleQuoteStart=84 +FStringSingleQuoteEnd=85 +FStringSingleQuoteAtom=86 +FStringDoubleQuoteEnd=87 +FStringDoubleQuoteAtom=88 'const'=5 'var'=6 'as'=7 @@ -107,50 +108,51 @@ FStringDoubleQuoteAtom=87 'class'=24 'interface'=25 'constructor'=26 -'true'=27 -'false'=28 -'typeof'=29 -'void'=30 -'null'=31 -'undefined'=32 -','=33 -';'=34 -'?'=35 -':'=36 -'('=37 -')'=38 -'['=39 -']'=40 -'{'=42 -'}'=43 -'+'=44 -'++'=45 -'-'=46 -'--'=47 -'*'=48 -'/'=49 -'%'=50 -'**'=51 -'&&'=52 -'||'=53 -'!'=54 -'='=55 -'+='=56 -'-='=57 -'*='=58 -'/='=59 -'%='=60 -'=='=61 -'!='=62 -'<'=63 -'<='=64 -'>'=65 -'>='=66 -'&'=67 -'|'=68 -'^'=69 -'~'=70 -'<<'=71 -'>>'=72 -'>>>'=73 -'.'=74 +'new'=27 +'true'=28 +'false'=29 +'typeof'=30 +'void'=31 +'null'=32 +'undefined'=33 +','=34 +';'=35 +'?'=36 +':'=37 +'('=38 +')'=39 +'['=40 +']'=41 +'{'=43 +'}'=44 +'+'=45 +'++'=46 +'-'=47 +'--'=48 +'*'=49 +'/'=50 +'%'=51 +'**'=52 +'&&'=53 +'||'=54 +'!'=55 +'='=56 +'+='=57 +'-='=58 +'*='=59 +'/='=60 +'%='=61 +'=='=62 +'!='=63 +'<'=64 +'<='=65 +'>'=66 +'>='=67 +'&'=68 +'|'=69 +'^'=70 +'~'=71 +'<<'=72 +'>>'=73 +'>>>'=74 +'.'=75 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index 60fc19766..3d59981b6 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -42,67 +42,68 @@ export class KipperLexer extends KipperLexerBase { public static readonly Class = 24; public static readonly Interface = 25; public static readonly Constructor = 26; - public static readonly True = 27; - public static readonly False = 28; - public static readonly Typeof = 29; - public static readonly Void = 30; - public static readonly Null = 31; - public static readonly Undefined = 32; - public static readonly Comma = 33; - public static readonly SemiColon = 34; - public static readonly QuestionMark = 35; - public static readonly Colon = 36; - public static readonly LeftParen = 37; - public static readonly RightParen = 38; - public static readonly LeftBracket = 39; - public static readonly RightBracket = 40; - public static readonly FStringExpEnd = 41; - public static readonly LeftBrace = 42; - public static readonly RightBrace = 43; - public static readonly Plus = 44; - public static readonly PlusPlus = 45; - public static readonly Minus = 46; - public static readonly MinusMinus = 47; - public static readonly Star = 48; - public static readonly Div = 49; - public static readonly Mod = 50; - public static readonly PowerTo = 51; - public static readonly AndAnd = 52; - public static readonly OrOr = 53; - public static readonly Not = 54; - public static readonly Assign = 55; - public static readonly PlusAssign = 56; - public static readonly MinusAssign = 57; - public static readonly StarAssign = 58; - public static readonly DivAssign = 59; - public static readonly ModAssign = 60; - public static readonly Equal = 61; - public static readonly NotEqual = 62; - public static readonly Less = 63; - public static readonly LessEqual = 64; - public static readonly Greater = 65; - public static readonly GreaterEqual = 66; - public static readonly BitwiseAnd = 67; - public static readonly BitwiseOr = 68; - public static readonly BitwiseXor = 69; - public static readonly BitwiseNot = 70; - public static readonly BitwiseZeroFillLeftShift = 71; - public static readonly BitwiseSignedRightShift = 72; - public static readonly BitwiseZeroFillRightShift = 73; - public static readonly Dot = 74; - public static readonly Identifier = 75; - public static readonly IntegerConstant = 76; - public static readonly SingleQuoteStringLiteral = 77; - public static readonly DoubleQuoteStringLiteral = 78; - public static readonly FloatingConstant = 79; - public static readonly Whitespace = 80; - public static readonly Newline = 81; - public static readonly FStringSingleQuoteStart = 82; - public static readonly FStringDoubleQuoteStart = 83; - public static readonly FStringSingleQuoteEnd = 84; - public static readonly FStringSingleQuoteAtom = 85; - public static readonly FStringDoubleQuoteEnd = 86; - public static readonly FStringDoubleQuoteAtom = 87; + public static readonly New = 27; + public static readonly True = 28; + public static readonly False = 29; + public static readonly Typeof = 30; + public static readonly Void = 31; + public static readonly Null = 32; + public static readonly Undefined = 33; + public static readonly Comma = 34; + public static readonly SemiColon = 35; + public static readonly QuestionMark = 36; + public static readonly Colon = 37; + public static readonly LeftParen = 38; + public static readonly RightParen = 39; + public static readonly LeftBracket = 40; + public static readonly RightBracket = 41; + public static readonly FStringExpEnd = 42; + public static readonly LeftBrace = 43; + public static readonly RightBrace = 44; + public static readonly Plus = 45; + public static readonly PlusPlus = 46; + public static readonly Minus = 47; + public static readonly MinusMinus = 48; + public static readonly Star = 49; + public static readonly Div = 50; + public static readonly Mod = 51; + public static readonly PowerTo = 52; + public static readonly AndAnd = 53; + public static readonly OrOr = 54; + public static readonly Not = 55; + public static readonly Assign = 56; + public static readonly PlusAssign = 57; + public static readonly MinusAssign = 58; + public static readonly StarAssign = 59; + public static readonly DivAssign = 60; + public static readonly ModAssign = 61; + public static readonly Equal = 62; + public static readonly NotEqual = 63; + public static readonly Less = 64; + public static readonly LessEqual = 65; + public static readonly Greater = 66; + public static readonly GreaterEqual = 67; + public static readonly BitwiseAnd = 68; + public static readonly BitwiseOr = 69; + public static readonly BitwiseXor = 70; + public static readonly BitwiseNot = 71; + public static readonly BitwiseZeroFillLeftShift = 72; + public static readonly BitwiseSignedRightShift = 73; + public static readonly BitwiseZeroFillRightShift = 74; + public static readonly Dot = 75; + public static readonly Identifier = 76; + public static readonly IntegerConstant = 77; + public static readonly SingleQuoteStringLiteral = 78; + public static readonly DoubleQuoteStringLiteral = 79; + public static readonly FloatingConstant = 80; + public static readonly Whitespace = 81; + public static readonly Newline = 82; + public static readonly FStringSingleQuoteStart = 83; + public static readonly FStringDoubleQuoteStart = 84; + public static readonly FStringSingleQuoteEnd = 85; + public static readonly FStringSingleQuoteAtom = 86; + public static readonly FStringDoubleQuoteEnd = 87; + public static readonly FStringDoubleQuoteAtom = 88; public static readonly COMMENT = 2; public static readonly PRAGMA = 3; public static readonly SINGLE_QUOTE_FSTRING = 1; @@ -140,6 +141,7 @@ export class KipperLexer extends KipperLexerBase { "Class", "Interface", "Constructor", + "New", "True", "False", "Typeof", @@ -264,6 +266,7 @@ export class KipperLexer extends KipperLexerBase { "'class'", "'interface'", "'constructor'", + "'new'", "'true'", "'false'", "'typeof'", @@ -341,6 +344,7 @@ export class KipperLexer extends KipperLexerBase { "Class", "Interface", "Constructor", + "New", "True", "False", "Typeof", @@ -449,19 +453,19 @@ export class KipperLexer extends KipperLexerBase { // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 80: + case 81: this.FStringSingleQuoteStart_action(_localctx, actionIndex); break; - case 81: + case 82: this.FStringDoubleQuoteStart_action(_localctx, actionIndex); break; - case 83: + case 84: this.FStringSingleQuoteEnd_action(_localctx, actionIndex); break; - case 86: + case 87: this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); break; } @@ -497,13 +501,13 @@ export class KipperLexer extends KipperLexerBase { // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 39: + case 40: return this.FStringExpEnd_sempred(_localctx, predIndex); - case 82: + case 83: return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 85: + case 86: return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; @@ -532,7 +536,7 @@ export class KipperLexer extends KipperLexerBase { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02Y\u0302\b\x01" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02Z\u0308\b\x01" + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + @@ -548,353 +552,355 @@ export class KipperLexer extends KipperLexerBase { "V\tV\x04W\tW\x04X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t" + "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04" + - "p\tp\x04q\tq\x04r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x03" + - "\x02\x03\x02\x03\x02\x03\x02\x07\x02\xF8\n\x02\f\x02\x0E\x02\xFB\v\x02" + - "\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + - "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05" + - "\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07" + - "\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x03\t\x03" + - "\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v\x03" + - "\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03" + - "\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03" + - "\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11\x03" + - "\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03" + - "\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03" + - "\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + - "\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03" + - "\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + - "\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03" + - "\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + - "\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 " + - '\x03 \x03 \x03 \x03 \x03 \x03!\x03!\x03"\x03"\x03#\x03#\x03$\x03$\x03' + - "%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03)\x03)\x03)\x03*\x03" + - "*\x03+\x03+\x03,\x03,\x03-\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x030\x03" + - "0\x031\x031\x032\x032\x033\x033\x033\x034\x034\x034\x035\x035\x035\x03" + - "6\x036\x037\x037\x038\x038\x038\x039\x039\x039\x03:\x03:\x03:\x03;\x03" + - ";\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03@\x03" + - "@\x03@\x03A\x03A\x03B\x03B\x03B\x03C\x03C\x03D\x03D\x03E\x03E\x03F\x03" + - "F\x03G\x03G\x03G\x03H\x03H\x03H\x03I\x03I\x03I\x03I\x03J\x03J\x03K\x03" + - "K\x03K\x07K\u0224\nK\fK\x0EK\u0227\vK\x03L\x03L\x03L\x03L\x05L\u022D\n" + - "L\x03M\x03M\x05M\u0231\nM\x03M\x03M\x03N\x03N\x05N\u0237\nN\x03N\x03N" + - "\x03O\x03O\x03P\x06P\u023E\nP\rP\x0EP\u023F\x03P\x03P\x03Q\x03Q\x03Q\x03" + - "Q\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03" + - "S\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03" + - "W\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Z\x03" + - "Z\x03[\x03[\x03\\\x03\\\x03]\x06]\u0277\n]\r]\x0E]\u0278\x03^\x03^\x03" + - "^\x06^\u027E\n^\r^\x0E^\u027F\x03_\x03_\x03_\x06_\u0285\n_\r_\x0E_\u0286" + - "\x03`\x03`\x03`\x06`\u028C\n`\r`\x0E`\u028D\x03a\x03a\x03b\x03b\x03c\x03" + - "c\x03d\x03d\x03e\x03e\x05e\u029A\ne\x03e\x03e\x03e\x05e\u029F\ne\x03f" + - "\x05f\u02A2\nf\x03f\x03f\x03f\x03f\x03f\x05f\u02A9\nf\x03g\x03g\x05g\u02AD" + - "\ng\x03g\x03g\x03h\x06h\u02B2\nh\rh\x0Eh\u02B3\x03i\x03i\x03j\x06j\u02B9" + - "\nj\rj\x0Ej\u02BA\x03k\x03k\x05k\u02BF\nk\x03l\x03l\x03l\x05l\u02C4\n" + - "l\x03m\x03m\x03m\x03n\x03n\x03n\x05n\u02CC\nn\x03n\x05n\u02CF\nn\x03o" + - "\x03o\x03o\x03o\x06o\u02D5\no\ro\x0Eo\u02D6\x03p\x06p\u02DA\np\rp\x0E" + - "p\u02DB\x03q\x03q\x05q\u02E0\nq\x03r\x06r\u02E3\nr\rr\x0Er\u02E4\x03s" + - "\x03s\x05s\u02E9\ns\x03t\x06t\u02EC\nt\rt\x0Et\u02ED\x03u\x03u\x05u\u02F2" + - "\nu\x03v\x06v\u02F5\nv\rv\x0Ev\u02F6\x03w\x03w\x05w\u02FB\nw\x03x\x07" + - "x\u02FE\nx\fx\x0Ex\u0301\vx\x03\xF9\x02\x02y\x05\x02\x04\x07\x02\x05\t" + - "\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17" + - "\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13" + - "%\x02\x14'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02" + - '\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02' + - "$G\x02%I\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]" + - "\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02" + - ";u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87" + - "\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97" + - "\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7" + - "\x02U\xA9\x02\x02\xAB\x02V\xAD\x02W\xAF\x02\x02\xB1\x02X\xB3\x02Y\xB5" + - "\x02\x02\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF\x02\x02\xC1" + - "\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02\xCB\x02\x02\xCD" + - "\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9" + - "\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5" + - "\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02\xEF\x02\x02\xF1" + - '\x02\x02\x05\x02\x03\x04\x14\x06\x02\v\v\r\x0E""\xA2\xA2\x05\x02\f\f' + - "\x0F\x0F\u202A\u202B\x05\x02C\\aac|\x03\x022;\x04\x02DDdd\x04\x02QQqq" + - "\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;CHch\x04\x02GGgg\x04" + - "\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cdhhppttvvxx}}\x7F\x7F" + - "\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F$$^^}}\x7F\x7F\x06\x02" + - "\f\f\x0F\x0F$$^^\x02\u0303\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02" + - "\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02" + - "\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02" + - "\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02" + - "\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02" + - "\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02'" + - "\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02" + - "\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02" + - "\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03" + - "\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02" + - "\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02" + - "I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02" + - "\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02" + - "\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03" + - "\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02" + - "\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02" + - "k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02" + - "\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02w\x03\x02\x02\x02" + - "\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02\x02\x02\x02\x7F" + - "\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02\x02\x85" + - "\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02\x02\x8B" + - "\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02\x02\x02\x02\x91" + - "\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02\x02\x02\x02\x97" + - "\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02\x02\x02\x02\x9D" + - "\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02\x02\xA1\x03\x02\x02\x02\x02\xA3" + - "\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02\x02\xA7\x03\x02\x02\x02\x03\xA9" + - "\x03\x02\x02\x02\x03\xAB\x03\x02\x02\x02\x03\xAD\x03\x02\x02\x02\x04\xAF" + - "\x03\x02\x02\x02\x04\xB1\x03\x02\x02\x02\x04\xB3\x03\x02\x02\x02\x05\xF3" + - "\x03\x02\x02\x02\x07\u0101\x03\x02\x02\x02\t\u0108\x03\x02\x02\x02\v\u0114" + - "\x03\x02\x02\x02\r\u011A\x03\x02\x02\x02\x0F\u011E\x03\x02\x02\x02\x11" + - "\u0121\x03\x02\x02\x02\x13\u0125\x03\x02\x02\x02\x15\u012C\x03\x02\x02" + - "\x02\x17\u0131\x03\x02\x02\x02\x19\u0139\x03\x02\x02\x02\x1B\u013F\x03" + - "\x02\x02\x02\x1D\u0148\x03\x02\x02\x02\x1F\u014B\x03\x02\x02\x02!\u0151" + - "\x03\x02\x02\x02#\u0154\x03\x02\x02\x02%\u0159\x03\x02\x02\x02'\u015D" + - "\x03\x02\x02\x02)\u0162\x03\x02\x02\x02+\u0166\x03\x02\x02\x02-\u016D" + - "\x03\x02\x02\x02/\u0172\x03\x02\x02\x021\u0175\x03\x02\x02\x023\u017B" + - "\x03\x02\x02\x025\u0185\x03\x02\x02\x027\u0191\x03\x02\x02\x029\u0196" + - "\x03\x02\x02\x02;\u019C\x03\x02\x02\x02=\u01A3\x03\x02\x02\x02?\u01A8" + - "\x03\x02\x02\x02A\u01AD\x03\x02\x02\x02C\u01B7\x03\x02\x02\x02E\u01B9" + - "\x03\x02\x02\x02G\u01BB\x03\x02\x02\x02I\u01BD\x03\x02\x02\x02K\u01BF" + - "\x03\x02\x02\x02M\u01C1\x03\x02\x02\x02O\u01C3\x03\x02\x02\x02Q\u01C5" + - "\x03\x02\x02\x02S\u01C7\x03\x02\x02\x02U\u01CC\x03\x02\x02\x02W\u01CE" + - "\x03\x02\x02\x02Y\u01D0\x03\x02\x02\x02[\u01D2\x03\x02\x02\x02]\u01D5" + - "\x03\x02\x02\x02_\u01D7\x03\x02\x02\x02a\u01DA\x03\x02\x02\x02c\u01DC" + - "\x03\x02\x02\x02e\u01DE\x03\x02\x02\x02g\u01E0\x03\x02\x02\x02i\u01E3" + - "\x03\x02\x02\x02k\u01E6\x03\x02\x02\x02m\u01E9\x03\x02\x02\x02o\u01EB" + - "\x03\x02\x02\x02q\u01ED\x03\x02\x02\x02s\u01F0\x03\x02\x02\x02u\u01F3" + - "\x03\x02\x02\x02w\u01F6\x03\x02\x02\x02y\u01F9\x03\x02\x02\x02{\u01FC" + - "\x03\x02\x02\x02}\u01FF\x03\x02\x02\x02\x7F\u0202\x03\x02\x02\x02\x81" + - "\u0204\x03\x02\x02\x02\x83\u0207\x03\x02\x02\x02\x85\u0209\x03\x02\x02" + - "\x02\x87\u020C\x03\x02\x02\x02\x89\u020E\x03\x02\x02\x02\x8B\u0210\x03" + - "\x02\x02\x02\x8D\u0212\x03\x02\x02\x02\x8F\u0214\x03\x02\x02\x02\x91\u0217" + - "\x03\x02\x02\x02\x93\u021A\x03\x02\x02\x02\x95\u021E\x03\x02\x02\x02\x97" + - "\u0220\x03\x02\x02\x02\x99\u022C\x03\x02\x02\x02\x9B\u022E\x03\x02\x02" + - "\x02\x9D\u0234\x03\x02\x02\x02\x9F\u023A\x03\x02\x02\x02\xA1\u023D\x03" + - "\x02\x02\x02\xA3\u0243\x03\x02\x02\x02\xA5\u0247\x03\x02\x02\x02\xA7\u024E" + - "\x03\x02\x02\x02\xA9\u0255\x03\x02\x02\x02\xAB\u025B\x03\x02\x02\x02\xAD" + - "\u0260\x03\x02\x02\x02\xAF\u0262\x03\x02\x02\x02\xB1\u0268\x03\x02\x02" + - "\x02\xB3\u026D\x03\x02\x02\x02\xB5\u026F\x03\x02\x02\x02\xB7\u0271\x03" + - "\x02\x02\x02\xB9\u0273\x03\x02\x02\x02\xBB\u0276\x03\x02\x02\x02\xBD\u027A" + - "\x03\x02\x02\x02\xBF\u0281\x03\x02\x02\x02\xC1\u0288\x03\x02\x02\x02\xC3" + - "\u028F\x03\x02\x02\x02\xC5\u0291\x03\x02\x02\x02\xC7\u0293\x03\x02\x02" + - "\x02\xC9\u0295\x03\x02\x02\x02\xCB\u029E\x03\x02\x02\x02\xCD\u02A8\x03" + - "\x02\x02\x02\xCF\u02AA\x03\x02\x02\x02\xD1\u02B1\x03\x02\x02\x02\xD3\u02B5" + - "\x03\x02\x02\x02\xD5\u02B8\x03\x02\x02\x02\xD7\u02BE\x03\x02\x02\x02\xD9" + - "\u02C3\x03\x02\x02\x02\xDB\u02C5\x03\x02\x02\x02\xDD\u02C8\x03\x02\x02" + - "\x02\xDF\u02D0\x03\x02\x02\x02\xE1\u02D9\x03\x02\x02\x02\xE3\u02DF\x03" + - "\x02\x02\x02\xE5\u02E2\x03\x02\x02\x02\xE7\u02E8\x03\x02\x02\x02\xE9\u02EB" + - "\x03\x02\x02\x02\xEB\u02F1\x03\x02\x02\x02\xED\u02F4\x03\x02\x02\x02\xEF" + - "\u02FA\x03\x02\x02\x02\xF1\u02FF\x03\x02\x02\x02\xF3\xF4\x071\x02\x02" + - "\xF4\xF5\x07,\x02\x02\xF5\xF9\x03\x02\x02\x02\xF6\xF8\v\x02\x02\x02\xF7" + - "\xF6\x03\x02\x02\x02\xF8\xFB\x03\x02\x02\x02\xF9\xFA\x03\x02\x02\x02\xF9" + - "\xF7\x03\x02\x02\x02\xFA\xFC\x03\x02\x02\x02\xFB\xF9\x03\x02\x02\x02\xFC" + - "\xFD\x07,\x02\x02\xFD\xFE\x071\x02\x02\xFE\xFF\x03\x02\x02\x02\xFF\u0100" + - "\b\x02\x02\x02\u0100\x06\x03\x02\x02\x02\u0101\u0102\x071\x02\x02\u0102" + - "\u0103\x071\x02\x02\u0103\u0104\x03\x02\x02\x02\u0104\u0105\x05\xF1x\x02" + - "\u0105\u0106\x03\x02\x02\x02\u0106\u0107\b\x03\x02\x02\u0107\b\x03\x02" + - "\x02\x02\u0108\u0109\x07%\x02\x02\u0109\u010A\x07r\x02\x02\u010A\u010B" + - "\x07t\x02\x02\u010B\u010C\x07c\x02\x02\u010C\u010D\x07i\x02\x02\u010D" + - "\u010E\x07o\x02\x02\u010E\u010F\x07c\x02\x02\u010F\u0110\x03\x02\x02\x02" + - "\u0110\u0111\x05\xF1x\x02\u0111\u0112\x03\x02\x02\x02\u0112\u0113\b\x04" + - "\x03\x02\u0113\n\x03\x02\x02\x02\u0114\u0115\x07e\x02\x02\u0115\u0116" + - "\x07q\x02\x02\u0116\u0117\x07p\x02\x02\u0117\u0118\x07u\x02\x02\u0118" + - "\u0119\x07v\x02\x02\u0119\f\x03\x02\x02\x02\u011A\u011B\x07x\x02\x02\u011B" + - "\u011C\x07c\x02\x02\u011C\u011D\x07t\x02\x02\u011D\x0E\x03\x02\x02\x02" + - "\u011E\u011F\x07c\x02\x02\u011F\u0120\x07u\x02\x02\u0120\x10\x03\x02\x02" + - "\x02\u0121\u0122\x070\x02\x02\u0122\u0123\x070\x02\x02\u0123\u0124\x07" + - "0\x02\x02\u0124\x12\x03\x02\x02\x02\u0125\u0126\x07u\x02\x02\u0126\u0127" + - "\x07y\x02\x02\u0127\u0128\x07k\x02\x02\u0128\u0129\x07v\x02\x02\u0129" + - "\u012A\x07e\x02\x02\u012A\u012B\x07j\x02\x02\u012B\x14\x03\x02\x02\x02" + - "\u012C\u012D\x07e\x02\x02\u012D\u012E\x07c\x02\x02\u012E\u012F\x07u\x02" + - "\x02\u012F\u0130\x07g\x02\x02\u0130\x16\x03\x02\x02\x02\u0131\u0132\x07" + - "f\x02\x02\u0132\u0133\x07g\x02\x02\u0133\u0134\x07h\x02\x02\u0134\u0135" + - "\x07c\x02\x02\u0135\u0136\x07w\x02\x02\u0136\u0137\x07n\x02\x02\u0137" + - "\u0138\x07v\x02\x02\u0138\x18\x03\x02\x02\x02\u0139\u013A\x07d\x02\x02" + - "\u013A\u013B\x07t\x02\x02\u013B\u013C\x07g\x02\x02\u013C\u013D\x07c\x02" + - "\x02\u013D\u013E\x07m\x02\x02\u013E\x1A\x03\x02\x02\x02\u013F\u0140\x07" + - "e\x02\x02\u0140\u0141\x07q\x02\x02\u0141\u0142\x07p\x02\x02\u0142\u0143" + - "\x07v\x02\x02\u0143\u0144\x07k\x02\x02\u0144\u0145\x07p\x02\x02\u0145" + - "\u0146\x07w\x02\x02\u0146\u0147\x07g\x02\x02\u0147\x1C\x03\x02\x02\x02" + - "\u0148\u0149\x07f\x02\x02\u0149\u014A\x07q\x02\x02\u014A\x1E\x03\x02\x02" + - "\x02\u014B\u014C\x07y\x02\x02\u014C\u014D\x07j\x02\x02\u014D\u014E\x07" + - "k\x02\x02\u014E\u014F\x07n\x02\x02\u014F\u0150\x07g\x02\x02\u0150 \x03" + - '\x02\x02\x02\u0151\u0152\x07k\x02\x02\u0152\u0153\x07h\x02\x02\u0153"' + - "\x03\x02\x02\x02\u0154\u0155\x07g\x02\x02\u0155\u0156\x07n\x02\x02\u0156" + - "\u0157\x07u\x02\x02\u0157\u0158\x07g\x02\x02\u0158$\x03\x02\x02\x02\u0159" + - "\u015A\x07h\x02\x02\u015A\u015B\x07q\x02\x02\u015B\u015C\x07t\x02\x02" + - "\u015C&\x03\x02\x02\x02\u015D\u015E\x07g\x02\x02\u015E\u015F\x07p\x02" + - "\x02\u015F\u0160\x07w\x02\x02\u0160\u0161\x07o\x02\x02\u0161(\x03\x02" + - "\x02\x02\u0162\u0163\x07f\x02\x02\u0163\u0164\x07g\x02\x02\u0164\u0165" + - "\x07h\x02\x02\u0165*\x03\x02\x02\x02\u0166\u0167\x07t\x02\x02\u0167\u0168" + - "\x07g\x02\x02\u0168\u0169\x07v\x02\x02\u0169\u016A\x07w\x02\x02\u016A" + - "\u016B\x07t\x02\x02\u016B\u016C\x07p\x02\x02\u016C,\x03\x02\x02\x02\u016D" + - "\u016E\x07e\x02\x02\u016E\u016F\x07c\x02\x02\u016F\u0170\x07n\x02\x02" + - "\u0170\u0171\x07n\x02\x02\u0171.\x03\x02\x02\x02\u0172\u0173\x07/\x02" + - "\x02\u0173\u0174\x07@\x02\x02\u01740\x03\x02\x02\x02\u0175\u0176\x07e" + - "\x02\x02\u0176\u0177\x07n\x02\x02\u0177\u0178\x07c\x02\x02\u0178\u0179" + - "\x07u\x02\x02\u0179\u017A\x07u\x02\x02\u017A2\x03\x02\x02\x02\u017B\u017C" + - "\x07k\x02\x02\u017C\u017D\x07p\x02\x02\u017D\u017E\x07v\x02\x02\u017E" + - "\u017F\x07g\x02\x02\u017F\u0180\x07t\x02\x02\u0180\u0181\x07h\x02\x02" + - "\u0181\u0182\x07c\x02\x02\u0182\u0183\x07e\x02\x02\u0183\u0184\x07g\x02" + - "\x02\u01844\x03\x02\x02\x02\u0185\u0186\x07e\x02\x02\u0186\u0187\x07q" + - "\x02\x02\u0187\u0188\x07p\x02\x02\u0188\u0189\x07u\x02\x02\u0189\u018A" + - "\x07v\x02\x02\u018A\u018B\x07t\x02\x02\u018B\u018C\x07w\x02\x02\u018C" + - "\u018D\x07e\x02\x02\u018D\u018E\x07v\x02\x02\u018E\u018F\x07q\x02\x02" + - "\u018F\u0190\x07t\x02\x02\u01906\x03\x02\x02\x02\u0191\u0192\x07v\x02" + - "\x02\u0192\u0193\x07t\x02\x02\u0193\u0194\x07w\x02\x02\u0194\u0195\x07" + - "g\x02\x02\u01958\x03\x02\x02\x02\u0196\u0197\x07h\x02\x02\u0197\u0198" + - "\x07c\x02\x02\u0198\u0199\x07n\x02\x02\u0199\u019A\x07u\x02\x02\u019A" + - "\u019B\x07g\x02\x02\u019B:\x03\x02\x02\x02\u019C\u019D\x07v\x02\x02\u019D" + - "\u019E\x07{\x02\x02\u019E\u019F\x07r\x02\x02\u019F\u01A0\x07g\x02\x02" + - "\u01A0\u01A1\x07q\x02\x02\u01A1\u01A2\x07h\x02\x02\u01A2<\x03\x02\x02" + - "\x02\u01A3\u01A4\x07x\x02\x02\u01A4\u01A5\x07q\x02\x02\u01A5\u01A6\x07" + - "k\x02\x02\u01A6\u01A7\x07f\x02\x02\u01A7>\x03\x02\x02\x02\u01A8\u01A9" + - "\x07p\x02\x02\u01A9\u01AA\x07w\x02\x02\u01AA\u01AB\x07n\x02\x02\u01AB" + - "\u01AC\x07n\x02\x02\u01AC@\x03\x02\x02\x02\u01AD\u01AE\x07w\x02\x02\u01AE" + - "\u01AF\x07p\x02\x02\u01AF\u01B0\x07f\x02\x02\u01B0\u01B1\x07g\x02\x02" + - "\u01B1\u01B2\x07h\x02\x02\u01B2\u01B3\x07k\x02\x02\u01B3\u01B4\x07p\x02" + - "\x02\u01B4\u01B5\x07g\x02\x02\u01B5\u01B6\x07f\x02\x02\u01B6B\x03\x02" + - "\x02\x02\u01B7\u01B8\x07.\x02\x02\u01B8D\x03\x02\x02\x02\u01B9\u01BA\x07" + - "=\x02\x02\u01BAF\x03\x02\x02\x02\u01BB\u01BC\x07A\x02\x02\u01BCH\x03\x02" + - "\x02\x02\u01BD\u01BE\x07<\x02\x02\u01BEJ\x03\x02\x02\x02\u01BF\u01C0\x07" + - "*\x02\x02\u01C0L\x03\x02\x02\x02\u01C1\u01C2\x07+\x02\x02\u01C2N\x03\x02" + - "\x02\x02\u01C3\u01C4\x07]\x02\x02\u01C4P\x03\x02\x02\x02\u01C5\u01C6\x07" + - "_\x02\x02\u01C6R\x03\x02\x02\x02\u01C7\u01C8\x06)\x02\x02\u01C8\u01C9" + - "\x07\x7F\x02\x02\u01C9\u01CA\x03\x02\x02\x02\u01CA\u01CB\b)\x04\x02\u01CB" + - "T\x03\x02\x02\x02\u01CC\u01CD\x07}\x02\x02\u01CDV\x03\x02\x02\x02\u01CE" + - "\u01CF\x07\x7F\x02\x02\u01CFX\x03\x02\x02\x02\u01D0\u01D1\x07-\x02\x02" + - "\u01D1Z\x03\x02\x02\x02\u01D2\u01D3\x07-\x02\x02\u01D3\u01D4\x07-\x02" + - "\x02\u01D4\\\x03\x02\x02\x02\u01D5\u01D6\x07/\x02\x02\u01D6^\x03\x02\x02" + - "\x02\u01D7\u01D8\x07/\x02\x02\u01D8\u01D9\x07/\x02\x02\u01D9`\x03\x02" + - "\x02\x02\u01DA\u01DB\x07,\x02\x02\u01DBb\x03\x02\x02\x02\u01DC\u01DD\x07" + - "1\x02\x02\u01DDd\x03\x02\x02\x02\u01DE\u01DF\x07'\x02\x02\u01DFf\x03" + - "\x02\x02\x02\u01E0\u01E1\x07,\x02\x02\u01E1\u01E2\x07,\x02\x02\u01E2h" + - "\x03\x02\x02\x02\u01E3\u01E4\x07(\x02\x02\u01E4\u01E5\x07(\x02\x02\u01E5" + - "j\x03\x02\x02\x02\u01E6\u01E7\x07~\x02\x02\u01E7\u01E8\x07~\x02\x02\u01E8" + - "l\x03\x02\x02\x02\u01E9\u01EA\x07#\x02\x02\u01EAn\x03\x02\x02\x02\u01EB" + - "\u01EC\x07?\x02\x02\u01ECp\x03\x02\x02\x02\u01ED\u01EE\x07-\x02\x02\u01EE" + - "\u01EF\x07?\x02\x02\u01EFr\x03\x02\x02\x02\u01F0\u01F1\x07/\x02\x02\u01F1" + - "\u01F2\x07?\x02\x02\u01F2t\x03\x02\x02\x02\u01F3\u01F4\x07,\x02\x02\u01F4" + - "\u01F5\x07?\x02\x02\u01F5v\x03\x02\x02\x02\u01F6\u01F7\x071\x02\x02\u01F7" + - "\u01F8\x07?\x02\x02\u01F8x\x03\x02\x02\x02\u01F9\u01FA\x07'\x02\x02\u01FA" + - "\u01FB\x07?\x02\x02\u01FBz\x03\x02\x02\x02\u01FC\u01FD\x07?\x02\x02\u01FD" + - "\u01FE\x07?\x02\x02\u01FE|\x03\x02\x02\x02\u01FF\u0200\x07#\x02\x02\u0200" + - "\u0201\x07?\x02\x02\u0201~\x03\x02\x02\x02\u0202\u0203\x07>\x02\x02\u0203" + - "\x80\x03"; + "p\tp\x04q\tq\x04r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04" + + "y\ty\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xFA\n\x02\f\x02\x0E\x02\xFD" + + "\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05" + + "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07" + + "\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t" + + "\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + + "\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0F" + + "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x11" + + "\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13" + + "\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15" + + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16" + + "\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + + "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + + "\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B" + + "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + + "\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + + "\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03" + + ' \x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03"\x03"\x03#\x03' + + "#\x03$\x03$\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03*\x03" + + "*\x03*\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03/\x03" + + "/\x030\x030\x030\x031\x031\x032\x032\x033\x033\x034\x034\x034\x035\x03" + + "5\x035\x036\x036\x036\x037\x037\x038\x038\x039\x039\x039\x03:\x03:\x03" + + ":\x03;\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03" + + "?\x03?\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03C\x03D\x03D\x03" + + "E\x03E\x03F\x03F\x03G\x03G\x03H\x03H\x03H\x03I\x03I\x03I\x03J\x03J\x03" + + "J\x03J\x03K\x03K\x03L\x03L\x03L\x07L\u022A\nL\fL\x0EL\u022D\vL\x03M\x03" + + "M\x03M\x03M\x05M\u0233\nM\x03N\x03N\x05N\u0237\nN\x03N\x03N\x03O\x03O" + + "\x05O\u023D\nO\x03O\x03O\x03P\x03P\x03Q\x06Q\u0244\nQ\rQ\x0EQ\u0245\x03" + + "Q\x03Q\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03T\x03" + + "T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03" + + "V\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03" + + "Y\x03Y\x03Z\x03Z\x03[\x03[\x03\\\x03\\\x03]\x03]\x03^\x06^\u027D\n^\r" + + "^\x0E^\u027E\x03_\x03_\x03_\x06_\u0284\n_\r_\x0E_\u0285\x03`\x03`\x03" + + "`\x06`\u028B\n`\r`\x0E`\u028C\x03a\x03a\x03a\x06a\u0292\na\ra\x0Ea\u0293" + + "\x03b\x03b\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x05f\u02A0\nf\x03f" + + "\x03f\x03f\x05f\u02A5\nf\x03g\x05g\u02A8\ng\x03g\x03g\x03g\x03g\x03g\x05" + + "g\u02AF\ng\x03h\x03h\x05h\u02B3\nh\x03h\x03h\x03i\x06i\u02B8\ni\ri\x0E" + + "i\u02B9\x03j\x03j\x03k\x06k\u02BF\nk\rk\x0Ek\u02C0\x03l\x03l\x05l\u02C5" + + "\nl\x03m\x03m\x03m\x05m\u02CA\nm\x03n\x03n\x03n\x03o\x03o\x03o\x05o\u02D2" + + "\no\x03o\x05o\u02D5\no\x03p\x03p\x03p\x03p\x06p\u02DB\np\rp\x0Ep\u02DC" + + "\x03q\x06q\u02E0\nq\rq\x0Eq\u02E1\x03r\x03r\x05r\u02E6\nr\x03s\x06s\u02E9" + + "\ns\rs\x0Es\u02EA\x03t\x03t\x05t\u02EF\nt\x03u\x06u\u02F2\nu\ru\x0Eu\u02F3" + + "\x03v\x03v\x05v\u02F8\nv\x03w\x06w\u02FB\nw\rw\x0Ew\u02FC\x03x\x03x\x05" + + "x\u0301\nx\x03y\x07y\u0304\ny\fy\x0Ey\u0307\vy\x03\xFB\x02\x02z\x05\x02" + + "\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02" + + "\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11" + + "!\x02\x12#\x02\x13%\x02\x14'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + + "\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02" + + "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02," + + "W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x02" + + "8o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83" + + "\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93" + + "\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3" + + "\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02\x02\xAD\x02W\xAF\x02X\xB1\x02" + + "\x02\xB3\x02Y\xB5\x02Z\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02" + + "\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02" + + "\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02" + + "\xD7\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02" + + "\xE3\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02" + + "\xEF\x02\x02\xF1\x02\x02\xF3\x02\x02\x05\x02\x03\x04\x14\x06\x02\v\v\r" + + '\x0E""\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|\x03\x02' + + "2;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05" + + "\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$)" + + ")AA^^cdhhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f" + + "\x0F\x0F$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u0309\x02\x05\x03\x02" + + "\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02" + + "\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02" + + "\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02" + + "\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02" + + "\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02" + + "\x02%\x03\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+" + + "\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" + + "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" + + "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" + + "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" + + "\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02" + + "M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02" + + "\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02" + + "\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03" + + "\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02" + + "\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02" + + "o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02" + + "\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02" + + "\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02" + + "\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02" + + "\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02" + + "\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02" + + "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" + + "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" + + "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" + + "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x03\xAB\x03\x02\x02\x02" + + "\x03\xAD\x03\x02\x02\x02\x03\xAF\x03\x02\x02\x02\x04\xB1\x03\x02\x02\x02" + + "\x04\xB3\x03\x02\x02\x02\x04\xB5\x03\x02\x02\x02\x05\xF5\x03\x02\x02\x02" + + "\x07\u0103\x03\x02\x02\x02\t\u010A\x03\x02\x02\x02\v\u0116\x03\x02\x02" + + "\x02\r\u011C\x03\x02\x02\x02\x0F\u0120\x03\x02\x02\x02\x11\u0123\x03\x02" + + "\x02\x02\x13\u0127\x03\x02\x02\x02\x15\u012E\x03\x02\x02\x02\x17\u0133" + + "\x03\x02\x02\x02\x19\u013B\x03\x02\x02\x02\x1B\u0141\x03\x02\x02\x02\x1D" + + "\u014A\x03\x02\x02\x02\x1F\u014D\x03\x02\x02\x02!\u0153\x03\x02\x02\x02" + + "#\u0156\x03\x02\x02\x02%\u015B\x03\x02\x02\x02'\u015F\x03\x02\x02\x02" + + ")\u0164\x03\x02\x02\x02+\u0168\x03\x02\x02\x02-\u016F\x03\x02\x02\x02" + + "/\u0174\x03\x02\x02\x021\u0177\x03\x02\x02\x023\u017D\x03\x02\x02\x02" + + "5\u0187\x03\x02\x02\x027\u0193\x03\x02\x02\x029\u0197\x03\x02\x02\x02" + + ";\u019C\x03\x02\x02\x02=\u01A2\x03\x02\x02\x02?\u01A9\x03\x02\x02\x02" + + "A\u01AE\x03\x02\x02\x02C\u01B3\x03\x02\x02\x02E\u01BD\x03\x02\x02\x02" + + "G\u01BF\x03\x02\x02\x02I\u01C1\x03\x02\x02\x02K\u01C3\x03\x02\x02\x02" + + "M\u01C5\x03\x02\x02\x02O\u01C7\x03\x02\x02\x02Q\u01C9\x03\x02\x02\x02" + + "S\u01CB\x03\x02\x02\x02U\u01CD\x03\x02\x02\x02W\u01D2\x03\x02\x02\x02" + + "Y\u01D4\x03\x02\x02\x02[\u01D6\x03\x02\x02\x02]\u01D8\x03\x02\x02\x02" + + "_\u01DB\x03\x02\x02\x02a\u01DD\x03\x02\x02\x02c\u01E0\x03\x02\x02\x02" + + "e\u01E2\x03\x02\x02\x02g\u01E4\x03\x02\x02\x02i\u01E6\x03\x02\x02\x02" + + "k\u01E9\x03\x02\x02\x02m\u01EC\x03\x02\x02\x02o\u01EF\x03\x02\x02\x02" + + "q\u01F1\x03\x02\x02\x02s\u01F3\x03\x02\x02\x02u\u01F6\x03\x02\x02\x02" + + "w\u01F9\x03\x02\x02\x02y\u01FC\x03\x02\x02\x02{\u01FF\x03\x02\x02\x02" + + "}\u0202\x03\x02\x02\x02\x7F\u0205\x03\x02\x02\x02\x81\u0208\x03\x02\x02" + + "\x02\x83\u020A\x03\x02\x02\x02\x85\u020D\x03\x02\x02\x02\x87\u020F\x03" + + "\x02\x02\x02\x89\u0212\x03\x02\x02\x02\x8B\u0214\x03\x02\x02\x02\x8D\u0216" + + "\x03\x02\x02\x02\x8F\u0218\x03\x02\x02\x02\x91\u021A\x03\x02\x02\x02\x93" + + "\u021D\x03\x02\x02\x02\x95\u0220\x03\x02\x02\x02\x97\u0224\x03\x02\x02" + + "\x02\x99\u0226\x03\x02\x02\x02\x9B\u0232\x03\x02\x02\x02\x9D\u0234\x03" + + "\x02\x02\x02\x9F\u023A\x03\x02\x02\x02\xA1\u0240\x03\x02\x02\x02\xA3\u0243" + + "\x03\x02\x02\x02\xA5\u0249\x03\x02\x02\x02\xA7\u024D\x03\x02\x02\x02\xA9" + + "\u0254\x03\x02\x02\x02\xAB\u025B\x03\x02\x02\x02\xAD\u0261\x03\x02\x02" + + "\x02\xAF\u0266\x03\x02\x02\x02\xB1\u0268\x03\x02\x02\x02\xB3\u026E\x03" + + "\x02\x02\x02\xB5\u0273\x03\x02\x02\x02\xB7\u0275\x03\x02\x02\x02\xB9\u0277" + + "\x03\x02\x02\x02\xBB\u0279\x03\x02\x02\x02\xBD\u027C\x03\x02\x02\x02\xBF" + + "\u0280\x03\x02\x02\x02\xC1\u0287\x03\x02\x02\x02\xC3\u028E\x03\x02\x02" + + "\x02\xC5\u0295\x03\x02\x02\x02\xC7\u0297\x03\x02\x02\x02\xC9\u0299\x03" + + "\x02\x02\x02\xCB\u029B\x03\x02\x02\x02\xCD\u02A4\x03\x02\x02\x02\xCF\u02AE" + + "\x03\x02\x02\x02\xD1\u02B0\x03\x02\x02\x02\xD3\u02B7\x03\x02\x02\x02\xD5" + + "\u02BB\x03\x02\x02\x02\xD7\u02BE\x03\x02\x02\x02\xD9\u02C4\x03\x02\x02" + + "\x02\xDB\u02C9\x03\x02\x02\x02\xDD\u02CB\x03\x02\x02\x02\xDF\u02CE\x03" + + "\x02\x02\x02\xE1\u02D6\x03\x02\x02\x02\xE3\u02DF\x03\x02\x02\x02\xE5\u02E5" + + "\x03\x02\x02\x02\xE7\u02E8\x03\x02\x02\x02\xE9\u02EE\x03\x02\x02\x02\xEB" + + "\u02F1\x03\x02\x02\x02\xED\u02F7\x03\x02\x02\x02\xEF\u02FA\x03\x02\x02" + + "\x02\xF1\u0300\x03\x02\x02\x02\xF3\u0305\x03\x02\x02\x02\xF5\xF6\x071" + + "\x02\x02\xF6\xF7\x07,\x02\x02\xF7\xFB\x03\x02\x02\x02\xF8\xFA\v\x02\x02" + + "\x02\xF9\xF8\x03\x02\x02\x02\xFA\xFD\x03\x02\x02\x02\xFB\xFC\x03\x02\x02" + + "\x02\xFB\xF9\x03\x02\x02\x02\xFC\xFE\x03\x02\x02\x02\xFD\xFB\x03\x02\x02" + + "\x02\xFE\xFF\x07,\x02\x02\xFF\u0100\x071\x02\x02\u0100\u0101\x03\x02\x02" + + "\x02\u0101\u0102\b\x02\x02\x02\u0102\x06\x03\x02\x02\x02\u0103\u0104\x07" + + "1\x02\x02\u0104\u0105\x071\x02\x02\u0105\u0106\x03\x02\x02\x02\u0106\u0107" + + "\x05\xF3y\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0109\b\x03\x02\x02\u0109" + + "\b\x03\x02\x02\x02\u010A\u010B\x07%\x02\x02\u010B\u010C\x07r\x02\x02\u010C" + + "\u010D\x07t\x02\x02\u010D\u010E\x07c\x02\x02\u010E\u010F\x07i\x02\x02" + + "\u010F\u0110\x07o\x02\x02\u0110\u0111\x07c\x02\x02\u0111\u0112\x03\x02" + + "\x02\x02\u0112\u0113\x05\xF3y\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0115" + + "\b\x04\x03\x02\u0115\n\x03\x02\x02\x02\u0116\u0117\x07e\x02\x02\u0117" + + "\u0118\x07q\x02\x02\u0118\u0119\x07p\x02\x02\u0119\u011A\x07u\x02\x02" + + "\u011A\u011B\x07v\x02\x02\u011B\f\x03\x02\x02\x02\u011C\u011D\x07x\x02" + + "\x02\u011D\u011E\x07c\x02\x02\u011E\u011F\x07t\x02\x02\u011F\x0E\x03\x02" + + "\x02\x02\u0120\u0121\x07c\x02\x02\u0121\u0122\x07u\x02\x02\u0122\x10\x03" + + "\x02\x02\x02\u0123\u0124\x070\x02\x02\u0124\u0125\x070\x02\x02\u0125\u0126" + + "\x070\x02\x02\u0126\x12\x03\x02\x02\x02\u0127\u0128\x07u\x02\x02\u0128" + + "\u0129\x07y\x02\x02\u0129\u012A\x07k\x02\x02\u012A\u012B\x07v\x02\x02" + + "\u012B\u012C\x07e\x02\x02\u012C\u012D\x07j\x02\x02\u012D\x14\x03\x02\x02" + + "\x02\u012E\u012F\x07e\x02\x02\u012F\u0130\x07c\x02\x02\u0130\u0131\x07" + + "u\x02\x02\u0131\u0132\x07g\x02\x02\u0132\x16\x03\x02\x02\x02\u0133\u0134" + + "\x07f\x02\x02\u0134\u0135\x07g\x02\x02\u0135\u0136\x07h\x02\x02\u0136" + + "\u0137\x07c\x02\x02\u0137\u0138\x07w\x02\x02\u0138\u0139\x07n\x02\x02" + + "\u0139\u013A\x07v\x02\x02\u013A\x18\x03\x02\x02\x02\u013B\u013C\x07d\x02" + + "\x02\u013C\u013D\x07t\x02\x02\u013D\u013E\x07g\x02\x02\u013E\u013F\x07" + + "c\x02\x02\u013F\u0140\x07m\x02\x02\u0140\x1A\x03\x02\x02\x02\u0141\u0142" + + "\x07e\x02\x02\u0142\u0143\x07q\x02\x02\u0143\u0144\x07p\x02\x02\u0144" + + "\u0145\x07v\x02\x02\u0145\u0146\x07k\x02\x02\u0146\u0147\x07p\x02\x02" + + "\u0147\u0148\x07w\x02\x02\u0148\u0149\x07g\x02\x02\u0149\x1C\x03\x02\x02" + + "\x02\u014A\u014B\x07f\x02\x02\u014B\u014C\x07q\x02\x02\u014C\x1E\x03\x02" + + "\x02\x02\u014D\u014E\x07y\x02\x02\u014E\u014F\x07j\x02\x02\u014F\u0150" + + "\x07k\x02\x02\u0150\u0151\x07n\x02\x02\u0151\u0152\x07g\x02\x02\u0152" + + " \x03\x02\x02\x02\u0153\u0154\x07k\x02\x02\u0154\u0155\x07h\x02\x02\u0155" + + '"\x03\x02\x02\x02\u0156\u0157\x07g\x02\x02\u0157\u0158\x07n\x02\x02\u0158' + + "\u0159\x07u\x02\x02\u0159\u015A\x07g\x02\x02\u015A$\x03\x02\x02\x02\u015B" + + "\u015C\x07h\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07t\x02\x02" + + "\u015E&\x03\x02\x02\x02\u015F\u0160\x07g\x02\x02\u0160\u0161\x07p\x02" + + "\x02\u0161\u0162\x07w\x02\x02\u0162\u0163\x07o\x02\x02\u0163(\x03\x02" + + "\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u0166\x07g\x02\x02\u0166\u0167" + + "\x07h\x02\x02\u0167*\x03\x02\x02\x02\u0168\u0169\x07t\x02\x02\u0169\u016A" + + "\x07g\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07w\x02\x02\u016C" + + "\u016D\x07t\x02\x02\u016D\u016E\x07p\x02\x02\u016E,\x03\x02\x02\x02\u016F" + + "\u0170\x07e\x02\x02\u0170\u0171\x07c\x02\x02\u0171\u0172\x07n\x02\x02" + + "\u0172\u0173\x07n\x02\x02\u0173.\x03\x02\x02\x02\u0174\u0175\x07/\x02" + + "\x02\u0175\u0176\x07@\x02\x02\u01760\x03\x02\x02\x02\u0177\u0178\x07e" + + "\x02\x02\u0178\u0179\x07n\x02\x02\u0179\u017A\x07c\x02\x02\u017A\u017B" + + "\x07u\x02\x02\u017B\u017C\x07u\x02\x02\u017C2\x03\x02\x02\x02\u017D\u017E" + + "\x07k\x02\x02\u017E\u017F\x07p\x02\x02\u017F\u0180\x07v\x02\x02\u0180" + + "\u0181\x07g\x02\x02\u0181\u0182\x07t\x02\x02\u0182\u0183\x07h\x02\x02" + + "\u0183\u0184\x07c\x02\x02\u0184\u0185\x07e\x02\x02\u0185\u0186\x07g\x02" + + "\x02\u01864\x03\x02\x02\x02\u0187\u0188\x07e\x02\x02\u0188\u0189\x07q" + + "\x02\x02\u0189\u018A\x07p\x02\x02\u018A\u018B\x07u\x02\x02\u018B\u018C" + + "\x07v\x02\x02\u018C\u018D\x07t\x02\x02\u018D\u018E\x07w\x02\x02\u018E" + + "\u018F\x07e\x02\x02\u018F\u0190\x07v\x02\x02\u0190\u0191\x07q\x02\x02" + + "\u0191\u0192\x07t\x02\x02\u01926\x03\x02\x02\x02\u0193\u0194\x07p\x02" + + "\x02\u0194\u0195\x07g\x02\x02\u0195\u0196\x07y\x02\x02\u01968\x03\x02" + + "\x02\x02\u0197\u0198\x07v\x02\x02\u0198\u0199\x07t\x02\x02\u0199\u019A" + + "\x07w\x02\x02\u019A\u019B\x07g\x02\x02\u019B:\x03\x02\x02\x02\u019C\u019D" + + "\x07h\x02\x02\u019D\u019E\x07c\x02\x02\u019E\u019F\x07n\x02\x02\u019F" + + "\u01A0\x07u\x02\x02\u01A0\u01A1\x07g\x02\x02\u01A1<\x03\x02\x02\x02\u01A2" + + "\u01A3\x07v\x02\x02\u01A3\u01A4\x07{\x02\x02\u01A4\u01A5\x07r\x02\x02" + + "\u01A5\u01A6\x07g\x02\x02\u01A6\u01A7\x07q\x02\x02\u01A7\u01A8\x07h\x02" + + "\x02\u01A8>\x03\x02\x02\x02\u01A9\u01AA\x07x\x02\x02\u01AA\u01AB\x07q" + + "\x02\x02\u01AB\u01AC\x07k\x02\x02\u01AC\u01AD\x07f\x02\x02\u01AD@\x03" + + "\x02\x02\x02\u01AE\u01AF\x07p\x02\x02\u01AF\u01B0\x07w\x02\x02\u01B0\u01B1" + + "\x07n\x02\x02\u01B1\u01B2\x07n\x02\x02\u01B2B\x03\x02\x02\x02\u01B3\u01B4" + + "\x07w\x02\x02\u01B4\u01B5\x07p\x02\x02\u01B5\u01B6\x07f\x02\x02\u01B6" + + "\u01B7\x07g\x02\x02\u01B7\u01B8\x07h\x02\x02\u01B8\u01B9\x07k\x02\x02" + + "\u01B9\u01BA\x07p\x02\x02\u01BA\u01BB\x07g\x02\x02\u01BB\u01BC\x07f\x02" + + "\x02\u01BCD\x03\x02\x02\x02\u01BD\u01BE\x07.\x02\x02\u01BEF\x03\x02\x02" + + "\x02\u01BF\u01C0\x07=\x02\x02\u01C0H\x03\x02\x02\x02\u01C1\u01C2\x07A" + + "\x02\x02\u01C2J\x03\x02\x02\x02\u01C3\u01C4\x07<\x02\x02\u01C4L\x03\x02" + + "\x02\x02\u01C5\u01C6\x07*\x02\x02\u01C6N\x03\x02\x02\x02\u01C7\u01C8\x07" + + "+\x02\x02\u01C8P\x03\x02\x02\x02\u01C9\u01CA\x07]\x02\x02\u01CAR\x03\x02" + + "\x02\x02\u01CB\u01CC\x07_\x02\x02\u01CCT\x03\x02\x02\x02\u01CD\u01CE\x06" + + "*\x02\x02\u01CE\u01CF\x07\x7F\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0" + + "\u01D1\b*\x04\x02\u01D1V\x03\x02\x02\x02\u01D2\u01D3\x07}\x02\x02\u01D3" + + "X\x03\x02\x02\x02\u01D4\u01D5\x07\x7F\x02\x02\u01D5Z\x03\x02\x02\x02\u01D6" + + "\u01D7\x07-\x02\x02\u01D7\\\x03\x02\x02\x02\u01D8\u01D9\x07-\x02\x02\u01D9" + + "\u01DA\x07-\x02\x02\u01DA^\x03\x02\x02\x02\u01DB\u01DC\x07/\x02\x02\u01DC" + + "`\x03\x02\x02\x02\u01DD\u01DE\x07/\x02\x02\u01DE\u01DF\x07/\x02\x02\u01DF" + + "b\x03\x02\x02\x02\u01E0\u01E1\x07,\x02\x02\u01E1d\x03\x02\x02\x02\u01E2" + + "\u01E3\x071\x02\x02\u01E3f\x03\x02\x02\x02\u01E4\u01E5\x07'\x02\x02\u01E5" + + "h\x03\x02\x02\x02\u01E6\u01E7\x07,\x02\x02\u01E7\u01E8\x07,\x02\x02\u01E8" + + "j\x03\x02\x02\x02\u01E9\u01EA\x07(\x02\x02\u01EA\u01EB\x07(\x02\x02\u01EB" + + "l\x03\x02\x02\x02\u01EC\u01ED\x07~\x02\x02\u01ED\u01EE\x07~\x02\x02\u01EE" + + "n\x03\x02\x02\x02\u01EF\u01F0\x07#\x02\x02\u01F0p\x03\x02\x02\x02\u01F1" + + "\u01F2\x07?\x02\x02\u01F2r\x03\x02\x02\x02\u01F3\u01F4\x07-\x02\x02\u01F4" + + "\u01F5\x07?\x02\x02\u01F5t\x03\x02\x02\x02\u01F6\u01F7\x07/\x02\x02\u01F7" + + "\u01F8\x07?\x02\x02\u01F8v\x03\x02\x02\x02\u01F9\u01FA\x07,\x02\x02\u01FA" + + "\u01FB\x07?\x02\x02\u01FBx\x03\x02\x02\x02\u01FC\u01FD\x071\x02\x02\u01FD" + + "\u01FE\x07?\x02\x02\u01FEz\x03\x02\x02\x02\u01FF\u0200\x07'\x02\x02\u0200" + + "\u0201\x07?\x02\x02"; private static readonly _serializedATNSegment1: string = - "\x02\x02\x02\u0204\u0205\x07>\x02\x02\u0205\u0206\x07?\x02\x02\u0206\x82" + - "\x03\x02\x02\x02\u0207\u0208\x07@\x02\x02\u0208\x84\x03\x02\x02\x02\u0209" + - "\u020A\x07@\x02\x02\u020A\u020B\x07?\x02\x02\u020B\x86\x03\x02\x02\x02" + - "\u020C\u020D\x07(\x02\x02\u020D\x88\x03\x02\x02\x02\u020E\u020F\x07~\x02" + - "\x02\u020F\x8A\x03\x02\x02\x02\u0210\u0211\x07`\x02\x02\u0211\x8C\x03" + - "\x02\x02\x02\u0212\u0213\x07\x80\x02\x02\u0213\x8E\x03\x02\x02\x02\u0214" + - "\u0215\x07>\x02\x02\u0215\u0216\x07>\x02\x02\u0216\x90\x03\x02\x02\x02" + - "\u0217\u0218\x07@\x02\x02\u0218\u0219\x07@\x02\x02\u0219\x92\x03\x02\x02" + - "\x02\u021A\u021B\x07@\x02\x02\u021B\u021C\x07@\x02\x02\u021C\u021D\x07" + - "@\x02\x02\u021D\x94\x03\x02\x02\x02\u021E\u021F\x070\x02\x02\u021F\x96" + - "\x03\x02\x02\x02\u0220\u0225\x05\xB5Z\x02\u0221\u0224\x05\xB5Z\x02\u0222" + - "\u0224\x05\xB9\\\x02\u0223\u0221\x03\x02\x02\x02\u0223\u0222\x03\x02\x02" + - "\x02\u0224\u0227\x03\x02\x02\x02\u0225\u0223\x03\x02\x02\x02\u0225\u0226" + - "\x03\x02\x02\x02\u0226\x98\x03\x02\x02\x02\u0227\u0225\x03\x02\x02\x02" + - "\u0228\u022D\x05\xBB]\x02\u0229\u022D\x05\xBF_\x02\u022A\u022D\x05\xC1" + - "`\x02\u022B\u022D\x05\xBD^\x02\u022C\u0228\x03\x02\x02\x02\u022C\u0229" + - "\x03\x02\x02\x02\u022C\u022A\x03\x02\x02\x02\u022C\u022B\x03\x02\x02\x02" + - "\u022D\x9A\x03\x02\x02\x02\u022E\u0230\x07)\x02\x02\u022F\u0231\x05\xE9" + - "t\x02\u0230\u022F\x03\x02\x02\x02\u0230\u0231\x03\x02\x02\x02\u0231\u0232" + - "\x03\x02\x02\x02\u0232\u0233\x07)\x02\x02\u0233\x9C\x03\x02\x02\x02\u0234" + - "\u0236\x07$\x02\x02\u0235\u0237\x05\xEDv\x02\u0236\u0235\x03\x02\x02\x02" + - "\u0236\u0237\x03\x02\x02\x02\u0237\u0238\x03\x02\x02\x02\u0238\u0239\x07" + - "$\x02\x02\u0239\x9E\x03\x02\x02\x02\u023A\u023B\x05\xCBe\x02\u023B\xA0" + - "\x03\x02\x02\x02\u023C\u023E\t\x02\x02\x02\u023D\u023C\x03\x02\x02\x02" + - "\u023E\u023F\x03\x02\x02\x02\u023F\u023D\x03\x02\x02\x02\u023F\u0240\x03" + - "\x02\x02\x02\u0240\u0241\x03\x02\x02\x02\u0241\u0242\bP\x05\x02\u0242" + - "\xA2\x03\x02\x02\x02\u0243\u0244\t\x03\x02\x02\u0244\u0245\x03\x02\x02" + - "\x02\u0245\u0246\bQ\x05\x02\u0246\xA4\x03\x02\x02\x02\u0247\u0248\x07" + - "h\x02\x02\u0248\u0249\x07)\x02\x02\u0249\u024A\x03\x02\x02\x02\u024A\u024B" + - "\bR\x06\x02\u024B\u024C\x03\x02\x02\x02\u024C\u024D\bR\x07\x02\u024D\xA6" + - "\x03\x02\x02\x02\u024E\u024F\x07h\x02\x02\u024F\u0250\x07$\x02\x02\u0250" + - "\u0251\x03\x02\x02\x02\u0251\u0252\bS\b\x02\u0252\u0253\x03\x02\x02\x02" + - "\u0253\u0254\bS\t\x02\u0254\xA8\x03\x02\x02\x02\u0255\u0256\x06T\x03\x02" + - "\u0256\u0257\x07}\x02\x02\u0257\u0258\x03\x02\x02\x02\u0258\u0259\bT\n" + - "\x02\u0259\u025A\bT\v\x02\u025A\xAA\x03\x02\x02\x02\u025B\u025C\x07)\x02" + - "\x02\u025C\u025D\bU\f\x02\u025D\u025E\x03\x02\x02\x02\u025E\u025F\bU\x04" + - "\x02\u025F\xAC\x03\x02\x02\x02\u0260\u0261\x05\xE1p\x02\u0261\xAE\x03" + - "\x02\x02\x02\u0262\u0263\x06W\x04\x02\u0263\u0264\x07}\x02\x02\u0264\u0265" + - "\x03\x02\x02\x02\u0265\u0266\bW\n\x02\u0266\u0267\bW\v\x02\u0267\xB0\x03" + - "\x02\x02\x02\u0268\u0269\x07$\x02\x02\u0269\u026A\bX\r\x02\u026A\u026B" + - "\x03\x02\x02\x02\u026B\u026C\bX\x04\x02\u026C\xB2\x03\x02\x02\x02\u026D" + - "\u026E\x05\xE5r\x02\u026E\xB4\x03\x02\x02\x02\u026F\u0270\x05\xB7[\x02" + - "\u0270\xB6\x03\x02\x02\x02\u0271\u0272\t\x04\x02\x02\u0272\xB8\x03\x02" + - "\x02\x02\u0273\u0274\t\x05\x02\x02\u0274\xBA\x03\x02\x02\x02\u0275\u0277" + - "\x05\xB9\\\x02\u0276\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02\x02\x02" + - "\u0278\u0276\x03\x02\x02\x02\u0278\u0279\x03\x02\x02\x02\u0279\xBC\x03" + - "\x02\x02\x02\u027A\u027B\x072\x02\x02\u027B\u027D\t\x06\x02\x02\u027C" + - "\u027E\x05\xC5b\x02\u027D\u027C\x03\x02\x02\x02\u027E\u027F\x03\x02\x02" + - "\x02\u027F\u027D\x03\x02\x02\x02\u027F\u0280\x03\x02\x02\x02\u0280\xBE" + - "\x03\x02\x02\x02\u0281\u0282\x072\x02\x02\u0282\u0284\t\x07\x02\x02\u0283" + - "\u0285\x05\xC7c\x02\u0284\u0283\x03\x02\x02\x02\u0285\u0286\x03\x02\x02" + - "\x02\u0286\u0284\x03\x02\x02\x02\u0286\u0287\x03\x02\x02\x02\u0287\xC0" + - "\x03\x02\x02\x02\u0288\u0289\x072\x02\x02\u0289\u028B\t\b\x02\x02\u028A" + - "\u028C\x05\xC9d\x02\u028B\u028A\x03\x02\x02\x02\u028C\u028D\x03\x02\x02" + - "\x02\u028D\u028B\x03\x02\x02\x02\u028D\u028E\x03\x02\x02\x02\u028E\xC2" + - "\x03\x02\x02\x02\u028F\u0290\t\t\x02\x02\u0290\xC4\x03\x02\x02\x02\u0291" + - "\u0292\t\n\x02\x02\u0292\xC6\x03\x02\x02\x02\u0293\u0294\t\v\x02\x02\u0294" + - "\xC8\x03\x02\x02\x02\u0295\u0296\t\f\x02\x02\u0296\xCA\x03\x02\x02\x02" + - "\u0297\u0299\x05\xCDf\x02\u0298\u029A\x05\xCFg\x02\u0299\u0298\x03\x02" + - "\x02\x02\u0299\u029A\x03\x02\x02\x02\u029A\u029F\x03\x02\x02\x02\u029B" + - "\u029C\x05\xD1h\x02\u029C\u029D\x05\xCFg\x02\u029D\u029F\x03\x02\x02\x02" + - "\u029E\u0297\x03\x02\x02\x02\u029E\u029B\x03\x02\x02\x02\u029F\xCC\x03" + - "\x02\x02\x02\u02A0\u02A2\x05\xD1h\x02\u02A1\u02A0\x03\x02\x02\x02\u02A1" + - "\u02A2\x03\x02\x02\x02\u02A2\u02A3\x03\x02\x02\x02\u02A3\u02A4\x070\x02" + - "\x02\u02A4\u02A9\x05\xD1h\x02\u02A5\u02A6\x05\xD1h\x02\u02A6\u02A7\x07" + - "0\x02\x02\u02A7\u02A9\x03\x02\x02\x02\u02A8\u02A1\x03\x02\x02\x02\u02A8" + - "\u02A5\x03\x02\x02\x02\u02A9\xCE\x03\x02\x02\x02\u02AA\u02AC\t\r\x02\x02" + - "\u02AB\u02AD\x05\xD3i\x02\u02AC\u02AB\x03\x02\x02\x02\u02AC\u02AD\x03" + - "\x02\x02\x02\u02AD\u02AE\x03\x02\x02\x02\u02AE\u02AF\x05\xD1h\x02\u02AF" + - "\xD0\x03\x02\x02\x02\u02B0\u02B2\x05\xB9\\\x02\u02B1\u02B0\x03\x02\x02" + - "\x02\u02B2\u02B3\x03\x02\x02\x02\u02B3\u02B1\x03\x02\x02\x02\u02B3\u02B4" + - "\x03\x02\x02\x02\u02B4\xD2\x03\x02\x02\x02\u02B5\u02B6\t\x0E\x02\x02\u02B6" + - "\xD4\x03\x02\x02\x02\u02B7\u02B9\x05\xD7k\x02\u02B8\u02B7\x03\x02\x02" + - "\x02\u02B9\u02BA\x03\x02\x02\x02\u02BA\u02B8\x03\x02\x02\x02\u02BA\u02BB" + - "\x03\x02\x02\x02\u02BB\xD6\x03\x02\x02\x02\u02BC\u02BF\n\x0F\x02\x02\u02BD" + - "\u02BF\x05\xD9l\x02\u02BE\u02BC\x03\x02\x02\x02\u02BE\u02BD\x03\x02\x02" + - "\x02\u02BF\xD8\x03\x02\x02\x02\u02C0\u02C4\x05\xDBm\x02\u02C1\u02C4\x05" + - "\xDDn\x02\u02C2\u02C4\x05\xDFo\x02\u02C3\u02C0\x03\x02\x02\x02\u02C3\u02C1" + - "\x03\x02\x02\x02\u02C3\u02C2\x03\x02\x02\x02\u02C4\xDA\x03\x02\x02\x02" + - "\u02C5\u02C6\x07^\x02\x02\u02C6\u02C7\t\x10\x02\x02\u02C7\xDC\x03\x02" + - "\x02\x02\u02C8\u02C9\x07^\x02\x02\u02C9\u02CB\x05\xC7c\x02\u02CA\u02CC" + - "\x05\xC7c\x02\u02CB\u02CA\x03\x02\x02\x02\u02CB\u02CC\x03\x02\x02\x02" + - "\u02CC\u02CE\x03\x02\x02\x02\u02CD\u02CF\x05\xC7c\x02\u02CE\u02CD\x03" + - "\x02\x02\x02\u02CE\u02CF\x03\x02\x02\x02\u02CF\xDE\x03\x02\x02\x02\u02D0" + - "\u02D1\x07^\x02\x02\u02D1\u02D2\x07z\x02\x02\u02D2\u02D4\x03\x02\x02\x02" + - "\u02D3\u02D5\x05\xC9d\x02\u02D4\u02D3\x03\x02\x02\x02\u02D5\u02D6\x03" + - "\x02\x02\x02\u02D6\u02D4\x03\x02\x02\x02\u02D6\u02D7\x03\x02\x02\x02\u02D7" + - "\xE0\x03\x02\x02\x02\u02D8\u02DA\x05\xE3q\x02\u02D9\u02D8\x03\x02\x02" + - "\x02\u02DA\u02DB\x03\x02\x02\x02\u02DB\u02D9\x03\x02\x02\x02\u02DB\u02DC" + - "\x03\x02\x02\x02\u02DC\xE2\x03\x02\x02\x02\u02DD\u02E0\n\x11\x02\x02\u02DE" + - "\u02E0\x05\xD9l\x02\u02DF\u02DD\x03\x02\x02\x02\u02DF\u02DE\x03\x02\x02" + - "\x02\u02E0\xE4\x03\x02\x02\x02\u02E1\u02E3\x05\xE7s\x02\u02E2\u02E1\x03" + - "\x02\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\u02E2\x03\x02\x02\x02\u02E4" + - "\u02E5\x03\x02\x02\x02\u02E5\xE6\x03\x02\x02\x02\u02E6\u02E9\n\x12\x02" + - "\x02\u02E7\u02E9\x05\xD9l\x02\u02E8\u02E6\x03\x02\x02\x02\u02E8\u02E7" + - "\x03\x02\x02\x02\u02E9\xE8\x03\x02\x02\x02\u02EA\u02EC\x05\xEBu\x02\u02EB" + - "\u02EA\x03\x02\x02\x02\u02EC\u02ED\x03\x02\x02\x02\u02ED\u02EB\x03\x02" + - "\x02\x02\u02ED\u02EE\x03\x02\x02\x02\u02EE\xEA\x03\x02\x02\x02\u02EF\u02F2" + - "\n\x0F\x02\x02\u02F0\u02F2\x05\xD9l\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1" + - "\u02F0\x03\x02\x02\x02\u02F2\xEC\x03\x02\x02\x02\u02F3\u02F5\x05\xEFw" + - "\x02\u02F4\u02F3\x03\x02\x02\x02\u02F5\u02F6\x03\x02\x02\x02\u02F6\u02F4" + - "\x03\x02\x02\x02\u02F6\u02F7\x03\x02\x02\x02\u02F7\xEE\x03\x02\x02\x02" + - "\u02F8\u02FB\n\x13\x02\x02\u02F9\u02FB\x05\xD9l\x02\u02FA\u02F8\x03\x02" + - "\x02\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\xF0\x03\x02\x02\x02\u02FC\u02FE" + - "\n\x03\x02\x02\u02FD\u02FC\x03\x02\x02\x02\u02FE\u0301\x03\x02\x02\x02" + - "\u02FF\u02FD\x03\x02\x02\x02\u02FF\u0300\x03\x02\x02\x02\u0300\xF2\x03" + - "\x02\x02\x02\u0301\u02FF\x03\x02\x02\x02%\x02\x03\x04\xF9\u0223\u0225" + - "\u022C\u0230\u0236\u023F\u0278\u027F\u0286\u028D\u0299\u029E\u02A1\u02A8" + - "\u02AC\u02B3\u02BA\u02BE\u02C3\u02CB\u02CE\u02D6\u02DB\u02DF\u02E4\u02E8" + - "\u02ED\u02F1\u02F6\u02FA\u02FF\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02" + - "\x02\x03\x02\x03R\x02\x07\x03\x02\x03S\x03\x07\x04\x02\t\x03\x02\x07\x02" + - "\x02\x03U\x04\x03X\x05"; + "\u0201|\x03\x02\x02\x02\u0202\u0203\x07?\x02\x02\u0203\u0204\x07?\x02" + + "\x02\u0204~\x03\x02\x02\x02\u0205\u0206\x07#\x02\x02\u0206\u0207\x07?" + + "\x02\x02\u0207\x80\x03\x02\x02\x02\u0208\u0209\x07>\x02\x02\u0209\x82" + + "\x03\x02\x02\x02\u020A\u020B\x07>\x02\x02\u020B\u020C\x07?\x02\x02\u020C" + + "\x84\x03\x02\x02\x02\u020D\u020E\x07@\x02\x02\u020E\x86\x03\x02\x02\x02" + + "\u020F\u0210\x07@\x02\x02\u0210\u0211\x07?\x02\x02\u0211\x88\x03\x02\x02" + + "\x02\u0212\u0213\x07(\x02\x02\u0213\x8A\x03\x02\x02\x02\u0214\u0215\x07" + + "~\x02\x02\u0215\x8C\x03\x02\x02\x02\u0216\u0217\x07`\x02\x02\u0217\x8E" + + "\x03\x02\x02\x02\u0218\u0219\x07\x80\x02\x02\u0219\x90\x03\x02\x02\x02" + + "\u021A\u021B\x07>\x02\x02\u021B\u021C\x07>\x02\x02\u021C\x92\x03\x02\x02" + + "\x02\u021D\u021E\x07@\x02\x02\u021E\u021F\x07@\x02\x02\u021F\x94\x03\x02" + + "\x02\x02\u0220\u0221\x07@\x02\x02\u0221\u0222\x07@\x02\x02\u0222\u0223" + + "\x07@\x02\x02\u0223\x96\x03\x02\x02\x02\u0224\u0225\x070\x02\x02\u0225" + + "\x98\x03\x02\x02\x02\u0226\u022B\x05\xB7[\x02\u0227\u022A\x05\xB7[\x02" + + "\u0228\u022A\x05\xBB]\x02\u0229\u0227\x03\x02\x02\x02\u0229\u0228\x03" + + "\x02\x02\x02\u022A\u022D\x03\x02\x02\x02\u022B\u0229\x03\x02\x02\x02\u022B" + + "\u022C\x03\x02\x02\x02\u022C\x9A\x03\x02\x02\x02\u022D\u022B\x03\x02\x02" + + "\x02\u022E\u0233\x05\xBD^\x02\u022F\u0233\x05\xC1`\x02\u0230\u0233\x05" + + "\xC3a\x02\u0231\u0233\x05\xBF_\x02\u0232\u022E\x03\x02\x02\x02\u0232\u022F" + + "\x03\x02\x02\x02\u0232\u0230\x03\x02\x02\x02\u0232\u0231\x03\x02\x02\x02" + + "\u0233\x9C\x03\x02\x02\x02\u0234\u0236\x07)\x02\x02\u0235\u0237\x05\xEB" + + "u\x02\u0236\u0235\x03\x02\x02\x02\u0236\u0237\x03\x02\x02\x02\u0237\u0238" + + "\x03\x02\x02\x02\u0238\u0239\x07)\x02\x02\u0239\x9E\x03\x02\x02\x02\u023A" + + "\u023C\x07$\x02\x02\u023B\u023D\x05\xEFw\x02\u023C\u023B\x03\x02\x02\x02" + + "\u023C\u023D\x03\x02\x02\x02\u023D\u023E\x03\x02\x02\x02\u023E\u023F\x07" + + "$\x02\x02\u023F\xA0\x03\x02\x02\x02\u0240\u0241\x05\xCDf\x02\u0241\xA2" + + "\x03\x02\x02\x02\u0242\u0244\t\x02\x02\x02\u0243\u0242\x03\x02\x02\x02" + + "\u0244\u0245\x03\x02\x02\x02\u0245\u0243\x03\x02\x02\x02\u0245\u0246\x03" + + "\x02\x02\x02\u0246\u0247\x03\x02\x02\x02\u0247\u0248\bQ\x05\x02\u0248" + + "\xA4\x03\x02\x02\x02\u0249\u024A\t\x03\x02\x02\u024A\u024B\x03\x02\x02" + + "\x02\u024B\u024C\bR\x05\x02\u024C\xA6\x03\x02\x02\x02\u024D\u024E\x07" + + "h\x02\x02\u024E\u024F\x07)\x02\x02\u024F\u0250\x03\x02\x02\x02\u0250\u0251" + + "\bS\x06\x02\u0251\u0252\x03\x02\x02\x02\u0252\u0253\bS\x07\x02\u0253\xA8" + + "\x03\x02\x02\x02\u0254\u0255\x07h\x02\x02\u0255\u0256\x07$\x02\x02\u0256" + + "\u0257\x03\x02\x02\x02\u0257\u0258\bT\b\x02\u0258\u0259\x03\x02\x02\x02" + + "\u0259\u025A\bT\t\x02\u025A\xAA\x03\x02\x02\x02\u025B\u025C\x06U\x03\x02" + + "\u025C\u025D\x07}\x02\x02\u025D\u025E\x03\x02\x02\x02\u025E\u025F\bU\n" + + "\x02\u025F\u0260\bU\v\x02\u0260\xAC\x03\x02\x02\x02\u0261\u0262\x07)\x02" + + "\x02\u0262\u0263\bV\f\x02\u0263\u0264\x03\x02\x02\x02\u0264\u0265\bV\x04" + + "\x02\u0265\xAE\x03\x02\x02\x02\u0266\u0267\x05\xE3q\x02\u0267\xB0\x03" + + "\x02\x02\x02\u0268\u0269\x06X\x04\x02\u0269\u026A\x07}\x02\x02\u026A\u026B" + + "\x03\x02\x02\x02\u026B\u026C\bX\n\x02\u026C\u026D\bX\v\x02\u026D\xB2\x03" + + "\x02\x02\x02\u026E\u026F\x07$\x02\x02\u026F\u0270\bY\r\x02\u0270\u0271" + + "\x03\x02\x02\x02\u0271\u0272\bY\x04\x02\u0272\xB4\x03\x02\x02\x02\u0273" + + "\u0274\x05\xE7s\x02\u0274\xB6\x03\x02\x02\x02\u0275\u0276\x05\xB9\\\x02" + + "\u0276\xB8\x03\x02\x02\x02\u0277\u0278\t\x04\x02\x02\u0278\xBA\x03\x02" + + "\x02\x02\u0279\u027A\t\x05\x02\x02\u027A\xBC\x03\x02\x02\x02\u027B\u027D" + + "\x05\xBB]\x02\u027C\u027B\x03\x02\x02\x02\u027D\u027E\x03\x02\x02\x02" + + "\u027E\u027C\x03\x02\x02\x02\u027E\u027F\x03\x02\x02\x02\u027F\xBE\x03" + + "\x02\x02\x02\u0280\u0281\x072\x02\x02\u0281\u0283\t\x06\x02\x02\u0282" + + "\u0284\x05\xC7c\x02\u0283\u0282\x03\x02\x02\x02\u0284\u0285\x03\x02\x02" + + "\x02\u0285\u0283\x03\x02\x02\x02\u0285\u0286\x03\x02\x02\x02\u0286\xC0" + + "\x03\x02\x02\x02\u0287\u0288\x072\x02\x02\u0288\u028A\t\x07\x02\x02\u0289" + + "\u028B\x05\xC9d\x02\u028A\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02" + + "\x02\u028C\u028A\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\xC2" + + "\x03\x02\x02\x02\u028E\u028F\x072\x02\x02\u028F\u0291\t\b\x02\x02\u0290" + + "\u0292\x05\xCBe\x02\u0291\u0290\x03\x02\x02\x02\u0292\u0293\x03\x02\x02" + + "\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02\x02\x02\u0294\xC4" + + "\x03\x02\x02\x02\u0295\u0296\t\t\x02\x02\u0296\xC6\x03\x02\x02\x02\u0297" + + "\u0298\t\n\x02\x02\u0298\xC8\x03\x02\x02\x02\u0299\u029A\t\v\x02\x02\u029A" + + "\xCA\x03\x02\x02\x02\u029B\u029C\t\f\x02\x02\u029C\xCC\x03\x02\x02\x02" + + "\u029D\u029F\x05\xCFg\x02\u029E\u02A0\x05\xD1h\x02\u029F\u029E\x03\x02" + + "\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\u02A5\x03\x02\x02\x02\u02A1" + + "\u02A2\x05\xD3i\x02\u02A2\u02A3\x05\xD1h\x02\u02A3\u02A5\x03\x02\x02\x02" + + "\u02A4\u029D\x03\x02\x02\x02\u02A4\u02A1\x03\x02\x02\x02\u02A5\xCE\x03" + + "\x02\x02\x02\u02A6\u02A8\x05\xD3i\x02\u02A7\u02A6\x03\x02\x02\x02\u02A7" + + "\u02A8\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9\u02AA\x070\x02" + + "\x02\u02AA\u02AF\x05\xD3i\x02\u02AB\u02AC\x05\xD3i\x02\u02AC\u02AD\x07" + + "0\x02\x02\u02AD\u02AF\x03\x02\x02\x02\u02AE\u02A7\x03\x02\x02\x02\u02AE" + + "\u02AB\x03\x02\x02\x02\u02AF\xD0\x03\x02\x02\x02\u02B0\u02B2\t\r\x02\x02" + + "\u02B1\u02B3\x05\xD5j\x02\u02B2\u02B1\x03\x02\x02\x02\u02B2\u02B3\x03" + + "\x02\x02\x02\u02B3\u02B4\x03\x02\x02\x02\u02B4\u02B5\x05\xD3i\x02\u02B5" + + "\xD2\x03\x02\x02\x02\u02B6\u02B8\x05\xBB]\x02\u02B7\u02B6\x03\x02\x02" + + "\x02\u02B8\u02B9\x03\x02\x02\x02\u02B9\u02B7\x03\x02\x02\x02\u02B9\u02BA" + + "\x03\x02\x02\x02\u02BA\xD4\x03\x02\x02\x02\u02BB\u02BC\t\x0E\x02\x02\u02BC" + + "\xD6\x03\x02\x02\x02\u02BD\u02BF\x05\xD9l\x02\u02BE\u02BD\x03\x02\x02" + + "\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" + + "\x03\x02\x02\x02\u02C1\xD8\x03\x02\x02\x02\u02C2\u02C5\n\x0F\x02\x02\u02C3" + + "\u02C5\x05\xDBm\x02\u02C4\u02C2\x03\x02\x02\x02\u02C4\u02C3\x03\x02\x02" + + "\x02\u02C5\xDA\x03\x02\x02\x02\u02C6\u02CA\x05\xDDn\x02\u02C7\u02CA\x05" + + "\xDFo\x02\u02C8\u02CA\x05\xE1p\x02\u02C9\u02C6\x03\x02\x02\x02\u02C9\u02C7" + + "\x03\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\xDC\x03\x02\x02\x02" + + "\u02CB\u02CC\x07^\x02\x02\u02CC\u02CD\t\x10\x02\x02\u02CD\xDE\x03\x02" + + "\x02\x02\u02CE\u02CF\x07^\x02\x02\u02CF\u02D1\x05\xC9d\x02\u02D0\u02D2" + + "\x05\xC9d\x02\u02D1\u02D0\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02" + + "\u02D2\u02D4\x03\x02\x02\x02\u02D3\u02D5\x05\xC9d\x02\u02D4\u02D3\x03" + + "\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\xE0\x03\x02\x02\x02\u02D6" + + "\u02D7\x07^\x02\x02\u02D7\u02D8\x07z\x02\x02\u02D8\u02DA\x03\x02\x02\x02" + + "\u02D9\u02DB\x05\xCBe\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03" + + "\x02\x02\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD" + + "\xE2\x03\x02\x02\x02\u02DE\u02E0\x05\xE5r\x02\u02DF\u02DE\x03\x02\x02" + + "\x02\u02E0\u02E1\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2" + + "\x03\x02\x02\x02\u02E2\xE4\x03\x02\x02\x02\u02E3\u02E6\n\x11\x02\x02\u02E4" + + "\u02E6\x05\xDBm\x02\u02E5\u02E3\x03\x02\x02\x02\u02E5\u02E4\x03\x02\x02" + + "\x02\u02E6\xE6\x03\x02\x02\x02\u02E7\u02E9\x05\xE9t\x02\u02E8\u02E7\x03" + + "\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02\u02EA\u02E8\x03\x02\x02\x02\u02EA" + + "\u02EB\x03\x02\x02\x02\u02EB\xE8\x03\x02\x02\x02\u02EC\u02EF\n\x12\x02" + + "\x02\u02ED\u02EF\x05\xDBm\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02ED" + + "\x03\x02\x02\x02\u02EF\xEA\x03\x02\x02\x02\u02F0\u02F2\x05\xEDv\x02\u02F1" + + "\u02F0\x03\x02\x02\x02\u02F2\u02F3\x03\x02\x02\x02\u02F3\u02F1\x03\x02" + + "\x02\x02\u02F3\u02F4\x03\x02\x02\x02\u02F4\xEC\x03\x02\x02\x02\u02F5\u02F8" + + "\n\x0F\x02\x02\u02F6\u02F8\x05\xDBm\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7" + + "\u02F6\x03\x02\x02\x02\u02F8\xEE\x03\x02\x02\x02\u02F9\u02FB\x05\xF1x" + + "\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FC\u02FA" + + "\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\xF0\x03\x02\x02\x02" + + "\u02FE\u0301\n\x13\x02\x02\u02FF\u0301\x05\xDBm\x02\u0300\u02FE\x03\x02" + + "\x02\x02\u0300\u02FF\x03\x02\x02\x02\u0301\xF2\x03\x02\x02\x02\u0302\u0304" + + "\n\x03\x02\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02" + + "\u0305\u0303\x03\x02\x02\x02\u0305\u0306\x03\x02\x02\x02\u0306\xF4\x03" + + "\x02\x02\x02\u0307\u0305\x03\x02\x02\x02%\x02\x03\x04\xFB\u0229\u022B" + + "\u0232\u0236\u023C\u0245\u027E\u0285\u028C\u0293\u029F\u02A4\u02A7\u02AE" + + "\u02B2\u02B9\u02C0\u02C4\u02C9\u02D1\u02D4\u02DC\u02E1\u02E5\u02EA\u02EE" + + "\u02F3\u02F7\u02FC\u0300\u0305\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02" + + "\x02\x03\x02\x03S\x02\x07\x03\x02\x03T\x03\x07\x04\x02\t\x03\x02\x07\x02" + + "\x02\x03V\x04\x03Y\x05"; public static readonly _serializedATN: string = Utils.join( [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], "", diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index f24c59a9b..3e6e25d9c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -26,6 +26,7 @@ null 'class' 'interface' 'constructor' +'new' 'true' 'false' 'typeof' @@ -116,6 +117,7 @@ RetIndicator Class Interface Constructor +New True False Typeof @@ -268,4 +270,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 89, 802, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 3, 2, 5, 2, 176, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 181, 10, 3, 13, 3, 14, 3, 182, 3, 4, 3, 4, 3, 5, 6, 5, 188, 10, 5, 13, 5, 14, 5, 189, 3, 6, 3, 6, 3, 6, 5, 6, 195, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 203, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 215, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 227, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 233, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 238, 10, 15, 12, 15, 14, 15, 241, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 251, 10, 17, 12, 17, 14, 17, 254, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 260, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 270, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 282, 10, 21, 12, 21, 14, 21, 285, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 292, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 301, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 307, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 312, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 323, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 328, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 339, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 348, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 356, 10, 31, 12, 31, 14, 31, 359, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 371, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 376, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 382, 10, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 392, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 398, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 422, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 436, 10, 39, 3, 40, 3, 40, 5, 40, 440, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 448, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 462, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 468, 10, 47, 12, 47, 14, 47, 471, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 476, 10, 47, 12, 47, 14, 47, 479, 11, 47, 3, 47, 5, 47, 482, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 487, 10, 48, 3, 48, 5, 48, 490, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 495, 10, 49, 3, 49, 5, 49, 498, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 506, 10, 51, 12, 51, 14, 51, 509, 11, 51, 5, 51, 511, 10, 51, 3, 51, 5, 51, 514, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 522, 10, 52, 12, 52, 14, 52, 525, 11, 52, 5, 52, 527, 10, 52, 3, 52, 5, 52, 530, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 546, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 551, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 556, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 7, 55, 572, 10, 55, 12, 55, 14, 55, 575, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 580, 10, 56, 12, 56, 14, 56, 583, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 596, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 602, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 5, 60, 608, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 5, 62, 616, 10, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 633, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 641, 10, 68, 12, 68, 14, 68, 644, 11, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 652, 10, 69, 12, 69, 14, 69, 655, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 664, 10, 70, 12, 70, 14, 70, 667, 11, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 677, 10, 72, 12, 72, 14, 72, 680, 11, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 688, 10, 73, 12, 73, 14, 73, 691, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 699, 10, 74, 12, 74, 14, 74, 702, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 710, 10, 75, 12, 75, 14, 75, 713, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 721, 10, 76, 12, 76, 14, 76, 724, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 732, 10, 77, 12, 77, 14, 77, 735, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 743, 10, 78, 12, 78, 14, 78, 746, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 755, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 762, 10, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 7, 82, 769, 10, 82, 12, 82, 14, 82, 772, 11, 82, 3, 83, 3, 83, 3, 83, 5, 83, 777, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 7, 85, 786, 10, 85, 12, 85, 14, 85, 789, 11, 85, 5, 85, 791, 10, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 2, 2, 13, 108, 134, 136, 138, 142, 144, 146, 148, 150, 152, 154, 88, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 29, 30, 3, 2, 79, 80, 4, 2, 78, 78, 81, 81, 3, 2, 32, 34, 4, 2, 47, 47, 49, 49, 6, 2, 46, 46, 48, 48, 56, 56, 72, 72, 3, 2, 50, 53, 4, 2, 46, 46, 48, 48, 3, 2, 73, 75, 3, 2, 65, 68, 3, 2, 63, 64, 3, 2, 57, 62, 4, 2, 32, 34, 77, 77, 2, 810, 2, 175, 3, 2, 2, 2, 4, 180, 3, 2, 2, 2, 6, 184, 3, 2, 2, 2, 8, 187, 3, 2, 2, 2, 10, 194, 3, 2, 2, 2, 12, 202, 3, 2, 2, 2, 14, 204, 3, 2, 2, 2, 16, 207, 3, 2, 2, 2, 18, 209, 3, 2, 2, 2, 20, 216, 3, 2, 2, 2, 22, 218, 3, 2, 2, 2, 24, 220, 3, 2, 2, 2, 26, 222, 3, 2, 2, 2, 28, 234, 3, 2, 2, 2, 30, 242, 3, 2, 2, 2, 32, 246, 3, 2, 2, 2, 34, 259, 3, 2, 2, 2, 36, 261, 3, 2, 2, 2, 38, 266, 3, 2, 2, 2, 40, 276, 3, 2, 2, 2, 42, 291, 3, 2, 2, 2, 44, 293, 3, 2, 2, 2, 46, 297, 3, 2, 2, 2, 48, 308, 3, 2, 2, 2, 50, 322, 3, 2, 2, 2, 52, 324, 3, 2, 2, 2, 54, 331, 3, 2, 2, 2, 56, 338, 3, 2, 2, 2, 58, 340, 3, 2, 2, 2, 60, 349, 3, 2, 2, 2, 62, 370, 3, 2, 2, 2, 64, 375, 3, 2, 2, 2, 66, 377, 3, 2, 2, 2, 68, 402, 3, 2, 2, 2, 70, 408, 3, 2, 2, 2, 72, 416, 3, 2, 2, 2, 74, 419, 3, 2, 2, 2, 76, 435, 3, 2, 2, 2, 78, 437, 3, 2, 2, 2, 80, 449, 3, 2, 2, 2, 82, 453, 3, 2, 2, 2, 84, 455, 3, 2, 2, 2, 86, 457, 3, 2, 2, 2, 88, 461, 3, 2, 2, 2, 90, 463, 3, 2, 2, 2, 92, 481, 3, 2, 2, 2, 94, 489, 3, 2, 2, 2, 96, 497, 3, 2, 2, 2, 98, 499, 3, 2, 2, 2, 100, 501, 3, 2, 2, 2, 102, 517, 3, 2, 2, 2, 104, 533, 3, 2, 2, 2, 106, 537, 3, 2, 2, 2, 108, 550, 3, 2, 2, 2, 110, 576, 3, 2, 2, 2, 112, 584, 3, 2, 2, 2, 114, 587, 3, 2, 2, 2, 116, 591, 3, 2, 2, 2, 118, 607, 3, 2, 2, 2, 120, 609, 3, 2, 2, 2, 122, 615, 3, 2, 2, 2, 124, 617, 3, 2, 2, 2, 126, 620, 3, 2, 2, 2, 128, 623, 3, 2, 2, 2, 130, 625, 3, 2, 2, 2, 132, 632, 3, 2, 2, 2, 134, 634, 3, 2, 2, 2, 136, 645, 3, 2, 2, 2, 138, 656, 3, 2, 2, 2, 140, 668, 3, 2, 2, 2, 142, 670, 3, 2, 2, 2, 144, 681, 3, 2, 2, 2, 146, 692, 3, 2, 2, 2, 148, 703, 3, 2, 2, 2, 150, 714, 3, 2, 2, 2, 152, 725, 3, 2, 2, 2, 154, 736, 3, 2, 2, 2, 156, 754, 3, 2, 2, 2, 158, 761, 3, 2, 2, 2, 160, 763, 3, 2, 2, 2, 162, 765, 3, 2, 2, 2, 164, 776, 3, 2, 2, 2, 166, 778, 3, 2, 2, 2, 168, 780, 3, 2, 2, 2, 170, 794, 3, 2, 2, 2, 172, 799, 3, 2, 2, 2, 174, 176, 5, 4, 3, 2, 175, 174, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 2, 2, 3, 178, 3, 3, 2, 2, 2, 179, 181, 5, 6, 4, 2, 180, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 5, 3, 2, 2, 2, 184, 185, 5, 8, 5, 2, 185, 7, 3, 2, 2, 2, 186, 188, 5, 10, 6, 2, 187, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 9, 3, 2, 2, 2, 191, 195, 5, 50, 26, 2, 192, 195, 5, 12, 7, 2, 193, 195, 7, 36, 2, 2, 194, 191, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 193, 3, 2, 2, 2, 195, 11, 3, 2, 2, 2, 196, 197, 5, 14, 8, 2, 197, 198, 7, 36, 2, 2, 198, 203, 3, 2, 2, 2, 199, 203, 5, 26, 14, 2, 200, 203, 5, 32, 17, 2, 201, 203, 5, 40, 21, 2, 202, 196, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 201, 3, 2, 2, 2, 203, 13, 3, 2, 2, 2, 204, 205, 5, 16, 9, 2, 205, 206, 5, 18, 10, 2, 206, 15, 3, 2, 2, 2, 207, 208, 9, 2, 2, 2, 208, 17, 3, 2, 2, 2, 209, 210, 5, 22, 12, 2, 210, 211, 7, 38, 2, 2, 211, 214, 5, 164, 83, 2, 212, 213, 7, 57, 2, 2, 213, 215, 5, 20, 11, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 19, 3, 2, 2, 2, 216, 217, 5, 158, 80, 2, 217, 21, 3, 2, 2, 2, 218, 219, 5, 24, 13, 2, 219, 23, 3, 2, 2, 2, 220, 221, 7, 77, 2, 2, 221, 25, 3, 2, 2, 2, 222, 223, 7, 22, 2, 2, 223, 224, 5, 22, 12, 2, 224, 226, 7, 39, 2, 2, 225, 227, 5, 28, 15, 2, 226, 225, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 7, 40, 2, 2, 229, 230, 7, 25, 2, 2, 230, 232, 5, 164, 83, 2, 231, 233, 5, 52, 27, 2, 232, 231, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 27, 3, 2, 2, 2, 234, 239, 5, 30, 16, 2, 235, 236, 7, 35, 2, 2, 236, 238, 5, 30, 16, 2, 237, 235, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 29, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 5, 22, 12, 2, 243, 244, 7, 38, 2, 2, 244, 245, 5, 164, 83, 2, 245, 31, 3, 2, 2, 2, 246, 247, 7, 27, 2, 2, 247, 248, 5, 22, 12, 2, 248, 252, 7, 44, 2, 2, 249, 251, 5, 34, 18, 2, 250, 249, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 45, 2, 2, 256, 33, 3, 2, 2, 2, 257, 260, 5, 36, 19, 2, 258, 260, 5, 38, 20, 2, 259, 257, 3, 2, 2, 2, 259, 258, 3, 2, 2, 2, 260, 35, 3, 2, 2, 2, 261, 262, 5, 22, 12, 2, 262, 263, 7, 38, 2, 2, 263, 264, 5, 164, 83, 2, 264, 265, 7, 36, 2, 2, 265, 37, 3, 2, 2, 2, 266, 267, 5, 22, 12, 2, 267, 269, 7, 39, 2, 2, 268, 270, 5, 28, 15, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 7, 40, 2, 2, 272, 273, 7, 38, 2, 2, 273, 274, 5, 164, 83, 2, 274, 275, 7, 36, 2, 2, 275, 39, 3, 2, 2, 2, 276, 277, 7, 26, 2, 2, 277, 278, 5, 22, 12, 2, 278, 283, 7, 44, 2, 2, 279, 282, 5, 42, 22, 2, 280, 282, 7, 36, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 285, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 286, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 286, 287, 7, 45, 2, 2, 287, 41, 3, 2, 2, 2, 288, 292, 5, 44, 23, 2, 289, 292, 5, 46, 24, 2, 290, 292, 5, 48, 25, 2, 291, 288, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 291, 290, 3, 2, 2, 2, 292, 43, 3, 2, 2, 2, 293, 294, 5, 22, 12, 2, 294, 295, 7, 38, 2, 2, 295, 296, 5, 164, 83, 2, 296, 45, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 300, 7, 39, 2, 2, 299, 301, 5, 28, 15, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 40, 2, 2, 303, 304, 7, 38, 2, 2, 304, 306, 5, 164, 83, 2, 305, 307, 5, 52, 27, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 47, 3, 2, 2, 2, 308, 309, 7, 28, 2, 2, 309, 311, 7, 39, 2, 2, 310, 312, 5, 28, 15, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 7, 40, 2, 2, 314, 315, 5, 52, 27, 2, 315, 49, 3, 2, 2, 2, 316, 323, 5, 54, 28, 2, 317, 323, 5, 56, 29, 2, 318, 323, 5, 64, 33, 2, 319, 323, 5, 72, 37, 2, 320, 323, 5, 74, 38, 2, 321, 323, 5, 52, 27, 2, 322, 316, 3, 2, 2, 2, 322, 317, 3, 2, 2, 2, 322, 318, 3, 2, 2, 2, 322, 319, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 321, 3, 2, 2, 2, 323, 51, 3, 2, 2, 2, 324, 325, 6, 27, 2, 2, 325, 327, 7, 44, 2, 2, 326, 328, 5, 8, 5, 2, 327, 326, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 7, 45, 2, 2, 330, 53, 3, 2, 2, 2, 331, 332, 8, 28, 1, 2, 332, 333, 5, 162, 82, 2, 333, 334, 7, 36, 2, 2, 334, 335, 8, 28, 1, 2, 335, 55, 3, 2, 2, 2, 336, 339, 5, 58, 30, 2, 337, 339, 5, 60, 31, 2, 338, 336, 3, 2, 2, 2, 338, 337, 3, 2, 2, 2, 339, 57, 3, 2, 2, 2, 340, 341, 7, 18, 2, 2, 341, 342, 7, 39, 2, 2, 342, 343, 5, 162, 82, 2, 343, 344, 7, 40, 2, 2, 344, 347, 5, 50, 26, 2, 345, 346, 7, 19, 2, 2, 346, 348, 5, 50, 26, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 59, 3, 2, 2, 2, 349, 350, 7, 11, 2, 2, 350, 351, 7, 39, 2, 2, 351, 352, 5, 162, 82, 2, 352, 353, 7, 40, 2, 2, 353, 357, 7, 44, 2, 2, 354, 356, 5, 62, 32, 2, 355, 354, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 360, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 360, 361, 7, 45, 2, 2, 361, 61, 3, 2, 2, 2, 362, 363, 7, 12, 2, 2, 363, 364, 5, 162, 82, 2, 364, 365, 7, 38, 2, 2, 365, 366, 5, 50, 26, 2, 366, 371, 3, 2, 2, 2, 367, 368, 7, 13, 2, 2, 368, 369, 7, 38, 2, 2, 369, 371, 5, 50, 26, 2, 370, 362, 3, 2, 2, 2, 370, 367, 3, 2, 2, 2, 371, 63, 3, 2, 2, 2, 372, 376, 5, 66, 34, 2, 373, 376, 5, 68, 35, 2, 374, 376, 5, 70, 36, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 65, 3, 2, 2, 2, 377, 378, 7, 20, 2, 2, 378, 385, 7, 39, 2, 2, 379, 382, 5, 14, 8, 2, 380, 382, 5, 162, 82, 2, 381, 379, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 8, 34, 1, 2, 384, 386, 3, 2, 2, 2, 385, 381, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 391, 7, 36, 2, 2, 388, 389, 5, 162, 82, 2, 389, 390, 8, 34, 1, 2, 390, 392, 3, 2, 2, 2, 391, 388, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 7, 36, 2, 2, 394, 395, 5, 162, 82, 2, 395, 396, 8, 34, 1, 2, 396, 398, 3, 2, 2, 2, 397, 394, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 7, 40, 2, 2, 400, 401, 5, 50, 26, 2, 401, 67, 3, 2, 2, 2, 402, 403, 7, 17, 2, 2, 403, 404, 7, 39, 2, 2, 404, 405, 5, 162, 82, 2, 405, 406, 7, 40, 2, 2, 406, 407, 5, 50, 26, 2, 407, 69, 3, 2, 2, 2, 408, 409, 7, 16, 2, 2, 409, 410, 5, 50, 26, 2, 410, 411, 7, 17, 2, 2, 411, 412, 7, 39, 2, 2, 412, 413, 5, 162, 82, 2, 413, 414, 7, 40, 2, 2, 414, 415, 7, 36, 2, 2, 415, 71, 3, 2, 2, 2, 416, 417, 9, 3, 2, 2, 417, 418, 7, 36, 2, 2, 418, 73, 3, 2, 2, 2, 419, 421, 7, 23, 2, 2, 420, 422, 5, 162, 82, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 36, 2, 2, 424, 75, 3, 2, 2, 2, 425, 436, 5, 80, 41, 2, 426, 436, 5, 78, 40, 2, 427, 436, 5, 100, 51, 2, 428, 436, 5, 102, 52, 2, 429, 436, 5, 82, 42, 2, 430, 436, 5, 84, 43, 2, 431, 436, 5, 90, 46, 2, 432, 436, 5, 92, 47, 2, 433, 436, 5, 98, 50, 2, 434, 436, 5, 106, 54, 2, 435, 425, 3, 2, 2, 2, 435, 426, 3, 2, 2, 2, 435, 427, 3, 2, 2, 2, 435, 428, 3, 2, 2, 2, 435, 429, 3, 2, 2, 2, 435, 430, 3, 2, 2, 2, 435, 431, 3, 2, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 434, 3, 2, 2, 2, 436, 77, 3, 2, 2, 2, 437, 439, 7, 39, 2, 2, 438, 440, 5, 28, 15, 2, 439, 438, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 7, 40, 2, 2, 442, 443, 7, 38, 2, 2, 443, 444, 5, 164, 83, 2, 444, 447, 7, 25, 2, 2, 445, 448, 5, 162, 82, 2, 446, 448, 5, 52, 27, 2, 447, 445, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 79, 3, 2, 2, 2, 449, 450, 7, 39, 2, 2, 450, 451, 5, 162, 82, 2, 451, 452, 7, 40, 2, 2, 452, 81, 3, 2, 2, 2, 453, 454, 9, 4, 2, 2, 454, 83, 3, 2, 2, 2, 455, 456, 5, 86, 44, 2, 456, 85, 3, 2, 2, 2, 457, 458, 7, 77, 2, 2, 458, 87, 3, 2, 2, 2, 459, 462, 5, 86, 44, 2, 460, 462, 5, 90, 46, 2, 461, 459, 3, 2, 2, 2, 461, 460, 3, 2, 2, 2, 462, 89, 3, 2, 2, 2, 463, 464, 9, 5, 2, 2, 464, 91, 3, 2, 2, 2, 465, 469, 7, 84, 2, 2, 466, 468, 5, 94, 48, 2, 467, 466, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 472, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 482, 7, 86, 2, 2, 473, 477, 7, 85, 2, 2, 474, 476, 5, 96, 49, 2, 475, 474, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 480, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 480, 482, 7, 88, 2, 2, 481, 465, 3, 2, 2, 2, 481, 473, 3, 2, 2, 2, 482, 93, 3, 2, 2, 2, 483, 490, 7, 87, 2, 2, 484, 486, 7, 3, 2, 2, 485, 487, 5, 162, 82, 2, 486, 485, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 490, 7, 43, 2, 2, 489, 483, 3, 2, 2, 2, 489, 484, 3, 2, 2, 2, 490, 95, 3, 2, 2, 2, 491, 498, 7, 89, 2, 2, 492, 494, 7, 3, 2, 2, 493, 495, 5, 162, 82, 2, 494, 493, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 7, 43, 2, 2, 497, 491, 3, 2, 2, 2, 497, 492, 3, 2, 2, 2, 498, 97, 3, 2, 2, 2, 499, 500, 9, 6, 2, 2, 500, 99, 3, 2, 2, 2, 501, 510, 7, 41, 2, 2, 502, 507, 5, 162, 82, 2, 503, 504, 7, 35, 2, 2, 504, 506, 5, 162, 82, 2, 505, 503, 3, 2, 2, 2, 506, 509, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 510, 502, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 513, 3, 2, 2, 2, 512, 514, 7, 35, 2, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 7, 42, 2, 2, 516, 101, 3, 2, 2, 2, 517, 526, 7, 44, 2, 2, 518, 523, 5, 104, 53, 2, 519, 520, 7, 35, 2, 2, 520, 522, 5, 104, 53, 2, 521, 519, 3, 2, 2, 2, 522, 525, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 523, 524, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 526, 518, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 529, 3, 2, 2, 2, 528, 530, 7, 35, 2, 2, 529, 528, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 7, 45, 2, 2, 532, 103, 3, 2, 2, 2, 533, 534, 5, 88, 45, 2, 534, 535, 7, 38, 2, 2, 535, 536, 5, 162, 82, 2, 536, 105, 3, 2, 2, 2, 537, 538, 9, 7, 2, 2, 538, 107, 3, 2, 2, 2, 539, 540, 8, 55, 1, 2, 540, 551, 5, 76, 39, 2, 541, 542, 7, 24, 2, 2, 542, 543, 5, 108, 55, 2, 543, 545, 7, 39, 2, 2, 544, 546, 5, 110, 56, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 7, 40, 2, 2, 548, 549, 8, 55, 1, 2, 549, 551, 3, 2, 2, 2, 550, 539, 3, 2, 2, 2, 550, 541, 3, 2, 2, 2, 551, 573, 3, 2, 2, 2, 552, 553, 12, 7, 2, 2, 553, 555, 7, 39, 2, 2, 554, 556, 5, 110, 56, 2, 555, 554, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 7, 40, 2, 2, 558, 572, 8, 55, 1, 2, 559, 560, 12, 5, 2, 2, 560, 561, 5, 112, 57, 2, 561, 562, 8, 55, 1, 2, 562, 572, 3, 2, 2, 2, 563, 564, 12, 4, 2, 2, 564, 565, 5, 114, 58, 2, 565, 566, 8, 55, 1, 2, 566, 572, 3, 2, 2, 2, 567, 568, 12, 3, 2, 2, 568, 569, 5, 116, 59, 2, 569, 570, 8, 55, 1, 2, 570, 572, 3, 2, 2, 2, 571, 552, 3, 2, 2, 2, 571, 559, 3, 2, 2, 2, 571, 563, 3, 2, 2, 2, 571, 567, 3, 2, 2, 2, 572, 575, 3, 2, 2, 2, 573, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 109, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 576, 581, 5, 158, 80, 2, 577, 578, 7, 35, 2, 2, 578, 580, 5, 158, 80, 2, 579, 577, 3, 2, 2, 2, 580, 583, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 111, 3, 2, 2, 2, 583, 581, 3, 2, 2, 2, 584, 585, 7, 76, 2, 2, 585, 586, 5, 86, 44, 2, 586, 113, 3, 2, 2, 2, 587, 588, 7, 41, 2, 2, 588, 589, 5, 162, 82, 2, 589, 590, 7, 42, 2, 2, 590, 115, 3, 2, 2, 2, 591, 595, 7, 41, 2, 2, 592, 593, 5, 162, 82, 2, 593, 594, 8, 59, 1, 2, 594, 596, 3, 2, 2, 2, 595, 592, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 601, 7, 38, 2, 2, 598, 599, 5, 162, 82, 2, 599, 600, 8, 59, 1, 2, 600, 602, 3, 2, 2, 2, 601, 598, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 604, 7, 42, 2, 2, 604, 117, 3, 2, 2, 2, 605, 608, 5, 108, 55, 2, 606, 608, 5, 120, 61, 2, 607, 605, 3, 2, 2, 2, 607, 606, 3, 2, 2, 2, 608, 119, 3, 2, 2, 2, 609, 610, 5, 108, 55, 2, 610, 611, 5, 128, 65, 2, 611, 121, 3, 2, 2, 2, 612, 616, 5, 118, 60, 2, 613, 616, 5, 124, 63, 2, 614, 616, 5, 126, 64, 2, 615, 612, 3, 2, 2, 2, 615, 613, 3, 2, 2, 2, 615, 614, 3, 2, 2, 2, 616, 123, 3, 2, 2, 2, 617, 618, 5, 128, 65, 2, 618, 619, 5, 118, 60, 2, 619, 125, 3, 2, 2, 2, 620, 621, 5, 130, 66, 2, 621, 622, 5, 118, 60, 2, 622, 127, 3, 2, 2, 2, 623, 624, 9, 8, 2, 2, 624, 129, 3, 2, 2, 2, 625, 626, 9, 9, 2, 2, 626, 131, 3, 2, 2, 2, 627, 633, 5, 122, 62, 2, 628, 629, 5, 122, 62, 2, 629, 630, 7, 9, 2, 2, 630, 631, 5, 164, 83, 2, 631, 633, 3, 2, 2, 2, 632, 627, 3, 2, 2, 2, 632, 628, 3, 2, 2, 2, 633, 133, 3, 2, 2, 2, 634, 635, 8, 68, 1, 2, 635, 636, 5, 132, 67, 2, 636, 642, 3, 2, 2, 2, 637, 638, 12, 3, 2, 2, 638, 639, 9, 10, 2, 2, 639, 641, 5, 132, 67, 2, 640, 637, 3, 2, 2, 2, 641, 644, 3, 2, 2, 2, 642, 640, 3, 2, 2, 2, 642, 643, 3, 2, 2, 2, 643, 135, 3, 2, 2, 2, 644, 642, 3, 2, 2, 2, 645, 646, 8, 69, 1, 2, 646, 647, 5, 134, 68, 2, 647, 653, 3, 2, 2, 2, 648, 649, 12, 3, 2, 2, 649, 650, 9, 11, 2, 2, 650, 652, 5, 134, 68, 2, 651, 648, 3, 2, 2, 2, 652, 655, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 653, 654, 3, 2, 2, 2, 654, 137, 3, 2, 2, 2, 655, 653, 3, 2, 2, 2, 656, 657, 8, 70, 1, 2, 657, 658, 5, 136, 69, 2, 658, 665, 3, 2, 2, 2, 659, 660, 12, 3, 2, 2, 660, 661, 5, 140, 71, 2, 661, 662, 5, 146, 74, 2, 662, 664, 3, 2, 2, 2, 663, 659, 3, 2, 2, 2, 664, 667, 3, 2, 2, 2, 665, 663, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 139, 3, 2, 2, 2, 667, 665, 3, 2, 2, 2, 668, 669, 9, 12, 2, 2, 669, 141, 3, 2, 2, 2, 670, 671, 8, 72, 1, 2, 671, 672, 5, 138, 70, 2, 672, 678, 3, 2, 2, 2, 673, 674, 12, 3, 2, 2, 674, 675, 9, 13, 2, 2, 675, 677, 5, 138, 70, 2, 676, 673, 3, 2, 2, 2, 677, 680, 3, 2, 2, 2, 678, 676, 3, 2, 2, 2, 678, 679, 3, 2, 2, 2, 679, 143, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 681, 682, 8, 73, 1, 2, 682, 683, 5, 142, 72, 2, 683, 689, 3, 2, 2, 2, 684, 685, 12, 3, 2, 2, 685, 686, 9, 14, 2, 2, 686, 688, 5, 142, 72, 2, 687, 684, 3, 2, 2, 2, 688, 691, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 145, 3, 2, 2, 2, 691, 689, 3, 2, 2, 2, 692, 693, 8, 74, 1, 2, 693, 694, 5, 144, 73, 2, 694, 700, 3, 2, 2, 2, 695, 696, 12, 3, 2, 2, 696, 697, 7, 69, 2, 2, 697, 699, 5, 144, 73, 2, 698, 695, 3, 2, 2, 2, 699, 702, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 700, 701, 3, 2, 2, 2, 701, 147, 3, 2, 2, 2, 702, 700, 3, 2, 2, 2, 703, 704, 8, 75, 1, 2, 704, 705, 5, 146, 74, 2, 705, 711, 3, 2, 2, 2, 706, 707, 12, 3, 2, 2, 707, 708, 7, 71, 2, 2, 708, 710, 5, 146, 74, 2, 709, 706, 3, 2, 2, 2, 710, 713, 3, 2, 2, 2, 711, 709, 3, 2, 2, 2, 711, 712, 3, 2, 2, 2, 712, 149, 3, 2, 2, 2, 713, 711, 3, 2, 2, 2, 714, 715, 8, 76, 1, 2, 715, 716, 5, 148, 75, 2, 716, 722, 3, 2, 2, 2, 717, 718, 12, 3, 2, 2, 718, 719, 7, 70, 2, 2, 719, 721, 5, 148, 75, 2, 720, 717, 3, 2, 2, 2, 721, 724, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 722, 723, 3, 2, 2, 2, 723, 151, 3, 2, 2, 2, 724, 722, 3, 2, 2, 2, 725, 726, 8, 77, 1, 2, 726, 727, 5, 150, 76, 2, 727, 733, 3, 2, 2, 2, 728, 729, 12, 3, 2, 2, 729, 730, 7, 54, 2, 2, 730, 732, 5, 150, 76, 2, 731, 728, 3, 2, 2, 2, 732, 735, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 733, 734, 3, 2, 2, 2, 734, 153, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 736, 737, 8, 78, 1, 2, 737, 738, 5, 152, 77, 2, 738, 744, 3, 2, 2, 2, 739, 740, 12, 3, 2, 2, 740, 741, 7, 55, 2, 2, 741, 743, 5, 152, 77, 2, 742, 739, 3, 2, 2, 2, 743, 746, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 155, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 747, 755, 5, 154, 78, 2, 748, 749, 5, 154, 78, 2, 749, 750, 7, 37, 2, 2, 750, 751, 5, 156, 79, 2, 751, 752, 7, 38, 2, 2, 752, 753, 5, 156, 79, 2, 753, 755, 3, 2, 2, 2, 754, 747, 3, 2, 2, 2, 754, 748, 3, 2, 2, 2, 755, 157, 3, 2, 2, 2, 756, 762, 5, 156, 79, 2, 757, 758, 5, 108, 55, 2, 758, 759, 5, 160, 81, 2, 759, 760, 5, 158, 80, 2, 760, 762, 3, 2, 2, 2, 761, 756, 3, 2, 2, 2, 761, 757, 3, 2, 2, 2, 762, 159, 3, 2, 2, 2, 763, 764, 9, 15, 2, 2, 764, 161, 3, 2, 2, 2, 765, 770, 5, 158, 80, 2, 766, 767, 7, 35, 2, 2, 767, 769, 5, 158, 80, 2, 768, 766, 3, 2, 2, 2, 769, 772, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 163, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 773, 777, 5, 166, 84, 2, 774, 777, 5, 168, 85, 2, 775, 777, 5, 170, 86, 2, 776, 773, 3, 2, 2, 2, 776, 774, 3, 2, 2, 2, 776, 775, 3, 2, 2, 2, 777, 165, 3, 2, 2, 2, 778, 779, 5, 172, 87, 2, 779, 167, 3, 2, 2, 2, 780, 781, 5, 172, 87, 2, 781, 790, 7, 65, 2, 2, 782, 787, 5, 164, 83, 2, 783, 784, 7, 35, 2, 2, 784, 786, 5, 164, 83, 2, 785, 783, 3, 2, 2, 2, 786, 789, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 791, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 790, 782, 3, 2, 2, 2, 790, 791, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 793, 7, 67, 2, 2, 793, 169, 3, 2, 2, 2, 794, 795, 7, 31, 2, 2, 795, 796, 7, 39, 2, 2, 796, 797, 5, 172, 87, 2, 797, 798, 7, 40, 2, 2, 798, 171, 3, 2, 2, 2, 799, 800, 9, 16, 2, 2, 800, 173, 3, 2, 2, 2, 76, 175, 182, 189, 194, 202, 214, 226, 232, 239, 252, 259, 269, 281, 283, 291, 300, 306, 311, 322, 327, 338, 347, 357, 370, 375, 381, 385, 391, 397, 421, 435, 439, 447, 461, 469, 477, 481, 486, 489, 494, 497, 507, 510, 513, 523, 526, 529, 545, 550, 555, 571, 573, 581, 595, 601, 607, 615, 632, 642, 653, 665, 678, 689, 700, 711, 722, 733, 744, 754, 761, 770, 776, 787, 790] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 90, 811, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 3, 2, 5, 2, 176, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 181, 10, 3, 13, 3, 14, 3, 182, 3, 4, 3, 4, 3, 5, 6, 5, 188, 10, 5, 13, 5, 14, 5, 189, 3, 6, 3, 6, 3, 6, 5, 6, 195, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 203, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 215, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 227, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 233, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 238, 10, 15, 12, 15, 14, 15, 241, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 251, 10, 17, 12, 17, 14, 17, 254, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 260, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 270, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 282, 10, 21, 12, 21, 14, 21, 285, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 292, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 301, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 307, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 312, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 323, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 328, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 339, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 348, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 356, 10, 31, 12, 31, 14, 31, 359, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 371, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 376, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 382, 10, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 392, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 398, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 422, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 436, 10, 39, 3, 40, 3, 40, 5, 40, 440, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 448, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 462, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 468, 10, 47, 12, 47, 14, 47, 471, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 476, 10, 47, 12, 47, 14, 47, 479, 11, 47, 3, 47, 5, 47, 482, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 487, 10, 48, 3, 48, 5, 48, 490, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 495, 10, 49, 3, 49, 5, 49, 498, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 506, 10, 51, 12, 51, 14, 51, 509, 11, 51, 5, 51, 511, 10, 51, 3, 51, 5, 51, 514, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 522, 10, 52, 12, 52, 14, 52, 525, 11, 52, 5, 52, 527, 10, 52, 3, 52, 5, 52, 530, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 546, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 555, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 560, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 577, 10, 55, 3, 55, 3, 55, 7, 55, 581, 10, 55, 12, 55, 14, 55, 584, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 589, 10, 56, 12, 56, 14, 56, 592, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 605, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 611, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 5, 60, 617, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 5, 62, 625, 10, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 642, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 650, 10, 68, 12, 68, 14, 68, 653, 11, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 661, 10, 69, 12, 69, 14, 69, 664, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 673, 10, 70, 12, 70, 14, 70, 676, 11, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 686, 10, 72, 12, 72, 14, 72, 689, 11, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 697, 10, 73, 12, 73, 14, 73, 700, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 708, 10, 74, 12, 74, 14, 74, 711, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 719, 10, 75, 12, 75, 14, 75, 722, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 730, 10, 76, 12, 76, 14, 76, 733, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 741, 10, 77, 12, 77, 14, 77, 744, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 752, 10, 78, 12, 78, 14, 78, 755, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 764, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 771, 10, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 7, 82, 778, 10, 82, 12, 82, 14, 82, 781, 11, 82, 3, 83, 3, 83, 3, 83, 5, 83, 786, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 7, 85, 795, 10, 85, 12, 85, 14, 85, 798, 11, 85, 5, 85, 800, 10, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 2, 2, 13, 108, 134, 136, 138, 142, 144, 146, 148, 150, 152, 154, 88, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 80, 81, 4, 2, 79, 79, 82, 82, 3, 2, 33, 35, 4, 2, 48, 48, 50, 50, 6, 2, 47, 47, 49, 49, 57, 57, 73, 73, 3, 2, 51, 54, 4, 2, 47, 47, 49, 49, 3, 2, 74, 76, 3, 2, 66, 69, 3, 2, 64, 65, 3, 2, 58, 63, 4, 2, 33, 35, 78, 78, 2, 821, 2, 175, 3, 2, 2, 2, 4, 180, 3, 2, 2, 2, 6, 184, 3, 2, 2, 2, 8, 187, 3, 2, 2, 2, 10, 194, 3, 2, 2, 2, 12, 202, 3, 2, 2, 2, 14, 204, 3, 2, 2, 2, 16, 207, 3, 2, 2, 2, 18, 209, 3, 2, 2, 2, 20, 216, 3, 2, 2, 2, 22, 218, 3, 2, 2, 2, 24, 220, 3, 2, 2, 2, 26, 222, 3, 2, 2, 2, 28, 234, 3, 2, 2, 2, 30, 242, 3, 2, 2, 2, 32, 246, 3, 2, 2, 2, 34, 259, 3, 2, 2, 2, 36, 261, 3, 2, 2, 2, 38, 266, 3, 2, 2, 2, 40, 276, 3, 2, 2, 2, 42, 291, 3, 2, 2, 2, 44, 293, 3, 2, 2, 2, 46, 297, 3, 2, 2, 2, 48, 308, 3, 2, 2, 2, 50, 322, 3, 2, 2, 2, 52, 324, 3, 2, 2, 2, 54, 331, 3, 2, 2, 2, 56, 338, 3, 2, 2, 2, 58, 340, 3, 2, 2, 2, 60, 349, 3, 2, 2, 2, 62, 370, 3, 2, 2, 2, 64, 375, 3, 2, 2, 2, 66, 377, 3, 2, 2, 2, 68, 402, 3, 2, 2, 2, 70, 408, 3, 2, 2, 2, 72, 416, 3, 2, 2, 2, 74, 419, 3, 2, 2, 2, 76, 435, 3, 2, 2, 2, 78, 437, 3, 2, 2, 2, 80, 449, 3, 2, 2, 2, 82, 453, 3, 2, 2, 2, 84, 455, 3, 2, 2, 2, 86, 457, 3, 2, 2, 2, 88, 461, 3, 2, 2, 2, 90, 463, 3, 2, 2, 2, 92, 481, 3, 2, 2, 2, 94, 489, 3, 2, 2, 2, 96, 497, 3, 2, 2, 2, 98, 499, 3, 2, 2, 2, 100, 501, 3, 2, 2, 2, 102, 517, 3, 2, 2, 2, 104, 533, 3, 2, 2, 2, 106, 537, 3, 2, 2, 2, 108, 559, 3, 2, 2, 2, 110, 585, 3, 2, 2, 2, 112, 593, 3, 2, 2, 2, 114, 596, 3, 2, 2, 2, 116, 600, 3, 2, 2, 2, 118, 616, 3, 2, 2, 2, 120, 618, 3, 2, 2, 2, 122, 624, 3, 2, 2, 2, 124, 626, 3, 2, 2, 2, 126, 629, 3, 2, 2, 2, 128, 632, 3, 2, 2, 2, 130, 634, 3, 2, 2, 2, 132, 641, 3, 2, 2, 2, 134, 643, 3, 2, 2, 2, 136, 654, 3, 2, 2, 2, 138, 665, 3, 2, 2, 2, 140, 677, 3, 2, 2, 2, 142, 679, 3, 2, 2, 2, 144, 690, 3, 2, 2, 2, 146, 701, 3, 2, 2, 2, 148, 712, 3, 2, 2, 2, 150, 723, 3, 2, 2, 2, 152, 734, 3, 2, 2, 2, 154, 745, 3, 2, 2, 2, 156, 763, 3, 2, 2, 2, 158, 770, 3, 2, 2, 2, 160, 772, 3, 2, 2, 2, 162, 774, 3, 2, 2, 2, 164, 785, 3, 2, 2, 2, 166, 787, 3, 2, 2, 2, 168, 789, 3, 2, 2, 2, 170, 803, 3, 2, 2, 2, 172, 808, 3, 2, 2, 2, 174, 176, 5, 4, 3, 2, 175, 174, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 2, 2, 3, 178, 3, 3, 2, 2, 2, 179, 181, 5, 6, 4, 2, 180, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 5, 3, 2, 2, 2, 184, 185, 5, 8, 5, 2, 185, 7, 3, 2, 2, 2, 186, 188, 5, 10, 6, 2, 187, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 9, 3, 2, 2, 2, 191, 195, 5, 50, 26, 2, 192, 195, 5, 12, 7, 2, 193, 195, 7, 37, 2, 2, 194, 191, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 193, 3, 2, 2, 2, 195, 11, 3, 2, 2, 2, 196, 197, 5, 14, 8, 2, 197, 198, 7, 37, 2, 2, 198, 203, 3, 2, 2, 2, 199, 203, 5, 26, 14, 2, 200, 203, 5, 32, 17, 2, 201, 203, 5, 40, 21, 2, 202, 196, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 201, 3, 2, 2, 2, 203, 13, 3, 2, 2, 2, 204, 205, 5, 16, 9, 2, 205, 206, 5, 18, 10, 2, 206, 15, 3, 2, 2, 2, 207, 208, 9, 2, 2, 2, 208, 17, 3, 2, 2, 2, 209, 210, 5, 22, 12, 2, 210, 211, 7, 39, 2, 2, 211, 214, 5, 164, 83, 2, 212, 213, 7, 58, 2, 2, 213, 215, 5, 20, 11, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 19, 3, 2, 2, 2, 216, 217, 5, 158, 80, 2, 217, 21, 3, 2, 2, 2, 218, 219, 5, 24, 13, 2, 219, 23, 3, 2, 2, 2, 220, 221, 7, 78, 2, 2, 221, 25, 3, 2, 2, 2, 222, 223, 7, 22, 2, 2, 223, 224, 5, 22, 12, 2, 224, 226, 7, 40, 2, 2, 225, 227, 5, 28, 15, 2, 226, 225, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 7, 41, 2, 2, 229, 230, 7, 25, 2, 2, 230, 232, 5, 164, 83, 2, 231, 233, 5, 52, 27, 2, 232, 231, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 27, 3, 2, 2, 2, 234, 239, 5, 30, 16, 2, 235, 236, 7, 36, 2, 2, 236, 238, 5, 30, 16, 2, 237, 235, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 29, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 5, 22, 12, 2, 243, 244, 7, 39, 2, 2, 244, 245, 5, 164, 83, 2, 245, 31, 3, 2, 2, 2, 246, 247, 7, 27, 2, 2, 247, 248, 5, 22, 12, 2, 248, 252, 7, 45, 2, 2, 249, 251, 5, 34, 18, 2, 250, 249, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 46, 2, 2, 256, 33, 3, 2, 2, 2, 257, 260, 5, 36, 19, 2, 258, 260, 5, 38, 20, 2, 259, 257, 3, 2, 2, 2, 259, 258, 3, 2, 2, 2, 260, 35, 3, 2, 2, 2, 261, 262, 5, 22, 12, 2, 262, 263, 7, 39, 2, 2, 263, 264, 5, 164, 83, 2, 264, 265, 7, 37, 2, 2, 265, 37, 3, 2, 2, 2, 266, 267, 5, 22, 12, 2, 267, 269, 7, 40, 2, 2, 268, 270, 5, 28, 15, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 7, 41, 2, 2, 272, 273, 7, 39, 2, 2, 273, 274, 5, 164, 83, 2, 274, 275, 7, 37, 2, 2, 275, 39, 3, 2, 2, 2, 276, 277, 7, 26, 2, 2, 277, 278, 5, 22, 12, 2, 278, 283, 7, 45, 2, 2, 279, 282, 5, 42, 22, 2, 280, 282, 7, 37, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 285, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 286, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 286, 287, 7, 46, 2, 2, 287, 41, 3, 2, 2, 2, 288, 292, 5, 44, 23, 2, 289, 292, 5, 46, 24, 2, 290, 292, 5, 48, 25, 2, 291, 288, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 291, 290, 3, 2, 2, 2, 292, 43, 3, 2, 2, 2, 293, 294, 5, 22, 12, 2, 294, 295, 7, 39, 2, 2, 295, 296, 5, 164, 83, 2, 296, 45, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 300, 7, 40, 2, 2, 299, 301, 5, 28, 15, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 41, 2, 2, 303, 304, 7, 39, 2, 2, 304, 306, 5, 164, 83, 2, 305, 307, 5, 52, 27, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 47, 3, 2, 2, 2, 308, 309, 7, 28, 2, 2, 309, 311, 7, 40, 2, 2, 310, 312, 5, 28, 15, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 7, 41, 2, 2, 314, 315, 5, 52, 27, 2, 315, 49, 3, 2, 2, 2, 316, 323, 5, 54, 28, 2, 317, 323, 5, 56, 29, 2, 318, 323, 5, 64, 33, 2, 319, 323, 5, 72, 37, 2, 320, 323, 5, 74, 38, 2, 321, 323, 5, 52, 27, 2, 322, 316, 3, 2, 2, 2, 322, 317, 3, 2, 2, 2, 322, 318, 3, 2, 2, 2, 322, 319, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 321, 3, 2, 2, 2, 323, 51, 3, 2, 2, 2, 324, 325, 6, 27, 2, 2, 325, 327, 7, 45, 2, 2, 326, 328, 5, 8, 5, 2, 327, 326, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 7, 46, 2, 2, 330, 53, 3, 2, 2, 2, 331, 332, 8, 28, 1, 2, 332, 333, 5, 162, 82, 2, 333, 334, 7, 37, 2, 2, 334, 335, 8, 28, 1, 2, 335, 55, 3, 2, 2, 2, 336, 339, 5, 58, 30, 2, 337, 339, 5, 60, 31, 2, 338, 336, 3, 2, 2, 2, 338, 337, 3, 2, 2, 2, 339, 57, 3, 2, 2, 2, 340, 341, 7, 18, 2, 2, 341, 342, 7, 40, 2, 2, 342, 343, 5, 162, 82, 2, 343, 344, 7, 41, 2, 2, 344, 347, 5, 50, 26, 2, 345, 346, 7, 19, 2, 2, 346, 348, 5, 50, 26, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 59, 3, 2, 2, 2, 349, 350, 7, 11, 2, 2, 350, 351, 7, 40, 2, 2, 351, 352, 5, 162, 82, 2, 352, 353, 7, 41, 2, 2, 353, 357, 7, 45, 2, 2, 354, 356, 5, 62, 32, 2, 355, 354, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 360, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 360, 361, 7, 46, 2, 2, 361, 61, 3, 2, 2, 2, 362, 363, 7, 12, 2, 2, 363, 364, 5, 162, 82, 2, 364, 365, 7, 39, 2, 2, 365, 366, 5, 50, 26, 2, 366, 371, 3, 2, 2, 2, 367, 368, 7, 13, 2, 2, 368, 369, 7, 39, 2, 2, 369, 371, 5, 50, 26, 2, 370, 362, 3, 2, 2, 2, 370, 367, 3, 2, 2, 2, 371, 63, 3, 2, 2, 2, 372, 376, 5, 66, 34, 2, 373, 376, 5, 68, 35, 2, 374, 376, 5, 70, 36, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 65, 3, 2, 2, 2, 377, 378, 7, 20, 2, 2, 378, 385, 7, 40, 2, 2, 379, 382, 5, 14, 8, 2, 380, 382, 5, 162, 82, 2, 381, 379, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 8, 34, 1, 2, 384, 386, 3, 2, 2, 2, 385, 381, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 391, 7, 37, 2, 2, 388, 389, 5, 162, 82, 2, 389, 390, 8, 34, 1, 2, 390, 392, 3, 2, 2, 2, 391, 388, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 7, 37, 2, 2, 394, 395, 5, 162, 82, 2, 395, 396, 8, 34, 1, 2, 396, 398, 3, 2, 2, 2, 397, 394, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 7, 41, 2, 2, 400, 401, 5, 50, 26, 2, 401, 67, 3, 2, 2, 2, 402, 403, 7, 17, 2, 2, 403, 404, 7, 40, 2, 2, 404, 405, 5, 162, 82, 2, 405, 406, 7, 41, 2, 2, 406, 407, 5, 50, 26, 2, 407, 69, 3, 2, 2, 2, 408, 409, 7, 16, 2, 2, 409, 410, 5, 50, 26, 2, 410, 411, 7, 17, 2, 2, 411, 412, 7, 40, 2, 2, 412, 413, 5, 162, 82, 2, 413, 414, 7, 41, 2, 2, 414, 415, 7, 37, 2, 2, 415, 71, 3, 2, 2, 2, 416, 417, 9, 3, 2, 2, 417, 418, 7, 37, 2, 2, 418, 73, 3, 2, 2, 2, 419, 421, 7, 23, 2, 2, 420, 422, 5, 162, 82, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 37, 2, 2, 424, 75, 3, 2, 2, 2, 425, 436, 5, 80, 41, 2, 426, 436, 5, 78, 40, 2, 427, 436, 5, 100, 51, 2, 428, 436, 5, 102, 52, 2, 429, 436, 5, 82, 42, 2, 430, 436, 5, 84, 43, 2, 431, 436, 5, 90, 46, 2, 432, 436, 5, 92, 47, 2, 433, 436, 5, 98, 50, 2, 434, 436, 5, 106, 54, 2, 435, 425, 3, 2, 2, 2, 435, 426, 3, 2, 2, 2, 435, 427, 3, 2, 2, 2, 435, 428, 3, 2, 2, 2, 435, 429, 3, 2, 2, 2, 435, 430, 3, 2, 2, 2, 435, 431, 3, 2, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 434, 3, 2, 2, 2, 436, 77, 3, 2, 2, 2, 437, 439, 7, 40, 2, 2, 438, 440, 5, 28, 15, 2, 439, 438, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 7, 41, 2, 2, 442, 443, 7, 39, 2, 2, 443, 444, 5, 164, 83, 2, 444, 447, 7, 25, 2, 2, 445, 448, 5, 162, 82, 2, 446, 448, 5, 52, 27, 2, 447, 445, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 79, 3, 2, 2, 2, 449, 450, 7, 40, 2, 2, 450, 451, 5, 162, 82, 2, 451, 452, 7, 41, 2, 2, 452, 81, 3, 2, 2, 2, 453, 454, 9, 4, 2, 2, 454, 83, 3, 2, 2, 2, 455, 456, 5, 86, 44, 2, 456, 85, 3, 2, 2, 2, 457, 458, 7, 78, 2, 2, 458, 87, 3, 2, 2, 2, 459, 462, 5, 86, 44, 2, 460, 462, 5, 90, 46, 2, 461, 459, 3, 2, 2, 2, 461, 460, 3, 2, 2, 2, 462, 89, 3, 2, 2, 2, 463, 464, 9, 5, 2, 2, 464, 91, 3, 2, 2, 2, 465, 469, 7, 85, 2, 2, 466, 468, 5, 94, 48, 2, 467, 466, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 472, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 482, 7, 87, 2, 2, 473, 477, 7, 86, 2, 2, 474, 476, 5, 96, 49, 2, 475, 474, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 480, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 480, 482, 7, 89, 2, 2, 481, 465, 3, 2, 2, 2, 481, 473, 3, 2, 2, 2, 482, 93, 3, 2, 2, 2, 483, 490, 7, 88, 2, 2, 484, 486, 7, 3, 2, 2, 485, 487, 5, 162, 82, 2, 486, 485, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 490, 7, 44, 2, 2, 489, 483, 3, 2, 2, 2, 489, 484, 3, 2, 2, 2, 490, 95, 3, 2, 2, 2, 491, 498, 7, 90, 2, 2, 492, 494, 7, 3, 2, 2, 493, 495, 5, 162, 82, 2, 494, 493, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 7, 44, 2, 2, 497, 491, 3, 2, 2, 2, 497, 492, 3, 2, 2, 2, 498, 97, 3, 2, 2, 2, 499, 500, 9, 6, 2, 2, 500, 99, 3, 2, 2, 2, 501, 510, 7, 42, 2, 2, 502, 507, 5, 162, 82, 2, 503, 504, 7, 36, 2, 2, 504, 506, 5, 162, 82, 2, 505, 503, 3, 2, 2, 2, 506, 509, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 510, 502, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 513, 3, 2, 2, 2, 512, 514, 7, 36, 2, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 7, 43, 2, 2, 516, 101, 3, 2, 2, 2, 517, 526, 7, 45, 2, 2, 518, 523, 5, 104, 53, 2, 519, 520, 7, 36, 2, 2, 520, 522, 5, 104, 53, 2, 521, 519, 3, 2, 2, 2, 522, 525, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 523, 524, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 526, 518, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 529, 3, 2, 2, 2, 528, 530, 7, 36, 2, 2, 529, 528, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 7, 46, 2, 2, 532, 103, 3, 2, 2, 2, 533, 534, 5, 88, 45, 2, 534, 535, 7, 39, 2, 2, 535, 536, 5, 162, 82, 2, 536, 105, 3, 2, 2, 2, 537, 538, 9, 7, 2, 2, 538, 107, 3, 2, 2, 2, 539, 540, 8, 55, 1, 2, 540, 560, 5, 76, 39, 2, 541, 542, 7, 24, 2, 2, 542, 543, 5, 108, 55, 2, 543, 545, 7, 40, 2, 2, 544, 546, 5, 110, 56, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 7, 41, 2, 2, 548, 549, 8, 55, 1, 2, 549, 560, 3, 2, 2, 2, 550, 551, 7, 29, 2, 2, 551, 552, 5, 164, 83, 2, 552, 554, 7, 40, 2, 2, 553, 555, 5, 110, 56, 2, 554, 553, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 7, 41, 2, 2, 557, 558, 8, 55, 1, 2, 558, 560, 3, 2, 2, 2, 559, 539, 3, 2, 2, 2, 559, 541, 3, 2, 2, 2, 559, 550, 3, 2, 2, 2, 560, 582, 3, 2, 2, 2, 561, 562, 12, 8, 2, 2, 562, 563, 5, 112, 57, 2, 563, 564, 8, 55, 1, 2, 564, 581, 3, 2, 2, 2, 565, 566, 12, 7, 2, 2, 566, 567, 5, 114, 58, 2, 567, 568, 8, 55, 1, 2, 568, 581, 3, 2, 2, 2, 569, 570, 12, 6, 2, 2, 570, 571, 5, 116, 59, 2, 571, 572, 8, 55, 1, 2, 572, 581, 3, 2, 2, 2, 573, 574, 12, 5, 2, 2, 574, 576, 7, 40, 2, 2, 575, 577, 5, 110, 56, 2, 576, 575, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 579, 7, 41, 2, 2, 579, 581, 8, 55, 1, 2, 580, 561, 3, 2, 2, 2, 580, 565, 3, 2, 2, 2, 580, 569, 3, 2, 2, 2, 580, 573, 3, 2, 2, 2, 581, 584, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 109, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 585, 590, 5, 158, 80, 2, 586, 587, 7, 36, 2, 2, 587, 589, 5, 158, 80, 2, 588, 586, 3, 2, 2, 2, 589, 592, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 111, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 594, 7, 77, 2, 2, 594, 595, 5, 86, 44, 2, 595, 113, 3, 2, 2, 2, 596, 597, 7, 42, 2, 2, 597, 598, 5, 162, 82, 2, 598, 599, 7, 43, 2, 2, 599, 115, 3, 2, 2, 2, 600, 604, 7, 42, 2, 2, 601, 602, 5, 162, 82, 2, 602, 603, 8, 59, 1, 2, 603, 605, 3, 2, 2, 2, 604, 601, 3, 2, 2, 2, 604, 605, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 610, 7, 39, 2, 2, 607, 608, 5, 162, 82, 2, 608, 609, 8, 59, 1, 2, 609, 611, 3, 2, 2, 2, 610, 607, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 612, 3, 2, 2, 2, 612, 613, 7, 43, 2, 2, 613, 117, 3, 2, 2, 2, 614, 617, 5, 108, 55, 2, 615, 617, 5, 120, 61, 2, 616, 614, 3, 2, 2, 2, 616, 615, 3, 2, 2, 2, 617, 119, 3, 2, 2, 2, 618, 619, 5, 108, 55, 2, 619, 620, 5, 128, 65, 2, 620, 121, 3, 2, 2, 2, 621, 625, 5, 118, 60, 2, 622, 625, 5, 124, 63, 2, 623, 625, 5, 126, 64, 2, 624, 621, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 624, 623, 3, 2, 2, 2, 625, 123, 3, 2, 2, 2, 626, 627, 5, 128, 65, 2, 627, 628, 5, 118, 60, 2, 628, 125, 3, 2, 2, 2, 629, 630, 5, 130, 66, 2, 630, 631, 5, 118, 60, 2, 631, 127, 3, 2, 2, 2, 632, 633, 9, 8, 2, 2, 633, 129, 3, 2, 2, 2, 634, 635, 9, 9, 2, 2, 635, 131, 3, 2, 2, 2, 636, 642, 5, 122, 62, 2, 637, 638, 5, 122, 62, 2, 638, 639, 7, 9, 2, 2, 639, 640, 5, 164, 83, 2, 640, 642, 3, 2, 2, 2, 641, 636, 3, 2, 2, 2, 641, 637, 3, 2, 2, 2, 642, 133, 3, 2, 2, 2, 643, 644, 8, 68, 1, 2, 644, 645, 5, 132, 67, 2, 645, 651, 3, 2, 2, 2, 646, 647, 12, 3, 2, 2, 647, 648, 9, 10, 2, 2, 648, 650, 5, 132, 67, 2, 649, 646, 3, 2, 2, 2, 650, 653, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 135, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 654, 655, 8, 69, 1, 2, 655, 656, 5, 134, 68, 2, 656, 662, 3, 2, 2, 2, 657, 658, 12, 3, 2, 2, 658, 659, 9, 11, 2, 2, 659, 661, 5, 134, 68, 2, 660, 657, 3, 2, 2, 2, 661, 664, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 137, 3, 2, 2, 2, 664, 662, 3, 2, 2, 2, 665, 666, 8, 70, 1, 2, 666, 667, 5, 136, 69, 2, 667, 674, 3, 2, 2, 2, 668, 669, 12, 3, 2, 2, 669, 670, 5, 140, 71, 2, 670, 671, 5, 146, 74, 2, 671, 673, 3, 2, 2, 2, 672, 668, 3, 2, 2, 2, 673, 676, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 139, 3, 2, 2, 2, 676, 674, 3, 2, 2, 2, 677, 678, 9, 12, 2, 2, 678, 141, 3, 2, 2, 2, 679, 680, 8, 72, 1, 2, 680, 681, 5, 138, 70, 2, 681, 687, 3, 2, 2, 2, 682, 683, 12, 3, 2, 2, 683, 684, 9, 13, 2, 2, 684, 686, 5, 138, 70, 2, 685, 682, 3, 2, 2, 2, 686, 689, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 143, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 690, 691, 8, 73, 1, 2, 691, 692, 5, 142, 72, 2, 692, 698, 3, 2, 2, 2, 693, 694, 12, 3, 2, 2, 694, 695, 9, 14, 2, 2, 695, 697, 5, 142, 72, 2, 696, 693, 3, 2, 2, 2, 697, 700, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 145, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 702, 8, 74, 1, 2, 702, 703, 5, 144, 73, 2, 703, 709, 3, 2, 2, 2, 704, 705, 12, 3, 2, 2, 705, 706, 7, 70, 2, 2, 706, 708, 5, 144, 73, 2, 707, 704, 3, 2, 2, 2, 708, 711, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 147, 3, 2, 2, 2, 711, 709, 3, 2, 2, 2, 712, 713, 8, 75, 1, 2, 713, 714, 5, 146, 74, 2, 714, 720, 3, 2, 2, 2, 715, 716, 12, 3, 2, 2, 716, 717, 7, 72, 2, 2, 717, 719, 5, 146, 74, 2, 718, 715, 3, 2, 2, 2, 719, 722, 3, 2, 2, 2, 720, 718, 3, 2, 2, 2, 720, 721, 3, 2, 2, 2, 721, 149, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 723, 724, 8, 76, 1, 2, 724, 725, 5, 148, 75, 2, 725, 731, 3, 2, 2, 2, 726, 727, 12, 3, 2, 2, 727, 728, 7, 71, 2, 2, 728, 730, 5, 148, 75, 2, 729, 726, 3, 2, 2, 2, 730, 733, 3, 2, 2, 2, 731, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 151, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 734, 735, 8, 77, 1, 2, 735, 736, 5, 150, 76, 2, 736, 742, 3, 2, 2, 2, 737, 738, 12, 3, 2, 2, 738, 739, 7, 55, 2, 2, 739, 741, 5, 150, 76, 2, 740, 737, 3, 2, 2, 2, 741, 744, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 743, 3, 2, 2, 2, 743, 153, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 745, 746, 8, 78, 1, 2, 746, 747, 5, 152, 77, 2, 747, 753, 3, 2, 2, 2, 748, 749, 12, 3, 2, 2, 749, 750, 7, 56, 2, 2, 750, 752, 5, 152, 77, 2, 751, 748, 3, 2, 2, 2, 752, 755, 3, 2, 2, 2, 753, 751, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 155, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 756, 764, 5, 154, 78, 2, 757, 758, 5, 154, 78, 2, 758, 759, 7, 38, 2, 2, 759, 760, 5, 156, 79, 2, 760, 761, 7, 39, 2, 2, 761, 762, 5, 156, 79, 2, 762, 764, 3, 2, 2, 2, 763, 756, 3, 2, 2, 2, 763, 757, 3, 2, 2, 2, 764, 157, 3, 2, 2, 2, 765, 771, 5, 156, 79, 2, 766, 767, 5, 108, 55, 2, 767, 768, 5, 160, 81, 2, 768, 769, 5, 158, 80, 2, 769, 771, 3, 2, 2, 2, 770, 765, 3, 2, 2, 2, 770, 766, 3, 2, 2, 2, 771, 159, 3, 2, 2, 2, 772, 773, 9, 15, 2, 2, 773, 161, 3, 2, 2, 2, 774, 779, 5, 158, 80, 2, 775, 776, 7, 36, 2, 2, 776, 778, 5, 158, 80, 2, 777, 775, 3, 2, 2, 2, 778, 781, 3, 2, 2, 2, 779, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 163, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 782, 786, 5, 166, 84, 2, 783, 786, 5, 168, 85, 2, 784, 786, 5, 170, 86, 2, 785, 782, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 784, 3, 2, 2, 2, 786, 165, 3, 2, 2, 2, 787, 788, 5, 172, 87, 2, 788, 167, 3, 2, 2, 2, 789, 790, 5, 172, 87, 2, 790, 799, 7, 66, 2, 2, 791, 796, 5, 164, 83, 2, 792, 793, 7, 36, 2, 2, 793, 795, 5, 164, 83, 2, 794, 792, 3, 2, 2, 2, 795, 798, 3, 2, 2, 2, 796, 794, 3, 2, 2, 2, 796, 797, 3, 2, 2, 2, 797, 800, 3, 2, 2, 2, 798, 796, 3, 2, 2, 2, 799, 791, 3, 2, 2, 2, 799, 800, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 802, 7, 68, 2, 2, 802, 169, 3, 2, 2, 2, 803, 804, 7, 32, 2, 2, 804, 805, 7, 40, 2, 2, 805, 806, 5, 172, 87, 2, 806, 807, 7, 41, 2, 2, 807, 171, 3, 2, 2, 2, 808, 809, 9, 16, 2, 2, 809, 173, 3, 2, 2, 2, 77, 175, 182, 189, 194, 202, 214, 226, 232, 239, 252, 259, 269, 281, 283, 291, 300, 306, 311, 322, 327, 338, 347, 357, 370, 375, 381, 385, 391, 397, 421, 435, 439, 447, 461, 469, 477, 481, 486, 489, 494, 497, 507, 510, 513, 523, 526, 529, 545, 554, 559, 576, 580, 582, 590, 604, 610, 616, 624, 641, 651, 662, 674, 687, 698, 709, 720, 731, 742, 753, 763, 770, 779, 785, 796, 799] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens index 730d75c01..dfd693766 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens @@ -24,67 +24,68 @@ RetIndicator=23 Class=24 Interface=25 Constructor=26 -True=27 -False=28 -Typeof=29 -Void=30 -Null=31 -Undefined=32 -Comma=33 -SemiColon=34 -QuestionMark=35 -Colon=36 -LeftParen=37 -RightParen=38 -LeftBracket=39 -RightBracket=40 -FStringExpEnd=41 -LeftBrace=42 -RightBrace=43 -Plus=44 -PlusPlus=45 -Minus=46 -MinusMinus=47 -Star=48 -Div=49 -Mod=50 -PowerTo=51 -AndAnd=52 -OrOr=53 -Not=54 -Assign=55 -PlusAssign=56 -MinusAssign=57 -StarAssign=58 -DivAssign=59 -ModAssign=60 -Equal=61 -NotEqual=62 -Less=63 -LessEqual=64 -Greater=65 -GreaterEqual=66 -BitwiseAnd=67 -BitwiseOr=68 -BitwiseXor=69 -BitwiseNot=70 -BitwiseZeroFillLeftShift=71 -BitwiseSignedRightShift=72 -BitwiseZeroFillRightShift=73 -Dot=74 -Identifier=75 -IntegerConstant=76 -SingleQuoteStringLiteral=77 -DoubleQuoteStringLiteral=78 -FloatingConstant=79 -Whitespace=80 -Newline=81 -FStringSingleQuoteStart=82 -FStringDoubleQuoteStart=83 -FStringSingleQuoteEnd=84 -FStringSingleQuoteAtom=85 -FStringDoubleQuoteEnd=86 -FStringDoubleQuoteAtom=87 +New=27 +True=28 +False=29 +Typeof=30 +Void=31 +Null=32 +Undefined=33 +Comma=34 +SemiColon=35 +QuestionMark=36 +Colon=37 +LeftParen=38 +RightParen=39 +LeftBracket=40 +RightBracket=41 +FStringExpEnd=42 +LeftBrace=43 +RightBrace=44 +Plus=45 +PlusPlus=46 +Minus=47 +MinusMinus=48 +Star=49 +Div=50 +Mod=51 +PowerTo=52 +AndAnd=53 +OrOr=54 +Not=55 +Assign=56 +PlusAssign=57 +MinusAssign=58 +StarAssign=59 +DivAssign=60 +ModAssign=61 +Equal=62 +NotEqual=63 +Less=64 +LessEqual=65 +Greater=66 +GreaterEqual=67 +BitwiseAnd=68 +BitwiseOr=69 +BitwiseXor=70 +BitwiseNot=71 +BitwiseZeroFillLeftShift=72 +BitwiseSignedRightShift=73 +BitwiseZeroFillRightShift=74 +Dot=75 +Identifier=76 +IntegerConstant=77 +SingleQuoteStringLiteral=78 +DoubleQuoteStringLiteral=79 +FloatingConstant=80 +Whitespace=81 +Newline=82 +FStringSingleQuoteStart=83 +FStringDoubleQuoteStart=84 +FStringSingleQuoteEnd=85 +FStringSingleQuoteAtom=86 +FStringDoubleQuoteEnd=87 +FStringDoubleQuoteAtom=88 'const'=5 'var'=6 'as'=7 @@ -107,50 +108,51 @@ FStringDoubleQuoteAtom=87 'class'=24 'interface'=25 'constructor'=26 -'true'=27 -'false'=28 -'typeof'=29 -'void'=30 -'null'=31 -'undefined'=32 -','=33 -';'=34 -'?'=35 -':'=36 -'('=37 -')'=38 -'['=39 -']'=40 -'{'=42 -'}'=43 -'+'=44 -'++'=45 -'-'=46 -'--'=47 -'*'=48 -'/'=49 -'%'=50 -'**'=51 -'&&'=52 -'||'=53 -'!'=54 -'='=55 -'+='=56 -'-='=57 -'*='=58 -'/='=59 -'%='=60 -'=='=61 -'!='=62 -'<'=63 -'<='=64 -'>'=65 -'>='=66 -'&'=67 -'|'=68 -'^'=69 -'~'=70 -'<<'=71 -'>>'=72 -'>>>'=73 -'.'=74 +'new'=27 +'true'=28 +'false'=29 +'typeof'=30 +'void'=31 +'null'=32 +'undefined'=33 +','=34 +';'=35 +'?'=36 +':'=37 +'('=38 +')'=39 +'['=40 +']'=41 +'{'=43 +'}'=44 +'+'=45 +'++'=46 +'-'=47 +'--'=48 +'*'=49 +'/'=50 +'%'=51 +'**'=52 +'&&'=53 +'||'=54 +'!'=55 +'='=56 +'+='=57 +'-='=58 +'*='=59 +'/='=60 +'%='=61 +'=='=62 +'!='=63 +'<'=64 +'<='=65 +'>'=66 +'>='=67 +'&'=68 +'|'=69 +'^'=70 +'~'=71 +'<<'=72 +'>>'=73 +'>>>'=74 +'.'=75 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index f4312a815..ee8b65606 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -57,67 +57,68 @@ export class KipperParser extends KipperParserBase { public static readonly Class = 24; public static readonly Interface = 25; public static readonly Constructor = 26; - public static readonly True = 27; - public static readonly False = 28; - public static readonly Typeof = 29; - public static readonly Void = 30; - public static readonly Null = 31; - public static readonly Undefined = 32; - public static readonly Comma = 33; - public static readonly SemiColon = 34; - public static readonly QuestionMark = 35; - public static readonly Colon = 36; - public static readonly LeftParen = 37; - public static readonly RightParen = 38; - public static readonly LeftBracket = 39; - public static readonly RightBracket = 40; - public static readonly FStringExpEnd = 41; - public static readonly LeftBrace = 42; - public static readonly RightBrace = 43; - public static readonly Plus = 44; - public static readonly PlusPlus = 45; - public static readonly Minus = 46; - public static readonly MinusMinus = 47; - public static readonly Star = 48; - public static readonly Div = 49; - public static readonly Mod = 50; - public static readonly PowerTo = 51; - public static readonly AndAnd = 52; - public static readonly OrOr = 53; - public static readonly Not = 54; - public static readonly Assign = 55; - public static readonly PlusAssign = 56; - public static readonly MinusAssign = 57; - public static readonly StarAssign = 58; - public static readonly DivAssign = 59; - public static readonly ModAssign = 60; - public static readonly Equal = 61; - public static readonly NotEqual = 62; - public static readonly Less = 63; - public static readonly LessEqual = 64; - public static readonly Greater = 65; - public static readonly GreaterEqual = 66; - public static readonly BitwiseAnd = 67; - public static readonly BitwiseOr = 68; - public static readonly BitwiseXor = 69; - public static readonly BitwiseNot = 70; - public static readonly BitwiseZeroFillLeftShift = 71; - public static readonly BitwiseSignedRightShift = 72; - public static readonly BitwiseZeroFillRightShift = 73; - public static readonly Dot = 74; - public static readonly Identifier = 75; - public static readonly IntegerConstant = 76; - public static readonly SingleQuoteStringLiteral = 77; - public static readonly DoubleQuoteStringLiteral = 78; - public static readonly FloatingConstant = 79; - public static readonly Whitespace = 80; - public static readonly Newline = 81; - public static readonly FStringSingleQuoteStart = 82; - public static readonly FStringDoubleQuoteStart = 83; - public static readonly FStringSingleQuoteEnd = 84; - public static readonly FStringSingleQuoteAtom = 85; - public static readonly FStringDoubleQuoteEnd = 86; - public static readonly FStringDoubleQuoteAtom = 87; + public static readonly New = 27; + public static readonly True = 28; + public static readonly False = 29; + public static readonly Typeof = 30; + public static readonly Void = 31; + public static readonly Null = 32; + public static readonly Undefined = 33; + public static readonly Comma = 34; + public static readonly SemiColon = 35; + public static readonly QuestionMark = 36; + public static readonly Colon = 37; + public static readonly LeftParen = 38; + public static readonly RightParen = 39; + public static readonly LeftBracket = 40; + public static readonly RightBracket = 41; + public static readonly FStringExpEnd = 42; + public static readonly LeftBrace = 43; + public static readonly RightBrace = 44; + public static readonly Plus = 45; + public static readonly PlusPlus = 46; + public static readonly Minus = 47; + public static readonly MinusMinus = 48; + public static readonly Star = 49; + public static readonly Div = 50; + public static readonly Mod = 51; + public static readonly PowerTo = 52; + public static readonly AndAnd = 53; + public static readonly OrOr = 54; + public static readonly Not = 55; + public static readonly Assign = 56; + public static readonly PlusAssign = 57; + public static readonly MinusAssign = 58; + public static readonly StarAssign = 59; + public static readonly DivAssign = 60; + public static readonly ModAssign = 61; + public static readonly Equal = 62; + public static readonly NotEqual = 63; + public static readonly Less = 64; + public static readonly LessEqual = 65; + public static readonly Greater = 66; + public static readonly GreaterEqual = 67; + public static readonly BitwiseAnd = 68; + public static readonly BitwiseOr = 69; + public static readonly BitwiseXor = 70; + public static readonly BitwiseNot = 71; + public static readonly BitwiseZeroFillLeftShift = 72; + public static readonly BitwiseSignedRightShift = 73; + public static readonly BitwiseZeroFillRightShift = 74; + public static readonly Dot = 75; + public static readonly Identifier = 76; + public static readonly IntegerConstant = 77; + public static readonly SingleQuoteStringLiteral = 78; + public static readonly DoubleQuoteStringLiteral = 79; + public static readonly FloatingConstant = 80; + public static readonly Whitespace = 81; + public static readonly Newline = 82; + public static readonly FStringSingleQuoteStart = 83; + public static readonly FStringDoubleQuoteStart = 84; + public static readonly FStringSingleQuoteEnd = 85; + public static readonly FStringSingleQuoteAtom = 86; + public static readonly FStringDoubleQuoteEnd = 87; + public static readonly FStringDoubleQuoteAtom = 88; public static readonly RULE_compilationUnit = 0; public static readonly RULE_translationUnit = 1; public static readonly RULE_externalItem = 2; @@ -322,6 +323,7 @@ export class KipperParser extends KipperParserBase { "'class'", "'interface'", "'constructor'", + "'new'", "'true'", "'false'", "'typeof'", @@ -399,6 +401,7 @@ export class KipperParser extends KipperParserBase { "Class", "Interface", "Constructor", + "New", "True", "False", "Typeof", @@ -1781,14 +1784,15 @@ export class KipperParser extends KipperParserBase { ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.CallFunc) | + (1 << KipperParser.New) | (1 << KipperParser.True) | (1 << KipperParser.False) | - (1 << KipperParser.Void) | - (1 << KipperParser.Null))) !== + (1 << KipperParser.Void))) !== 0) || (((_la - 32) & ~0x1f) === 0 && ((1 << (_la - 32)) & - ((1 << (KipperParser.Undefined - 32)) | + ((1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)) | (1 << (KipperParser.LeftParen - 32)) | (1 << (KipperParser.LeftBracket - 32)) | (1 << (KipperParser.LeftBrace - 32)) | @@ -1798,16 +1802,16 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.MinusMinus - 32)) | (1 << (KipperParser.Not - 32)))) !== 0) || - (((_la - 70) & ~0x1f) === 0 && - ((1 << (_la - 70)) & - ((1 << (KipperParser.BitwiseNot - 70)) | - (1 << (KipperParser.Identifier - 70)) | - (1 << (KipperParser.IntegerConstant - 70)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 70)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 70)) | - (1 << (KipperParser.FloatingConstant - 70)) | - (1 << (KipperParser.FStringSingleQuoteStart - 70)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 70)))) !== + (((_la - 71) & ~0x1f) === 0 && + ((1 << (_la - 71)) & + ((1 << (KipperParser.BitwiseNot - 71)) | + (1 << (KipperParser.Identifier - 71)) | + (1 << (KipperParser.IntegerConstant - 71)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | + (1 << (KipperParser.FloatingConstant - 71)) | + (1 << (KipperParser.FStringSingleQuoteStart - 71)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== 0) ) { { @@ -1822,6 +1826,7 @@ export class KipperParser extends KipperParserBase { } break; case KipperParser.CallFunc: + case KipperParser.New: case KipperParser.True: case KipperParser.False: case KipperParser.Void: @@ -1864,6 +1869,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -1877,17 +1883,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -1906,6 +1912,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -1919,17 +1926,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -2079,6 +2086,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -2092,17 +2100,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -2569,6 +2577,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -2582,17 +2591,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -2649,6 +2658,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -2662,17 +2672,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -2753,6 +2763,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -2766,17 +2777,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -2844,11 +2855,11 @@ export class KipperParser extends KipperParserBase { this._errHandler.sync(this); _la = this._input.LA(1); if ( - ((_la - 75) & ~0x1f) === 0 && - ((1 << (_la - 75)) & - ((1 << (KipperParser.Identifier - 75)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 75)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 75)))) !== + ((_la - 76) & ~0x1f) === 0 && + ((1 << (_la - 76)) & + ((1 << (KipperParser.Identifier - 76)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 76)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 76)))) !== 0 ) { { @@ -2943,11 +2954,11 @@ export class KipperParser extends KipperParserBase { _la = this._input.LA(1); if ( !( - ((_la - 30) & ~0x1f) === 0 && - ((1 << (_la - 30)) & - ((1 << (KipperParser.Void - 30)) | - (1 << (KipperParser.Null - 30)) | - (1 << (KipperParser.Undefined - 30)))) !== + ((_la - 31) & ~0x1f) === 0 && + ((1 << (_la - 31)) & + ((1 << (KipperParser.Void - 31)) | + (1 << (KipperParser.Null - 31)) | + (1 << (KipperParser.Undefined - 31)))) !== 0 ) ) { @@ -2994,7 +3005,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 548; + this.state = 557; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -3039,6 +3050,7 @@ export class KipperParser extends KipperParserBase { (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -3052,17 +3064,17 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { @@ -3076,13 +3088,69 @@ export class KipperParser extends KipperParserBase { _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; + case KipperParser.New: + { + _localctx = new NewInstantiationExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 548; + this.match(KipperParser.New); + this.state = 549; + this.typeSpecifierExpression(); + this.state = 550; + this.match(KipperParser.LeftParen); + this.state = 552; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + 0) + ) { + { + this.state = 551; + this.argumentExpressionList(); + } + } + + this.state = 554; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; + } + break; default: throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 571; + this.state = 580; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3090,28 +3158,77 @@ export class KipperParser extends KipperParserBase { } _prevctx = _localctx; { - this.state = 569; + this.state = 578; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 50, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { case 1: { - _localctx = new FunctionCallExpressionContext( + _localctx = new DotNotationMemberAccessExpressionContext( new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 550; + this.state = 559; + if (!this.precpred(this._ctx, 6)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); + } + this.state = 560; + this.dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 2: + { + _localctx = new BracketNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 563; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 551; + this.state = 564; + this.bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 3: + { + _localctx = new SliceNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 567; + if (!this.precpred(this._ctx, 4)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); + } + this.state = 568; + this.sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 4: + { + _localctx = new FunctionCallExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 571; + if (!this.precpred(this._ctx, 3)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 572; this.match(KipperParser.LeftParen); - this.state = 553; + this.state = 574; this._errHandler.sync(this); _la = this._input.LA(1); if ( (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -3125,84 +3242,36 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { - this.state = 552; + this.state = 573; this.argumentExpressionList(); } } - this.state = 555; + this.state = 576; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; - - case 2: - { - _localctx = new DotNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 557; - if (!this.precpred(this._ctx, 3)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 558; - this.dotNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 3: - { - _localctx = new BracketNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 561; - if (!this.precpred(this._ctx, 2)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); - } - this.state = 562; - this.bracketNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 4: - { - _localctx = new SliceNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 565; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 566; - this.sliceNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; } } } - this.state = 573; + this.state = 582; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 51, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); } } } catch (re) { @@ -3226,21 +3295,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 574; + this.state = 583; this.assignmentExpression(); - this.state = 579; + this.state = 588; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 575; + this.state = 584; this.match(KipperParser.Comma); - this.state = 576; + this.state = 585; this.assignmentExpression(); } } - this.state = 581; + this.state = 590; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3265,9 +3334,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 582; + this.state = 591; this.match(KipperParser.Dot); - this.state = 583; + this.state = 592; this.identifier(); } } catch (re) { @@ -3290,11 +3359,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 585; + this.state = 594; this.match(KipperParser.LeftBracket); - this.state = 586; + this.state = 595; this.expression(); - this.state = 587; + this.state = 596; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3318,15 +3387,16 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 589; + this.state = 598; this.match(KipperParser.LeftBracket); - this.state = 593; + this.state = 602; this._errHandler.sync(this); _la = this._input.LA(1); if ( (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -3340,35 +3410,36 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { - this.state = 590; + this.state = 599; this.expression(); _localctx.sliceStart = true; } } - this.state = 595; + this.state = 604; this.match(KipperParser.Colon); - this.state = 599; + this.state = 608; this._errHandler.sync(this); _la = this._input.LA(1); if ( (((_la - 22) & ~0x1f) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Void - 22)) | @@ -3382,27 +3453,27 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || - (((_la - 54) & ~0x1f) === 0 && - ((1 << (_la - 54)) & - ((1 << (KipperParser.Not - 54)) | - (1 << (KipperParser.BitwiseNot - 54)) | - (1 << (KipperParser.Identifier - 54)) | - (1 << (KipperParser.IntegerConstant - 54)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 54)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 54)) | - (1 << (KipperParser.FloatingConstant - 54)) | - (1 << (KipperParser.FStringSingleQuoteStart - 54)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 54)))) !== + (((_la - 55) & ~0x1f) === 0 && + ((1 << (_la - 55)) & + ((1 << (KipperParser.Not - 55)) | + (1 << (KipperParser.BitwiseNot - 55)) | + (1 << (KipperParser.Identifier - 55)) | + (1 << (KipperParser.IntegerConstant - 55)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | + (1 << (KipperParser.FloatingConstant - 55)) | + (1 << (KipperParser.FStringSingleQuoteStart - 55)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== 0) ) { { - this.state = 596; + this.state = 605; this.expression(); _localctx.sliceEnd = true; } } - this.state = 601; + this.state = 610; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3423,13 +3494,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 116, KipperParser.RULE_postfixExpression); try { - this.state = 605; + this.state = 614; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 55, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 603; + this.state = 612; this.computedPrimaryExpression(0); } break; @@ -3437,7 +3508,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 604; + this.state = 613; this.incrementOrDecrementPostfixExpression(); } break; @@ -3465,9 +3536,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 607; + this.state = 616; this.computedPrimaryExpression(0); - this.state = 608; + this.state = 617; this.incrementOrDecrementOperator(); } } catch (re) { @@ -3488,10 +3559,11 @@ export class KipperParser extends KipperParserBase { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 120, KipperParser.RULE_unaryExpression); try { - this.state = 613; + this.state = 622; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: + case KipperParser.New: case KipperParser.True: case KipperParser.False: case KipperParser.Void: @@ -3509,7 +3581,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 610; + this.state = 619; this.postfixExpression(); } break; @@ -3517,7 +3589,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 611; + this.state = 620; this.incrementOrDecrementUnaryExpression(); } break; @@ -3527,7 +3599,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.BitwiseNot: this.enterOuterAlt(_localctx, 3); { - this.state = 612; + this.state = 621; this.operatorModifiedUnaryExpression(); } break; @@ -3557,9 +3629,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 615; + this.state = 624; this.incrementOrDecrementOperator(); - this.state = 616; + this.state = 625; this.postfixExpression(); } } catch (re) { @@ -3585,9 +3657,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 618; + this.state = 627; this.unaryOperator(); - this.state = 619; + this.state = 628; this.postfixExpression(); } } catch (re) { @@ -3611,7 +3683,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 621; + this.state = 630; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -3645,16 +3717,16 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 623; + this.state = 632; _la = this._input.LA(1); if ( !( - ((_la - 44) & ~0x1f) === 0 && - ((1 << (_la - 44)) & - ((1 << (KipperParser.Plus - 44)) | - (1 << (KipperParser.Minus - 44)) | - (1 << (KipperParser.Not - 44)) | - (1 << (KipperParser.BitwiseNot - 44)))) !== + ((_la - 45) & ~0x1f) === 0 && + ((1 << (_la - 45)) & + ((1 << (KipperParser.Plus - 45)) | + (1 << (KipperParser.Minus - 45)) | + (1 << (KipperParser.Not - 45)) | + (1 << (KipperParser.BitwiseNot - 45)))) !== 0 ) ) { @@ -3686,14 +3758,14 @@ export class KipperParser extends KipperParserBase { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 130, KipperParser.RULE_castOrConvertExpression); try { - this.state = 630; + this.state = 639; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 57, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 625; + this.state = 634; this.unaryExpression(); } break; @@ -3702,11 +3774,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 626; + this.state = 635; this.unaryExpression(); - this.state = 627; + this.state = 636; this.match(KipperParser.As); - this.state = 628; + this.state = 637; this.typeSpecifierExpression(); } break; @@ -3749,13 +3821,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 633; + this.state = 642; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 640; + this.state = 649; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 58, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3768,20 +3840,20 @@ export class KipperParser extends KipperParserBase { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 635; + this.state = 644; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 636; + this.state = 645; _la = this._input.LA(1); if ( !( - ((_la - 48) & ~0x1f) === 0 && - ((1 << (_la - 48)) & - ((1 << (KipperParser.Star - 48)) | - (1 << (KipperParser.Div - 48)) | - (1 << (KipperParser.Mod - 48)) | - (1 << (KipperParser.PowerTo - 48)))) !== + ((_la - 49) & ~0x1f) === 0 && + ((1 << (_la - 49)) & + ((1 << (KipperParser.Star - 49)) | + (1 << (KipperParser.Div - 49)) | + (1 << (KipperParser.Mod - 49)) | + (1 << (KipperParser.PowerTo - 49)))) !== 0 ) ) { @@ -3794,14 +3866,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 637; + this.state = 646; this.castOrConvertExpression(); } } } - this.state = 642; + this.state = 651; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 58, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); } } } catch (re) { @@ -3842,13 +3914,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 644; + this.state = 653; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 651; + this.state = 660; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3861,11 +3933,11 @@ export class KipperParser extends KipperParserBase { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 646; + this.state = 655; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 647; + this.state = 656; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -3877,14 +3949,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 648; + this.state = 657; this.multiplicativeExpression(0); } } } - this.state = 653; + this.state = 662; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); } } } catch (re) { @@ -3924,13 +3996,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 655; + this.state = 664; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 663; + this.state = 672; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3943,20 +4015,20 @@ export class KipperParser extends KipperParserBase { new BitwiseShiftExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 657; + this.state = 666; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 658; + this.state = 667; this.bitwiseShiftOperators(); - this.state = 659; + this.state = 668; this.bitwiseAndExpression(0); } } } - this.state = 665; + this.state = 674; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); } } } catch (re) { @@ -3980,15 +4052,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 666; + this.state = 675; _la = this._input.LA(1); if ( !( - ((_la - 71) & ~0x1f) === 0 && - ((1 << (_la - 71)) & - ((1 << (KipperParser.BitwiseZeroFillLeftShift - 71)) | - (1 << (KipperParser.BitwiseSignedRightShift - 71)) | - (1 << (KipperParser.BitwiseZeroFillRightShift - 71)))) !== + ((_la - 72) & ~0x1f) === 0 && + ((1 << (_la - 72)) & + ((1 << (KipperParser.BitwiseZeroFillLeftShift - 72)) | + (1 << (KipperParser.BitwiseSignedRightShift - 72)) | + (1 << (KipperParser.BitwiseZeroFillRightShift - 72)))) !== 0 ) ) { @@ -4040,13 +4112,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 669; + this.state = 678; this.bitwiseShiftExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 676; + this.state = 685; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4059,20 +4131,20 @@ export class KipperParser extends KipperParserBase { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 671; + this.state = 680; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 672; + this.state = 681; _la = this._input.LA(1); if ( !( - ((_la - 63) & ~0x1f) === 0 && - ((1 << (_la - 63)) & - ((1 << (KipperParser.Less - 63)) | - (1 << (KipperParser.LessEqual - 63)) | - (1 << (KipperParser.Greater - 63)) | - (1 << (KipperParser.GreaterEqual - 63)))) !== + ((_la - 64) & ~0x1f) === 0 && + ((1 << (_la - 64)) & + ((1 << (KipperParser.Less - 64)) | + (1 << (KipperParser.LessEqual - 64)) | + (1 << (KipperParser.Greater - 64)) | + (1 << (KipperParser.GreaterEqual - 64)))) !== 0 ) ) { @@ -4085,14 +4157,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 673; + this.state = 682; this.bitwiseShiftExpression(0); } } } - this.state = 678; + this.state = 687; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); } } } catch (re) { @@ -4133,13 +4205,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 680; + this.state = 689; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 687; + this.state = 696; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4152,11 +4224,11 @@ export class KipperParser extends KipperParserBase { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 682; + this.state = 691; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 683; + this.state = 692; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -4168,14 +4240,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 684; + this.state = 693; this.relationalExpression(0); } } } - this.state = 689; + this.state = 698; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); } } } catch (re) { @@ -4215,13 +4287,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 691; + this.state = 700; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 698; + this.state = 707; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4234,20 +4306,20 @@ export class KipperParser extends KipperParserBase { new BitwiseAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 693; + this.state = 702; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 694; + this.state = 703; this.match(KipperParser.BitwiseAnd); - this.state = 695; + this.state = 704; this.equalityExpression(0); } } } - this.state = 700; + this.state = 709; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); } } } catch (re) { @@ -4287,13 +4359,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 702; + this.state = 711; this.bitwiseAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 709; + this.state = 718; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4306,20 +4378,20 @@ export class KipperParser extends KipperParserBase { new BitwiseXorExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 704; + this.state = 713; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 705; + this.state = 714; this.match(KipperParser.BitwiseXor); - this.state = 706; + this.state = 715; this.bitwiseAndExpression(0); } } } - this.state = 711; + this.state = 720; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); } } } catch (re) { @@ -4359,13 +4431,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 713; + this.state = 722; this.bitwiseXorExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 720; + this.state = 729; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4378,20 +4450,20 @@ export class KipperParser extends KipperParserBase { new BitwiseOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 715; + this.state = 724; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 716; + this.state = 725; this.match(KipperParser.BitwiseOr); - this.state = 717; + this.state = 726; this.bitwiseXorExpression(0); } } } - this.state = 722; + this.state = 731; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); } } } catch (re) { @@ -4431,13 +4503,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 724; + this.state = 733; this.bitwiseOrExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 731; + this.state = 740; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4450,20 +4522,20 @@ export class KipperParser extends KipperParserBase { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 726; + this.state = 735; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 727; + this.state = 736; this.match(KipperParser.AndAnd); - this.state = 728; + this.state = 737; this.bitwiseOrExpression(0); } } } - this.state = 733; + this.state = 742; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); } } } catch (re) { @@ -4503,13 +4575,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 735; + this.state = 744; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 742; + this.state = 751; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4522,20 +4594,20 @@ export class KipperParser extends KipperParserBase { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 737; + this.state = 746; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 738; + this.state = 747; this.match(KipperParser.OrOr); - this.state = 739; + this.state = 748; this.logicalAndExpression(0); } } } - this.state = 744; + this.state = 753; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); } } } catch (re) { @@ -4556,14 +4628,14 @@ export class KipperParser extends KipperParserBase { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 154, KipperParser.RULE_conditionalExpression); try { - this.state = 752; + this.state = 761; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 68, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 745; + this.state = 754; this.logicalOrExpression(0); } break; @@ -4572,15 +4644,15 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 746; + this.state = 755; this.logicalOrExpression(0); - this.state = 747; + this.state = 756; this.match(KipperParser.QuestionMark); - this.state = 748; + this.state = 757; this.conditionalExpression(); - this.state = 749; + this.state = 758; this.match(KipperParser.Colon); - this.state = 750; + this.state = 759; this.conditionalExpression(); } break; @@ -4603,14 +4675,14 @@ export class KipperParser extends KipperParserBase { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 156, KipperParser.RULE_assignmentExpression); try { - this.state = 759; + this.state = 768; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 754; + this.state = 763; this.conditionalExpression(); } break; @@ -4619,11 +4691,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 755; + this.state = 764; this.computedPrimaryExpression(0); - this.state = 756; + this.state = 765; this.assignmentOperator(); - this.state = 757; + this.state = 766; this.assignmentExpression(); } break; @@ -4649,18 +4721,18 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 761; + this.state = 770; _la = this._input.LA(1); if ( !( - ((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Assign - 55)) | - (1 << (KipperParser.PlusAssign - 55)) | - (1 << (KipperParser.MinusAssign - 55)) | - (1 << (KipperParser.StarAssign - 55)) | - (1 << (KipperParser.DivAssign - 55)) | - (1 << (KipperParser.ModAssign - 55)))) !== + ((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Assign - 56)) | + (1 << (KipperParser.PlusAssign - 56)) | + (1 << (KipperParser.MinusAssign - 56)) | + (1 << (KipperParser.StarAssign - 56)) | + (1 << (KipperParser.DivAssign - 56)) | + (1 << (KipperParser.ModAssign - 56)))) !== 0 ) ) { @@ -4695,25 +4767,25 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 763; + this.state = 772; this.assignmentExpression(); - this.state = 768; + this.state = 777; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 764; + this.state = 773; this.match(KipperParser.Comma); - this.state = 765; + this.state = 774; this.assignmentExpression(); } } } - this.state = 770; + this.state = 779; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); } } } catch (re) { @@ -4734,13 +4806,13 @@ export class KipperParser extends KipperParserBase { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 162, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 774; + this.state = 783; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 71, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 771; + this.state = 780; this.identifierTypeSpecifierExpression(); } break; @@ -4748,7 +4820,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 772; + this.state = 781; this.genericTypeSpecifierExpression(); } break; @@ -4756,7 +4828,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 773; + this.state = 782; this.typeofTypeSpecifierExpression(); } break; @@ -4784,7 +4856,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 776; + this.state = 785; this.typeSpecifierIdentifier(); } } catch (re) { @@ -4811,46 +4883,46 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 778; + this.state = 787; this.typeSpecifierIdentifier(); - this.state = 779; - this.match(KipperParser.Less); this.state = 788; + this.match(KipperParser.Less); + this.state = 797; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 29) & ~0x1f) === 0 && - ((1 << (_la - 29)) & - ((1 << (KipperParser.Typeof - 29)) | - (1 << (KipperParser.Void - 29)) | - (1 << (KipperParser.Null - 29)) | - (1 << (KipperParser.Undefined - 29)))) !== + (((_la - 30) & ~0x1f) === 0 && + ((1 << (_la - 30)) & + ((1 << (KipperParser.Typeof - 30)) | + (1 << (KipperParser.Void - 30)) | + (1 << (KipperParser.Null - 30)) | + (1 << (KipperParser.Undefined - 30)))) !== 0) || _la === KipperParser.Identifier ) { { - this.state = 780; + this.state = 789; this.typeSpecifierExpression(); - this.state = 785; + this.state = 794; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 781; + this.state = 790; this.match(KipperParser.Comma); - this.state = 782; + this.state = 791; this.typeSpecifierExpression(); } } - this.state = 787; + this.state = 796; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 790; + this.state = 799; this.match(KipperParser.Greater); } } catch (re) { @@ -4876,13 +4948,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 792; + this.state = 801; this.match(KipperParser.Typeof); - this.state = 793; + this.state = 802; this.match(KipperParser.LeftParen); - this.state = 794; + this.state = 803; this.typeSpecifierIdentifier(); - this.state = 795; + this.state = 804; this.match(KipperParser.RightParen); } } catch (re) { @@ -4906,15 +4978,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 797; + this.state = 806; _la = this._input.LA(1); if ( !( - (((_la - 30) & ~0x1f) === 0 && - ((1 << (_la - 30)) & - ((1 << (KipperParser.Void - 30)) | - (1 << (KipperParser.Null - 30)) | - (1 << (KipperParser.Undefined - 30)))) !== + (((_la - 31) & ~0x1f) === 0 && + ((1 << (_la - 31)) & + ((1 << (KipperParser.Void - 31)) | + (1 << (KipperParser.Null - 31)) | + (1 << (KipperParser.Undefined - 31)))) !== 0) || _la === KipperParser.Identifier ) @@ -4993,16 +5065,16 @@ export class KipperParser extends KipperParserBase { private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { case 1: - return this.precpred(this._ctx, 5); + return this.precpred(this._ctx, 6); case 2: - return this.precpred(this._ctx, 3); + return this.precpred(this._ctx, 5); case 3: - return this.precpred(this._ctx, 2); + return this.precpred(this._ctx, 4); case 4: - return this.precpred(this._ctx, 1); + return this.precpred(this._ctx, 3); } return true; } @@ -5079,7 +5151,7 @@ export class KipperParser extends KipperParserBase { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Y\u0322\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Z\u032B\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -5129,169 +5201,170 @@ export class KipperParser extends KipperParserBase { "\n3\x033\x053\u0202\n3\x033\x033\x034\x034\x034\x034\x074\u020A\n4\f4" + "\x0E4\u020D\v4\x054\u020F\n4\x034\x054\u0212\n4\x034\x034\x035\x035\x03" + "5\x035\x036\x036\x037\x037\x037\x037\x037\x037\x057\u0222\n7\x037\x03" + - "7\x037\x057\u0227\n7\x037\x037\x037\x057\u022C\n7\x037\x037\x037\x037" + - "\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x077\u023C\n7\f7\x0E" + - "7\u023F\v7\x038\x038\x038\x078\u0244\n8\f8\x0E8\u0247\v8\x039\x039\x03" + - "9\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x05;\u0254\n;\x03;\x03;\x03" + - ";\x03;\x05;\u025A\n;\x03;\x03;\x03<\x03<\x05<\u0260\n<\x03=\x03=\x03=" + - "\x03>\x03>\x03>\x05>\u0268\n>\x03?\x03?\x03?\x03@\x03@\x03@\x03A\x03A" + - "\x03B\x03B\x03C\x03C\x03C\x03C\x03C\x05C\u0279\nC\x03D\x03D\x03D\x03D" + - "\x03D\x03D\x07D\u0281\nD\fD\x0ED\u0284\vD\x03E\x03E\x03E\x03E\x03E\x03" + - "E\x07E\u028C\nE\fE\x0EE\u028F\vE\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x07" + - "F\u0298\nF\fF\x0EF\u029B\vF\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03H\x07" + - "H\u02A5\nH\fH\x0EH\u02A8\vH\x03I\x03I\x03I\x03I\x03I\x03I\x07I\u02B0\n" + - "I\fI\x0EI\u02B3\vI\x03J\x03J\x03J\x03J\x03J\x03J\x07J\u02BB\nJ\fJ\x0E" + - "J\u02BE\vJ\x03K\x03K\x03K\x03K\x03K\x03K\x07K\u02C6\nK\fK\x0EK\u02C9\v" + - "K\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D1\nL\fL\x0EL\u02D4\vL\x03M\x03" + - "M\x03M\x03M\x03M\x03M\x07M\u02DC\nM\fM\x0EM\u02DF\vM\x03N\x03N\x03N\x03" + - "N\x03N\x03N\x07N\u02E7\nN\fN\x0EN\u02EA\vN\x03O\x03O\x03O\x03O\x03O\x03" + - "O\x03O\x05O\u02F3\nO\x03P\x03P\x03P\x03P\x03P\x05P\u02FA\nP\x03Q\x03Q" + - "\x03R\x03R\x03R\x07R\u0301\nR\fR\x0ER\u0304\vR\x03S\x03S\x03S\x05S\u0309" + - "\nS\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x07U\u0312\nU\fU\x0EU\u0315\vU" + - "\x05U\u0317\nU\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x02\x02" + - "\rl\x86\x88\x8A\x8E\x90\x92\x94\x96\x98\x9AX\x02\x02\x04\x02\x06\x02\b" + - "\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02" + - '\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x02' + - "6\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + - "R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02" + - "n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02" + - "\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02" + - "\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02" + - "\xAA\x02\xAC\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1D\x1E" + - '\x03\x02OP\x04\x02NNQQ\x03\x02 "\x04\x02//11\x06\x02..0088HH\x03\x02' + - '25\x04\x02..00\x03\x02IK\x03\x02AD\x03\x02?@\x03\x029>\x04\x02 "MM\x02' + - "\u032A\x02\xAF\x03\x02\x02\x02\x04\xB4\x03\x02\x02\x02\x06\xB8\x03\x02" + - "\x02\x02\b\xBB\x03\x02\x02\x02\n\xC2\x03\x02\x02\x02\f\xCA\x03\x02\x02" + - "\x02\x0E\xCC\x03\x02\x02\x02\x10\xCF\x03\x02\x02\x02\x12\xD1\x03\x02\x02" + - "\x02\x14\xD8\x03\x02\x02\x02\x16\xDA\x03\x02\x02\x02\x18\xDC\x03\x02\x02" + - "\x02\x1A\xDE\x03\x02\x02\x02\x1C\xEA\x03\x02\x02\x02\x1E\xF2\x03\x02\x02" + - '\x02 \xF6\x03\x02\x02\x02"\u0103\x03\x02\x02\x02$\u0105\x03\x02\x02\x02' + - "&\u010A\x03\x02\x02\x02(\u0114\x03\x02\x02\x02*\u0123\x03\x02\x02\x02" + - ",\u0125\x03\x02\x02\x02.\u0129\x03\x02\x02\x020\u0134\x03\x02\x02\x02" + - "2\u0142\x03\x02\x02\x024\u0144\x03\x02\x02\x026\u014B\x03\x02\x02\x02" + - "8\u0152\x03\x02\x02\x02:\u0154\x03\x02\x02\x02<\u015D\x03\x02\x02\x02" + - ">\u0172\x03\x02\x02\x02@\u0177\x03\x02\x02\x02B\u0179\x03\x02\x02\x02" + - "D\u0192\x03\x02\x02\x02F\u0198\x03\x02\x02\x02H\u01A0\x03\x02\x02\x02" + - "J\u01A3\x03\x02\x02\x02L\u01B3\x03\x02\x02\x02N\u01B5\x03\x02\x02\x02" + - "P\u01C1\x03\x02\x02\x02R\u01C5\x03\x02\x02\x02T\u01C7\x03\x02\x02\x02" + - "V\u01C9\x03\x02\x02\x02X\u01CD\x03\x02\x02\x02Z\u01CF\x03\x02\x02\x02" + - "\\\u01E1\x03\x02\x02\x02^\u01E9\x03\x02\x02\x02`\u01F1\x03\x02\x02\x02" + - "b\u01F3\x03\x02\x02\x02d\u01F5\x03\x02\x02\x02f\u0205\x03\x02\x02\x02" + - "h\u0215\x03\x02\x02\x02j\u0219\x03\x02\x02\x02l\u0226\x03\x02\x02\x02" + - "n\u0240\x03\x02\x02\x02p\u0248\x03\x02\x02\x02r\u024B\x03\x02\x02\x02" + - "t\u024F\x03\x02\x02\x02v\u025F\x03\x02\x02\x02x\u0261\x03\x02\x02\x02" + - "z\u0267\x03\x02\x02\x02|\u0269\x03\x02\x02\x02~\u026C\x03\x02\x02\x02" + - "\x80\u026F\x03\x02\x02\x02\x82\u0271\x03\x02\x02\x02\x84\u0278\x03\x02" + - "\x02\x02\x86\u027A\x03\x02\x02\x02\x88\u0285\x03\x02\x02\x02\x8A\u0290" + - "\x03\x02\x02\x02\x8C\u029C\x03\x02\x02\x02\x8E\u029E\x03\x02\x02\x02\x90" + - "\u02A9\x03\x02\x02\x02\x92\u02B4\x03\x02\x02\x02\x94\u02BF\x03\x02\x02" + - "\x02\x96\u02CA\x03\x02\x02\x02\x98\u02D5\x03\x02\x02\x02\x9A\u02E0\x03" + - "\x02\x02\x02\x9C\u02F2\x03\x02\x02\x02\x9E\u02F9\x03\x02\x02\x02\xA0\u02FB" + - "\x03\x02\x02\x02\xA2\u02FD\x03\x02\x02\x02\xA4\u0308\x03\x02\x02\x02\xA6" + - "\u030A\x03\x02\x02\x02\xA8\u030C\x03\x02\x02\x02\xAA\u031A\x03\x02\x02" + - "\x02\xAC\u031F\x03\x02\x02\x02\xAE\xB0\x05\x04\x03\x02\xAF\xAE\x03\x02" + - "\x02\x02\xAF\xB0\x03\x02\x02\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\x07\x02" + - "\x02\x03\xB2\x03\x03\x02\x02\x02\xB3\xB5\x05\x06\x04\x02\xB4\xB3\x03\x02" + - "\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6\xB4\x03\x02\x02\x02\xB6\xB7\x03\x02" + - "\x02\x02\xB7\x05\x03\x02\x02\x02\xB8\xB9\x05\b\x05\x02\xB9\x07\x03\x02" + - "\x02\x02\xBA\xBC\x05\n\x06\x02\xBB\xBA\x03\x02\x02\x02\xBC\xBD\x03\x02" + - "\x02\x02\xBD\xBB\x03\x02\x02\x02\xBD\xBE\x03\x02\x02\x02\xBE\t\x03\x02" + - "\x02\x02\xBF\xC3\x052\x1A\x02\xC0\xC3\x05\f\x07\x02\xC1\xC3\x07$\x02\x02" + - "\xC2\xBF\x03\x02\x02\x02\xC2\xC0\x03\x02\x02\x02\xC2\xC1\x03\x02\x02\x02" + - "\xC3\v\x03\x02\x02\x02\xC4\xC5\x05\x0E\b\x02\xC5\xC6\x07$\x02\x02\xC6" + - "\xCB\x03\x02\x02\x02\xC7\xCB\x05\x1A\x0E\x02\xC8\xCB\x05 \x11\x02\xC9" + - "\xCB\x05(\x15\x02\xCA\xC4\x03\x02\x02\x02\xCA\xC7\x03\x02\x02\x02\xCA" + - "\xC8\x03\x02\x02\x02\xCA\xC9\x03\x02\x02\x02\xCB\r\x03\x02\x02\x02\xCC" + - "\xCD\x05\x10\t\x02\xCD\xCE\x05\x12\n\x02\xCE\x0F\x03\x02\x02\x02\xCF\xD0" + - "\t\x02\x02\x02\xD0\x11\x03\x02\x02\x02\xD1\xD2\x05\x16\f\x02\xD2\xD3\x07" + - "&\x02\x02\xD3\xD6\x05\xA4S\x02\xD4\xD5\x079\x02\x02\xD5\xD7\x05\x14\v" + - "\x02\xD6\xD4\x03\x02\x02\x02\xD6\xD7\x03\x02\x02\x02\xD7\x13\x03\x02\x02" + - "\x02\xD8\xD9\x05\x9EP\x02\xD9\x15\x03\x02\x02\x02\xDA\xDB\x05\x18\r\x02" + - "\xDB\x17\x03\x02\x02\x02\xDC\xDD\x07M\x02\x02\xDD\x19\x03\x02\x02\x02" + - "\xDE\xDF\x07\x16\x02\x02\xDF\xE0\x05\x16\f\x02\xE0\xE2\x07'\x02\x02\xE1" + - "\xE3\x05\x1C\x0F\x02\xE2\xE1\x03\x02\x02\x02\xE2\xE3\x03\x02\x02\x02\xE3" + - "\xE4\x03\x02\x02\x02\xE4\xE5\x07(\x02\x02\xE5\xE6\x07\x19\x02\x02\xE6" + - "\xE8\x05\xA4S\x02\xE7\xE9\x054\x1B\x02\xE8\xE7\x03\x02\x02\x02\xE8\xE9" + - "\x03\x02\x02\x02\xE9\x1B\x03\x02\x02\x02\xEA\xEF\x05\x1E\x10\x02\xEB\xEC" + - "\x07#\x02\x02\xEC\xEE\x05\x1E\x10\x02\xED\xEB\x03\x02\x02\x02\xEE\xF1" + - "\x03\x02\x02\x02\xEF\xED\x03\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\x1D" + - "\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02\xF2\xF3\x05\x16\f\x02\xF3\xF4" + - "\x07&\x02\x02\xF4\xF5\x05\xA4S\x02\xF5\x1F\x03\x02\x02\x02\xF6\xF7\x07" + - '\x1B\x02\x02\xF7\xF8\x05\x16\f\x02\xF8\xFC\x07,\x02\x02\xF9\xFB\x05"' + - "\x12\x02\xFA\xF9\x03\x02\x02\x02\xFB\xFE\x03\x02\x02\x02\xFC\xFA\x03\x02" + - "\x02\x02\xFC\xFD\x03\x02\x02\x02\xFD\xFF\x03\x02\x02\x02\xFE\xFC\x03\x02" + - "\x02\x02\xFF\u0100\x07-\x02\x02\u0100!\x03\x02\x02\x02\u0101\u0104\x05" + - "$\x13\x02\u0102\u0104\x05&\x14\x02\u0103\u0101\x03\x02\x02\x02\u0103\u0102" + - "\x03\x02\x02\x02\u0104#\x03\x02\x02\x02\u0105\u0106\x05\x16\f\x02\u0106" + - "\u0107\x07&\x02\x02\u0107\u0108\x05\xA4S\x02\u0108\u0109\x07$\x02\x02" + - "\u0109%\x03\x02\x02\x02\u010A\u010B\x05\x16\f\x02\u010B\u010D\x07'\x02" + - "\x02\u010C\u010E\x05\x1C\x0F\x02\u010D\u010C\x03\x02\x02\x02\u010D\u010E" + - "\x03\x02\x02\x02\u010E\u010F\x03\x02\x02\x02\u010F\u0110\x07(\x02\x02" + - "\u0110\u0111\x07&\x02\x02\u0111\u0112\x05\xA4S\x02\u0112\u0113\x07$\x02" + - "\x02\u0113'\x03\x02\x02\x02\u0114\u0115\x07\x1A\x02\x02\u0115\u0116\x05" + - "\x16\f\x02\u0116\u011B\x07,\x02\x02\u0117\u011A\x05*\x16\x02\u0118\u011A" + - "\x07$\x02\x02\u0119\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02" + - "\u011A\u011D\x03\x02\x02\x02\u011B\u0119\x03\x02\x02\x02\u011B\u011C\x03" + - "\x02\x02\x02\u011C\u011E\x03\x02\x02\x02\u011D\u011B\x03\x02\x02\x02\u011E" + - "\u011F\x07-\x02\x02\u011F)\x03\x02\x02\x02\u0120\u0124\x05,\x17\x02\u0121" + - "\u0124\x05.\x18\x02\u0122\u0124\x050\x19\x02\u0123\u0120\x03\x02\x02\x02" + - "\u0123\u0121\x03\x02\x02\x02\u0123\u0122\x03\x02\x02\x02\u0124+\x03\x02" + - "\x02\x02\u0125\u0126\x05\x16\f\x02\u0126\u0127\x07&\x02\x02\u0127\u0128" + - "\x05\xA4S\x02\u0128-\x03\x02\x02\x02\u0129\u012A\x05\x16\f\x02\u012A\u012C" + - "\x07'\x02\x02\u012B\u012D\x05\x1C\x0F\x02\u012C\u012B\x03\x02\x02\x02" + - "\u012C\u012D\x03\x02\x02\x02\u012D\u012E\x03\x02\x02\x02\u012E\u012F\x07" + - "(\x02\x02\u012F\u0130\x07&\x02\x02\u0130\u0132\x05\xA4S\x02\u0131\u0133" + - "\x054\x1B\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133\x03\x02\x02\x02" + - "\u0133/\x03\x02\x02\x02\u0134\u0135\x07\x1C\x02\x02\u0135\u0137\x07'" + - "\x02\x02\u0136\u0138\x05\x1C\x0F\x02\u0137\u0136\x03\x02\x02\x02\u0137" + - "\u0138\x03\x02\x02\x02\u0138\u0139\x03\x02\x02\x02\u0139\u013A\x07(\x02" + - "\x02\u013A\u013B\x054\x1B\x02\u013B1\x03\x02\x02\x02\u013C\u0143\x056" + - "\x1C\x02\u013D\u0143\x058\x1D\x02\u013E\u0143\x05@!\x02\u013F\u0143\x05" + - "H%\x02\u0140\u0143\x05J&\x02\u0141\u0143\x054\x1B\x02\u0142\u013C\x03" + - "\x02\x02\x02\u0142\u013D\x03\x02\x02\x02\u0142\u013E\x03\x02\x02\x02\u0142" + - "\u013F\x03\x02\x02\x02\u0142\u0140\x03\x02\x02\x02\u0142\u0141\x03\x02" + - "\x02\x02\u01433\x03\x02\x02\x02\u0144\u0145\x06\x1B\x02\x02\u0145\u0147" + - "\x07,\x02\x02\u0146\u0148\x05\b\x05\x02\u0147\u0146\x03\x02\x02\x02\u0147" + - "\u0148\x03\x02\x02\x02\u0148\u0149\x03\x02\x02\x02\u0149\u014A\x07-\x02" + - "\x02\u014A5\x03\x02\x02\x02\u014B\u014C\b\x1C\x01\x02\u014C\u014D\x05" + - "\xA2R\x02\u014D\u014E\x07$\x02\x02\u014E\u014F\b\x1C\x01\x02\u014F7\x03" + - "\x02\x02\x02\u0150\u0153\x05:\x1E\x02\u0151\u0153\x05<\x1F\x02\u0152\u0150" + - "\x03\x02\x02\x02\u0152\u0151\x03\x02\x02\x02\u01539\x03\x02\x02\x02\u0154" + - "\u0155\x07\x12\x02\x02\u0155\u0156\x07'\x02\x02\u0156\u0157\x05\xA2R" + - "\x02\u0157\u0158\x07(\x02\x02\u0158\u015B\x052\x1A\x02\u0159\u015A\x07" + - "\x13\x02\x02\u015A\u015C\x052\x1A\x02\u015B\u0159\x03\x02\x02\x02\u015B" + - "\u015C\x03\x02\x02\x02\u015C;\x03\x02\x02\x02\u015D\u015E\x07\v\x02\x02" + - "\u015E\u015F\x07'\x02\x02\u015F\u0160\x05\xA2R\x02\u0160\u0161\x07(\x02" + - "\x02\u0161\u0165\x07,\x02\x02\u0162\u0164\x05> \x02\u0163\u0162\x03\x02" + - "\x02\x02\u0164\u0167\x03\x02\x02\x02\u0165\u0163\x03\x02\x02\x02\u0165" + - "\u0166\x03\x02\x02\x02\u0166\u0168\x03\x02\x02\x02\u0167\u0165\x03\x02" + - "\x02\x02\u0168\u0169\x07-\x02\x02\u0169=\x03\x02\x02\x02\u016A\u016B\x07" + - "\f\x02\x02\u016B\u016C\x05\xA2R\x02\u016C\u016D\x07&\x02\x02\u016D\u016E" + - "\x052\x1A\x02\u016E\u0173\x03\x02\x02\x02\u016F\u0170\x07\r\x02\x02\u0170" + - "\u0171\x07&\x02\x02\u0171\u0173\x052\x1A\x02\u0172\u016A\x03\x02\x02\x02" + - '\u0172\u016F\x03\x02\x02\x02\u0173?\x03\x02\x02\x02\u0174\u0178\x05B"' + - "\x02\u0175\u0178\x05D#\x02\u0176\u0178\x05F$\x02\u0177\u0174\x03\x02\x02" + - "\x02\u0177\u0175\x03\x02\x02\x02\u0177\u0176\x03\x02\x02\x02\u0178A\x03" + - "\x02\x02\x02\u0179\u017A\x07\x14\x02\x02\u017A\u0181\x07'\x02\x02\u017B" + - "\u017E\x05\x0E\b\x02\u017C\u017E\x05\xA2R\x02\u017D\u017B\x03\x02\x02" + - "\x02\u017D\u017C\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0180" + - '\b"\x01\x02\u0180\u0182\x03\x02\x02\x02\u0181\u017D\x03\x02\x02\x02\u0181' + - "\u0182\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0187\x07$\x02" + - '\x02\u0184\u0185\x05\xA2R\x02\u0185\u0186\b"\x01\x02\u0186\u0188\x03' + - "\x02\x02\x02\u0187\u0184\x03\x02\x02\x02\u0187\u0188\x03\x02\x02\x02\u0188" + - "\u0189\x03\x02\x02\x02\u0189\u018D\x07$\x02\x02\u018A\u018B\x05\xA2R\x02" + + "7\x037\x037\x037\x037\x037\x057\u022B\n7\x037\x037\x037\x057\u0230\n7" + + "\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x057\u0241\n7\x037\x037\x077\u0245\n7\f7\x0E7\u0248\v7\x038\x03" + + "8\x038\x078\u024D\n8\f8\x0E8\u0250\v8\x039\x039\x039\x03:\x03:\x03:\x03" + + ":\x03;\x03;\x03;\x03;\x05;\u025D\n;\x03;\x03;\x03;\x03;\x05;\u0263\n;" + + "\x03;\x03;\x03<\x03<\x05<\u0269\n<\x03=\x03=\x03=\x03>\x03>\x03>\x05>" + + "\u0271\n>\x03?\x03?\x03?\x03@\x03@\x03@\x03A\x03A\x03B\x03B\x03C\x03C" + + "\x03C\x03C\x03C\x05C\u0282\nC\x03D\x03D\x03D\x03D\x03D\x03D\x07D\u028A" + + "\nD\fD\x0ED\u028D\vD\x03E\x03E\x03E\x03E\x03E\x03E\x07E\u0295\nE\fE\x0E" + + "E\u0298\vE\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x07F\u02A1\nF\fF\x0EF\u02A4" + + "\vF\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03H\x07H\u02AE\nH\fH\x0EH\u02B1" + + "\vH\x03I\x03I\x03I\x03I\x03I\x03I\x07I\u02B9\nI\fI\x0EI\u02BC\vI\x03J" + + "\x03J\x03J\x03J\x03J\x03J\x07J\u02C4\nJ\fJ\x0EJ\u02C7\vJ\x03K\x03K\x03" + + "K\x03K\x03K\x03K\x07K\u02CF\nK\fK\x0EK\u02D2\vK\x03L\x03L\x03L\x03L\x03" + + "L\x03L\x07L\u02DA\nL\fL\x0EL\u02DD\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07" + + "M\u02E5\nM\fM\x0EM\u02E8\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02F0\n" + + "N\fN\x0EN\u02F3\vN\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x05O\u02FC\nO\x03" + + "P\x03P\x03P\x03P\x03P\x05P\u0303\nP\x03Q\x03Q\x03R\x03R\x03R\x07R\u030A" + + "\nR\fR\x0ER\u030D\vR\x03S\x03S\x03S\x05S\u0312\nS\x03T\x03T\x03U\x03U" + + "\x03U\x03U\x03U\x07U\u031B\nU\fU\x0EU\u031E\vU\x05U\u0320\nU\x03U\x03" + + "U\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x02\x02\rl\x86\x88\x8A\x8E\x90" + + "\x92\x94\x96\x98\x9AX\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02" + + "\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02" + + '"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02' + + ">\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02" + + "Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02" + + "v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A" + + "\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C" + + "\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\x02" + + "\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02PQ\x04\x02O" + + "ORR\x03\x02!#\x04\x020022\x06\x02//1199II\x03\x0236\x04\x02//11\x03\x02" + + "JL\x03\x02BE\x03\x02@A\x03\x02:?\x04\x02!#NN\x02\u0335\x02\xAF\x03\x02" + + "\x02\x02\x04\xB4\x03\x02\x02\x02\x06\xB8\x03\x02\x02\x02\b\xBB\x03\x02" + + "\x02\x02\n\xC2\x03\x02\x02\x02\f\xCA\x03\x02\x02\x02\x0E\xCC\x03\x02\x02" + + "\x02\x10\xCF\x03\x02\x02\x02\x12\xD1\x03\x02\x02\x02\x14\xD8\x03\x02\x02" + + "\x02\x16\xDA\x03\x02\x02\x02\x18\xDC\x03\x02\x02\x02\x1A\xDE\x03\x02\x02" + + "\x02\x1C\xEA\x03\x02\x02\x02\x1E\xF2\x03\x02\x02\x02 \xF6\x03\x02\x02" + + '\x02"\u0103\x03\x02\x02\x02$\u0105\x03\x02\x02\x02&\u010A\x03\x02\x02' + + "\x02(\u0114\x03\x02\x02\x02*\u0123\x03\x02\x02\x02,\u0125\x03\x02\x02" + + "\x02.\u0129\x03\x02\x02\x020\u0134\x03\x02\x02\x022\u0142\x03\x02\x02" + + "\x024\u0144\x03\x02\x02\x026\u014B\x03\x02\x02\x028\u0152\x03\x02\x02" + + "\x02:\u0154\x03\x02\x02\x02<\u015D\x03\x02\x02\x02>\u0172\x03\x02\x02" + + "\x02@\u0177\x03\x02\x02\x02B\u0179\x03\x02\x02\x02D\u0192\x03\x02\x02" + + "\x02F\u0198\x03\x02\x02\x02H\u01A0\x03\x02\x02\x02J\u01A3\x03\x02\x02" + + "\x02L\u01B3\x03\x02\x02\x02N\u01B5\x03\x02\x02\x02P\u01C1\x03\x02\x02" + + "\x02R\u01C5\x03\x02\x02\x02T\u01C7\x03\x02\x02\x02V\u01C9\x03\x02\x02" + + "\x02X\u01CD\x03\x02\x02\x02Z\u01CF\x03\x02\x02\x02\\\u01E1\x03\x02\x02" + + "\x02^\u01E9\x03\x02\x02\x02`\u01F1\x03\x02\x02\x02b\u01F3\x03\x02\x02" + + "\x02d\u01F5\x03\x02\x02\x02f\u0205\x03\x02\x02\x02h\u0215\x03\x02\x02" + + "\x02j\u0219\x03\x02\x02\x02l\u022F\x03\x02\x02\x02n\u0249\x03\x02\x02" + + "\x02p\u0251\x03\x02\x02\x02r\u0254\x03\x02\x02\x02t\u0258\x03\x02\x02" + + "\x02v\u0268\x03\x02\x02\x02x\u026A\x03\x02\x02\x02z\u0270\x03\x02\x02" + + "\x02|\u0272\x03\x02\x02\x02~\u0275\x03\x02\x02\x02\x80\u0278\x03\x02\x02" + + "\x02\x82\u027A\x03\x02\x02\x02\x84\u0281\x03\x02\x02\x02\x86\u0283\x03" + + "\x02\x02\x02\x88\u028E\x03\x02\x02\x02\x8A\u0299\x03\x02\x02\x02\x8C\u02A5" + + "\x03\x02\x02\x02\x8E\u02A7\x03\x02\x02\x02\x90\u02B2\x03\x02\x02\x02\x92" + + "\u02BD\x03\x02\x02\x02\x94\u02C8\x03\x02\x02\x02\x96\u02D3\x03\x02\x02" + + "\x02\x98\u02DE\x03\x02\x02\x02\x9A\u02E9\x03\x02\x02\x02\x9C\u02FB\x03" + + "\x02\x02\x02\x9E\u0302\x03\x02\x02\x02\xA0\u0304\x03\x02\x02\x02\xA2\u0306" + + "\x03\x02\x02\x02\xA4\u0311\x03\x02\x02\x02\xA6\u0313\x03\x02\x02\x02\xA8" + + "\u0315\x03\x02\x02\x02\xAA\u0323\x03\x02\x02\x02\xAC\u0328\x03\x02\x02" + + "\x02\xAE\xB0\x05\x04\x03\x02\xAF\xAE\x03\x02\x02\x02\xAF\xB0\x03\x02\x02" + + "\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\x07\x02\x02\x03\xB2\x03\x03\x02\x02" + + "\x02\xB3\xB5\x05\x06\x04\x02\xB4\xB3\x03\x02\x02\x02\xB5\xB6\x03\x02\x02" + + "\x02\xB6\xB4\x03\x02\x02\x02\xB6\xB7\x03\x02\x02\x02\xB7\x05\x03\x02\x02" + + "\x02\xB8\xB9\x05\b\x05\x02\xB9\x07\x03\x02\x02\x02\xBA\xBC\x05\n\x06\x02" + + "\xBB\xBA\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBB\x03\x02\x02\x02" + + "\xBD\xBE\x03\x02\x02\x02\xBE\t\x03\x02\x02\x02\xBF\xC3\x052\x1A\x02\xC0" + + "\xC3\x05\f\x07\x02\xC1\xC3\x07%\x02\x02\xC2\xBF\x03\x02\x02\x02\xC2\xC0" + + "\x03\x02\x02\x02\xC2\xC1\x03\x02\x02\x02\xC3\v\x03\x02\x02\x02\xC4\xC5" + + "\x05\x0E\b\x02\xC5\xC6\x07%\x02\x02\xC6\xCB\x03\x02\x02\x02\xC7\xCB\x05" + + "\x1A\x0E\x02\xC8\xCB\x05 \x11\x02\xC9\xCB\x05(\x15\x02\xCA\xC4\x03\x02" + + "\x02\x02\xCA\xC7\x03\x02\x02\x02\xCA\xC8\x03\x02\x02\x02\xCA\xC9\x03\x02" + + "\x02\x02\xCB\r\x03\x02\x02\x02\xCC\xCD\x05\x10\t\x02\xCD\xCE\x05\x12\n" + + "\x02\xCE\x0F\x03\x02\x02\x02\xCF\xD0\t\x02\x02\x02\xD0\x11\x03\x02\x02" + + "\x02\xD1\xD2\x05\x16\f\x02\xD2\xD3\x07'\x02\x02\xD3\xD6\x05\xA4S\x02" + + "\xD4\xD5\x07:\x02\x02\xD5\xD7\x05\x14\v\x02\xD6\xD4\x03\x02\x02\x02\xD6" + + "\xD7\x03\x02\x02\x02\xD7\x13\x03\x02\x02\x02\xD8\xD9\x05\x9EP\x02\xD9" + + "\x15\x03\x02\x02\x02\xDA\xDB\x05\x18\r\x02\xDB\x17\x03\x02\x02\x02\xDC" + + "\xDD\x07N\x02\x02\xDD\x19\x03\x02\x02\x02\xDE\xDF\x07\x16\x02\x02\xDF" + + "\xE0\x05\x16\f\x02\xE0\xE2\x07(\x02\x02\xE1\xE3\x05\x1C\x0F\x02\xE2\xE1" + + "\x03\x02\x02\x02\xE2\xE3\x03\x02\x02\x02\xE3\xE4\x03\x02\x02\x02\xE4\xE5" + + "\x07)\x02\x02\xE5\xE6\x07\x19\x02\x02\xE6\xE8\x05\xA4S\x02\xE7\xE9\x05" + + "4\x1B\x02\xE8\xE7\x03\x02\x02\x02\xE8\xE9\x03\x02\x02\x02\xE9\x1B\x03" + + "\x02\x02\x02\xEA\xEF\x05\x1E\x10\x02\xEB\xEC\x07$\x02\x02\xEC\xEE\x05" + + "\x1E\x10\x02\xED\xEB\x03\x02\x02\x02\xEE\xF1\x03\x02\x02\x02\xEF\xED\x03" + + "\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\x1D\x03\x02\x02\x02\xF1\xEF\x03" + + "\x02\x02\x02\xF2\xF3\x05\x16\f\x02\xF3\xF4\x07'\x02\x02\xF4\xF5\x05\xA4" + + "S\x02\xF5\x1F\x03\x02\x02\x02\xF6\xF7\x07\x1B\x02\x02\xF7\xF8\x05\x16" + + '\f\x02\xF8\xFC\x07-\x02\x02\xF9\xFB\x05"\x12\x02\xFA\xF9\x03\x02\x02' + + "\x02\xFB\xFE\x03\x02\x02\x02\xFC\xFA\x03\x02\x02\x02\xFC\xFD\x03\x02\x02" + + "\x02\xFD\xFF\x03\x02\x02\x02\xFE\xFC\x03\x02\x02\x02\xFF\u0100\x07.\x02" + + "\x02\u0100!\x03\x02\x02\x02\u0101\u0104\x05$\x13\x02\u0102\u0104\x05&" + + "\x14\x02\u0103\u0101\x03\x02\x02\x02\u0103\u0102\x03\x02\x02\x02\u0104" + + "#\x03\x02\x02\x02\u0105\u0106\x05\x16\f\x02\u0106\u0107\x07'\x02\x02" + + "\u0107\u0108\x05\xA4S\x02\u0108\u0109\x07%\x02\x02\u0109%\x03\x02\x02" + + "\x02\u010A\u010B\x05\x16\f\x02\u010B\u010D\x07(\x02\x02\u010C\u010E\x05" + + "\x1C\x0F\x02\u010D\u010C\x03\x02\x02\x02\u010D\u010E\x03\x02\x02\x02\u010E" + + "\u010F\x03\x02\x02\x02\u010F\u0110\x07)\x02\x02\u0110\u0111\x07'\x02" + + "\x02\u0111\u0112\x05\xA4S\x02\u0112\u0113\x07%\x02\x02\u0113'\x03\x02" + + "\x02\x02\u0114\u0115\x07\x1A\x02\x02\u0115\u0116\x05\x16\f\x02\u0116\u011B" + + "\x07-\x02\x02\u0117\u011A\x05*\x16\x02\u0118\u011A\x07%\x02\x02\u0119" + + "\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02\u011A\u011D\x03\x02" + + "\x02\x02\u011B\u0119\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C" + + "\u011E\x03\x02\x02\x02\u011D\u011B\x03\x02\x02\x02\u011E\u011F\x07.\x02" + + "\x02\u011F)\x03\x02\x02\x02\u0120\u0124\x05,\x17\x02\u0121\u0124\x05." + + "\x18\x02\u0122\u0124\x050\x19\x02\u0123\u0120\x03\x02\x02\x02\u0123\u0121" + + "\x03\x02\x02\x02\u0123\u0122\x03\x02\x02\x02\u0124+\x03\x02\x02\x02\u0125" + + "\u0126\x05\x16\f\x02\u0126\u0127\x07'\x02\x02\u0127\u0128\x05\xA4S\x02" + + "\u0128-\x03\x02\x02\x02\u0129\u012A\x05\x16\f\x02\u012A\u012C\x07(\x02" + + "\x02\u012B\u012D\x05\x1C\x0F\x02\u012C\u012B\x03\x02\x02\x02\u012C\u012D" + + "\x03\x02\x02\x02\u012D\u012E\x03\x02\x02\x02\u012E\u012F\x07)\x02\x02" + + "\u012F\u0130\x07'\x02\x02\u0130\u0132\x05\xA4S\x02\u0131\u0133\x054\x1B" + + "\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133\x03\x02\x02\x02\u0133/\x03" + + "\x02\x02\x02\u0134\u0135\x07\x1C\x02\x02\u0135\u0137\x07(\x02\x02\u0136" + + "\u0138\x05\x1C\x0F\x02\u0137\u0136\x03\x02\x02\x02\u0137\u0138\x03\x02" + + "\x02\x02\u0138\u0139\x03\x02\x02\x02\u0139\u013A\x07)\x02\x02\u013A\u013B" + + "\x054\x1B\x02\u013B1\x03\x02\x02\x02\u013C\u0143\x056\x1C\x02\u013D\u0143" + + "\x058\x1D\x02\u013E\u0143\x05@!\x02\u013F\u0143\x05H%\x02\u0140\u0143" + + "\x05J&\x02\u0141\u0143\x054\x1B\x02\u0142\u013C\x03\x02\x02\x02\u0142" + + "\u013D\x03\x02\x02\x02\u0142\u013E\x03\x02\x02\x02\u0142\u013F\x03\x02" + + "\x02\x02\u0142\u0140\x03\x02\x02\x02\u0142\u0141\x03\x02\x02\x02\u0143" + + "3\x03\x02\x02\x02\u0144\u0145\x06\x1B\x02\x02\u0145\u0147\x07-\x02\x02" + + "\u0146\u0148\x05\b\x05\x02\u0147\u0146\x03\x02\x02\x02\u0147\u0148\x03" + + "\x02\x02\x02\u0148\u0149\x03\x02\x02\x02\u0149\u014A\x07.\x02\x02\u014A" + + "5\x03\x02\x02\x02\u014B\u014C\b\x1C\x01\x02\u014C\u014D\x05\xA2R\x02\u014D" + + "\u014E\x07%\x02\x02\u014E\u014F\b\x1C\x01\x02\u014F7\x03\x02\x02\x02\u0150" + + "\u0153\x05:\x1E\x02\u0151\u0153\x05<\x1F\x02\u0152\u0150\x03\x02\x02\x02" + + "\u0152\u0151\x03\x02\x02\x02\u01539\x03\x02\x02\x02\u0154\u0155\x07\x12" + + "\x02\x02\u0155\u0156\x07(\x02\x02\u0156\u0157\x05\xA2R\x02\u0157\u0158" + + "\x07)\x02\x02\u0158\u015B\x052\x1A\x02\u0159\u015A\x07\x13\x02\x02\u015A" + + "\u015C\x052\x1A\x02\u015B\u0159\x03\x02\x02\x02\u015B\u015C\x03\x02\x02" + + "\x02\u015C;\x03\x02\x02\x02\u015D\u015E\x07\v\x02\x02\u015E\u015F\x07" + + "(\x02\x02\u015F\u0160\x05\xA2R\x02\u0160\u0161\x07)\x02\x02\u0161\u0165" + + "\x07-\x02\x02\u0162\u0164\x05> \x02\u0163\u0162\x03\x02\x02\x02\u0164" + + "\u0167\x03\x02\x02\x02\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02" + + "\x02\x02\u0166\u0168\x03\x02\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168" + + "\u0169\x07.\x02\x02\u0169=\x03\x02\x02\x02\u016A\u016B\x07\f\x02\x02\u016B" + + "\u016C\x05\xA2R\x02\u016C\u016D\x07'\x02\x02\u016D\u016E\x052\x1A\x02" + + "\u016E\u0173\x03\x02\x02\x02\u016F\u0170\x07\r\x02\x02\u0170\u0171\x07" + + "'\x02\x02\u0171\u0173\x052\x1A\x02\u0172\u016A\x03\x02\x02\x02\u0172" + + '\u016F\x03\x02\x02\x02\u0173?\x03\x02\x02\x02\u0174\u0178\x05B"\x02\u0175' + + "\u0178\x05D#\x02\u0176\u0178\x05F$\x02\u0177\u0174\x03\x02\x02\x02\u0177" + + "\u0175\x03\x02\x02\x02\u0177\u0176\x03\x02\x02\x02\u0178A\x03\x02\x02" + + "\x02\u0179\u017A\x07\x14\x02\x02\u017A\u0181\x07(\x02\x02\u017B\u017E" + + "\x05\x0E\b\x02\u017C\u017E\x05\xA2R\x02\u017D\u017B\x03\x02\x02\x02\u017D" + + '\u017C\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0180\b"\x01' + + "\x02\u0180\u0182\x03\x02\x02\x02\u0181\u017D\x03\x02\x02\x02\u0181\u0182" + + "\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0187\x07%\x02\x02" + + '\u0184\u0185\x05\xA2R\x02\u0185\u0186\b"\x01\x02\u0186\u0188\x03\x02' + + "\x02\x02\u0187\u0184\x03\x02\x02\x02\u0187\u0188\x03\x02\x02\x02\u0188" + + "\u0189\x03\x02\x02\x02\u0189\u018D\x07%\x02\x02\u018A\u018B\x05\xA2R\x02" + '\u018B\u018C\b"\x01\x02\u018C\u018E\x03\x02\x02\x02\u018D\u018A\x03\x02' + "\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E\u018F\x03\x02\x02\x02\u018F" + - "\u0190\x07(\x02\x02\u0190\u0191\x052\x1A\x02\u0191C\x03\x02\x02\x02\u0192" + - "\u0193\x07\x11\x02\x02\u0193\u0194\x07'\x02\x02\u0194\u0195\x05\xA2R" + - "\x02\u0195\u0196\x07(\x02\x02\u0196\u0197\x052\x1A\x02\u0197E\x03\x02" + - "\x02\x02\u0198\u0199\x07\x10\x02\x02\u0199\u019A\x052\x1A\x02\u019A\u019B" + - "\x07\x11\x02\x02\u019B\u019C\x07'\x02\x02\u019C\u019D\x05\xA2R\x02\u019D" + - "\u019E\x07(\x02\x02\u019E\u019F\x07$\x02\x02\u019FG\x03\x02\x02\x02\u01A0" + - "\u01A1\t\x03\x02\x02\u01A1\u01A2\x07$\x02\x02\u01A2I\x03\x02\x02\x02\u01A3" + + "\u0190\x07)\x02\x02\u0190\u0191\x052\x1A\x02\u0191C\x03\x02\x02\x02\u0192" + + "\u0193\x07\x11\x02\x02\u0193\u0194\x07(\x02\x02\u0194\u0195\x05\xA2R\x02" + + "\u0195\u0196\x07)\x02\x02\u0196\u0197\x052\x1A\x02\u0197E\x03\x02\x02" + + "\x02\u0198\u0199\x07\x10\x02\x02\u0199\u019A\x052\x1A\x02\u019A\u019B" + + "\x07\x11\x02\x02\u019B\u019C\x07(\x02\x02\u019C\u019D\x05\xA2R\x02\u019D" + + "\u019E\x07)\x02\x02\u019E\u019F\x07%\x02\x02\u019FG\x03\x02\x02\x02\u01A0" + + "\u01A1\t\x03\x02\x02\u01A1\u01A2\x07%\x02\x02\u01A2I\x03\x02\x02\x02\u01A3" + "\u01A5\x07\x17\x02\x02\u01A4\u01A6\x05\xA2R\x02\u01A5\u01A4\x03\x02\x02" + "\x02\u01A5\u01A6\x03\x02\x02\x02\u01A6\u01A7\x03\x02\x02\x02\u01A7\u01A8" + - "\x07$\x02\x02\u01A8K\x03\x02\x02\x02\u01A9\u01B4\x05P)\x02\u01AA\u01B4" + + "\x07%\x02\x02\u01A8K\x03\x02\x02\x02\u01A9\u01B4\x05P)\x02\u01AA\u01B4" + "\x05N(\x02\u01AB\u01B4\x05d3\x02\u01AC\u01B4\x05f4\x02\u01AD\u01B4\x05" + "R*\x02\u01AE\u01B4\x05T+\x02\u01AF\u01B4\x05Z.\x02\u01B0\u01B4\x05\\/" + "\x02\u01B1\u01B4\x05b2\x02\u01B2\u01B4\x05j6\x02\u01B3\u01A9\x03\x02\x02" + @@ -5299,165 +5372,169 @@ export class KipperParser extends KipperParserBase { "\x03\x02\x02\x02\u01B3\u01AD\x03\x02\x02\x02\u01B3\u01AE\x03\x02\x02\x02" + "\u01B3\u01AF\x03\x02\x02\x02\u01B3\u01B0\x03\x02\x02\x02\u01B3\u01B1\x03" + "\x02\x02\x02\u01B3\u01B2\x03\x02\x02\x02\u01B4M\x03\x02\x02\x02\u01B5" + - "\u01B7\x07'\x02\x02\u01B6\u01B8\x05\x1C\x0F\x02\u01B7\u01B6\x03\x02\x02" + + "\u01B7\x07(\x02\x02\u01B6\u01B8\x05\x1C\x0F\x02\u01B7\u01B6\x03\x02\x02" + "\x02\u01B7\u01B8\x03\x02\x02\x02\u01B8\u01B9\x03\x02\x02\x02\u01B9\u01BA" + - "\x07(\x02\x02\u01BA\u01BB\x07&\x02\x02\u01BB\u01BC\x05\xA4S\x02\u01BC" + + "\x07)\x02\x02\u01BA\u01BB\x07'\x02\x02\u01BB\u01BC\x05\xA4S\x02\u01BC" + "\u01BF\x07\x19\x02\x02\u01BD\u01C0\x05\xA2R\x02\u01BE\u01C0\x054\x1B\x02" + "\u01BF\u01BD\x03\x02\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0O\x03\x02" + - "\x02\x02\u01C1\u01C2\x07'\x02\x02\u01C2\u01C3\x05\xA2R\x02\u01C3\u01C4" + - "\x07(\x02\x02\u01C4Q\x03\x02\x02\x02\u01C5\u01C6\t\x04\x02\x02\u01C6S" + + "\x02\x02\u01C1\u01C2\x07(\x02\x02\u01C2\u01C3\x05\xA2R\x02\u01C3\u01C4" + + "\x07)\x02\x02\u01C4Q\x03\x02\x02\x02\u01C5\u01C6\t\x04\x02\x02\u01C6S" + "\x03\x02\x02\x02\u01C7\u01C8\x05V,\x02\u01C8U\x03\x02\x02\x02\u01C9\u01CA" + - "\x07M\x02\x02\u01CAW\x03\x02\x02\x02\u01CB\u01CE\x05V,\x02\u01CC\u01CE" + + "\x07N\x02\x02\u01CAW\x03\x02\x02\x02\u01CB\u01CE\x05V,\x02\u01CC\u01CE" + "\x05Z.\x02\u01CD\u01CB\x03\x02\x02\x02\u01CD\u01CC\x03\x02\x02\x02\u01CE" + "Y\x03\x02\x02\x02\u01CF\u01D0\t\x05\x02\x02\u01D0[\x03\x02\x02\x02\u01D1" + - "\u01D5\x07T\x02\x02\u01D2\u01D4\x05^0\x02\u01D3\u01D2\x03\x02\x02\x02" + + "\u01D5\x07U\x02\x02\u01D2\u01D4\x05^0\x02\u01D3\u01D2\x03\x02\x02\x02" + "\u01D4\u01D7\x03\x02\x02\x02\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D6\x03" + "\x02\x02\x02\u01D6\u01D8\x03\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D8" + - "\u01E2\x07V\x02\x02\u01D9\u01DD\x07U\x02\x02\u01DA\u01DC\x05`1\x02\u01DB" + + "\u01E2\x07W\x02\x02\u01D9\u01DD\x07V\x02\x02\u01DA\u01DC\x05`1\x02\u01DB" + "\u01DA\x03\x02\x02\x02\u01DC\u01DF\x03\x02\x02\x02\u01DD\u01DB\x03\x02" + "\x02\x02\u01DD\u01DE\x03\x02\x02\x02\u01DE\u01E0\x03\x02\x02\x02\u01DF" + - "\u01DD\x03\x02\x02\x02\u01E0\u01E2\x07X\x02\x02\u01E1\u01D1\x03\x02\x02" + + "\u01DD\x03\x02\x02\x02\u01E0\u01E2\x07Y\x02\x02\u01E1\u01D1\x03\x02\x02" + "\x02\u01E1\u01D9\x03\x02\x02\x02\u01E2]\x03\x02\x02\x02\u01E3\u01EA\x07" + - "W\x02\x02\u01E4\u01E6\x07\x03\x02\x02\u01E5\u01E7\x05\xA2R\x02\u01E6\u01E5" + + "X\x02\x02\u01E4\u01E6\x07\x03\x02\x02\u01E5\u01E7\x05\xA2R\x02\u01E6\u01E5" + "\x03\x02\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7\u01E8\x03\x02\x02\x02" + - "\u01E8\u01EA\x07+\x02\x02\u01E9\u01E3\x03\x02\x02\x02\u01E9\u01E4\x03" + - "\x02\x02\x02\u01EA_\x03\x02\x02\x02\u01EB\u01F2\x07Y\x02\x02\u01EC\u01EE" + + "\u01E8\u01EA\x07,\x02\x02\u01E9\u01E3\x03\x02\x02\x02\u01E9\u01E4\x03" + + "\x02\x02\x02\u01EA_\x03\x02\x02\x02\u01EB\u01F2\x07Z\x02\x02\u01EC\u01EE" + "\x07\x03\x02\x02\u01ED\u01EF\x05\xA2R\x02\u01EE\u01ED\x03\x02\x02\x02" + "\u01EE\u01EF\x03\x02\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0\u01F2\x07" + - "+\x02\x02\u01F1\u01EB\x03\x02\x02\x02\u01F1\u01EC\x03\x02\x02\x02\u01F2" + + ",\x02\x02\u01F1\u01EB\x03\x02\x02\x02\u01F1\u01EC\x03\x02\x02\x02\u01F2" + "a\x03\x02\x02\x02\u01F3\u01F4\t\x06\x02\x02\u01F4c\x03\x02\x02\x02\u01F5" + - "\u01FE\x07)\x02\x02\u01F6\u01FB\x05\xA2R\x02\u01F7\u01F8\x07#\x02\x02" + + "\u01FE\x07*\x02\x02\u01F6\u01FB\x05\xA2R\x02\u01F7\u01F8\x07$\x02\x02" + "\u01F8\u01FA\x05\xA2R\x02\u01F9\u01F7\x03\x02\x02\x02\u01FA\u01FD\x03" + "\x02\x02\x02\u01FB\u01F9\x03\x02\x02\x02\u01FB\u01FC\x03\x02\x02\x02\u01FC" + "\u01FF\x03\x02\x02\x02\u01FD\u01FB\x03\x02\x02\x02\u01FE\u01F6\x03\x02" + "\x02\x02\u01FE\u01FF\x03\x02\x02\x02\u01FF\u0201\x03\x02\x02\x02\u0200" + - "\u0202\x07#\x02\x02\u0201\u0200\x03\x02\x02\x02\u0201\u0202\x03\x02\x02" + - "\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0204\x07*\x02\x02\u0204e\x03\x02" + - "\x02\x02\u0205\u020E\x07,\x02\x02\u0206\u020B\x05h5\x02\u0207\u0208\x07" + - "#\x02\x02\u0208\u020A\x05h5\x02\u0209\u0207\x03\x02\x02\x02\u020A\u020D" + + "\u0202\x07$\x02\x02\u0201\u0200\x03\x02\x02\x02\u0201\u0202\x03\x02\x02" + + "\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0204\x07+\x02\x02\u0204e\x03\x02" + + "\x02\x02\u0205\u020E\x07-\x02\x02\u0206\u020B\x05h5\x02\u0207\u0208\x07" + + "$\x02\x02\u0208\u020A\x05h5\x02\u0209\u0207\x03\x02\x02\x02\u020A\u020D" + "\x03\x02\x02\x02\u020B\u0209\x03\x02\x02\x02\u020B\u020C\x03\x02\x02\x02" + "\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02\u020E\u0206\x03" + - "\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020F\u0211\x03\x02\x02\x02\u0210" + - "\u0212\x07#\x02\x02\u0211\u0210\x03"; + "\x02\x02\x02\u020E\u020F"; private static readonly _serializedATNSegment1: string = - "\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213" + - "\u0214\x07-\x02\x02\u0214g\x03\x02\x02\x02\u0215\u0216\x05X-\x02\u0216" + - "\u0217\x07&\x02\x02\u0217\u0218\x05\xA2R\x02\u0218i\x03\x02\x02\x02\u0219" + - "\u021A\t\x07\x02\x02\u021Ak\x03\x02\x02\x02\u021B\u021C\b7\x01\x02\u021C" + - "\u0227\x05L'\x02\u021D\u021E\x07\x18\x02\x02\u021E\u021F\x05l7\x02\u021F" + - "\u0221\x07'\x02\x02\u0220\u0222\x05n8\x02\u0221\u0220\x03\x02\x02\x02" + - "\u0221\u0222\x03\x02\x02\x02\u0222\u0223\x03\x02\x02\x02\u0223\u0224\x07" + - "(\x02\x02\u0224\u0225\b7\x01\x02\u0225\u0227\x03\x02\x02\x02\u0226\u021B" + - "\x03\x02\x02\x02\u0226\u021D\x03\x02\x02\x02\u0227\u023D\x03\x02\x02\x02" + - "\u0228\u0229\f\x07\x02\x02\u0229\u022B\x07'\x02\x02\u022A\u022C\x05n" + - "8\x02\u022B\u022A\x03\x02\x02\x02\u022B\u022C\x03\x02\x02\x02\u022C\u022D" + - "\x03\x02\x02\x02\u022D\u022E\x07(\x02\x02\u022E\u023C\b7\x01\x02\u022F" + - "\u0230\f\x05\x02\x02\u0230\u0231\x05p9\x02\u0231\u0232\b7\x01\x02\u0232" + - "\u023C\x03\x02\x02\x02\u0233\u0234\f\x04\x02\x02\u0234\u0235\x05r:\x02" + - "\u0235\u0236\b7\x01\x02\u0236\u023C\x03\x02\x02\x02\u0237\u0238\f\x03" + - "\x02\x02\u0238\u0239\x05t;\x02\u0239\u023A\b7\x01\x02\u023A\u023C\x03" + - "\x02\x02\x02\u023B\u0228\x03\x02\x02\x02\u023B\u022F\x03\x02\x02\x02\u023B" + - "\u0233\x03\x02\x02\x02\u023B\u0237\x03\x02\x02\x02\u023C\u023F\x03\x02" + - "\x02\x02\u023D\u023B\x03\x02\x02\x02\u023D\u023E\x03\x02\x02\x02\u023E" + - "m\x03\x02\x02\x02\u023F\u023D\x03\x02\x02\x02\u0240\u0245\x05\x9EP\x02" + - "\u0241\u0242\x07#\x02\x02\u0242\u0244\x05\x9EP\x02\u0243\u0241\x03\x02" + - "\x02\x02\u0244\u0247\x03\x02\x02\x02\u0245\u0243\x03\x02\x02\x02\u0245" + - "\u0246\x03\x02\x02\x02\u0246o\x03\x02\x02\x02\u0247\u0245\x03\x02\x02" + - "\x02\u0248\u0249\x07L\x02\x02\u0249\u024A\x05V,\x02\u024Aq\x03\x02\x02" + - "\x02\u024B\u024C\x07)\x02\x02\u024C\u024D\x05\xA2R\x02\u024D\u024E\x07" + - "*\x02\x02\u024Es\x03\x02\x02\x02\u024F\u0253\x07)\x02\x02\u0250\u0251" + - "\x05\xA2R\x02\u0251\u0252\b;\x01\x02\u0252\u0254\x03\x02\x02\x02\u0253" + - "\u0250\x03\x02\x02\x02\u0253\u0254\x03\x02\x02\x02\u0254\u0255\x03\x02" + - "\x02\x02\u0255\u0259\x07&\x02\x02\u0256\u0257\x05\xA2R\x02\u0257\u0258" + - "\b;\x01\x02\u0258\u025A\x03\x02\x02\x02\u0259\u0256\x03\x02\x02\x02\u0259" + - "\u025A\x03\x02\x02\x02\u025A\u025B\x03\x02\x02\x02\u025B\u025C\x07*\x02" + - "\x02\u025Cu\x03\x02\x02\x02\u025D\u0260\x05l7\x02\u025E\u0260\x05x=\x02" + - "\u025F\u025D\x03\x02\x02\x02\u025F\u025E\x03\x02\x02\x02\u0260w\x03\x02" + - "\x02\x02\u0261\u0262\x05l7\x02\u0262\u0263\x05\x80A\x02\u0263y\x03\x02" + - "\x02\x02\u0264\u0268\x05v<\x02\u0265\u0268\x05|?\x02\u0266\u0268\x05~" + - "@\x02\u0267\u0264\x03\x02\x02\x02\u0267\u0265\x03\x02\x02\x02\u0267\u0266" + - "\x03\x02\x02\x02\u0268{\x03\x02\x02\x02\u0269\u026A\x05\x80A\x02\u026A" + - "\u026B\x05v<\x02\u026B}\x03\x02\x02\x02\u026C\u026D\x05\x82B\x02\u026D" + - "\u026E\x05v<\x02\u026E\x7F\x03\x02\x02\x02\u026F\u0270\t\b\x02\x02\u0270" + - "\x81\x03\x02\x02\x02\u0271\u0272\t\t\x02\x02\u0272\x83\x03\x02\x02\x02" + - "\u0273\u0279\x05z>\x02\u0274\u0275\x05z>\x02\u0275\u0276\x07\t\x02\x02" + - "\u0276\u0277\x05\xA4S\x02\u0277\u0279\x03\x02\x02\x02\u0278\u0273\x03" + - "\x02\x02\x02\u0278\u0274\x03\x02\x02\x02\u0279\x85\x03\x02\x02\x02\u027A" + - "\u027B\bD\x01\x02\u027B\u027C\x05\x84C\x02\u027C\u0282\x03\x02\x02\x02" + - "\u027D\u027E\f\x03\x02\x02\u027E\u027F\t\n\x02\x02\u027F\u0281\x05\x84" + - "C\x02\u0280\u027D\x03\x02\x02\x02\u0281\u0284\x03\x02\x02\x02\u0282\u0280" + - "\x03\x02\x02\x02\u0282\u0283\x03\x02\x02\x02\u0283\x87\x03\x02\x02\x02" + - "\u0284\u0282\x03\x02\x02\x02\u0285\u0286\bE\x01\x02\u0286\u0287\x05\x86" + - "D\x02\u0287\u028D\x03\x02\x02\x02\u0288\u0289\f\x03\x02\x02\u0289\u028A" + - "\t\v\x02\x02\u028A\u028C\x05\x86D\x02\u028B\u0288\x03\x02\x02\x02\u028C" + - "\u028F\x03\x02\x02\x02\u028D\u028B\x03\x02\x02\x02\u028D\u028E\x03\x02" + - "\x02\x02\u028E\x89\x03\x02\x02\x02\u028F\u028D\x03\x02\x02\x02\u0290\u0291" + - "\bF\x01\x02\u0291\u0292\x05\x88E\x02\u0292\u0299\x03\x02\x02\x02\u0293" + - "\u0294\f\x03\x02\x02\u0294\u0295\x05\x8CG\x02\u0295\u0296\x05\x92J\x02" + - "\u0296\u0298\x03\x02\x02\x02\u0297\u0293\x03\x02\x02\x02\u0298\u029B\x03" + - "\x02\x02\x02\u0299\u0297\x03\x02\x02\x02\u0299\u029A\x03\x02\x02\x02\u029A" + - "\x8B\x03\x02\x02\x02\u029B\u0299\x03\x02\x02\x02\u029C\u029D\t\f\x02\x02" + - "\u029D\x8D\x03\x02\x02\x02\u029E\u029F\bH\x01\x02\u029F\u02A0\x05\x8A" + - "F\x02\u02A0\u02A6\x03\x02\x02\x02\u02A1\u02A2\f\x03\x02\x02\u02A2\u02A3" + - "\t\r\x02\x02\u02A3\u02A5\x05\x8AF\x02\u02A4\u02A1\x03\x02\x02\x02\u02A5" + - "\u02A8\x03\x02\x02\x02\u02A6\u02A4\x03\x02\x02\x02\u02A6\u02A7\x03\x02" + - "\x02\x02\u02A7\x8F\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A9\u02AA" + - "\bI\x01\x02\u02AA\u02AB\x05\x8EH\x02\u02AB\u02B1\x03\x02\x02\x02\u02AC" + - "\u02AD\f\x03\x02\x02\u02AD\u02AE\t\x0E\x02\x02\u02AE\u02B0\x05\x8EH\x02" + - "\u02AF\u02AC\x03\x02\x02\x02\u02B0\u02B3\x03\x02\x02\x02\u02B1\u02AF\x03" + - "\x02\x02\x02\u02B1\u02B2\x03\x02\x02\x02\u02B2\x91\x03\x02\x02\x02\u02B3" + - "\u02B1\x03\x02\x02\x02\u02B4\u02B5\bJ\x01\x02\u02B5\u02B6\x05\x90I\x02" + - "\u02B6\u02BC\x03\x02\x02\x02\u02B7\u02B8\f\x03\x02\x02\u02B8\u02B9\x07" + - "E\x02\x02\u02B9\u02BB\x05\x90I\x02\u02BA\u02B7\x03\x02\x02\x02\u02BB\u02BE" + - "\x03\x02\x02\x02\u02BC\u02BA\x03\x02\x02\x02\u02BC\u02BD\x03\x02\x02\x02" + - "\u02BD\x93\x03\x02\x02\x02\u02BE\u02BC\x03\x02\x02\x02\u02BF\u02C0\bK" + - "\x01\x02\u02C0\u02C1\x05\x92J\x02\u02C1\u02C7\x03\x02\x02\x02\u02C2\u02C3" + - "\f\x03\x02\x02\u02C3\u02C4\x07G\x02\x02\u02C4\u02C6\x05\x92J\x02\u02C5" + - "\u02C2\x03\x02\x02\x02\u02C6\u02C9\x03\x02\x02\x02\u02C7\u02C5\x03\x02" + - "\x02\x02\u02C7\u02C8\x03\x02\x02\x02\u02C8\x95\x03\x02\x02\x02\u02C9\u02C7" + - "\x03\x02\x02\x02\u02CA\u02CB\bL\x01\x02\u02CB\u02CC\x05\x94K\x02\u02CC" + - "\u02D2\x03\x02\x02\x02\u02CD\u02CE\f\x03\x02\x02\u02CE\u02CF\x07F\x02" + - "\x02\u02CF\u02D1\x05\x94K\x02\u02D0\u02CD\x03\x02\x02\x02\u02D1\u02D4" + - "\x03\x02\x02\x02\u02D2\u02D0\x03\x02\x02\x02\u02D2\u02D3\x03\x02\x02\x02" + - "\u02D3\x97\x03\x02\x02\x02\u02D4\u02D2\x03\x02\x02\x02\u02D5\u02D6\bM" + - "\x01\x02\u02D6\u02D7\x05\x96L\x02\u02D7\u02DD\x03\x02\x02\x02\u02D8\u02D9" + - "\f\x03\x02\x02\u02D9\u02DA\x076\x02\x02\u02DA\u02DC\x05\x96L\x02\u02DB" + - "\u02D8\x03\x02\x02\x02\u02DC\u02DF\x03\x02\x02\x02\u02DD\u02DB\x03\x02" + - "\x02\x02\u02DD\u02DE\x03\x02\x02\x02\u02DE\x99\x03\x02\x02\x02\u02DF\u02DD" + - "\x03\x02\x02\x02\u02E0\u02E1\bN\x01\x02\u02E1\u02E2\x05\x98M\x02\u02E2" + - "\u02E8\x03\x02\x02\x02\u02E3\u02E4\f\x03\x02\x02\u02E4\u02E5\x077\x02" + - "\x02\u02E5\u02E7\x05\x98M\x02\u02E6\u02E3\x03\x02\x02\x02\u02E7\u02EA" + - "\x03\x02\x02\x02\u02E8\u02E6\x03\x02\x02\x02\u02E8\u02E9\x03\x02\x02\x02" + - "\u02E9\x9B\x03\x02\x02\x02\u02EA\u02E8\x03\x02\x02\x02\u02EB\u02F3\x05" + - "\x9AN\x02\u02EC\u02ED\x05\x9AN\x02\u02ED\u02EE\x07%\x02\x02\u02EE\u02EF" + - "\x05\x9CO\x02\u02EF\u02F0\x07&\x02\x02\u02F0\u02F1\x05\x9CO\x02\u02F1" + - "\u02F3\x03\x02\x02\x02\u02F2\u02EB\x03\x02\x02\x02\u02F2\u02EC\x03\x02" + - "\x02\x02\u02F3\x9D\x03\x02\x02\x02\u02F4\u02FA\x05\x9CO\x02\u02F5\u02F6" + - "\x05l7\x02\u02F6\u02F7\x05\xA0Q\x02\u02F7\u02F8\x05\x9EP\x02\u02F8\u02FA" + - "\x03\x02\x02\x02\u02F9\u02F4\x03\x02\x02\x02\u02F9\u02F5\x03\x02\x02\x02" + - "\u02FA\x9F\x03\x02\x02\x02\u02FB\u02FC\t\x0F\x02\x02\u02FC\xA1\x03\x02" + - "\x02\x02\u02FD\u0302\x05\x9EP\x02\u02FE\u02FF\x07#\x02\x02\u02FF\u0301" + - "\x05\x9EP\x02\u0300\u02FE\x03\x02\x02\x02\u0301\u0304\x03\x02\x02\x02" + - "\u0302\u0300\x03\x02\x02\x02\u0302\u0303\x03\x02\x02\x02\u0303\xA3\x03" + - "\x02\x02\x02\u0304\u0302\x03\x02\x02\x02\u0305\u0309\x05\xA6T\x02\u0306" + - "\u0309\x05\xA8U\x02\u0307\u0309\x05\xAAV\x02\u0308\u0305\x03\x02\x02\x02" + - "\u0308\u0306\x03\x02\x02\x02\u0308\u0307\x03\x02\x02\x02\u0309\xA5\x03" + - "\x02\x02\x02\u030A\u030B\x05\xACW\x02\u030B\xA7\x03\x02\x02\x02\u030C" + - "\u030D\x05\xACW\x02\u030D\u0316\x07A\x02\x02\u030E\u0313\x05\xA4S\x02" + - "\u030F\u0310\x07#\x02\x02\u0310\u0312\x05\xA4S\x02\u0311\u030F\x03\x02" + - "\x02\x02\u0312\u0315\x03\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0313" + - "\u0314\x03\x02\x02\x02\u0314\u0317\x03\x02\x02\x02\u0315\u0313\x03\x02" + - "\x02\x02\u0316\u030E\x03\x02\x02\x02\u0316\u0317\x03\x02\x02\x02\u0317" + - "\u0318\x03\x02\x02\x02\u0318\u0319\x07C\x02\x02\u0319\xA9\x03\x02\x02" + - "\x02\u031A\u031B\x07\x1F\x02\x02\u031B\u031C\x07'\x02\x02\u031C\u031D" + - "\x05\xACW\x02\u031D\u031E\x07(\x02\x02\u031E\xAB\x03\x02\x02\x02\u031F" + - "\u0320\t\x10\x02\x02\u0320\xAD\x03\x02\x02\x02L\xAF\xB6\xBD\xC2\xCA\xD6" + - "\xE2\xE8\xEF\xFC\u0103\u010D\u0119\u011B\u0123\u012C\u0132\u0137\u0142" + - "\u0147\u0152\u015B\u0165\u0172\u0177\u017D\u0181\u0187\u018D\u01A5\u01B3" + - "\u01B7\u01BF\u01CD\u01D5\u01DD\u01E1\u01E6\u01E9\u01EE\u01F1\u01FB\u01FE" + - "\u0201\u020B\u020E\u0211\u0221\u0226\u022B\u023B\u023D\u0245\u0253\u0259" + - "\u025F\u0267\u0278\u0282\u028D\u0299\u02A6\u02B1\u02BC\u02C7\u02D2\u02DD" + - "\u02E8\u02F2\u02F9\u0302\u0308\u0313\u0316"; + "\x03\x02\x02\x02\u020F\u0211\x03\x02\x02\x02\u0210\u0212\x07$\x02\x02" + + "\u0211\u0210\x03\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212\u0213\x03" + + "\x02\x02\x02\u0213\u0214\x07.\x02\x02\u0214g\x03\x02\x02\x02\u0215\u0216" + + "\x05X-\x02\u0216\u0217\x07'\x02\x02\u0217\u0218\x05\xA2R\x02\u0218i\x03" + + "\x02\x02\x02\u0219\u021A\t\x07\x02\x02\u021Ak\x03\x02\x02\x02\u021B\u021C" + + "\b7\x01\x02\u021C\u0230\x05L'\x02\u021D\u021E\x07\x18\x02\x02\u021E\u021F" + + "\x05l7\x02\u021F\u0221\x07(\x02\x02\u0220\u0222\x05n8\x02\u0221\u0220" + + "\x03\x02\x02\x02\u0221\u0222\x03\x02\x02\x02\u0222\u0223\x03\x02\x02\x02" + + "\u0223\u0224\x07)\x02\x02\u0224\u0225\b7\x01\x02\u0225\u0230\x03\x02\x02" + + "\x02\u0226\u0227\x07\x1D\x02\x02\u0227\u0228\x05\xA4S\x02\u0228\u022A" + + "\x07(\x02\x02\u0229\u022B\x05n8\x02\u022A\u0229\x03\x02\x02\x02\u022A" + + "\u022B\x03\x02\x02\x02\u022B\u022C\x03\x02\x02\x02\u022C\u022D\x07)\x02" + + "\x02\u022D\u022E\b7\x01\x02\u022E\u0230\x03\x02\x02\x02\u022F\u021B\x03" + + "\x02\x02\x02\u022F\u021D\x03\x02\x02\x02\u022F\u0226\x03\x02\x02\x02\u0230" + + "\u0246\x03\x02\x02\x02\u0231\u0232\f\b\x02\x02\u0232\u0233\x05p9\x02\u0233" + + "\u0234\b7\x01\x02\u0234\u0245\x03\x02\x02\x02\u0235\u0236\f\x07\x02\x02" + + "\u0236\u0237\x05r:\x02\u0237\u0238\b7\x01\x02\u0238\u0245\x03\x02\x02" + + "\x02\u0239\u023A\f\x06\x02\x02\u023A\u023B\x05t;\x02\u023B\u023C\b7\x01" + + "\x02\u023C\u0245\x03\x02\x02\x02\u023D\u023E\f\x05\x02\x02\u023E\u0240" + + "\x07(\x02\x02\u023F\u0241\x05n8\x02\u0240\u023F\x03\x02\x02\x02\u0240" + + "\u0241\x03\x02\x02\x02\u0241\u0242\x03\x02\x02\x02\u0242\u0243\x07)\x02" + + "\x02\u0243\u0245\b7\x01\x02\u0244\u0231\x03\x02\x02\x02\u0244\u0235\x03" + + "\x02\x02\x02\u0244\u0239\x03\x02\x02\x02\u0244\u023D\x03\x02\x02\x02\u0245" + + "\u0248\x03\x02\x02\x02\u0246\u0244\x03\x02\x02\x02\u0246\u0247\x03\x02" + + "\x02\x02\u0247m\x03\x02\x02\x02\u0248\u0246\x03\x02\x02\x02\u0249\u024E" + + "\x05\x9EP\x02\u024A\u024B\x07$\x02\x02\u024B\u024D\x05\x9EP\x02\u024C" + + "\u024A\x03\x02\x02\x02\u024D\u0250\x03\x02\x02\x02\u024E\u024C\x03\x02" + + "\x02\x02\u024E\u024F\x03\x02\x02\x02\u024Fo\x03\x02\x02\x02\u0250\u024E" + + "\x03\x02\x02\x02\u0251\u0252\x07M\x02\x02\u0252\u0253\x05V,\x02\u0253" + + "q\x03\x02\x02\x02\u0254\u0255\x07*\x02\x02\u0255\u0256\x05\xA2R\x02\u0256" + + "\u0257\x07+\x02\x02\u0257s\x03\x02\x02\x02\u0258\u025C\x07*\x02\x02\u0259" + + "\u025A\x05\xA2R\x02\u025A\u025B\b;\x01\x02\u025B\u025D\x03\x02\x02\x02" + + "\u025C\u0259\x03\x02\x02\x02\u025C\u025D\x03\x02\x02\x02\u025D\u025E\x03" + + "\x02\x02\x02\u025E\u0262\x07'\x02\x02\u025F\u0260\x05\xA2R\x02\u0260" + + "\u0261\b;\x01\x02\u0261\u0263\x03\x02\x02\x02\u0262\u025F\x03\x02\x02" + + "\x02\u0262\u0263\x03\x02\x02\x02\u0263\u0264\x03\x02\x02\x02\u0264\u0265" + + "\x07+\x02\x02\u0265u\x03\x02\x02\x02\u0266\u0269\x05l7\x02\u0267\u0269" + + "\x05x=\x02\u0268\u0266\x03\x02\x02\x02\u0268\u0267\x03\x02\x02\x02\u0269" + + "w\x03\x02\x02\x02\u026A\u026B\x05l7\x02\u026B\u026C\x05\x80A\x02\u026C" + + "y\x03\x02\x02\x02\u026D\u0271\x05v<\x02\u026E\u0271\x05|?\x02\u026F\u0271" + + "\x05~@\x02\u0270\u026D\x03\x02\x02\x02\u0270\u026E\x03\x02\x02\x02\u0270" + + "\u026F\x03\x02\x02\x02\u0271{\x03\x02\x02\x02\u0272\u0273\x05\x80A\x02" + + "\u0273\u0274\x05v<\x02\u0274}\x03\x02\x02\x02\u0275\u0276\x05\x82B\x02" + + "\u0276\u0277\x05v<\x02\u0277\x7F\x03\x02\x02\x02\u0278\u0279\t\b\x02\x02" + + "\u0279\x81\x03\x02\x02\x02\u027A\u027B\t\t\x02\x02\u027B\x83\x03\x02\x02" + + "\x02\u027C\u0282\x05z>\x02\u027D\u027E\x05z>\x02\u027E\u027F\x07\t\x02" + + "\x02\u027F\u0280\x05\xA4S\x02\u0280\u0282\x03\x02\x02\x02\u0281\u027C" + + "\x03\x02\x02\x02\u0281\u027D\x03\x02\x02\x02\u0282\x85\x03\x02\x02\x02" + + "\u0283\u0284\bD\x01\x02\u0284\u0285\x05\x84C\x02\u0285\u028B\x03\x02\x02" + + "\x02\u0286\u0287\f\x03\x02\x02\u0287\u0288\t\n\x02\x02\u0288\u028A\x05" + + "\x84C\x02\u0289\u0286\x03\x02\x02\x02\u028A\u028D\x03\x02\x02\x02\u028B" + + "\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C\x87\x03\x02\x02" + + "\x02\u028D\u028B\x03\x02\x02\x02\u028E\u028F\bE\x01\x02\u028F\u0290\x05" + + "\x86D\x02\u0290\u0296\x03\x02\x02\x02\u0291\u0292\f\x03\x02\x02\u0292" + + "\u0293\t\v\x02\x02\u0293\u0295\x05\x86D\x02\u0294\u0291\x03\x02\x02\x02" + + "\u0295\u0298\x03\x02\x02\x02\u0296\u0294\x03\x02\x02\x02\u0296\u0297\x03" + + "\x02\x02\x02\u0297\x89\x03\x02\x02\x02\u0298\u0296\x03\x02\x02\x02\u0299" + + "\u029A\bF\x01\x02\u029A\u029B\x05\x88E\x02\u029B\u02A2\x03\x02\x02\x02" + + "\u029C\u029D\f\x03\x02\x02\u029D\u029E\x05\x8CG\x02\u029E\u029F\x05\x92" + + "J\x02\u029F\u02A1\x03\x02\x02\x02\u02A0\u029C\x03\x02\x02\x02\u02A1\u02A4" + + "\x03\x02\x02\x02\u02A2\u02A0\x03\x02\x02\x02\u02A2\u02A3\x03\x02\x02\x02" + + "\u02A3\x8B\x03\x02\x02\x02\u02A4\u02A2\x03\x02\x02\x02\u02A5\u02A6\t\f" + + "\x02\x02\u02A6\x8D\x03\x02\x02\x02\u02A7\u02A8\bH\x01\x02\u02A8\u02A9" + + "\x05\x8AF\x02\u02A9\u02AF\x03\x02\x02\x02\u02AA\u02AB\f\x03\x02\x02\u02AB" + + "\u02AC\t\r\x02\x02\u02AC\u02AE\x05\x8AF\x02\u02AD\u02AA\x03\x02\x02\x02" + + "\u02AE\u02B1\x03\x02\x02\x02\u02AF\u02AD\x03\x02\x02\x02\u02AF\u02B0\x03" + + "\x02\x02\x02\u02B0\x8F\x03\x02\x02\x02\u02B1\u02AF\x03\x02\x02\x02\u02B2" + + "\u02B3\bI\x01\x02\u02B3\u02B4\x05\x8EH\x02\u02B4\u02BA\x03\x02\x02\x02" + + "\u02B5\u02B6\f\x03\x02\x02\u02B6\u02B7\t\x0E\x02\x02\u02B7\u02B9\x05\x8E" + + "H\x02\u02B8\u02B5\x03\x02\x02\x02\u02B9\u02BC\x03\x02\x02\x02\u02BA\u02B8" + + "\x03\x02\x02\x02\u02BA\u02BB\x03\x02\x02\x02\u02BB\x91\x03\x02\x02\x02" + + "\u02BC\u02BA\x03\x02\x02\x02\u02BD\u02BE\bJ\x01\x02\u02BE\u02BF\x05\x90" + + "I\x02\u02BF\u02C5\x03\x02\x02\x02\u02C0\u02C1\f\x03\x02\x02\u02C1\u02C2" + + "\x07F\x02\x02\u02C2\u02C4\x05\x90I\x02\u02C3\u02C0\x03\x02\x02\x02\u02C4" + + "\u02C7\x03\x02\x02\x02\u02C5\u02C3\x03\x02\x02\x02\u02C5\u02C6\x03\x02" + + "\x02\x02\u02C6\x93\x03\x02\x02\x02\u02C7\u02C5\x03\x02\x02\x02\u02C8\u02C9" + + "\bK\x01\x02\u02C9\u02CA\x05\x92J\x02\u02CA\u02D0\x03\x02\x02\x02\u02CB" + + "\u02CC\f\x03\x02\x02\u02CC\u02CD\x07H\x02\x02\u02CD\u02CF\x05\x92J\x02" + + "\u02CE\u02CB\x03\x02\x02\x02\u02CF\u02D2\x03\x02\x02\x02\u02D0\u02CE\x03" + + "\x02\x02\x02\u02D0\u02D1\x03\x02\x02\x02\u02D1\x95\x03\x02\x02\x02\u02D2" + + "\u02D0\x03\x02\x02\x02\u02D3\u02D4\bL\x01\x02\u02D4\u02D5\x05\x94K\x02" + + "\u02D5\u02DB\x03\x02\x02\x02\u02D6\u02D7\f\x03\x02\x02\u02D7\u02D8\x07" + + "G\x02\x02\u02D8\u02DA\x05\x94K\x02\u02D9\u02D6\x03\x02\x02\x02\u02DA\u02DD" + + "\x03\x02\x02\x02\u02DB\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02\x02" + + "\u02DC\x97\x03\x02\x02\x02\u02DD\u02DB\x03\x02\x02\x02\u02DE\u02DF\bM" + + "\x01\x02\u02DF\u02E0\x05\x96L\x02\u02E0\u02E6\x03\x02\x02\x02\u02E1\u02E2" + + "\f\x03\x02\x02\u02E2\u02E3\x077\x02\x02\u02E3\u02E5\x05\x96L\x02\u02E4" + + "\u02E1\x03\x02\x02\x02\u02E5\u02E8\x03\x02\x02\x02\u02E6\u02E4\x03\x02" + + "\x02\x02\u02E6\u02E7\x03\x02\x02\x02\u02E7\x99\x03\x02\x02\x02\u02E8\u02E6" + + "\x03\x02\x02\x02\u02E9\u02EA\bN\x01\x02\u02EA\u02EB\x05\x98M\x02\u02EB" + + "\u02F1\x03\x02\x02\x02\u02EC\u02ED\f\x03\x02\x02\u02ED\u02EE\x078\x02" + + "\x02\u02EE\u02F0\x05\x98M\x02\u02EF\u02EC\x03\x02\x02\x02\u02F0\u02F3" + + "\x03\x02\x02\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2\x03\x02\x02\x02" + + "\u02F2\x9B\x03\x02\x02\x02\u02F3\u02F1\x03\x02\x02\x02\u02F4\u02FC\x05" + + "\x9AN\x02\u02F5\u02F6\x05\x9AN\x02\u02F6\u02F7\x07&\x02\x02\u02F7\u02F8" + + "\x05\x9CO\x02\u02F8\u02F9\x07'\x02\x02\u02F9\u02FA\x05\x9CO\x02\u02FA" + + "\u02FC\x03\x02\x02\x02\u02FB\u02F4\x03\x02\x02\x02\u02FB\u02F5\x03\x02" + + "\x02\x02\u02FC\x9D\x03\x02\x02\x02\u02FD\u0303\x05\x9CO\x02\u02FE\u02FF" + + "\x05l7\x02\u02FF\u0300\x05\xA0Q\x02\u0300\u0301\x05\x9EP\x02\u0301\u0303" + + "\x03\x02\x02\x02\u0302\u02FD\x03\x02\x02\x02\u0302\u02FE\x03\x02\x02\x02" + + "\u0303\x9F\x03\x02\x02\x02\u0304\u0305\t\x0F\x02\x02\u0305\xA1\x03\x02" + + "\x02\x02\u0306\u030B\x05\x9EP\x02\u0307\u0308\x07$\x02\x02\u0308\u030A" + + "\x05\x9EP\x02\u0309\u0307\x03\x02\x02\x02\u030A\u030D\x03\x02\x02\x02" + + "\u030B\u0309\x03\x02\x02\x02\u030B\u030C\x03\x02\x02\x02\u030C\xA3\x03" + + "\x02\x02\x02\u030D\u030B\x03\x02\x02\x02\u030E\u0312\x05\xA6T\x02\u030F" + + "\u0312\x05\xA8U\x02\u0310\u0312\x05\xAAV\x02\u0311\u030E\x03\x02\x02\x02" + + "\u0311\u030F\x03\x02\x02\x02\u0311\u0310\x03\x02\x02\x02\u0312\xA5\x03" + + "\x02\x02\x02\u0313\u0314\x05\xACW\x02\u0314\xA7\x03\x02\x02\x02\u0315" + + "\u0316\x05\xACW\x02\u0316\u031F\x07B\x02\x02\u0317\u031C\x05\xA4S\x02" + + "\u0318\u0319\x07$\x02\x02\u0319\u031B\x05\xA4S\x02\u031A\u0318\x03\x02" + + "\x02\x02\u031B\u031E\x03\x02\x02\x02\u031C\u031A\x03\x02\x02\x02\u031C" + + "\u031D\x03\x02\x02\x02\u031D\u0320\x03\x02\x02\x02\u031E\u031C\x03\x02" + + "\x02\x02\u031F\u0317\x03\x02\x02\x02\u031F\u0320\x03\x02\x02\x02\u0320" + + "\u0321\x03\x02\x02\x02\u0321\u0322\x07D\x02\x02\u0322\xA9\x03\x02\x02" + + "\x02\u0323\u0324\x07 \x02\x02\u0324\u0325\x07(\x02\x02\u0325\u0326\x05" + + "\xACW\x02\u0326\u0327\x07)\x02\x02\u0327\xAB\x03\x02\x02\x02\u0328\u0329" + + "\t\x10\x02\x02\u0329\xAD\x03\x02\x02\x02M\xAF\xB6\xBD\xC2\xCA\xD6\xE2" + + "\xE8\xEF\xFC\u0103\u010D\u0119\u011B\u0123\u012C\u0132\u0137\u0142\u0147" + + "\u0152\u015B\u0165\u0172\u0177\u017D\u0181\u0187\u018D\u01A5\u01B3\u01B7" + + "\u01BF\u01CD\u01D5\u01DD\u01E1\u01E6\u01E9\u01EE\u01F1\u01FB\u01FE\u0201" + + "\u020B\u020E\u0211\u0221\u022A\u022F\u0240\u0244\u0246\u024E\u025C\u0262" + + "\u0268\u0270\u0281\u028B\u0296\u02A2\u02AF\u02BA\u02C5\u02D0\u02DB\u02E6" + + "\u02F1\u02FB\u0302\u030B\u0311\u031C\u031F"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", @@ -7815,18 +7892,12 @@ export class PassOncomputedPrimaryExpressionContext extends ComputedPrimaryExpre } } } -export class FunctionCallExpressionContext extends ComputedPrimaryExpressionContext { +export class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public argumentExpressionList(): ArgumentExpressionListContext | undefined { - return this.tryGetRuleContext(0, ArgumentExpressionListContext); + public dotNotation(): DotNotationContext { + return this.getRuleContext(0, DotNotationContext); } constructor(ctx: ComputedPrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7834,40 +7905,31 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterFunctionCallExpression) { - listener.enterFunctionCallExpression(this); + if (listener.enterDotNotationMemberAccessExpression) { + listener.enterDotNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitFunctionCallExpression) { - listener.exitFunctionCallExpression(this); + if (listener.exitDotNotationMemberAccessExpression) { + listener.exitDotNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitFunctionCallExpression) { - return visitor.visitFunctionCallExpression(this); + if (visitor.visitDotNotationMemberAccessExpression) { + return visitor.visitDotNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } -export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public CallFunc(): TerminalNode { - return this.getToken(KipperParser.CallFunc, 0); - } +export class BracketNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public argumentExpressionList(): ArgumentExpressionListContext | undefined { - return this.tryGetRuleContext(0, ArgumentExpressionListContext); + public bracketNotation(): BracketNotationContext { + return this.getRuleContext(0, BracketNotationContext); } constructor(ctx: ComputedPrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7875,31 +7937,31 @@ export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryEx } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterExplicitCallFunctionCallExpression) { - listener.enterExplicitCallFunctionCallExpression(this); + if (listener.enterBracketNotationMemberAccessExpression) { + listener.enterBracketNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitExplicitCallFunctionCallExpression) { - listener.exitExplicitCallFunctionCallExpression(this); + if (listener.exitBracketNotationMemberAccessExpression) { + listener.exitBracketNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitExplicitCallFunctionCallExpression) { - return visitor.visitExplicitCallFunctionCallExpression(this); + if (visitor.visitBracketNotationMemberAccessExpression) { + return visitor.visitBracketNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } -export class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { +export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public dotNotation(): DotNotationContext { - return this.getRuleContext(0, DotNotationContext); + public sliceNotation(): SliceNotationContext { + return this.getRuleContext(0, SliceNotationContext); } constructor(ctx: ComputedPrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7907,31 +7969,37 @@ export class DotNotationMemberAccessExpressionContext extends ComputedPrimaryExp } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterDotNotationMemberAccessExpression) { - listener.enterDotNotationMemberAccessExpression(this); + if (listener.enterSliceNotationMemberAccessExpression) { + listener.enterSliceNotationMemberAccessExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitDotNotationMemberAccessExpression) { - listener.exitDotNotationMemberAccessExpression(this); + if (listener.exitSliceNotationMemberAccessExpression) { + listener.exitSliceNotationMemberAccessExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitDotNotationMemberAccessExpression) { - return visitor.visitDotNotationMemberAccessExpression(this); + if (visitor.visitSliceNotationMemberAccessExpression) { + return visitor.visitSliceNotationMemberAccessExpression(this); } else { return visitor.visitChildren(this); } } } -export class BracketNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { +export class FunctionCallExpressionContext extends ComputedPrimaryExpressionContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public bracketNotation(): BracketNotationContext { - return this.getRuleContext(0, BracketNotationContext); + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public argumentExpressionList(): ArgumentExpressionListContext | undefined { + return this.tryGetRuleContext(0, ArgumentExpressionListContext); } constructor(ctx: ComputedPrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7939,31 +8007,40 @@ export class BracketNotationMemberAccessExpressionContext extends ComputedPrimar } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterBracketNotationMemberAccessExpression) { - listener.enterBracketNotationMemberAccessExpression(this); + if (listener.enterFunctionCallExpression) { + listener.enterFunctionCallExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitBracketNotationMemberAccessExpression) { - listener.exitBracketNotationMemberAccessExpression(this); + if (listener.exitFunctionCallExpression) { + listener.exitFunctionCallExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitBracketNotationMemberAccessExpression) { - return visitor.visitBracketNotationMemberAccessExpression(this); + if (visitor.visitFunctionCallExpression) { + return visitor.visitFunctionCallExpression(this); } else { return visitor.visitChildren(this); } } } -export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryExpressionContext { +export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { + public CallFunc(): TerminalNode { + return this.getToken(KipperParser.CallFunc, 0); + } public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public sliceNotation(): SliceNotationContext { - return this.getRuleContext(0, SliceNotationContext); + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public argumentExpressionList(): ArgumentExpressionListContext | undefined { + return this.tryGetRuleContext(0, ArgumentExpressionListContext); } constructor(ctx: ComputedPrimaryExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -7971,20 +8048,61 @@ export class SliceNotationMemberAccessExpressionContext extends ComputedPrimaryE } // @Override public enterRule(listener: KipperParserListener): void { - if (listener.enterSliceNotationMemberAccessExpression) { - listener.enterSliceNotationMemberAccessExpression(this); + if (listener.enterExplicitCallFunctionCallExpression) { + listener.enterExplicitCallFunctionCallExpression(this); } } // @Override public exitRule(listener: KipperParserListener): void { - if (listener.exitSliceNotationMemberAccessExpression) { - listener.exitSliceNotationMemberAccessExpression(this); + if (listener.exitExplicitCallFunctionCallExpression) { + listener.exitExplicitCallFunctionCallExpression(this); } } // @Override public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitSliceNotationMemberAccessExpression) { - return visitor.visitSliceNotationMemberAccessExpression(this); + if (visitor.visitExplicitCallFunctionCallExpression) { + return visitor.visitExplicitCallFunctionCallExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class NewInstantiationExpressionContext extends ComputedPrimaryExpressionContext { + public New(): TerminalNode { + return this.getToken(KipperParser.New, 0); + } + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public argumentExpressionList(): ArgumentExpressionListContext | undefined { + return this.tryGetRuleContext(0, ArgumentExpressionListContext); + } + constructor(ctx: ComputedPrimaryExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterNewInstantiationExpression) { + listener.enterNewInstantiationExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitNewInstantiationExpression) { + listener.exitNewInstantiationExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitNewInstantiationExpression) { + return visitor.visitNewInstantiationExpression(this); } else { return visitor.visitChildren(this); } diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 53a6ddf4b..44dd5e4da 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -17,11 +17,12 @@ import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; import { ActualBitwiseXorExpressionContext } from "./KipperParser"; import { ExternalBlockItemContext } from "./KipperParser"; import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; import { PassOnAssignmentExpressionContext } from "./KipperParser"; import { ActualAssignmentExpressionContext } from "./KipperParser"; import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; @@ -263,69 +264,82 @@ export interface KipperParserListener extends ParseTreeListener { exitPassOncomputedPrimaryExpression?: (ctx: PassOncomputedPrimaryExpressionContext) => void; /** - * Enter a parse tree produced by the `functionCallExpression` + * Enter a parse tree produced by the `dotNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; + enterDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => void; /** - * Exit a parse tree produced by the `functionCallExpression` + * Exit a parse tree produced by the `dotNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; + exitDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => void; /** - * Enter a parse tree produced by the `explicitCallFunctionCallExpression` + * Enter a parse tree produced by the `bracketNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - enterExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => void; + enterBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => void; /** - * Exit a parse tree produced by the `explicitCallFunctionCallExpression` + * Exit a parse tree produced by the `bracketNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - exitExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => void; + exitBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => void; /** - * Enter a parse tree produced by the `dotNotationMemberAccessExpression` + * Enter a parse tree produced by the `sliceNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - enterDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => void; + enterSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => void; /** - * Exit a parse tree produced by the `dotNotationMemberAccessExpression` + * Exit a parse tree produced by the `sliceNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - exitDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => void; + exitSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => void; /** - * Enter a parse tree produced by the `bracketNotationMemberAccessExpression` + * Enter a parse tree produced by the `functionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - enterBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => void; + enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; /** - * Exit a parse tree produced by the `bracketNotationMemberAccessExpression` + * Exit a parse tree produced by the `functionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - exitBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => void; + exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; /** - * Enter a parse tree produced by the `sliceNotationMemberAccessExpression` + * Enter a parse tree produced by the `explicitCallFunctionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - enterSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => void; + enterExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => void; /** - * Exit a parse tree produced by the `sliceNotationMemberAccessExpression` + * Exit a parse tree produced by the `explicitCallFunctionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree */ - exitSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => void; + exitExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => void; + + /** + * Enter a parse tree produced by the `newInstantiationExpression` + * labeled alternative in `KipperParser.computedPrimaryExpression`. + * @param ctx the parse tree + */ + enterNewInstantiationExpression?: (ctx: NewInstantiationExpressionContext) => void; + /** + * Exit a parse tree produced by the `newInstantiationExpression` + * labeled alternative in `KipperParser.computedPrimaryExpression`. + * @param ctx the parse tree + */ + exitNewInstantiationExpression?: (ctx: NewInstantiationExpressionContext) => void; /** * Enter a parse tree produced by the `passOnAssignmentExpression` diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index af166d242..cd164df00 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -17,11 +17,12 @@ import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; import { ActualBitwiseXorExpressionContext } from "./KipperParser"; import { ExternalBlockItemContext } from "./KipperParser"; import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; import { PassOnAssignmentExpressionContext } from "./KipperParser"; import { ActualAssignmentExpressionContext } from "./KipperParser"; import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; @@ -216,44 +217,52 @@ export interface KipperParserVisitor extends ParseTreeVisitor { visitPassOncomputedPrimaryExpression?: (ctx: PassOncomputedPrimaryExpressionContext) => Result; /** - * Visit a parse tree produced by the `functionCallExpression` + * Visit a parse tree produced by the `dotNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ - visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; + visitDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => Result; /** - * Visit a parse tree produced by the `explicitCallFunctionCallExpression` + * Visit a parse tree produced by the `bracketNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ - visitExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => Result; + visitBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => Result; /** - * Visit a parse tree produced by the `dotNotationMemberAccessExpression` + * Visit a parse tree produced by the `sliceNotationMemberAccessExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ - visitDotNotationMemberAccessExpression?: (ctx: DotNotationMemberAccessExpressionContext) => Result; + visitSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => Result; /** - * Visit a parse tree produced by the `bracketNotationMemberAccessExpression` + * Visit a parse tree produced by the `functionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ - visitBracketNotationMemberAccessExpression?: (ctx: BracketNotationMemberAccessExpressionContext) => Result; + visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; /** - * Visit a parse tree produced by the `sliceNotationMemberAccessExpression` + * Visit a parse tree produced by the `explicitCallFunctionCallExpression` * labeled alternative in `KipperParser.computedPrimaryExpression`. * @param ctx the parse tree * @return the visitor result */ - visitSliceNotationMemberAccessExpression?: (ctx: SliceNotationMemberAccessExpressionContext) => Result; + visitExplicitCallFunctionCallExpression?: (ctx: ExplicitCallFunctionCallExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `newInstantiationExpression` + * labeled alternative in `KipperParser.computedPrimaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNewInstantiationExpression?: (ctx: NewInstantiationExpressionContext) => Result; /** * Visit a parse tree produced by the `passOnAssignmentExpression` diff --git a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts index c03c617df..8e4c22ef9 100644 --- a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts @@ -106,6 +106,7 @@ export const ParseRuleKindMapping = { // Labelled rules, which don't have a corresponding identifier number in KipperParser. RULE_memberAccessExpression: 1001, // -> See 'computedPrimaryExpression' RULE_functionCallExpression: 1002, // -> See 'computedPrimaryExpression' + RULE_newInstantiationExpression: 1003, // -> See 'computedPrimaryExpression' } as const; /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts index 6efc40e4b..4f9c97b5c 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts @@ -3,15 +3,85 @@ * the global namespace. * @since 0.11.0 */ -import type { ClassDeclaration } from "../../ast"; -import { LocalScope } from "./local-scope"; +import type { + ClassConstructorDeclaration, + ClassDeclaration, + ClassMethodDeclaration, + ClassPropertyDeclaration, +} from "../../ast"; +import type { LocalScope } from "./local-scope"; +import type { GlobalScope } from "./global-scope"; +import type { ScopeTypeDeclaration } from "./entry"; +import { type ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; +import { Scope } from "./base"; +import { KipperNotImplementedError } from "../../../errors"; /** * A function-specific scope that is bound to a {@link FunctionDeclaration} and not the global namespace. * @since 0.11.0 */ -export class ClassScope extends LocalScope { +export class ClassScope extends Scope { constructor(public ctx: ClassDeclaration) { - super(ctx); + super(); + } + + /** + * The parent scope of this local scope. This will be either a {@link LocalScope} or a {@link GlobalScope} (unique + * to the {@link KipperProgramContext} class). + * @since 0.10.0 + */ + public get parent(): LocalScope | GlobalScope { + return this.ctx.scope; + } + + public addConstructor(declaration: ClassConstructorDeclaration): ScopeFunctionDeclaration { + const identifier = declaration.getSemanticData().identifier; + + // Ensuring that the declaration does not overwrite other declarations + this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + + const scopeDeclaration = ScopeFunctionDeclaration.fromClassConstructorDeclaration(declaration); + this.entries.set(identifier, scopeDeclaration); + return scopeDeclaration; + } + + public override addFunction(declaration: ClassMethodDeclaration): ScopeFunctionDeclaration { + const identifier = declaration.getSemanticData().identifier; + + // Ensuring that the declaration does not overwrite other declarations + this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + + const scopeDeclaration = ScopeFunctionDeclaration.fromClassMethodDeclaration(declaration); + this.entries.set(identifier, scopeDeclaration); + return scopeDeclaration; + } + + public addVariable(declaration: ClassPropertyDeclaration): ScopeVariableDeclaration { + const identifier = declaration.getSemanticData().identifier; + + // Ensuring that the declaration does not overwrite other declarations + this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + + const scopeDeclaration = ScopeVariableDeclaration.fromClassPropertyDeclaration(declaration); + this._entries.set(identifier, scopeDeclaration); + return scopeDeclaration; + } + + public addType(declaration: any): ScopeTypeDeclaration { + throw this.ctx.programCtx + .semanticCheck(declaration) + .notImplementedError(new KipperNotImplementedError("Local types have not been implemented yet.")); + } + + public getEntry(identifier: string): ScopeDeclaration | undefined { + return this.entries.get(identifier); + } + + public getEntryRecursively(identifier: string): ScopeDeclaration | undefined { + const localRef = this.getEntry(identifier); + if (!localRef) { + return this.parent.getEntryRecursively(identifier); + } + return localRef; } } diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts index b26d39277..852cf7a3f 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts @@ -3,6 +3,12 @@ * @since 0.10.0 */ import type { + ClassConstructorDeclaration, + ClassConstructorDeclarationSemantics, + ClassConstructorDeclarationTypeSemantics, + ClassMethodDeclaration, + ClassMethodDeclarationSemantics, + ClassMethodDeclarationTypeSemantics, FunctionDeclaration, FunctionDeclarationSemantics, FunctionDeclarationTypeSemantics, @@ -20,7 +26,7 @@ import { BuiltInTypes } from "../universum-scope"; */ export class ScopeFunctionDeclaration extends ScopeDeclaration { private constructor( - private readonly _declaration?: FunctionDeclaration, + private readonly _declaration?: FunctionDeclaration | ClassMethodDeclaration | ClassConstructorDeclaration, private readonly _builtInFunction?: BuiltInFunction, private readonly _universeScope?: UniverseScope, ) { @@ -35,9 +41,26 @@ export class ScopeFunctionDeclaration extends ScopeDeclaration { return new ScopeFunctionDeclaration(declaration); } + /** + * Creates a new scope function declaration from a given class method declaration. + * @param declaration The method declaration node. + */ + public static fromClassMethodDeclaration(declaration: ClassMethodDeclaration): ScopeFunctionDeclaration { + return new ScopeFunctionDeclaration(declaration); + } + + /** + * Creates a new scope function declaration from a given class constructor declaration. + * @param declaration The constructor declaration node. + */ + public static fromClassConstructorDeclaration(declaration: ClassConstructorDeclaration): ScopeFunctionDeclaration { + return new ScopeFunctionDeclaration(declaration); + } + /** * Creates a new scope function declaration from a function declaration. * @param declaration The function declaration node. + * @param universeScope The universe scope i.e. the scope for all the built-ins. */ static fromBuiltInFunction(declaration: BuiltInFunction, universeScope: UniverseScope): ScopeFunctionDeclaration { return new ScopeFunctionDeclaration(undefined, declaration, universeScope); @@ -64,7 +87,11 @@ export class ScopeFunctionDeclaration extends ScopeDeclaration { * @throws UndefinedSemanticsError If this is accessed, before semantic analysis was performed. * @private */ - private get semanticData(): FunctionDeclarationSemantics | undefined { + private get semanticData(): + | FunctionDeclarationSemantics + | ClassMethodDeclarationSemantics + | ClassConstructorDeclarationSemantics + | undefined { return this._declaration?.getSemanticData(); } @@ -73,14 +100,18 @@ export class ScopeFunctionDeclaration extends ScopeDeclaration { * @throws UndefinedSemanticsError If this is accessed, before type checking was performed. * @private */ - private get typeData(): FunctionDeclarationTypeSemantics | undefined { + private get typeData(): + | FunctionDeclarationTypeSemantics + | ClassMethodDeclarationTypeSemantics + | ClassConstructorDeclarationTypeSemantics + | undefined { return this._declaration?.getTypeSemanticData(); } /** * Returns the {@link FunctionDeclaration AST node} this scope function declaration bases on. */ - public get node(): FunctionDeclaration | undefined { + public get node(): FunctionDeclaration | ClassMethodDeclaration | ClassConstructorDeclaration | undefined { return this._declaration; } diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts index 1a11ad0c3..77665b001 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts @@ -2,7 +2,14 @@ * A symbol table entry for a variable declaration. * @since 0.10.0 */ -import type { VariableDeclaration, VariableDeclarationSemantics, VariableDeclarationTypeSemantics } from "../../../ast"; +import type { + ClassPropertyDeclaration, + ClassPropertyDeclarationSemantics, + ClassPropertyDeclarationTypeSemantics, + VariableDeclaration, + VariableDeclarationSemantics, + VariableDeclarationTypeSemantics, +} from "../../../ast"; import type { KipperStorageType } from "../../../const"; import type { UniverseScope } from "../index"; import { BuiltInTypes } from "../index"; @@ -17,8 +24,8 @@ import type { BuiltInVariable } from "../../runtime-built-ins"; export class ScopeVariableDeclaration extends ScopeDeclaration { private _valueWasUpdated: boolean = false; - public constructor( - private readonly _declaration?: VariableDeclaration, + protected constructor( + private readonly _declaration?: VariableDeclaration | ClassPropertyDeclaration, private readonly _builtInVariable?: BuiltInVariable, private readonly _universeScope?: UniverseScope, ) { @@ -33,6 +40,14 @@ export class ScopeVariableDeclaration extends ScopeDeclaration { return new ScopeVariableDeclaration(declaration); } + /** + * Creates a new scope variable declaration from a given class property declaration. + * @param declaration The class property declaration. + */ + public static fromClassPropertyDeclaration(declaration: ClassPropertyDeclaration): ScopeVariableDeclaration { + return new ScopeVariableDeclaration(declaration); + } + /** * Creates a new scope variable declaration from a built-in variable. * @param builtInVariable The built-in variable. @@ -66,7 +81,7 @@ export class ScopeVariableDeclaration extends ScopeDeclaration { * @throws UndefinedSemanticsError If this is accessed, before semantic analysis was performed. * @private */ - private get semanticData(): VariableDeclarationSemantics | undefined { + private get semanticData(): VariableDeclarationSemantics | ClassPropertyDeclarationSemantics | undefined { return this._declaration?.getSemanticData(); } @@ -75,14 +90,14 @@ export class ScopeVariableDeclaration extends ScopeDeclaration { * @throws UndefinedSemanticsError If this is accessed, before type checking was performed. * @private */ - private get typeData(): VariableDeclarationTypeSemantics | undefined { + private get typeData(): VariableDeclarationTypeSemantics | ClassPropertyDeclarationTypeSemantics | undefined { return this._declaration?.getTypeSemanticData(); } /** * Returns the {@link VariableDeclaration AST node} this scope declaration bases on. */ - public get node(): VariableDeclaration | undefined { + public get node(): VariableDeclaration | ClassPropertyDeclaration | undefined { return this._declaration; } diff --git a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts index 6751b55df..1c739fbf2 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts @@ -46,7 +46,7 @@ export class GlobalScope extends Scope; + /** + * Performs translation-specific semantic analysis for {@link NewInstantiationExpression} instances. + */ + public abstract newInstantiationExpression?: TargetASTNodeSemanticAnalyser; + /** * Performs translation-specific semantic analysis for {@link ClassMethodDeclaration} instances. */ diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 534ad2fb1..258c58108 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -56,9 +56,9 @@ import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; import type { ObjectProperty } from "../../ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property"; import type { InterfacePropertyDeclaration } from "../../ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration"; -import { InterfaceMemberDeclaration } from "../../ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-member-declaration"; import type { InterfaceMethodDeclaration } from "../../ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration"; import type { ClassConstructorDeclaration } from "../../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; +import type { NewInstantiationExpression } from "../../ast/nodes/expressions/new-instantiation-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -213,6 +213,14 @@ export abstract class KipperTargetCodeGenerator { Array >; + /** + * Translates a {@link NewInstantiationExpression} into a specific language. + */ + public abstract newInstantiationExpression: TargetASTNodeCodeGenerator< + NewInstantiationExpression, + TranslatedExpression + >; + /** * Translates a {@link VariableDeclaration} into a specific language. */ diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 5f2e5742a..763a65d56 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -73,6 +73,7 @@ import { import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; import type { ClassConstructorDeclaration } from "@kipper/core/lib/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; +import type { NewInstantiationExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/new-instantiation-expression"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -441,6 +442,18 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { ]; }; + newInstantiationExpression = async (node: NewInstantiationExpression): Promise => { + const semanticData = node.getSemanticData(); + const identifier = semanticData.class.getSemanticData().rawType.identifier; + const args = semanticData.args; + const translatedArgs = args.map(async (arg) => { + return await arg.translateCtxAndChildren(); + }); + const finishedArgs = await Promise.all(translatedArgs); + + return ["new", " ", identifier, "(", ...finishedArgs.flat(), ")"]; + }; + classPropertyDeclaration = async (node: ClassPropertyDeclaration): Promise => { const semanticData = node.getSemanticData(); const identifier = semanticData.identifier; diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index ddd70cff9..9bcf911bf 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -141,6 +141,11 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys this.checkViabilityOfIdentifier(node); }; + /** + * Performs typescript-specific semantic analysis for {@link NewInstantiationExpression} instances. + */ + newInstantiationExpression = undefined; + /** * Performs typescript-specific semantic analysis for {@link classConstructorDeclaration} instances. */ diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 6eafc5408..5f2c357f3 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1603,4 +1603,27 @@ describe("Core functionality", () => { ); }); }); + + describe("it should be able to instantiate a class with new", () => { + it("should be able to init class", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {" + + "\n" + + " a: string;\n" + + "}\n" + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", + "Invalid TypeScript code (Expected different output)", + ); + }); + }); }); From 2e5977533991793a200bbfd80eb29a45d2d41f46 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Fri, 23 Aug 2024 19:33:32 +0200 Subject: [PATCH 02/81] fix (#679): Fixed invalid internal class member registration --- kipper/core/src/compiler/ast/ast-generator.ts | 9 +- .../src/compiler/ast/compilable-ast-node.ts | 2 +- .../compiler/ast/mapping/ast-node-mapper.ts | 2 +- .../ast/nodes/declarations/declaration.ts | 2 +- .../function-declaration.ts | 2 +- .../class-declaration-semantics.ts | 1 - .../class-declaration/class-declaration.ts | 4 +- ...class-constructor-declaration-semantics.ts | 5 +- ...-constructor-declaration-type-semantics.ts | 8 +- .../class-constructor-declaration.ts | 3 +- .../class-member-declaration-semantics.ts | 4 +- ...class-member-declaration-type-semantics.ts | 11 +- .../class-member-declaration.ts | 7 +- .../class-method-declaration-semantics.ts | 7 +- ...class-method-declaration-type-semantics.ts | 10 +- .../class-method-declaration.ts | 3 +- .../class-property-declaration-semantics.ts | 6 +- ...ass-property-declaration-type-semantics.ts | 6 +- .../class-property-declaration.ts | 4 +- .../interface-declaration.ts | 4 +- ...rface-method-declaration-type-semantics.ts | 2 +- .../interface-method-declaration.ts | 2 +- ...ace-property-declaration-type-semantics.ts | 2 +- .../interface-property-declaration.ts | 2 +- .../type-declaration-type-semantics.ts | 2 +- .../variable-declaration.ts | 2 +- .../compiler/ast/nodes/expressions/index.ts | 2 +- .../member-access-expression.ts | 3 +- ...instantiation-expression-type-semantics.ts | 1 - .../expressions/primary-expression/index.ts | 3 +- .../object-primary-expression-semantics.ts | 3 - .../object-primary-expression.ts | 5 - .../object-property-semantics.ts | 1 - .../string-primary-expression.ts | 2 +- kipper/core/src/compiler/compiler.ts | 2 +- .../lexer-parser/antlr/KipperLexer.ts | 3 - .../lexer-parser/antlr/KipperParser.ts | 7 +- .../antlr/KipperParserListener.ts | 244 +++++++++--------- .../lexer-parser/antlr/KipperParserVisitor.ts | 244 +++++++++--------- kipper/core/src/compiler/program-ctx.ts | 2 +- .../semantics/analyser/semantic-checker.ts | 12 +- .../semantics/analyser/type-checker.ts | 5 +- .../built-in-function-argument.ts | 2 - .../runtime-built-ins/built-in-variable.ts | 2 - .../internal-function-argument.ts | 1 - .../runtime-internals/internal-function.ts | 1 - .../entry/scope-type-declaration.ts | 2 +- .../semantics/symbol-table/function-scope.ts | 8 +- .../semantics/symbol-table/global-scope.ts | 2 +- .../semantics/symbol-table/local-scope.ts | 1 - .../types/base/generic-built-in-type.ts | 2 +- .../semantics/types/built-in/array.ts | 1 - .../compiler/semantics/types/custom-type.ts | 4 +- .../target-presets/semantic-analyser.ts | 8 +- .../translation/built-ins-generator.ts | 3 +- kipper/target-js/src/code-generator.ts | 8 +- kipper/target-ts/src/code-generator.ts | 2 +- 57 files changed, 338 insertions(+), 360 deletions(-) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index fd84ac135..8eac3d44a 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -29,7 +29,10 @@ import type { ArrayPrimaryExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, + ClassConstructorDeclarationContext, ClassDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, CompilationUnitContext, CompoundStatementContext, DeclarationContext, @@ -61,6 +64,7 @@ import type { KipperParserRuleContext, LambdaPrimaryExpressionContext, LogicalAndExpressionContext, + NewInstantiationExpressionContext, NumberPrimaryExpressionContext, ObjectPrimaryExpressionContext, ObjectPropertyContext, @@ -80,12 +84,7 @@ import type { VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, WhileLoopIterationStatementContext, - ClassPropertyDeclarationContext, - ClassMethodDeclarationContext, - ClassConstructorDeclarationContext, - NewInstantiationExpressionContext, } from "../lexer-parser"; -import { InterfaceMemberDeclarationContext } from "../lexer-parser"; import type { KipperProgramContext } from "../program-ctx"; import type { CompilableASTNode } from "./compilable-ast-node"; import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; diff --git a/kipper/core/src/compiler/ast/compilable-ast-node.ts b/kipper/core/src/compiler/ast/compilable-ast-node.ts index 6703ed614..e861306d8 100644 --- a/kipper/core/src/compiler/ast/compilable-ast-node.ts +++ b/kipper/core/src/compiler/ast/compilable-ast-node.ts @@ -13,7 +13,7 @@ import type { KipperParser, KipperParserRuleContext } from "../lexer-parser"; import type { TypeData } from "./ast-node"; import type { TokenStream } from "antlr4ts/TokenStream"; import type { RootASTNode, SemanticData } from "./index"; -import type { GlobalScope, LocalScope, ClassScope } from "../semantics"; +import type { ClassScope, GlobalScope, LocalScope } from "../semantics"; import type { ScopeNode } from "./scope-node"; import type { TargetCompilableNode } from "./target-node"; import { AnalysableASTNode } from "./analysable-ast-node"; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 0ab7d42f0..5d364406f 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -108,6 +108,7 @@ import { LogicalOrExpression, MemberAccessExpression, MultiplicativeExpression, + NewInstantiationExpression, NumberPrimaryExpression, ObjectPrimaryExpression, ObjectProperty, @@ -123,7 +124,6 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; -import { NewInstantiationExpression } from "../nodes/expressions/new-instantiation-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts index 788b48478..fe1dff331 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/declaration.ts @@ -14,7 +14,7 @@ import type { DeclarationTypeSemantics } from "./declaration-type-semantics"; import type { TranslatedCodeLine } from "../../../const"; import type { ASTDeclarationKind, ASTDeclarationRuleName, ParserDeclarationContext } from "../../common"; import type { TargetASTNodeCodeGenerator, TargetASTNodeSemanticAnalyser } from "../../../target-presets"; -import type { ClassScope, ScopeDeclaration } from "../../../semantics"; +import type { ScopeDeclaration } from "../../../semantics"; import { CompilableASTNode, type CompilableNodeParent } from "../../compilable-ast-node"; import { MissingRequiredSemanticDataError, UndefinedDeclarationCtxError } from "../../../../errors"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index 2fbf96f13..f4f4bab11 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -9,7 +9,7 @@ import type { FunctionDeclarationTypeSemantics } from "./function-declaration-ty import type { CompilableNodeParent } from "../../../compilable-ast-node"; import type { CompoundStatement, Statement } from "../../statements"; import type { IdentifierTypeSpecifierExpression } from "../../expressions"; -import { ClassScope, GlobalScope, RawType, ScopeFunctionDeclaration } from "../../../../semantics"; +import type { GlobalScope, RawType, ScopeFunctionDeclaration } from "../../../../semantics"; import { FunctionScope } from "../../../../semantics"; import type { FunctionDeclarationContext } from "../../../../lexer-parser"; import { diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts index cb48e726b..bc29abc7c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts @@ -4,7 +4,6 @@ */ import type { TypeDeclarationSemantics } from "../type-declaration-semantics"; import type { ClassMemberDeclaration } from "./class-member-declaration"; -import { ClassMemberDeclarationSemantics } from "./class-member-declaration"; import type { ClassConstructorDeclaration } from "./class-member-declaration/class-constructor-declaration/class-constructor-declaration"; /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts index 0e2150c09..f1148da68 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts @@ -13,7 +13,7 @@ import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { ClassScope } from "../../../../../semantics/symbol-table/class-scope"; import { TypeDeclaration } from "../type-declaration"; -import type { ClassMemberDeclaration, ClassConstructorDeclaration } from "./class-member-declaration"; +import type { ClassConstructorDeclaration, ClassMemberDeclaration } from "./class-member-declaration"; /** * Represents a class declaration in the Kipper language, which may contain methods and fields. @@ -163,7 +163,7 @@ export class ClassDeclaration */ public async primarySemanticTypeChecking(): Promise { this.typeSemantics = { - type: CustomType.fromClassDeclaration(this), + valueType: CustomType.fromClassDeclaration(this), }; } } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts index 45e05bb9f..97d0d753a 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts @@ -1,13 +1,13 @@ -import type { TypeDeclarationSemantics } from "../../../type-declaration-semantics"; import type { ParameterDeclaration } from "../../../../parameter-declaration"; import type { CompoundStatement } from "../../../../../statements"; import type { KipperConstructorInternalIdentifier } from "../../../../../../../const"; +import type { ClassMemberDeclarationSemantics } from "../class-member-declaration-semantics"; /** * Semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassConstructorDeclarationSemantics extends TypeDeclarationSemantics { +export interface ClassConstructorDeclarationSemantics extends ClassMemberDeclarationSemantics { /** * The identifier of the type declaration. * @@ -20,7 +20,6 @@ export interface ClassConstructorDeclarationSemantics extends TypeDeclarationSem * @since 0.12.0 */ parameters: Array; - /** * The body of the function. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts index d4cb6c881..36ef7cdfe 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts @@ -1,14 +1,14 @@ -import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; import type { ProcessedType } from "../../../../../../../semantics"; +import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** - * + * Type semantics for AST Node {@link ClassConstructorDeclaration}. * @since 0.12.0 */ -export interface ClassConstructorDeclarationTypeSemantics extends TypeDeclarationTypeSemantics { +export interface ClassConstructorDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { /** * The processed type of this member property. * @since 0.12.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts index 25b980268..ac89b9090 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts @@ -3,7 +3,6 @@ * @since 0.12.0 */ import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; -import { ScopeTypeDeclaration, ScopeVariableDeclaration } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassConstructorDeclarationContext } from "../../../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -164,7 +163,7 @@ export class ClassConstructorDeclaration */ public async primarySemanticTypeChecking(): Promise { this.typeSemantics = { - type: BuiltInTypes.Func, + valueType: BuiltInTypes.Func, }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-semantics.ts index e07f376c0..f02a0dd56 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-semantics.ts @@ -1,10 +1,10 @@ -import type { TypeDeclarationSemantics } from "../../type-declaration-semantics"; +import type { DeclarationSemantics } from "../../../declaration-semantics"; /** * Semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassMemberDeclarationSemantics extends TypeDeclarationSemantics { +export interface ClassMemberDeclarationSemantics extends DeclarationSemantics { /** * The identifier of the interface member. * @since 0.12.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts index cdd8e99bb..54256d038 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts @@ -1,7 +1,14 @@ -import type { TypeDeclarationTypeSemantics } from "../../type-declaration-type-semantics"; +import type { DeclarationTypeSemantics } from "../../../declaration-type-semantics"; +import type { ProcessedType } from "../../../../../../semantics"; /** * Type semantics for a {@link InterfaceMemberDeclaration}. * @since 0.12.0 */ -export interface ClassMemberDeclarationTypeSemantics extends TypeDeclarationTypeSemantics {} +export interface ClassMemberDeclarationTypeSemantics extends DeclarationTypeSemantics { + /** + * The processed type of this member property. + * @since 0.12.0 + */ + valueType: ProcessedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts index 54e53d09b..801fb636b 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts @@ -1,12 +1,9 @@ import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../lexer-parser"; import type { ASTNodeMapper } from "../../../../../mapping"; -import type { InterfaceMemberDeclarationSemantics } from "../../interface-declaration"; -import type { InterfaceMemberDeclarationTypeSemantics } from "../../interface-declaration/interface-member-declaration/interface-member-declaration-type-semantics"; -import { TypeDeclaration } from "../../type-declaration"; import type { ClassMemberDeclarationSemantics } from "./class-member-declaration-semantics"; import type { ClassMemberDeclarationTypeSemantics } from "./class-member-declaration-type-semantics"; -import type { GlobalScope, LocalScope } from "../../../../../../semantics"; import type { ClassScope } from "../../../../../../semantics/symbol-table/class-scope"; +import { Declaration } from "../../../declaration"; export type ASTClassMemberDeclarationKind = | typeof ParseRuleKindMapping.RULE_classPropertyDeclaration @@ -37,7 +34,7 @@ export type ParserClassMemberDeclarationRuleName = (typeof KindParseRuleMapping) export abstract class ClassMemberDeclaration< Semantics extends ClassMemberDeclarationSemantics = ClassMemberDeclarationSemantics, TypeSemantics extends ClassMemberDeclarationTypeSemantics = ClassMemberDeclarationTypeSemantics, -> extends TypeDeclaration { +> extends Declaration { protected abstract readonly _antlrRuleCtx: ParserClassMemberDeclarationContext; public abstract get kind(): ASTClassMemberDeclarationKind; public abstract get ruleName(): ParserClassMemberDeclarationRuleName; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts index 6b678aaf8..000d86222 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts @@ -1,31 +1,28 @@ -import type { TypeDeclarationSemantics } from "../../../type-declaration-semantics"; import type { IdentifierTypeSpecifierExpression } from "../../../../../expressions"; import type { ParameterDeclaration } from "../../../../parameter-declaration"; import type { CompoundStatement } from "../../../../../statements"; +import type { ClassMemberDeclarationSemantics } from "../class-member-declaration-semantics"; /** * Semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassMethodDeclarationSemantics extends TypeDeclarationSemantics { +export interface ClassMethodDeclarationSemantics extends ClassMemberDeclarationSemantics { /** * The identifier of this member property. * @since 0.12.0 */ identifier: string; - /** * The return type of this method. * @since 0.12.0 */ parameters: Array; - /** * The return type of this method. * @since 0.12.0 */ returnType: IdentifierTypeSpecifierExpression; - /** * The body of the function. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts index 5d0070abd..23e572357 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts @@ -1,14 +1,14 @@ -import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; import type { ProcessedType } from "../../../../../../../semantics"; +import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** - * + * Type semantics for AST Node {@link ClassConstructorDeclaration}. * @since 0.12.0 */ -export interface ClassMethodDeclarationTypeSemantics extends TypeDeclarationTypeSemantics { +export interface ClassMethodDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { /** - * The processed type of this member property. + * The processed type of this member property. This always of type {@link BuiltInTypeFunc}. * @since 0.12.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts index 08a2788a3..8ca03a419 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts @@ -3,7 +3,6 @@ * @since 0.12.0 */ import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; -import { ScopeTypeDeclaration } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassMethodDeclarationContext } from "../../../../../../../lexer-parser"; import { DeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -186,7 +185,7 @@ export class ClassMethodDeclaration const returnType = semanticData.returnType.getTypeSemanticData().storedType; this.typeSemantics = { returnType: returnType, - type: BuiltInTypes.Func, + valueType: BuiltInTypes.Func, }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-semantics.ts index e20509468..46ce17de6 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-semantics.ts @@ -1,12 +1,12 @@ -import type { TypeDeclarationSemantics } from "../../../type-declaration-semantics"; import type { IdentifierTypeSpecifierExpression } from "../../../../../expressions"; import type { RawType } from "../../../../../../../semantics"; +import type { ClassMemberDeclarationSemantics } from "../class-member-declaration-semantics"; /** * Semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassPropertyDeclarationSemantics extends TypeDeclarationSemantics { +export interface ClassPropertyDeclarationSemantics extends ClassMemberDeclarationSemantics { /** * The identifier of this member property. * @since 0.12.0 @@ -23,5 +23,5 @@ export interface ClassPropertyDeclarationSemantics extends TypeDeclarationSemant * The identifier of the {@link typeSpecifier.semanticData.identifier typeSpecifier}. * @since 0.12.0 */ - type: RawType; + valueType: RawType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts index 6c0550d29..7d5ea452c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts @@ -1,14 +1,14 @@ -import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; import type { ProcessedType } from "../../../../../../../semantics"; +import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** * Type semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassPropertyDeclarationTypeSemantics extends TypeDeclarationTypeSemantics { +export interface ClassPropertyDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { /** * The processed type of this member property. * @since 0.12.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts index 9bd25e857..7181c6b7d 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts @@ -122,7 +122,7 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< this.semanticData = { identifier: identifier, typeSpecifier: typeSpecifier, - type: typeSpecifier.getSemanticData().rawType, + valueType: typeSpecifier.getSemanticData().rawType, }; this.scopeDeclaration = this.scope.addVariable(this); } @@ -142,7 +142,7 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< semanticData.typeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail const valueType = semanticData.typeSpecifier.getTypeSemanticData().storedType; this.typeSemantics = { - type: valueType, + valueType: valueType, }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts index ddcf5c6f6..3423eaf06 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts @@ -10,7 +10,7 @@ import { CustomType } from "../../../../../semantics"; import type { InterfaceDeclarationContext } from "../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer-parser"; import type { InterfaceMemberDeclaration } from "./interface-member-declaration"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../../../errors"; +import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { TypeDeclaration } from "../type-declaration"; /** @@ -133,7 +133,7 @@ export class InterfaceDeclaration extends TypeDeclaration< */ public async primarySemanticTypeChecking(): Promise { this.typeSemantics = { - type: CustomType.fromInterfaceDeclaration(this), + valueType: CustomType.fromInterfaceDeclaration(this), }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts index 38a750cbe..458b114da 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts @@ -10,5 +10,5 @@ export interface InterfaceMethodDeclarationTypeSemantics extends TypeDeclaration * The processed type of this member property. * @since 0.12.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts index 388b5f314..5566006f9 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts @@ -164,7 +164,7 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< const returnType = semanticData.returnType.getTypeSemanticData().storedType; this.typeSemantics = { returnType: returnType, - type: BuiltInTypes.Func, + valueType: BuiltInTypes.Func, }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts index 9f8fd5ae8..fbd8390cb 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts @@ -10,5 +10,5 @@ export interface InterfacePropertyDeclarationTypeSemantics extends TypeDeclarati * The processed type of this member property. * @since 0.12.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts index 41ae9e1bc..b96def35e 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts @@ -138,7 +138,7 @@ export class InterfacePropertyDeclaration extends InterfaceMemberDeclaration< semanticData.typeSpecifier.ensureTypeSemanticallyValid(); // Ensure the type specifier didn't fail const valueType = semanticData.typeSpecifier.getTypeSemanticData().storedType; this.typeSemantics = { - type: valueType, + valueType: valueType, }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts index 02854427a..1de8964d0 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts @@ -10,5 +10,5 @@ export interface TypeDeclarationTypeSemantics extends TypeData { * The processed type of the type declaration. * @since 0.11.0 */ - type: ProcessedType; + valueType: ProcessedType; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index 78dad1048..4b64923e0 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -8,7 +8,7 @@ import type { VariableDeclarationSemantics } from "./variable-declaration-semantics"; import type { VariableDeclarationTypeSemantics } from "./variable-declaration-type-semantics"; import type { CompilableNodeParent } from "../../../compilable-ast-node"; -import { GlobalScope, LocalScope, RawType, ScopeVariableDeclaration } from "../../../../semantics"; +import type { GlobalScope, LocalScope, RawType, ScopeVariableDeclaration } from "../../../../semantics"; import type { Expression, IdentifierTypeSpecifierExpression } from "../../expressions"; import type { ParseTree } from "antlr4ts/tree"; import type { KipperStorageType } from "../../../../const"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts index b74c6cd0c..56e28b828 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -20,4 +20,4 @@ export * from "./conditional-expression/"; export * from "./function-call-expression/"; export * from "./member-access-expression/"; export * from "./bitwise-expression/"; -export * from "./primary-expression/lambda-primary-expression/"; +export * from "./new-instantiation-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts index 4b3035a1e..f963e3259 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/member-access-expression/member-access-expression.ts @@ -14,9 +14,8 @@ import { } from "../../../../lexer-parser"; import type { CompilableASTNode } from "../../../compilable-ast-node"; import { Expression } from "../expression"; -import { KipperNotImplementedError, UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; import { kipperInternalBuiltInFunctions } from "../../../../semantics"; -import { ClassMethodDeclaration, ClassPropertyDeclaration } from "../../declarations"; /** * A union of all possible {@link KipperParserRuleContext} rule contexts that {@link MemberAccessExpression} implements. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts index d5e7bdaa3..12be3a0d8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression-type-semantics.ts @@ -1,4 +1,3 @@ import type { ExpressionTypeSemantics } from "../expression-type-semantics"; -import type { ProcessedType } from "../../../../semantics"; export interface NewInstantiationExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts index 819135910..27cc35929 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/index.ts @@ -14,4 +14,5 @@ export * from "./object-primary-expression/"; export * from "./void-or-null-or-undefined-primary-expression/"; export * from "./fstring-primary-expression/"; export * from "./identifier-primary-expression/"; -export * from "./tangled-primary-expression"; +export * from "./tangled-primary-expression/"; +export * from "./lambda-primary-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts index 22b16a518..263f06d4a 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression-semantics.ts @@ -1,8 +1,5 @@ import type { PrimaryExpressionSemantics } from "../primary-expression-semantics"; import type { ObjectProperty } from "./object-property"; -import { StringPrimaryExpression } from "../string-primary-expression"; -import type { KipperStorageType } from "../../../../../const"; -import type { IdentifierTypeSpecifierExpression } from "../../type-specifier-expression"; /** * Semantics for AST Node {@link VariableDeclaration}. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts index f69736672..708f3f2c4 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-primary-expression.ts @@ -6,17 +6,12 @@ import type { ObjectPrimaryExpressionSemantics } from "./object-primary-expressi import type { ObjectPrimaryExpressionTypeSemantics } from "./object-primary-expression-type-semantics"; import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { ObjectPrimaryExpressionContext } from "../../../../../lexer-parser"; -import { DeclaratorContext } from "../../../../../lexer-parser"; -import { InitDeclaratorContext, StorageTypeSpecifierContext } from "../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer-parser"; import { PrimaryExpression } from "../primary-expression"; import { CustomType } from "../../../../../semantics"; import type { ObjectProperty } from "./object-property"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; -import type { KipperStorageType } from "../../../../../const"; -import type { IdentifierTypeSpecifierExpression } from "../../type-specifier-expression"; import type { ParseTree } from "antlr4ts/tree"; -import type { Expression } from "../../expression"; /** * Object literal constant, which represents an object that was defined in the source code. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts index 6aed0fa69..3798004bd 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/object-primary-expression/object-property/object-property-semantics.ts @@ -1,6 +1,5 @@ import type { PrimaryExpressionSemantics } from "../../primary-expression-semantics"; import type { Expression } from "../../../expression"; -import { StringPrimaryExpression } from "../../string-primary-expression"; /** * Semantics for AST Node {@link ObjectPrimaryExpression}. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts index 7cb9b4060..c40dcc375 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/string-primary-expression/string-primary-expression.ts @@ -7,7 +7,7 @@ import type { StringPrimaryExpressionTypeSemantics } from "./string-primary-expr import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { StringPrimaryExpressionContext } from "../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer-parser"; -import { BuiltInTypes, ProcessedType } from "../../../../../semantics"; +import { BuiltInTypes } from "../../../../../semantics"; import { PrimaryExpression } from "../primary-expression"; /** diff --git a/kipper/core/src/compiler/compiler.ts b/kipper/core/src/compiler/compiler.ts index 547792a0a..9973d92f3 100644 --- a/kipper/core/src/compiler/compiler.ts +++ b/kipper/core/src/compiler/compiler.ts @@ -6,7 +6,7 @@ import type { CodePointCharStream, Token } from "antlr4ts"; import { CommonTokenStream } from "antlr4ts"; import { KipperAntlrErrorListener } from "../antlr-error-listener"; import type { LexerParserData } from "./lexer-parser"; -import { KipperLexer, KipperParser, KipperFileStream } from "./lexer-parser"; +import { KipperFileStream, KipperLexer, KipperParser } from "./lexer-parser"; import { KipperLogger } from "../logger"; import { KipperProgramContext } from "./program-ctx"; import type { KipperSyntaxError } from "../errors"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index 3d59981b6..fcc1aef27 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -5,10 +5,7 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index ee8b65606..dd6d7f0ae 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -2,20 +2,15 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; -import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 44dd5e4da..412f132c2 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -2,131 +2,131 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; -import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; -import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; -import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; -import { ActualBitwiseAndExpressionContext } from "./KipperParser"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; -import { ActualBitwiseXorExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { NewInstantiationExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; -import { ActualBitwiseOrExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InterfaceDeclarationContext } from "./KipperParser"; -import { InterfaceMemberDeclarationContext } from "./KipperParser"; -import { InterfacePropertyDeclarationContext } from "./KipperParser"; -import { InterfaceMethodDeclarationContext } from "./KipperParser"; -import { ClassDeclarationContext } from "./KipperParser"; -import { ClassMemberDeclarationContext } from "./KipperParser"; -import { ClassPropertyDeclarationContext } from "./KipperParser"; -import { ClassMethodDeclarationContext } from "./KipperParser"; -import { ClassConstructorDeclarationContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { LambdaPrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPropertyContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { BitwiseShiftExpressionContext } from "./KipperParser"; -import { BitwiseShiftOperatorsContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { BitwiseAndExpressionContext } from "./KipperParser"; -import { BitwiseXorExpressionContext } from "./KipperParser"; -import { BitwiseOrExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierExpressionContext } from "./KipperParser"; -import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; -import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualBitwiseAndExpressionContext, + ActualBitwiseOrExpressionContext, + ActualBitwiseShiftExpressionContext, + ActualBitwiseXorExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseShiftOperatorsContext, + BitwiseXorExpressionContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + ClassConstructorDeclarationContext, + ClassDeclarationContext, + ClassMemberDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierOrStringPrimaryExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + InterfaceDeclarationContext, + InterfaceMemberDeclarationContext, + InterfaceMethodDeclarationContext, + InterfacePropertyDeclarationContext, + IterationStatementContext, + JumpStatementContext, + LambdaPrimaryExpressionContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NewInstantiationExpressionContext, + NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, + ObjectPropertyContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnBitwiseAndExpressionContext, + PassOnBitwiseOrExpressionContext, + PassOnBitwiseShiftExpressionContext, + PassOnBitwiseXorExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + StorageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext, +} from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index cd164df00..48ad2859c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -2,131 +2,131 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; -import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; -import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; -import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; -import { ActualBitwiseAndExpressionContext } from "./KipperParser"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; -import { ActualBitwiseXorExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { NewInstantiationExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; -import { ActualBitwiseOrExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InterfaceDeclarationContext } from "./KipperParser"; -import { InterfaceMemberDeclarationContext } from "./KipperParser"; -import { InterfacePropertyDeclarationContext } from "./KipperParser"; -import { InterfaceMethodDeclarationContext } from "./KipperParser"; -import { ClassDeclarationContext } from "./KipperParser"; -import { ClassMemberDeclarationContext } from "./KipperParser"; -import { ClassPropertyDeclarationContext } from "./KipperParser"; -import { ClassMethodDeclarationContext } from "./KipperParser"; -import { ClassConstructorDeclarationContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { LambdaPrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPropertyContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { BitwiseShiftExpressionContext } from "./KipperParser"; -import { BitwiseShiftOperatorsContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { BitwiseAndExpressionContext } from "./KipperParser"; -import { BitwiseXorExpressionContext } from "./KipperParser"; -import { BitwiseOrExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierExpressionContext } from "./KipperParser"; -import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; -import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualBitwiseAndExpressionContext, + ActualBitwiseOrExpressionContext, + ActualBitwiseShiftExpressionContext, + ActualBitwiseXorExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseShiftOperatorsContext, + BitwiseXorExpressionContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + ClassConstructorDeclarationContext, + ClassDeclarationContext, + ClassMemberDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierOrStringPrimaryExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + InterfaceDeclarationContext, + InterfaceMemberDeclarationContext, + InterfaceMethodDeclarationContext, + InterfacePropertyDeclarationContext, + IterationStatementContext, + JumpStatementContext, + LambdaPrimaryExpressionContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NewInstantiationExpressionContext, + NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, + ObjectPropertyContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnBitwiseAndExpressionContext, + PassOnBitwiseOrExpressionContext, + PassOnBitwiseShiftExpressionContext, + PassOnBitwiseXorExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + StorageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext, +} from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 13910739f..6af4b2f5f 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -28,13 +28,13 @@ import type { Reference, ScopeFunctionDeclaration, } from "./semantics"; -import { ScopeVariableDeclaration } from "./semantics"; import { BuiltInFunctions, BuiltInTypes, BuiltInVariables, KipperSemanticChecker, KipperTypeChecker, + ScopeVariableDeclaration, UniverseScope, } from "./semantics"; import { KipperError, KipperInternalError, UndefinedSemanticsError } from "../errors"; diff --git a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts index db0270970..7e0538a3e 100644 --- a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts @@ -12,11 +12,17 @@ import type { ReturnStatement, VariableDeclaration, } from "../../ast"; -import { LambdaPrimaryExpression, Expression } from "../../ast"; -import { CompoundStatement, FunctionDeclaration, IdentifierPrimaryExpression, IterationStatement } from "../../ast"; +import { + CompoundStatement, + Expression, + FunctionDeclaration, + IdentifierPrimaryExpression, + IterationStatement, + LambdaPrimaryExpression, +} from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; import type { Scope } from "../symbol-table"; -import { ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "../symbol-table"; +import { ScopeFunctionDeclaration, ScopeVariableDeclaration } from "../symbol-table"; import { BuiltInOrInternalGeneratorFunctionNotFoundError, BuiltInOverwriteError, diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index da227cfaa..64b72005b 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -46,7 +46,6 @@ import { kipperSupportedConversions, } from "../../const"; import type { TypeError } from "../../../errors"; -import { PropertyDoesNotExistError } from "../../../errors"; import { ArithmeticOperationTypeError, BitwiseOperationTypeError, @@ -62,6 +61,7 @@ import { InvalidUnaryExpressionTypeError, KipperError, KipperNotImplementedError, + PropertyDoesNotExistError, ReadOnlyWriteTypeError, ReferenceCanNotBeUsedAsTypeError, UnknownTypeError, @@ -69,8 +69,7 @@ import { ValueTypeNotIndexableWithGivenAccessor, } from "../../../errors"; import type { BuiltInTypeArray, CustomType, GenericType, GenericTypeArguments, ProcessedType, RawType } from "../types"; -import { BuiltInType, BuiltInTypeObj, Type } from "../types"; -import { UndefinedType } from "../types"; +import { BuiltInTypeObj, UndefinedType } from "../types"; import type { Reference } from "../reference"; /** diff --git a/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-function-argument.ts b/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-function-argument.ts index fd711bbdd..22ab7c2e4 100644 --- a/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-function-argument.ts +++ b/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-function-argument.ts @@ -1,6 +1,4 @@ -import { KipperBuiltInTypeLiteral } from "../../const"; import type { ProcessedType } from "../types"; -import { UniverseScope } from "../symbol-table"; /** * Interface representation of an argument of a {@link BuiltInFunction}. diff --git a/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-variable.ts b/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-variable.ts index 2ac55430a..f54e7bef8 100644 --- a/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-variable.ts +++ b/kipper/core/src/compiler/semantics/runtime-built-ins/built-in-variable.ts @@ -1,6 +1,4 @@ -import { KipperBuiltInTypeLiteral } from "../../const"; import type { ProcessedType } from "../types"; -import { UniverseScope } from "../symbol-table"; /** * Interface representation of a {@link BuiltInVariable}, which is available inside a Kipper program using the specified diff --git a/kipper/core/src/compiler/semantics/runtime-internals/internal-function-argument.ts b/kipper/core/src/compiler/semantics/runtime-internals/internal-function-argument.ts index 72b79588d..ea8844273 100644 --- a/kipper/core/src/compiler/semantics/runtime-internals/internal-function-argument.ts +++ b/kipper/core/src/compiler/semantics/runtime-internals/internal-function-argument.ts @@ -1,4 +1,3 @@ -import { KipperBuiltInTypeLiteral } from "../../const"; import type { ProcessedType } from "../types"; /** diff --git a/kipper/core/src/compiler/semantics/runtime-internals/internal-function.ts b/kipper/core/src/compiler/semantics/runtime-internals/internal-function.ts index f99f6d5a6..c3026b46b 100644 --- a/kipper/core/src/compiler/semantics/runtime-internals/internal-function.ts +++ b/kipper/core/src/compiler/semantics/runtime-internals/internal-function.ts @@ -1,5 +1,4 @@ import type { InternalFunctionArgument } from "./internal-function-argument"; -import { KipperBuiltInTypeLiteral } from "../../const"; import type { ProcessedType } from "../types"; /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts index b5b1c323c..2d53935d8 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts @@ -93,7 +93,7 @@ export class ScopeTypeDeclaration extends ScopeDeclaration { * @since 0.11.0 */ public get typeValue(): CustomType | ProcessedType { - return this.node?.getTypeSemanticData()?.type || this._builtInType!!; + return this.node?.getTypeSemanticData()?.valueType || this._builtInType!!; } /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts index 69461f17c..7ba6775dd 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts @@ -3,11 +3,15 @@ * the global namespace. * @since 0.8.0 */ -import type { FunctionDeclaration, LambdaPrimaryExpression, ParameterDeclaration } from "../../ast"; +import type { + ClassMethodDeclaration, + FunctionDeclaration, + LambdaPrimaryExpression, + ParameterDeclaration, +} from "../../ast"; import type { ScopeDeclaration } from "./entry"; import { ScopeParameterDeclaration } from "./entry"; import { LocalScope } from "./local-scope"; -import type { ClassMethodDeclaration } from "../../ast"; import type { ClassConstructorDeclaration } from "../../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts index 1c739fbf2..0eba6ac59 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts @@ -5,8 +5,8 @@ */ import type { KipperProgramContext } from "../../program-ctx"; import type { ScopeDeclaration } from "./entry"; -import type { FunctionDeclaration, RootASTNode, TypeDeclaration, VariableDeclaration } from "../../ast"; import { ScopeFunctionDeclaration, ScopeTypeDeclaration, ScopeVariableDeclaration } from "./entry"; +import type { FunctionDeclaration, RootASTNode, TypeDeclaration, VariableDeclaration } from "../../ast"; import { Scope } from "./base/scope"; import type { UniverseScope } from "./universum-scope"; diff --git a/kipper/core/src/compiler/semantics/symbol-table/local-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/local-scope.ts index d0beb808d..3b3d289ee 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/local-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/local-scope.ts @@ -4,7 +4,6 @@ * @since 0.8.0 */ import type { - ClassMethodDeclaration, CompilableASTNode, FunctionDeclaration, ScopeNode, diff --git a/kipper/core/src/compiler/semantics/types/base/generic-built-in-type.ts b/kipper/core/src/compiler/semantics/types/base/generic-built-in-type.ts index 0eb20637d..21ce27257 100644 --- a/kipper/core/src/compiler/semantics/types/base/generic-built-in-type.ts +++ b/kipper/core/src/compiler/semantics/types/base/generic-built-in-type.ts @@ -2,7 +2,7 @@ import { BuiltInType } from "./built-in-type"; import type { GenericType, GenericTypeArguments } from "./generic-type"; import type { KipperBuiltInTypeLiteral } from "../../../const"; import type { ProcessedType } from "./index"; -import { GenericCanOnlyHaveOneSpreadError, KipperInternalError } from "../../../../errors"; +import { GenericCanOnlyHaveOneSpreadError } from "../../../../errors"; /** * Represents a generic built-in type that is used in the type analysis phase. diff --git a/kipper/core/src/compiler/semantics/types/built-in/array.ts b/kipper/core/src/compiler/semantics/types/built-in/array.ts index 0b44dee68..e7854f2b7 100644 --- a/kipper/core/src/compiler/semantics/types/built-in/array.ts +++ b/kipper/core/src/compiler/semantics/types/built-in/array.ts @@ -1,7 +1,6 @@ import { GenericBuiltInType } from "../base/generic-built-in-type"; import type { ProcessedType } from "../index"; import type { TypeError } from "../../../../errors"; -import { KipperInternalError } from "../../../../errors"; import { ArgumentAssignmentTypeError, AssignmentTypeError, diff --git a/kipper/core/src/compiler/semantics/types/custom-type.ts b/kipper/core/src/compiler/semantics/types/custom-type.ts index 0958bd426..131542afa 100644 --- a/kipper/core/src/compiler/semantics/types/custom-type.ts +++ b/kipper/core/src/compiler/semantics/types/custom-type.ts @@ -80,7 +80,7 @@ export class CustomType extends ProcessedType { const semanticData = classDeclaration.getSemanticData(); for (const field of semanticData.classMembers) { - fields.set(field.getSemanticData().identifier, field.getTypeSemanticData().type); + fields.set(field.getSemanticData().identifier, field.getTypeSemanticData().valueType); } return new CustomType(classDeclaration.getSemanticData().identifier, "class", fields); } @@ -97,7 +97,7 @@ export class CustomType extends ProcessedType { const fields: CustomTypeFields = new Map(); for (const field of interfaceDeclaration.getSemanticData().members) { - fields.set(field.getSemanticData().identifier, field.getTypeSemanticData().type); + fields.set(field.getSemanticData().identifier, field.getTypeSemanticData().valueType); } return new CustomType(interfaceDeclaration.getSemanticData().identifier, "interface", fields); } diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 3ab1759ba..dcf400f5e 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -14,6 +14,7 @@ import type { BoolPrimaryExpression, CastOrConvertExpression, ClassDeclaration, + ClassMethodDeclaration, CompoundStatement, ConditionalExpression, DoWhileLoopIterationStatement, @@ -30,6 +31,8 @@ import type { IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, InterfaceDeclaration, + InterfaceMethodDeclaration, + InterfacePropertyDeclaration, JumpStatement, LambdaPrimaryExpression, LogicalAndExpression, @@ -38,6 +41,7 @@ import type { MultiplicativeExpression, NumberPrimaryExpression, ObjectPrimaryExpression, + ObjectProperty, OperatorModifiedUnaryExpression, ParameterDeclaration, RelationalExpression, @@ -51,10 +55,6 @@ import type { VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - InterfacePropertyDeclaration, - InterfaceMethodDeclaration, - ObjectProperty, - ClassMethodDeclaration, } from "../ast"; import { KipperSemanticErrorHandler } from "../semantics"; import type { ClassConstructorDeclaration } from "../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; diff --git a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts index da9b95b59..704883352 100644 --- a/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/built-ins-generator.ts @@ -3,9 +3,8 @@ * @since 0.10.0 */ import type { TranslatedCodeLine } from "../../const"; -import type { BuiltInFunction, BuiltInVariable } from "../../semantics"; +import type { BuiltInFunction, BuiltInVariable, InternalFunction } from "../../semantics"; import type { KipperProgramContext } from "../../program-ctx"; -import type { InternalFunction } from "../../semantics"; /** * Generator for the Kipper built-ins that are specific for a target. diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 763a65d56..87a86c357 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -14,6 +14,7 @@ import type { BitwiseXorExpression, BoolPrimaryExpression, CastOrConvertExpression, + ClassConstructorDeclaration, ClassDeclaration, ClassMethodDeclaration, ClassPropertyDeclaration, @@ -44,6 +45,7 @@ import type { LogicalOrExpression, MemberAccessExpression, MultiplicativeExpression, + NewInstantiationExpression, NumberPrimaryExpression, ObjectPrimaryExpression, ObjectProperty, @@ -72,8 +74,6 @@ import { } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; -import type { ClassConstructorDeclaration } from "@kipper/core/lib/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; -import type { NewInstantiationExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/new-instantiation-expression"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -476,7 +476,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return translatedParams.join(", "); }; - return [[`${identifier}(${await concatParams()}) {`], ...(await body.translateCtxAndChildren()), ["}"]]; + return [[identifier, `(`, await concatParams(), `)`], ...(await body.translateCtxAndChildren())]; }; /** @@ -498,7 +498,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { .flat(); processedParams.pop(); - return [["constructor", "(", ...processedParams, ")", " "], ...(await body.translateCtxAndChildren())]; + return [["constructor", "(", ...processedParams, ")"], ...(await body.translateCtxAndChildren())]; }; /** diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 0848db909..29322265b 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -117,7 +117,7 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator const semanticData = node.getSemanticData(); const typeSemantics = node.getTypeSemanticData(); const identifier = semanticData.identifier; - const valueType = TargetTS.getTypeScriptType(typeSemantics.type); + const valueType = TargetTS.getTypeScriptType(typeSemantics.valueType); // Return the property declaration return [[identifier, ":", " ", valueType, ";"]]; From 932bada3a09464b7a8d0ff7553b9bce7dda64695 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Fri, 23 Aug 2024 19:33:54 +0200 Subject: [PATCH 03/81] other: Fixed class and `new` expression test cases --- test/module/core/core-functionality.test.ts | 83 ++++++++++----------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 5f2c357f3..444787653 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1553,7 +1553,7 @@ describe("Core functionality", () => { let written = instance.write(); assert.include( written, - "class Test {\n constructor(a: number, b: string) \n {\n }\n}", + "class Test {\n constructor(a: number, b: string)\n {\n }\n}", "Invalid TypeScript code (Expected different output)", ); }); @@ -1574,7 +1574,7 @@ describe("Core functionality", () => { " {\n" + ' __kipper.print("Kippa");\n' + " }\n" + - " constructor(a: number, b: string) \n" + + " constructor(a: number, b: string)\n" + " {\n" + " }\n" + "}", @@ -1582,48 +1582,45 @@ describe("Core functionality", () => { }); }); - describe("should be able to to initialize interface", () => { - it("should be able to init class", async () => { - const fileContent = `interface Test {a: str;}; var x : Test = {a: "3"}; print(x.a);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); - assert.include( - written, - "interface Test {\n" + - " a: string;\n" + - "}\n" + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", - "Invalid TypeScript code (Expected different output)", - ); - }); + it("should be able to to create object with interface blueprint", async () => { + const fileContent = `interface Test {a: str;}; var x : Test = {a: "3"}; print(x.a);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "interface Test {\n" + + " a: string;\n" + + "}\n" + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", + "Invalid TypeScript code (Expected different output)", + ); }); - describe("it should be able to instantiate a class with new", () => { - it("should be able to init class", async () => { - const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); - assert.include( - written, - "class Test {" + - "\n" + - " a: string;\n" + - "}\n" + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", - "Invalid TypeScript code (Expected different output)", - ); - }); + it("it should be able to instantiate a class with new", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("3");\n' + + "__kipper.print(x.a);", + "Invalid TypeScript code (Expected different output)", + ); }); }); From cd84dd50ac0d284fbb5aa3d4152d5ccd3f6e3a8c Mon Sep 17 00:00:00 2001 From: rat Date: Sat, 31 Aug 2024 16:41:40 +0200 Subject: [PATCH 04/81] feature: Added new keyword to be able to instantiate an object. --- CHANGELOG.md | 3 +++ .../identifier-primary-expression.ts | 3 ++- .../entry/scope-variable-declaration.ts | 2 +- kipper/target-js/src/code-generator.ts | 2 +- test/module/core/core-functionality.test.ts | 24 +++++++++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32bc8f550..67e34ddcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,8 @@ To use development versions of Kipper download the ### Added +- Added semantic checking and code generation for the NewInstantiation expression to be able to create new instances of + classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) - Added support for dot notation so that the User can access Properties and Methods of objects `.` ([#67](https://github.com/Kipper-Lang/Kipper/issues/67)) - Added semantic checking and code generation for classes, class methods, class properties and class constructors ([#665](https://github.com/Kipper-Lang/Kipper/issues/665)) - Added semantic checking and code generation for object literals and object properties. @@ -48,6 +50,7 @@ To use development versions of Kipper download the - `UniverseTypeDeclaration`, which represents the universe, where all built-in types, functions and variables are declared. This serves as the parent of the global scope. - `CustomType`, which is a class extending from `ProcessedType` and implementing the functionality for a custom type such as a interface or class. + - `NewInstantiationExpression`, which represents an AST new instantiation expression. - New errors: - `TypeCanNotBeUsedForTypeCheckingError`, which is thrown when a type is used for type checking, but is not a valid type. This is an error indicating an invalid logic that should be fixed. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts index cca4adeb7..6987a074f 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/identifier-primary-expression/identifier-primary-expression.ts @@ -125,7 +125,8 @@ export class IdentifierPrimaryExpression extends PrimaryExpression< const refTarget = semanticData.ref.refTarget; this.typeSemantics = { - evaluatedType: refTarget.type, + evaluatedType: refTarget.type, //refTarget.type is undefined, I suspect it to be an issue with + // the scope when it comes to the variable declaration }; } diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts index 77665b001..0f1482371 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-variable-declaration.ts @@ -112,7 +112,7 @@ export class ScopeVariableDeclaration extends ScopeDeclaration { * The value type of this variable. */ public get type(): ProcessedType { - return this.typeData?.valueType ?? this._builtInVariable!!.valueType; + return this.typeData?.valueType ?? this._builtInVariable!!.valueType; //<-- thrown here } /** diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 87a86c357..28ad9433d 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -451,7 +451,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { }); const finishedArgs = await Promise.all(translatedArgs); - return ["new", " ", identifier, "(", ...finishedArgs.flat(), ")"]; + return ["new", " ", identifier, "(", ...finishedArgs.join(", "), ")"]; }; classPropertyDeclaration = async (node: ClassPropertyDeclaration): Promise => { diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 444787653..5e37f522b 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1623,4 +1623,28 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); }); + + it("it should be able to instantiate a class with new and two properties", async () => { + const fileContent = `class Test {x: str; y: num; constructor (a: str, b: num) {x = a; y = b;}}; var x : Test = new Test("hello", 42); print(x.x);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " x: string;\n" + + " y: number;\n" + + " constructor(a: string, b: number)\n" + + " {\n" + + " x = a;\n" + + " y = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("hello", 42);\n' + + "__kipper.print(x.x);", + "Invalid TypeScript code (Expected different output)", + ); + }); }); From 42eaf410c0b2a102cd51fbeeef0a0b790e561085 Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 2 Sep 2024 17:39:58 +0200 Subject: [PATCH 05/81] fix: Removed unncessary extra possible clause for `typeof` Signed-off-by: Luna --- kipper/core/KipperParser.g4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 77491c4f2..50c6fcb30 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -318,7 +318,7 @@ incrementOrDecrementPostfixExpression ; typeofExpression - : 'typeof' ( '(' assignmentExpression ')' | assignmentExpression ) + : 'typeof' assignmentExpression ; unaryExpression From 7f960dae0f7c54480dbfaf43d905a136e8f8bdc5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 3 Sep 2024 00:58:10 +0200 Subject: [PATCH 06/81] fix: Fixed outdated parser gen --- CHANGELOG.md | 2 +- kipper/core/src/compiler/ast/ast-generator.ts | 3 - .../class-member-declaration.ts | 3 +- .../lexer-parser/antlr/KipperLexer.ts | 3 + .../lexer-parser/antlr/KipperParser.interp | 3 +- .../lexer-parser/antlr/KipperParser.ts | 1831 +++++++++-------- .../antlr/KipperParserListener.ts | 256 +-- .../lexer-parser/antlr/KipperParserVisitor.ts | 252 +-- .../semantics/analyser/type-checker.ts | 1 - .../translation/code-generator.ts | 2 +- kipper/target-js/src/code-generator.ts | 9 +- test/module/core/core-functionality.test.ts | 126 +- 12 files changed, 1302 insertions(+), 1189 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c8e80a6b..4daa1897b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ To use development versions of Kipper download the ### Added - Semantic checking and code generation for the `new` keyword expression to be able to create new instances of - classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) + classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) - Support for the typeof operator, which returns the runtime type of a value. ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) - Support for Nix Flakes and direnv, which allows for a more reproducible and consistent development environment. diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index de7b68c3d..7c7ccfa1d 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -29,10 +29,7 @@ import type { ArrayPrimaryExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, - ClassConstructorDeclarationContext, ClassDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, CompilationUnitContext, CompoundStatementContext, DeclarationContext, diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts index 1d0b8ce45..d460b1be8 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration.ts @@ -1,9 +1,8 @@ import type { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../lexer-parser"; import type { ASTNodeMapper } from "../../../../../mapping"; -import { TypeDeclaration } from "../../type-declaration"; import type { ClassMemberDeclarationSemantics } from "./class-member-declaration-semantics"; import type { ClassMemberDeclarationTypeSemantics } from "./class-member-declaration-type-semantics"; -import type { ClassScope } from "../../../../../../semantics/symbol-table/class-scope"; +import type { ClassScope } from "../../../../../../semantics"; import { Declaration } from "../../../declaration"; export type ASTClassMemberDeclarationKind = diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index fcc1aef27..3d59981b6 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -5,7 +5,10 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index 3e6e25d9c..f3e05b05a 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -241,6 +241,7 @@ bracketNotation sliceNotation postfixExpression incrementOrDecrementPostfixExpression +typeofExpression unaryExpression incrementOrDecrementUnaryExpression operatorModifiedUnaryExpression @@ -270,4 +271,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 90, 811, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 3, 2, 5, 2, 176, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 181, 10, 3, 13, 3, 14, 3, 182, 3, 4, 3, 4, 3, 5, 6, 5, 188, 10, 5, 13, 5, 14, 5, 189, 3, 6, 3, 6, 3, 6, 5, 6, 195, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 203, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 215, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 227, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 233, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 238, 10, 15, 12, 15, 14, 15, 241, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 251, 10, 17, 12, 17, 14, 17, 254, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 260, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 270, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 282, 10, 21, 12, 21, 14, 21, 285, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 292, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 301, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 307, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 312, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 323, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 328, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 339, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 348, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 356, 10, 31, 12, 31, 14, 31, 359, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 371, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 376, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 382, 10, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 392, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 398, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 422, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 436, 10, 39, 3, 40, 3, 40, 5, 40, 440, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 448, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 462, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 468, 10, 47, 12, 47, 14, 47, 471, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 476, 10, 47, 12, 47, 14, 47, 479, 11, 47, 3, 47, 5, 47, 482, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 487, 10, 48, 3, 48, 5, 48, 490, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 495, 10, 49, 3, 49, 5, 49, 498, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 506, 10, 51, 12, 51, 14, 51, 509, 11, 51, 5, 51, 511, 10, 51, 3, 51, 5, 51, 514, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 522, 10, 52, 12, 52, 14, 52, 525, 11, 52, 5, 52, 527, 10, 52, 3, 52, 5, 52, 530, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 546, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 555, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 560, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 577, 10, 55, 3, 55, 3, 55, 7, 55, 581, 10, 55, 12, 55, 14, 55, 584, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 589, 10, 56, 12, 56, 14, 56, 592, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 605, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 611, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 5, 60, 617, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 5, 62, 625, 10, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 5, 67, 642, 10, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 650, 10, 68, 12, 68, 14, 68, 653, 11, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 661, 10, 69, 12, 69, 14, 69, 664, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 673, 10, 70, 12, 70, 14, 70, 676, 11, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 686, 10, 72, 12, 72, 14, 72, 689, 11, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 697, 10, 73, 12, 73, 14, 73, 700, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 708, 10, 74, 12, 74, 14, 74, 711, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 719, 10, 75, 12, 75, 14, 75, 722, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 730, 10, 76, 12, 76, 14, 76, 733, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 741, 10, 77, 12, 77, 14, 77, 744, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 752, 10, 78, 12, 78, 14, 78, 755, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 764, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 771, 10, 80, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 7, 82, 778, 10, 82, 12, 82, 14, 82, 781, 11, 82, 3, 83, 3, 83, 3, 83, 5, 83, 786, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 7, 85, 795, 10, 85, 12, 85, 14, 85, 798, 11, 85, 5, 85, 800, 10, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 2, 2, 13, 108, 134, 136, 138, 142, 144, 146, 148, 150, 152, 154, 88, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 80, 81, 4, 2, 79, 79, 82, 82, 3, 2, 33, 35, 4, 2, 48, 48, 50, 50, 6, 2, 47, 47, 49, 49, 57, 57, 73, 73, 3, 2, 51, 54, 4, 2, 47, 47, 49, 49, 3, 2, 74, 76, 3, 2, 66, 69, 3, 2, 64, 65, 3, 2, 58, 63, 4, 2, 33, 35, 78, 78, 2, 821, 2, 175, 3, 2, 2, 2, 4, 180, 3, 2, 2, 2, 6, 184, 3, 2, 2, 2, 8, 187, 3, 2, 2, 2, 10, 194, 3, 2, 2, 2, 12, 202, 3, 2, 2, 2, 14, 204, 3, 2, 2, 2, 16, 207, 3, 2, 2, 2, 18, 209, 3, 2, 2, 2, 20, 216, 3, 2, 2, 2, 22, 218, 3, 2, 2, 2, 24, 220, 3, 2, 2, 2, 26, 222, 3, 2, 2, 2, 28, 234, 3, 2, 2, 2, 30, 242, 3, 2, 2, 2, 32, 246, 3, 2, 2, 2, 34, 259, 3, 2, 2, 2, 36, 261, 3, 2, 2, 2, 38, 266, 3, 2, 2, 2, 40, 276, 3, 2, 2, 2, 42, 291, 3, 2, 2, 2, 44, 293, 3, 2, 2, 2, 46, 297, 3, 2, 2, 2, 48, 308, 3, 2, 2, 2, 50, 322, 3, 2, 2, 2, 52, 324, 3, 2, 2, 2, 54, 331, 3, 2, 2, 2, 56, 338, 3, 2, 2, 2, 58, 340, 3, 2, 2, 2, 60, 349, 3, 2, 2, 2, 62, 370, 3, 2, 2, 2, 64, 375, 3, 2, 2, 2, 66, 377, 3, 2, 2, 2, 68, 402, 3, 2, 2, 2, 70, 408, 3, 2, 2, 2, 72, 416, 3, 2, 2, 2, 74, 419, 3, 2, 2, 2, 76, 435, 3, 2, 2, 2, 78, 437, 3, 2, 2, 2, 80, 449, 3, 2, 2, 2, 82, 453, 3, 2, 2, 2, 84, 455, 3, 2, 2, 2, 86, 457, 3, 2, 2, 2, 88, 461, 3, 2, 2, 2, 90, 463, 3, 2, 2, 2, 92, 481, 3, 2, 2, 2, 94, 489, 3, 2, 2, 2, 96, 497, 3, 2, 2, 2, 98, 499, 3, 2, 2, 2, 100, 501, 3, 2, 2, 2, 102, 517, 3, 2, 2, 2, 104, 533, 3, 2, 2, 2, 106, 537, 3, 2, 2, 2, 108, 559, 3, 2, 2, 2, 110, 585, 3, 2, 2, 2, 112, 593, 3, 2, 2, 2, 114, 596, 3, 2, 2, 2, 116, 600, 3, 2, 2, 2, 118, 616, 3, 2, 2, 2, 120, 618, 3, 2, 2, 2, 122, 624, 3, 2, 2, 2, 124, 626, 3, 2, 2, 2, 126, 629, 3, 2, 2, 2, 128, 632, 3, 2, 2, 2, 130, 634, 3, 2, 2, 2, 132, 641, 3, 2, 2, 2, 134, 643, 3, 2, 2, 2, 136, 654, 3, 2, 2, 2, 138, 665, 3, 2, 2, 2, 140, 677, 3, 2, 2, 2, 142, 679, 3, 2, 2, 2, 144, 690, 3, 2, 2, 2, 146, 701, 3, 2, 2, 2, 148, 712, 3, 2, 2, 2, 150, 723, 3, 2, 2, 2, 152, 734, 3, 2, 2, 2, 154, 745, 3, 2, 2, 2, 156, 763, 3, 2, 2, 2, 158, 770, 3, 2, 2, 2, 160, 772, 3, 2, 2, 2, 162, 774, 3, 2, 2, 2, 164, 785, 3, 2, 2, 2, 166, 787, 3, 2, 2, 2, 168, 789, 3, 2, 2, 2, 170, 803, 3, 2, 2, 2, 172, 808, 3, 2, 2, 2, 174, 176, 5, 4, 3, 2, 175, 174, 3, 2, 2, 2, 175, 176, 3, 2, 2, 2, 176, 177, 3, 2, 2, 2, 177, 178, 7, 2, 2, 3, 178, 3, 3, 2, 2, 2, 179, 181, 5, 6, 4, 2, 180, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 180, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 5, 3, 2, 2, 2, 184, 185, 5, 8, 5, 2, 185, 7, 3, 2, 2, 2, 186, 188, 5, 10, 6, 2, 187, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 9, 3, 2, 2, 2, 191, 195, 5, 50, 26, 2, 192, 195, 5, 12, 7, 2, 193, 195, 7, 37, 2, 2, 194, 191, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 193, 3, 2, 2, 2, 195, 11, 3, 2, 2, 2, 196, 197, 5, 14, 8, 2, 197, 198, 7, 37, 2, 2, 198, 203, 3, 2, 2, 2, 199, 203, 5, 26, 14, 2, 200, 203, 5, 32, 17, 2, 201, 203, 5, 40, 21, 2, 202, 196, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 201, 3, 2, 2, 2, 203, 13, 3, 2, 2, 2, 204, 205, 5, 16, 9, 2, 205, 206, 5, 18, 10, 2, 206, 15, 3, 2, 2, 2, 207, 208, 9, 2, 2, 2, 208, 17, 3, 2, 2, 2, 209, 210, 5, 22, 12, 2, 210, 211, 7, 39, 2, 2, 211, 214, 5, 164, 83, 2, 212, 213, 7, 58, 2, 2, 213, 215, 5, 20, 11, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 19, 3, 2, 2, 2, 216, 217, 5, 158, 80, 2, 217, 21, 3, 2, 2, 2, 218, 219, 5, 24, 13, 2, 219, 23, 3, 2, 2, 2, 220, 221, 7, 78, 2, 2, 221, 25, 3, 2, 2, 2, 222, 223, 7, 22, 2, 2, 223, 224, 5, 22, 12, 2, 224, 226, 7, 40, 2, 2, 225, 227, 5, 28, 15, 2, 226, 225, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 228, 3, 2, 2, 2, 228, 229, 7, 41, 2, 2, 229, 230, 7, 25, 2, 2, 230, 232, 5, 164, 83, 2, 231, 233, 5, 52, 27, 2, 232, 231, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 27, 3, 2, 2, 2, 234, 239, 5, 30, 16, 2, 235, 236, 7, 36, 2, 2, 236, 238, 5, 30, 16, 2, 237, 235, 3, 2, 2, 2, 238, 241, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 29, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 242, 243, 5, 22, 12, 2, 243, 244, 7, 39, 2, 2, 244, 245, 5, 164, 83, 2, 245, 31, 3, 2, 2, 2, 246, 247, 7, 27, 2, 2, 247, 248, 5, 22, 12, 2, 248, 252, 7, 45, 2, 2, 249, 251, 5, 34, 18, 2, 250, 249, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 255, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 256, 7, 46, 2, 2, 256, 33, 3, 2, 2, 2, 257, 260, 5, 36, 19, 2, 258, 260, 5, 38, 20, 2, 259, 257, 3, 2, 2, 2, 259, 258, 3, 2, 2, 2, 260, 35, 3, 2, 2, 2, 261, 262, 5, 22, 12, 2, 262, 263, 7, 39, 2, 2, 263, 264, 5, 164, 83, 2, 264, 265, 7, 37, 2, 2, 265, 37, 3, 2, 2, 2, 266, 267, 5, 22, 12, 2, 267, 269, 7, 40, 2, 2, 268, 270, 5, 28, 15, 2, 269, 268, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 7, 41, 2, 2, 272, 273, 7, 39, 2, 2, 273, 274, 5, 164, 83, 2, 274, 275, 7, 37, 2, 2, 275, 39, 3, 2, 2, 2, 276, 277, 7, 26, 2, 2, 277, 278, 5, 22, 12, 2, 278, 283, 7, 45, 2, 2, 279, 282, 5, 42, 22, 2, 280, 282, 7, 37, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 285, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 286, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 286, 287, 7, 46, 2, 2, 287, 41, 3, 2, 2, 2, 288, 292, 5, 44, 23, 2, 289, 292, 5, 46, 24, 2, 290, 292, 5, 48, 25, 2, 291, 288, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 291, 290, 3, 2, 2, 2, 292, 43, 3, 2, 2, 2, 293, 294, 5, 22, 12, 2, 294, 295, 7, 39, 2, 2, 295, 296, 5, 164, 83, 2, 296, 45, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 300, 7, 40, 2, 2, 299, 301, 5, 28, 15, 2, 300, 299, 3, 2, 2, 2, 300, 301, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 303, 7, 41, 2, 2, 303, 304, 7, 39, 2, 2, 304, 306, 5, 164, 83, 2, 305, 307, 5, 52, 27, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 47, 3, 2, 2, 2, 308, 309, 7, 28, 2, 2, 309, 311, 7, 40, 2, 2, 310, 312, 5, 28, 15, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 7, 41, 2, 2, 314, 315, 5, 52, 27, 2, 315, 49, 3, 2, 2, 2, 316, 323, 5, 54, 28, 2, 317, 323, 5, 56, 29, 2, 318, 323, 5, 64, 33, 2, 319, 323, 5, 72, 37, 2, 320, 323, 5, 74, 38, 2, 321, 323, 5, 52, 27, 2, 322, 316, 3, 2, 2, 2, 322, 317, 3, 2, 2, 2, 322, 318, 3, 2, 2, 2, 322, 319, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 322, 321, 3, 2, 2, 2, 323, 51, 3, 2, 2, 2, 324, 325, 6, 27, 2, 2, 325, 327, 7, 45, 2, 2, 326, 328, 5, 8, 5, 2, 327, 326, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 329, 3, 2, 2, 2, 329, 330, 7, 46, 2, 2, 330, 53, 3, 2, 2, 2, 331, 332, 8, 28, 1, 2, 332, 333, 5, 162, 82, 2, 333, 334, 7, 37, 2, 2, 334, 335, 8, 28, 1, 2, 335, 55, 3, 2, 2, 2, 336, 339, 5, 58, 30, 2, 337, 339, 5, 60, 31, 2, 338, 336, 3, 2, 2, 2, 338, 337, 3, 2, 2, 2, 339, 57, 3, 2, 2, 2, 340, 341, 7, 18, 2, 2, 341, 342, 7, 40, 2, 2, 342, 343, 5, 162, 82, 2, 343, 344, 7, 41, 2, 2, 344, 347, 5, 50, 26, 2, 345, 346, 7, 19, 2, 2, 346, 348, 5, 50, 26, 2, 347, 345, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 59, 3, 2, 2, 2, 349, 350, 7, 11, 2, 2, 350, 351, 7, 40, 2, 2, 351, 352, 5, 162, 82, 2, 352, 353, 7, 41, 2, 2, 353, 357, 7, 45, 2, 2, 354, 356, 5, 62, 32, 2, 355, 354, 3, 2, 2, 2, 356, 359, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 357, 358, 3, 2, 2, 2, 358, 360, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 360, 361, 7, 46, 2, 2, 361, 61, 3, 2, 2, 2, 362, 363, 7, 12, 2, 2, 363, 364, 5, 162, 82, 2, 364, 365, 7, 39, 2, 2, 365, 366, 5, 50, 26, 2, 366, 371, 3, 2, 2, 2, 367, 368, 7, 13, 2, 2, 368, 369, 7, 39, 2, 2, 369, 371, 5, 50, 26, 2, 370, 362, 3, 2, 2, 2, 370, 367, 3, 2, 2, 2, 371, 63, 3, 2, 2, 2, 372, 376, 5, 66, 34, 2, 373, 376, 5, 68, 35, 2, 374, 376, 5, 70, 36, 2, 375, 372, 3, 2, 2, 2, 375, 373, 3, 2, 2, 2, 375, 374, 3, 2, 2, 2, 376, 65, 3, 2, 2, 2, 377, 378, 7, 20, 2, 2, 378, 385, 7, 40, 2, 2, 379, 382, 5, 14, 8, 2, 380, 382, 5, 162, 82, 2, 381, 379, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 8, 34, 1, 2, 384, 386, 3, 2, 2, 2, 385, 381, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 391, 7, 37, 2, 2, 388, 389, 5, 162, 82, 2, 389, 390, 8, 34, 1, 2, 390, 392, 3, 2, 2, 2, 391, 388, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 7, 37, 2, 2, 394, 395, 5, 162, 82, 2, 395, 396, 8, 34, 1, 2, 396, 398, 3, 2, 2, 2, 397, 394, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 7, 41, 2, 2, 400, 401, 5, 50, 26, 2, 401, 67, 3, 2, 2, 2, 402, 403, 7, 17, 2, 2, 403, 404, 7, 40, 2, 2, 404, 405, 5, 162, 82, 2, 405, 406, 7, 41, 2, 2, 406, 407, 5, 50, 26, 2, 407, 69, 3, 2, 2, 2, 408, 409, 7, 16, 2, 2, 409, 410, 5, 50, 26, 2, 410, 411, 7, 17, 2, 2, 411, 412, 7, 40, 2, 2, 412, 413, 5, 162, 82, 2, 413, 414, 7, 41, 2, 2, 414, 415, 7, 37, 2, 2, 415, 71, 3, 2, 2, 2, 416, 417, 9, 3, 2, 2, 417, 418, 7, 37, 2, 2, 418, 73, 3, 2, 2, 2, 419, 421, 7, 23, 2, 2, 420, 422, 5, 162, 82, 2, 421, 420, 3, 2, 2, 2, 421, 422, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 423, 424, 7, 37, 2, 2, 424, 75, 3, 2, 2, 2, 425, 436, 5, 80, 41, 2, 426, 436, 5, 78, 40, 2, 427, 436, 5, 100, 51, 2, 428, 436, 5, 102, 52, 2, 429, 436, 5, 82, 42, 2, 430, 436, 5, 84, 43, 2, 431, 436, 5, 90, 46, 2, 432, 436, 5, 92, 47, 2, 433, 436, 5, 98, 50, 2, 434, 436, 5, 106, 54, 2, 435, 425, 3, 2, 2, 2, 435, 426, 3, 2, 2, 2, 435, 427, 3, 2, 2, 2, 435, 428, 3, 2, 2, 2, 435, 429, 3, 2, 2, 2, 435, 430, 3, 2, 2, 2, 435, 431, 3, 2, 2, 2, 435, 432, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 434, 3, 2, 2, 2, 436, 77, 3, 2, 2, 2, 437, 439, 7, 40, 2, 2, 438, 440, 5, 28, 15, 2, 439, 438, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 7, 41, 2, 2, 442, 443, 7, 39, 2, 2, 443, 444, 5, 164, 83, 2, 444, 447, 7, 25, 2, 2, 445, 448, 5, 162, 82, 2, 446, 448, 5, 52, 27, 2, 447, 445, 3, 2, 2, 2, 447, 446, 3, 2, 2, 2, 448, 79, 3, 2, 2, 2, 449, 450, 7, 40, 2, 2, 450, 451, 5, 162, 82, 2, 451, 452, 7, 41, 2, 2, 452, 81, 3, 2, 2, 2, 453, 454, 9, 4, 2, 2, 454, 83, 3, 2, 2, 2, 455, 456, 5, 86, 44, 2, 456, 85, 3, 2, 2, 2, 457, 458, 7, 78, 2, 2, 458, 87, 3, 2, 2, 2, 459, 462, 5, 86, 44, 2, 460, 462, 5, 90, 46, 2, 461, 459, 3, 2, 2, 2, 461, 460, 3, 2, 2, 2, 462, 89, 3, 2, 2, 2, 463, 464, 9, 5, 2, 2, 464, 91, 3, 2, 2, 2, 465, 469, 7, 85, 2, 2, 466, 468, 5, 94, 48, 2, 467, 466, 3, 2, 2, 2, 468, 471, 3, 2, 2, 2, 469, 467, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 472, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 472, 482, 7, 87, 2, 2, 473, 477, 7, 86, 2, 2, 474, 476, 5, 96, 49, 2, 475, 474, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 477, 478, 3, 2, 2, 2, 478, 480, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 480, 482, 7, 89, 2, 2, 481, 465, 3, 2, 2, 2, 481, 473, 3, 2, 2, 2, 482, 93, 3, 2, 2, 2, 483, 490, 7, 88, 2, 2, 484, 486, 7, 3, 2, 2, 485, 487, 5, 162, 82, 2, 486, 485, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 490, 7, 44, 2, 2, 489, 483, 3, 2, 2, 2, 489, 484, 3, 2, 2, 2, 490, 95, 3, 2, 2, 2, 491, 498, 7, 90, 2, 2, 492, 494, 7, 3, 2, 2, 493, 495, 5, 162, 82, 2, 494, 493, 3, 2, 2, 2, 494, 495, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 7, 44, 2, 2, 497, 491, 3, 2, 2, 2, 497, 492, 3, 2, 2, 2, 498, 97, 3, 2, 2, 2, 499, 500, 9, 6, 2, 2, 500, 99, 3, 2, 2, 2, 501, 510, 7, 42, 2, 2, 502, 507, 5, 162, 82, 2, 503, 504, 7, 36, 2, 2, 504, 506, 5, 162, 82, 2, 505, 503, 3, 2, 2, 2, 506, 509, 3, 2, 2, 2, 507, 505, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 510, 502, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 513, 3, 2, 2, 2, 512, 514, 7, 36, 2, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 516, 7, 43, 2, 2, 516, 101, 3, 2, 2, 2, 517, 526, 7, 45, 2, 2, 518, 523, 5, 104, 53, 2, 519, 520, 7, 36, 2, 2, 520, 522, 5, 104, 53, 2, 521, 519, 3, 2, 2, 2, 522, 525, 3, 2, 2, 2, 523, 521, 3, 2, 2, 2, 523, 524, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 526, 518, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 529, 3, 2, 2, 2, 528, 530, 7, 36, 2, 2, 529, 528, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 532, 7, 46, 2, 2, 532, 103, 3, 2, 2, 2, 533, 534, 5, 88, 45, 2, 534, 535, 7, 39, 2, 2, 535, 536, 5, 162, 82, 2, 536, 105, 3, 2, 2, 2, 537, 538, 9, 7, 2, 2, 538, 107, 3, 2, 2, 2, 539, 540, 8, 55, 1, 2, 540, 560, 5, 76, 39, 2, 541, 542, 7, 24, 2, 2, 542, 543, 5, 108, 55, 2, 543, 545, 7, 40, 2, 2, 544, 546, 5, 110, 56, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 548, 7, 41, 2, 2, 548, 549, 8, 55, 1, 2, 549, 560, 3, 2, 2, 2, 550, 551, 7, 29, 2, 2, 551, 552, 5, 164, 83, 2, 552, 554, 7, 40, 2, 2, 553, 555, 5, 110, 56, 2, 554, 553, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 7, 41, 2, 2, 557, 558, 8, 55, 1, 2, 558, 560, 3, 2, 2, 2, 559, 539, 3, 2, 2, 2, 559, 541, 3, 2, 2, 2, 559, 550, 3, 2, 2, 2, 560, 582, 3, 2, 2, 2, 561, 562, 12, 8, 2, 2, 562, 563, 5, 112, 57, 2, 563, 564, 8, 55, 1, 2, 564, 581, 3, 2, 2, 2, 565, 566, 12, 7, 2, 2, 566, 567, 5, 114, 58, 2, 567, 568, 8, 55, 1, 2, 568, 581, 3, 2, 2, 2, 569, 570, 12, 6, 2, 2, 570, 571, 5, 116, 59, 2, 571, 572, 8, 55, 1, 2, 572, 581, 3, 2, 2, 2, 573, 574, 12, 5, 2, 2, 574, 576, 7, 40, 2, 2, 575, 577, 5, 110, 56, 2, 576, 575, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 579, 7, 41, 2, 2, 579, 581, 8, 55, 1, 2, 580, 561, 3, 2, 2, 2, 580, 565, 3, 2, 2, 2, 580, 569, 3, 2, 2, 2, 580, 573, 3, 2, 2, 2, 581, 584, 3, 2, 2, 2, 582, 580, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 109, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 585, 590, 5, 158, 80, 2, 586, 587, 7, 36, 2, 2, 587, 589, 5, 158, 80, 2, 588, 586, 3, 2, 2, 2, 589, 592, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 111, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 594, 7, 77, 2, 2, 594, 595, 5, 86, 44, 2, 595, 113, 3, 2, 2, 2, 596, 597, 7, 42, 2, 2, 597, 598, 5, 162, 82, 2, 598, 599, 7, 43, 2, 2, 599, 115, 3, 2, 2, 2, 600, 604, 7, 42, 2, 2, 601, 602, 5, 162, 82, 2, 602, 603, 8, 59, 1, 2, 603, 605, 3, 2, 2, 2, 604, 601, 3, 2, 2, 2, 604, 605, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 610, 7, 39, 2, 2, 607, 608, 5, 162, 82, 2, 608, 609, 8, 59, 1, 2, 609, 611, 3, 2, 2, 2, 610, 607, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 612, 3, 2, 2, 2, 612, 613, 7, 43, 2, 2, 613, 117, 3, 2, 2, 2, 614, 617, 5, 108, 55, 2, 615, 617, 5, 120, 61, 2, 616, 614, 3, 2, 2, 2, 616, 615, 3, 2, 2, 2, 617, 119, 3, 2, 2, 2, 618, 619, 5, 108, 55, 2, 619, 620, 5, 128, 65, 2, 620, 121, 3, 2, 2, 2, 621, 625, 5, 118, 60, 2, 622, 625, 5, 124, 63, 2, 623, 625, 5, 126, 64, 2, 624, 621, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 624, 623, 3, 2, 2, 2, 625, 123, 3, 2, 2, 2, 626, 627, 5, 128, 65, 2, 627, 628, 5, 118, 60, 2, 628, 125, 3, 2, 2, 2, 629, 630, 5, 130, 66, 2, 630, 631, 5, 118, 60, 2, 631, 127, 3, 2, 2, 2, 632, 633, 9, 8, 2, 2, 633, 129, 3, 2, 2, 2, 634, 635, 9, 9, 2, 2, 635, 131, 3, 2, 2, 2, 636, 642, 5, 122, 62, 2, 637, 638, 5, 122, 62, 2, 638, 639, 7, 9, 2, 2, 639, 640, 5, 164, 83, 2, 640, 642, 3, 2, 2, 2, 641, 636, 3, 2, 2, 2, 641, 637, 3, 2, 2, 2, 642, 133, 3, 2, 2, 2, 643, 644, 8, 68, 1, 2, 644, 645, 5, 132, 67, 2, 645, 651, 3, 2, 2, 2, 646, 647, 12, 3, 2, 2, 647, 648, 9, 10, 2, 2, 648, 650, 5, 132, 67, 2, 649, 646, 3, 2, 2, 2, 650, 653, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 135, 3, 2, 2, 2, 653, 651, 3, 2, 2, 2, 654, 655, 8, 69, 1, 2, 655, 656, 5, 134, 68, 2, 656, 662, 3, 2, 2, 2, 657, 658, 12, 3, 2, 2, 658, 659, 9, 11, 2, 2, 659, 661, 5, 134, 68, 2, 660, 657, 3, 2, 2, 2, 661, 664, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 137, 3, 2, 2, 2, 664, 662, 3, 2, 2, 2, 665, 666, 8, 70, 1, 2, 666, 667, 5, 136, 69, 2, 667, 674, 3, 2, 2, 2, 668, 669, 12, 3, 2, 2, 669, 670, 5, 140, 71, 2, 670, 671, 5, 146, 74, 2, 671, 673, 3, 2, 2, 2, 672, 668, 3, 2, 2, 2, 673, 676, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 139, 3, 2, 2, 2, 676, 674, 3, 2, 2, 2, 677, 678, 9, 12, 2, 2, 678, 141, 3, 2, 2, 2, 679, 680, 8, 72, 1, 2, 680, 681, 5, 138, 70, 2, 681, 687, 3, 2, 2, 2, 682, 683, 12, 3, 2, 2, 683, 684, 9, 13, 2, 2, 684, 686, 5, 138, 70, 2, 685, 682, 3, 2, 2, 2, 686, 689, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 143, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 690, 691, 8, 73, 1, 2, 691, 692, 5, 142, 72, 2, 692, 698, 3, 2, 2, 2, 693, 694, 12, 3, 2, 2, 694, 695, 9, 14, 2, 2, 695, 697, 5, 142, 72, 2, 696, 693, 3, 2, 2, 2, 697, 700, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 145, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 702, 8, 74, 1, 2, 702, 703, 5, 144, 73, 2, 703, 709, 3, 2, 2, 2, 704, 705, 12, 3, 2, 2, 705, 706, 7, 70, 2, 2, 706, 708, 5, 144, 73, 2, 707, 704, 3, 2, 2, 2, 708, 711, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 147, 3, 2, 2, 2, 711, 709, 3, 2, 2, 2, 712, 713, 8, 75, 1, 2, 713, 714, 5, 146, 74, 2, 714, 720, 3, 2, 2, 2, 715, 716, 12, 3, 2, 2, 716, 717, 7, 72, 2, 2, 717, 719, 5, 146, 74, 2, 718, 715, 3, 2, 2, 2, 719, 722, 3, 2, 2, 2, 720, 718, 3, 2, 2, 2, 720, 721, 3, 2, 2, 2, 721, 149, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 723, 724, 8, 76, 1, 2, 724, 725, 5, 148, 75, 2, 725, 731, 3, 2, 2, 2, 726, 727, 12, 3, 2, 2, 727, 728, 7, 71, 2, 2, 728, 730, 5, 148, 75, 2, 729, 726, 3, 2, 2, 2, 730, 733, 3, 2, 2, 2, 731, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 151, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 734, 735, 8, 77, 1, 2, 735, 736, 5, 150, 76, 2, 736, 742, 3, 2, 2, 2, 737, 738, 12, 3, 2, 2, 738, 739, 7, 55, 2, 2, 739, 741, 5, 150, 76, 2, 740, 737, 3, 2, 2, 2, 741, 744, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 743, 3, 2, 2, 2, 743, 153, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 745, 746, 8, 78, 1, 2, 746, 747, 5, 152, 77, 2, 747, 753, 3, 2, 2, 2, 748, 749, 12, 3, 2, 2, 749, 750, 7, 56, 2, 2, 750, 752, 5, 152, 77, 2, 751, 748, 3, 2, 2, 2, 752, 755, 3, 2, 2, 2, 753, 751, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 155, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 756, 764, 5, 154, 78, 2, 757, 758, 5, 154, 78, 2, 758, 759, 7, 38, 2, 2, 759, 760, 5, 156, 79, 2, 760, 761, 7, 39, 2, 2, 761, 762, 5, 156, 79, 2, 762, 764, 3, 2, 2, 2, 763, 756, 3, 2, 2, 2, 763, 757, 3, 2, 2, 2, 764, 157, 3, 2, 2, 2, 765, 771, 5, 156, 79, 2, 766, 767, 5, 108, 55, 2, 767, 768, 5, 160, 81, 2, 768, 769, 5, 158, 80, 2, 769, 771, 3, 2, 2, 2, 770, 765, 3, 2, 2, 2, 770, 766, 3, 2, 2, 2, 771, 159, 3, 2, 2, 2, 772, 773, 9, 15, 2, 2, 773, 161, 3, 2, 2, 2, 774, 779, 5, 158, 80, 2, 775, 776, 7, 36, 2, 2, 776, 778, 5, 158, 80, 2, 777, 775, 3, 2, 2, 2, 778, 781, 3, 2, 2, 2, 779, 777, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 163, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 782, 786, 5, 166, 84, 2, 783, 786, 5, 168, 85, 2, 784, 786, 5, 170, 86, 2, 785, 782, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 784, 3, 2, 2, 2, 786, 165, 3, 2, 2, 2, 787, 788, 5, 172, 87, 2, 788, 167, 3, 2, 2, 2, 789, 790, 5, 172, 87, 2, 790, 799, 7, 66, 2, 2, 791, 796, 5, 164, 83, 2, 792, 793, 7, 36, 2, 2, 793, 795, 5, 164, 83, 2, 794, 792, 3, 2, 2, 2, 795, 798, 3, 2, 2, 2, 796, 794, 3, 2, 2, 2, 796, 797, 3, 2, 2, 2, 797, 800, 3, 2, 2, 2, 798, 796, 3, 2, 2, 2, 799, 791, 3, 2, 2, 2, 799, 800, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 802, 7, 68, 2, 2, 802, 169, 3, 2, 2, 2, 803, 804, 7, 32, 2, 2, 804, 805, 7, 40, 2, 2, 805, 806, 5, 172, 87, 2, 806, 807, 7, 41, 2, 2, 807, 171, 3, 2, 2, 2, 808, 809, 9, 16, 2, 2, 809, 173, 3, 2, 2, 2, 77, 175, 182, 189, 194, 202, 214, 226, 232, 239, 252, 259, 269, 281, 283, 291, 300, 306, 311, 322, 327, 338, 347, 357, 370, 375, 381, 385, 391, 397, 421, 435, 439, 447, 461, 469, 477, 481, 486, 489, 494, 497, 507, 510, 513, 523, 526, 529, 545, 554, 559, 576, 580, 582, 590, 604, 610, 616, 624, 641, 651, 662, 674, 687, 698, 709, 720, 731, 742, 753, 763, 770, 779, 785, 796, 799] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 90, 817, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 3, 2, 5, 2, 178, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 183, 10, 3, 13, 3, 14, 3, 184, 3, 4, 3, 4, 3, 5, 6, 5, 190, 10, 5, 13, 5, 14, 5, 191, 3, 6, 3, 6, 3, 6, 5, 6, 197, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 205, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 217, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 229, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 235, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 240, 10, 15, 12, 15, 14, 15, 243, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 253, 10, 17, 12, 17, 14, 17, 256, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 262, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 272, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 284, 10, 21, 12, 21, 14, 21, 287, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 294, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 303, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 309, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 314, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 325, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 330, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 341, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 350, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 358, 10, 31, 12, 31, 14, 31, 361, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 373, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 378, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 384, 10, 34, 3, 34, 3, 34, 5, 34, 388, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 394, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 400, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 424, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 438, 10, 39, 3, 40, 3, 40, 5, 40, 442, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 450, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 464, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 470, 10, 47, 12, 47, 14, 47, 473, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 478, 10, 47, 12, 47, 14, 47, 481, 11, 47, 3, 47, 5, 47, 484, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 489, 10, 48, 3, 48, 5, 48, 492, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 497, 10, 49, 3, 49, 5, 49, 500, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 508, 10, 51, 12, 51, 14, 51, 511, 11, 51, 5, 51, 513, 10, 51, 3, 51, 5, 51, 516, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 524, 10, 52, 12, 52, 14, 52, 527, 11, 52, 5, 52, 529, 10, 52, 3, 52, 5, 52, 532, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 548, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 557, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 562, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 579, 10, 55, 3, 55, 3, 55, 7, 55, 583, 10, 55, 12, 55, 14, 55, 586, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 591, 10, 56, 12, 56, 14, 56, 594, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 607, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 613, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 620, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 631, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 648, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 656, 10, 69, 12, 69, 14, 69, 659, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 667, 10, 70, 12, 70, 14, 70, 670, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 679, 10, 71, 12, 71, 14, 71, 682, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 692, 10, 73, 12, 73, 14, 73, 695, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 703, 10, 74, 12, 74, 14, 74, 706, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 714, 10, 75, 12, 75, 14, 75, 717, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 725, 10, 76, 12, 76, 14, 76, 728, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 736, 10, 77, 12, 77, 14, 77, 739, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 747, 10, 78, 12, 78, 14, 78, 750, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 758, 10, 79, 12, 79, 14, 79, 761, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 770, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 777, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 7, 83, 784, 10, 83, 12, 83, 14, 83, 787, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 792, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 7, 86, 801, 10, 86, 12, 86, 14, 86, 804, 11, 86, 5, 86, 806, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 2, 2, 13, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 89, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 80, 81, 4, 2, 79, 79, 82, 82, 3, 2, 33, 35, 4, 2, 48, 48, 50, 50, 6, 2, 47, 47, 49, 49, 57, 57, 73, 73, 3, 2, 51, 54, 4, 2, 47, 47, 49, 49, 3, 2, 74, 76, 3, 2, 66, 69, 3, 2, 64, 65, 3, 2, 58, 63, 4, 2, 33, 35, 78, 78, 2, 827, 2, 177, 3, 2, 2, 2, 4, 182, 3, 2, 2, 2, 6, 186, 3, 2, 2, 2, 8, 189, 3, 2, 2, 2, 10, 196, 3, 2, 2, 2, 12, 204, 3, 2, 2, 2, 14, 206, 3, 2, 2, 2, 16, 209, 3, 2, 2, 2, 18, 211, 3, 2, 2, 2, 20, 218, 3, 2, 2, 2, 22, 220, 3, 2, 2, 2, 24, 222, 3, 2, 2, 2, 26, 224, 3, 2, 2, 2, 28, 236, 3, 2, 2, 2, 30, 244, 3, 2, 2, 2, 32, 248, 3, 2, 2, 2, 34, 261, 3, 2, 2, 2, 36, 263, 3, 2, 2, 2, 38, 268, 3, 2, 2, 2, 40, 278, 3, 2, 2, 2, 42, 293, 3, 2, 2, 2, 44, 295, 3, 2, 2, 2, 46, 299, 3, 2, 2, 2, 48, 310, 3, 2, 2, 2, 50, 324, 3, 2, 2, 2, 52, 326, 3, 2, 2, 2, 54, 333, 3, 2, 2, 2, 56, 340, 3, 2, 2, 2, 58, 342, 3, 2, 2, 2, 60, 351, 3, 2, 2, 2, 62, 372, 3, 2, 2, 2, 64, 377, 3, 2, 2, 2, 66, 379, 3, 2, 2, 2, 68, 404, 3, 2, 2, 2, 70, 410, 3, 2, 2, 2, 72, 418, 3, 2, 2, 2, 74, 421, 3, 2, 2, 2, 76, 437, 3, 2, 2, 2, 78, 439, 3, 2, 2, 2, 80, 451, 3, 2, 2, 2, 82, 455, 3, 2, 2, 2, 84, 457, 3, 2, 2, 2, 86, 459, 3, 2, 2, 2, 88, 463, 3, 2, 2, 2, 90, 465, 3, 2, 2, 2, 92, 483, 3, 2, 2, 2, 94, 491, 3, 2, 2, 2, 96, 499, 3, 2, 2, 2, 98, 501, 3, 2, 2, 2, 100, 503, 3, 2, 2, 2, 102, 519, 3, 2, 2, 2, 104, 535, 3, 2, 2, 2, 106, 539, 3, 2, 2, 2, 108, 561, 3, 2, 2, 2, 110, 587, 3, 2, 2, 2, 112, 595, 3, 2, 2, 2, 114, 598, 3, 2, 2, 2, 116, 602, 3, 2, 2, 2, 118, 619, 3, 2, 2, 2, 120, 621, 3, 2, 2, 2, 122, 624, 3, 2, 2, 2, 124, 630, 3, 2, 2, 2, 126, 632, 3, 2, 2, 2, 128, 635, 3, 2, 2, 2, 130, 638, 3, 2, 2, 2, 132, 640, 3, 2, 2, 2, 134, 647, 3, 2, 2, 2, 136, 649, 3, 2, 2, 2, 138, 660, 3, 2, 2, 2, 140, 671, 3, 2, 2, 2, 142, 683, 3, 2, 2, 2, 144, 685, 3, 2, 2, 2, 146, 696, 3, 2, 2, 2, 148, 707, 3, 2, 2, 2, 150, 718, 3, 2, 2, 2, 152, 729, 3, 2, 2, 2, 154, 740, 3, 2, 2, 2, 156, 751, 3, 2, 2, 2, 158, 769, 3, 2, 2, 2, 160, 776, 3, 2, 2, 2, 162, 778, 3, 2, 2, 2, 164, 780, 3, 2, 2, 2, 166, 791, 3, 2, 2, 2, 168, 793, 3, 2, 2, 2, 170, 795, 3, 2, 2, 2, 172, 809, 3, 2, 2, 2, 174, 814, 3, 2, 2, 2, 176, 178, 5, 4, 3, 2, 177, 176, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 7, 2, 2, 3, 180, 3, 3, 2, 2, 2, 181, 183, 5, 6, 4, 2, 182, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 5, 3, 2, 2, 2, 186, 187, 5, 8, 5, 2, 187, 7, 3, 2, 2, 2, 188, 190, 5, 10, 6, 2, 189, 188, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 9, 3, 2, 2, 2, 193, 197, 5, 50, 26, 2, 194, 197, 5, 12, 7, 2, 195, 197, 7, 37, 2, 2, 196, 193, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 196, 195, 3, 2, 2, 2, 197, 11, 3, 2, 2, 2, 198, 199, 5, 14, 8, 2, 199, 200, 7, 37, 2, 2, 200, 205, 3, 2, 2, 2, 201, 205, 5, 26, 14, 2, 202, 205, 5, 32, 17, 2, 203, 205, 5, 40, 21, 2, 204, 198, 3, 2, 2, 2, 204, 201, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 204, 203, 3, 2, 2, 2, 205, 13, 3, 2, 2, 2, 206, 207, 5, 16, 9, 2, 207, 208, 5, 18, 10, 2, 208, 15, 3, 2, 2, 2, 209, 210, 9, 2, 2, 2, 210, 17, 3, 2, 2, 2, 211, 212, 5, 22, 12, 2, 212, 213, 7, 39, 2, 2, 213, 216, 5, 166, 84, 2, 214, 215, 7, 58, 2, 2, 215, 217, 5, 20, 11, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 19, 3, 2, 2, 2, 218, 219, 5, 160, 81, 2, 219, 21, 3, 2, 2, 2, 220, 221, 5, 24, 13, 2, 221, 23, 3, 2, 2, 2, 222, 223, 7, 78, 2, 2, 223, 25, 3, 2, 2, 2, 224, 225, 7, 22, 2, 2, 225, 226, 5, 22, 12, 2, 226, 228, 7, 40, 2, 2, 227, 229, 5, 28, 15, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 41, 2, 2, 231, 232, 7, 25, 2, 2, 232, 234, 5, 166, 84, 2, 233, 235, 5, 52, 27, 2, 234, 233, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 27, 3, 2, 2, 2, 236, 241, 5, 30, 16, 2, 237, 238, 7, 36, 2, 2, 238, 240, 5, 30, 16, 2, 239, 237, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 29, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 245, 5, 22, 12, 2, 245, 246, 7, 39, 2, 2, 246, 247, 5, 166, 84, 2, 247, 31, 3, 2, 2, 2, 248, 249, 7, 27, 2, 2, 249, 250, 5, 22, 12, 2, 250, 254, 7, 45, 2, 2, 251, 253, 5, 34, 18, 2, 252, 251, 3, 2, 2, 2, 253, 256, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 257, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 257, 258, 7, 46, 2, 2, 258, 33, 3, 2, 2, 2, 259, 262, 5, 36, 19, 2, 260, 262, 5, 38, 20, 2, 261, 259, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 35, 3, 2, 2, 2, 263, 264, 5, 22, 12, 2, 264, 265, 7, 39, 2, 2, 265, 266, 5, 166, 84, 2, 266, 267, 7, 37, 2, 2, 267, 37, 3, 2, 2, 2, 268, 269, 5, 22, 12, 2, 269, 271, 7, 40, 2, 2, 270, 272, 5, 28, 15, 2, 271, 270, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 7, 41, 2, 2, 274, 275, 7, 39, 2, 2, 275, 276, 5, 166, 84, 2, 276, 277, 7, 37, 2, 2, 277, 39, 3, 2, 2, 2, 278, 279, 7, 26, 2, 2, 279, 280, 5, 22, 12, 2, 280, 285, 7, 45, 2, 2, 281, 284, 5, 42, 22, 2, 282, 284, 7, 37, 2, 2, 283, 281, 3, 2, 2, 2, 283, 282, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 41, 3, 2, 2, 2, 290, 294, 5, 44, 23, 2, 291, 294, 5, 46, 24, 2, 292, 294, 5, 48, 25, 2, 293, 290, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 292, 3, 2, 2, 2, 294, 43, 3, 2, 2, 2, 295, 296, 5, 22, 12, 2, 296, 297, 7, 39, 2, 2, 297, 298, 5, 166, 84, 2, 298, 45, 3, 2, 2, 2, 299, 300, 5, 22, 12, 2, 300, 302, 7, 40, 2, 2, 301, 303, 5, 28, 15, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 7, 41, 2, 2, 305, 306, 7, 39, 2, 2, 306, 308, 5, 166, 84, 2, 307, 309, 5, 52, 27, 2, 308, 307, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 47, 3, 2, 2, 2, 310, 311, 7, 28, 2, 2, 311, 313, 7, 40, 2, 2, 312, 314, 5, 28, 15, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 41, 2, 2, 316, 317, 5, 52, 27, 2, 317, 49, 3, 2, 2, 2, 318, 325, 5, 54, 28, 2, 319, 325, 5, 56, 29, 2, 320, 325, 5, 64, 33, 2, 321, 325, 5, 72, 37, 2, 322, 325, 5, 74, 38, 2, 323, 325, 5, 52, 27, 2, 324, 318, 3, 2, 2, 2, 324, 319, 3, 2, 2, 2, 324, 320, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 323, 3, 2, 2, 2, 325, 51, 3, 2, 2, 2, 326, 327, 6, 27, 2, 2, 327, 329, 7, 45, 2, 2, 328, 330, 5, 8, 5, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 46, 2, 2, 332, 53, 3, 2, 2, 2, 333, 334, 8, 28, 1, 2, 334, 335, 5, 164, 83, 2, 335, 336, 7, 37, 2, 2, 336, 337, 8, 28, 1, 2, 337, 55, 3, 2, 2, 2, 338, 341, 5, 58, 30, 2, 339, 341, 5, 60, 31, 2, 340, 338, 3, 2, 2, 2, 340, 339, 3, 2, 2, 2, 341, 57, 3, 2, 2, 2, 342, 343, 7, 18, 2, 2, 343, 344, 7, 40, 2, 2, 344, 345, 5, 164, 83, 2, 345, 346, 7, 41, 2, 2, 346, 349, 5, 50, 26, 2, 347, 348, 7, 19, 2, 2, 348, 350, 5, 50, 26, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 59, 3, 2, 2, 2, 351, 352, 7, 11, 2, 2, 352, 353, 7, 40, 2, 2, 353, 354, 5, 164, 83, 2, 354, 355, 7, 41, 2, 2, 355, 359, 7, 45, 2, 2, 356, 358, 5, 62, 32, 2, 357, 356, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 46, 2, 2, 363, 61, 3, 2, 2, 2, 364, 365, 7, 12, 2, 2, 365, 366, 5, 164, 83, 2, 366, 367, 7, 39, 2, 2, 367, 368, 5, 50, 26, 2, 368, 373, 3, 2, 2, 2, 369, 370, 7, 13, 2, 2, 370, 371, 7, 39, 2, 2, 371, 373, 5, 50, 26, 2, 372, 364, 3, 2, 2, 2, 372, 369, 3, 2, 2, 2, 373, 63, 3, 2, 2, 2, 374, 378, 5, 66, 34, 2, 375, 378, 5, 68, 35, 2, 376, 378, 5, 70, 36, 2, 377, 374, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 376, 3, 2, 2, 2, 378, 65, 3, 2, 2, 2, 379, 380, 7, 20, 2, 2, 380, 387, 7, 40, 2, 2, 381, 384, 5, 14, 8, 2, 382, 384, 5, 164, 83, 2, 383, 381, 3, 2, 2, 2, 383, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 8, 34, 1, 2, 386, 388, 3, 2, 2, 2, 387, 383, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 393, 7, 37, 2, 2, 390, 391, 5, 164, 83, 2, 391, 392, 8, 34, 1, 2, 392, 394, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 399, 7, 37, 2, 2, 396, 397, 5, 164, 83, 2, 397, 398, 8, 34, 1, 2, 398, 400, 3, 2, 2, 2, 399, 396, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 7, 41, 2, 2, 402, 403, 5, 50, 26, 2, 403, 67, 3, 2, 2, 2, 404, 405, 7, 17, 2, 2, 405, 406, 7, 40, 2, 2, 406, 407, 5, 164, 83, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 50, 26, 2, 409, 69, 3, 2, 2, 2, 410, 411, 7, 16, 2, 2, 411, 412, 5, 50, 26, 2, 412, 413, 7, 17, 2, 2, 413, 414, 7, 40, 2, 2, 414, 415, 5, 164, 83, 2, 415, 416, 7, 41, 2, 2, 416, 417, 7, 37, 2, 2, 417, 71, 3, 2, 2, 2, 418, 419, 9, 3, 2, 2, 419, 420, 7, 37, 2, 2, 420, 73, 3, 2, 2, 2, 421, 423, 7, 23, 2, 2, 422, 424, 5, 164, 83, 2, 423, 422, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 7, 37, 2, 2, 426, 75, 3, 2, 2, 2, 427, 438, 5, 80, 41, 2, 428, 438, 5, 78, 40, 2, 429, 438, 5, 100, 51, 2, 430, 438, 5, 102, 52, 2, 431, 438, 5, 82, 42, 2, 432, 438, 5, 84, 43, 2, 433, 438, 5, 90, 46, 2, 434, 438, 5, 92, 47, 2, 435, 438, 5, 98, 50, 2, 436, 438, 5, 106, 54, 2, 437, 427, 3, 2, 2, 2, 437, 428, 3, 2, 2, 2, 437, 429, 3, 2, 2, 2, 437, 430, 3, 2, 2, 2, 437, 431, 3, 2, 2, 2, 437, 432, 3, 2, 2, 2, 437, 433, 3, 2, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 436, 3, 2, 2, 2, 438, 77, 3, 2, 2, 2, 439, 441, 7, 40, 2, 2, 440, 442, 5, 28, 15, 2, 441, 440, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 444, 7, 41, 2, 2, 444, 445, 7, 39, 2, 2, 445, 446, 5, 166, 84, 2, 446, 449, 7, 25, 2, 2, 447, 450, 5, 164, 83, 2, 448, 450, 5, 52, 27, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 79, 3, 2, 2, 2, 451, 452, 7, 40, 2, 2, 452, 453, 5, 164, 83, 2, 453, 454, 7, 41, 2, 2, 454, 81, 3, 2, 2, 2, 455, 456, 9, 4, 2, 2, 456, 83, 3, 2, 2, 2, 457, 458, 5, 86, 44, 2, 458, 85, 3, 2, 2, 2, 459, 460, 7, 78, 2, 2, 460, 87, 3, 2, 2, 2, 461, 464, 5, 86, 44, 2, 462, 464, 5, 90, 46, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 89, 3, 2, 2, 2, 465, 466, 9, 5, 2, 2, 466, 91, 3, 2, 2, 2, 467, 471, 7, 85, 2, 2, 468, 470, 5, 94, 48, 2, 469, 468, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 484, 7, 87, 2, 2, 475, 479, 7, 86, 2, 2, 476, 478, 5, 96, 49, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 7, 89, 2, 2, 483, 467, 3, 2, 2, 2, 483, 475, 3, 2, 2, 2, 484, 93, 3, 2, 2, 2, 485, 492, 7, 88, 2, 2, 486, 488, 7, 3, 2, 2, 487, 489, 5, 164, 83, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 492, 7, 44, 2, 2, 491, 485, 3, 2, 2, 2, 491, 486, 3, 2, 2, 2, 492, 95, 3, 2, 2, 2, 493, 500, 7, 90, 2, 2, 494, 496, 7, 3, 2, 2, 495, 497, 5, 164, 83, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 500, 7, 44, 2, 2, 499, 493, 3, 2, 2, 2, 499, 494, 3, 2, 2, 2, 500, 97, 3, 2, 2, 2, 501, 502, 9, 6, 2, 2, 502, 99, 3, 2, 2, 2, 503, 512, 7, 42, 2, 2, 504, 509, 5, 164, 83, 2, 505, 506, 7, 36, 2, 2, 506, 508, 5, 164, 83, 2, 507, 505, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 512, 504, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 515, 3, 2, 2, 2, 514, 516, 7, 36, 2, 2, 515, 514, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 7, 43, 2, 2, 518, 101, 3, 2, 2, 2, 519, 528, 7, 45, 2, 2, 520, 525, 5, 104, 53, 2, 521, 522, 7, 36, 2, 2, 522, 524, 5, 104, 53, 2, 523, 521, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 528, 520, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 532, 7, 36, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 46, 2, 2, 534, 103, 3, 2, 2, 2, 535, 536, 5, 88, 45, 2, 536, 537, 7, 39, 2, 2, 537, 538, 5, 164, 83, 2, 538, 105, 3, 2, 2, 2, 539, 540, 9, 7, 2, 2, 540, 107, 3, 2, 2, 2, 541, 542, 8, 55, 1, 2, 542, 562, 5, 76, 39, 2, 543, 544, 7, 24, 2, 2, 544, 545, 5, 108, 55, 2, 545, 547, 7, 40, 2, 2, 546, 548, 5, 110, 56, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 550, 7, 41, 2, 2, 550, 551, 8, 55, 1, 2, 551, 562, 3, 2, 2, 2, 552, 553, 7, 29, 2, 2, 553, 554, 5, 166, 84, 2, 554, 556, 7, 40, 2, 2, 555, 557, 5, 110, 56, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 41, 2, 2, 559, 560, 8, 55, 1, 2, 560, 562, 3, 2, 2, 2, 561, 541, 3, 2, 2, 2, 561, 543, 3, 2, 2, 2, 561, 552, 3, 2, 2, 2, 562, 584, 3, 2, 2, 2, 563, 564, 12, 8, 2, 2, 564, 565, 5, 112, 57, 2, 565, 566, 8, 55, 1, 2, 566, 583, 3, 2, 2, 2, 567, 568, 12, 7, 2, 2, 568, 569, 5, 114, 58, 2, 569, 570, 8, 55, 1, 2, 570, 583, 3, 2, 2, 2, 571, 572, 12, 6, 2, 2, 572, 573, 5, 116, 59, 2, 573, 574, 8, 55, 1, 2, 574, 583, 3, 2, 2, 2, 575, 576, 12, 5, 2, 2, 576, 578, 7, 40, 2, 2, 577, 579, 5, 110, 56, 2, 578, 577, 3, 2, 2, 2, 578, 579, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 7, 41, 2, 2, 581, 583, 8, 55, 1, 2, 582, 563, 3, 2, 2, 2, 582, 567, 3, 2, 2, 2, 582, 571, 3, 2, 2, 2, 582, 575, 3, 2, 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 109, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 587, 592, 5, 160, 81, 2, 588, 589, 7, 36, 2, 2, 589, 591, 5, 160, 81, 2, 590, 588, 3, 2, 2, 2, 591, 594, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 111, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 596, 7, 77, 2, 2, 596, 597, 5, 86, 44, 2, 597, 113, 3, 2, 2, 2, 598, 599, 7, 42, 2, 2, 599, 600, 5, 164, 83, 2, 600, 601, 7, 43, 2, 2, 601, 115, 3, 2, 2, 2, 602, 606, 7, 42, 2, 2, 603, 604, 5, 164, 83, 2, 604, 605, 8, 59, 1, 2, 605, 607, 3, 2, 2, 2, 606, 603, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 612, 7, 39, 2, 2, 609, 610, 5, 164, 83, 2, 610, 611, 8, 59, 1, 2, 611, 613, 3, 2, 2, 2, 612, 609, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 7, 43, 2, 2, 615, 117, 3, 2, 2, 2, 616, 620, 5, 108, 55, 2, 617, 620, 5, 120, 61, 2, 618, 620, 5, 122, 62, 2, 619, 616, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 619, 618, 3, 2, 2, 2, 620, 119, 3, 2, 2, 2, 621, 622, 5, 108, 55, 2, 622, 623, 5, 130, 66, 2, 623, 121, 3, 2, 2, 2, 624, 625, 7, 32, 2, 2, 625, 626, 5, 160, 81, 2, 626, 123, 3, 2, 2, 2, 627, 631, 5, 118, 60, 2, 628, 631, 5, 126, 64, 2, 629, 631, 5, 128, 65, 2, 630, 627, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 630, 629, 3, 2, 2, 2, 631, 125, 3, 2, 2, 2, 632, 633, 5, 130, 66, 2, 633, 634, 5, 118, 60, 2, 634, 127, 3, 2, 2, 2, 635, 636, 5, 132, 67, 2, 636, 637, 5, 118, 60, 2, 637, 129, 3, 2, 2, 2, 638, 639, 9, 8, 2, 2, 639, 131, 3, 2, 2, 2, 640, 641, 9, 9, 2, 2, 641, 133, 3, 2, 2, 2, 642, 648, 5, 124, 63, 2, 643, 644, 5, 124, 63, 2, 644, 645, 7, 9, 2, 2, 645, 646, 5, 166, 84, 2, 646, 648, 3, 2, 2, 2, 647, 642, 3, 2, 2, 2, 647, 643, 3, 2, 2, 2, 648, 135, 3, 2, 2, 2, 649, 650, 8, 69, 1, 2, 650, 651, 5, 134, 68, 2, 651, 657, 3, 2, 2, 2, 652, 653, 12, 3, 2, 2, 653, 654, 9, 10, 2, 2, 654, 656, 5, 134, 68, 2, 655, 652, 3, 2, 2, 2, 656, 659, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 137, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 661, 8, 70, 1, 2, 661, 662, 5, 136, 69, 2, 662, 668, 3, 2, 2, 2, 663, 664, 12, 3, 2, 2, 664, 665, 9, 11, 2, 2, 665, 667, 5, 136, 69, 2, 666, 663, 3, 2, 2, 2, 667, 670, 3, 2, 2, 2, 668, 666, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 139, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 671, 672, 8, 71, 1, 2, 672, 673, 5, 138, 70, 2, 673, 680, 3, 2, 2, 2, 674, 675, 12, 3, 2, 2, 675, 676, 5, 142, 72, 2, 676, 677, 5, 148, 75, 2, 677, 679, 3, 2, 2, 2, 678, 674, 3, 2, 2, 2, 679, 682, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 141, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 683, 684, 9, 12, 2, 2, 684, 143, 3, 2, 2, 2, 685, 686, 8, 73, 1, 2, 686, 687, 5, 140, 71, 2, 687, 693, 3, 2, 2, 2, 688, 689, 12, 3, 2, 2, 689, 690, 9, 13, 2, 2, 690, 692, 5, 140, 71, 2, 691, 688, 3, 2, 2, 2, 692, 695, 3, 2, 2, 2, 693, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 145, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 696, 697, 8, 74, 1, 2, 697, 698, 5, 144, 73, 2, 698, 704, 3, 2, 2, 2, 699, 700, 12, 3, 2, 2, 700, 701, 9, 14, 2, 2, 701, 703, 5, 144, 73, 2, 702, 699, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 147, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 708, 8, 75, 1, 2, 708, 709, 5, 146, 74, 2, 709, 715, 3, 2, 2, 2, 710, 711, 12, 3, 2, 2, 711, 712, 7, 70, 2, 2, 712, 714, 5, 146, 74, 2, 713, 710, 3, 2, 2, 2, 714, 717, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 149, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 719, 8, 76, 1, 2, 719, 720, 5, 148, 75, 2, 720, 726, 3, 2, 2, 2, 721, 722, 12, 3, 2, 2, 722, 723, 7, 72, 2, 2, 723, 725, 5, 148, 75, 2, 724, 721, 3, 2, 2, 2, 725, 728, 3, 2, 2, 2, 726, 724, 3, 2, 2, 2, 726, 727, 3, 2, 2, 2, 727, 151, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 729, 730, 8, 77, 1, 2, 730, 731, 5, 150, 76, 2, 731, 737, 3, 2, 2, 2, 732, 733, 12, 3, 2, 2, 733, 734, 7, 71, 2, 2, 734, 736, 5, 150, 76, 2, 735, 732, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 153, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 740, 741, 8, 78, 1, 2, 741, 742, 5, 152, 77, 2, 742, 748, 3, 2, 2, 2, 743, 744, 12, 3, 2, 2, 744, 745, 7, 55, 2, 2, 745, 747, 5, 152, 77, 2, 746, 743, 3, 2, 2, 2, 747, 750, 3, 2, 2, 2, 748, 746, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 155, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 751, 752, 8, 79, 1, 2, 752, 753, 5, 154, 78, 2, 753, 759, 3, 2, 2, 2, 754, 755, 12, 3, 2, 2, 755, 756, 7, 56, 2, 2, 756, 758, 5, 154, 78, 2, 757, 754, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 157, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 770, 5, 156, 79, 2, 763, 764, 5, 156, 79, 2, 764, 765, 7, 38, 2, 2, 765, 766, 5, 158, 80, 2, 766, 767, 7, 39, 2, 2, 767, 768, 5, 158, 80, 2, 768, 770, 3, 2, 2, 2, 769, 762, 3, 2, 2, 2, 769, 763, 3, 2, 2, 2, 770, 159, 3, 2, 2, 2, 771, 777, 5, 158, 80, 2, 772, 773, 5, 108, 55, 2, 773, 774, 5, 162, 82, 2, 774, 775, 5, 160, 81, 2, 775, 777, 3, 2, 2, 2, 776, 771, 3, 2, 2, 2, 776, 772, 3, 2, 2, 2, 777, 161, 3, 2, 2, 2, 778, 779, 9, 15, 2, 2, 779, 163, 3, 2, 2, 2, 780, 785, 5, 160, 81, 2, 781, 782, 7, 36, 2, 2, 782, 784, 5, 160, 81, 2, 783, 781, 3, 2, 2, 2, 784, 787, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 165, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 788, 792, 5, 168, 85, 2, 789, 792, 5, 170, 86, 2, 790, 792, 5, 172, 87, 2, 791, 788, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 791, 790, 3, 2, 2, 2, 792, 167, 3, 2, 2, 2, 793, 794, 5, 174, 88, 2, 794, 169, 3, 2, 2, 2, 795, 796, 5, 174, 88, 2, 796, 805, 7, 66, 2, 2, 797, 802, 5, 166, 84, 2, 798, 799, 7, 36, 2, 2, 799, 801, 5, 166, 84, 2, 800, 798, 3, 2, 2, 2, 801, 804, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 805, 797, 3, 2, 2, 2, 805, 806, 3, 2, 2, 2, 806, 807, 3, 2, 2, 2, 807, 808, 7, 68, 2, 2, 808, 171, 3, 2, 2, 2, 809, 810, 7, 32, 2, 2, 810, 811, 7, 40, 2, 2, 811, 812, 5, 174, 88, 2, 812, 813, 7, 41, 2, 2, 813, 173, 3, 2, 2, 2, 814, 815, 9, 16, 2, 2, 815, 175, 3, 2, 2, 2, 77, 177, 184, 191, 196, 204, 216, 228, 234, 241, 254, 261, 271, 283, 285, 293, 302, 308, 313, 324, 329, 340, 349, 359, 372, 377, 383, 387, 393, 399, 423, 437, 441, 449, 463, 471, 479, 483, 488, 491, 496, 499, 509, 512, 515, 525, 528, 531, 547, 556, 561, 578, 582, 584, 592, 606, 612, 619, 630, 647, 657, 668, 680, 693, 704, 715, 726, 737, 748, 759, 769, 776, 785, 791, 802, 805] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index dd6d7f0ae..3c875b1e7 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -2,15 +2,20 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; @@ -174,32 +179,33 @@ export class KipperParser extends KipperParserBase { public static readonly RULE_sliceNotation = 57; public static readonly RULE_postfixExpression = 58; public static readonly RULE_incrementOrDecrementPostfixExpression = 59; - public static readonly RULE_unaryExpression = 60; - public static readonly RULE_incrementOrDecrementUnaryExpression = 61; - public static readonly RULE_operatorModifiedUnaryExpression = 62; - public static readonly RULE_incrementOrDecrementOperator = 63; - public static readonly RULE_unaryOperator = 64; - public static readonly RULE_castOrConvertExpression = 65; - public static readonly RULE_multiplicativeExpression = 66; - public static readonly RULE_additiveExpression = 67; - public static readonly RULE_bitwiseShiftExpression = 68; - public static readonly RULE_bitwiseShiftOperators = 69; - public static readonly RULE_relationalExpression = 70; - public static readonly RULE_equalityExpression = 71; - public static readonly RULE_bitwiseAndExpression = 72; - public static readonly RULE_bitwiseXorExpression = 73; - public static readonly RULE_bitwiseOrExpression = 74; - public static readonly RULE_logicalAndExpression = 75; - public static readonly RULE_logicalOrExpression = 76; - public static readonly RULE_conditionalExpression = 77; - public static readonly RULE_assignmentExpression = 78; - public static readonly RULE_assignmentOperator = 79; - public static readonly RULE_expression = 80; - public static readonly RULE_typeSpecifierExpression = 81; - public static readonly RULE_identifierTypeSpecifierExpression = 82; - public static readonly RULE_genericTypeSpecifierExpression = 83; - public static readonly RULE_typeofTypeSpecifierExpression = 84; - public static readonly RULE_typeSpecifierIdentifier = 85; + public static readonly RULE_typeofExpression = 60; + public static readonly RULE_unaryExpression = 61; + public static readonly RULE_incrementOrDecrementUnaryExpression = 62; + public static readonly RULE_operatorModifiedUnaryExpression = 63; + public static readonly RULE_incrementOrDecrementOperator = 64; + public static readonly RULE_unaryOperator = 65; + public static readonly RULE_castOrConvertExpression = 66; + public static readonly RULE_multiplicativeExpression = 67; + public static readonly RULE_additiveExpression = 68; + public static readonly RULE_bitwiseShiftExpression = 69; + public static readonly RULE_bitwiseShiftOperators = 70; + public static readonly RULE_relationalExpression = 71; + public static readonly RULE_equalityExpression = 72; + public static readonly RULE_bitwiseAndExpression = 73; + public static readonly RULE_bitwiseXorExpression = 74; + public static readonly RULE_bitwiseOrExpression = 75; + public static readonly RULE_logicalAndExpression = 76; + public static readonly RULE_logicalOrExpression = 77; + public static readonly RULE_conditionalExpression = 78; + public static readonly RULE_assignmentExpression = 79; + public static readonly RULE_assignmentOperator = 80; + public static readonly RULE_expression = 81; + public static readonly RULE_typeSpecifierExpression = 82; + public static readonly RULE_identifierTypeSpecifierExpression = 83; + public static readonly RULE_genericTypeSpecifierExpression = 84; + public static readonly RULE_typeofTypeSpecifierExpression = 85; + public static readonly RULE_typeSpecifierIdentifier = 86; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "compilationUnit", @@ -262,6 +268,7 @@ export class KipperParser extends KipperParserBase { "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", + "typeofExpression", "unaryExpression", "incrementOrDecrementUnaryExpression", "operatorModifiedUnaryExpression", @@ -502,17 +509,17 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 173; + this.state = 175; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { case 1: { - this.state = 172; + this.state = 174; this.translationUnit(); } break; } - this.state = 175; + this.state = 177; this.match(KipperParser.EOF); } } catch (re) { @@ -536,7 +543,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 178; + this.state = 180; this._errHandler.sync(this); _alt = 1; do { @@ -544,7 +551,7 @@ export class KipperParser extends KipperParserBase { case 1: { { - this.state = 177; + this.state = 179; this.externalItem(); } } @@ -552,7 +559,7 @@ export class KipperParser extends KipperParserBase { default: throw new NoViableAltException(this); } - this.state = 180; + this.state = 182; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -578,7 +585,7 @@ export class KipperParser extends KipperParserBase { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 182; + this.state = 184; this.blockItemList(); } } catch (re) { @@ -602,7 +609,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 185; + this.state = 187; this._errHandler.sync(this); _alt = 1; do { @@ -610,7 +617,7 @@ export class KipperParser extends KipperParserBase { case 1: { { - this.state = 184; + this.state = 186; this.blockItem(); } } @@ -618,7 +625,7 @@ export class KipperParser extends KipperParserBase { default: throw new NoViableAltException(this); } - this.state = 187; + this.state = 189; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -643,26 +650,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 192; + this.state = 194; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { case 1: { - this.state = 189; + this.state = 191; this.statement(); } break; case 2: { - this.state = 190; + this.state = 192; this.declaration(); } break; case 3: { - this.state = 191; + this.state = 193; this.match(KipperParser.SemiColon); } break; @@ -686,37 +693,37 @@ export class KipperParser extends KipperParserBase { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 200; + this.state = 202; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: this.enterOuterAlt(_localctx, 1); { - this.state = 194; + this.state = 196; this.variableDeclaration(); - this.state = 195; + this.state = 197; this.match(KipperParser.SemiColon); } break; case KipperParser.DefFunc: this.enterOuterAlt(_localctx, 2); { - this.state = 197; + this.state = 199; this.functionDeclaration(); } break; case KipperParser.Interface: this.enterOuterAlt(_localctx, 3); { - this.state = 198; + this.state = 200; this.interfaceDeclaration(); } break; case KipperParser.Class: this.enterOuterAlt(_localctx, 4); { - this.state = 199; + this.state = 201; this.classDeclaration(); } break; @@ -743,9 +750,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 202; + this.state = 204; this.storageTypeSpecifier(); - this.state = 203; + this.state = 205; this.initDeclarator(); } } catch (re) { @@ -769,7 +776,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 205; + this.state = 207; _la = this._input.LA(1); if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { this._errHandler.recoverInline(this); @@ -803,20 +810,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 207; + this.state = 209; this.declarator(); - this.state = 208; + this.state = 210; this.match(KipperParser.Colon); - this.state = 209; + this.state = 211; this.typeSpecifierExpression(); - this.state = 212; + this.state = 214; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Assign) { { - this.state = 210; + this.state = 212; this.match(KipperParser.Assign); - this.state = 211; + this.state = 213; this.initializer(); } } @@ -841,7 +848,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 214; + this.state = 216; this.assignmentExpression(); } } catch (re) { @@ -864,7 +871,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 216; + this.state = 218; this.directDeclarator(); } } catch (re) { @@ -887,7 +894,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 218; + this.state = 220; this.match(KipperParser.Identifier); } } catch (re) { @@ -911,34 +918,34 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 220; + this.state = 222; this.match(KipperParser.DefFunc); - this.state = 221; + this.state = 223; this.declarator(); - this.state = 222; - this.match(KipperParser.LeftParen); this.state = 224; + this.match(KipperParser.LeftParen); + this.state = 226; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 223; + this.state = 225; this.parameterList(); } } - this.state = 226; + this.state = 228; this.match(KipperParser.RightParen); - this.state = 227; + this.state = 229; this.match(KipperParser.RetIndicator); - this.state = 228; - this.typeSpecifierExpression(); this.state = 230; + this.typeSpecifierExpression(); + this.state = 232; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { case 1: { - this.state = 229; + this.state = 231; this.compoundStatement(); } break; @@ -965,21 +972,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 232; + this.state = 234; this.parameterDeclaration(); - this.state = 237; + this.state = 239; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 233; + this.state = 235; this.match(KipperParser.Comma); - this.state = 234; + this.state = 236; this.parameterDeclaration(); } } - this.state = 239; + this.state = 241; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1004,11 +1011,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 240; + this.state = 242; this.declarator(); - this.state = 241; + this.state = 243; this.match(KipperParser.Colon); - this.state = 242; + this.state = 244; this.typeSpecifierExpression(); } } catch (re) { @@ -1032,27 +1039,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 244; + this.state = 246; this.match(KipperParser.Interface); - this.state = 245; + this.state = 247; this.declarator(); - this.state = 246; + this.state = 248; this.match(KipperParser.LeftBrace); - this.state = 250; + this.state = 252; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Identifier) { { { - this.state = 247; + this.state = 249; this.interfaceMemberDeclaration(); } } - this.state = 252; + this.state = 254; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 253; + this.state = 255; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1073,13 +1080,13 @@ export class KipperParser extends KipperParserBase { let _localctx: InterfaceMemberDeclarationContext = new InterfaceMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 32, KipperParser.RULE_interfaceMemberDeclaration); try { - this.state = 257; + this.state = 259; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 10, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 255; + this.state = 257; this.interfacePropertyDeclaration(); } break; @@ -1087,7 +1094,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 256; + this.state = 258; this.interfaceMethodDeclaration(); } break; @@ -1112,13 +1119,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 259; + this.state = 261; this.declarator(); - this.state = 260; + this.state = 262; this.match(KipperParser.Colon); - this.state = 261; + this.state = 263; this.typeSpecifierExpression(); - this.state = 262; + this.state = 264; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1142,27 +1149,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 264; + this.state = 266; this.declarator(); - this.state = 265; - this.match(KipperParser.LeftParen); this.state = 267; + this.match(KipperParser.LeftParen); + this.state = 269; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 266; + this.state = 268; this.parameterList(); } } - this.state = 269; + this.state = 271; this.match(KipperParser.RightParen); - this.state = 270; + this.state = 272; this.match(KipperParser.Colon); - this.state = 271; + this.state = 273; this.typeSpecifierExpression(); - this.state = 272; + this.state = 274; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1186,30 +1193,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 274; + this.state = 276; this.match(KipperParser.Class); - this.state = 275; + this.state = 277; this.declarator(); - this.state = 276; + this.state = 278; this.match(KipperParser.LeftBrace); - this.state = 281; + this.state = 283; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { { - this.state = 279; + this.state = 281; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Constructor: case KipperParser.Identifier: { - this.state = 277; + this.state = 279; this.classMemberDeclaration(); } break; case KipperParser.SemiColon: { - this.state = 278; + this.state = 280; this.match(KipperParser.SemiColon); } break; @@ -1217,11 +1224,11 @@ export class KipperParser extends KipperParserBase { throw new NoViableAltException(this); } } - this.state = 283; + this.state = 285; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 284; + this.state = 286; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1242,13 +1249,13 @@ export class KipperParser extends KipperParserBase { let _localctx: ClassMemberDeclarationContext = new ClassMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 40, KipperParser.RULE_classMemberDeclaration); try { - this.state = 289; + this.state = 291; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 14, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 286; + this.state = 288; this.classPropertyDeclaration(); } break; @@ -1256,7 +1263,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 287; + this.state = 289; this.classMethodDeclaration(); } break; @@ -1264,7 +1271,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 288; + this.state = 290; this.classConstructorDeclaration(); } break; @@ -1289,11 +1296,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 291; + this.state = 293; this.declarator(); - this.state = 292; + this.state = 294; this.match(KipperParser.Colon); - this.state = 293; + this.state = 295; this.typeSpecifierExpression(); } } catch (re) { @@ -1317,32 +1324,32 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 295; + this.state = 297; this.declarator(); - this.state = 296; - this.match(KipperParser.LeftParen); this.state = 298; + this.match(KipperParser.LeftParen); + this.state = 300; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 297; + this.state = 299; this.parameterList(); } } - this.state = 300; + this.state = 302; this.match(KipperParser.RightParen); - this.state = 301; + this.state = 303; this.match(KipperParser.Colon); - this.state = 302; - this.typeSpecifierExpression(); this.state = 304; + this.typeSpecifierExpression(); + this.state = 306; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 16, this._ctx)) { case 1: { - this.state = 303; + this.state = 305; this.compoundStatement(); } break; @@ -1369,23 +1376,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 306; + this.state = 308; this.match(KipperParser.Constructor); - this.state = 307; - this.match(KipperParser.LeftParen); this.state = 309; + this.match(KipperParser.LeftParen); + this.state = 311; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 308; + this.state = 310; this.parameterList(); } } - this.state = 311; + this.state = 313; this.match(KipperParser.RightParen); - this.state = 312; + this.state = 314; this.compoundStatement(); } } catch (re) { @@ -1406,13 +1413,13 @@ export class KipperParser extends KipperParserBase { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 48, KipperParser.RULE_statement); try { - this.state = 320; + this.state = 322; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 18, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 314; + this.state = 316; this.expressionStatement(); } break; @@ -1420,7 +1427,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 315; + this.state = 317; this.selectionStatement(); } break; @@ -1428,7 +1435,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 316; + this.state = 318; this.iterationStatement(); } break; @@ -1436,7 +1443,7 @@ export class KipperParser extends KipperParserBase { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 317; + this.state = 319; this.jumpStatement(); } break; @@ -1444,7 +1451,7 @@ export class KipperParser extends KipperParserBase { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 318; + this.state = 320; this.returnStatement(); } break; @@ -1452,7 +1459,7 @@ export class KipperParser extends KipperParserBase { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 319; + this.state = 321; this.compoundStatement(); } break; @@ -1477,23 +1484,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 322; + this.state = 324; if (!this.notInsideExpressionStatement()) { throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); } - this.state = 323; - this.match(KipperParser.LeftBrace); this.state = 325; + this.match(KipperParser.LeftBrace); + this.state = 327; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { case 1: { - this.state = 324; + this.state = 326; this.blockItemList(); } break; } - this.state = 327; + this.state = 329; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1517,9 +1524,9 @@ export class KipperParser extends KipperParserBase { this.enterOuterAlt(_localctx, 1); { this.enterExpressionStatement(); - this.state = 330; + this.state = 332; this.expression(); - this.state = 331; + this.state = 333; this.match(KipperParser.SemiColon); this.exitExpressionStatement(); } @@ -1541,20 +1548,20 @@ export class KipperParser extends KipperParserBase { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 54, KipperParser.RULE_selectionStatement); try { - this.state = 336; + this.state = 338; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.If: this.enterOuterAlt(_localctx, 1); { - this.state = 334; + this.state = 336; this.ifStatement(); } break; case KipperParser.Switch: this.enterOuterAlt(_localctx, 2); { - this.state = 335; + this.state = 337; this.switchStatement(); } break; @@ -1581,24 +1588,24 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 338; + this.state = 340; this.match(KipperParser.If); - this.state = 339; + this.state = 341; this.match(KipperParser.LeftParen); - this.state = 340; + this.state = 342; this.expression(); - this.state = 341; + this.state = 343; this.match(KipperParser.RightParen); - this.state = 342; + this.state = 344; this.statement(); - this.state = 345; + this.state = 347; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { case 1: { - this.state = 343; + this.state = 345; this.match(KipperParser.Else); - this.state = 344; + this.state = 346; this.statement(); } break; @@ -1625,31 +1632,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 347; + this.state = 349; this.match(KipperParser.Switch); - this.state = 348; + this.state = 350; this.match(KipperParser.LeftParen); - this.state = 349; + this.state = 351; this.expression(); - this.state = 350; + this.state = 352; this.match(KipperParser.RightParen); - this.state = 351; + this.state = 353; this.match(KipperParser.LeftBrace); - this.state = 355; + this.state = 357; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Case || _la === KipperParser.Default) { { { - this.state = 352; + this.state = 354; this.switchLabeledStatement(); } } - this.state = 357; + this.state = 359; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 358; + this.state = 360; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1670,30 +1677,30 @@ export class KipperParser extends KipperParserBase { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 60, KipperParser.RULE_switchLabeledStatement); try { - this.state = 368; + this.state = 370; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Case: this.enterOuterAlt(_localctx, 1); { - this.state = 360; + this.state = 362; this.match(KipperParser.Case); - this.state = 361; + this.state = 363; this.expression(); - this.state = 362; + this.state = 364; this.match(KipperParser.Colon); - this.state = 363; + this.state = 365; this.statement(); } break; case KipperParser.Default: this.enterOuterAlt(_localctx, 2); { - this.state = 365; + this.state = 367; this.match(KipperParser.Default); - this.state = 366; + this.state = 368; this.match(KipperParser.Colon); - this.state = 367; + this.state = 369; this.statement(); } break; @@ -1718,27 +1725,27 @@ export class KipperParser extends KipperParserBase { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 62, KipperParser.RULE_iterationStatement); try { - this.state = 373; + this.state = 375; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.For: this.enterOuterAlt(_localctx, 1); { - this.state = 370; + this.state = 372; this.forLoopIterationStatement(); } break; case KipperParser.While: this.enterOuterAlt(_localctx, 2); { - this.state = 371; + this.state = 373; this.whileLoopIterationStatement(); } break; case KipperParser.Do: this.enterOuterAlt(_localctx, 3); { - this.state = 372; + this.state = 374; this.doWhileLoopIterationStatement(); } break; @@ -1766,11 +1773,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 375; + this.state = 377; this.match(KipperParser.For); - this.state = 376; + this.state = 378; this.match(KipperParser.LeftParen); - this.state = 383; + this.state = 385; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1782,6 +1789,7 @@ export class KipperParser extends KipperParserBase { (1 << KipperParser.New) | (1 << KipperParser.True) | (1 << KipperParser.False) | + (1 << KipperParser.Typeof) | (1 << KipperParser.Void))) !== 0) || (((_la - 32) & ~0x1f) === 0 && @@ -1810,13 +1818,13 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 379; + this.state = 381; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: { - this.state = 377; + this.state = 379; this.variableDeclaration(); } break; @@ -1824,6 +1832,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.New: case KipperParser.True: case KipperParser.False: + case KipperParser.Typeof: case KipperParser.Void: case KipperParser.Null: case KipperParser.Undefined: @@ -1844,7 +1853,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringSingleQuoteStart: case KipperParser.FStringDoubleQuoteStart: { - this.state = 378; + this.state = 380; this.expression(); } break; @@ -1855,9 +1864,9 @@ export class KipperParser extends KipperParserBase { } } - this.state = 385; + this.state = 387; this.match(KipperParser.SemiColon); - this.state = 389; + this.state = 391; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1867,6 +1876,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -1892,15 +1902,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 386; + this.state = 388; this.expression(); _localctx._forCondition = true; } } - this.state = 391; + this.state = 393; this.match(KipperParser.SemiColon); - this.state = 395; + this.state = 397; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1910,6 +1920,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -1935,15 +1946,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 392; + this.state = 394; this.expression(); _localctx._forIterationExp = true; } } - this.state = 397; + this.state = 399; this.match(KipperParser.RightParen); - this.state = 398; + this.state = 400; this.statement(); } } catch (re) { @@ -1966,15 +1977,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 400; + this.state = 402; this.match(KipperParser.While); - this.state = 401; + this.state = 403; this.match(KipperParser.LeftParen); - this.state = 402; + this.state = 404; this.expression(); - this.state = 403; + this.state = 405; this.match(KipperParser.RightParen); - this.state = 404; + this.state = 406; this.statement(); } } catch (re) { @@ -2000,19 +2011,19 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 406; + this.state = 408; this.match(KipperParser.Do); - this.state = 407; + this.state = 409; this.statement(); - this.state = 408; + this.state = 410; this.match(KipperParser.While); - this.state = 409; + this.state = 411; this.match(KipperParser.LeftParen); - this.state = 410; + this.state = 412; this.expression(); - this.state = 411; + this.state = 413; this.match(KipperParser.RightParen); - this.state = 412; + this.state = 414; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2036,7 +2047,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 414; + this.state = 416; _la = this._input.LA(1); if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { this._errHandler.recoverInline(this); @@ -2048,7 +2059,7 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 415; + this.state = 417; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2072,9 +2083,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 417; - this.match(KipperParser.Return); this.state = 419; + this.match(KipperParser.Return); + this.state = 421; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2084,6 +2095,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -2109,12 +2121,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 418; + this.state = 420; this.expression(); } } - this.state = 421; + this.state = 423; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2135,13 +2147,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 74, KipperParser.RULE_primaryExpression); try { - this.state = 433; + this.state = 435; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 30, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 423; + this.state = 425; this.tangledPrimaryExpression(); } break; @@ -2149,7 +2161,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 424; + this.state = 426; this.lambdaPrimaryExpression(); } break; @@ -2157,7 +2169,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 425; + this.state = 427; this.arrayPrimaryExpression(); } break; @@ -2165,7 +2177,7 @@ export class KipperParser extends KipperParserBase { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 426; + this.state = 428; this.objectPrimaryExpression(); } break; @@ -2173,7 +2185,7 @@ export class KipperParser extends KipperParserBase { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 427; + this.state = 429; this.boolPrimaryExpression(); } break; @@ -2181,7 +2193,7 @@ export class KipperParser extends KipperParserBase { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 428; + this.state = 430; this.identifierPrimaryExpression(); } break; @@ -2189,7 +2201,7 @@ export class KipperParser extends KipperParserBase { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 429; + this.state = 431; this.stringPrimaryExpression(); } break; @@ -2197,7 +2209,7 @@ export class KipperParser extends KipperParserBase { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 430; + this.state = 432; this.fStringPrimaryExpression(); } break; @@ -2205,7 +2217,7 @@ export class KipperParser extends KipperParserBase { case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 431; + this.state = 433; this.numberPrimaryExpression(); } break; @@ -2213,7 +2225,7 @@ export class KipperParser extends KipperParserBase { case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 432; + this.state = 434; this.voidOrNullOrUndefinedPrimaryExpression(); } break; @@ -2239,39 +2251,39 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 435; - this.match(KipperParser.LeftParen); this.state = 437; + this.match(KipperParser.LeftParen); + this.state = 439; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 436; + this.state = 438; this.parameterList(); } } - this.state = 439; + this.state = 441; this.match(KipperParser.RightParen); - this.state = 440; + this.state = 442; this.match(KipperParser.Colon); - this.state = 441; + this.state = 443; this.typeSpecifierExpression(); - this.state = 442; + this.state = 444; this.match(KipperParser.RetIndicator); - this.state = 445; + this.state = 447; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { case 1: { - this.state = 443; + this.state = 445; this.expression(); } break; case 2: { - this.state = 444; + this.state = 446; this.compoundStatement(); } break; @@ -2297,11 +2309,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 447; + this.state = 449; this.match(KipperParser.LeftParen); - this.state = 448; + this.state = 450; this.expression(); - this.state = 449; + this.state = 451; this.match(KipperParser.RightParen); } } catch (re) { @@ -2325,7 +2337,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 451; + this.state = 453; _la = this._input.LA(1); if (!(_la === KipperParser.True || _la === KipperParser.False)) { this._errHandler.recoverInline(this); @@ -2358,7 +2370,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 453; + this.state = 455; this.identifier(); } } catch (re) { @@ -2381,7 +2393,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 455; + this.state = 457; this.match(KipperParser.Identifier); } } catch (re) { @@ -2405,13 +2417,13 @@ export class KipperParser extends KipperParserBase { ); this.enterRule(_localctx, 86, KipperParser.RULE_identifierOrStringPrimaryExpression); try { - this.state = 459; + this.state = 461; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Identifier: this.enterOuterAlt(_localctx, 1); { - this.state = 457; + this.state = 459; this.identifier(); } break; @@ -2419,7 +2431,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.DoubleQuoteStringLiteral: this.enterOuterAlt(_localctx, 2); { - this.state = 458; + this.state = 460; this.stringPrimaryExpression(); } break; @@ -2447,7 +2459,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 461; + this.state = 463; _la = this._input.LA(1); if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { this._errHandler.recoverInline(this); @@ -2479,52 +2491,52 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 90, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 479; + this.state = 481; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 463; + this.state = 465; this.match(KipperParser.FStringSingleQuoteStart); - this.state = 467; + this.state = 469; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { { - this.state = 464; + this.state = 466; this.fStringSingleQuoteAtom(); } } - this.state = 469; + this.state = 471; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 470; + this.state = 472; this.match(KipperParser.FStringSingleQuoteEnd); } break; case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 2); { - this.state = 471; + this.state = 473; this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 475; + this.state = 477; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { { - this.state = 472; + this.state = 474; this.fStringDoubleQuoteAtom(); } } - this.state = 477; + this.state = 479; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 478; + this.state = 480; this.match(KipperParser.FStringDoubleQuoteEnd); } break; @@ -2550,22 +2562,22 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 92, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 487; + this.state = 489; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 481; + this.state = 483; this.match(KipperParser.FStringSingleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 482; - this.match(KipperParser.FStringExpStart); this.state = 484; + this.match(KipperParser.FStringExpStart); + this.state = 486; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2575,6 +2587,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -2600,12 +2613,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 483; + this.state = 485; this.expression(); } } - this.state = 486; + this.state = 488; this.match(KipperParser.FStringExpEnd); } break; @@ -2631,22 +2644,22 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 94, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 495; + this.state = 497; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringDoubleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 489; + this.state = 491; this.match(KipperParser.FStringDoubleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 490; - this.match(KipperParser.FStringExpStart); this.state = 492; + this.match(KipperParser.FStringExpStart); + this.state = 494; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2656,6 +2669,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -2681,12 +2695,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 491; + this.state = 493; this.expression(); } } - this.state = 494; + this.state = 496; this.match(KipperParser.FStringExpEnd); } break; @@ -2714,7 +2728,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 497; + this.state = 499; _la = this._input.LA(1); if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { this._errHandler.recoverInline(this); @@ -2749,9 +2763,9 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 499; + this.state = 501; this.match(KipperParser.LeftBracket); - this.state = 508; + this.state = 510; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2761,6 +2775,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -2786,40 +2801,40 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 500; + this.state = 502; this.expression(); - this.state = 505; + this.state = 507; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 501; + this.state = 503; this.match(KipperParser.Comma); - this.state = 502; + this.state = 504; this.expression(); } } } - this.state = 507; + this.state = 509; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } } } - this.state = 511; + this.state = 513; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 510; + this.state = 512; this.match(KipperParser.Comma); } } - this.state = 513; + this.state = 515; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2844,9 +2859,9 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 515; + this.state = 517; this.match(KipperParser.LeftBrace); - this.state = 524; + this.state = 526; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2858,40 +2873,40 @@ export class KipperParser extends KipperParserBase { 0 ) { { - this.state = 516; + this.state = 518; this.objectProperty(); - this.state = 521; + this.state = 523; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 517; + this.state = 519; this.match(KipperParser.Comma); - this.state = 518; + this.state = 520; this.objectProperty(); } } } - this.state = 523; + this.state = 525; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); } } } - this.state = 527; + this.state = 529; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 526; + this.state = 528; this.match(KipperParser.Comma); } } - this.state = 529; + this.state = 531; this.match(KipperParser.RightBrace); } } catch (re) { @@ -2914,11 +2929,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 531; + this.state = 533; this.identifierOrStringPrimaryExpression(); - this.state = 532; + this.state = 534; this.match(KipperParser.Colon); - this.state = 533; + this.state = 535; this.expression(); } } catch (re) { @@ -2945,7 +2960,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 535; + this.state = 537; _la = this._input.LA(1); if ( !( @@ -3000,7 +3015,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 557; + this.state = 559; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -3023,7 +3038,7 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 538; + this.state = 540; this.primaryExpression(); } break; @@ -3032,13 +3047,13 @@ export class KipperParser extends KipperParserBase { _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 539; + this.state = 541; this.match(KipperParser.CallFunc); - this.state = 540; + this.state = 542; this.computedPrimaryExpression(0); - this.state = 541; - this.match(KipperParser.LeftParen); this.state = 543; + this.match(KipperParser.LeftParen); + this.state = 545; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3048,6 +3063,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -3073,12 +3089,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 542; + this.state = 544; this.argumentExpressionList(); } } - this.state = 545; + this.state = 547; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3088,13 +3104,13 @@ export class KipperParser extends KipperParserBase { _localctx = new NewInstantiationExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 548; + this.state = 550; this.match(KipperParser.New); - this.state = 549; + this.state = 551; this.typeSpecifierExpression(); - this.state = 550; - this.match(KipperParser.LeftParen); this.state = 552; + this.match(KipperParser.LeftParen); + this.state = 554; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3104,6 +3120,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -3129,12 +3146,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 551; + this.state = 553; this.argumentExpressionList(); } } - this.state = 554; + this.state = 556; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; } @@ -3143,7 +3160,7 @@ export class KipperParser extends KipperParserBase { throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 580; + this.state = 582; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3153,7 +3170,7 @@ export class KipperParser extends KipperParserBase { } _prevctx = _localctx; { - this.state = 578; + this.state = 580; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { case 1: @@ -3162,11 +3179,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 559; + this.state = 561; if (!this.precpred(this._ctx, 6)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 560; + this.state = 562; this.dotNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3178,11 +3195,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 563; + this.state = 565; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 564; + this.state = 566; this.bracketNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3194,11 +3211,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 567; + this.state = 569; if (!this.precpred(this._ctx, 4)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 568; + this.state = 570; this.sliceNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3210,13 +3227,13 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 571; + this.state = 573; if (!this.precpred(this._ctx, 3)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 572; - this.match(KipperParser.LeftParen); this.state = 574; + this.match(KipperParser.LeftParen); + this.state = 576; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3226,6 +3243,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -3251,12 +3269,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 573; + this.state = 575; this.argumentExpressionList(); } } - this.state = 576; + this.state = 578; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3264,7 +3282,7 @@ export class KipperParser extends KipperParserBase { } } } - this.state = 582; + this.state = 584; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); } @@ -3290,21 +3308,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 583; + this.state = 585; this.assignmentExpression(); - this.state = 588; + this.state = 590; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 584; + this.state = 586; this.match(KipperParser.Comma); - this.state = 585; + this.state = 587; this.assignmentExpression(); } } - this.state = 590; + this.state = 592; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3329,9 +3347,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 591; + this.state = 593; this.match(KipperParser.Dot); - this.state = 592; + this.state = 594; this.identifier(); } } catch (re) { @@ -3354,11 +3372,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 594; + this.state = 596; this.match(KipperParser.LeftBracket); - this.state = 595; + this.state = 597; this.expression(); - this.state = 596; + this.state = 598; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3382,9 +3400,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 598; + this.state = 600; this.match(KipperParser.LeftBracket); - this.state = 602; + this.state = 604; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3394,6 +3412,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -3419,15 +3438,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 599; + this.state = 601; this.expression(); _localctx.sliceStart = true; } } - this.state = 604; + this.state = 606; this.match(KipperParser.Colon); - this.state = 608; + this.state = 610; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3437,6 +3456,7 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | @@ -3462,13 +3482,13 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 605; + this.state = 607; this.expression(); _localctx.sliceEnd = true; } } - this.state = 610; + this.state = 612; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3489,13 +3509,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 116, KipperParser.RULE_postfixExpression); try { - this.state = 614; + this.state = 617; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 612; + this.state = 614; this.computedPrimaryExpression(0); } break; @@ -3503,10 +3523,18 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 613; + this.state = 615; this.incrementOrDecrementPostfixExpression(); } break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 616; + this.typeofExpression(); + } + break; } } catch (re) { if (re instanceof RecognitionException) { @@ -3531,9 +3559,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 616; + this.state = 619; this.computedPrimaryExpression(0); - this.state = 617; + this.state = 620; this.incrementOrDecrementOperator(); } } catch (re) { @@ -3550,17 +3578,43 @@ export class KipperParser extends KipperParserBase { return _localctx; } // @RuleVersion(0) + public typeofExpression(): TypeofExpressionContext { + let _localctx: TypeofExpressionContext = new TypeofExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 120, KipperParser.RULE_typeofExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 622; + this.match(KipperParser.Typeof); + this.state = 623; + this.assignmentExpression(); + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) public unaryExpression(): UnaryExpressionContext { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 120, KipperParser.RULE_unaryExpression); + this.enterRule(_localctx, 122, KipperParser.RULE_unaryExpression); try { - this.state = 622; + this.state = 628; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: case KipperParser.New: case KipperParser.True: case KipperParser.False: + case KipperParser.Typeof: case KipperParser.Void: case KipperParser.Null: case KipperParser.Undefined: @@ -3576,7 +3630,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 619; + this.state = 625; this.postfixExpression(); } break; @@ -3584,7 +3638,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 620; + this.state = 626; this.incrementOrDecrementUnaryExpression(); } break; @@ -3594,7 +3648,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.BitwiseNot: this.enterOuterAlt(_localctx, 3); { - this.state = 621; + this.state = 627; this.operatorModifiedUnaryExpression(); } break; @@ -3620,13 +3674,13 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 122, KipperParser.RULE_incrementOrDecrementUnaryExpression); + this.enterRule(_localctx, 124, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 624; + this.state = 630; this.incrementOrDecrementOperator(); - this.state = 625; + this.state = 631; this.postfixExpression(); } } catch (re) { @@ -3648,13 +3702,13 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 124, KipperParser.RULE_operatorModifiedUnaryExpression); + this.enterRule(_localctx, 126, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 627; + this.state = 633; this.unaryOperator(); - this.state = 628; + this.state = 634; this.postfixExpression(); } } catch (re) { @@ -3673,12 +3727,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { let _localctx: IncrementOrDecrementOperatorContext = new IncrementOrDecrementOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 126, KipperParser.RULE_incrementOrDecrementOperator); + this.enterRule(_localctx, 128, KipperParser.RULE_incrementOrDecrementOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 630; + this.state = 636; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -3707,12 +3761,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let _localctx: UnaryOperatorContext = new UnaryOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 128, KipperParser.RULE_unaryOperator); + this.enterRule(_localctx, 130, KipperParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 632; + this.state = 638; _la = this._input.LA(1); if ( !( @@ -3751,16 +3805,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public castOrConvertExpression(): CastOrConvertExpressionContext { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 130, KipperParser.RULE_castOrConvertExpression); + this.enterRule(_localctx, 132, KipperParser.RULE_castOrConvertExpression); try { - this.state = 639; + this.state = 645; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 634; + this.state = 640; this.unaryExpression(); } break; @@ -3769,11 +3823,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 635; + this.state = 641; this.unaryExpression(); - this.state = 636; + this.state = 642; this.match(KipperParser.As); - this.state = 637; + this.state = 643; this.typeSpecifierExpression(); } break; @@ -3804,8 +3858,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: MultiplicativeExpressionContext = new MultiplicativeExpressionContext(this._ctx, _parentState); let _prevctx: MultiplicativeExpressionContext = _localctx; - let _startState: number = 132; - this.enterRecursionRule(_localctx, 132, KipperParser.RULE_multiplicativeExpression, _p); + let _startState: number = 134; + this.enterRecursionRule(_localctx, 134, KipperParser.RULE_multiplicativeExpression, _p); let _la: number; try { let _alt: number; @@ -3816,11 +3870,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 642; + this.state = 648; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 649; + this.state = 655; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3835,11 +3889,11 @@ export class KipperParser extends KipperParserBase { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 644; + this.state = 650; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 645; + this.state = 651; _la = this._input.LA(1); if ( !( @@ -3861,12 +3915,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 646; + this.state = 652; this.castOrConvertExpression(); } } } - this.state = 651; + this.state = 657; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); } @@ -3897,8 +3951,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: AdditiveExpressionContext = new AdditiveExpressionContext(this._ctx, _parentState); let _prevctx: AdditiveExpressionContext = _localctx; - let _startState: number = 134; - this.enterRecursionRule(_localctx, 134, KipperParser.RULE_additiveExpression, _p); + let _startState: number = 136; + this.enterRecursionRule(_localctx, 136, KipperParser.RULE_additiveExpression, _p); let _la: number; try { let _alt: number; @@ -3909,11 +3963,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 653; + this.state = 659; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 660; + this.state = 666; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3928,11 +3982,11 @@ export class KipperParser extends KipperParserBase { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 655; + this.state = 661; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 656; + this.state = 662; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -3944,12 +3998,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 657; + this.state = 663; this.multiplicativeExpression(0); } } } - this.state = 662; + this.state = 668; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); } @@ -3980,8 +4034,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseShiftExpressionContext = new BitwiseShiftExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseShiftExpressionContext = _localctx; - let _startState: number = 136; - this.enterRecursionRule(_localctx, 136, KipperParser.RULE_bitwiseShiftExpression, _p); + let _startState: number = 138; + this.enterRecursionRule(_localctx, 138, KipperParser.RULE_bitwiseShiftExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -3991,11 +4045,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 664; + this.state = 670; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 672; + this.state = 678; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4010,18 +4064,18 @@ export class KipperParser extends KipperParserBase { new BitwiseShiftExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 666; + this.state = 672; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 667; + this.state = 673; this.bitwiseShiftOperators(); - this.state = 668; + this.state = 674; this.bitwiseAndExpression(0); } } } - this.state = 674; + this.state = 680; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); } @@ -4042,12 +4096,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public bitwiseShiftOperators(): BitwiseShiftOperatorsContext { let _localctx: BitwiseShiftOperatorsContext = new BitwiseShiftOperatorsContext(this._ctx, this.state); - this.enterRule(_localctx, 138, KipperParser.RULE_bitwiseShiftOperators); + this.enterRule(_localctx, 140, KipperParser.RULE_bitwiseShiftOperators); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 675; + this.state = 681; _la = this._input.LA(1); if ( !( @@ -4095,8 +4149,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); let _prevctx: RelationalExpressionContext = _localctx; - let _startState: number = 140; - this.enterRecursionRule(_localctx, 140, KipperParser.RULE_relationalExpression, _p); + let _startState: number = 142; + this.enterRecursionRule(_localctx, 142, KipperParser.RULE_relationalExpression, _p); let _la: number; try { let _alt: number; @@ -4107,11 +4161,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 678; + this.state = 684; this.bitwiseShiftExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 685; + this.state = 691; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4126,11 +4180,11 @@ export class KipperParser extends KipperParserBase { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 680; + this.state = 686; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 681; + this.state = 687; _la = this._input.LA(1); if ( !( @@ -4152,12 +4206,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 682; + this.state = 688; this.bitwiseShiftExpression(0); } } } - this.state = 687; + this.state = 693; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); } @@ -4188,8 +4242,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 142; - this.enterRecursionRule(_localctx, 142, KipperParser.RULE_equalityExpression, _p); + let _startState: number = 144; + this.enterRecursionRule(_localctx, 144, KipperParser.RULE_equalityExpression, _p); let _la: number; try { let _alt: number; @@ -4200,11 +4254,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 689; + this.state = 695; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 696; + this.state = 702; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4219,11 +4273,11 @@ export class KipperParser extends KipperParserBase { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 691; + this.state = 697; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 692; + this.state = 698; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -4235,12 +4289,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 693; + this.state = 699; this.relationalExpression(0); } } } - this.state = 698; + this.state = 704; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); } @@ -4271,8 +4325,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseAndExpressionContext = new BitwiseAndExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseAndExpressionContext = _localctx; - let _startState: number = 144; - this.enterRecursionRule(_localctx, 144, KipperParser.RULE_bitwiseAndExpression, _p); + let _startState: number = 146; + this.enterRecursionRule(_localctx, 146, KipperParser.RULE_bitwiseAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4282,11 +4336,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 700; + this.state = 706; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 707; + this.state = 713; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4301,18 +4355,18 @@ export class KipperParser extends KipperParserBase { new BitwiseAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 702; + this.state = 708; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 703; + this.state = 709; this.match(KipperParser.BitwiseAnd); - this.state = 704; + this.state = 710; this.equalityExpression(0); } } } - this.state = 709; + this.state = 715; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); } @@ -4343,8 +4397,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseXorExpressionContext = new BitwiseXorExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseXorExpressionContext = _localctx; - let _startState: number = 146; - this.enterRecursionRule(_localctx, 146, KipperParser.RULE_bitwiseXorExpression, _p); + let _startState: number = 148; + this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseXorExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4354,11 +4408,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 711; + this.state = 717; this.bitwiseAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 718; + this.state = 724; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4373,18 +4427,18 @@ export class KipperParser extends KipperParserBase { new BitwiseXorExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 713; + this.state = 719; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 714; + this.state = 720; this.match(KipperParser.BitwiseXor); - this.state = 715; + this.state = 721; this.bitwiseAndExpression(0); } } } - this.state = 720; + this.state = 726; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); } @@ -4415,8 +4469,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseOrExpressionContext = new BitwiseOrExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseOrExpressionContext = _localctx; - let _startState: number = 148; - this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseOrExpression, _p); + let _startState: number = 150; + this.enterRecursionRule(_localctx, 150, KipperParser.RULE_bitwiseOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4426,11 +4480,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 722; + this.state = 728; this.bitwiseXorExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 729; + this.state = 735; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4445,18 +4499,18 @@ export class KipperParser extends KipperParserBase { new BitwiseOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 724; + this.state = 730; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 725; + this.state = 731; this.match(KipperParser.BitwiseOr); - this.state = 726; + this.state = 732; this.bitwiseXorExpression(0); } } } - this.state = 731; + this.state = 737; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); } @@ -4487,8 +4541,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); let _prevctx: LogicalAndExpressionContext = _localctx; - let _startState: number = 150; - this.enterRecursionRule(_localctx, 150, KipperParser.RULE_logicalAndExpression, _p); + let _startState: number = 152; + this.enterRecursionRule(_localctx, 152, KipperParser.RULE_logicalAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4498,11 +4552,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 733; + this.state = 739; this.bitwiseOrExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 740; + this.state = 746; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4517,18 +4571,18 @@ export class KipperParser extends KipperParserBase { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 735; + this.state = 741; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 736; + this.state = 742; this.match(KipperParser.AndAnd); - this.state = 737; + this.state = 743; this.bitwiseOrExpression(0); } } } - this.state = 742; + this.state = 748; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); } @@ -4559,8 +4613,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); let _prevctx: LogicalOrExpressionContext = _localctx; - let _startState: number = 152; - this.enterRecursionRule(_localctx, 152, KipperParser.RULE_logicalOrExpression, _p); + let _startState: number = 154; + this.enterRecursionRule(_localctx, 154, KipperParser.RULE_logicalOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4570,11 +4624,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 744; + this.state = 750; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 751; + this.state = 757; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4589,18 +4643,18 @@ export class KipperParser extends KipperParserBase { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 746; + this.state = 752; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 747; + this.state = 753; this.match(KipperParser.OrOr); - this.state = 748; + this.state = 754; this.logicalAndExpression(0); } } } - this.state = 753; + this.state = 759; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); } @@ -4621,16 +4675,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public conditionalExpression(): ConditionalExpressionContext { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 154, KipperParser.RULE_conditionalExpression); + this.enterRule(_localctx, 156, KipperParser.RULE_conditionalExpression); try { - this.state = 761; + this.state = 767; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 754; + this.state = 760; this.logicalOrExpression(0); } break; @@ -4639,15 +4693,15 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 755; + this.state = 761; this.logicalOrExpression(0); - this.state = 756; + this.state = 762; this.match(KipperParser.QuestionMark); - this.state = 757; + this.state = 763; this.conditionalExpression(); - this.state = 758; + this.state = 764; this.match(KipperParser.Colon); - this.state = 759; + this.state = 765; this.conditionalExpression(); } break; @@ -4668,16 +4722,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentExpression(): AssignmentExpressionContext { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 156, KipperParser.RULE_assignmentExpression); + this.enterRule(_localctx, 158, KipperParser.RULE_assignmentExpression); try { - this.state = 768; + this.state = 774; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 763; + this.state = 769; this.conditionalExpression(); } break; @@ -4686,11 +4740,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 764; + this.state = 770; this.computedPrimaryExpression(0); - this.state = 765; + this.state = 771; this.assignmentOperator(); - this.state = 766; + this.state = 772; this.assignmentExpression(); } break; @@ -4711,12 +4765,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 158, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 160, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 770; + this.state = 776; _la = this._input.LA(1); if ( !( @@ -4757,28 +4811,28 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 160, KipperParser.RULE_expression); + this.enterRule(_localctx, 162, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 772; + this.state = 778; this.assignmentExpression(); - this.state = 777; + this.state = 783; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 773; + this.state = 779; this.match(KipperParser.Comma); - this.state = 774; + this.state = 780; this.assignmentExpression(); } } } - this.state = 779; + this.state = 785; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); } @@ -4799,15 +4853,15 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierExpression(): TypeSpecifierExpressionContext { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 162, KipperParser.RULE_typeSpecifierExpression); + this.enterRule(_localctx, 164, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 783; + this.state = 789; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 780; + this.state = 786; this.identifierTypeSpecifierExpression(); } break; @@ -4815,7 +4869,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 781; + this.state = 787; this.genericTypeSpecifierExpression(); } break; @@ -4823,7 +4877,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 782; + this.state = 788; this.typeofTypeSpecifierExpression(); } break; @@ -4847,11 +4901,11 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 164, KipperParser.RULE_identifierTypeSpecifierExpression); + this.enterRule(_localctx, 166, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 785; + this.state = 791; this.typeSpecifierIdentifier(); } } catch (re) { @@ -4873,16 +4927,16 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 166, KipperParser.RULE_genericTypeSpecifierExpression); + this.enterRule(_localctx, 168, KipperParser.RULE_genericTypeSpecifierExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 787; + this.state = 793; this.typeSpecifierIdentifier(); - this.state = 788; + this.state = 794; this.match(KipperParser.Less); - this.state = 797; + this.state = 803; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -4896,28 +4950,28 @@ export class KipperParser extends KipperParserBase { _la === KipperParser.Identifier ) { { - this.state = 789; + this.state = 795; this.typeSpecifierExpression(); - this.state = 794; + this.state = 800; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 790; + this.state = 796; this.match(KipperParser.Comma); - this.state = 791; + this.state = 797; this.typeSpecifierExpression(); } } - this.state = 796; + this.state = 802; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 799; + this.state = 805; this.match(KipperParser.Greater); } } catch (re) { @@ -4939,17 +4993,17 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 168, KipperParser.RULE_typeofTypeSpecifierExpression); + this.enterRule(_localctx, 170, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 801; + this.state = 807; this.match(KipperParser.Typeof); - this.state = 802; + this.state = 808; this.match(KipperParser.LeftParen); - this.state = 803; + this.state = 809; this.typeSpecifierIdentifier(); - this.state = 804; + this.state = 810; this.match(KipperParser.RightParen); } } catch (re) { @@ -4968,12 +5022,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 170, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 172, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 806; + this.state = 812; _la = this._input.LA(1); if ( !( @@ -5018,34 +5072,34 @@ export class KipperParser extends KipperParserBase { case 53: return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 66: + case 67: return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 67: + case 68: return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 68: + case 69: return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); - case 70: + case 71: return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 71: + case 72: return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 72: + case 73: return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); - case 73: + case 74: return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); - case 74: + case 75: return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); - case 75: + case 76: return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 76: + case 77: return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; @@ -5146,7 +5200,7 @@ export class KipperParser extends KipperParserBase { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Z\u032B\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Z\u0331\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -5158,378 +5212,380 @@ export class KipperParser extends KipperParserBase { "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + - "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x03" + - "\x02\x05\x02\xB0\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\xB5\n\x03\r\x03" + - "\x0E\x03\xB6\x03\x04\x03\x04\x03\x05\x06\x05\xBC\n\x05\r\x05\x0E\x05\xBD" + - "\x03\x06\x03\x06\x03\x06\x05\x06\xC3\n\x06\x03\x07\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x03\x07\x05\x07\xCB\n\x07\x03\b\x03\b\x03\b\x03\t\x03\t\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x05\n\xD7\n\n\x03\v\x03\v\x03\f\x03\f\x03\r" + - "\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE3\n\x0E\x03\x0E\x03\x0E" + - "\x03\x0E\x03\x0E\x05\x0E\xE9\n\x0E\x03\x0F\x03\x0F\x03\x0F\x07\x0F\xEE" + - "\n\x0F\f\x0F\x0E\x0F\xF1\v\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x11" + - "\x03\x11\x03\x11\x03\x11\x07\x11\xFB\n\x11\f\x11\x0E\x11\xFE\v\x11\x03" + - "\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0104\n\x12\x03\x13\x03\x13\x03\x13" + - "\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u010E\n\x14\x03\x14\x03" + - "\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x07" + - "\x15\u011A\n\x15\f\x15\x0E\x15\u011D\v\x15\x03\x15\x03\x15\x03\x16\x03" + - "\x16\x03\x16\x05\x16\u0124\n\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18" + - "\x03\x18\x03\x18\x05\x18\u012D\n\x18\x03\x18\x03\x18\x03\x18\x03\x18\x05" + - "\x18\u0133\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u0138\n\x19\x03\x19\x03" + - "\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x05\x1A\u0143" + - "\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u0148\n\x1B\x03\x1B\x03\x1B\x03" + - "\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D\u0153\n\x1D" + - "\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u015C" + - "\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F\u0164\n" + - "\x1F\f\x1F\x0E\x1F\u0167\v\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03" + - ' \x03 \x03 \x03 \x05 \u0173\n \x03!\x03!\x03!\x05!\u0178\n!\x03"\x03' + - '"\x03"\x03"\x05"\u017E\n"\x03"\x03"\x05"\u0182\n"\x03"\x03"' + - '\x03"\x03"\x05"\u0188\n"\x03"\x03"\x03"\x03"\x05"\u018E\n"\x03' + - '"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03$\x03$' + - "\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01A6\n&\x03&\x03&\x03'" + - "\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x05'\u01B4\n'" + - "\x03(\x03(\x05(\u01B8\n(\x03(\x03(\x03(\x03(\x03(\x03(\x05(\u01C0\n(\x03" + - ")\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x05-\u01CE\n" + - "-\x03.\x03.\x03/\x03/\x07/\u01D4\n/\f/\x0E/\u01D7\v/\x03/\x03/\x03/\x07" + - "/\u01DC\n/\f/\x0E/\u01DF\v/\x03/\x05/\u01E2\n/\x030\x030\x030\x050\u01E7" + - "\n0\x030\x050\u01EA\n0\x031\x031\x031\x051\u01EF\n1\x031\x051\u01F2\n" + - "1\x032\x032\x033\x033\x033\x033\x073\u01FA\n3\f3\x0E3\u01FD\v3\x053\u01FF" + - "\n3\x033\x053\u0202\n3\x033\x033\x034\x034\x034\x034\x074\u020A\n4\f4" + - "\x0E4\u020D\v4\x054\u020F\n4\x034\x054\u0212\n4\x034\x034\x035\x035\x03" + - "5\x035\x036\x036\x037\x037\x037\x037\x037\x037\x057\u0222\n7\x037\x03" + - "7\x037\x037\x037\x037\x037\x057\u022B\n7\x037\x037\x037\x057\u0230\n7" + - "\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x057\u0241\n7\x037\x037\x077\u0245\n7\f7\x0E7\u0248\v7\x038\x03" + - "8\x038\x078\u024D\n8\f8\x0E8\u0250\v8\x039\x039\x039\x03:\x03:\x03:\x03" + - ":\x03;\x03;\x03;\x03;\x05;\u025D\n;\x03;\x03;\x03;\x03;\x05;\u0263\n;" + - "\x03;\x03;\x03<\x03<\x05<\u0269\n<\x03=\x03=\x03=\x03>\x03>\x03>\x05>" + - "\u0271\n>\x03?\x03?\x03?\x03@\x03@\x03@\x03A\x03A\x03B\x03B\x03C\x03C" + - "\x03C\x03C\x03C\x05C\u0282\nC\x03D\x03D\x03D\x03D\x03D\x03D\x07D\u028A" + - "\nD\fD\x0ED\u028D\vD\x03E\x03E\x03E\x03E\x03E\x03E\x07E\u0295\nE\fE\x0E" + - "E\u0298\vE\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x07F\u02A1\nF\fF\x0EF\u02A4" + - "\vF\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03H\x07H\u02AE\nH\fH\x0EH\u02B1" + - "\vH\x03I\x03I\x03I\x03I\x03I\x03I\x07I\u02B9\nI\fI\x0EI\u02BC\vI\x03J" + - "\x03J\x03J\x03J\x03J\x03J\x07J\u02C4\nJ\fJ\x0EJ\u02C7\vJ\x03K\x03K\x03" + - "K\x03K\x03K\x03K\x07K\u02CF\nK\fK\x0EK\u02D2\vK\x03L\x03L\x03L\x03L\x03" + - "L\x03L\x07L\u02DA\nL\fL\x0EL\u02DD\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07" + - "M\u02E5\nM\fM\x0EM\u02E8\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02F0\n" + - "N\fN\x0EN\u02F3\vN\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x05O\u02FC\nO\x03" + - "P\x03P\x03P\x03P\x03P\x05P\u0303\nP\x03Q\x03Q\x03R\x03R\x03R\x07R\u030A" + - "\nR\fR\x0ER\u030D\vR\x03S\x03S\x03S\x05S\u0312\nS\x03T\x03T\x03U\x03U" + - "\x03U\x03U\x03U\x07U\u031B\nU\fU\x0EU\u031E\vU\x05U\u0320\nU\x03U\x03" + - "U\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x02\x02\rl\x86\x88\x8A\x8E\x90" + - "\x92\x94\x96\x98\x9AX\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02" + - "\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02" + - '"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02' + - ">\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02" + - "Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02" + - "v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A" + - "\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C" + - "\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\x02" + - "\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02PQ\x04\x02O" + - "ORR\x03\x02!#\x04\x020022\x06\x02//1199II\x03\x0236\x04\x02//11\x03\x02" + - "JL\x03\x02BE\x03\x02@A\x03\x02:?\x04\x02!#NN\x02\u0335\x02\xAF\x03\x02" + - "\x02\x02\x04\xB4\x03\x02\x02\x02\x06\xB8\x03\x02\x02\x02\b\xBB\x03\x02" + - "\x02\x02\n\xC2\x03\x02\x02\x02\f\xCA\x03\x02\x02\x02\x0E\xCC\x03\x02\x02" + - "\x02\x10\xCF\x03\x02\x02\x02\x12\xD1\x03\x02\x02\x02\x14\xD8\x03\x02\x02" + - "\x02\x16\xDA\x03\x02\x02\x02\x18\xDC\x03\x02\x02\x02\x1A\xDE\x03\x02\x02" + - "\x02\x1C\xEA\x03\x02\x02\x02\x1E\xF2\x03\x02\x02\x02 \xF6\x03\x02\x02" + - '\x02"\u0103\x03\x02\x02\x02$\u0105\x03\x02\x02\x02&\u010A\x03\x02\x02' + - "\x02(\u0114\x03\x02\x02\x02*\u0123\x03\x02\x02\x02,\u0125\x03\x02\x02" + - "\x02.\u0129\x03\x02\x02\x020\u0134\x03\x02\x02\x022\u0142\x03\x02\x02" + - "\x024\u0144\x03\x02\x02\x026\u014B\x03\x02\x02\x028\u0152\x03\x02\x02" + - "\x02:\u0154\x03\x02\x02\x02<\u015D\x03\x02\x02\x02>\u0172\x03\x02\x02" + - "\x02@\u0177\x03\x02\x02\x02B\u0179\x03\x02\x02\x02D\u0192\x03\x02\x02" + - "\x02F\u0198\x03\x02\x02\x02H\u01A0\x03\x02\x02\x02J\u01A3\x03\x02\x02" + - "\x02L\u01B3\x03\x02\x02\x02N\u01B5\x03\x02\x02\x02P\u01C1\x03\x02\x02" + - "\x02R\u01C5\x03\x02\x02\x02T\u01C7\x03\x02\x02\x02V\u01C9\x03\x02\x02" + - "\x02X\u01CD\x03\x02\x02\x02Z\u01CF\x03\x02\x02\x02\\\u01E1\x03\x02\x02" + - "\x02^\u01E9\x03\x02\x02\x02`\u01F1\x03\x02\x02\x02b\u01F3\x03\x02\x02" + - "\x02d\u01F5\x03\x02\x02\x02f\u0205\x03\x02\x02\x02h\u0215\x03\x02\x02" + - "\x02j\u0219\x03\x02\x02\x02l\u022F\x03\x02\x02\x02n\u0249\x03\x02\x02" + - "\x02p\u0251\x03\x02\x02\x02r\u0254\x03\x02\x02\x02t\u0258\x03\x02\x02" + - "\x02v\u0268\x03\x02\x02\x02x\u026A\x03\x02\x02\x02z\u0270\x03\x02\x02" + - "\x02|\u0272\x03\x02\x02\x02~\u0275\x03\x02\x02\x02\x80\u0278\x03\x02\x02" + - "\x02\x82\u027A\x03\x02\x02\x02\x84\u0281\x03\x02\x02\x02\x86\u0283\x03" + - "\x02\x02\x02\x88\u028E\x03\x02\x02\x02\x8A\u0299\x03\x02\x02\x02\x8C\u02A5" + - "\x03\x02\x02\x02\x8E\u02A7\x03\x02\x02\x02\x90\u02B2\x03\x02\x02\x02\x92" + - "\u02BD\x03\x02\x02\x02\x94\u02C8\x03\x02\x02\x02\x96\u02D3\x03\x02\x02" + - "\x02\x98\u02DE\x03\x02\x02\x02\x9A\u02E9\x03\x02\x02\x02\x9C\u02FB\x03" + - "\x02\x02\x02\x9E\u0302\x03\x02\x02\x02\xA0\u0304\x03\x02\x02\x02\xA2\u0306" + - "\x03\x02\x02\x02\xA4\u0311\x03\x02\x02\x02\xA6\u0313\x03\x02\x02\x02\xA8" + - "\u0315\x03\x02\x02\x02\xAA\u0323\x03\x02\x02\x02\xAC\u0328\x03\x02\x02" + - "\x02\xAE\xB0\x05\x04\x03\x02\xAF\xAE\x03\x02\x02\x02\xAF\xB0\x03\x02\x02" + - "\x02\xB0\xB1\x03\x02\x02\x02\xB1\xB2\x07\x02\x02\x03\xB2\x03\x03\x02\x02" + - "\x02\xB3\xB5\x05\x06\x04\x02\xB4\xB3\x03\x02\x02\x02\xB5\xB6\x03\x02\x02" + - "\x02\xB6\xB4\x03\x02\x02\x02\xB6\xB7\x03\x02\x02\x02\xB7\x05\x03\x02\x02" + - "\x02\xB8\xB9\x05\b\x05\x02\xB9\x07\x03\x02\x02\x02\xBA\xBC\x05\n\x06\x02" + - "\xBB\xBA\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\xBB\x03\x02\x02\x02" + - "\xBD\xBE\x03\x02\x02\x02\xBE\t\x03\x02\x02\x02\xBF\xC3\x052\x1A\x02\xC0" + - "\xC3\x05\f\x07\x02\xC1\xC3\x07%\x02\x02\xC2\xBF\x03\x02\x02\x02\xC2\xC0" + - "\x03\x02\x02\x02\xC2\xC1\x03\x02\x02\x02\xC3\v\x03\x02\x02\x02\xC4\xC5" + - "\x05\x0E\b\x02\xC5\xC6\x07%\x02\x02\xC6\xCB\x03\x02\x02\x02\xC7\xCB\x05" + - "\x1A\x0E\x02\xC8\xCB\x05 \x11\x02\xC9\xCB\x05(\x15\x02\xCA\xC4\x03\x02" + - "\x02\x02\xCA\xC7\x03\x02\x02\x02\xCA\xC8\x03\x02\x02\x02\xCA\xC9\x03\x02" + - "\x02\x02\xCB\r\x03\x02\x02\x02\xCC\xCD\x05\x10\t\x02\xCD\xCE\x05\x12\n" + - "\x02\xCE\x0F\x03\x02\x02\x02\xCF\xD0\t\x02\x02\x02\xD0\x11\x03\x02\x02" + - "\x02\xD1\xD2\x05\x16\f\x02\xD2\xD3\x07'\x02\x02\xD3\xD6\x05\xA4S\x02" + - "\xD4\xD5\x07:\x02\x02\xD5\xD7\x05\x14\v\x02\xD6\xD4\x03\x02\x02\x02\xD6" + - "\xD7\x03\x02\x02\x02\xD7\x13\x03\x02\x02\x02\xD8\xD9\x05\x9EP\x02\xD9" + - "\x15\x03\x02\x02\x02\xDA\xDB\x05\x18\r\x02\xDB\x17\x03\x02\x02\x02\xDC" + - "\xDD\x07N\x02\x02\xDD\x19\x03\x02\x02\x02\xDE\xDF\x07\x16\x02\x02\xDF" + - "\xE0\x05\x16\f\x02\xE0\xE2\x07(\x02\x02\xE1\xE3\x05\x1C\x0F\x02\xE2\xE1" + - "\x03\x02\x02\x02\xE2\xE3\x03\x02\x02\x02\xE3\xE4\x03\x02\x02\x02\xE4\xE5" + - "\x07)\x02\x02\xE5\xE6\x07\x19\x02\x02\xE6\xE8\x05\xA4S\x02\xE7\xE9\x05" + - "4\x1B\x02\xE8\xE7\x03\x02\x02\x02\xE8\xE9\x03\x02\x02\x02\xE9\x1B\x03" + - "\x02\x02\x02\xEA\xEF\x05\x1E\x10\x02\xEB\xEC\x07$\x02\x02\xEC\xEE\x05" + - "\x1E\x10\x02\xED\xEB\x03\x02\x02\x02\xEE\xF1\x03\x02\x02\x02\xEF\xED\x03" + - "\x02\x02\x02\xEF\xF0\x03\x02\x02\x02\xF0\x1D\x03\x02\x02\x02\xF1\xEF\x03" + - "\x02\x02\x02\xF2\xF3\x05\x16\f\x02\xF3\xF4\x07'\x02\x02\xF4\xF5\x05\xA4" + - "S\x02\xF5\x1F\x03\x02\x02\x02\xF6\xF7\x07\x1B\x02\x02\xF7\xF8\x05\x16" + - '\f\x02\xF8\xFC\x07-\x02\x02\xF9\xFB\x05"\x12\x02\xFA\xF9\x03\x02\x02' + - "\x02\xFB\xFE\x03\x02\x02\x02\xFC\xFA\x03\x02\x02\x02\xFC\xFD\x03\x02\x02" + - "\x02\xFD\xFF\x03\x02\x02\x02\xFE\xFC\x03\x02\x02\x02\xFF\u0100\x07.\x02" + - "\x02\u0100!\x03\x02\x02\x02\u0101\u0104\x05$\x13\x02\u0102\u0104\x05&" + - "\x14\x02\u0103\u0101\x03\x02\x02\x02\u0103\u0102\x03\x02\x02\x02\u0104" + - "#\x03\x02\x02\x02\u0105\u0106\x05\x16\f\x02\u0106\u0107\x07'\x02\x02" + - "\u0107\u0108\x05\xA4S\x02\u0108\u0109\x07%\x02\x02\u0109%\x03\x02\x02" + - "\x02\u010A\u010B\x05\x16\f\x02\u010B\u010D\x07(\x02\x02\u010C\u010E\x05" + - "\x1C\x0F\x02\u010D\u010C\x03\x02\x02\x02\u010D\u010E\x03\x02\x02\x02\u010E" + - "\u010F\x03\x02\x02\x02\u010F\u0110\x07)\x02\x02\u0110\u0111\x07'\x02" + - "\x02\u0111\u0112\x05\xA4S\x02\u0112\u0113\x07%\x02\x02\u0113'\x03\x02" + - "\x02\x02\u0114\u0115\x07\x1A\x02\x02\u0115\u0116\x05\x16\f\x02\u0116\u011B" + - "\x07-\x02\x02\u0117\u011A\x05*\x16\x02\u0118\u011A\x07%\x02\x02\u0119" + - "\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02\u011A\u011D\x03\x02" + - "\x02\x02\u011B\u0119\x03\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C" + - "\u011E\x03\x02\x02\x02\u011D\u011B\x03\x02\x02\x02\u011E\u011F\x07.\x02" + - "\x02\u011F)\x03\x02\x02\x02\u0120\u0124\x05,\x17\x02\u0121\u0124\x05." + - "\x18\x02\u0122\u0124\x050\x19\x02\u0123\u0120\x03\x02\x02\x02\u0123\u0121" + - "\x03\x02\x02\x02\u0123\u0122\x03\x02\x02\x02\u0124+\x03\x02\x02\x02\u0125" + - "\u0126\x05\x16\f\x02\u0126\u0127\x07'\x02\x02\u0127\u0128\x05\xA4S\x02" + - "\u0128-\x03\x02\x02\x02\u0129\u012A\x05\x16\f\x02\u012A\u012C\x07(\x02" + - "\x02\u012B\u012D\x05\x1C\x0F\x02\u012C\u012B\x03\x02\x02\x02\u012C\u012D" + - "\x03\x02\x02\x02\u012D\u012E\x03\x02\x02\x02\u012E\u012F\x07)\x02\x02" + - "\u012F\u0130\x07'\x02\x02\u0130\u0132\x05\xA4S\x02\u0131\u0133\x054\x1B" + - "\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133\x03\x02\x02\x02\u0133/\x03" + - "\x02\x02\x02\u0134\u0135\x07\x1C\x02\x02\u0135\u0137\x07(\x02\x02\u0136" + - "\u0138\x05\x1C\x0F\x02\u0137\u0136\x03\x02\x02\x02\u0137\u0138\x03\x02" + - "\x02\x02\u0138\u0139\x03\x02\x02\x02\u0139\u013A\x07)\x02\x02\u013A\u013B" + - "\x054\x1B\x02\u013B1\x03\x02\x02\x02\u013C\u0143\x056\x1C\x02\u013D\u0143" + - "\x058\x1D\x02\u013E\u0143\x05@!\x02\u013F\u0143\x05H%\x02\u0140\u0143" + - "\x05J&\x02\u0141\u0143\x054\x1B\x02\u0142\u013C\x03\x02\x02\x02\u0142" + - "\u013D\x03\x02\x02\x02\u0142\u013E\x03\x02\x02\x02\u0142\u013F\x03\x02" + - "\x02\x02\u0142\u0140\x03\x02\x02\x02\u0142\u0141\x03\x02\x02\x02\u0143" + - "3\x03\x02\x02\x02\u0144\u0145\x06\x1B\x02\x02\u0145\u0147\x07-\x02\x02" + - "\u0146\u0148\x05\b\x05\x02\u0147\u0146\x03\x02\x02\x02\u0147\u0148\x03" + - "\x02\x02\x02\u0148\u0149\x03\x02\x02\x02\u0149\u014A\x07.\x02\x02\u014A" + - "5\x03\x02\x02\x02\u014B\u014C\b\x1C\x01\x02\u014C\u014D\x05\xA2R\x02\u014D" + - "\u014E\x07%\x02\x02\u014E\u014F\b\x1C\x01\x02\u014F7\x03\x02\x02\x02\u0150" + - "\u0153\x05:\x1E\x02\u0151\u0153\x05<\x1F\x02\u0152\u0150\x03\x02\x02\x02" + - "\u0152\u0151\x03\x02\x02\x02\u01539\x03\x02\x02\x02\u0154\u0155\x07\x12" + - "\x02\x02\u0155\u0156\x07(\x02\x02\u0156\u0157\x05\xA2R\x02\u0157\u0158" + - "\x07)\x02\x02\u0158\u015B\x052\x1A\x02\u0159\u015A\x07\x13\x02\x02\u015A" + - "\u015C\x052\x1A\x02\u015B\u0159\x03\x02\x02\x02\u015B\u015C\x03\x02\x02" + - "\x02\u015C;\x03\x02\x02\x02\u015D\u015E\x07\v\x02\x02\u015E\u015F\x07" + - "(\x02\x02\u015F\u0160\x05\xA2R\x02\u0160\u0161\x07)\x02\x02\u0161\u0165" + - "\x07-\x02\x02\u0162\u0164\x05> \x02\u0163\u0162\x03\x02\x02\x02\u0164" + - "\u0167\x03\x02\x02\x02\u0165\u0163\x03\x02\x02\x02\u0165\u0166\x03\x02" + - "\x02\x02\u0166\u0168\x03\x02\x02\x02\u0167\u0165\x03\x02\x02\x02\u0168" + - "\u0169\x07.\x02\x02\u0169=\x03\x02\x02\x02\u016A\u016B\x07\f\x02\x02\u016B" + - "\u016C\x05\xA2R\x02\u016C\u016D\x07'\x02\x02\u016D\u016E\x052\x1A\x02" + - "\u016E\u0173\x03\x02\x02\x02\u016F\u0170\x07\r\x02\x02\u0170\u0171\x07" + - "'\x02\x02\u0171\u0173\x052\x1A\x02\u0172\u016A\x03\x02\x02\x02\u0172" + - '\u016F\x03\x02\x02\x02\u0173?\x03\x02\x02\x02\u0174\u0178\x05B"\x02\u0175' + - "\u0178\x05D#\x02\u0176\u0178\x05F$\x02\u0177\u0174\x03\x02\x02\x02\u0177" + - "\u0175\x03\x02\x02\x02\u0177\u0176\x03\x02\x02\x02\u0178A\x03\x02\x02" + - "\x02\u0179\u017A\x07\x14\x02\x02\u017A\u0181\x07(\x02\x02\u017B\u017E" + - "\x05\x0E\b\x02\u017C\u017E\x05\xA2R\x02\u017D\u017B\x03\x02\x02\x02\u017D" + - '\u017C\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0180\b"\x01' + - "\x02\u0180\u0182\x03\x02\x02\x02\u0181\u017D\x03\x02\x02\x02\u0181\u0182" + - "\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0187\x07%\x02\x02" + - '\u0184\u0185\x05\xA2R\x02\u0185\u0186\b"\x01\x02\u0186\u0188\x03\x02' + - "\x02\x02\u0187\u0184\x03\x02\x02\x02\u0187\u0188\x03\x02\x02\x02\u0188" + - "\u0189\x03\x02\x02\x02\u0189\u018D\x07%\x02\x02\u018A\u018B\x05\xA2R\x02" + - '\u018B\u018C\b"\x01\x02\u018C\u018E\x03\x02\x02\x02\u018D\u018A\x03\x02' + - "\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E\u018F\x03\x02\x02\x02\u018F" + - "\u0190\x07)\x02\x02\u0190\u0191\x052\x1A\x02\u0191C\x03\x02\x02\x02\u0192" + - "\u0193\x07\x11\x02\x02\u0193\u0194\x07(\x02\x02\u0194\u0195\x05\xA2R\x02" + - "\u0195\u0196\x07)\x02\x02\u0196\u0197\x052\x1A\x02\u0197E\x03\x02\x02" + - "\x02\u0198\u0199\x07\x10\x02\x02\u0199\u019A\x052\x1A\x02\u019A\u019B" + - "\x07\x11\x02\x02\u019B\u019C\x07(\x02\x02\u019C\u019D\x05\xA2R\x02\u019D" + - "\u019E\x07)\x02\x02\u019E\u019F\x07%\x02\x02\u019FG\x03\x02\x02\x02\u01A0" + - "\u01A1\t\x03\x02\x02\u01A1\u01A2\x07%\x02\x02\u01A2I\x03\x02\x02\x02\u01A3" + - "\u01A5\x07\x17\x02\x02\u01A4\u01A6\x05\xA2R\x02\u01A5\u01A4\x03\x02\x02" + - "\x02\u01A5\u01A6\x03\x02\x02\x02\u01A6\u01A7\x03\x02\x02\x02\u01A7\u01A8" + - "\x07%\x02\x02\u01A8K\x03\x02\x02\x02\u01A9\u01B4\x05P)\x02\u01AA\u01B4" + - "\x05N(\x02\u01AB\u01B4\x05d3\x02\u01AC\u01B4\x05f4\x02\u01AD\u01B4\x05" + - "R*\x02\u01AE\u01B4\x05T+\x02\u01AF\u01B4\x05Z.\x02\u01B0\u01B4\x05\\/" + - "\x02\u01B1\u01B4\x05b2\x02\u01B2\u01B4\x05j6\x02\u01B3\u01A9\x03\x02\x02" + - "\x02\u01B3\u01AA\x03\x02\x02\x02\u01B3\u01AB\x03\x02\x02\x02\u01B3\u01AC" + - "\x03\x02\x02\x02\u01B3\u01AD\x03\x02\x02\x02\u01B3\u01AE\x03\x02\x02\x02" + - "\u01B3\u01AF\x03\x02\x02\x02\u01B3\u01B0\x03\x02\x02\x02\u01B3\u01B1\x03" + - "\x02\x02\x02\u01B3\u01B2\x03\x02\x02\x02\u01B4M\x03\x02\x02\x02\u01B5" + - "\u01B7\x07(\x02\x02\u01B6\u01B8\x05\x1C\x0F\x02\u01B7\u01B6\x03\x02\x02" + - "\x02\u01B7\u01B8\x03\x02\x02\x02\u01B8\u01B9\x03\x02\x02\x02\u01B9\u01BA" + - "\x07)\x02\x02\u01BA\u01BB\x07'\x02\x02\u01BB\u01BC\x05\xA4S\x02\u01BC" + - "\u01BF\x07\x19\x02\x02\u01BD\u01C0\x05\xA2R\x02\u01BE\u01C0\x054\x1B\x02" + - "\u01BF\u01BD\x03\x02\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0O\x03\x02" + - "\x02\x02\u01C1\u01C2\x07(\x02\x02\u01C2\u01C3\x05\xA2R\x02\u01C3\u01C4" + - "\x07)\x02\x02\u01C4Q\x03\x02\x02\x02\u01C5\u01C6\t\x04\x02\x02\u01C6S" + - "\x03\x02\x02\x02\u01C7\u01C8\x05V,\x02\u01C8U\x03\x02\x02\x02\u01C9\u01CA" + - "\x07N\x02\x02\u01CAW\x03\x02\x02\x02\u01CB\u01CE\x05V,\x02\u01CC\u01CE" + - "\x05Z.\x02\u01CD\u01CB\x03\x02\x02\x02\u01CD\u01CC\x03\x02\x02\x02\u01CE" + - "Y\x03\x02\x02\x02\u01CF\u01D0\t\x05\x02\x02\u01D0[\x03\x02\x02\x02\u01D1" + - "\u01D5\x07U\x02\x02\u01D2\u01D4\x05^0\x02\u01D3\u01D2\x03\x02\x02\x02" + - "\u01D4\u01D7\x03\x02\x02\x02\u01D5\u01D3\x03\x02\x02\x02\u01D5\u01D6\x03" + - "\x02\x02\x02\u01D6\u01D8\x03\x02\x02\x02\u01D7\u01D5\x03\x02\x02\x02\u01D8" + - "\u01E2\x07W\x02\x02\u01D9\u01DD\x07V\x02\x02\u01DA\u01DC\x05`1\x02\u01DB" + - "\u01DA\x03\x02\x02\x02\u01DC\u01DF\x03\x02\x02\x02\u01DD\u01DB\x03\x02" + - "\x02\x02\u01DD\u01DE\x03\x02\x02\x02\u01DE\u01E0\x03\x02\x02\x02\u01DF" + - "\u01DD\x03\x02\x02\x02\u01E0\u01E2\x07Y\x02\x02\u01E1\u01D1\x03\x02\x02" + - "\x02\u01E1\u01D9\x03\x02\x02\x02\u01E2]\x03\x02\x02\x02\u01E3\u01EA\x07" + - "X\x02\x02\u01E4\u01E6\x07\x03\x02\x02\u01E5\u01E7\x05\xA2R\x02\u01E6\u01E5" + - "\x03\x02\x02\x02\u01E6\u01E7\x03\x02\x02\x02\u01E7\u01E8\x03\x02\x02\x02" + - "\u01E8\u01EA\x07,\x02\x02\u01E9\u01E3\x03\x02\x02\x02\u01E9\u01E4\x03" + - "\x02\x02\x02\u01EA_\x03\x02\x02\x02\u01EB\u01F2\x07Z\x02\x02\u01EC\u01EE" + - "\x07\x03\x02\x02\u01ED\u01EF\x05\xA2R\x02\u01EE\u01ED\x03\x02\x02\x02" + - "\u01EE\u01EF\x03\x02\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0\u01F2\x07" + - ",\x02\x02\u01F1\u01EB\x03\x02\x02\x02\u01F1\u01EC\x03\x02\x02\x02\u01F2" + - "a\x03\x02\x02\x02\u01F3\u01F4\t\x06\x02\x02\u01F4c\x03\x02\x02\x02\u01F5" + - "\u01FE\x07*\x02\x02\u01F6\u01FB\x05\xA2R\x02\u01F7\u01F8\x07$\x02\x02" + - "\u01F8\u01FA\x05\xA2R\x02\u01F9\u01F7\x03\x02\x02\x02\u01FA\u01FD\x03" + - "\x02\x02\x02\u01FB\u01F9\x03\x02\x02\x02\u01FB\u01FC\x03\x02\x02\x02\u01FC" + - "\u01FF\x03\x02\x02\x02\u01FD\u01FB\x03\x02\x02\x02\u01FE\u01F6\x03\x02" + - "\x02\x02\u01FE\u01FF\x03\x02\x02\x02\u01FF\u0201\x03\x02\x02\x02\u0200" + - "\u0202\x07$\x02\x02\u0201\u0200\x03\x02\x02\x02\u0201\u0202\x03\x02\x02" + - "\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0204\x07+\x02\x02\u0204e\x03\x02" + - "\x02\x02\u0205\u020E\x07-\x02\x02\u0206\u020B\x05h5\x02\u0207\u0208\x07" + - "$\x02\x02\u0208\u020A\x05h5\x02\u0209\u0207\x03\x02\x02\x02\u020A\u020D" + - "\x03\x02\x02\x02\u020B\u0209\x03\x02\x02\x02\u020B\u020C\x03\x02\x02\x02" + - "\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02\u020E\u0206\x03" + - "\x02\x02\x02\u020E\u020F"; + "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + + "X\tX\x03\x02\x05\x02\xB2\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\xB7\n\x03" + + "\r\x03\x0E\x03\xB8\x03\x04\x03\x04\x03\x05\x06\x05\xBE\n\x05\r\x05\x0E" + + "\x05\xBF\x03\x06\x03\x06\x03\x06\x05\x06\xC5\n\x06\x03\x07\x03\x07\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x05\x07\xCD\n\x07\x03\b\x03\b\x03\b\x03\t" + + "\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xD9\n\n\x03\v\x03\v\x03\f\x03" + + "\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE5\n\x0E\x03\x0E" + + "\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xEB\n\x0E\x03\x0F\x03\x0F\x03\x0F\x07" + + "\x0F\xF0\n\x0F\f\x0F\x0E\x0F\xF3\v\x0F\x03\x10\x03\x10\x03\x10\x03\x10" + + "\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\xFD\n\x11\f\x11\x0E\x11\u0100" + + "\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0106\n\x12\x03\x13\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0110\n\x14" + + "\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x07\x15\u011C\n\x15\f\x15\x0E\x15\u011F\v\x15\x03\x15\x03\x15" + + "\x03\x16\x03\x16\x03\x16\x05\x16\u0126\n\x16\x03\x17\x03\x17\x03\x17\x03" + + "\x17\x03\x18\x03\x18\x03\x18\x05\x18\u012F\n\x18\x03\x18\x03\x18\x03\x18" + + "\x03\x18\x05\x18\u0135\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u013A\n\x19" + + "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + + "\x05\x1A\u0145\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u014A\n\x1B\x03\x1B" + + "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D" + + "\u0155\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05" + + "\x1E\u015E\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F" + + "\u0166\n\x1F\f\x1F\x0E\x1F\u0169\v\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 " + + "\x03 \x03 \x03 \x03 \x03 \x05 \u0175\n \x03!\x03!\x03!\x05!\u017A\n!\x03" + + '"\x03"\x03"\x03"\x05"\u0180\n"\x03"\x03"\x05"\u0184\n"\x03"' + + '\x03"\x03"\x03"\x05"\u018A\n"\x03"\x03"\x03"\x03"\x05"\u0190' + + '\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03' + + "$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01A8\n&\x03&\x03" + + "&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x05'\u01B6" + + "\n'\x03(\x03(\x05(\u01BA\n(\x03(\x03(\x03(\x03(\x03(\x03(\x05(\u01C2" + + "\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x05-\u01D0" + + "\n-\x03.\x03.\x03/\x03/\x07/\u01D6\n/\f/\x0E/\u01D9\v/\x03/\x03/\x03/" + + "\x07/\u01DE\n/\f/\x0E/\u01E1\v/\x03/\x05/\u01E4\n/\x030\x030\x030\x05" + + "0\u01E9\n0\x030\x050\u01EC\n0\x031\x031\x031\x051\u01F1\n1\x031\x051\u01F4" + + "\n1\x032\x032\x033\x033\x033\x033\x073\u01FC\n3\f3\x0E3\u01FF\v3\x053" + + "\u0201\n3\x033\x053\u0204\n3\x033\x033\x034\x034\x034\x034\x074\u020C" + + "\n4\f4\x0E4\u020F\v4\x054\u0211\n4\x034\x054\u0214\n4\x034\x034\x035\x03" + + "5\x035\x035\x036\x036\x037\x037\x037\x037\x037\x037\x057\u0224\n7\x03" + + "7\x037\x037\x037\x037\x037\x037\x057\u022D\n7\x037\x037\x037\x057\u0232" + + "\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x057\u0243\n7\x037\x037\x077\u0247\n7\f7\x0E7\u024A\v7\x038\x03" + + "8\x038\x078\u024F\n8\f8\x0E8\u0252\v8\x039\x039\x039\x03:\x03:\x03:\x03" + + ":\x03;\x03;\x03;\x03;\x05;\u025F\n;\x03;\x03;\x03;\x03;\x05;\u0265\n;" + + "\x03;\x03;\x03<\x03<\x03<\x05<\u026C\n<\x03=\x03=\x03=\x03>\x03>\x03>" + + "\x03?\x03?\x03?\x05?\u0277\n?\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B" + + "\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u0288\nD\x03E\x03E\x03E\x03E" + + "\x03E\x03E\x07E\u0290\nE\fE\x0EE\u0293\vE\x03F\x03F\x03F\x03F\x03F\x03" + + "F\x07F\u029B\nF\fF\x0EF\u029E\vF\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x07" + + "G\u02A7\nG\fG\x0EG\u02AA\vG\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x07" + + "I\u02B4\nI\fI\x0EI\u02B7\vI\x03J\x03J\x03J\x03J\x03J\x03J\x07J\u02BF\n" + + "J\fJ\x0EJ\u02C2\vJ\x03K\x03K\x03K\x03K\x03K\x03K\x07K\u02CA\nK\fK\x0E" + + "K\u02CD\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D5\nL\fL\x0EL\u02D8\v" + + "L\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E0\nM\fM\x0EM\u02E3\vM\x03N\x03" + + "N\x03N\x03N\x03N\x03N\x07N\u02EB\nN\fN\x0EN\u02EE\vN\x03O\x03O\x03O\x03" + + "O\x03O\x03O\x07O\u02F6\nO\fO\x0EO\u02F9\vO\x03P\x03P\x03P\x03P\x03P\x03" + + "P\x03P\x05P\u0302\nP\x03Q\x03Q\x03Q\x03Q\x03Q\x05Q\u0309\nQ\x03R\x03R" + + "\x03S\x03S\x03S\x07S\u0310\nS\fS\x0ES\u0313\vS\x03T\x03T\x03T\x05T\u0318" + + "\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x07V\u0321\nV\fV\x0EV\u0324\vV" + + "\x05V\u0326\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x02\x02" + + "\rl\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9CY\x02\x02\x04\x02\x06\x02\b" + + "\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02" + + '\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x02' + + "6\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + + "R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02" + + "n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02" + + "\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02" + + "\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02" + + "\xAA\x02\xAC\x02\xAE\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02" + + "\x1E\x1F\x03\x02PQ\x04\x02OORR\x03\x02!#\x04\x020022\x06\x02//1199II\x03" + + "\x0236\x04\x02//11\x03\x02JL\x03\x02BE\x03\x02@A\x03\x02:?\x04\x02!#N" + + "N\x02\u033B\x02\xB1\x03\x02\x02\x02\x04\xB6\x03\x02\x02\x02\x06\xBA\x03" + + "\x02\x02\x02\b\xBD\x03\x02\x02\x02\n\xC4\x03\x02\x02\x02\f\xCC\x03\x02" + + "\x02\x02\x0E\xCE\x03\x02\x02\x02\x10\xD1\x03\x02\x02\x02\x12\xD3\x03\x02" + + "\x02\x02\x14\xDA\x03\x02\x02\x02\x16\xDC\x03\x02\x02\x02\x18\xDE\x03\x02" + + "\x02\x02\x1A\xE0\x03\x02\x02\x02\x1C\xEC\x03\x02\x02\x02\x1E\xF4\x03\x02" + + '\x02\x02 \xF8\x03\x02\x02\x02"\u0105\x03\x02\x02\x02$\u0107\x03\x02\x02' + + "\x02&\u010C\x03\x02\x02\x02(\u0116\x03\x02\x02\x02*\u0125\x03\x02\x02" + + "\x02,\u0127\x03\x02\x02\x02.\u012B\x03\x02\x02\x020\u0136\x03\x02\x02" + + "\x022\u0144\x03\x02\x02\x024\u0146\x03\x02\x02\x026\u014D\x03\x02\x02" + + "\x028\u0154\x03\x02\x02\x02:\u0156\x03\x02\x02\x02<\u015F\x03\x02\x02" + + "\x02>\u0174\x03\x02\x02\x02@\u0179\x03\x02\x02\x02B\u017B\x03\x02\x02" + + "\x02D\u0194\x03\x02\x02\x02F\u019A\x03\x02\x02\x02H\u01A2\x03\x02\x02" + + "\x02J\u01A5\x03\x02\x02\x02L\u01B5\x03\x02\x02\x02N\u01B7\x03\x02\x02" + + "\x02P\u01C3\x03\x02\x02\x02R\u01C7\x03\x02\x02\x02T\u01C9\x03\x02\x02" + + "\x02V\u01CB\x03\x02\x02\x02X\u01CF\x03\x02\x02\x02Z\u01D1\x03\x02\x02" + + "\x02\\\u01E3\x03\x02\x02\x02^\u01EB\x03\x02\x02\x02`\u01F3\x03\x02\x02" + + "\x02b\u01F5\x03\x02\x02\x02d\u01F7\x03\x02\x02\x02f\u0207\x03\x02\x02" + + "\x02h\u0217\x03\x02\x02\x02j\u021B\x03\x02\x02\x02l\u0231\x03\x02\x02" + + "\x02n\u024B\x03\x02\x02\x02p\u0253\x03\x02\x02\x02r\u0256\x03\x02\x02" + + "\x02t\u025A\x03\x02\x02\x02v\u026B\x03\x02\x02\x02x\u026D\x03\x02\x02" + + "\x02z\u0270\x03\x02\x02\x02|\u0276\x03\x02\x02\x02~\u0278\x03\x02\x02" + + "\x02\x80\u027B\x03\x02\x02\x02\x82\u027E\x03\x02\x02\x02\x84\u0280\x03" + + "\x02\x02\x02\x86\u0287\x03\x02\x02\x02\x88\u0289\x03\x02\x02\x02\x8A\u0294" + + "\x03\x02\x02\x02\x8C\u029F\x03\x02\x02\x02\x8E\u02AB\x03\x02\x02\x02\x90" + + "\u02AD\x03\x02\x02\x02\x92\u02B8\x03\x02\x02\x02\x94\u02C3\x03\x02\x02" + + "\x02\x96\u02CE\x03\x02\x02\x02\x98\u02D9\x03\x02\x02\x02\x9A\u02E4\x03" + + "\x02\x02\x02\x9C\u02EF\x03\x02\x02\x02\x9E\u0301\x03\x02\x02\x02\xA0\u0308" + + "\x03\x02\x02\x02\xA2\u030A\x03\x02\x02\x02\xA4\u030C\x03\x02\x02\x02\xA6" + + "\u0317\x03\x02\x02\x02\xA8\u0319\x03\x02\x02\x02\xAA\u031B\x03\x02\x02" + + "\x02\xAC\u0329\x03\x02\x02\x02\xAE\u032E\x03\x02\x02\x02\xB0\xB2\x05\x04" + + "\x03\x02\xB1\xB0\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\x03\x02" + + "\x02\x02\xB3\xB4\x07\x02\x02\x03\xB4\x03\x03\x02\x02\x02\xB5\xB7\x05\x06" + + "\x04\x02\xB6\xB5\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xB6\x03\x02" + + "\x02\x02\xB8\xB9\x03\x02\x02\x02\xB9\x05\x03\x02\x02\x02\xBA\xBB\x05\b" + + "\x05\x02\xBB\x07\x03\x02\x02\x02\xBC\xBE\x05\n\x06\x02\xBD\xBC\x03\x02" + + "\x02\x02\xBE\xBF\x03\x02\x02\x02\xBF\xBD\x03\x02\x02\x02\xBF\xC0\x03\x02" + + "\x02\x02\xC0\t\x03\x02\x02\x02\xC1\xC5\x052\x1A\x02\xC2\xC5\x05\f\x07" + + "\x02\xC3\xC5\x07%\x02\x02\xC4\xC1\x03\x02\x02\x02\xC4\xC2\x03\x02\x02" + + "\x02\xC4\xC3\x03\x02\x02\x02\xC5\v\x03\x02\x02\x02\xC6\xC7\x05\x0E\b\x02" + + "\xC7\xC8\x07%\x02\x02\xC8\xCD\x03\x02\x02\x02\xC9\xCD\x05\x1A\x0E\x02" + + "\xCA\xCD\x05 \x11\x02\xCB\xCD\x05(\x15\x02\xCC\xC6\x03\x02\x02\x02\xCC" + + "\xC9\x03\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCC\xCB\x03\x02\x02\x02\xCD" + + "\r\x03\x02\x02\x02\xCE\xCF\x05\x10\t\x02\xCF\xD0\x05\x12\n\x02\xD0\x0F" + + "\x03\x02\x02\x02\xD1\xD2\t\x02\x02\x02\xD2\x11\x03\x02\x02\x02\xD3\xD4" + + "\x05\x16\f\x02\xD4\xD5\x07'\x02\x02\xD5\xD8\x05\xA6T\x02\xD6\xD7\x07" + + ":\x02\x02\xD7\xD9\x05\x14\v\x02\xD8\xD6\x03\x02\x02\x02\xD8\xD9\x03\x02" + + "\x02\x02\xD9\x13\x03\x02\x02\x02\xDA\xDB\x05\xA0Q\x02\xDB\x15\x03\x02" + + "\x02\x02\xDC\xDD\x05\x18\r\x02\xDD\x17\x03\x02\x02\x02\xDE\xDF\x07N\x02" + + "\x02\xDF\x19\x03\x02\x02\x02\xE0\xE1\x07\x16\x02\x02\xE1\xE2\x05\x16\f" + + "\x02\xE2\xE4\x07(\x02\x02\xE3\xE5\x05\x1C\x0F\x02\xE4\xE3\x03\x02\x02" + + "\x02\xE4\xE5\x03\x02\x02\x02\xE5\xE6\x03\x02\x02\x02\xE6\xE7\x07)\x02" + + "\x02\xE7\xE8\x07\x19\x02\x02\xE8\xEA\x05\xA6T\x02\xE9\xEB\x054\x1B\x02" + + "\xEA\xE9\x03\x02\x02\x02\xEA\xEB\x03\x02\x02\x02\xEB\x1B\x03\x02\x02\x02" + + "\xEC\xF1\x05\x1E\x10\x02\xED\xEE\x07$\x02\x02\xEE\xF0\x05\x1E\x10\x02" + + "\xEF\xED\x03\x02\x02\x02\xF0\xF3\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02" + + "\xF1\xF2\x03\x02\x02\x02\xF2\x1D\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + + "\xF4\xF5\x05\x16\f\x02\xF5\xF6\x07'\x02\x02\xF6\xF7\x05\xA6T\x02\xF7" + + "\x1F\x03\x02\x02\x02\xF8\xF9\x07\x1B\x02\x02\xF9\xFA\x05\x16\f\x02\xFA" + + '\xFE\x07-\x02\x02\xFB\xFD\x05"\x12\x02\xFC\xFB\x03\x02\x02\x02\xFD\u0100' + + "\x03\x02\x02\x02\xFE\xFC\x03\x02\x02\x02\xFE\xFF\x03\x02\x02\x02\xFF\u0101" + + "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0101\u0102\x07.\x02\x02\u0102" + + "!\x03\x02\x02\x02\u0103\u0106\x05$\x13\x02\u0104\u0106\x05&\x14\x02\u0105" + + "\u0103\x03\x02\x02\x02\u0105\u0104\x03\x02\x02\x02\u0106#\x03\x02\x02" + + "\x02\u0107\u0108\x05\x16\f\x02\u0108\u0109\x07'\x02\x02\u0109\u010A\x05" + + "\xA6T\x02\u010A\u010B\x07%\x02\x02\u010B%\x03\x02\x02\x02\u010C\u010D" + + "\x05\x16\f\x02\u010D\u010F\x07(\x02\x02\u010E\u0110\x05\x1C\x0F\x02\u010F" + + "\u010E\x03\x02\x02\x02\u010F\u0110\x03\x02\x02\x02\u0110\u0111\x03\x02" + + "\x02\x02\u0111\u0112\x07)\x02\x02\u0112\u0113\x07'\x02\x02\u0113\u0114" + + "\x05\xA6T\x02\u0114\u0115\x07%\x02\x02\u0115'\x03\x02\x02\x02\u0116\u0117" + + "\x07\x1A\x02\x02\u0117\u0118\x05\x16\f\x02\u0118\u011D\x07-\x02\x02\u0119" + + "\u011C\x05*\x16\x02\u011A\u011C\x07%\x02\x02\u011B\u0119\x03\x02\x02\x02" + + "\u011B\u011A\x03\x02\x02\x02\u011C\u011F\x03\x02\x02\x02\u011D\u011B\x03" + + "\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E\u0120\x03\x02\x02\x02\u011F" + + "\u011D\x03\x02\x02\x02\u0120\u0121\x07.\x02\x02\u0121)\x03\x02\x02\x02" + + "\u0122\u0126\x05,\x17\x02\u0123\u0126\x05.\x18\x02\u0124\u0126\x050\x19" + + "\x02\u0125\u0122\x03\x02\x02\x02\u0125\u0123\x03\x02\x02\x02\u0125\u0124" + + "\x03\x02\x02\x02\u0126+\x03\x02\x02\x02\u0127\u0128\x05\x16\f\x02\u0128" + + "\u0129\x07'\x02\x02\u0129\u012A\x05\xA6T\x02\u012A-\x03\x02\x02\x02\u012B" + + "\u012C\x05\x16\f\x02\u012C\u012E\x07(\x02\x02\u012D\u012F\x05\x1C\x0F" + + "\x02\u012E\u012D\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F\u0130" + + "\x03\x02\x02\x02\u0130\u0131\x07)\x02\x02\u0131\u0132\x07'\x02\x02\u0132" + + "\u0134\x05\xA6T\x02\u0133\u0135\x054\x1B\x02\u0134\u0133\x03\x02\x02\x02" + + "\u0134\u0135\x03\x02\x02\x02\u0135/\x03\x02\x02\x02\u0136\u0137\x07\x1C" + + "\x02\x02\u0137\u0139\x07(\x02\x02\u0138\u013A\x05\x1C\x0F\x02\u0139\u0138" + + "\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02" + + "\u013B\u013C\x07)\x02\x02\u013C\u013D\x054\x1B\x02\u013D1\x03\x02\x02" + + "\x02\u013E\u0145\x056\x1C\x02\u013F\u0145\x058\x1D\x02\u0140\u0145\x05" + + "@!\x02\u0141\u0145\x05H%\x02\u0142\u0145\x05J&\x02\u0143\u0145\x054\x1B" + + "\x02\u0144\u013E\x03\x02\x02\x02\u0144\u013F\x03\x02\x02\x02\u0144\u0140" + + "\x03\x02\x02\x02\u0144\u0141\x03\x02\x02\x02\u0144\u0142\x03\x02\x02\x02" + + "\u0144\u0143\x03\x02\x02\x02\u01453\x03\x02\x02\x02\u0146\u0147\x06\x1B" + + "\x02\x02\u0147\u0149\x07-\x02\x02\u0148\u014A\x05\b\x05\x02\u0149\u0148" + + "\x03\x02\x02\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014B\x03\x02\x02\x02" + + "\u014B\u014C\x07.\x02\x02\u014C5\x03\x02\x02\x02\u014D\u014E\b\x1C\x01" + + "\x02\u014E\u014F\x05\xA4S\x02\u014F\u0150\x07%\x02\x02\u0150\u0151\b\x1C" + + "\x01\x02\u01517\x03\x02\x02\x02\u0152\u0155\x05:\x1E\x02\u0153\u0155\x05" + + "<\x1F\x02\u0154\u0152\x03\x02\x02\x02\u0154\u0153\x03\x02\x02\x02\u0155" + + "9\x03\x02\x02\x02\u0156\u0157\x07\x12\x02\x02\u0157\u0158\x07(\x02\x02" + + "\u0158\u0159\x05\xA4S\x02\u0159\u015A\x07)\x02\x02\u015A\u015D\x052\x1A" + + "\x02\u015B\u015C\x07\x13\x02\x02\u015C\u015E\x052\x1A\x02\u015D\u015B" + + "\x03\x02\x02\x02\u015D\u015E\x03\x02\x02\x02\u015E;\x03\x02\x02\x02\u015F" + + "\u0160\x07\v\x02\x02\u0160\u0161\x07(\x02\x02\u0161\u0162\x05\xA4S\x02" + + "\u0162\u0163\x07)\x02\x02\u0163\u0167\x07-\x02\x02\u0164\u0166\x05> \x02" + + "\u0165\u0164\x03\x02\x02\x02\u0166\u0169\x03\x02\x02\x02\u0167\u0165\x03" + + "\x02\x02\x02\u0167\u0168\x03\x02\x02\x02\u0168\u016A\x03\x02\x02\x02\u0169" + + "\u0167\x03\x02\x02\x02\u016A\u016B\x07.\x02\x02\u016B=\x03\x02\x02\x02" + + "\u016C\u016D\x07\f\x02\x02\u016D\u016E\x05\xA4S\x02\u016E\u016F\x07'" + + "\x02\x02\u016F\u0170\x052\x1A\x02\u0170\u0175\x03\x02\x02\x02\u0171\u0172" + + "\x07\r\x02\x02\u0172\u0173\x07'\x02\x02\u0173\u0175\x052\x1A\x02\u0174" + + "\u016C\x03\x02\x02\x02\u0174\u0171\x03\x02\x02\x02\u0175?\x03\x02\x02" + + '\x02\u0176\u017A\x05B"\x02\u0177\u017A\x05D#\x02\u0178\u017A\x05F$\x02' + + "\u0179\u0176\x03\x02\x02\x02\u0179\u0177\x03\x02\x02\x02\u0179\u0178\x03" + + "\x02\x02\x02\u017AA\x03\x02\x02\x02\u017B\u017C\x07\x14\x02\x02\u017C" + + "\u0183\x07(\x02\x02\u017D\u0180\x05\x0E\b\x02\u017E\u0180\x05\xA4S\x02" + + "\u017F\u017D\x03\x02\x02\x02\u017F\u017E\x03\x02\x02\x02\u0180\u0181\x03" + + '\x02\x02\x02\u0181\u0182\b"\x01\x02\u0182\u0184\x03\x02\x02\x02\u0183' + + "\u017F\x03\x02\x02\x02\u0183\u0184\x03\x02\x02\x02\u0184\u0185\x03\x02" + + "\x02\x02\u0185\u0189\x07%\x02\x02\u0186\u0187\x05\xA4S\x02\u0187\u0188" + + '\b"\x01\x02\u0188\u018A\x03\x02\x02\x02\u0189\u0186\x03\x02\x02\x02\u0189' + + "\u018A\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02\u018B\u018F\x07%\x02" + + '\x02\u018C\u018D\x05\xA4S\x02\u018D\u018E\b"\x01\x02\u018E\u0190\x03' + + "\x02\x02\x02\u018F\u018C\x03\x02\x02\x02\u018F\u0190\x03\x02\x02\x02\u0190" + + "\u0191\x03\x02\x02\x02\u0191\u0192\x07)\x02\x02\u0192\u0193\x052\x1A\x02" + + "\u0193C\x03\x02\x02\x02\u0194\u0195\x07\x11\x02\x02\u0195\u0196\x07(\x02" + + "\x02\u0196\u0197\x05\xA4S\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05" + + "2\x1A\x02\u0199E\x03\x02\x02\x02\u019A\u019B\x07\x10\x02\x02\u019B\u019C" + + "\x052\x1A\x02\u019C\u019D\x07\x11\x02\x02\u019D\u019E\x07(\x02\x02\u019E" + + "\u019F\x05\xA4S\x02\u019F\u01A0\x07)\x02\x02\u01A0\u01A1\x07%\x02\x02" + + "\u01A1G\x03\x02\x02\x02\u01A2\u01A3\t\x03\x02\x02\u01A3\u01A4\x07%\x02" + + "\x02\u01A4I\x03\x02\x02\x02\u01A5\u01A7\x07\x17\x02\x02\u01A6\u01A8\x05" + + "\xA4S\x02\u01A7\u01A6\x03\x02\x02\x02\u01A7\u01A8\x03\x02\x02\x02\u01A8" + + "\u01A9\x03\x02\x02\x02\u01A9\u01AA\x07%\x02\x02\u01AAK\x03\x02\x02\x02" + + "\u01AB\u01B6\x05P)\x02\u01AC\u01B6\x05N(\x02\u01AD\u01B6\x05d3\x02\u01AE" + + "\u01B6\x05f4\x02\u01AF\u01B6\x05R*\x02\u01B0\u01B6\x05T+\x02\u01B1\u01B6" + + "\x05Z.\x02\u01B2\u01B6\x05\\/\x02\u01B3\u01B6\x05b2\x02\u01B4\u01B6\x05" + + "j6\x02\u01B5\u01AB\x03\x02\x02\x02\u01B5\u01AC\x03\x02\x02\x02\u01B5\u01AD" + + "\x03\x02\x02\x02\u01B5\u01AE\x03\x02\x02\x02\u01B5\u01AF\x03\x02\x02\x02" + + "\u01B5\u01B0\x03\x02\x02\x02\u01B5\u01B1\x03\x02\x02\x02\u01B5\u01B2\x03" + + "\x02\x02\x02\u01B5\u01B3\x03\x02\x02\x02\u01B5\u01B4\x03\x02\x02\x02\u01B6" + + "M\x03\x02\x02\x02\u01B7\u01B9\x07(\x02\x02\u01B8\u01BA\x05\x1C\x0F\x02" + + "\u01B9\u01B8\x03\x02\x02\x02\u01B9\u01BA\x03\x02\x02\x02\u01BA\u01BB\x03" + + "\x02\x02\x02\u01BB\u01BC\x07)\x02\x02\u01BC\u01BD\x07'\x02\x02\u01BD" + + "\u01BE\x05\xA6T\x02\u01BE\u01C1\x07\x19\x02\x02\u01BF\u01C2\x05\xA4S\x02" + + "\u01C0\u01C2\x054\x1B\x02\u01C1\u01BF\x03\x02\x02\x02\u01C1\u01C0\x03" + + "\x02\x02\x02\u01C2O\x03\x02\x02\x02\u01C3\u01C4\x07(\x02\x02\u01C4\u01C5" + + "\x05\xA4S\x02\u01C5\u01C6\x07)\x02\x02\u01C6Q\x03\x02\x02\x02\u01C7\u01C8" + + "\t\x04\x02\x02\u01C8S\x03\x02\x02\x02\u01C9\u01CA\x05V,\x02\u01CAU\x03" + + "\x02\x02\x02\u01CB\u01CC\x07N\x02\x02\u01CCW\x03\x02\x02\x02\u01CD\u01D0" + + "\x05V,\x02\u01CE\u01D0\x05Z.\x02\u01CF\u01CD\x03\x02\x02\x02\u01CF\u01CE" + + "\x03\x02\x02\x02\u01D0Y\x03\x02\x02\x02\u01D1\u01D2\t\x05\x02\x02\u01D2" + + "[\x03\x02\x02\x02\u01D3\u01D7\x07U\x02\x02\u01D4\u01D6\x05^0\x02\u01D5" + + "\u01D4\x03\x02\x02\x02\u01D6\u01D9\x03\x02\x02\x02\u01D7\u01D5\x03\x02" + + "\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8\u01DA\x03\x02\x02\x02\u01D9" + + "\u01D7\x03\x02\x02\x02\u01DA\u01E4\x07W\x02\x02\u01DB\u01DF\x07V\x02\x02" + + "\u01DC\u01DE\x05`1\x02\u01DD\u01DC\x03\x02\x02\x02\u01DE\u01E1\x03\x02" + + "\x02\x02\u01DF\u01DD\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0" + + "\u01E2\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E2\u01E4\x07Y\x02" + + "\x02\u01E3\u01D3\x03\x02\x02\x02\u01E3\u01DB\x03\x02\x02\x02\u01E4]\x03" + + "\x02\x02\x02\u01E5\u01EC\x07X\x02\x02\u01E6\u01E8\x07\x03\x02\x02\u01E7" + + "\u01E9\x05\xA4S\x02\u01E8\u01E7\x03\x02\x02\x02\u01E8\u01E9\x03\x02\x02" + + "\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EC\x07,\x02\x02\u01EB\u01E5" + + "\x03\x02\x02\x02\u01EB\u01E6\x03\x02\x02\x02\u01EC_\x03\x02\x02\x02\u01ED" + + "\u01F4\x07Z\x02\x02\u01EE\u01F0\x07\x03\x02\x02\u01EF\u01F1\x05\xA4S\x02" + + "\u01F0\u01EF\x03\x02\x02\x02\u01F0\u01F1\x03\x02\x02\x02\u01F1\u01F2\x03" + + "\x02\x02\x02\u01F2\u01F4\x07,\x02\x02\u01F3\u01ED\x03\x02\x02\x02\u01F3" + + "\u01EE\x03\x02\x02\x02\u01F4a\x03\x02\x02\x02\u01F5\u01F6\t\x06\x02\x02" + + "\u01F6c\x03\x02\x02\x02\u01F7\u0200\x07*\x02\x02\u01F8\u01FD\x05\xA4S" + + "\x02\u01F9\u01FA\x07$\x02\x02\u01FA\u01FC\x05\xA4S\x02\u01FB\u01F9\x03" + + "\x02\x02\x02\u01FC\u01FF\x03\x02\x02\x02\u01FD\u01FB\x03\x02\x02\x02\u01FD" + + "\u01FE\x03\x02\x02\x02\u01FE\u0201\x03\x02\x02\x02\u01FF\u01FD\x03\x02" + + "\x02\x02\u0200\u01F8\x03\x02\x02\x02\u0200\u0201\x03\x02\x02\x02\u0201" + + "\u0203\x03\x02\x02\x02\u0202\u0204\x07$\x02\x02\u0203\u0202\x03\x02\x02" + + "\x02\u0203\u0204\x03\x02\x02\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0206" + + "\x07+\x02\x02\u0206e\x03\x02\x02\x02\u0207\u0210\x07-\x02\x02\u0208\u020D" + + "\x05h5\x02\u0209\u020A\x07$\x02\x02\u020A\u020C\x05h5\x02\u020B\u0209" + + "\x03\x02\x02\x02\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02" + + "\u020D\u020E\x03\x02\x02\x02"; private static readonly _serializedATNSegment1: string = - "\x03\x02\x02\x02\u020F\u0211\x03\x02\x02\x02\u0210\u0212\x07$\x02\x02" + - "\u0211\u0210\x03\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212\u0213\x03" + - "\x02\x02\x02\u0213\u0214\x07.\x02\x02\u0214g\x03\x02\x02\x02\u0215\u0216" + - "\x05X-\x02\u0216\u0217\x07'\x02\x02\u0217\u0218\x05\xA2R\x02\u0218i\x03" + - "\x02\x02\x02\u0219\u021A\t\x07\x02\x02\u021Ak\x03\x02\x02\x02\u021B\u021C" + - "\b7\x01\x02\u021C\u0230\x05L'\x02\u021D\u021E\x07\x18\x02\x02\u021E\u021F" + - "\x05l7\x02\u021F\u0221\x07(\x02\x02\u0220\u0222\x05n8\x02\u0221\u0220" + - "\x03\x02\x02\x02\u0221\u0222\x03\x02\x02\x02\u0222\u0223\x03\x02\x02\x02" + - "\u0223\u0224\x07)\x02\x02\u0224\u0225\b7\x01\x02\u0225\u0230\x03\x02\x02" + - "\x02\u0226\u0227\x07\x1D\x02\x02\u0227\u0228\x05\xA4S\x02\u0228\u022A" + - "\x07(\x02\x02\u0229\u022B\x05n8\x02\u022A\u0229\x03\x02\x02\x02\u022A" + - "\u022B\x03\x02\x02\x02\u022B\u022C\x03\x02\x02\x02\u022C\u022D\x07)\x02" + - "\x02\u022D\u022E\b7\x01\x02\u022E\u0230\x03\x02\x02\x02\u022F\u021B\x03" + - "\x02\x02\x02\u022F\u021D\x03\x02\x02\x02\u022F\u0226\x03\x02\x02\x02\u0230" + - "\u0246\x03\x02\x02\x02\u0231\u0232\f\b\x02\x02\u0232\u0233\x05p9\x02\u0233" + - "\u0234\b7\x01\x02\u0234\u0245\x03\x02\x02\x02\u0235\u0236\f\x07\x02\x02" + - "\u0236\u0237\x05r:\x02\u0237\u0238\b7\x01\x02\u0238\u0245\x03\x02\x02" + - "\x02\u0239\u023A\f\x06\x02\x02\u023A\u023B\x05t;\x02\u023B\u023C\b7\x01" + - "\x02\u023C\u0245\x03\x02\x02\x02\u023D\u023E\f\x05\x02\x02\u023E\u0240" + - "\x07(\x02\x02\u023F\u0241\x05n8\x02\u0240\u023F\x03\x02\x02\x02\u0240" + - "\u0241\x03\x02\x02\x02\u0241\u0242\x03\x02\x02\x02\u0242\u0243\x07)\x02" + - "\x02\u0243\u0245\b7\x01\x02\u0244\u0231\x03\x02\x02\x02\u0244\u0235\x03" + - "\x02\x02\x02\u0244\u0239\x03\x02\x02\x02\u0244\u023D\x03\x02\x02\x02\u0245" + - "\u0248\x03\x02\x02\x02\u0246\u0244\x03\x02\x02\x02\u0246\u0247\x03\x02" + - "\x02\x02\u0247m\x03\x02\x02\x02\u0248\u0246\x03\x02\x02\x02\u0249\u024E" + - "\x05\x9EP\x02\u024A\u024B\x07$\x02\x02\u024B\u024D\x05\x9EP\x02\u024C" + - "\u024A\x03\x02\x02\x02\u024D\u0250\x03\x02\x02\x02\u024E\u024C\x03\x02" + - "\x02\x02\u024E\u024F\x03\x02\x02\x02\u024Fo\x03\x02\x02\x02\u0250\u024E" + - "\x03\x02\x02\x02\u0251\u0252\x07M\x02\x02\u0252\u0253\x05V,\x02\u0253" + - "q\x03\x02\x02\x02\u0254\u0255\x07*\x02\x02\u0255\u0256\x05\xA2R\x02\u0256" + - "\u0257\x07+\x02\x02\u0257s\x03\x02\x02\x02\u0258\u025C\x07*\x02\x02\u0259" + - "\u025A\x05\xA2R\x02\u025A\u025B\b;\x01\x02\u025B\u025D\x03\x02\x02\x02" + - "\u025C\u0259\x03\x02\x02\x02\u025C\u025D\x03\x02\x02\x02\u025D\u025E\x03" + - "\x02\x02\x02\u025E\u0262\x07'\x02\x02\u025F\u0260\x05\xA2R\x02\u0260" + - "\u0261\b;\x01\x02\u0261\u0263\x03\x02\x02\x02\u0262\u025F\x03\x02\x02" + - "\x02\u0262\u0263\x03\x02\x02\x02\u0263\u0264\x03\x02\x02\x02\u0264\u0265" + - "\x07+\x02\x02\u0265u\x03\x02\x02\x02\u0266\u0269\x05l7\x02\u0267\u0269" + - "\x05x=\x02\u0268\u0266\x03\x02\x02\x02\u0268\u0267\x03\x02\x02\x02\u0269" + - "w\x03\x02\x02\x02\u026A\u026B\x05l7\x02\u026B\u026C\x05\x80A\x02\u026C" + - "y\x03\x02\x02\x02\u026D\u0271\x05v<\x02\u026E\u0271\x05|?\x02\u026F\u0271" + - "\x05~@\x02\u0270\u026D\x03\x02\x02\x02\u0270\u026E\x03\x02\x02\x02\u0270" + - "\u026F\x03\x02\x02\x02\u0271{\x03\x02\x02\x02\u0272\u0273\x05\x80A\x02" + - "\u0273\u0274\x05v<\x02\u0274}\x03\x02\x02\x02\u0275\u0276\x05\x82B\x02" + - "\u0276\u0277\x05v<\x02\u0277\x7F\x03\x02\x02\x02\u0278\u0279\t\b\x02\x02" + - "\u0279\x81\x03\x02\x02\x02\u027A\u027B\t\t\x02\x02\u027B\x83\x03\x02\x02" + - "\x02\u027C\u0282\x05z>\x02\u027D\u027E\x05z>\x02\u027E\u027F\x07\t\x02" + - "\x02\u027F\u0280\x05\xA4S\x02\u0280\u0282\x03\x02\x02\x02\u0281\u027C" + - "\x03\x02\x02\x02\u0281\u027D\x03\x02\x02\x02\u0282\x85\x03\x02\x02\x02" + - "\u0283\u0284\bD\x01\x02\u0284\u0285\x05\x84C\x02\u0285\u028B\x03\x02\x02" + - "\x02\u0286\u0287\f\x03\x02\x02\u0287\u0288\t\n\x02\x02\u0288\u028A\x05" + - "\x84C\x02\u0289\u0286\x03\x02\x02\x02\u028A\u028D\x03\x02\x02\x02\u028B" + - "\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C\x87\x03\x02\x02" + - "\x02\u028D\u028B\x03\x02\x02\x02\u028E\u028F\bE\x01\x02\u028F\u0290\x05" + - "\x86D\x02\u0290\u0296\x03\x02\x02\x02\u0291\u0292\f\x03\x02\x02\u0292" + - "\u0293\t\v\x02\x02\u0293\u0295\x05\x86D\x02\u0294\u0291\x03\x02\x02\x02" + - "\u0295\u0298\x03\x02\x02\x02\u0296\u0294\x03\x02\x02\x02\u0296\u0297\x03" + - "\x02\x02\x02\u0297\x89\x03\x02\x02\x02\u0298\u0296\x03\x02\x02\x02\u0299" + - "\u029A\bF\x01\x02\u029A\u029B\x05\x88E\x02\u029B\u02A2\x03\x02\x02\x02" + - "\u029C\u029D\f\x03\x02\x02\u029D\u029E\x05\x8CG\x02\u029E\u029F\x05\x92" + - "J\x02\u029F\u02A1\x03\x02\x02\x02\u02A0\u029C\x03\x02\x02\x02\u02A1\u02A4" + - "\x03\x02\x02\x02\u02A2\u02A0\x03\x02\x02\x02\u02A2\u02A3\x03\x02\x02\x02" + - "\u02A3\x8B\x03\x02\x02\x02\u02A4\u02A2\x03\x02\x02\x02\u02A5\u02A6\t\f" + - "\x02\x02\u02A6\x8D\x03\x02\x02\x02\u02A7\u02A8\bH\x01\x02\u02A8\u02A9" + - "\x05\x8AF\x02\u02A9\u02AF\x03\x02\x02\x02\u02AA\u02AB\f\x03\x02\x02\u02AB" + - "\u02AC\t\r\x02\x02\u02AC\u02AE\x05\x8AF\x02\u02AD\u02AA\x03\x02\x02\x02" + - "\u02AE\u02B1\x03\x02\x02\x02\u02AF\u02AD\x03\x02\x02\x02\u02AF\u02B0\x03" + - "\x02\x02\x02\u02B0\x8F\x03\x02\x02\x02\u02B1\u02AF\x03\x02\x02\x02\u02B2" + - "\u02B3\bI\x01\x02\u02B3\u02B4\x05\x8EH\x02\u02B4\u02BA\x03\x02\x02\x02" + - "\u02B5\u02B6\f\x03\x02\x02\u02B6\u02B7\t\x0E\x02\x02\u02B7\u02B9\x05\x8E" + - "H\x02\u02B8\u02B5\x03\x02\x02\x02\u02B9\u02BC\x03\x02\x02\x02\u02BA\u02B8" + - "\x03\x02\x02\x02\u02BA\u02BB\x03\x02\x02\x02\u02BB\x91\x03\x02\x02\x02" + - "\u02BC\u02BA\x03\x02\x02\x02\u02BD\u02BE\bJ\x01\x02\u02BE\u02BF\x05\x90" + - "I\x02\u02BF\u02C5\x03\x02\x02\x02\u02C0\u02C1\f\x03\x02\x02\u02C1\u02C2" + - "\x07F\x02\x02\u02C2\u02C4\x05\x90I\x02\u02C3\u02C0\x03\x02\x02\x02\u02C4" + - "\u02C7\x03\x02\x02\x02\u02C5\u02C3\x03\x02\x02\x02\u02C5\u02C6\x03\x02" + - "\x02\x02\u02C6\x93\x03\x02\x02\x02\u02C7\u02C5\x03\x02\x02\x02\u02C8\u02C9" + - "\bK\x01\x02\u02C9\u02CA\x05\x92J\x02\u02CA\u02D0\x03\x02\x02\x02\u02CB" + - "\u02CC\f\x03\x02\x02\u02CC\u02CD\x07H\x02\x02\u02CD\u02CF\x05\x92J\x02" + - "\u02CE\u02CB\x03\x02\x02\x02\u02CF\u02D2\x03\x02\x02\x02\u02D0\u02CE\x03" + - "\x02\x02\x02\u02D0\u02D1\x03\x02\x02\x02\u02D1\x95\x03\x02\x02\x02\u02D2" + - "\u02D0\x03\x02\x02\x02\u02D3\u02D4\bL\x01\x02\u02D4\u02D5\x05\x94K\x02" + - "\u02D5\u02DB\x03\x02\x02\x02\u02D6\u02D7\f\x03\x02\x02\u02D7\u02D8\x07" + - "G\x02\x02\u02D8\u02DA\x05\x94K\x02\u02D9\u02D6\x03\x02\x02\x02\u02DA\u02DD" + - "\x03\x02\x02\x02\u02DB\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02\x02" + - "\u02DC\x97\x03\x02\x02\x02\u02DD\u02DB\x03\x02\x02\x02\u02DE\u02DF\bM" + - "\x01\x02\u02DF\u02E0\x05\x96L\x02\u02E0\u02E6\x03\x02\x02\x02\u02E1\u02E2" + - "\f\x03\x02\x02\u02E2\u02E3\x077\x02\x02\u02E3\u02E5\x05\x96L\x02\u02E4" + - "\u02E1\x03\x02\x02\x02\u02E5\u02E8\x03\x02\x02\x02\u02E6\u02E4\x03\x02" + - "\x02\x02\u02E6\u02E7\x03\x02\x02\x02\u02E7\x99\x03\x02\x02\x02\u02E8\u02E6" + - "\x03\x02\x02\x02\u02E9\u02EA\bN\x01\x02\u02EA\u02EB\x05\x98M\x02\u02EB" + - "\u02F1\x03\x02\x02\x02\u02EC\u02ED\f\x03\x02\x02\u02ED\u02EE\x078\x02" + - "\x02\u02EE\u02F0\x05\x98M\x02\u02EF\u02EC\x03\x02\x02\x02\u02F0\u02F3" + - "\x03\x02\x02\x02\u02F1\u02EF\x03\x02\x02\x02\u02F1\u02F2\x03\x02\x02\x02" + - "\u02F2\x9B\x03\x02\x02\x02\u02F3\u02F1\x03\x02\x02\x02\u02F4\u02FC\x05" + - "\x9AN\x02\u02F5\u02F6\x05\x9AN\x02\u02F6\u02F7\x07&\x02\x02\u02F7\u02F8" + - "\x05\x9CO\x02\u02F8\u02F9\x07'\x02\x02\u02F9\u02FA\x05\x9CO\x02\u02FA" + - "\u02FC\x03\x02\x02\x02\u02FB\u02F4\x03\x02\x02\x02\u02FB\u02F5\x03\x02" + - "\x02\x02\u02FC\x9D\x03\x02\x02\x02\u02FD\u0303\x05\x9CO\x02\u02FE\u02FF" + - "\x05l7\x02\u02FF\u0300\x05\xA0Q\x02\u0300\u0301\x05\x9EP\x02\u0301\u0303" + - "\x03\x02\x02\x02\u0302\u02FD\x03\x02\x02\x02\u0302\u02FE\x03\x02\x02\x02" + - "\u0303\x9F\x03\x02\x02\x02\u0304\u0305\t\x0F\x02\x02\u0305\xA1\x03\x02" + - "\x02\x02\u0306\u030B\x05\x9EP\x02\u0307\u0308\x07$\x02\x02\u0308\u030A" + - "\x05\x9EP\x02\u0309\u0307\x03\x02\x02\x02\u030A\u030D\x03\x02\x02\x02" + - "\u030B\u0309\x03\x02\x02\x02\u030B\u030C\x03\x02\x02\x02\u030C\xA3\x03" + - "\x02\x02\x02\u030D\u030B\x03\x02\x02\x02\u030E\u0312\x05\xA6T\x02\u030F" + - "\u0312\x05\xA8U\x02\u0310\u0312\x05\xAAV\x02\u0311\u030E\x03\x02\x02\x02" + - "\u0311\u030F\x03\x02\x02\x02\u0311\u0310\x03\x02\x02\x02\u0312\xA5\x03" + - "\x02\x02\x02\u0313\u0314\x05\xACW\x02\u0314\xA7\x03\x02\x02\x02\u0315" + - "\u0316\x05\xACW\x02\u0316\u031F\x07B\x02\x02\u0317\u031C\x05\xA4S\x02" + - "\u0318\u0319\x07$\x02\x02\u0319\u031B\x05\xA4S\x02\u031A\u0318\x03\x02" + - "\x02\x02\u031B\u031E\x03\x02\x02\x02\u031C\u031A\x03\x02\x02\x02\u031C" + - "\u031D\x03\x02\x02\x02\u031D\u0320\x03\x02\x02\x02\u031E\u031C\x03\x02" + - "\x02\x02\u031F\u0317\x03\x02\x02\x02\u031F\u0320\x03\x02\x02\x02\u0320" + - "\u0321\x03\x02\x02\x02\u0321\u0322\x07D\x02\x02\u0322\xA9\x03\x02\x02" + - "\x02\u0323\u0324\x07 \x02\x02\u0324\u0325\x07(\x02\x02\u0325\u0326\x05" + - "\xACW\x02\u0326\u0327\x07)\x02\x02\u0327\xAB\x03\x02\x02\x02\u0328\u0329" + - "\t\x10\x02\x02\u0329\xAD\x03\x02\x02\x02M\xAF\xB6\xBD\xC2\xCA\xD6\xE2" + - "\xE8\xEF\xFC\u0103\u010D\u0119\u011B\u0123\u012C\u0132\u0137\u0142\u0147" + - "\u0152\u015B\u0165\u0172\u0177\u017D\u0181\u0187\u018D\u01A5\u01B3\u01B7" + - "\u01BF\u01CD\u01D5\u01DD\u01E1\u01E6\u01E9\u01EE\u01F1\u01FB\u01FE\u0201" + - "\u020B\u020E\u0211\u0221\u022A\u022F\u0240\u0244\u0246\u024E\u025C\u0262" + - "\u0268\u0270\u0281\u028B\u0296\u02A2\u02AF\u02BA\u02C5\u02D0\u02DB\u02E6" + - "\u02F1\u02FB\u0302\u030B\u0311\u031C\u031F"; + "\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u0210\u0208\x03" + + "\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0213\x03\x02\x02\x02\u0212" + + "\u0214\x07$\x02\x02\u0213\u0212\x03\x02\x02\x02\u0213\u0214\x03\x02\x02" + + "\x02\u0214\u0215\x03\x02\x02\x02\u0215\u0216\x07.\x02\x02\u0216g\x03\x02" + + "\x02\x02\u0217\u0218\x05X-\x02\u0218\u0219\x07'\x02\x02\u0219\u021A\x05" + + "\xA4S\x02\u021Ai\x03\x02\x02\x02\u021B\u021C\t\x07\x02\x02\u021Ck\x03" + + "\x02\x02\x02\u021D\u021E\b7\x01\x02\u021E\u0232\x05L'\x02\u021F\u0220" + + "\x07\x18\x02\x02\u0220\u0221\x05l7\x02\u0221\u0223\x07(\x02\x02\u0222" + + "\u0224\x05n8\x02\u0223\u0222\x03\x02\x02\x02\u0223\u0224\x03\x02\x02\x02" + + "\u0224\u0225\x03\x02\x02\x02\u0225\u0226\x07)\x02\x02\u0226\u0227\b7\x01" + + "\x02\u0227\u0232\x03\x02\x02\x02\u0228\u0229\x07\x1D\x02\x02\u0229\u022A" + + "\x05\xA6T\x02\u022A\u022C\x07(\x02\x02\u022B\u022D\x05n8\x02\u022C\u022B" + + "\x03\x02\x02\x02\u022C\u022D\x03\x02\x02\x02\u022D\u022E\x03\x02\x02\x02" + + "\u022E\u022F\x07)\x02\x02\u022F\u0230\b7\x01\x02\u0230\u0232\x03\x02\x02" + + "\x02\u0231\u021D\x03\x02\x02\x02\u0231\u021F\x03\x02\x02\x02\u0231\u0228" + + "\x03\x02\x02\x02\u0232\u0248\x03\x02\x02\x02\u0233\u0234\f\b\x02\x02\u0234" + + "\u0235\x05p9\x02\u0235\u0236\b7\x01\x02\u0236\u0247\x03\x02\x02\x02\u0237" + + "\u0238\f\x07\x02\x02\u0238\u0239\x05r:\x02\u0239\u023A\b7\x01\x02\u023A" + + "\u0247\x03\x02\x02\x02\u023B\u023C\f\x06\x02\x02\u023C\u023D\x05t;\x02" + + "\u023D\u023E\b7\x01\x02\u023E\u0247\x03\x02\x02\x02\u023F\u0240\f\x05" + + "\x02\x02\u0240\u0242\x07(\x02\x02\u0241\u0243\x05n8\x02\u0242\u0241\x03" + + "\x02\x02\x02\u0242\u0243\x03\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244" + + "\u0245\x07)\x02\x02\u0245\u0247\b7\x01\x02\u0246\u0233\x03\x02\x02\x02" + + "\u0246\u0237\x03\x02\x02\x02\u0246\u023B\x03\x02\x02\x02\u0246\u023F\x03" + + "\x02\x02\x02\u0247\u024A\x03\x02\x02\x02\u0248\u0246\x03\x02\x02\x02\u0248" + + "\u0249\x03\x02\x02\x02\u0249m\x03\x02\x02\x02\u024A\u0248\x03\x02\x02" + + "\x02\u024B\u0250\x05\xA0Q\x02\u024C\u024D\x07$\x02\x02\u024D\u024F\x05" + + "\xA0Q\x02\u024E\u024C\x03\x02\x02\x02\u024F\u0252\x03\x02\x02\x02\u0250" + + "\u024E\x03\x02\x02\x02\u0250\u0251\x03\x02\x02\x02\u0251o\x03\x02\x02" + + "\x02\u0252\u0250\x03\x02\x02\x02\u0253\u0254\x07M\x02\x02\u0254\u0255" + + "\x05V,\x02\u0255q\x03\x02\x02\x02\u0256\u0257\x07*\x02\x02\u0257\u0258" + + "\x05\xA4S\x02\u0258\u0259\x07+\x02\x02\u0259s\x03\x02\x02\x02\u025A\u025E" + + "\x07*\x02\x02\u025B\u025C\x05\xA4S\x02\u025C\u025D\b;\x01\x02\u025D\u025F" + + "\x03\x02\x02\x02\u025E\u025B\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02" + + "\u025F\u0260\x03\x02\x02\x02\u0260\u0264\x07'\x02\x02\u0261\u0262\x05" + + "\xA4S\x02\u0262\u0263\b;\x01\x02\u0263\u0265\x03\x02\x02\x02\u0264\u0261" + + "\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02" + + "\u0266\u0267\x07+\x02\x02\u0267u\x03\x02\x02\x02\u0268\u026C\x05l7\x02" + + "\u0269\u026C\x05x=\x02\u026A\u026C\x05z>\x02\u026B\u0268\x03\x02\x02\x02" + + "\u026B\u0269\x03\x02\x02\x02\u026B\u026A\x03\x02\x02\x02\u026Cw\x03\x02" + + "\x02\x02\u026D\u026E\x05l7\x02\u026E\u026F\x05\x82B\x02\u026Fy\x03\x02" + + "\x02\x02\u0270\u0271\x07 \x02\x02\u0271\u0272\x05\xA0Q\x02\u0272{\x03" + + "\x02\x02\x02\u0273\u0277\x05v<\x02\u0274\u0277\x05~@\x02\u0275\u0277\x05" + + "\x80A\x02\u0276\u0273\x03\x02\x02\x02\u0276\u0274\x03\x02\x02\x02\u0276" + + "\u0275\x03\x02\x02\x02\u0277}\x03\x02\x02\x02\u0278\u0279\x05\x82B\x02" + + "\u0279\u027A\x05v<\x02\u027A\x7F\x03\x02\x02\x02\u027B\u027C\x05\x84C" + + "\x02\u027C\u027D\x05v<\x02\u027D\x81\x03\x02\x02\x02\u027E\u027F\t\b\x02" + + "\x02\u027F\x83\x03\x02\x02\x02\u0280\u0281\t\t\x02\x02\u0281\x85\x03\x02" + + "\x02\x02\u0282\u0288\x05|?\x02\u0283\u0284\x05|?\x02\u0284\u0285\x07\t" + + "\x02\x02\u0285\u0286\x05\xA6T\x02\u0286\u0288\x03\x02\x02\x02\u0287\u0282" + + "\x03\x02\x02\x02\u0287\u0283\x03\x02\x02\x02\u0288\x87\x03\x02\x02\x02" + + "\u0289\u028A\bE\x01\x02\u028A\u028B\x05\x86D\x02\u028B\u0291\x03\x02\x02" + + "\x02\u028C\u028D\f\x03\x02\x02\u028D\u028E\t\n\x02\x02\u028E\u0290\x05" + + "\x86D\x02\u028F\u028C\x03\x02\x02\x02\u0290\u0293\x03\x02\x02\x02\u0291" + + "\u028F\x03\x02\x02\x02\u0291\u0292\x03\x02\x02\x02\u0292\x89\x03\x02\x02" + + "\x02\u0293\u0291\x03\x02\x02\x02\u0294\u0295\bF\x01\x02\u0295\u0296\x05" + + "\x88E\x02\u0296\u029C\x03\x02\x02\x02\u0297\u0298\f\x03\x02\x02\u0298" + + "\u0299\t\v\x02\x02\u0299\u029B\x05\x88E\x02\u029A\u0297\x03\x02\x02\x02" + + "\u029B\u029E\x03\x02\x02\x02\u029C\u029A\x03\x02\x02\x02\u029C\u029D\x03" + + "\x02\x02\x02\u029D\x8B\x03\x02\x02\x02\u029E\u029C\x03\x02\x02\x02\u029F" + + "\u02A0\bG\x01\x02\u02A0\u02A1\x05\x8AF\x02\u02A1\u02A8\x03\x02\x02\x02" + + "\u02A2\u02A3\f\x03\x02\x02\u02A3\u02A4\x05\x8EH\x02\u02A4\u02A5\x05\x94" + + "K\x02\u02A5\u02A7\x03\x02\x02\x02\u02A6\u02A2\x03\x02\x02\x02\u02A7\u02AA" + + "\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02" + + "\u02A9\x8D\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02\u02AB\u02AC\t\f" + + "\x02\x02\u02AC\x8F\x03\x02\x02\x02\u02AD\u02AE\bI\x01\x02\u02AE\u02AF" + + "\x05\x8CG\x02\u02AF\u02B5\x03\x02\x02\x02\u02B0\u02B1\f\x03\x02\x02\u02B1" + + "\u02B2\t\r\x02\x02\u02B2\u02B4\x05\x8CG\x02\u02B3\u02B0\x03\x02\x02\x02" + + "\u02B4\u02B7\x03\x02\x02\x02\u02B5\u02B3\x03\x02\x02\x02\u02B5\u02B6\x03" + + "\x02\x02\x02\u02B6\x91\x03\x02\x02\x02\u02B7\u02B5\x03\x02\x02\x02\u02B8" + + "\u02B9\bJ\x01\x02\u02B9\u02BA\x05\x90I\x02\u02BA\u02C0\x03\x02\x02\x02" + + "\u02BB\u02BC\f\x03\x02\x02\u02BC\u02BD\t\x0E\x02\x02\u02BD\u02BF\x05\x90" + + "I\x02\u02BE\u02BB\x03\x02\x02\x02\u02BF\u02C2\x03\x02\x02\x02\u02C0\u02BE" + + "\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\x93\x03\x02\x02\x02" + + "\u02C2\u02C0\x03\x02\x02\x02\u02C3\u02C4\bK\x01\x02\u02C4\u02C5\x05\x92" + + "J\x02\u02C5\u02CB\x03\x02\x02\x02\u02C6\u02C7\f\x03\x02\x02\u02C7\u02C8" + + "\x07F\x02\x02\u02C8\u02CA\x05\x92J\x02\u02C9\u02C6\x03\x02\x02\x02\u02CA" + + "\u02CD\x03\x02\x02\x02\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02" + + "\x02\x02\u02CC\x95\x03\x02\x02\x02\u02CD\u02CB\x03\x02\x02\x02\u02CE\u02CF" + + "\bL\x01\x02\u02CF\u02D0\x05\x94K\x02\u02D0\u02D6\x03\x02\x02\x02\u02D1" + + "\u02D2\f\x03\x02\x02\u02D2\u02D3\x07H\x02\x02\u02D3\u02D5\x05\x94K\x02" + + "\u02D4\u02D1\x03\x02\x02\x02\u02D5\u02D8\x03\x02\x02\x02\u02D6\u02D4\x03" + + "\x02\x02\x02\u02D6\u02D7\x03\x02\x02\x02\u02D7\x97\x03\x02\x02\x02\u02D8" + + "\u02D6\x03\x02\x02\x02\u02D9\u02DA\bM\x01\x02\u02DA\u02DB\x05\x96L\x02" + + "\u02DB\u02E1\x03\x02\x02\x02\u02DC\u02DD\f\x03\x02\x02\u02DD\u02DE\x07" + + "G\x02\x02\u02DE\u02E0\x05\x96L\x02\u02DF\u02DC\x03\x02\x02\x02\u02E0\u02E3" + + "\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02" + + "\u02E2\x99\x03\x02\x02\x02\u02E3\u02E1\x03\x02\x02\x02\u02E4\u02E5\bN" + + "\x01\x02\u02E5\u02E6\x05\x98M\x02\u02E6\u02EC\x03\x02\x02\x02\u02E7\u02E8" + + "\f\x03\x02\x02\u02E8\u02E9\x077\x02\x02\u02E9\u02EB\x05\x98M\x02\u02EA" + + "\u02E7\x03\x02\x02\x02\u02EB\u02EE\x03\x02\x02\x02\u02EC\u02EA\x03\x02" + + "\x02\x02\u02EC\u02ED\x03\x02\x02\x02\u02ED\x9B\x03\x02\x02\x02\u02EE\u02EC" + + "\x03\x02\x02\x02\u02EF\u02F0\bO\x01\x02\u02F0\u02F1\x05\x9AN\x02\u02F1" + + "\u02F7\x03\x02\x02\x02\u02F2\u02F3\f\x03\x02\x02\u02F3\u02F4\x078\x02" + + "\x02\u02F4\u02F6\x05\x9AN\x02\u02F5\u02F2\x03\x02\x02\x02\u02F6\u02F9" + + "\x03\x02\x02\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7\u02F8\x03\x02\x02\x02" + + "\u02F8\x9D\x03\x02\x02\x02\u02F9\u02F7\x03\x02\x02\x02\u02FA\u0302\x05" + + "\x9CO\x02\u02FB\u02FC\x05\x9CO\x02\u02FC\u02FD\x07&\x02\x02\u02FD\u02FE" + + "\x05\x9EP\x02\u02FE\u02FF\x07'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300" + + "\u0302\x03\x02\x02\x02\u0301\u02FA\x03\x02\x02\x02\u0301\u02FB\x03\x02" + + "\x02\x02\u0302\x9F\x03\x02\x02\x02\u0303\u0309\x05\x9EP\x02\u0304\u0305" + + "\x05l7\x02\u0305\u0306\x05\xA2R\x02\u0306\u0307\x05\xA0Q\x02\u0307\u0309" + + "\x03\x02\x02\x02\u0308\u0303\x03\x02\x02\x02\u0308\u0304\x03\x02\x02\x02" + + "\u0309\xA1\x03\x02\x02\x02\u030A\u030B\t\x0F\x02\x02\u030B\xA3\x03\x02" + + "\x02\x02\u030C\u0311\x05\xA0Q\x02\u030D\u030E\x07$\x02\x02\u030E\u0310" + + "\x05\xA0Q\x02\u030F\u030D\x03\x02\x02\x02\u0310\u0313\x03\x02\x02\x02" + + "\u0311\u030F\x03\x02\x02\x02\u0311\u0312\x03\x02\x02\x02\u0312\xA5\x03" + + "\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0314\u0318\x05\xA8U\x02\u0315" + + "\u0318\x05\xAAV\x02\u0316\u0318\x05\xACW\x02\u0317\u0314\x03\x02\x02\x02" + + "\u0317\u0315\x03\x02\x02\x02\u0317\u0316\x03\x02\x02\x02\u0318\xA7\x03" + + "\x02\x02\x02\u0319\u031A\x05\xAEX\x02\u031A\xA9\x03\x02\x02\x02\u031B" + + "\u031C\x05\xAEX\x02\u031C\u0325\x07B\x02\x02\u031D\u0322\x05\xA6T\x02" + + "\u031E\u031F\x07$\x02\x02\u031F\u0321\x05\xA6T\x02\u0320\u031E\x03\x02" + + "\x02\x02\u0321\u0324\x03\x02\x02\x02\u0322\u0320\x03\x02\x02\x02\u0322" + + "\u0323\x03\x02\x02\x02\u0323\u0326\x03\x02\x02\x02\u0324\u0322\x03\x02" + + "\x02\x02\u0325\u031D\x03\x02\x02\x02\u0325\u0326\x03\x02\x02\x02\u0326" + + "\u0327\x03\x02\x02\x02\u0327\u0328\x07D\x02\x02\u0328\xAB\x03\x02\x02" + + "\x02\u0329\u032A\x07 \x02\x02\u032A\u032B\x07(\x02\x02\u032B\u032C\x05" + + "\xAEX\x02\u032C\u032D\x07)\x02\x02\u032D\xAD\x03\x02\x02\x02\u032E\u032F" + + "\t\x10\x02\x02\u032F\xAF\x03\x02\x02\x02M\xB1\xB8\xBF\xC4\xCC\xD8\xE4" + + "\xEA\xF1\xFE\u0105\u010F\u011B\u011D\u0125\u012E\u0134\u0139\u0144\u0149" + + "\u0154\u015D\u0167\u0174\u0179\u017F\u0183\u0189\u018F\u01A7\u01B5\u01B9" + + "\u01C1\u01CF\u01D7\u01DF\u01E3\u01E8\u01EB\u01F0\u01F3\u01FD\u0200\u0203" + + "\u020D\u0210\u0213\u0223\u022C\u0231\u0242\u0246\u0248\u0250\u025E\u0264" + + "\u026B\u0276\u0287\u0291\u029C\u02A8\u02B5\u02C0\u02CB\u02D6\u02E1\u02EC" + + "\u02F7\u0301\u0308\u0311\u0317\u0322\u0325"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", @@ -8284,6 +8340,9 @@ export class PostfixExpressionContext extends KipperParserRuleContext { public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext | undefined { return this.tryGetRuleContext(0, IncrementOrDecrementPostfixExpressionContext); } + public typeofExpression(): TypeofExpressionContext | undefined { + return this.tryGetRuleContext(0, TypeofExpressionContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } @@ -8349,6 +8408,42 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu } } +export class TypeofExpressionContext extends KipperParserRuleContext { + public Typeof(): TerminalNode { + return this.getToken(KipperParser.Typeof, 0); + } + public assignmentExpression(): AssignmentExpressionContext { + return this.getRuleContext(0, AssignmentExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_typeofExpression; + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterTypeofExpression) { + listener.enterTypeofExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitTypeofExpression) { + listener.exitTypeofExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitTypeofExpression) { + return visitor.visitTypeofExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class UnaryExpressionContext extends KipperParserRuleContext { public postfixExpression(): PostfixExpressionContext | undefined { return this.tryGetRuleContext(0, PostfixExpressionContext); diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 412f132c2..a9b2404f5 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -2,131 +2,132 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by @@ -1235,6 +1236,17 @@ export interface KipperParserListener extends ParseTreeListener { */ exitIncrementOrDecrementPostfixExpression?: (ctx: IncrementOrDecrementPostfixExpressionContext) => void; + /** + * Enter a parse tree produced by `KipperParser.typeofExpression`. + * @param ctx the parse tree + */ + enterTypeofExpression?: (ctx: TypeofExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.typeofExpression`. + * @param ctx the parse tree + */ + exitTypeofExpression?: (ctx: TypeofExpressionContext) => void; + /** * Enter a parse tree produced by `KipperParser.unaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index 48ad2859c..ea135bbaa 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -2,131 +2,132 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced @@ -828,6 +829,13 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitIncrementOrDecrementPostfixExpression?: (ctx: IncrementOrDecrementPostfixExpressionContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.typeofExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeofExpression?: (ctx: TypeofExpressionContext) => Result; + /** * Visit a parse tree produced by `KipperParser.unaryExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 3218ae1a2..171e6c564 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -55,7 +55,6 @@ import { InvalidUnaryExpressionTypeError, KipperError, KipperNotImplementedError, - PropertyDoesNotExistError, ReadOnlyWriteTypeError, ReferenceCanNotBeUsedAsTypeError, UnknownTypeError, diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index af7315603..9f9fe282d 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -56,7 +56,7 @@ import type { VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - NewInstantiationExpression + NewInstantiationExpression, } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 65007bae5..ee13a966b 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -62,17 +62,17 @@ import type { WhileLoopIterationStatement, } from "@kipper/core"; import { + AssignmentExpression, BuiltInTypes, CompoundStatement, Expression, getConversionFunctionIdentifier, IfStatement, - KipperTargetCodeGenerator, - VariableDeclaration, InterfaceMethodDeclaration, InterfacePropertyDeclaration, - AssignmentExpression, + KipperTargetCodeGenerator, ScopeDeclaration, + VariableDeclaration, } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; @@ -238,7 +238,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { } } - let lines: Array = [ + return [ [ "const ", identifier, @@ -250,7 +250,6 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { "])", ], ]; - return lines; }; /** diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 252165690..a9e461819 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1650,70 +1650,70 @@ describe("Core functionality", () => { ); }); - it("should be able to to create object with interface blueprint", async () => { - const fileContent = `interface Test {a: str;}; var x : Test = {a: "3"}; print(x.a);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); - assert.include( - written, - "interface Test {\n" + - " a: string;\n" + - "}\n" + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", - "Invalid TypeScript code (Expected different output)", - ); - }); + it("should be able to to create object with interface blueprint", async () => { + const fileContent = `interface Test {a: str;}; var x : Test = {a: "3"}; print(x.a);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - it("it should be able to instantiate a class with new", async () => { - const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); - assert.include( - written, - "class Test {\n" + - " a: string;\n" + - " constructor(b: string)\n" + - " {\n" + - " a = b;\n" + - " }\n" + - "}\n" + - 'let x: Test = new Test("3");\n' + - "__kipper.print(x.a);", - "Invalid TypeScript code (Expected different output)", - ); - }); + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "interface Test {\n" + + " a: string;\n" + + "}\n" + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", + "Invalid TypeScript code (Expected different output)", + ); + }); - it("it should be able to instantiate a class with new and two properties", async () => { - const fileContent = `class Test {x: str; y: num; constructor (a: str, b: num) {x = a; y = b;}}; var x : Test = new Test("hello", 42); print(x.x);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); - assert.include( - written, - "class Test {\n" + - " x: string;\n" + - " y: number;\n" + - " constructor(a: string, b: number)\n" + - " {\n" + - " x = a;\n" + - " y = b;\n" + - " }\n" + - "}\n" + - 'let x: Test = new Test("hello", 42);\n' + - "__kipper.print(x.x);", - "Invalid TypeScript code (Expected different output)", - ); - }); + it("it should be able to instantiate a class with new", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("3");\n' + + "__kipper.print(x.a);", + "Invalid TypeScript code (Expected different output)", + ); + }); + + it("it should be able to instantiate a class with new and two properties", async () => { + const fileContent = `class Test {x: str; y: num; constructor (a: str, b: num) {x = a; y = b;}}; var x : Test = new Test("hello", 42); print(x.x);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " x: string;\n" + + " y: number;\n" + + " constructor(a: string, b: number)\n" + + " {\n" + + " x = a;\n" + + " y = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("hello", 42);\n' + + "__kipper.print(x.x);", + "Invalid TypeScript code (Expected different output)", + ); + }); }); }); From 1d2d4666dff68f5eaaff86d724651acaf7b783da Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 3 Sep 2024 01:05:05 +0200 Subject: [PATCH 07/81] fix: Fixed bug caused by merge #689 --- kipper/target-js/src/code-generator.ts | 4 ++-- test/module/core/core-functionality.test.ts | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index ee13a966b..4ae1728a8 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -218,7 +218,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { if (member instanceof InterfacePropertyDeclaration) { const property = member.getSemanticData(); const type = member.getTypeSemanticData(); - const runtimeType = TargetJS.getRuntimeType(type.type); + const runtimeType = TargetJS.getRuntimeType(type.valueType); propertiesWithTypes += `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", ${runtimeType}),`; } @@ -228,7 +228,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { const params = method.parameters.map((param) => { return param.getTypeSemanticData().valueType; }); - const runtimeReturnType = TargetJS.getRuntimeType(returnType.type); + const runtimeReturnType = TargetJS.getRuntimeType(returnType.valueType); const runtimeParams = params.map((paramType) => { return `__intf_${TargetJS.getRuntimeType(paramType)}`; }); diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index a9e461819..778a4209c 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1659,13 +1659,14 @@ describe("Core functionality", () => { let written = instance.write(); assert.include( written, - "interface Test {\n" + - " a: string;\n" + - "}\n" + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", + `interface Test {\n` + + ` a: string;\n` + + `}\n` + + `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); }); From 694954ca3b913d8a4d0d5ecea3af571b1b4c80d4 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 3 Sep 2024 01:07:32 +0200 Subject: [PATCH 08/81] other: Optimised imports --- kipper/cli/src/prompt-module.ts | 2 +- .../src/evaluated-kipper-config-file.ts | 3 +- kipper/config/src/tools.ts | 2 +- kipper/core/src/compiler/ast/ast-generator.ts | 8 +- .../compiler/ast/mapping/ast-node-mapper.ts | 2 +- .../class-declaration-semantics.ts | 2 +- .../lexer-parser/antlr/KipperLexer.ts | 3 - .../lexer-parser/antlr/KipperParser.ts | 7 +- .../antlr/KipperParserListener.ts | 246 +++++++++--------- .../lexer-parser/antlr/KipperParserVisitor.ts | 246 +++++++++--------- .../core/src/compiler/optimiser/optimiser.ts | 2 +- .../semantics/analyser/semantic-checker.ts | 2 +- .../semantics/analyser/type-checker.ts | 12 +- .../semantics/symbol-table/universe-scope.ts | 12 +- .../compiler/semantics/types/built-in/any.ts | 3 +- .../target-presets/semantic-analyser.ts | 2 +- .../translation/code-generator.ts | 2 +- kipper/target-js/src/semantic-analyser.ts | 2 +- kipper/target-js/src/target.ts | 3 +- kipper/target-ts/src/code-generator.ts | 11 +- kipper/target-ts/src/target.ts | 3 +- test/module/core/core-functionality.test.ts | 14 +- 22 files changed, 291 insertions(+), 298 deletions(-) diff --git a/kipper/cli/src/prompt-module.ts b/kipper/cli/src/prompt-module.ts index 25f42f28d..bac5c27c3 100644 --- a/kipper/cli/src/prompt-module.ts +++ b/kipper/cli/src/prompt-module.ts @@ -1,6 +1,6 @@ import type { PromptModule as InquirerPromptModule } from "inquirer"; -import chalk from "chalk"; import inquirer from "inquirer"; +import chalk from "chalk"; /** * A wrapper around the inquirer prompt module to make it easier to use. diff --git a/kipper/config/src/evaluated-kipper-config-file.ts b/kipper/config/src/evaluated-kipper-config-file.ts index 532ecf6c1..1ed2ea742 100644 --- a/kipper/config/src/evaluated-kipper-config-file.ts +++ b/kipper/config/src/evaluated-kipper-config-file.ts @@ -1,5 +1,4 @@ -import type { EvaluatedConfigValue } from "./abstract"; -import type { EvaluatedConfigFile } from "./abstract"; +import type { EvaluatedConfigFile, EvaluatedConfigValue } from "./abstract"; import type * as semver from "semver"; import type { CompileConfig, KipperCompileTarget } from "@kipper/core"; diff --git a/kipper/config/src/tools.ts b/kipper/config/src/tools.ts index 38af3dbbd..aba714cab 100644 --- a/kipper/config/src/tools.ts +++ b/kipper/config/src/tools.ts @@ -1,5 +1,5 @@ import type { ConfigErrorMetaData } from "./errors"; -import { RefNotFoundError, RefInvalidPathError, FileNotFoundError, InvalidPathError } from "./errors"; +import { FileNotFoundError, InvalidPathError, RefInvalidPathError, RefNotFoundError } from "./errors"; import * as fs from "node:fs/promises"; /** diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 7c7ccfa1d..e3ef2f3ab 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -29,7 +29,10 @@ import type { ArrayPrimaryExpressionContext, BoolPrimaryExpressionContext, BracketNotationMemberAccessExpressionContext, + ClassConstructorDeclarationContext, ClassDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, CompilationUnitContext, CompoundStatementContext, DeclarationContext, @@ -76,15 +79,12 @@ import type { SwitchLabeledStatementContext, SwitchStatementContext, TangledPrimaryExpressionContext, + TypeofExpressionContext, TypeofTypeSpecifierExpressionContext, TypeSpecifierExpressionContext, VariableDeclarationContext, VoidOrNullOrUndefinedPrimaryExpressionContext, WhileLoopIterationStatementContext, - ClassPropertyDeclarationContext, - ClassMethodDeclarationContext, - ClassConstructorDeclarationContext, - TypeofExpressionContext, } from "../lexer-parser"; import type { KipperProgramContext } from "../program-ctx"; import type { CompilableASTNode } from "./compilable-ast-node"; diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index 55a5424f0..d0a4f99b4 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -71,7 +71,6 @@ import type { ASTStatementRuleName, } from "../common"; import type { Declaration, Expression, Statement } from "../nodes"; -import { TypeofExpression } from "../nodes"; import { AdditiveExpression, ArrayPrimaryExpression, @@ -121,6 +120,7 @@ import { StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, + TypeofExpression, TypeofTypeSpecifierExpression, VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts index 6bee777c2..8c060504a 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration-semantics.ts @@ -3,7 +3,7 @@ * @since 0.11.0 */ import type { TypeDeclarationSemantics } from "../type-declaration-semantics"; -import type { ClassMemberDeclaration, ClassConstructorDeclaration } from "./class-member-declaration"; +import type { ClassConstructorDeclaration, ClassMemberDeclaration } from "./class-member-declaration"; /** * Semantics for AST Node {@link ClassDeclaration}. diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index 3d59981b6..fcc1aef27 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -5,10 +5,7 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index 3c875b1e7..b436a610f 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -2,20 +2,15 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; -import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index a9b2404f5..4797a5272 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -2,132 +2,132 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; -import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; -import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; -import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; -import { ActualBitwiseAndExpressionContext } from "./KipperParser"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; -import { ActualBitwiseXorExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { NewInstantiationExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; -import { ActualBitwiseOrExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InterfaceDeclarationContext } from "./KipperParser"; -import { InterfaceMemberDeclarationContext } from "./KipperParser"; -import { InterfacePropertyDeclarationContext } from "./KipperParser"; -import { InterfaceMethodDeclarationContext } from "./KipperParser"; -import { ClassDeclarationContext } from "./KipperParser"; -import { ClassMemberDeclarationContext } from "./KipperParser"; -import { ClassPropertyDeclarationContext } from "./KipperParser"; -import { ClassMethodDeclarationContext } from "./KipperParser"; -import { ClassConstructorDeclarationContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { LambdaPrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPropertyContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { TypeofExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { BitwiseShiftExpressionContext } from "./KipperParser"; -import { BitwiseShiftOperatorsContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { BitwiseAndExpressionContext } from "./KipperParser"; -import { BitwiseXorExpressionContext } from "./KipperParser"; -import { BitwiseOrExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierExpressionContext } from "./KipperParser"; -import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; -import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualBitwiseAndExpressionContext, + ActualBitwiseOrExpressionContext, + ActualBitwiseShiftExpressionContext, + ActualBitwiseXorExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseShiftOperatorsContext, + BitwiseXorExpressionContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + ClassConstructorDeclarationContext, + ClassDeclarationContext, + ClassMemberDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierOrStringPrimaryExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + InterfaceDeclarationContext, + InterfaceMemberDeclarationContext, + InterfaceMethodDeclarationContext, + InterfacePropertyDeclarationContext, + IterationStatementContext, + JumpStatementContext, + LambdaPrimaryExpressionContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NewInstantiationExpressionContext, + NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, + ObjectPropertyContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnBitwiseAndExpressionContext, + PassOnBitwiseOrExpressionContext, + PassOnBitwiseShiftExpressionContext, + PassOnBitwiseXorExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + StorageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofExpressionContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext, +} from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index ea135bbaa..6c7f4c2dd 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -2,132 +2,132 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; -import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; -import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; -import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; -import { ActualBitwiseAndExpressionContext } from "./KipperParser"; -import { PassOnLogicalAndExpressionContext } from "./KipperParser"; -import { ActualLogicalAndExpressionContext } from "./KipperParser"; -import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; -import { ActualBitwiseXorExpressionContext } from "./KipperParser"; -import { ExternalBlockItemContext } from "./KipperParser"; -import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; -import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; -import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; -import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; -import { FunctionCallExpressionContext } from "./KipperParser"; -import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; -import { NewInstantiationExpressionContext } from "./KipperParser"; -import { PassOnAssignmentExpressionContext } from "./KipperParser"; -import { ActualAssignmentExpressionContext } from "./KipperParser"; -import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; -import { ActualCastOrConvertExpressionContext } from "./KipperParser"; -import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; -import { ActualBitwiseOrExpressionContext } from "./KipperParser"; -import { PassOnEqualityExpressionContext } from "./KipperParser"; -import { ActualEqualityExpressionContext } from "./KipperParser"; -import { PassOnAdditiveExpressionContext } from "./KipperParser"; -import { ActualAdditiveExpressionContext } from "./KipperParser"; -import { PassOnRelationalExpressionContext } from "./KipperParser"; -import { ActualRelationalExpressionContext } from "./KipperParser"; -import { PassOnConditionalExpressionContext } from "./KipperParser"; -import { ActualConditionalExpressionContext } from "./KipperParser"; -import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; -import { ActualMultiplicativeExpressionContext } from "./KipperParser"; -import { PassOnLogicalOrExpressionContext } from "./KipperParser"; -import { ActualLogicalOrExpressionContext } from "./KipperParser"; -import { CompilationUnitContext } from "./KipperParser"; -import { TranslationUnitContext } from "./KipperParser"; -import { ExternalItemContext } from "./KipperParser"; -import { BlockItemListContext } from "./KipperParser"; -import { BlockItemContext } from "./KipperParser"; -import { DeclarationContext } from "./KipperParser"; -import { VariableDeclarationContext } from "./KipperParser"; -import { StorageTypeSpecifierContext } from "./KipperParser"; -import { InitDeclaratorContext } from "./KipperParser"; -import { InitializerContext } from "./KipperParser"; -import { DeclaratorContext } from "./KipperParser"; -import { DirectDeclaratorContext } from "./KipperParser"; -import { FunctionDeclarationContext } from "./KipperParser"; -import { ParameterListContext } from "./KipperParser"; -import { ParameterDeclarationContext } from "./KipperParser"; -import { InterfaceDeclarationContext } from "./KipperParser"; -import { InterfaceMemberDeclarationContext } from "./KipperParser"; -import { InterfacePropertyDeclarationContext } from "./KipperParser"; -import { InterfaceMethodDeclarationContext } from "./KipperParser"; -import { ClassDeclarationContext } from "./KipperParser"; -import { ClassMemberDeclarationContext } from "./KipperParser"; -import { ClassPropertyDeclarationContext } from "./KipperParser"; -import { ClassMethodDeclarationContext } from "./KipperParser"; -import { ClassConstructorDeclarationContext } from "./KipperParser"; -import { StatementContext } from "./KipperParser"; -import { CompoundStatementContext } from "./KipperParser"; -import { ExpressionStatementContext } from "./KipperParser"; -import { SelectionStatementContext } from "./KipperParser"; -import { IfStatementContext } from "./KipperParser"; -import { SwitchStatementContext } from "./KipperParser"; -import { SwitchLabeledStatementContext } from "./KipperParser"; -import { IterationStatementContext } from "./KipperParser"; -import { ForLoopIterationStatementContext } from "./KipperParser"; -import { WhileLoopIterationStatementContext } from "./KipperParser"; -import { DoWhileLoopIterationStatementContext } from "./KipperParser"; -import { JumpStatementContext } from "./KipperParser"; -import { ReturnStatementContext } from "./KipperParser"; -import { PrimaryExpressionContext } from "./KipperParser"; -import { LambdaPrimaryExpressionContext } from "./KipperParser"; -import { TangledPrimaryExpressionContext } from "./KipperParser"; -import { BoolPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierPrimaryExpressionContext } from "./KipperParser"; -import { IdentifierContext } from "./KipperParser"; -import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; -import { StringPrimaryExpressionContext } from "./KipperParser"; -import { FStringPrimaryExpressionContext } from "./KipperParser"; -import { FStringSingleQuoteAtomContext } from "./KipperParser"; -import { FStringDoubleQuoteAtomContext } from "./KipperParser"; -import { NumberPrimaryExpressionContext } from "./KipperParser"; -import { ArrayPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPrimaryExpressionContext } from "./KipperParser"; -import { ObjectPropertyContext } from "./KipperParser"; -import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; -import { ComputedPrimaryExpressionContext } from "./KipperParser"; -import { ArgumentExpressionListContext } from "./KipperParser"; -import { DotNotationContext } from "./KipperParser"; -import { BracketNotationContext } from "./KipperParser"; -import { SliceNotationContext } from "./KipperParser"; -import { PostfixExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; -import { TypeofExpressionContext } from "./KipperParser"; -import { UnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; -import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; -import { IncrementOrDecrementOperatorContext } from "./KipperParser"; -import { UnaryOperatorContext } from "./KipperParser"; -import { CastOrConvertExpressionContext } from "./KipperParser"; -import { MultiplicativeExpressionContext } from "./KipperParser"; -import { AdditiveExpressionContext } from "./KipperParser"; -import { BitwiseShiftExpressionContext } from "./KipperParser"; -import { BitwiseShiftOperatorsContext } from "./KipperParser"; -import { RelationalExpressionContext } from "./KipperParser"; -import { EqualityExpressionContext } from "./KipperParser"; -import { BitwiseAndExpressionContext } from "./KipperParser"; -import { BitwiseXorExpressionContext } from "./KipperParser"; -import { BitwiseOrExpressionContext } from "./KipperParser"; -import { LogicalAndExpressionContext } from "./KipperParser"; -import { LogicalOrExpressionContext } from "./KipperParser"; -import { ConditionalExpressionContext } from "./KipperParser"; -import { AssignmentExpressionContext } from "./KipperParser"; -import { AssignmentOperatorContext } from "./KipperParser"; -import { ExpressionContext } from "./KipperParser"; -import { TypeSpecifierExpressionContext } from "./KipperParser"; -import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; -import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; -import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { + ActualAdditiveExpressionContext, + ActualAssignmentExpressionContext, + ActualBitwiseAndExpressionContext, + ActualBitwiseOrExpressionContext, + ActualBitwiseShiftExpressionContext, + ActualBitwiseXorExpressionContext, + ActualCastOrConvertExpressionContext, + ActualConditionalExpressionContext, + ActualEqualityExpressionContext, + ActualLogicalAndExpressionContext, + ActualLogicalOrExpressionContext, + ActualMultiplicativeExpressionContext, + ActualRelationalExpressionContext, + AdditiveExpressionContext, + ArgumentExpressionListContext, + ArrayPrimaryExpressionContext, + AssignmentExpressionContext, + AssignmentOperatorContext, + BitwiseAndExpressionContext, + BitwiseOrExpressionContext, + BitwiseShiftExpressionContext, + BitwiseShiftOperatorsContext, + BitwiseXorExpressionContext, + BlockItemContext, + BlockItemListContext, + BoolPrimaryExpressionContext, + BracketNotationContext, + BracketNotationMemberAccessExpressionContext, + CastOrConvertExpressionContext, + ClassConstructorDeclarationContext, + ClassDeclarationContext, + ClassMemberDeclarationContext, + ClassMethodDeclarationContext, + ClassPropertyDeclarationContext, + CompilationUnitContext, + CompoundStatementContext, + ComputedPrimaryExpressionContext, + ConditionalExpressionContext, + DeclarationContext, + DeclaratorContext, + DirectDeclaratorContext, + DotNotationContext, + DotNotationMemberAccessExpressionContext, + DoWhileLoopIterationStatementContext, + EqualityExpressionContext, + ExplicitCallFunctionCallExpressionContext, + ExpressionContext, + ExpressionStatementContext, + ExternalBlockItemContext, + ExternalItemContext, + ForLoopIterationStatementContext, + FStringDoubleQuoteAtomContext, + FStringPrimaryExpressionContext, + FStringSingleQuoteAtomContext, + FunctionCallExpressionContext, + FunctionDeclarationContext, + GenericTypeSpecifierExpressionContext, + IdentifierContext, + IdentifierOrStringPrimaryExpressionContext, + IdentifierPrimaryExpressionContext, + IdentifierTypeSpecifierExpressionContext, + IfStatementContext, + IncrementOrDecrementOperatorContext, + IncrementOrDecrementPostfixExpressionContext, + IncrementOrDecrementUnaryExpressionContext, + InitDeclaratorContext, + InitializerContext, + InterfaceDeclarationContext, + InterfaceMemberDeclarationContext, + InterfaceMethodDeclarationContext, + InterfacePropertyDeclarationContext, + IterationStatementContext, + JumpStatementContext, + LambdaPrimaryExpressionContext, + LogicalAndExpressionContext, + LogicalOrExpressionContext, + MultiplicativeExpressionContext, + NewInstantiationExpressionContext, + NumberPrimaryExpressionContext, + ObjectPrimaryExpressionContext, + ObjectPropertyContext, + OperatorModifiedUnaryExpressionContext, + ParameterDeclarationContext, + ParameterListContext, + PassOnAdditiveExpressionContext, + PassOnAssignmentExpressionContext, + PassOnBitwiseAndExpressionContext, + PassOnBitwiseOrExpressionContext, + PassOnBitwiseShiftExpressionContext, + PassOnBitwiseXorExpressionContext, + PassOnCastOrConvertExpressionContext, + PassOncomputedPrimaryExpressionContext, + PassOnConditionalExpressionContext, + PassOnEqualityExpressionContext, + PassOnLogicalAndExpressionContext, + PassOnLogicalOrExpressionContext, + PassOnMultiplicativeExpressionContext, + PassOnRelationalExpressionContext, + PostfixExpressionContext, + PrimaryExpressionContext, + RelationalExpressionContext, + ReturnStatementContext, + SelectionStatementContext, + SliceNotationContext, + SliceNotationMemberAccessExpressionContext, + StatementContext, + StorageTypeSpecifierContext, + StringPrimaryExpressionContext, + SwitchLabeledStatementContext, + SwitchStatementContext, + TangledPrimaryExpressionContext, + TranslationUnitContext, + TypeofExpressionContext, + TypeofTypeSpecifierExpressionContext, + TypeSpecifierExpressionContext, + TypeSpecifierIdentifierContext, + UnaryExpressionContext, + UnaryOperatorContext, + VariableDeclarationContext, + VoidOrNullOrUndefinedPrimaryExpressionContext, + WhileLoopIterationStatementContext, +} from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced diff --git a/kipper/core/src/compiler/optimiser/optimiser.ts b/kipper/core/src/compiler/optimiser/optimiser.ts index a4761e110..91965766f 100644 --- a/kipper/core/src/compiler/optimiser/optimiser.ts +++ b/kipper/core/src/compiler/optimiser/optimiser.ts @@ -5,8 +5,8 @@ import type { RootASTNode } from "../ast"; import type { KipperProgramContext } from "../program-ctx"; import type { - InternalFunction, BuiltInReference, + InternalFunction, ScopeFunctionDeclaration, ScopeVariableDeclaration, } from "../semantics/"; diff --git a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts index b748ca322..d4be4d634 100644 --- a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts @@ -13,8 +13,8 @@ import type { VariableDeclaration, } from "../../ast"; import { - Expression, CompoundStatement, + Expression, FunctionDeclaration, IdentifierPrimaryExpression, IterationStatement, diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 171e6c564..260b8eea5 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -30,8 +30,14 @@ import { TangledPrimaryExpression, } from "../../ast"; import { KipperSemanticsAsserter } from "./err-handler"; -import { type Scope, ScopeFunctionDeclaration } from "../symbol-table"; -import { BuiltInTypes, ScopeDeclaration, ScopeTypeDeclaration, ScopeVariableDeclaration } from "../symbol-table"; +import { + BuiltInTypes, + type Scope, + ScopeDeclaration, + ScopeFunctionDeclaration, + ScopeTypeDeclaration, + ScopeVariableDeclaration, +} from "../symbol-table"; import type { KipperArithmeticOperator, KipperBitwiseOperator, KipperReferenceable } from "../../const"; import { kipperIncrementOrDecrementOperators, @@ -55,11 +61,11 @@ import { InvalidUnaryExpressionTypeError, KipperError, KipperNotImplementedError, + PropertyDoesNotExistError, ReadOnlyWriteTypeError, ReferenceCanNotBeUsedAsTypeError, UnknownTypeError, ValueNotIndexableTypeError, - PropertyDoesNotExistError, ValueTypeNotIndexableWithGivenAccessor, } from "../../../errors"; import type { BuiltInTypeArray, CustomType, GenericType, GenericTypeArguments, ProcessedType, RawType } from "../types"; diff --git a/kipper/core/src/compiler/semantics/symbol-table/universe-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/universe-scope.ts index 719941557..d381ffa01 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/universe-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/universe-scope.ts @@ -1,11 +1,8 @@ import type { ScopeDeclaration } from "./entry"; -import type { BuiltInType } from "../types"; -import type { KipperBuiltInTypeLiteral } from "../../const"; -import type { KipperProgramContext } from "../../program-ctx"; import { ScopeFunctionDeclaration, ScopeTypeDeclaration, ScopeVariableDeclaration } from "./entry"; -import { BuiltInFunction, BuiltInFunctionArgument, BuiltInVariable } from "../runtime-built-ins"; -import { UnionType } from "../types"; +import type { BuiltInType } from "../types"; import { + BuiltInTypeAny, BuiltInTypeArray, BuiltInTypeBool, BuiltInTypeFunc, @@ -16,8 +13,11 @@ import { BuiltInTypeType, BuiltInTypeUndefined, BuiltInTypeVoid, - BuiltInTypeAny, + UnionType, } from "../types"; +import type { KipperBuiltInTypeLiteral } from "../../const"; +import type { KipperProgramContext } from "../../program-ctx"; +import { BuiltInFunction, BuiltInFunctionArgument, BuiltInVariable } from "../runtime-built-ins"; import { Scope } from "./base"; const any = new BuiltInTypeAny(); diff --git a/kipper/core/src/compiler/semantics/types/built-in/any.ts b/kipper/core/src/compiler/semantics/types/built-in/any.ts index 3553d2e5e..9ecd1df77 100644 --- a/kipper/core/src/compiler/semantics/types/built-in/any.ts +++ b/kipper/core/src/compiler/semantics/types/built-in/any.ts @@ -1,6 +1,5 @@ import type { ProcessedType } from "../../types"; -import { UnionType } from "../../types"; -import { BuiltInType, type CompilableType } from "../../types"; +import { BuiltInType, type CompilableType, UnionType } from "../../types"; import { ArgumentAssignmentTypeError, AssignmentTypeError, PropertyAssignmentTypeError } from "../../../../errors"; /** diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 577b99359..12f7fbd39 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -51,11 +51,11 @@ import type { SwitchStatement, TangledPrimaryExpression, TypeData, + TypeofExpression, TypeofTypeSpecifierExpression, VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - TypeofExpression, } from "../ast"; import { KipperSemanticErrorHandler } from "../semantics"; import type { ClassConstructorDeclaration } from "../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 9f9fe282d..4763d4794 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -41,6 +41,7 @@ import type { LogicalOrExpression, MemberAccessExpression, MultiplicativeExpression, + NewInstantiationExpression, NumberPrimaryExpression, ObjectPrimaryExpression, ObjectProperty, @@ -56,7 +57,6 @@ import type { VariableDeclaration, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - NewInstantiationExpression, } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index e647487c6..7cbe67a47 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -8,11 +8,11 @@ import type { Declaration, FunctionDeclaration, InterfaceDeclaration, + InterfaceMethodDeclaration, InterfacePropertyDeclaration, ParameterDeclaration, TargetASTNodeSemanticAnalyser, VariableDeclaration, - InterfaceMethodDeclaration, } from "@kipper/core"; import { KipperTargetSemanticAnalyser, ReservedIdentifierOverwriteError } from "@kipper/core"; import { TargetJS } from "./target"; diff --git a/kipper/target-js/src/target.ts b/kipper/target-js/src/target.ts index b8d258256..f5cae5bd4 100644 --- a/kipper/target-js/src/target.ts +++ b/kipper/target-js/src/target.ts @@ -5,8 +5,7 @@ * @since 0.10.0 */ import type { BuiltInFunction, ProcessedType } from "@kipper/core"; -import { BuiltInType } from "@kipper/core"; -import { BuiltInVariable, KipperCompileTarget } from "@kipper/core"; +import { BuiltInType, BuiltInVariable, KipperCompileTarget } from "@kipper/core"; import { JavaScriptTargetSemanticAnalyser } from "./semantic-analyser"; import { JavaScriptTargetCodeGenerator } from "./code-generator"; import { JavaScriptTargetBuiltInGenerator } from "./built-in-generator"; diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 97fc6476a..58714567b 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -3,20 +3,19 @@ * @since 0.8.0 */ import type { + ClassMethodDeclaration, + ClassPropertyDeclaration, FunctionDeclaration, InterfaceDeclaration, + InterfaceMethodDeclaration, + InterfacePropertyDeclaration, ObjectPrimaryExpression, ParameterDeclaration, TranslatedCodeLine, TranslatedExpression, VariableDeclaration, - ClassMethodDeclaration, - ClassPropertyDeclaration, - InterfaceMethodDeclaration, - InterfacePropertyDeclaration, } from "@kipper/core"; -import { CompoundStatement } from "@kipper/core"; -import { Expression, type LambdaPrimaryExpression } from "@kipper/core"; +import { CompoundStatement, Expression, type LambdaPrimaryExpression } from "@kipper/core"; import { createTSFunctionSignature, getTSFunctionSignature } from "./tools"; import { indentLines, JavaScriptTargetCodeGenerator, TargetJS } from "@kipper/target-js"; import { TargetTS } from "./target"; diff --git a/kipper/target-ts/src/target.ts b/kipper/target-ts/src/target.ts index 3fa8b079d..5e5292e06 100644 --- a/kipper/target-ts/src/target.ts +++ b/kipper/target-ts/src/target.ts @@ -3,8 +3,7 @@ * @since 0.10.0 */ import type { BuiltInFunction, BuiltInVariable, ProcessedType } from "@kipper/core"; -import { UnionType, CustomType } from "@kipper/core"; -import { BuiltInTypes, KipperCompileTarget, KipperNotImplementedError } from "@kipper/core"; +import { BuiltInTypes, CustomType, KipperCompileTarget, KipperNotImplementedError, UnionType } from "@kipper/core"; import { TypeScriptTargetSemanticAnalyser } from "./semantic-analyser"; import { TypeScriptTargetCodeGenerator } from "./code-generator"; import { TypeScriptTargetBuiltInGenerator } from "./built-in-generator"; diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 778a4209c..50eabed1c 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1660,13 +1660,13 @@ describe("Core functionality", () => { assert.include( written, `interface Test {\n` + - ` a: string;\n` + - `}\n` + - `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", + ` a: string;\n` + + `}\n` + + `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); }); From f037b0e1078b3f65036baa37aac776564192a62d Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:34:43 +0200 Subject: [PATCH 09/81] [#672] minor: added matches ast node and parser tree entry --- kipper/core/KipperLexer.g4 | 3 + kipper/core/KipperLexer.tokens | 210 +- kipper/core/KipperParser.g4 | 4 + kipper/core/KipperParser.tokens | 210 +- .../core/src/compiler/ast/common/ast-types.ts | 13 +- .../matches-expression-semantics.ts | 22 + .../matches-expression-type-semantics.ts | 7 + .../matches-expression/matches-expression.ts | 122 + .../lexer-parser/antlr/KipperLexer.interp | 5 +- .../lexer-parser/antlr/KipperLexer.tokens | 210 +- .../lexer-parser/antlr/KipperLexer.ts | 1228 ++- .../lexer-parser/antlr/KipperParser.interp | 5 +- .../lexer-parser/antlr/KipperParser.tokens | 210 +- .../lexer-parser/antlr/KipperParser.ts | 7226 ++++++++--------- .../antlr/KipperParserListener.ts | 266 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 262 +- .../lexer-parser/parse-rule-kind-mapping.ts | 1 + .../target-presets/semantic-analyser.ts | 6 + .../translation/code-generator.ts | 6 + 19 files changed, 4570 insertions(+), 5446 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts diff --git a/kipper/core/KipperLexer.g4 b/kipper/core/KipperLexer.g4 index c939cf9de..f049ced04 100644 --- a/kipper/core/KipperLexer.g4 +++ b/kipper/core/KipperLexer.g4 @@ -87,6 +87,9 @@ New : 'new'; True : 'true'; False : 'false'; +// matches operator +Matches : 'matches'; + // typeof operator Typeof : 'typeof'; diff --git a/kipper/core/KipperLexer.tokens b/kipper/core/KipperLexer.tokens index dfd693766..acbd51711 100644 --- a/kipper/core/KipperLexer.tokens +++ b/kipper/core/KipperLexer.tokens @@ -27,65 +27,66 @@ Constructor=26 New=27 True=28 False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 +Matches=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 'const'=5 'var'=6 'as'=7 @@ -111,48 +112,49 @@ FStringDoubleQuoteAtom=88 'new'=27 'true'=28 'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +'matches'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 432ebe5cf..be66d4a43 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -440,3 +440,7 @@ typeofTypeSpecifierExpression typeSpecifierIdentifier : (Identifier | 'null' | 'undefined' | 'void') ; + +matchesExpression + : assignmentExpression 'matches' typeSpecifierExpression + ; diff --git a/kipper/core/KipperParser.tokens b/kipper/core/KipperParser.tokens index dfd693766..acbd51711 100644 --- a/kipper/core/KipperParser.tokens +++ b/kipper/core/KipperParser.tokens @@ -27,65 +27,66 @@ Constructor=26 New=27 True=28 False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 +Matches=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 'const'=5 'var'=6 'as'=7 @@ -111,48 +112,49 @@ FStringDoubleQuoteAtom=88 'new'=27 'true'=28 'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +'matches'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 33c11dac8..b00b3b5ac 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -2,7 +2,7 @@ * AST pre-set types that are used throughout the compiler. * @since 0.10.0 */ -import type { +import { AdditiveExpressionContext, ArrayPrimaryExpressionContext, AssignmentExpressionContext, @@ -39,7 +39,7 @@ import type { JumpStatementContext, KindParseRuleMapping, LogicalAndExpressionContext, - LogicalOrExpressionContext, + LogicalOrExpressionContext, MatchesExpressionContext, MultiplicativeExpressionContext, NewInstantiationExpressionContext, NumberPrimaryExpressionContext, @@ -92,7 +92,8 @@ export type ParserExpressionContext = | BitwiseAndExpressionContext | BitwiseXorExpressionContext | NewInstantiationExpressionContext - | BitwiseShiftExpressionContext; + | BitwiseShiftExpressionContext + | MatchesExpressionContext; /** * Union type of all usable statement rule context classes implemented by the {@link ParseRuleKindMapping} for a @@ -208,7 +209,8 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression | typeof ParseRuleKindMapping.RULE_memberAccessExpression | typeof ParseRuleKindMapping.RULE_typeofExpression - | typeof ParseRuleKindMapping.RULE_newInstantiationExpression; + | typeof ParseRuleKindMapping.RULE_newInstantiationExpression + | typeof ParseRuleKindMapping.RULE_matchesExpression; /** * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link CompilableASTNode}. @@ -291,7 +293,8 @@ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_typeofExpression] - | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_newInstantiationExpression]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_newInstantiationExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_matchesExpression]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link CompilableASTNode}. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts new file mode 100644 index 000000000..fcfc45a55 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts @@ -0,0 +1,22 @@ +/** + * Semantics for the matches expression. + * @since 0.12.0 + */ + +import type { ExpressionSemantics } from "../expression-semantics"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; +import type { Expression } from "../expression"; + +export interface MatchesExpressionSemantics extends ExpressionSemantics { + /** + * The interface to match against. + * @since 0.12.0 + */ + interface: IdentifierTypeSpecifierExpression; + + /** + * The expression to match against the interface. + * @since 0.12.0 + */ + expression: Expression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-type-semantics.ts new file mode 100644 index 000000000..c9d93ff5e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-type-semantics.ts @@ -0,0 +1,7 @@ +/** + * The type semantics of a matches expression. + * @since 0.12.0 + */ +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; + +export interface MatchesExpressionTypeSemantics extends ExpressionTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts new file mode 100644 index 000000000..a15168b4e --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -0,0 +1,122 @@ +/** + * Matches expression, which checks if a value matches a pattern. + * + * This expression will evaluate to a boolean value, indicating if the value matches the pattern. + * @since 0.12.0 + * @example + * 5 matches int + * "3" matches str + * true matches bool + */ +import type { CompilableASTNode } from "../../../compilable-ast-node"; +import type { MatchesExpressionContext } from "../../../../lexer-parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; +import { Expression } from "../expression"; +import type { MatchesExpressionSemantics } from "./matches-expression-semantics"; +import type { MatchesExpressionTypeSemantics } from "./matches-expression-type-semantics"; + +/** + * Matches expression, which checks if a value matches a pattern. + * + * This expression will evaluate to a boolean value, indicating if the value matches the pattern. + * @since 0.12.0 + * @example + * 5 matches int + * "3" matches str + * true matches bool + */ +export class MatchesExpression extends Expression< + MatchesExpressionSemantics, + MatchesExpressionTypeSemantics, + Expression +> { + /** + * The static kind for this AST Node. + * @since 0.12.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_matchesExpression; + + /** + * The static rule name for this AST Node. + * @since 0.12.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: MatchesExpressionContext; + + constructor(antlrRuleCtx: MatchesExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.12.0 + */ + public override get kind() { + return MatchesExpression.kind; + } + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.12.0 + */ + public override get ruleName() { + return MatchesExpression.ruleName; + } + + /** + * The antlr context containing the antlr4 metadata for this expression. + */ + public override get antlrRuleCtx(): MatchesExpressionContext { + return this._antlrRuleCtx; + } + + /** + * Performs the semantic analysis for this Kipper token. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the semantic analysis of + * the children has already failed and as such no parent node should run type checking. + */ + public async primarySemanticAnalysis(): Promise { + + + } + + /** + * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} + * and throw errors if encountered. + * + * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of + * the children has already failed and as such no parent node should run type checking. + * @since 0.12.0 + */ + public async primarySemanticTypeChecking(): Promise { + + } + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.12.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.matchesExpression; + readonly targetCodeGenerator = this.codeGenerator.matchesExpression; +} diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp index e91f2b974..5e74f0bb2 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp @@ -29,6 +29,7 @@ null 'new' 'true' 'false' +'matches' 'typeof' 'void' 'null' @@ -120,6 +121,7 @@ Constructor New True False +Matches Typeof Void Null @@ -209,6 +211,7 @@ Constructor New True False +Matches Typeof Void Null @@ -316,4 +319,4 @@ SINGLE_QUOTE_FSTRING DOUBLE_QUOTE_FSTRING atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 90, 776, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 250, 10, 2, 12, 2, 14, 2, 253, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 7, 76, 554, 10, 76, 12, 76, 14, 76, 557, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 563, 10, 77, 3, 78, 3, 78, 5, 78, 567, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 5, 79, 573, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 6, 81, 580, 10, 81, 13, 81, 14, 81, 581, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 6, 94, 637, 10, 94, 13, 94, 14, 94, 638, 3, 95, 3, 95, 3, 95, 6, 95, 644, 10, 95, 13, 95, 14, 95, 645, 3, 96, 3, 96, 3, 96, 6, 96, 651, 10, 96, 13, 96, 14, 96, 652, 3, 97, 3, 97, 3, 97, 6, 97, 658, 10, 97, 13, 97, 14, 97, 659, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 5, 102, 672, 10, 102, 3, 102, 3, 102, 3, 102, 5, 102, 677, 10, 102, 3, 103, 5, 103, 680, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 687, 10, 103, 3, 104, 3, 104, 5, 104, 691, 10, 104, 3, 104, 3, 104, 3, 105, 6, 105, 696, 10, 105, 13, 105, 14, 105, 697, 3, 106, 3, 106, 3, 107, 6, 107, 703, 10, 107, 13, 107, 14, 107, 704, 3, 108, 3, 108, 5, 108, 709, 10, 108, 3, 109, 3, 109, 3, 109, 5, 109, 714, 10, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 5, 111, 722, 10, 111, 3, 111, 5, 111, 725, 10, 111, 3, 112, 3, 112, 3, 112, 3, 112, 6, 112, 731, 10, 112, 13, 112, 14, 112, 732, 3, 113, 6, 113, 736, 10, 113, 13, 113, 14, 113, 737, 3, 114, 3, 114, 5, 114, 742, 10, 114, 3, 115, 6, 115, 745, 10, 115, 13, 115, 14, 115, 746, 3, 116, 3, 116, 5, 116, 751, 10, 116, 3, 117, 6, 117, 754, 10, 117, 13, 117, 14, 117, 755, 3, 118, 3, 118, 5, 118, 760, 10, 118, 3, 119, 6, 119, 763, 10, 119, 13, 119, 14, 119, 764, 3, 120, 3, 120, 5, 120, 769, 10, 120, 3, 121, 7, 121, 772, 10, 121, 12, 121, 14, 121, 775, 11, 121, 3, 251, 2, 2, 122, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 2, 173, 2, 87, 175, 2, 88, 177, 2, 2, 179, 2, 89, 181, 2, 90, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 777, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 3, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 3, 175, 3, 2, 2, 2, 4, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 4, 181, 3, 2, 2, 2, 5, 245, 3, 2, 2, 2, 7, 259, 3, 2, 2, 2, 9, 266, 3, 2, 2, 2, 11, 278, 3, 2, 2, 2, 13, 284, 3, 2, 2, 2, 15, 288, 3, 2, 2, 2, 17, 291, 3, 2, 2, 2, 19, 295, 3, 2, 2, 2, 21, 302, 3, 2, 2, 2, 23, 307, 3, 2, 2, 2, 25, 315, 3, 2, 2, 2, 27, 321, 3, 2, 2, 2, 29, 330, 3, 2, 2, 2, 31, 333, 3, 2, 2, 2, 33, 339, 3, 2, 2, 2, 35, 342, 3, 2, 2, 2, 37, 347, 3, 2, 2, 2, 39, 351, 3, 2, 2, 2, 41, 356, 3, 2, 2, 2, 43, 360, 3, 2, 2, 2, 45, 367, 3, 2, 2, 2, 47, 372, 3, 2, 2, 2, 49, 375, 3, 2, 2, 2, 51, 381, 3, 2, 2, 2, 53, 391, 3, 2, 2, 2, 55, 403, 3, 2, 2, 2, 57, 407, 3, 2, 2, 2, 59, 412, 3, 2, 2, 2, 61, 418, 3, 2, 2, 2, 63, 425, 3, 2, 2, 2, 65, 430, 3, 2, 2, 2, 67, 435, 3, 2, 2, 2, 69, 445, 3, 2, 2, 2, 71, 447, 3, 2, 2, 2, 73, 449, 3, 2, 2, 2, 75, 451, 3, 2, 2, 2, 77, 453, 3, 2, 2, 2, 79, 455, 3, 2, 2, 2, 81, 457, 3, 2, 2, 2, 83, 459, 3, 2, 2, 2, 85, 461, 3, 2, 2, 2, 87, 466, 3, 2, 2, 2, 89, 468, 3, 2, 2, 2, 91, 470, 3, 2, 2, 2, 93, 472, 3, 2, 2, 2, 95, 475, 3, 2, 2, 2, 97, 477, 3, 2, 2, 2, 99, 480, 3, 2, 2, 2, 101, 482, 3, 2, 2, 2, 103, 484, 3, 2, 2, 2, 105, 486, 3, 2, 2, 2, 107, 489, 3, 2, 2, 2, 109, 492, 3, 2, 2, 2, 111, 495, 3, 2, 2, 2, 113, 497, 3, 2, 2, 2, 115, 499, 3, 2, 2, 2, 117, 502, 3, 2, 2, 2, 119, 505, 3, 2, 2, 2, 121, 508, 3, 2, 2, 2, 123, 511, 3, 2, 2, 2, 125, 514, 3, 2, 2, 2, 127, 517, 3, 2, 2, 2, 129, 520, 3, 2, 2, 2, 131, 522, 3, 2, 2, 2, 133, 525, 3, 2, 2, 2, 135, 527, 3, 2, 2, 2, 137, 530, 3, 2, 2, 2, 139, 532, 3, 2, 2, 2, 141, 534, 3, 2, 2, 2, 143, 536, 3, 2, 2, 2, 145, 538, 3, 2, 2, 2, 147, 541, 3, 2, 2, 2, 149, 544, 3, 2, 2, 2, 151, 548, 3, 2, 2, 2, 153, 550, 3, 2, 2, 2, 155, 562, 3, 2, 2, 2, 157, 564, 3, 2, 2, 2, 159, 570, 3, 2, 2, 2, 161, 576, 3, 2, 2, 2, 163, 579, 3, 2, 2, 2, 165, 585, 3, 2, 2, 2, 167, 589, 3, 2, 2, 2, 169, 596, 3, 2, 2, 2, 171, 603, 3, 2, 2, 2, 173, 609, 3, 2, 2, 2, 175, 614, 3, 2, 2, 2, 177, 616, 3, 2, 2, 2, 179, 622, 3, 2, 2, 2, 181, 627, 3, 2, 2, 2, 183, 629, 3, 2, 2, 2, 185, 631, 3, 2, 2, 2, 187, 633, 3, 2, 2, 2, 189, 636, 3, 2, 2, 2, 191, 640, 3, 2, 2, 2, 193, 647, 3, 2, 2, 2, 195, 654, 3, 2, 2, 2, 197, 661, 3, 2, 2, 2, 199, 663, 3, 2, 2, 2, 201, 665, 3, 2, 2, 2, 203, 667, 3, 2, 2, 2, 205, 676, 3, 2, 2, 2, 207, 686, 3, 2, 2, 2, 209, 688, 3, 2, 2, 2, 211, 695, 3, 2, 2, 2, 213, 699, 3, 2, 2, 2, 215, 702, 3, 2, 2, 2, 217, 708, 3, 2, 2, 2, 219, 713, 3, 2, 2, 2, 221, 715, 3, 2, 2, 2, 223, 718, 3, 2, 2, 2, 225, 726, 3, 2, 2, 2, 227, 735, 3, 2, 2, 2, 229, 741, 3, 2, 2, 2, 231, 744, 3, 2, 2, 2, 233, 750, 3, 2, 2, 2, 235, 753, 3, 2, 2, 2, 237, 759, 3, 2, 2, 2, 239, 762, 3, 2, 2, 2, 241, 768, 3, 2, 2, 2, 243, 773, 3, 2, 2, 2, 245, 246, 7, 49, 2, 2, 246, 247, 7, 44, 2, 2, 247, 251, 3, 2, 2, 2, 248, 250, 11, 2, 2, 2, 249, 248, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 254, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 255, 7, 44, 2, 2, 255, 256, 7, 49, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 2, 2, 2, 258, 6, 3, 2, 2, 2, 259, 260, 7, 49, 2, 2, 260, 261, 7, 49, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 5, 243, 121, 2, 263, 264, 3, 2, 2, 2, 264, 265, 8, 3, 2, 2, 265, 8, 3, 2, 2, 2, 266, 267, 7, 37, 2, 2, 267, 268, 7, 114, 2, 2, 268, 269, 7, 116, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 105, 2, 2, 271, 272, 7, 111, 2, 2, 272, 273, 7, 99, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 5, 243, 121, 2, 275, 276, 3, 2, 2, 2, 276, 277, 8, 4, 3, 2, 277, 10, 3, 2, 2, 2, 278, 279, 7, 101, 2, 2, 279, 280, 7, 113, 2, 2, 280, 281, 7, 112, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 12, 3, 2, 2, 2, 284, 285, 7, 120, 2, 2, 285, 286, 7, 99, 2, 2, 286, 287, 7, 116, 2, 2, 287, 14, 3, 2, 2, 2, 288, 289, 7, 99, 2, 2, 289, 290, 7, 117, 2, 2, 290, 16, 3, 2, 2, 2, 291, 292, 7, 48, 2, 2, 292, 293, 7, 48, 2, 2, 293, 294, 7, 48, 2, 2, 294, 18, 3, 2, 2, 2, 295, 296, 7, 117, 2, 2, 296, 297, 7, 121, 2, 2, 297, 298, 7, 107, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 101, 2, 2, 300, 301, 7, 106, 2, 2, 301, 20, 3, 2, 2, 2, 302, 303, 7, 101, 2, 2, 303, 304, 7, 99, 2, 2, 304, 305, 7, 117, 2, 2, 305, 306, 7, 103, 2, 2, 306, 22, 3, 2, 2, 2, 307, 308, 7, 102, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 104, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 110, 2, 2, 313, 314, 7, 118, 2, 2, 314, 24, 3, 2, 2, 2, 315, 316, 7, 100, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 99, 2, 2, 319, 320, 7, 109, 2, 2, 320, 26, 3, 2, 2, 2, 321, 322, 7, 101, 2, 2, 322, 323, 7, 113, 2, 2, 323, 324, 7, 112, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 107, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 119, 2, 2, 328, 329, 7, 103, 2, 2, 329, 28, 3, 2, 2, 2, 330, 331, 7, 102, 2, 2, 331, 332, 7, 113, 2, 2, 332, 30, 3, 2, 2, 2, 333, 334, 7, 121, 2, 2, 334, 335, 7, 106, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 110, 2, 2, 337, 338, 7, 103, 2, 2, 338, 32, 3, 2, 2, 2, 339, 340, 7, 107, 2, 2, 340, 341, 7, 104, 2, 2, 341, 34, 3, 2, 2, 2, 342, 343, 7, 103, 2, 2, 343, 344, 7, 110, 2, 2, 344, 345, 7, 117, 2, 2, 345, 346, 7, 103, 2, 2, 346, 36, 3, 2, 2, 2, 347, 348, 7, 104, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 116, 2, 2, 350, 38, 3, 2, 2, 2, 351, 352, 7, 103, 2, 2, 352, 353, 7, 112, 2, 2, 353, 354, 7, 119, 2, 2, 354, 355, 7, 111, 2, 2, 355, 40, 3, 2, 2, 2, 356, 357, 7, 102, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 104, 2, 2, 359, 42, 3, 2, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 103, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 119, 2, 2, 364, 365, 7, 116, 2, 2, 365, 366, 7, 112, 2, 2, 366, 44, 3, 2, 2, 2, 367, 368, 7, 101, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 110, 2, 2, 370, 371, 7, 110, 2, 2, 371, 46, 3, 2, 2, 2, 372, 373, 7, 47, 2, 2, 373, 374, 7, 64, 2, 2, 374, 48, 3, 2, 2, 2, 375, 376, 7, 101, 2, 2, 376, 377, 7, 110, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 117, 2, 2, 379, 380, 7, 117, 2, 2, 380, 50, 3, 2, 2, 2, 381, 382, 7, 107, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 103, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 104, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 101, 2, 2, 389, 390, 7, 103, 2, 2, 390, 52, 3, 2, 2, 2, 391, 392, 7, 101, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 112, 2, 2, 394, 395, 7, 117, 2, 2, 395, 396, 7, 118, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 119, 2, 2, 398, 399, 7, 101, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 113, 2, 2, 401, 402, 7, 116, 2, 2, 402, 54, 3, 2, 2, 2, 403, 404, 7, 112, 2, 2, 404, 405, 7, 103, 2, 2, 405, 406, 7, 121, 2, 2, 406, 56, 3, 2, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 119, 2, 2, 410, 411, 7, 103, 2, 2, 411, 58, 3, 2, 2, 2, 412, 413, 7, 104, 2, 2, 413, 414, 7, 99, 2, 2, 414, 415, 7, 110, 2, 2, 415, 416, 7, 117, 2, 2, 416, 417, 7, 103, 2, 2, 417, 60, 3, 2, 2, 2, 418, 419, 7, 118, 2, 2, 419, 420, 7, 123, 2, 2, 420, 421, 7, 114, 2, 2, 421, 422, 7, 103, 2, 2, 422, 423, 7, 113, 2, 2, 423, 424, 7, 104, 2, 2, 424, 62, 3, 2, 2, 2, 425, 426, 7, 120, 2, 2, 426, 427, 7, 113, 2, 2, 427, 428, 7, 107, 2, 2, 428, 429, 7, 102, 2, 2, 429, 64, 3, 2, 2, 2, 430, 431, 7, 112, 2, 2, 431, 432, 7, 119, 2, 2, 432, 433, 7, 110, 2, 2, 433, 434, 7, 110, 2, 2, 434, 66, 3, 2, 2, 2, 435, 436, 7, 119, 2, 2, 436, 437, 7, 112, 2, 2, 437, 438, 7, 102, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 104, 2, 2, 440, 441, 7, 107, 2, 2, 441, 442, 7, 112, 2, 2, 442, 443, 7, 103, 2, 2, 443, 444, 7, 102, 2, 2, 444, 68, 3, 2, 2, 2, 445, 446, 7, 46, 2, 2, 446, 70, 3, 2, 2, 2, 447, 448, 7, 61, 2, 2, 448, 72, 3, 2, 2, 2, 449, 450, 7, 65, 2, 2, 450, 74, 3, 2, 2, 2, 451, 452, 7, 60, 2, 2, 452, 76, 3, 2, 2, 2, 453, 454, 7, 42, 2, 2, 454, 78, 3, 2, 2, 2, 455, 456, 7, 43, 2, 2, 456, 80, 3, 2, 2, 2, 457, 458, 7, 93, 2, 2, 458, 82, 3, 2, 2, 2, 459, 460, 7, 95, 2, 2, 460, 84, 3, 2, 2, 2, 461, 462, 6, 42, 2, 2, 462, 463, 7, 127, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 8, 42, 4, 2, 465, 86, 3, 2, 2, 2, 466, 467, 7, 125, 2, 2, 467, 88, 3, 2, 2, 2, 468, 469, 7, 127, 2, 2, 469, 90, 3, 2, 2, 2, 470, 471, 7, 45, 2, 2, 471, 92, 3, 2, 2, 2, 472, 473, 7, 45, 2, 2, 473, 474, 7, 45, 2, 2, 474, 94, 3, 2, 2, 2, 475, 476, 7, 47, 2, 2, 476, 96, 3, 2, 2, 2, 477, 478, 7, 47, 2, 2, 478, 479, 7, 47, 2, 2, 479, 98, 3, 2, 2, 2, 480, 481, 7, 44, 2, 2, 481, 100, 3, 2, 2, 2, 482, 483, 7, 49, 2, 2, 483, 102, 3, 2, 2, 2, 484, 485, 7, 39, 2, 2, 485, 104, 3, 2, 2, 2, 486, 487, 7, 44, 2, 2, 487, 488, 7, 44, 2, 2, 488, 106, 3, 2, 2, 2, 489, 490, 7, 40, 2, 2, 490, 491, 7, 40, 2, 2, 491, 108, 3, 2, 2, 2, 492, 493, 7, 126, 2, 2, 493, 494, 7, 126, 2, 2, 494, 110, 3, 2, 2, 2, 495, 496, 7, 35, 2, 2, 496, 112, 3, 2, 2, 2, 497, 498, 7, 63, 2, 2, 498, 114, 3, 2, 2, 2, 499, 500, 7, 45, 2, 2, 500, 501, 7, 63, 2, 2, 501, 116, 3, 2, 2, 2, 502, 503, 7, 47, 2, 2, 503, 504, 7, 63, 2, 2, 504, 118, 3, 2, 2, 2, 505, 506, 7, 44, 2, 2, 506, 507, 7, 63, 2, 2, 507, 120, 3, 2, 2, 2, 508, 509, 7, 49, 2, 2, 509, 510, 7, 63, 2, 2, 510, 122, 3, 2, 2, 2, 511, 512, 7, 39, 2, 2, 512, 513, 7, 63, 2, 2, 513, 124, 3, 2, 2, 2, 514, 515, 7, 63, 2, 2, 515, 516, 7, 63, 2, 2, 516, 126, 3, 2, 2, 2, 517, 518, 7, 35, 2, 2, 518, 519, 7, 63, 2, 2, 519, 128, 3, 2, 2, 2, 520, 521, 7, 62, 2, 2, 521, 130, 3, 2, 2, 2, 522, 523, 7, 62, 2, 2, 523, 524, 7, 63, 2, 2, 524, 132, 3, 2, 2, 2, 525, 526, 7, 64, 2, 2, 526, 134, 3, 2, 2, 2, 527, 528, 7, 64, 2, 2, 528, 529, 7, 63, 2, 2, 529, 136, 3, 2, 2, 2, 530, 531, 7, 40, 2, 2, 531, 138, 3, 2, 2, 2, 532, 533, 7, 126, 2, 2, 533, 140, 3, 2, 2, 2, 534, 535, 7, 96, 2, 2, 535, 142, 3, 2, 2, 2, 536, 537, 7, 128, 2, 2, 537, 144, 3, 2, 2, 2, 538, 539, 7, 62, 2, 2, 539, 540, 7, 62, 2, 2, 540, 146, 3, 2, 2, 2, 541, 542, 7, 64, 2, 2, 542, 543, 7, 64, 2, 2, 543, 148, 3, 2, 2, 2, 544, 545, 7, 64, 2, 2, 545, 546, 7, 64, 2, 2, 546, 547, 7, 64, 2, 2, 547, 150, 3, 2, 2, 2, 548, 549, 7, 48, 2, 2, 549, 152, 3, 2, 2, 2, 550, 555, 5, 183, 91, 2, 551, 554, 5, 183, 91, 2, 552, 554, 5, 187, 93, 2, 553, 551, 3, 2, 2, 2, 553, 552, 3, 2, 2, 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 154, 3, 2, 2, 2, 557, 555, 3, 2, 2, 2, 558, 563, 5, 189, 94, 2, 559, 563, 5, 193, 96, 2, 560, 563, 5, 195, 97, 2, 561, 563, 5, 191, 95, 2, 562, 558, 3, 2, 2, 2, 562, 559, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 562, 561, 3, 2, 2, 2, 563, 156, 3, 2, 2, 2, 564, 566, 7, 41, 2, 2, 565, 567, 5, 235, 117, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 158, 3, 2, 2, 2, 570, 572, 7, 36, 2, 2, 571, 573, 5, 239, 119, 2, 572, 571, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 7, 36, 2, 2, 575, 160, 3, 2, 2, 2, 576, 577, 5, 205, 102, 2, 577, 162, 3, 2, 2, 2, 578, 580, 9, 2, 2, 2, 579, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 8, 81, 5, 2, 584, 164, 3, 2, 2, 2, 585, 586, 9, 3, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 8, 82, 5, 2, 588, 166, 3, 2, 2, 2, 589, 590, 7, 104, 2, 2, 590, 591, 7, 41, 2, 2, 591, 592, 3, 2, 2, 2, 592, 593, 8, 83, 6, 2, 593, 594, 3, 2, 2, 2, 594, 595, 8, 83, 7, 2, 595, 168, 3, 2, 2, 2, 596, 597, 7, 104, 2, 2, 597, 598, 7, 36, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 8, 84, 8, 2, 600, 601, 3, 2, 2, 2, 601, 602, 8, 84, 9, 2, 602, 170, 3, 2, 2, 2, 603, 604, 6, 85, 3, 2, 604, 605, 7, 125, 2, 2, 605, 606, 3, 2, 2, 2, 606, 607, 8, 85, 10, 2, 607, 608, 8, 85, 11, 2, 608, 172, 3, 2, 2, 2, 609, 610, 7, 41, 2, 2, 610, 611, 8, 86, 12, 2, 611, 612, 3, 2, 2, 2, 612, 613, 8, 86, 4, 2, 613, 174, 3, 2, 2, 2, 614, 615, 5, 227, 113, 2, 615, 176, 3, 2, 2, 2, 616, 617, 6, 88, 4, 2, 617, 618, 7, 125, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 8, 88, 10, 2, 620, 621, 8, 88, 11, 2, 621, 178, 3, 2, 2, 2, 622, 623, 7, 36, 2, 2, 623, 624, 8, 89, 13, 2, 624, 625, 3, 2, 2, 2, 625, 626, 8, 89, 4, 2, 626, 180, 3, 2, 2, 2, 627, 628, 5, 231, 115, 2, 628, 182, 3, 2, 2, 2, 629, 630, 5, 185, 92, 2, 630, 184, 3, 2, 2, 2, 631, 632, 9, 4, 2, 2, 632, 186, 3, 2, 2, 2, 633, 634, 9, 5, 2, 2, 634, 188, 3, 2, 2, 2, 635, 637, 5, 187, 93, 2, 636, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 190, 3, 2, 2, 2, 640, 641, 7, 50, 2, 2, 641, 643, 9, 6, 2, 2, 642, 644, 5, 199, 99, 2, 643, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 192, 3, 2, 2, 2, 647, 648, 7, 50, 2, 2, 648, 650, 9, 7, 2, 2, 649, 651, 5, 201, 100, 2, 650, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 194, 3, 2, 2, 2, 654, 655, 7, 50, 2, 2, 655, 657, 9, 8, 2, 2, 656, 658, 5, 203, 101, 2, 657, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 196, 3, 2, 2, 2, 661, 662, 9, 9, 2, 2, 662, 198, 3, 2, 2, 2, 663, 664, 9, 10, 2, 2, 664, 200, 3, 2, 2, 2, 665, 666, 9, 11, 2, 2, 666, 202, 3, 2, 2, 2, 667, 668, 9, 12, 2, 2, 668, 204, 3, 2, 2, 2, 669, 671, 5, 207, 103, 2, 670, 672, 5, 209, 104, 2, 671, 670, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 677, 3, 2, 2, 2, 673, 674, 5, 211, 105, 2, 674, 675, 5, 209, 104, 2, 675, 677, 3, 2, 2, 2, 676, 669, 3, 2, 2, 2, 676, 673, 3, 2, 2, 2, 677, 206, 3, 2, 2, 2, 678, 680, 5, 211, 105, 2, 679, 678, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 682, 7, 48, 2, 2, 682, 687, 5, 211, 105, 2, 683, 684, 5, 211, 105, 2, 684, 685, 7, 48, 2, 2, 685, 687, 3, 2, 2, 2, 686, 679, 3, 2, 2, 2, 686, 683, 3, 2, 2, 2, 687, 208, 3, 2, 2, 2, 688, 690, 9, 13, 2, 2, 689, 691, 5, 213, 106, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 693, 5, 211, 105, 2, 693, 210, 3, 2, 2, 2, 694, 696, 5, 187, 93, 2, 695, 694, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 212, 3, 2, 2, 2, 699, 700, 9, 14, 2, 2, 700, 214, 3, 2, 2, 2, 701, 703, 5, 217, 108, 2, 702, 701, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 216, 3, 2, 2, 2, 706, 709, 10, 15, 2, 2, 707, 709, 5, 219, 109, 2, 708, 706, 3, 2, 2, 2, 708, 707, 3, 2, 2, 2, 709, 218, 3, 2, 2, 2, 710, 714, 5, 221, 110, 2, 711, 714, 5, 223, 111, 2, 712, 714, 5, 225, 112, 2, 713, 710, 3, 2, 2, 2, 713, 711, 3, 2, 2, 2, 713, 712, 3, 2, 2, 2, 714, 220, 3, 2, 2, 2, 715, 716, 7, 94, 2, 2, 716, 717, 9, 16, 2, 2, 717, 222, 3, 2, 2, 2, 718, 719, 7, 94, 2, 2, 719, 721, 5, 201, 100, 2, 720, 722, 5, 201, 100, 2, 721, 720, 3, 2, 2, 2, 721, 722, 3, 2, 2, 2, 722, 724, 3, 2, 2, 2, 723, 725, 5, 201, 100, 2, 724, 723, 3, 2, 2, 2, 724, 725, 3, 2, 2, 2, 725, 224, 3, 2, 2, 2, 726, 727, 7, 94, 2, 2, 727, 728, 7, 122, 2, 2, 728, 730, 3, 2, 2, 2, 729, 731, 5, 203, 101, 2, 730, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 730, 3, 2, 2, 2, 732, 733, 3, 2, 2, 2, 733, 226, 3, 2, 2, 2, 734, 736, 5, 229, 114, 2, 735, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 228, 3, 2, 2, 2, 739, 742, 10, 17, 2, 2, 740, 742, 5, 219, 109, 2, 741, 739, 3, 2, 2, 2, 741, 740, 3, 2, 2, 2, 742, 230, 3, 2, 2, 2, 743, 745, 5, 233, 116, 2, 744, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 232, 3, 2, 2, 2, 748, 751, 10, 18, 2, 2, 749, 751, 5, 219, 109, 2, 750, 748, 3, 2, 2, 2, 750, 749, 3, 2, 2, 2, 751, 234, 3, 2, 2, 2, 752, 754, 5, 237, 118, 2, 753, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 236, 3, 2, 2, 2, 757, 760, 10, 15, 2, 2, 758, 760, 5, 219, 109, 2, 759, 757, 3, 2, 2, 2, 759, 758, 3, 2, 2, 2, 760, 238, 3, 2, 2, 2, 761, 763, 5, 241, 120, 2, 762, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 240, 3, 2, 2, 2, 766, 769, 10, 19, 2, 2, 767, 769, 5, 219, 109, 2, 768, 766, 3, 2, 2, 2, 768, 767, 3, 2, 2, 2, 769, 242, 3, 2, 2, 2, 770, 772, 10, 3, 2, 2, 771, 770, 3, 2, 2, 2, 772, 775, 3, 2, 2, 2, 773, 771, 3, 2, 2, 2, 773, 774, 3, 2, 2, 2, 774, 244, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 37, 2, 3, 4, 251, 553, 555, 562, 566, 572, 581, 638, 645, 652, 659, 671, 676, 679, 686, 690, 697, 704, 708, 713, 721, 724, 732, 737, 741, 746, 750, 755, 759, 764, 768, 773, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 83, 2, 7, 3, 2, 3, 84, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 86, 4, 3, 89, 5] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 91, 786, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 252, 10, 2, 12, 2, 14, 2, 255, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 7, 77, 564, 10, 77, 12, 77, 14, 77, 567, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 573, 10, 78, 3, 79, 3, 79, 5, 79, 577, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, 583, 10, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 6, 82, 590, 10, 82, 13, 82, 14, 82, 591, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 6, 95, 647, 10, 95, 13, 95, 14, 95, 648, 3, 96, 3, 96, 3, 96, 6, 96, 654, 10, 96, 13, 96, 14, 96, 655, 3, 97, 3, 97, 3, 97, 6, 97, 661, 10, 97, 13, 97, 14, 97, 662, 3, 98, 3, 98, 3, 98, 6, 98, 668, 10, 98, 13, 98, 14, 98, 669, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 5, 103, 682, 10, 103, 3, 103, 3, 103, 3, 103, 5, 103, 687, 10, 103, 3, 104, 5, 104, 690, 10, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 697, 10, 104, 3, 105, 3, 105, 5, 105, 701, 10, 105, 3, 105, 3, 105, 3, 106, 6, 106, 706, 10, 106, 13, 106, 14, 106, 707, 3, 107, 3, 107, 3, 108, 6, 108, 713, 10, 108, 13, 108, 14, 108, 714, 3, 109, 3, 109, 5, 109, 719, 10, 109, 3, 110, 3, 110, 3, 110, 5, 110, 724, 10, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 5, 112, 732, 10, 112, 3, 112, 5, 112, 735, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 6, 113, 741, 10, 113, 13, 113, 14, 113, 742, 3, 114, 6, 114, 746, 10, 114, 13, 114, 14, 114, 747, 3, 115, 3, 115, 5, 115, 752, 10, 115, 3, 116, 6, 116, 755, 10, 116, 13, 116, 14, 116, 756, 3, 117, 3, 117, 5, 117, 761, 10, 117, 3, 118, 6, 118, 764, 10, 118, 13, 118, 14, 118, 765, 3, 119, 3, 119, 5, 119, 770, 10, 119, 3, 120, 6, 120, 773, 10, 120, 13, 120, 14, 120, 774, 3, 121, 3, 121, 5, 121, 779, 10, 121, 3, 122, 7, 122, 782, 10, 122, 12, 122, 14, 122, 785, 11, 122, 3, 253, 2, 2, 123, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 87, 173, 2, 2, 175, 2, 88, 177, 2, 89, 179, 2, 2, 181, 2, 90, 183, 2, 91, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 245, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 787, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 3, 175, 3, 2, 2, 2, 3, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 4, 181, 3, 2, 2, 2, 4, 183, 3, 2, 2, 2, 5, 247, 3, 2, 2, 2, 7, 261, 3, 2, 2, 2, 9, 268, 3, 2, 2, 2, 11, 280, 3, 2, 2, 2, 13, 286, 3, 2, 2, 2, 15, 290, 3, 2, 2, 2, 17, 293, 3, 2, 2, 2, 19, 297, 3, 2, 2, 2, 21, 304, 3, 2, 2, 2, 23, 309, 3, 2, 2, 2, 25, 317, 3, 2, 2, 2, 27, 323, 3, 2, 2, 2, 29, 332, 3, 2, 2, 2, 31, 335, 3, 2, 2, 2, 33, 341, 3, 2, 2, 2, 35, 344, 3, 2, 2, 2, 37, 349, 3, 2, 2, 2, 39, 353, 3, 2, 2, 2, 41, 358, 3, 2, 2, 2, 43, 362, 3, 2, 2, 2, 45, 369, 3, 2, 2, 2, 47, 374, 3, 2, 2, 2, 49, 377, 3, 2, 2, 2, 51, 383, 3, 2, 2, 2, 53, 393, 3, 2, 2, 2, 55, 405, 3, 2, 2, 2, 57, 409, 3, 2, 2, 2, 59, 414, 3, 2, 2, 2, 61, 420, 3, 2, 2, 2, 63, 428, 3, 2, 2, 2, 65, 435, 3, 2, 2, 2, 67, 440, 3, 2, 2, 2, 69, 445, 3, 2, 2, 2, 71, 455, 3, 2, 2, 2, 73, 457, 3, 2, 2, 2, 75, 459, 3, 2, 2, 2, 77, 461, 3, 2, 2, 2, 79, 463, 3, 2, 2, 2, 81, 465, 3, 2, 2, 2, 83, 467, 3, 2, 2, 2, 85, 469, 3, 2, 2, 2, 87, 471, 3, 2, 2, 2, 89, 476, 3, 2, 2, 2, 91, 478, 3, 2, 2, 2, 93, 480, 3, 2, 2, 2, 95, 482, 3, 2, 2, 2, 97, 485, 3, 2, 2, 2, 99, 487, 3, 2, 2, 2, 101, 490, 3, 2, 2, 2, 103, 492, 3, 2, 2, 2, 105, 494, 3, 2, 2, 2, 107, 496, 3, 2, 2, 2, 109, 499, 3, 2, 2, 2, 111, 502, 3, 2, 2, 2, 113, 505, 3, 2, 2, 2, 115, 507, 3, 2, 2, 2, 117, 509, 3, 2, 2, 2, 119, 512, 3, 2, 2, 2, 121, 515, 3, 2, 2, 2, 123, 518, 3, 2, 2, 2, 125, 521, 3, 2, 2, 2, 127, 524, 3, 2, 2, 2, 129, 527, 3, 2, 2, 2, 131, 530, 3, 2, 2, 2, 133, 532, 3, 2, 2, 2, 135, 535, 3, 2, 2, 2, 137, 537, 3, 2, 2, 2, 139, 540, 3, 2, 2, 2, 141, 542, 3, 2, 2, 2, 143, 544, 3, 2, 2, 2, 145, 546, 3, 2, 2, 2, 147, 548, 3, 2, 2, 2, 149, 551, 3, 2, 2, 2, 151, 554, 3, 2, 2, 2, 153, 558, 3, 2, 2, 2, 155, 560, 3, 2, 2, 2, 157, 572, 3, 2, 2, 2, 159, 574, 3, 2, 2, 2, 161, 580, 3, 2, 2, 2, 163, 586, 3, 2, 2, 2, 165, 589, 3, 2, 2, 2, 167, 595, 3, 2, 2, 2, 169, 599, 3, 2, 2, 2, 171, 606, 3, 2, 2, 2, 173, 613, 3, 2, 2, 2, 175, 619, 3, 2, 2, 2, 177, 624, 3, 2, 2, 2, 179, 626, 3, 2, 2, 2, 181, 632, 3, 2, 2, 2, 183, 637, 3, 2, 2, 2, 185, 639, 3, 2, 2, 2, 187, 641, 3, 2, 2, 2, 189, 643, 3, 2, 2, 2, 191, 646, 3, 2, 2, 2, 193, 650, 3, 2, 2, 2, 195, 657, 3, 2, 2, 2, 197, 664, 3, 2, 2, 2, 199, 671, 3, 2, 2, 2, 201, 673, 3, 2, 2, 2, 203, 675, 3, 2, 2, 2, 205, 677, 3, 2, 2, 2, 207, 686, 3, 2, 2, 2, 209, 696, 3, 2, 2, 2, 211, 698, 3, 2, 2, 2, 213, 705, 3, 2, 2, 2, 215, 709, 3, 2, 2, 2, 217, 712, 3, 2, 2, 2, 219, 718, 3, 2, 2, 2, 221, 723, 3, 2, 2, 2, 223, 725, 3, 2, 2, 2, 225, 728, 3, 2, 2, 2, 227, 736, 3, 2, 2, 2, 229, 745, 3, 2, 2, 2, 231, 751, 3, 2, 2, 2, 233, 754, 3, 2, 2, 2, 235, 760, 3, 2, 2, 2, 237, 763, 3, 2, 2, 2, 239, 769, 3, 2, 2, 2, 241, 772, 3, 2, 2, 2, 243, 778, 3, 2, 2, 2, 245, 783, 3, 2, 2, 2, 247, 248, 7, 49, 2, 2, 248, 249, 7, 44, 2, 2, 249, 253, 3, 2, 2, 2, 250, 252, 11, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 256, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 257, 7, 44, 2, 2, 257, 258, 7, 49, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 8, 2, 2, 2, 260, 6, 3, 2, 2, 2, 261, 262, 7, 49, 2, 2, 262, 263, 7, 49, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 5, 245, 122, 2, 265, 266, 3, 2, 2, 2, 266, 267, 8, 3, 2, 2, 267, 8, 3, 2, 2, 2, 268, 269, 7, 37, 2, 2, 269, 270, 7, 114, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 99, 2, 2, 272, 273, 7, 105, 2, 2, 273, 274, 7, 111, 2, 2, 274, 275, 7, 99, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 5, 245, 122, 2, 277, 278, 3, 2, 2, 2, 278, 279, 8, 4, 3, 2, 279, 10, 3, 2, 2, 2, 280, 281, 7, 101, 2, 2, 281, 282, 7, 113, 2, 2, 282, 283, 7, 112, 2, 2, 283, 284, 7, 117, 2, 2, 284, 285, 7, 118, 2, 2, 285, 12, 3, 2, 2, 2, 286, 287, 7, 120, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 116, 2, 2, 289, 14, 3, 2, 2, 2, 290, 291, 7, 99, 2, 2, 291, 292, 7, 117, 2, 2, 292, 16, 3, 2, 2, 2, 293, 294, 7, 48, 2, 2, 294, 295, 7, 48, 2, 2, 295, 296, 7, 48, 2, 2, 296, 18, 3, 2, 2, 2, 297, 298, 7, 117, 2, 2, 298, 299, 7, 121, 2, 2, 299, 300, 7, 107, 2, 2, 300, 301, 7, 118, 2, 2, 301, 302, 7, 101, 2, 2, 302, 303, 7, 106, 2, 2, 303, 20, 3, 2, 2, 2, 304, 305, 7, 101, 2, 2, 305, 306, 7, 99, 2, 2, 306, 307, 7, 117, 2, 2, 307, 308, 7, 103, 2, 2, 308, 22, 3, 2, 2, 2, 309, 310, 7, 102, 2, 2, 310, 311, 7, 103, 2, 2, 311, 312, 7, 104, 2, 2, 312, 313, 7, 99, 2, 2, 313, 314, 7, 119, 2, 2, 314, 315, 7, 110, 2, 2, 315, 316, 7, 118, 2, 2, 316, 24, 3, 2, 2, 2, 317, 318, 7, 100, 2, 2, 318, 319, 7, 116, 2, 2, 319, 320, 7, 103, 2, 2, 320, 321, 7, 99, 2, 2, 321, 322, 7, 109, 2, 2, 322, 26, 3, 2, 2, 2, 323, 324, 7, 101, 2, 2, 324, 325, 7, 113, 2, 2, 325, 326, 7, 112, 2, 2, 326, 327, 7, 118, 2, 2, 327, 328, 7, 107, 2, 2, 328, 329, 7, 112, 2, 2, 329, 330, 7, 119, 2, 2, 330, 331, 7, 103, 2, 2, 331, 28, 3, 2, 2, 2, 332, 333, 7, 102, 2, 2, 333, 334, 7, 113, 2, 2, 334, 30, 3, 2, 2, 2, 335, 336, 7, 121, 2, 2, 336, 337, 7, 106, 2, 2, 337, 338, 7, 107, 2, 2, 338, 339, 7, 110, 2, 2, 339, 340, 7, 103, 2, 2, 340, 32, 3, 2, 2, 2, 341, 342, 7, 107, 2, 2, 342, 343, 7, 104, 2, 2, 343, 34, 3, 2, 2, 2, 344, 345, 7, 103, 2, 2, 345, 346, 7, 110, 2, 2, 346, 347, 7, 117, 2, 2, 347, 348, 7, 103, 2, 2, 348, 36, 3, 2, 2, 2, 349, 350, 7, 104, 2, 2, 350, 351, 7, 113, 2, 2, 351, 352, 7, 116, 2, 2, 352, 38, 3, 2, 2, 2, 353, 354, 7, 103, 2, 2, 354, 355, 7, 112, 2, 2, 355, 356, 7, 119, 2, 2, 356, 357, 7, 111, 2, 2, 357, 40, 3, 2, 2, 2, 358, 359, 7, 102, 2, 2, 359, 360, 7, 103, 2, 2, 360, 361, 7, 104, 2, 2, 361, 42, 3, 2, 2, 2, 362, 363, 7, 116, 2, 2, 363, 364, 7, 103, 2, 2, 364, 365, 7, 118, 2, 2, 365, 366, 7, 119, 2, 2, 366, 367, 7, 116, 2, 2, 367, 368, 7, 112, 2, 2, 368, 44, 3, 2, 2, 2, 369, 370, 7, 101, 2, 2, 370, 371, 7, 99, 2, 2, 371, 372, 7, 110, 2, 2, 372, 373, 7, 110, 2, 2, 373, 46, 3, 2, 2, 2, 374, 375, 7, 47, 2, 2, 375, 376, 7, 64, 2, 2, 376, 48, 3, 2, 2, 2, 377, 378, 7, 101, 2, 2, 378, 379, 7, 110, 2, 2, 379, 380, 7, 99, 2, 2, 380, 381, 7, 117, 2, 2, 381, 382, 7, 117, 2, 2, 382, 50, 3, 2, 2, 2, 383, 384, 7, 107, 2, 2, 384, 385, 7, 112, 2, 2, 385, 386, 7, 118, 2, 2, 386, 387, 7, 103, 2, 2, 387, 388, 7, 116, 2, 2, 388, 389, 7, 104, 2, 2, 389, 390, 7, 99, 2, 2, 390, 391, 7, 101, 2, 2, 391, 392, 7, 103, 2, 2, 392, 52, 3, 2, 2, 2, 393, 394, 7, 101, 2, 2, 394, 395, 7, 113, 2, 2, 395, 396, 7, 112, 2, 2, 396, 397, 7, 117, 2, 2, 397, 398, 7, 118, 2, 2, 398, 399, 7, 116, 2, 2, 399, 400, 7, 119, 2, 2, 400, 401, 7, 101, 2, 2, 401, 402, 7, 118, 2, 2, 402, 403, 7, 113, 2, 2, 403, 404, 7, 116, 2, 2, 404, 54, 3, 2, 2, 2, 405, 406, 7, 112, 2, 2, 406, 407, 7, 103, 2, 2, 407, 408, 7, 121, 2, 2, 408, 56, 3, 2, 2, 2, 409, 410, 7, 118, 2, 2, 410, 411, 7, 116, 2, 2, 411, 412, 7, 119, 2, 2, 412, 413, 7, 103, 2, 2, 413, 58, 3, 2, 2, 2, 414, 415, 7, 104, 2, 2, 415, 416, 7, 99, 2, 2, 416, 417, 7, 110, 2, 2, 417, 418, 7, 117, 2, 2, 418, 419, 7, 103, 2, 2, 419, 60, 3, 2, 2, 2, 420, 421, 7, 111, 2, 2, 421, 422, 7, 99, 2, 2, 422, 423, 7, 118, 2, 2, 423, 424, 7, 101, 2, 2, 424, 425, 7, 106, 2, 2, 425, 426, 7, 103, 2, 2, 426, 427, 7, 117, 2, 2, 427, 62, 3, 2, 2, 2, 428, 429, 7, 118, 2, 2, 429, 430, 7, 123, 2, 2, 430, 431, 7, 114, 2, 2, 431, 432, 7, 103, 2, 2, 432, 433, 7, 113, 2, 2, 433, 434, 7, 104, 2, 2, 434, 64, 3, 2, 2, 2, 435, 436, 7, 120, 2, 2, 436, 437, 7, 113, 2, 2, 437, 438, 7, 107, 2, 2, 438, 439, 7, 102, 2, 2, 439, 66, 3, 2, 2, 2, 440, 441, 7, 112, 2, 2, 441, 442, 7, 119, 2, 2, 442, 443, 7, 110, 2, 2, 443, 444, 7, 110, 2, 2, 444, 68, 3, 2, 2, 2, 445, 446, 7, 119, 2, 2, 446, 447, 7, 112, 2, 2, 447, 448, 7, 102, 2, 2, 448, 449, 7, 103, 2, 2, 449, 450, 7, 104, 2, 2, 450, 451, 7, 107, 2, 2, 451, 452, 7, 112, 2, 2, 452, 453, 7, 103, 2, 2, 453, 454, 7, 102, 2, 2, 454, 70, 3, 2, 2, 2, 455, 456, 7, 46, 2, 2, 456, 72, 3, 2, 2, 2, 457, 458, 7, 61, 2, 2, 458, 74, 3, 2, 2, 2, 459, 460, 7, 65, 2, 2, 460, 76, 3, 2, 2, 2, 461, 462, 7, 60, 2, 2, 462, 78, 3, 2, 2, 2, 463, 464, 7, 42, 2, 2, 464, 80, 3, 2, 2, 2, 465, 466, 7, 43, 2, 2, 466, 82, 3, 2, 2, 2, 467, 468, 7, 93, 2, 2, 468, 84, 3, 2, 2, 2, 469, 470, 7, 95, 2, 2, 470, 86, 3, 2, 2, 2, 471, 472, 6, 43, 2, 2, 472, 473, 7, 127, 2, 2, 473, 474, 3, 2, 2, 2, 474, 475, 8, 43, 4, 2, 475, 88, 3, 2, 2, 2, 476, 477, 7, 125, 2, 2, 477, 90, 3, 2, 2, 2, 478, 479, 7, 127, 2, 2, 479, 92, 3, 2, 2, 2, 480, 481, 7, 45, 2, 2, 481, 94, 3, 2, 2, 2, 482, 483, 7, 45, 2, 2, 483, 484, 7, 45, 2, 2, 484, 96, 3, 2, 2, 2, 485, 486, 7, 47, 2, 2, 486, 98, 3, 2, 2, 2, 487, 488, 7, 47, 2, 2, 488, 489, 7, 47, 2, 2, 489, 100, 3, 2, 2, 2, 490, 491, 7, 44, 2, 2, 491, 102, 3, 2, 2, 2, 492, 493, 7, 49, 2, 2, 493, 104, 3, 2, 2, 2, 494, 495, 7, 39, 2, 2, 495, 106, 3, 2, 2, 2, 496, 497, 7, 44, 2, 2, 497, 498, 7, 44, 2, 2, 498, 108, 3, 2, 2, 2, 499, 500, 7, 40, 2, 2, 500, 501, 7, 40, 2, 2, 501, 110, 3, 2, 2, 2, 502, 503, 7, 126, 2, 2, 503, 504, 7, 126, 2, 2, 504, 112, 3, 2, 2, 2, 505, 506, 7, 35, 2, 2, 506, 114, 3, 2, 2, 2, 507, 508, 7, 63, 2, 2, 508, 116, 3, 2, 2, 2, 509, 510, 7, 45, 2, 2, 510, 511, 7, 63, 2, 2, 511, 118, 3, 2, 2, 2, 512, 513, 7, 47, 2, 2, 513, 514, 7, 63, 2, 2, 514, 120, 3, 2, 2, 2, 515, 516, 7, 44, 2, 2, 516, 517, 7, 63, 2, 2, 517, 122, 3, 2, 2, 2, 518, 519, 7, 49, 2, 2, 519, 520, 7, 63, 2, 2, 520, 124, 3, 2, 2, 2, 521, 522, 7, 39, 2, 2, 522, 523, 7, 63, 2, 2, 523, 126, 3, 2, 2, 2, 524, 525, 7, 63, 2, 2, 525, 526, 7, 63, 2, 2, 526, 128, 3, 2, 2, 2, 527, 528, 7, 35, 2, 2, 528, 529, 7, 63, 2, 2, 529, 130, 3, 2, 2, 2, 530, 531, 7, 62, 2, 2, 531, 132, 3, 2, 2, 2, 532, 533, 7, 62, 2, 2, 533, 534, 7, 63, 2, 2, 534, 134, 3, 2, 2, 2, 535, 536, 7, 64, 2, 2, 536, 136, 3, 2, 2, 2, 537, 538, 7, 64, 2, 2, 538, 539, 7, 63, 2, 2, 539, 138, 3, 2, 2, 2, 540, 541, 7, 40, 2, 2, 541, 140, 3, 2, 2, 2, 542, 543, 7, 126, 2, 2, 543, 142, 3, 2, 2, 2, 544, 545, 7, 96, 2, 2, 545, 144, 3, 2, 2, 2, 546, 547, 7, 128, 2, 2, 547, 146, 3, 2, 2, 2, 548, 549, 7, 62, 2, 2, 549, 550, 7, 62, 2, 2, 550, 148, 3, 2, 2, 2, 551, 552, 7, 64, 2, 2, 552, 553, 7, 64, 2, 2, 553, 150, 3, 2, 2, 2, 554, 555, 7, 64, 2, 2, 555, 556, 7, 64, 2, 2, 556, 557, 7, 64, 2, 2, 557, 152, 3, 2, 2, 2, 558, 559, 7, 48, 2, 2, 559, 154, 3, 2, 2, 2, 560, 565, 5, 185, 92, 2, 561, 564, 5, 185, 92, 2, 562, 564, 5, 189, 94, 2, 563, 561, 3, 2, 2, 2, 563, 562, 3, 2, 2, 2, 564, 567, 3, 2, 2, 2, 565, 563, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 156, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 568, 573, 5, 191, 95, 2, 569, 573, 5, 195, 97, 2, 570, 573, 5, 197, 98, 2, 571, 573, 5, 193, 96, 2, 572, 568, 3, 2, 2, 2, 572, 569, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 572, 571, 3, 2, 2, 2, 573, 158, 3, 2, 2, 2, 574, 576, 7, 41, 2, 2, 575, 577, 5, 237, 118, 2, 576, 575, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 579, 7, 41, 2, 2, 579, 160, 3, 2, 2, 2, 580, 582, 7, 36, 2, 2, 581, 583, 5, 241, 120, 2, 582, 581, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 7, 36, 2, 2, 585, 162, 3, 2, 2, 2, 586, 587, 5, 207, 103, 2, 587, 164, 3, 2, 2, 2, 588, 590, 9, 2, 2, 2, 589, 588, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 589, 3, 2, 2, 2, 591, 592, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 594, 8, 82, 5, 2, 594, 166, 3, 2, 2, 2, 595, 596, 9, 3, 2, 2, 596, 597, 3, 2, 2, 2, 597, 598, 8, 83, 5, 2, 598, 168, 3, 2, 2, 2, 599, 600, 7, 104, 2, 2, 600, 601, 7, 41, 2, 2, 601, 602, 3, 2, 2, 2, 602, 603, 8, 84, 6, 2, 603, 604, 3, 2, 2, 2, 604, 605, 8, 84, 7, 2, 605, 170, 3, 2, 2, 2, 606, 607, 7, 104, 2, 2, 607, 608, 7, 36, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 8, 85, 8, 2, 610, 611, 3, 2, 2, 2, 611, 612, 8, 85, 9, 2, 612, 172, 3, 2, 2, 2, 613, 614, 6, 86, 3, 2, 614, 615, 7, 125, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 8, 86, 10, 2, 617, 618, 8, 86, 11, 2, 618, 174, 3, 2, 2, 2, 619, 620, 7, 41, 2, 2, 620, 621, 8, 87, 12, 2, 621, 622, 3, 2, 2, 2, 622, 623, 8, 87, 4, 2, 623, 176, 3, 2, 2, 2, 624, 625, 5, 229, 114, 2, 625, 178, 3, 2, 2, 2, 626, 627, 6, 89, 4, 2, 627, 628, 7, 125, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 8, 89, 10, 2, 630, 631, 8, 89, 11, 2, 631, 180, 3, 2, 2, 2, 632, 633, 7, 36, 2, 2, 633, 634, 8, 90, 13, 2, 634, 635, 3, 2, 2, 2, 635, 636, 8, 90, 4, 2, 636, 182, 3, 2, 2, 2, 637, 638, 5, 233, 116, 2, 638, 184, 3, 2, 2, 2, 639, 640, 5, 187, 93, 2, 640, 186, 3, 2, 2, 2, 641, 642, 9, 4, 2, 2, 642, 188, 3, 2, 2, 2, 643, 644, 9, 5, 2, 2, 644, 190, 3, 2, 2, 2, 645, 647, 5, 189, 94, 2, 646, 645, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 192, 3, 2, 2, 2, 650, 651, 7, 50, 2, 2, 651, 653, 9, 6, 2, 2, 652, 654, 5, 201, 100, 2, 653, 652, 3, 2, 2, 2, 654, 655, 3, 2, 2, 2, 655, 653, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 194, 3, 2, 2, 2, 657, 658, 7, 50, 2, 2, 658, 660, 9, 7, 2, 2, 659, 661, 5, 203, 101, 2, 660, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 196, 3, 2, 2, 2, 664, 665, 7, 50, 2, 2, 665, 667, 9, 8, 2, 2, 666, 668, 5, 205, 102, 2, 667, 666, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 667, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 198, 3, 2, 2, 2, 671, 672, 9, 9, 2, 2, 672, 200, 3, 2, 2, 2, 673, 674, 9, 10, 2, 2, 674, 202, 3, 2, 2, 2, 675, 676, 9, 11, 2, 2, 676, 204, 3, 2, 2, 2, 677, 678, 9, 12, 2, 2, 678, 206, 3, 2, 2, 2, 679, 681, 5, 209, 104, 2, 680, 682, 5, 211, 105, 2, 681, 680, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 687, 3, 2, 2, 2, 683, 684, 5, 213, 106, 2, 684, 685, 5, 211, 105, 2, 685, 687, 3, 2, 2, 2, 686, 679, 3, 2, 2, 2, 686, 683, 3, 2, 2, 2, 687, 208, 3, 2, 2, 2, 688, 690, 5, 213, 106, 2, 689, 688, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 7, 48, 2, 2, 692, 697, 5, 213, 106, 2, 693, 694, 5, 213, 106, 2, 694, 695, 7, 48, 2, 2, 695, 697, 3, 2, 2, 2, 696, 689, 3, 2, 2, 2, 696, 693, 3, 2, 2, 2, 697, 210, 3, 2, 2, 2, 698, 700, 9, 13, 2, 2, 699, 701, 5, 215, 107, 2, 700, 699, 3, 2, 2, 2, 700, 701, 3, 2, 2, 2, 701, 702, 3, 2, 2, 2, 702, 703, 5, 213, 106, 2, 703, 212, 3, 2, 2, 2, 704, 706, 5, 189, 94, 2, 705, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 705, 3, 2, 2, 2, 707, 708, 3, 2, 2, 2, 708, 214, 3, 2, 2, 2, 709, 710, 9, 14, 2, 2, 710, 216, 3, 2, 2, 2, 711, 713, 5, 219, 109, 2, 712, 711, 3, 2, 2, 2, 713, 714, 3, 2, 2, 2, 714, 712, 3, 2, 2, 2, 714, 715, 3, 2, 2, 2, 715, 218, 3, 2, 2, 2, 716, 719, 10, 15, 2, 2, 717, 719, 5, 221, 110, 2, 718, 716, 3, 2, 2, 2, 718, 717, 3, 2, 2, 2, 719, 220, 3, 2, 2, 2, 720, 724, 5, 223, 111, 2, 721, 724, 5, 225, 112, 2, 722, 724, 5, 227, 113, 2, 723, 720, 3, 2, 2, 2, 723, 721, 3, 2, 2, 2, 723, 722, 3, 2, 2, 2, 724, 222, 3, 2, 2, 2, 725, 726, 7, 94, 2, 2, 726, 727, 9, 16, 2, 2, 727, 224, 3, 2, 2, 2, 728, 729, 7, 94, 2, 2, 729, 731, 5, 203, 101, 2, 730, 732, 5, 203, 101, 2, 731, 730, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 734, 3, 2, 2, 2, 733, 735, 5, 203, 101, 2, 734, 733, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 226, 3, 2, 2, 2, 736, 737, 7, 94, 2, 2, 737, 738, 7, 122, 2, 2, 738, 740, 3, 2, 2, 2, 739, 741, 5, 205, 102, 2, 740, 739, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 743, 3, 2, 2, 2, 743, 228, 3, 2, 2, 2, 744, 746, 5, 231, 115, 2, 745, 744, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 747, 748, 3, 2, 2, 2, 748, 230, 3, 2, 2, 2, 749, 752, 10, 17, 2, 2, 750, 752, 5, 221, 110, 2, 751, 749, 3, 2, 2, 2, 751, 750, 3, 2, 2, 2, 752, 232, 3, 2, 2, 2, 753, 755, 5, 235, 117, 2, 754, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 754, 3, 2, 2, 2, 756, 757, 3, 2, 2, 2, 757, 234, 3, 2, 2, 2, 758, 761, 10, 18, 2, 2, 759, 761, 5, 221, 110, 2, 760, 758, 3, 2, 2, 2, 760, 759, 3, 2, 2, 2, 761, 236, 3, 2, 2, 2, 762, 764, 5, 239, 119, 2, 763, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 763, 3, 2, 2, 2, 765, 766, 3, 2, 2, 2, 766, 238, 3, 2, 2, 2, 767, 770, 10, 15, 2, 2, 768, 770, 5, 221, 110, 2, 769, 767, 3, 2, 2, 2, 769, 768, 3, 2, 2, 2, 770, 240, 3, 2, 2, 2, 771, 773, 5, 243, 121, 2, 772, 771, 3, 2, 2, 2, 773, 774, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 774, 775, 3, 2, 2, 2, 775, 242, 3, 2, 2, 2, 776, 779, 10, 19, 2, 2, 777, 779, 5, 221, 110, 2, 778, 776, 3, 2, 2, 2, 778, 777, 3, 2, 2, 2, 779, 244, 3, 2, 2, 2, 780, 782, 10, 3, 2, 2, 781, 780, 3, 2, 2, 2, 782, 785, 3, 2, 2, 2, 783, 781, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 246, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 37, 2, 3, 4, 253, 563, 565, 572, 576, 582, 591, 648, 655, 662, 669, 681, 686, 689, 696, 700, 707, 714, 718, 723, 731, 734, 742, 747, 751, 756, 760, 765, 769, 774, 778, 783, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 84, 2, 7, 3, 2, 3, 85, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 87, 4, 3, 90, 5] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens index dfd693766..acbd51711 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens @@ -27,65 +27,66 @@ Constructor=26 New=27 True=28 False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 +Matches=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 'const'=5 'var'=6 'as'=7 @@ -111,48 +112,49 @@ FStringDoubleQuoteAtom=88 'new'=27 'true'=28 'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +'matches'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index fcc1aef27..8a61faaf7 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -1,17 +1,23 @@ // Generated from ./KipperLexer.g4 by ANTLR 4.9.0-SNAPSHOT -import KipperLexerBase from "./base/KipperLexerBase"; + + import KipperLexerBase from "./base/KipperLexerBase"; + import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; + export class KipperLexer extends KipperLexerBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -42,373 +48,139 @@ export class KipperLexer extends KipperLexerBase { public static readonly New = 27; public static readonly True = 28; public static readonly False = 29; - public static readonly Typeof = 30; - public static readonly Void = 31; - public static readonly Null = 32; - public static readonly Undefined = 33; - public static readonly Comma = 34; - public static readonly SemiColon = 35; - public static readonly QuestionMark = 36; - public static readonly Colon = 37; - public static readonly LeftParen = 38; - public static readonly RightParen = 39; - public static readonly LeftBracket = 40; - public static readonly RightBracket = 41; - public static readonly FStringExpEnd = 42; - public static readonly LeftBrace = 43; - public static readonly RightBrace = 44; - public static readonly Plus = 45; - public static readonly PlusPlus = 46; - public static readonly Minus = 47; - public static readonly MinusMinus = 48; - public static readonly Star = 49; - public static readonly Div = 50; - public static readonly Mod = 51; - public static readonly PowerTo = 52; - public static readonly AndAnd = 53; - public static readonly OrOr = 54; - public static readonly Not = 55; - public static readonly Assign = 56; - public static readonly PlusAssign = 57; - public static readonly MinusAssign = 58; - public static readonly StarAssign = 59; - public static readonly DivAssign = 60; - public static readonly ModAssign = 61; - public static readonly Equal = 62; - public static readonly NotEqual = 63; - public static readonly Less = 64; - public static readonly LessEqual = 65; - public static readonly Greater = 66; - public static readonly GreaterEqual = 67; - public static readonly BitwiseAnd = 68; - public static readonly BitwiseOr = 69; - public static readonly BitwiseXor = 70; - public static readonly BitwiseNot = 71; - public static readonly BitwiseZeroFillLeftShift = 72; - public static readonly BitwiseSignedRightShift = 73; - public static readonly BitwiseZeroFillRightShift = 74; - public static readonly Dot = 75; - public static readonly Identifier = 76; - public static readonly IntegerConstant = 77; - public static readonly SingleQuoteStringLiteral = 78; - public static readonly DoubleQuoteStringLiteral = 79; - public static readonly FloatingConstant = 80; - public static readonly Whitespace = 81; - public static readonly Newline = 82; - public static readonly FStringSingleQuoteStart = 83; - public static readonly FStringDoubleQuoteStart = 84; - public static readonly FStringSingleQuoteEnd = 85; - public static readonly FStringSingleQuoteAtom = 86; - public static readonly FStringDoubleQuoteEnd = 87; - public static readonly FStringDoubleQuoteAtom = 88; + public static readonly Matches = 30; + public static readonly Typeof = 31; + public static readonly Void = 32; + public static readonly Null = 33; + public static readonly Undefined = 34; + public static readonly Comma = 35; + public static readonly SemiColon = 36; + public static readonly QuestionMark = 37; + public static readonly Colon = 38; + public static readonly LeftParen = 39; + public static readonly RightParen = 40; + public static readonly LeftBracket = 41; + public static readonly RightBracket = 42; + public static readonly FStringExpEnd = 43; + public static readonly LeftBrace = 44; + public static readonly RightBrace = 45; + public static readonly Plus = 46; + public static readonly PlusPlus = 47; + public static readonly Minus = 48; + public static readonly MinusMinus = 49; + public static readonly Star = 50; + public static readonly Div = 51; + public static readonly Mod = 52; + public static readonly PowerTo = 53; + public static readonly AndAnd = 54; + public static readonly OrOr = 55; + public static readonly Not = 56; + public static readonly Assign = 57; + public static readonly PlusAssign = 58; + public static readonly MinusAssign = 59; + public static readonly StarAssign = 60; + public static readonly DivAssign = 61; + public static readonly ModAssign = 62; + public static readonly Equal = 63; + public static readonly NotEqual = 64; + public static readonly Less = 65; + public static readonly LessEqual = 66; + public static readonly Greater = 67; + public static readonly GreaterEqual = 68; + public static readonly BitwiseAnd = 69; + public static readonly BitwiseOr = 70; + public static readonly BitwiseXor = 71; + public static readonly BitwiseNot = 72; + public static readonly BitwiseZeroFillLeftShift = 73; + public static readonly BitwiseSignedRightShift = 74; + public static readonly BitwiseZeroFillRightShift = 75; + public static readonly Dot = 76; + public static readonly Identifier = 77; + public static readonly IntegerConstant = 78; + public static readonly SingleQuoteStringLiteral = 79; + public static readonly DoubleQuoteStringLiteral = 80; + public static readonly FloatingConstant = 81; + public static readonly Whitespace = 82; + public static readonly Newline = 83; + public static readonly FStringSingleQuoteStart = 84; + public static readonly FStringDoubleQuoteStart = 85; + public static readonly FStringSingleQuoteEnd = 86; + public static readonly FStringSingleQuoteAtom = 87; + public static readonly FStringDoubleQuoteEnd = 88; + public static readonly FStringDoubleQuoteAtom = 89; public static readonly COMMENT = 2; public static readonly PRAGMA = 3; public static readonly SINGLE_QUOTE_FSTRING = 1; public static readonly DOUBLE_QUOTE_FSTRING = 2; // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", "PRAGMA"]; + public static readonly channelNames: string[] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", "PRAGMA", + ]; // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = ["DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING"]; + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING", + ]; public static readonly ruleNames: string[] = [ - "BlockComment", - "LineComment", - "Pragma", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "Class", - "Interface", - "Constructor", - "New", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "BitwiseAnd", - "BitwiseOr", - "BitwiseXor", - "BitwiseNot", - "BitwiseZeroFillLeftShift", - "BitwiseSignedRightShift", - "BitwiseZeroFillRightShift", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteExpStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteExpStart", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", - "IdentifierNondigit", - "Nondigit", - "Digit", - "DecimalConstant", - "BinaryConstant", - "OctalConstant", - "HexadecimalConstant", - "NonzeroDigit", - "BinaryDigit", - "OctalDigit", - "HexadecimalDigit", - "DecimalFloatingConstant", - "FractionalConstant", - "ExponentPart", - "DigitSequence", - "Sign", - "CCharSequence", - "CChar", - "EscapeSequence", - "SimpleEscapeSequence", - "OctalEscapeSequence", - "HexadecimalEscapeSequence", - "SingleQuoteFStringSCharSequence", - "SingleQuoteFStringSChar", - "DoubleQuoteFStringSCharSequence", - "DoubleQuoteFStringSChar", - "SingleQuoteSCharSequence", - "SingleQuoteSChar", - "DoubleQuoteSCharSequence", - "DoubleQuoteSChar", - "CommentContent", + "BlockComment", "LineComment", "Pragma", "Const", "Var", "As", "Spread", + "Switch", "Case", "Default", "Break", "Continue", "Do", "While", "If", + "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", "RetIndicator", + "Class", "Interface", "Constructor", "New", "True", "False", "Matches", + "Typeof", "Void", "Null", "Undefined", "Comma", "SemiColon", "QuestionMark", + "Colon", "LeftParen", "RightParen", "LeftBracket", "RightBracket", "FStringExpEnd", + "LeftBrace", "RightBrace", "Plus", "PlusPlus", "Minus", "MinusMinus", + "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", + "MinusAssign", "StarAssign", "DivAssign", "ModAssign", "Equal", "NotEqual", + "Less", "LessEqual", "Greater", "GreaterEqual", "BitwiseAnd", "BitwiseOr", + "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", + "FStringSingleQuoteStart", "FStringDoubleQuoteStart", "FStringSingleQuoteExpStart", + "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", "FStringDoubleQuoteExpStart", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", "IdentifierNondigit", + "Nondigit", "Digit", "DecimalConstant", "BinaryConstant", "OctalConstant", + "HexadecimalConstant", "NonzeroDigit", "BinaryDigit", "OctalDigit", "HexadecimalDigit", + "DecimalFloatingConstant", "FractionalConstant", "ExponentPart", "DigitSequence", + "Sign", "CCharSequence", "CChar", "EscapeSequence", "SimpleEscapeSequence", + "OctalEscapeSequence", "HexadecimalEscapeSequence", "SingleQuoteFStringSCharSequence", + "SingleQuoteFStringSChar", "DoubleQuoteFStringSCharSequence", "DoubleQuoteFStringSChar", + "SingleQuoteSCharSequence", "SingleQuoteSChar", "DoubleQuoteSCharSequence", + "DoubleQuoteSChar", "CommentContent", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, - undefined, - undefined, - undefined, - undefined, - "'const'", - "'var'", - "'as'", - "'...'", - "'switch'", - "'case'", - "'default'", - "'break'", - "'continue'", - "'do'", - "'while'", - "'if'", - "'else'", - "'for'", - "'enum'", - "'def'", - "'return'", - "'call'", - "'->'", - "'class'", - "'interface'", - "'constructor'", - "'new'", - "'true'", - "'false'", - "'typeof'", - "'void'", - "'null'", - "'undefined'", - "','", - "';'", - "'?'", - "':'", - "'('", - "')'", - "'['", - "']'", - undefined, - "'{'", - "'}'", - "'+'", - "'++'", - "'-'", - "'--'", - "'*'", - "'/'", - "'%'", - "'**'", - "'&&'", - "'||'", - "'!'", - "'='", - "'+='", - "'-='", - "'*='", - "'/='", - "'%='", - "'=='", - "'!='", - "'<'", - "'<='", - "'>'", - "'>='", - "'&'", - "'|'", - "'^'", - "'~'", - "'<<'", - "'>>'", - "'>>>'", - "'.'", + undefined, undefined, undefined, undefined, undefined, "'const'", "'var'", + "'as'", "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", + "'do'", "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", + "'call'", "'->'", "'class'", "'interface'", "'constructor'", "'new'", + "'true'", "'false'", "'matches'", "'typeof'", "'void'", "'null'", "'undefined'", + "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", + "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", + "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", + "'>>'", "'>>>'", "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, - "FStringExpStart", - "BlockComment", - "LineComment", - "Pragma", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "Class", - "Interface", - "Constructor", - "New", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "BitwiseAnd", - "BitwiseOr", - "BitwiseXor", - "BitwiseNot", - "BitwiseZeroFillLeftShift", - "BitwiseSignedRightShift", - "BitwiseZeroFillRightShift", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", + undefined, "FStringExpStart", "BlockComment", "LineComment", "Pragma", + "Const", "Var", "As", "Spread", "Switch", "Case", "Default", "Break", + "Continue", "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", + "CallFunc", "RetIndicator", "Class", "Interface", "Constructor", "New", + "True", "False", "Matches", "Typeof", "Void", "Null", "Undefined", "Comma", + "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", "PlusPlus", + "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", + "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", + "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", "GreaterEqual", + "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", "Dot", "Identifier", + "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( - KipperLexer._LITERAL_NAMES, - KipperLexer._SYMBOLIC_NAMES, - [], - ); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperLexer._LITERAL_NAMES, KipperLexer._SYMBOLIC_NAMES, []); // @Override // @NotNull @@ -417,130 +189,121 @@ export class KipperLexer extends KipperLexerBase { } // tslint:enable:no-trailing-whitespace + constructor(input: CharStream) { super(input); this._interp = new LexerATNSimulator(KipperLexer._ATN, this); } // @Override - public get grammarFileName(): string { - return "KipperLexer.g4"; - } + public get grammarFileName(): string { return "KipperLexer.g4"; } // @Override - public get ruleNames(): string[] { - return KipperLexer.ruleNames; - } + public get ruleNames(): string[] { return KipperLexer.ruleNames; } // @Override - public get serializedATN(): string { - return KipperLexer._serializedATN; - } + public get serializedATN(): string { return KipperLexer._serializedATN; } // @Override - public get channelNames(): string[] { - return KipperLexer.channelNames; - } + public get channelNames(): string[] { return KipperLexer.channelNames; } // @Override - public get modeNames(): string[] { - return KipperLexer.modeNames; - } + public get modeNames(): string[] { return KipperLexer.modeNames; } // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 81: - this.FStringSingleQuoteStart_action(_localctx, actionIndex); - break; + case 82: + this.FStringSingleQuoteStart_action(_localctx, actionIndex); + break; - case 82: - this.FStringDoubleQuoteStart_action(_localctx, actionIndex); - break; + case 83: + this.FStringDoubleQuoteStart_action(_localctx, actionIndex); + break; - case 84: - this.FStringSingleQuoteEnd_action(_localctx, actionIndex); - break; + case 85: + this.FStringSingleQuoteEnd_action(_localctx, actionIndex); + break; - case 87: - this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); - break; + case 88: + this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); + break; } } private FStringSingleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 0: - this.incrementFStringDepth(); - break; + case 0: + this.incrementFStringDepth() + break; } } private FStringDoubleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 1: - this.incrementFStringDepth(); - break; + case 1: + this.incrementFStringDepth() + break; } } private FStringSingleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 2: - this.decrementFStringDepth(); - break; + case 2: + this.decrementFStringDepth() + break; } } private FStringDoubleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 3: - this.decrementFStringDepth(); - break; + case 3: + this.decrementFStringDepth() + break; } } // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 40: - return this.FStringExpEnd_sempred(_localctx, predIndex); + case 41: + return this.FStringExpEnd_sempred(_localctx, predIndex); - case 83: - return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); + case 84: + return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 86: - return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); + case 87: + return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; } private FStringExpEnd_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.insideFString(); + case 0: + return this.insideFString(); } return true; } private FStringSingleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.insideFString(); + case 1: + return this.insideFString(); } return true; } private FStringDoubleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 2: - return this.insideFString(); + case 2: + return this.insideFString(); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02Z\u0308\b\x01" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02[\u0312\b\x01" + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + - "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + @@ -550,81 +313,82 @@ export class KipperLexer extends KipperLexerBase { "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04" + "p\tp\x04q\tq\x04r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04" + - "y\ty\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xFA\n\x02\f\x02\x0E\x02\xFD" + - "\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + - "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05" + - "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07" + - "\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t" + - "\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + - "\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03" + - "\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x11" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13" + - "\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16" + - "\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B" + - "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + - "\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03" + - ' \x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03"\x03"\x03#\x03' + - "#\x03$\x03$\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03*\x03" + - "*\x03*\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03/\x03" + - "/\x030\x030\x030\x031\x031\x032\x032\x033\x033\x034\x034\x034\x035\x03" + - "5\x035\x036\x036\x036\x037\x037\x038\x038\x039\x039\x039\x03:\x03:\x03" + - ":\x03;\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03" + - "?\x03?\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03C\x03D\x03D\x03" + - "E\x03E\x03F\x03F\x03G\x03G\x03H\x03H\x03H\x03I\x03I\x03I\x03J\x03J\x03" + - "J\x03J\x03K\x03K\x03L\x03L\x03L\x07L\u022A\nL\fL\x0EL\u022D\vL\x03M\x03" + - "M\x03M\x03M\x05M\u0233\nM\x03N\x03N\x05N\u0237\nN\x03N\x03N\x03O\x03O" + - "\x05O\u023D\nO\x03O\x03O\x03P\x03P\x03Q\x06Q\u0244\nQ\rQ\x0EQ\u0245\x03" + - "Q\x03Q\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03T\x03" + - "T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03" + - "V\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03" + - "Y\x03Y\x03Z\x03Z\x03[\x03[\x03\\\x03\\\x03]\x03]\x03^\x06^\u027D\n^\r" + - "^\x0E^\u027E\x03_\x03_\x03_\x06_\u0284\n_\r_\x0E_\u0285\x03`\x03`\x03" + - "`\x06`\u028B\n`\r`\x0E`\u028C\x03a\x03a\x03a\x06a\u0292\na\ra\x0Ea\u0293" + - "\x03b\x03b\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x05f\u02A0\nf\x03f" + - "\x03f\x03f\x05f\u02A5\nf\x03g\x05g\u02A8\ng\x03g\x03g\x03g\x03g\x03g\x05" + - "g\u02AF\ng\x03h\x03h\x05h\u02B3\nh\x03h\x03h\x03i\x06i\u02B8\ni\ri\x0E" + - "i\u02B9\x03j\x03j\x03k\x06k\u02BF\nk\rk\x0Ek\u02C0\x03l\x03l\x05l\u02C5" + - "\nl\x03m\x03m\x03m\x05m\u02CA\nm\x03n\x03n\x03n\x03o\x03o\x03o\x05o\u02D2" + - "\no\x03o\x05o\u02D5\no\x03p\x03p\x03p\x03p\x06p\u02DB\np\rp\x0Ep\u02DC" + - "\x03q\x06q\u02E0\nq\rq\x0Eq\u02E1\x03r\x03r\x05r\u02E6\nr\x03s\x06s\u02E9" + - "\ns\rs\x0Es\u02EA\x03t\x03t\x05t\u02EF\nt\x03u\x06u\u02F2\nu\ru\x0Eu\u02F3" + - "\x03v\x03v\x05v\u02F8\nv\x03w\x06w\u02FB\nw\rw\x0Ew\u02FC\x03x\x03x\x05" + - "x\u0301\nx\x03y\x07y\u0304\ny\fy\x0Ey\u0307\vy\x03\xFB\x02\x02z\x05\x02" + + "y\ty\x04z\tz\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xFC\n\x02\f\x02\x0E" + + "\x02\xFF\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05" + + "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06" + + "\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03" + + "\t\x03\t\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03" + + "\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03" + + "\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03" + + "\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03" + + "\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03" + + "\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03" + + "\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + + "\x1E\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03" + + "\x1F\x03 \x03 \x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03!\x03\"\x03\"\x03" + + "\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%" + + "\x03%\x03&\x03&\x03\'\x03\'\x03(\x03(\x03)\x03)\x03*\x03*\x03+\x03+\x03" + + "+\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x030\x030\x03" + + "1\x031\x031\x032\x032\x033\x033\x034\x034\x035\x035\x035\x036\x036\x03" + + "6\x037\x037\x037\x038\x038\x039\x039\x03:\x03:\x03:\x03;\x03;\x03;\x03" + + "<\x03<\x03<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?\x03@\x03@\x03" + + "@\x03A\x03A\x03B\x03B\x03B\x03C\x03C\x03D\x03D\x03D\x03E\x03E\x03F\x03" + + "F\x03G\x03G\x03H\x03H\x03I\x03I\x03I\x03J\x03J\x03J\x03K\x03K\x03K\x03" + + "K\x03L\x03L\x03M\x03M\x03M\x07M\u0234\nM\fM\x0EM\u0237\vM\x03N\x03N\x03" + + "N\x03N\x05N\u023D\nN\x03O\x03O\x05O\u0241\nO\x03O\x03O\x03P\x03P\x05P" + + "\u0247\nP\x03P\x03P\x03Q\x03Q\x03R\x06R\u024E\nR\rR\x0ER\u024F\x03R\x03" + + "R\x03S\x03S\x03S\x03S\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03" + + "U\x03U\x03U\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03" + + "W\x03W\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03" + + "Z\x03[\x03[\x03\\\x03\\\x03]\x03]\x03^\x03^\x03_\x06_\u0287\n_\r_\x0E" + + "_\u0288\x03`\x03`\x03`\x06`\u028E\n`\r`\x0E`\u028F\x03a\x03a\x03a\x06" + + "a\u0295\na\ra\x0Ea\u0296\x03b\x03b\x03b\x06b\u029C\nb\rb\x0Eb\u029D\x03" + + "c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x03g\x03g\x05g\u02AA\ng\x03g\x03" + + "g\x03g\x05g\u02AF\ng\x03h\x05h\u02B2\nh\x03h\x03h\x03h\x03h\x03h\x05h" + + "\u02B9\nh\x03i\x03i\x05i\u02BD\ni\x03i\x03i\x03j\x06j\u02C2\nj\rj\x0E" + + "j\u02C3\x03k\x03k\x03l\x06l\u02C9\nl\rl\x0El\u02CA\x03m\x03m\x05m\u02CF" + + "\nm\x03n\x03n\x03n\x05n\u02D4\nn\x03o\x03o\x03o\x03p\x03p\x03p\x05p\u02DC" + + "\np\x03p\x05p\u02DF\np\x03q\x03q\x03q\x03q\x06q\u02E5\nq\rq\x0Eq\u02E6" + + "\x03r\x06r\u02EA\nr\rr\x0Er\u02EB\x03s\x03s\x05s\u02F0\ns\x03t\x06t\u02F3" + + "\nt\rt\x0Et\u02F4\x03u\x03u\x05u\u02F9\nu\x03v\x06v\u02FC\nv\rv\x0Ev\u02FD" + + "\x03w\x03w\x05w\u0302\nw\x03x\x06x\u0305\nx\rx\x0Ex\u0306\x03y\x03y\x05" + + "y\u030B\ny\x03z\x07z\u030E\nz\fz\x0Ez\u0311\vz\x03\xFD\x02\x02{\x05\x02" + "\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02" + "\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11" + - "!\x02\x12#\x02\x13%\x02\x14'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + + "!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + "\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02" + - "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02," + + "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02," + "W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x02" + "8o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83" + "\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93" + "\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3" + - "\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02\x02\xAD\x02W\xAF\x02X\xB1\x02" + - "\x02\xB3\x02Y\xB5\x02Z\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02" + - "\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02" + - "\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02" + - "\xD7\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02" + - "\xE3\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02" + - "\xEF\x02\x02\xF1\x02\x02\xF3\x02\x02\x05\x02\x03\x04\x14\x06\x02\v\v\r" + - '\x0E""\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|\x03\x02' + - "2;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05" + - "\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$)" + - ")AA^^cdhhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f" + - "\x0F\x0F$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u0309\x02\x05\x03\x02" + - "\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02" + - "\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02" + - "\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02" + - "\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02" + - "\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02" + - "\x02%\x03\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+" + - "\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" + + "\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02\x02\xAF\x02X\xB1\x02" + + "Y\xB3\x02\x02\xB5\x02Z\xB7\x02[\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF" + + "\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02\xCB" + + "\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7" + + "\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3" + + "\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02\xEF" + + "\x02\x02\xF1\x02\x02\xF3\x02\x02\xF5\x02\x02\x05\x02\x03\x04\x14\x06\x02" + + "\v\v\r\x0E\"\"\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|" + + "\x03\x022;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03" + + "\x0229\x05\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E" + + "\x02$$))AA^^cdhhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02" + + "\f\f\x0F\x0F$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u0313\x02\x05\x03" + + "\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02" + + "\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02" + + "\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02" + + "\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02" + + "\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02" + + "\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" + + "+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" + "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" + "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" + "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" + @@ -643,263 +407,269 @@ export class KipperLexer extends KipperLexerBase { "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" + "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" + "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" + - "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x03\xAB\x03\x02\x02\x02" + - "\x03\xAD\x03\x02\x02\x02\x03\xAF\x03\x02\x02\x02\x04\xB1\x03\x02\x02\x02" + - "\x04\xB3\x03\x02\x02\x02\x04\xB5\x03\x02\x02\x02\x05\xF5\x03\x02\x02\x02" + - "\x07\u0103\x03\x02\x02\x02\t\u010A\x03\x02\x02\x02\v\u0116\x03\x02\x02" + - "\x02\r\u011C\x03\x02\x02\x02\x0F\u0120\x03\x02\x02\x02\x11\u0123\x03\x02" + - "\x02\x02\x13\u0127\x03\x02\x02\x02\x15\u012E\x03\x02\x02\x02\x17\u0133" + - "\x03\x02\x02\x02\x19\u013B\x03\x02\x02\x02\x1B\u0141\x03\x02\x02\x02\x1D" + - "\u014A\x03\x02\x02\x02\x1F\u014D\x03\x02\x02\x02!\u0153\x03\x02\x02\x02" + - "#\u0156\x03\x02\x02\x02%\u015B\x03\x02\x02\x02'\u015F\x03\x02\x02\x02" + - ")\u0164\x03\x02\x02\x02+\u0168\x03\x02\x02\x02-\u016F\x03\x02\x02\x02" + - "/\u0174\x03\x02\x02\x021\u0177\x03\x02\x02\x023\u017D\x03\x02\x02\x02" + - "5\u0187\x03\x02\x02\x027\u0193\x03\x02\x02\x029\u0197\x03\x02\x02\x02" + - ";\u019C\x03\x02\x02\x02=\u01A2\x03\x02\x02\x02?\u01A9\x03\x02\x02\x02" + - "A\u01AE\x03\x02\x02\x02C\u01B3\x03\x02\x02\x02E\u01BD\x03\x02\x02\x02" + - "G\u01BF\x03\x02\x02\x02I\u01C1\x03\x02\x02\x02K\u01C3\x03\x02\x02\x02" + - "M\u01C5\x03\x02\x02\x02O\u01C7\x03\x02\x02\x02Q\u01C9\x03\x02\x02\x02" + - "S\u01CB\x03\x02\x02\x02U\u01CD\x03\x02\x02\x02W\u01D2\x03\x02\x02\x02" + - "Y\u01D4\x03\x02\x02\x02[\u01D6\x03\x02\x02\x02]\u01D8\x03\x02\x02\x02" + - "_\u01DB\x03\x02\x02\x02a\u01DD\x03\x02\x02\x02c\u01E0\x03\x02\x02\x02" + - "e\u01E2\x03\x02\x02\x02g\u01E4\x03\x02\x02\x02i\u01E6\x03\x02\x02\x02" + - "k\u01E9\x03\x02\x02\x02m\u01EC\x03\x02\x02\x02o\u01EF\x03\x02\x02\x02" + - "q\u01F1\x03\x02\x02\x02s\u01F3\x03\x02\x02\x02u\u01F6\x03\x02\x02\x02" + - "w\u01F9\x03\x02\x02\x02y\u01FC\x03\x02\x02\x02{\u01FF\x03\x02\x02\x02" + - "}\u0202\x03\x02\x02\x02\x7F\u0205\x03\x02\x02\x02\x81\u0208\x03\x02\x02" + - "\x02\x83\u020A\x03\x02\x02\x02\x85\u020D\x03\x02\x02\x02\x87\u020F\x03" + - "\x02\x02\x02\x89\u0212\x03\x02\x02\x02\x8B\u0214\x03\x02\x02\x02\x8D\u0216" + - "\x03\x02\x02\x02\x8F\u0218\x03\x02\x02\x02\x91\u021A\x03\x02\x02\x02\x93" + - "\u021D\x03\x02\x02\x02\x95\u0220\x03\x02\x02\x02\x97\u0224\x03\x02\x02" + - "\x02\x99\u0226\x03\x02\x02\x02\x9B\u0232\x03\x02\x02\x02\x9D\u0234\x03" + - "\x02\x02\x02\x9F\u023A\x03\x02\x02\x02\xA1\u0240\x03\x02\x02\x02\xA3\u0243" + - "\x03\x02\x02\x02\xA5\u0249\x03\x02\x02\x02\xA7\u024D\x03\x02\x02\x02\xA9" + - "\u0254\x03\x02\x02\x02\xAB\u025B\x03\x02\x02\x02\xAD\u0261\x03\x02\x02" + - "\x02\xAF\u0266\x03\x02\x02\x02\xB1\u0268\x03\x02\x02\x02\xB3\u026E\x03" + - "\x02\x02\x02\xB5\u0273\x03\x02\x02\x02\xB7\u0275\x03\x02\x02\x02\xB9\u0277" + - "\x03\x02\x02\x02\xBB\u0279\x03\x02\x02\x02\xBD\u027C\x03\x02\x02\x02\xBF" + - "\u0280\x03\x02\x02\x02\xC1\u0287\x03\x02\x02\x02\xC3\u028E\x03\x02\x02" + - "\x02\xC5\u0295\x03\x02\x02\x02\xC7\u0297\x03\x02\x02\x02\xC9\u0299\x03" + - "\x02\x02\x02\xCB\u029B\x03\x02\x02\x02\xCD\u02A4\x03\x02\x02\x02\xCF\u02AE" + - "\x03\x02\x02\x02\xD1\u02B0\x03\x02\x02\x02\xD3\u02B7\x03\x02\x02\x02\xD5" + - "\u02BB\x03\x02\x02\x02\xD7\u02BE\x03\x02\x02\x02\xD9\u02C4\x03\x02\x02" + - "\x02\xDB\u02C9\x03\x02\x02\x02\xDD\u02CB\x03\x02\x02\x02\xDF\u02CE\x03" + - "\x02\x02\x02\xE1\u02D6\x03\x02\x02\x02\xE3\u02DF\x03\x02\x02\x02\xE5\u02E5" + - "\x03\x02\x02\x02\xE7\u02E8\x03\x02\x02\x02\xE9\u02EE\x03\x02\x02\x02\xEB" + - "\u02F1\x03\x02\x02\x02\xED\u02F7\x03\x02\x02\x02\xEF\u02FA\x03\x02\x02" + - "\x02\xF1\u0300\x03\x02\x02\x02\xF3\u0305\x03\x02\x02\x02\xF5\xF6\x071" + - "\x02\x02\xF6\xF7\x07,\x02\x02\xF7\xFB\x03\x02\x02\x02\xF8\xFA\v\x02\x02" + - "\x02\xF9\xF8\x03\x02\x02\x02\xFA\xFD\x03\x02\x02\x02\xFB\xFC\x03\x02\x02" + - "\x02\xFB\xF9\x03\x02\x02\x02\xFC\xFE\x03\x02\x02\x02\xFD\xFB\x03\x02\x02" + - "\x02\xFE\xFF\x07,\x02\x02\xFF\u0100\x071\x02\x02\u0100\u0101\x03\x02\x02" + - "\x02\u0101\u0102\b\x02\x02\x02\u0102\x06\x03\x02\x02\x02\u0103\u0104\x07" + - "1\x02\x02\u0104\u0105\x071\x02\x02\u0105\u0106\x03\x02\x02\x02\u0106\u0107" + - "\x05\xF3y\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0109\b\x03\x02\x02\u0109" + - "\b\x03\x02\x02\x02\u010A\u010B\x07%\x02\x02\u010B\u010C\x07r\x02\x02\u010C" + - "\u010D\x07t\x02\x02\u010D\u010E\x07c\x02\x02\u010E\u010F\x07i\x02\x02" + - "\u010F\u0110\x07o\x02\x02\u0110\u0111\x07c\x02\x02\u0111\u0112\x03\x02" + - "\x02\x02\u0112\u0113\x05\xF3y\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0115" + - "\b\x04\x03\x02\u0115\n\x03\x02\x02\x02\u0116\u0117\x07e\x02\x02\u0117" + - "\u0118\x07q\x02\x02\u0118\u0119\x07p\x02\x02\u0119\u011A\x07u\x02\x02" + - "\u011A\u011B\x07v\x02\x02\u011B\f\x03\x02\x02\x02\u011C\u011D\x07x\x02" + - "\x02\u011D\u011E\x07c\x02\x02\u011E\u011F\x07t\x02\x02\u011F\x0E\x03\x02" + - "\x02\x02\u0120\u0121\x07c\x02\x02\u0121\u0122\x07u\x02\x02\u0122\x10\x03" + - "\x02\x02\x02\u0123\u0124\x070\x02\x02\u0124\u0125\x070\x02\x02\u0125\u0126" + - "\x070\x02\x02\u0126\x12\x03\x02\x02\x02\u0127\u0128\x07u\x02\x02\u0128" + - "\u0129\x07y\x02\x02\u0129\u012A\x07k\x02\x02\u012A\u012B\x07v\x02\x02" + - "\u012B\u012C\x07e\x02\x02\u012C\u012D\x07j\x02\x02\u012D\x14\x03\x02\x02" + - "\x02\u012E\u012F\x07e\x02\x02\u012F\u0130\x07c\x02\x02\u0130\u0131\x07" + - "u\x02\x02\u0131\u0132\x07g\x02\x02\u0132\x16\x03\x02\x02\x02\u0133\u0134" + - "\x07f\x02\x02\u0134\u0135\x07g\x02\x02\u0135\u0136\x07h\x02\x02\u0136" + - "\u0137\x07c\x02\x02\u0137\u0138\x07w\x02\x02\u0138\u0139\x07n\x02\x02" + - "\u0139\u013A\x07v\x02\x02\u013A\x18\x03\x02\x02\x02\u013B\u013C\x07d\x02" + - "\x02\u013C\u013D\x07t\x02\x02\u013D\u013E\x07g\x02\x02\u013E\u013F\x07" + - "c\x02\x02\u013F\u0140\x07m\x02\x02\u0140\x1A\x03\x02\x02\x02\u0141\u0142" + - "\x07e\x02\x02\u0142\u0143\x07q\x02\x02\u0143\u0144\x07p\x02\x02\u0144" + - "\u0145\x07v\x02\x02\u0145\u0146\x07k\x02\x02\u0146\u0147\x07p\x02\x02" + - "\u0147\u0148\x07w\x02\x02\u0148\u0149\x07g\x02\x02\u0149\x1C\x03\x02\x02" + - "\x02\u014A\u014B\x07f\x02\x02\u014B\u014C\x07q\x02\x02\u014C\x1E\x03\x02" + - "\x02\x02\u014D\u014E\x07y\x02\x02\u014E\u014F\x07j\x02\x02\u014F\u0150" + - "\x07k\x02\x02\u0150\u0151\x07n\x02\x02\u0151\u0152\x07g\x02\x02\u0152" + - " \x03\x02\x02\x02\u0153\u0154\x07k\x02\x02\u0154\u0155\x07h\x02\x02\u0155" + - '"\x03\x02\x02\x02\u0156\u0157\x07g\x02\x02\u0157\u0158\x07n\x02\x02\u0158' + - "\u0159\x07u\x02\x02\u0159\u015A\x07g\x02\x02\u015A$\x03\x02\x02\x02\u015B" + - "\u015C\x07h\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07t\x02\x02" + - "\u015E&\x03\x02\x02\x02\u015F\u0160\x07g\x02\x02\u0160\u0161\x07p\x02" + - "\x02\u0161\u0162\x07w\x02\x02\u0162\u0163\x07o\x02\x02\u0163(\x03\x02" + - "\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u0166\x07g\x02\x02\u0166\u0167" + - "\x07h\x02\x02\u0167*\x03\x02\x02\x02\u0168\u0169\x07t\x02\x02\u0169\u016A" + - "\x07g\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07w\x02\x02\u016C" + - "\u016D\x07t\x02\x02\u016D\u016E\x07p\x02\x02\u016E,\x03\x02\x02\x02\u016F" + - "\u0170\x07e\x02\x02\u0170\u0171\x07c\x02\x02\u0171\u0172\x07n\x02\x02" + - "\u0172\u0173\x07n\x02\x02\u0173.\x03\x02\x02\x02\u0174\u0175\x07/\x02" + - "\x02\u0175\u0176\x07@\x02\x02\u01760\x03\x02\x02\x02\u0177\u0178\x07e" + - "\x02\x02\u0178\u0179\x07n\x02\x02\u0179\u017A\x07c\x02\x02\u017A\u017B" + - "\x07u\x02\x02\u017B\u017C\x07u\x02\x02\u017C2\x03\x02\x02\x02\u017D\u017E" + - "\x07k\x02\x02\u017E\u017F\x07p\x02\x02\u017F\u0180\x07v\x02\x02\u0180" + - "\u0181\x07g\x02\x02\u0181\u0182\x07t\x02\x02\u0182\u0183\x07h\x02\x02" + - "\u0183\u0184\x07c\x02\x02\u0184\u0185\x07e\x02\x02\u0185\u0186\x07g\x02" + - "\x02\u01864\x03\x02\x02\x02\u0187\u0188\x07e\x02\x02\u0188\u0189\x07q" + - "\x02\x02\u0189\u018A\x07p\x02\x02\u018A\u018B\x07u\x02\x02\u018B\u018C" + - "\x07v\x02\x02\u018C\u018D\x07t\x02\x02\u018D\u018E\x07w\x02\x02\u018E" + - "\u018F\x07e\x02\x02\u018F\u0190\x07v\x02\x02\u0190\u0191\x07q\x02\x02" + - "\u0191\u0192\x07t\x02\x02\u01926\x03\x02\x02\x02\u0193\u0194\x07p\x02" + - "\x02\u0194\u0195\x07g\x02\x02\u0195\u0196\x07y\x02\x02\u01968\x03\x02" + - "\x02\x02\u0197\u0198\x07v\x02\x02\u0198\u0199\x07t\x02\x02\u0199\u019A" + - "\x07w\x02\x02\u019A\u019B\x07g\x02\x02\u019B:\x03\x02\x02\x02\u019C\u019D" + - "\x07h\x02\x02\u019D\u019E\x07c\x02\x02\u019E\u019F\x07n\x02\x02\u019F" + - "\u01A0\x07u\x02\x02\u01A0\u01A1\x07g\x02\x02\u01A1<\x03\x02\x02\x02\u01A2" + - "\u01A3\x07v\x02\x02\u01A3\u01A4\x07{\x02\x02\u01A4\u01A5\x07r\x02\x02" + - "\u01A5\u01A6\x07g\x02\x02\u01A6\u01A7\x07q\x02\x02\u01A7\u01A8\x07h\x02" + - "\x02\u01A8>\x03\x02\x02\x02\u01A9\u01AA\x07x\x02\x02\u01AA\u01AB\x07q" + - "\x02\x02\u01AB\u01AC\x07k\x02\x02\u01AC\u01AD\x07f\x02\x02\u01AD@\x03" + - "\x02\x02\x02\u01AE\u01AF\x07p\x02\x02\u01AF\u01B0\x07w\x02\x02\u01B0\u01B1" + - "\x07n\x02\x02\u01B1\u01B2\x07n\x02\x02\u01B2B\x03\x02\x02\x02\u01B3\u01B4" + - "\x07w\x02\x02\u01B4\u01B5\x07p\x02\x02\u01B5\u01B6\x07f\x02\x02\u01B6" + - "\u01B7\x07g\x02\x02\u01B7\u01B8\x07h\x02\x02\u01B8\u01B9\x07k\x02\x02" + - "\u01B9\u01BA\x07p\x02\x02\u01BA\u01BB\x07g\x02\x02\u01BB\u01BC\x07f\x02" + - "\x02\u01BCD\x03\x02\x02\x02\u01BD\u01BE\x07.\x02\x02\u01BEF\x03\x02\x02" + - "\x02\u01BF\u01C0\x07=\x02\x02\u01C0H\x03\x02\x02\x02\u01C1\u01C2\x07A" + - "\x02\x02\u01C2J\x03\x02\x02\x02\u01C3\u01C4\x07<\x02\x02\u01C4L\x03\x02" + - "\x02\x02\u01C5\u01C6\x07*\x02\x02\u01C6N\x03\x02\x02\x02\u01C7\u01C8\x07" + - "+\x02\x02\u01C8P\x03\x02\x02\x02\u01C9\u01CA\x07]\x02\x02\u01CAR\x03\x02" + - "\x02\x02\u01CB\u01CC\x07_\x02\x02\u01CCT\x03\x02\x02\x02\u01CD\u01CE\x06" + - "*\x02\x02\u01CE\u01CF\x07\x7F\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0" + - "\u01D1\b*\x04\x02\u01D1V\x03\x02\x02\x02\u01D2\u01D3\x07}\x02\x02\u01D3" + - "X\x03\x02\x02\x02\u01D4\u01D5\x07\x7F\x02\x02\u01D5Z\x03\x02\x02\x02\u01D6" + - "\u01D7\x07-\x02\x02\u01D7\\\x03\x02\x02\x02\u01D8\u01D9\x07-\x02\x02\u01D9" + - "\u01DA\x07-\x02\x02\u01DA^\x03\x02\x02\x02\u01DB\u01DC\x07/\x02\x02\u01DC" + - "`\x03\x02\x02\x02\u01DD\u01DE\x07/\x02\x02\u01DE\u01DF\x07/\x02\x02\u01DF" + - "b\x03\x02\x02\x02\u01E0\u01E1\x07,\x02\x02\u01E1d\x03\x02\x02\x02\u01E2" + - "\u01E3\x071\x02\x02\u01E3f\x03\x02\x02\x02\u01E4\u01E5\x07'\x02\x02\u01E5" + - "h\x03\x02\x02\x02\u01E6\u01E7\x07,\x02\x02\u01E7\u01E8\x07,\x02\x02\u01E8" + - "j\x03\x02\x02\x02\u01E9\u01EA\x07(\x02\x02\u01EA\u01EB\x07(\x02\x02\u01EB" + - "l\x03\x02\x02\x02\u01EC\u01ED\x07~\x02\x02\u01ED\u01EE\x07~\x02\x02\u01EE" + - "n\x03\x02\x02\x02\u01EF\u01F0\x07#\x02\x02\u01F0p\x03\x02\x02\x02\u01F1" + - "\u01F2\x07?\x02\x02\u01F2r\x03\x02\x02\x02\u01F3\u01F4\x07-\x02\x02\u01F4" + - "\u01F5\x07?\x02\x02\u01F5t\x03\x02\x02\x02\u01F6\u01F7\x07/\x02\x02\u01F7" + - "\u01F8\x07?\x02\x02\u01F8v\x03\x02\x02\x02\u01F9\u01FA\x07,\x02\x02\u01FA" + - "\u01FB\x07?\x02\x02\u01FBx\x03\x02\x02\x02\u01FC\u01FD\x071\x02\x02\u01FD" + - "\u01FE\x07?\x02\x02\u01FEz\x03\x02\x02\x02\u01FF\u0200\x07'\x02\x02\u0200" + - "\u0201\x07?\x02\x02"; + "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02" + + "\x03\xAD\x03\x02\x02\x02\x03\xAF\x03\x02\x02\x02\x03\xB1\x03\x02\x02\x02" + + "\x04\xB3\x03\x02\x02\x02\x04\xB5\x03\x02\x02\x02\x04\xB7\x03\x02\x02\x02" + + "\x05\xF7\x03\x02\x02\x02\x07\u0105\x03\x02\x02\x02\t\u010C\x03\x02\x02" + + "\x02\v\u0118\x03\x02\x02\x02\r\u011E\x03\x02\x02\x02\x0F\u0122\x03\x02" + + "\x02\x02\x11\u0125\x03\x02\x02\x02\x13\u0129\x03\x02\x02\x02\x15\u0130" + + "\x03\x02\x02\x02\x17\u0135\x03\x02\x02\x02\x19\u013D\x03\x02\x02\x02\x1B" + + "\u0143\x03\x02\x02\x02\x1D\u014C\x03\x02\x02\x02\x1F\u014F\x03\x02\x02" + + "\x02!\u0155\x03\x02\x02\x02#\u0158\x03\x02\x02\x02%\u015D\x03\x02\x02" + + "\x02\'\u0161\x03\x02\x02\x02)\u0166\x03\x02\x02\x02+\u016A\x03\x02\x02" + + "\x02-\u0171\x03\x02\x02\x02/\u0176\x03\x02\x02\x021\u0179\x03\x02\x02" + + "\x023\u017F\x03\x02\x02\x025\u0189\x03\x02\x02\x027\u0195\x03\x02\x02" + + "\x029\u0199\x03\x02\x02\x02;\u019E\x03\x02\x02\x02=\u01A4\x03\x02\x02" + + "\x02?\u01AC\x03\x02\x02\x02A\u01B3\x03\x02\x02\x02C\u01B8\x03\x02\x02" + + "\x02E\u01BD\x03\x02\x02\x02G\u01C7\x03\x02\x02\x02I\u01C9\x03\x02\x02" + + "\x02K\u01CB\x03\x02\x02\x02M\u01CD\x03\x02\x02\x02O\u01CF\x03\x02\x02" + + "\x02Q\u01D1\x03\x02\x02\x02S\u01D3\x03\x02\x02\x02U\u01D5\x03\x02\x02" + + "\x02W\u01D7\x03\x02\x02\x02Y\u01DC\x03\x02\x02\x02[\u01DE\x03\x02\x02" + + "\x02]\u01E0\x03\x02\x02\x02_\u01E2\x03\x02\x02\x02a\u01E5\x03\x02\x02" + + "\x02c\u01E7\x03\x02\x02\x02e\u01EA\x03\x02\x02\x02g\u01EC\x03\x02\x02" + + "\x02i\u01EE\x03\x02\x02\x02k\u01F0\x03\x02\x02\x02m\u01F3\x03\x02\x02" + + "\x02o\u01F6\x03\x02\x02\x02q\u01F9\x03\x02\x02\x02s\u01FB\x03\x02\x02" + + "\x02u\u01FD\x03\x02\x02\x02w\u0200\x03\x02\x02\x02y\u0203\x03\x02\x02" + + "\x02{\u0206\x03\x02\x02\x02}\u0209\x03\x02\x02\x02\x7F\u020C\x03\x02\x02" + + "\x02\x81\u020F\x03\x02\x02\x02\x83\u0212\x03\x02\x02\x02\x85\u0214\x03" + + "\x02\x02\x02\x87\u0217\x03\x02\x02\x02\x89\u0219\x03\x02\x02\x02\x8B\u021C" + + "\x03\x02\x02\x02\x8D\u021E\x03\x02\x02\x02\x8F\u0220\x03\x02\x02\x02\x91" + + "\u0222\x03\x02\x02\x02\x93\u0224\x03\x02\x02\x02\x95\u0227\x03\x02\x02" + + "\x02\x97\u022A\x03\x02\x02\x02\x99\u022E\x03\x02\x02\x02\x9B\u0230\x03" + + "\x02\x02\x02\x9D\u023C\x03\x02\x02\x02\x9F\u023E\x03\x02\x02\x02\xA1\u0244" + + "\x03\x02\x02\x02\xA3\u024A\x03\x02\x02\x02\xA5\u024D\x03\x02\x02\x02\xA7" + + "\u0253\x03\x02\x02\x02\xA9\u0257\x03\x02\x02\x02\xAB\u025E\x03\x02\x02" + + "\x02\xAD\u0265\x03\x02\x02\x02\xAF\u026B\x03\x02\x02\x02\xB1\u0270\x03" + + "\x02\x02\x02\xB3\u0272\x03\x02\x02\x02\xB5\u0278\x03\x02\x02\x02\xB7\u027D" + + "\x03\x02\x02\x02\xB9\u027F\x03\x02\x02\x02\xBB\u0281\x03\x02\x02\x02\xBD" + + "\u0283\x03\x02\x02\x02\xBF\u0286\x03\x02\x02\x02\xC1\u028A\x03\x02\x02" + + "\x02\xC3\u0291\x03\x02\x02\x02\xC5\u0298\x03\x02\x02\x02\xC7\u029F\x03" + + "\x02\x02\x02\xC9\u02A1\x03\x02\x02\x02\xCB\u02A3\x03\x02\x02\x02\xCD\u02A5" + + "\x03\x02\x02\x02\xCF\u02AE\x03\x02\x02\x02\xD1\u02B8\x03\x02\x02\x02\xD3" + + "\u02BA\x03\x02\x02\x02\xD5\u02C1\x03\x02\x02\x02\xD7\u02C5\x03\x02\x02" + + "\x02\xD9\u02C8\x03\x02\x02\x02\xDB\u02CE\x03\x02\x02\x02\xDD\u02D3\x03" + + "\x02\x02\x02\xDF\u02D5\x03\x02\x02\x02\xE1\u02D8\x03\x02\x02\x02\xE3\u02E0" + + "\x03\x02\x02\x02\xE5\u02E9\x03\x02\x02\x02\xE7\u02EF\x03\x02\x02\x02\xE9" + + "\u02F2\x03\x02\x02\x02\xEB\u02F8\x03\x02\x02\x02\xED\u02FB\x03\x02\x02" + + "\x02\xEF\u0301\x03\x02\x02\x02\xF1\u0304\x03\x02\x02\x02\xF3\u030A\x03" + + "\x02\x02\x02\xF5\u030F\x03\x02\x02\x02\xF7\xF8\x071\x02\x02\xF8\xF9\x07" + + ",\x02\x02\xF9\xFD\x03\x02\x02\x02\xFA\xFC\v\x02\x02\x02\xFB\xFA\x03\x02" + + "\x02\x02\xFC\xFF\x03\x02\x02\x02\xFD\xFE\x03\x02\x02\x02\xFD\xFB\x03\x02" + + "\x02\x02\xFE\u0100\x03\x02\x02\x02\xFF\xFD\x03\x02\x02\x02\u0100\u0101" + + "\x07,\x02\x02\u0101\u0102\x071\x02\x02\u0102\u0103\x03\x02\x02\x02\u0103" + + "\u0104\b\x02\x02\x02\u0104\x06\x03\x02\x02\x02\u0105\u0106\x071\x02\x02" + + "\u0106\u0107\x071\x02\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0109\x05" + + "\xF5z\x02\u0109\u010A\x03\x02\x02\x02\u010A\u010B\b\x03\x02\x02\u010B" + + "\b\x03\x02\x02\x02\u010C\u010D\x07%\x02\x02\u010D\u010E\x07r\x02\x02\u010E" + + "\u010F\x07t\x02\x02\u010F\u0110\x07c\x02\x02\u0110\u0111\x07i\x02\x02" + + "\u0111\u0112\x07o\x02\x02\u0112\u0113\x07c\x02\x02\u0113\u0114\x03\x02" + + "\x02\x02\u0114\u0115\x05\xF5z\x02\u0115\u0116\x03\x02\x02\x02\u0116\u0117" + + "\b\x04\x03\x02\u0117\n\x03\x02\x02\x02\u0118\u0119\x07e\x02\x02\u0119" + + "\u011A\x07q\x02\x02\u011A\u011B\x07p\x02\x02\u011B\u011C\x07u\x02\x02" + + "\u011C\u011D\x07v\x02\x02\u011D\f\x03\x02\x02\x02\u011E\u011F\x07x\x02" + + "\x02\u011F\u0120\x07c\x02\x02\u0120\u0121\x07t\x02\x02\u0121\x0E\x03\x02" + + "\x02\x02\u0122\u0123\x07c\x02\x02\u0123\u0124\x07u\x02\x02\u0124\x10\x03" + + "\x02\x02\x02\u0125\u0126\x070\x02\x02\u0126\u0127\x070\x02\x02\u0127\u0128" + + "\x070\x02\x02\u0128\x12\x03\x02\x02\x02\u0129\u012A\x07u\x02\x02\u012A" + + "\u012B\x07y\x02\x02\u012B\u012C\x07k\x02\x02\u012C\u012D\x07v\x02\x02" + + "\u012D\u012E\x07e\x02\x02\u012E\u012F\x07j\x02\x02\u012F\x14\x03\x02\x02" + + "\x02\u0130\u0131\x07e\x02\x02\u0131\u0132\x07c\x02\x02\u0132\u0133\x07" + + "u\x02\x02\u0133\u0134\x07g\x02\x02\u0134\x16\x03\x02\x02\x02\u0135\u0136" + + "\x07f\x02\x02\u0136\u0137\x07g\x02\x02\u0137\u0138\x07h\x02\x02\u0138" + + "\u0139\x07c\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u013B\x07n\x02\x02" + + "\u013B\u013C\x07v\x02\x02\u013C\x18\x03\x02\x02\x02\u013D\u013E\x07d\x02" + + "\x02\u013E\u013F\x07t\x02\x02\u013F\u0140\x07g\x02\x02\u0140\u0141\x07" + + "c\x02\x02\u0141\u0142\x07m\x02\x02\u0142\x1A\x03\x02\x02\x02\u0143\u0144" + + "\x07e\x02\x02\u0144\u0145\x07q\x02\x02\u0145\u0146\x07p\x02\x02\u0146" + + "\u0147\x07v\x02\x02\u0147\u0148\x07k\x02\x02\u0148\u0149\x07p\x02\x02" + + "\u0149\u014A\x07w\x02\x02\u014A\u014B\x07g\x02\x02\u014B\x1C\x03\x02\x02" + + "\x02\u014C\u014D\x07f\x02\x02\u014D\u014E\x07q\x02\x02\u014E\x1E\x03\x02" + + "\x02\x02\u014F\u0150\x07y\x02\x02\u0150\u0151\x07j\x02\x02\u0151\u0152" + + "\x07k\x02\x02\u0152\u0153\x07n\x02\x02\u0153\u0154\x07g\x02\x02\u0154" + + " \x03\x02\x02\x02\u0155\u0156\x07k\x02\x02\u0156\u0157\x07h\x02\x02\u0157" + + "\"\x03\x02\x02\x02\u0158\u0159\x07g\x02\x02\u0159\u015A\x07n\x02\x02\u015A" + + "\u015B\x07u\x02\x02\u015B\u015C\x07g\x02\x02\u015C$\x03\x02\x02\x02\u015D" + + "\u015E\x07h\x02\x02\u015E\u015F\x07q\x02\x02\u015F\u0160\x07t\x02\x02" + + "\u0160&\x03\x02\x02\x02\u0161\u0162\x07g\x02\x02\u0162\u0163\x07p\x02" + + "\x02\u0163\u0164\x07w\x02\x02\u0164\u0165\x07o\x02\x02\u0165(\x03\x02" + + "\x02\x02\u0166\u0167\x07f\x02\x02\u0167\u0168\x07g\x02\x02\u0168\u0169" + + "\x07h\x02\x02\u0169*\x03\x02\x02\x02\u016A\u016B\x07t\x02\x02\u016B\u016C" + + "\x07g\x02\x02\u016C\u016D\x07v\x02\x02\u016D\u016E\x07w\x02\x02\u016E" + + "\u016F\x07t\x02\x02\u016F\u0170\x07p\x02\x02\u0170,\x03\x02\x02\x02\u0171" + + "\u0172\x07e\x02\x02\u0172\u0173\x07c\x02\x02\u0173\u0174\x07n\x02\x02" + + "\u0174\u0175\x07n\x02\x02\u0175.\x03\x02\x02\x02\u0176\u0177\x07/\x02" + + "\x02\u0177\u0178\x07@\x02\x02\u01780\x03\x02\x02\x02\u0179\u017A\x07e" + + "\x02\x02\u017A\u017B\x07n\x02\x02\u017B\u017C\x07c\x02\x02\u017C\u017D" + + "\x07u\x02\x02\u017D\u017E\x07u\x02\x02\u017E2\x03\x02\x02\x02\u017F\u0180" + + "\x07k\x02\x02\u0180\u0181\x07p\x02\x02\u0181\u0182\x07v\x02\x02\u0182" + + "\u0183\x07g\x02\x02\u0183\u0184\x07t\x02\x02\u0184\u0185\x07h\x02\x02" + + "\u0185\u0186\x07c\x02\x02\u0186\u0187\x07e\x02\x02\u0187\u0188\x07g\x02" + + "\x02\u01884\x03\x02\x02\x02\u0189\u018A\x07e\x02\x02\u018A\u018B\x07q" + + "\x02\x02\u018B\u018C\x07p\x02\x02\u018C\u018D\x07u\x02\x02\u018D\u018E" + + "\x07v\x02\x02\u018E\u018F\x07t\x02\x02\u018F\u0190\x07w\x02\x02\u0190" + + "\u0191\x07e\x02\x02\u0191\u0192\x07v\x02\x02\u0192\u0193\x07q\x02\x02" + + "\u0193\u0194\x07t\x02\x02\u01946\x03\x02\x02\x02\u0195\u0196\x07p\x02" + + "\x02\u0196\u0197\x07g\x02\x02\u0197\u0198\x07y\x02\x02\u01988\x03\x02" + + "\x02\x02\u0199\u019A\x07v\x02\x02\u019A\u019B\x07t\x02\x02\u019B\u019C" + + "\x07w\x02\x02\u019C\u019D\x07g\x02\x02\u019D:\x03\x02\x02\x02\u019E\u019F" + + "\x07h\x02\x02\u019F\u01A0\x07c\x02\x02\u01A0\u01A1\x07n\x02\x02\u01A1" + + "\u01A2\x07u\x02\x02\u01A2\u01A3\x07g\x02\x02\u01A3<\x03\x02\x02\x02\u01A4" + + "\u01A5\x07o\x02\x02\u01A5\u01A6\x07c\x02\x02\u01A6\u01A7\x07v\x02\x02" + + "\u01A7\u01A8\x07e\x02\x02\u01A8\u01A9\x07j\x02\x02\u01A9\u01AA\x07g\x02" + + "\x02\u01AA\u01AB\x07u\x02\x02\u01AB>\x03\x02\x02\x02\u01AC\u01AD\x07v" + + "\x02\x02\u01AD\u01AE\x07{\x02\x02\u01AE\u01AF\x07r\x02\x02\u01AF\u01B0" + + "\x07g\x02\x02\u01B0\u01B1\x07q\x02\x02\u01B1\u01B2\x07h\x02\x02\u01B2" + + "@\x03\x02\x02\x02\u01B3\u01B4\x07x\x02\x02\u01B4\u01B5\x07q\x02\x02\u01B5" + + "\u01B6\x07k\x02\x02\u01B6\u01B7\x07f\x02\x02\u01B7B\x03\x02\x02\x02\u01B8" + + "\u01B9\x07p\x02\x02\u01B9\u01BA\x07w\x02\x02\u01BA\u01BB\x07n\x02\x02" + + "\u01BB\u01BC\x07n\x02\x02\u01BCD\x03\x02\x02\x02\u01BD\u01BE\x07w\x02" + + "\x02\u01BE\u01BF\x07p\x02\x02\u01BF\u01C0\x07f\x02\x02\u01C0\u01C1\x07" + + "g\x02\x02\u01C1\u01C2\x07h\x02\x02\u01C2\u01C3\x07k\x02\x02\u01C3\u01C4" + + "\x07p\x02\x02\u01C4\u01C5\x07g\x02\x02\u01C5\u01C6\x07f\x02\x02\u01C6" + + "F\x03\x02\x02\x02\u01C7\u01C8\x07.\x02\x02\u01C8H\x03\x02\x02\x02\u01C9" + + "\u01CA\x07=\x02\x02\u01CAJ\x03\x02\x02\x02\u01CB\u01CC\x07A\x02\x02\u01CC" + + "L\x03\x02\x02\x02\u01CD\u01CE\x07<\x02\x02\u01CEN\x03\x02\x02\x02\u01CF" + + "\u01D0\x07*\x02\x02\u01D0P\x03\x02\x02\x02\u01D1\u01D2\x07+\x02\x02\u01D2" + + "R\x03\x02\x02\x02\u01D3\u01D4\x07]\x02\x02\u01D4T\x03\x02\x02\x02\u01D5" + + "\u01D6\x07_\x02\x02\u01D6V\x03\x02\x02\x02\u01D7\u01D8\x06+\x02\x02\u01D8" + + "\u01D9\x07\x7F\x02\x02\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01DB\b+\x04" + + "\x02\u01DBX\x03\x02\x02\x02\u01DC\u01DD\x07}\x02\x02\u01DDZ\x03\x02\x02" + + "\x02\u01DE\u01DF\x07\x7F\x02\x02\u01DF\\\x03\x02\x02\x02\u01E0\u01E1\x07" + + "-\x02\x02\u01E1^\x03\x02\x02\x02\u01E2\u01E3\x07-\x02\x02\u01E3\u01E4" + + "\x07-\x02\x02\u01E4`\x03\x02\x02\x02\u01E5\u01E6\x07/\x02\x02\u01E6b\x03" + + "\x02\x02\x02\u01E7\u01E8\x07/\x02\x02\u01E8\u01E9\x07/\x02\x02\u01E9d" + + "\x03\x02\x02\x02\u01EA\u01EB\x07,\x02\x02\u01EBf\x03\x02\x02\x02\u01EC" + + "\u01ED\x071\x02\x02\u01EDh\x03\x02\x02\x02\u01EE\u01EF\x07\'\x02\x02\u01EF" + + "j\x03\x02\x02\x02\u01F0\u01F1\x07,\x02\x02\u01F1\u01F2\x07,\x02\x02\u01F2" + + "l\x03\x02\x02\x02\u01F3\u01F4\x07(\x02\x02\u01F4\u01F5\x07(\x02\x02\u01F5" + + "n\x03\x02\x02\x02\u01F6\u01F7\x07~\x02\x02\u01F7\u01F8\x07~\x02\x02\u01F8" + + "p\x03\x02\x02\x02\u01F9\u01FA\x07#\x02\x02\u01FAr\x03\x02\x02\x02\u01FB" + + "\u01FC\x07?\x02\x02\u01FCt\x03\x02\x02\x02\u01FD"; private static readonly _serializedATNSegment1: string = - "\u0201|\x03\x02\x02\x02\u0202\u0203\x07?\x02\x02\u0203\u0204\x07?\x02" + - "\x02\u0204~\x03\x02\x02\x02\u0205\u0206\x07#\x02\x02\u0206\u0207\x07?" + - "\x02\x02\u0207\x80\x03\x02\x02\x02\u0208\u0209\x07>\x02\x02\u0209\x82" + - "\x03\x02\x02\x02\u020A\u020B\x07>\x02\x02\u020B\u020C\x07?\x02\x02\u020C" + - "\x84\x03\x02\x02\x02\u020D\u020E\x07@\x02\x02\u020E\x86\x03\x02\x02\x02" + - "\u020F\u0210\x07@\x02\x02\u0210\u0211\x07?\x02\x02\u0211\x88\x03\x02\x02" + - "\x02\u0212\u0213\x07(\x02\x02\u0213\x8A\x03\x02\x02\x02\u0214\u0215\x07" + - "~\x02\x02\u0215\x8C\x03\x02\x02\x02\u0216\u0217\x07`\x02\x02\u0217\x8E" + - "\x03\x02\x02\x02\u0218\u0219\x07\x80\x02\x02\u0219\x90\x03\x02\x02\x02" + - "\u021A\u021B\x07>\x02\x02\u021B\u021C\x07>\x02\x02\u021C\x92\x03\x02\x02" + - "\x02\u021D\u021E\x07@\x02\x02\u021E\u021F\x07@\x02\x02\u021F\x94\x03\x02" + - "\x02\x02\u0220\u0221\x07@\x02\x02\u0221\u0222\x07@\x02\x02\u0222\u0223" + - "\x07@\x02\x02\u0223\x96\x03\x02\x02\x02\u0224\u0225\x070\x02\x02\u0225" + - "\x98\x03\x02\x02\x02\u0226\u022B\x05\xB7[\x02\u0227\u022A\x05\xB7[\x02" + - "\u0228\u022A\x05\xBB]\x02\u0229\u0227\x03\x02\x02\x02\u0229\u0228\x03" + - "\x02\x02\x02\u022A\u022D\x03\x02\x02\x02\u022B\u0229\x03\x02\x02\x02\u022B" + - "\u022C\x03\x02\x02\x02\u022C\x9A\x03\x02\x02\x02\u022D\u022B\x03\x02\x02" + - "\x02\u022E\u0233\x05\xBD^\x02\u022F\u0233\x05\xC1`\x02\u0230\u0233\x05" + - "\xC3a\x02\u0231\u0233\x05\xBF_\x02\u0232\u022E\x03\x02\x02\x02\u0232\u022F" + - "\x03\x02\x02\x02\u0232\u0230\x03\x02\x02\x02\u0232\u0231\x03\x02\x02\x02" + - "\u0233\x9C\x03\x02\x02\x02\u0234\u0236\x07)\x02\x02\u0235\u0237\x05\xEB" + - "u\x02\u0236\u0235\x03\x02\x02\x02\u0236\u0237\x03\x02\x02\x02\u0237\u0238" + - "\x03\x02\x02\x02\u0238\u0239\x07)\x02\x02\u0239\x9E\x03\x02\x02\x02\u023A" + - "\u023C\x07$\x02\x02\u023B\u023D\x05\xEFw\x02\u023C\u023B\x03\x02\x02\x02" + - "\u023C\u023D\x03\x02\x02\x02\u023D\u023E\x03\x02\x02\x02\u023E\u023F\x07" + - "$\x02\x02\u023F\xA0\x03\x02\x02\x02\u0240\u0241\x05\xCDf\x02\u0241\xA2" + - "\x03\x02\x02\x02\u0242\u0244\t\x02\x02\x02\u0243\u0242\x03\x02\x02\x02" + - "\u0244\u0245\x03\x02\x02\x02\u0245\u0243\x03\x02\x02\x02\u0245\u0246\x03" + - "\x02\x02\x02\u0246\u0247\x03\x02\x02\x02\u0247\u0248\bQ\x05\x02\u0248" + - "\xA4\x03\x02\x02\x02\u0249\u024A\t\x03\x02\x02\u024A\u024B\x03\x02\x02" + - "\x02\u024B\u024C\bR\x05\x02\u024C\xA6\x03\x02\x02\x02\u024D\u024E\x07" + - "h\x02\x02\u024E\u024F\x07)\x02\x02\u024F\u0250\x03\x02\x02\x02\u0250\u0251" + - "\bS\x06\x02\u0251\u0252\x03\x02\x02\x02\u0252\u0253\bS\x07\x02\u0253\xA8" + - "\x03\x02\x02\x02\u0254\u0255\x07h\x02\x02\u0255\u0256\x07$\x02\x02\u0256" + - "\u0257\x03\x02\x02\x02\u0257\u0258\bT\b\x02\u0258\u0259\x03\x02\x02\x02" + - "\u0259\u025A\bT\t\x02\u025A\xAA\x03\x02\x02\x02\u025B\u025C\x06U\x03\x02" + - "\u025C\u025D\x07}\x02\x02\u025D\u025E\x03\x02\x02\x02\u025E\u025F\bU\n" + - "\x02\u025F\u0260\bU\v\x02\u0260\xAC\x03\x02\x02\x02\u0261\u0262\x07)\x02" + - "\x02\u0262\u0263\bV\f\x02\u0263\u0264\x03\x02\x02\x02\u0264\u0265\bV\x04" + - "\x02\u0265\xAE\x03\x02\x02\x02\u0266\u0267\x05\xE3q\x02\u0267\xB0\x03" + - "\x02\x02\x02\u0268\u0269\x06X\x04\x02\u0269\u026A\x07}\x02\x02\u026A\u026B" + - "\x03\x02\x02\x02\u026B\u026C\bX\n\x02\u026C\u026D\bX\v\x02\u026D\xB2\x03" + - "\x02\x02\x02\u026E\u026F\x07$\x02\x02\u026F\u0270\bY\r\x02\u0270\u0271" + - "\x03\x02\x02\x02\u0271\u0272\bY\x04\x02\u0272\xB4\x03\x02\x02\x02\u0273" + - "\u0274\x05\xE7s\x02\u0274\xB6\x03\x02\x02\x02\u0275\u0276\x05\xB9\\\x02" + - "\u0276\xB8\x03\x02\x02\x02\u0277\u0278\t\x04\x02\x02\u0278\xBA\x03\x02" + - "\x02\x02\u0279\u027A\t\x05\x02\x02\u027A\xBC\x03\x02\x02\x02\u027B\u027D" + - "\x05\xBB]\x02\u027C\u027B\x03\x02\x02\x02\u027D\u027E\x03\x02\x02\x02" + - "\u027E\u027C\x03\x02\x02\x02\u027E\u027F\x03\x02\x02\x02\u027F\xBE\x03" + - "\x02\x02\x02\u0280\u0281\x072\x02\x02\u0281\u0283\t\x06\x02\x02\u0282" + - "\u0284\x05\xC7c\x02\u0283\u0282\x03\x02\x02\x02\u0284\u0285\x03\x02\x02" + - "\x02\u0285\u0283\x03\x02\x02\x02\u0285\u0286\x03\x02\x02\x02\u0286\xC0" + - "\x03\x02\x02\x02\u0287\u0288\x072\x02\x02\u0288\u028A\t\x07\x02\x02\u0289" + - "\u028B\x05\xC9d\x02\u028A\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02" + - "\x02\u028C\u028A\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\xC2" + - "\x03\x02\x02\x02\u028E\u028F\x072\x02\x02\u028F\u0291\t\b\x02\x02\u0290" + - "\u0292\x05\xCBe\x02\u0291\u0290\x03\x02\x02\x02\u0292\u0293\x03\x02\x02" + - "\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02\x02\x02\u0294\xC4" + - "\x03\x02\x02\x02\u0295\u0296\t\t\x02\x02\u0296\xC6\x03\x02\x02\x02\u0297" + - "\u0298\t\n\x02\x02\u0298\xC8\x03\x02\x02\x02\u0299\u029A\t\v\x02\x02\u029A" + - "\xCA\x03\x02\x02\x02\u029B\u029C\t\f\x02\x02\u029C\xCC\x03\x02\x02\x02" + - "\u029D\u029F\x05\xCFg\x02\u029E\u02A0\x05\xD1h\x02\u029F\u029E\x03\x02" + - "\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\u02A5\x03\x02\x02\x02\u02A1" + - "\u02A2\x05\xD3i\x02\u02A2\u02A3\x05\xD1h\x02\u02A3\u02A5\x03\x02\x02\x02" + - "\u02A4\u029D\x03\x02\x02\x02\u02A4\u02A1\x03\x02\x02\x02\u02A5\xCE\x03" + - "\x02\x02\x02\u02A6\u02A8\x05\xD3i\x02\u02A7\u02A6\x03\x02\x02\x02\u02A7" + - "\u02A8\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9\u02AA\x070\x02" + - "\x02\u02AA\u02AF\x05\xD3i\x02\u02AB\u02AC\x05\xD3i\x02\u02AC\u02AD\x07" + - "0\x02\x02\u02AD\u02AF\x03\x02\x02\x02\u02AE\u02A7\x03\x02\x02\x02\u02AE" + - "\u02AB\x03\x02\x02\x02\u02AF\xD0\x03\x02\x02\x02\u02B0\u02B2\t\r\x02\x02" + - "\u02B1\u02B3\x05\xD5j\x02\u02B2\u02B1\x03\x02\x02\x02\u02B2\u02B3\x03" + - "\x02\x02\x02\u02B3\u02B4\x03\x02\x02\x02\u02B4\u02B5\x05\xD3i\x02\u02B5" + - "\xD2\x03\x02\x02\x02\u02B6\u02B8\x05\xBB]\x02\u02B7\u02B6\x03\x02\x02" + - "\x02\u02B8\u02B9\x03\x02\x02\x02\u02B9\u02B7\x03\x02\x02\x02\u02B9\u02BA" + - "\x03\x02\x02\x02\u02BA\xD4\x03\x02\x02\x02\u02BB\u02BC\t\x0E\x02\x02\u02BC" + - "\xD6\x03\x02\x02\x02\u02BD\u02BF\x05\xD9l\x02\u02BE\u02BD\x03\x02\x02" + - "\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" + - "\x03\x02\x02\x02\u02C1\xD8\x03\x02\x02\x02\u02C2\u02C5\n\x0F\x02\x02\u02C3" + - "\u02C5\x05\xDBm\x02\u02C4\u02C2\x03\x02\x02\x02\u02C4\u02C3\x03\x02\x02" + - "\x02\u02C5\xDA\x03\x02\x02\x02\u02C6\u02CA\x05\xDDn\x02\u02C7\u02CA\x05" + - "\xDFo\x02\u02C8\u02CA\x05\xE1p\x02\u02C9\u02C6\x03\x02\x02\x02\u02C9\u02C7" + - "\x03\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\xDC\x03\x02\x02\x02" + - "\u02CB\u02CC\x07^\x02\x02\u02CC\u02CD\t\x10\x02\x02\u02CD\xDE\x03\x02" + - "\x02\x02\u02CE\u02CF\x07^\x02\x02\u02CF\u02D1\x05\xC9d\x02\u02D0\u02D2" + - "\x05\xC9d\x02\u02D1\u02D0\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02" + - "\u02D2\u02D4\x03\x02\x02\x02\u02D3\u02D5\x05\xC9d\x02\u02D4\u02D3\x03" + - "\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\xE0\x03\x02\x02\x02\u02D6" + - "\u02D7\x07^\x02\x02\u02D7\u02D8\x07z\x02\x02\u02D8\u02DA\x03\x02\x02\x02" + - "\u02D9\u02DB\x05\xCBe\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03" + - "\x02\x02\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD" + - "\xE2\x03\x02\x02\x02\u02DE\u02E0\x05\xE5r\x02\u02DF\u02DE\x03\x02\x02" + - "\x02\u02E0\u02E1\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2" + - "\x03\x02\x02\x02\u02E2\xE4\x03\x02\x02\x02\u02E3\u02E6\n\x11\x02\x02\u02E4" + - "\u02E6\x05\xDBm\x02\u02E5\u02E3\x03\x02\x02\x02\u02E5\u02E4\x03\x02\x02" + - "\x02\u02E6\xE6\x03\x02\x02\x02\u02E7\u02E9\x05\xE9t\x02\u02E8\u02E7\x03" + - "\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02\u02EA\u02E8\x03\x02\x02\x02\u02EA" + - "\u02EB\x03\x02\x02\x02\u02EB\xE8\x03\x02\x02\x02\u02EC\u02EF\n\x12\x02" + - "\x02\u02ED\u02EF\x05\xDBm\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02ED" + - "\x03\x02\x02\x02\u02EF\xEA\x03\x02\x02\x02\u02F0\u02F2\x05\xEDv\x02\u02F1" + - "\u02F0\x03\x02\x02\x02\u02F2\u02F3\x03\x02\x02\x02\u02F3\u02F1\x03\x02" + - "\x02\x02\u02F3\u02F4\x03\x02\x02\x02\u02F4\xEC\x03\x02\x02\x02\u02F5\u02F8" + - "\n\x0F\x02\x02\u02F6\u02F8\x05\xDBm\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7" + - "\u02F6\x03\x02\x02\x02\u02F8\xEE\x03\x02\x02\x02\u02F9\u02FB\x05\xF1x" + - "\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FC\u02FA" + - "\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\xF0\x03\x02\x02\x02" + - "\u02FE\u0301\n\x13\x02\x02\u02FF\u0301\x05\xDBm\x02\u0300\u02FE\x03\x02" + - "\x02\x02\u0300\u02FF\x03\x02\x02\x02\u0301\xF2\x03\x02\x02\x02\u0302\u0304" + - "\n\x03\x02\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02" + - "\u0305\u0303\x03\x02\x02\x02\u0305\u0306\x03\x02\x02\x02\u0306\xF4\x03" + - "\x02\x02\x02\u0307\u0305\x03\x02\x02\x02%\x02\x03\x04\xFB\u0229\u022B" + - "\u0232\u0236\u023C\u0245\u027E\u0285\u028C\u0293\u029F\u02A4\u02A7\u02AE" + - "\u02B2\u02B9\u02C0\u02C4\u02C9\u02D1\u02D4\u02DC\u02E1\u02E5\u02EA\u02EE" + - "\u02F3\u02F7\u02FC\u0300\u0305\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02" + - "\x02\x03\x02\x03S\x02\x07\x03\x02\x03T\x03\x07\x04\x02\t\x03\x02\x07\x02" + - "\x02\x03V\x04\x03Y\x05"; + "\u01FE\x07-\x02\x02\u01FE\u01FF\x07?\x02\x02\u01FFv\x03\x02\x02\x02\u0200" + + "\u0201\x07/\x02\x02\u0201\u0202\x07?\x02\x02\u0202x\x03\x02\x02\x02\u0203" + + "\u0204\x07,\x02\x02\u0204\u0205\x07?\x02\x02\u0205z\x03\x02\x02\x02\u0206" + + "\u0207\x071\x02\x02\u0207\u0208\x07?\x02\x02\u0208|\x03\x02\x02\x02\u0209" + + "\u020A\x07\'\x02\x02\u020A\u020B\x07?\x02\x02\u020B~\x03\x02\x02\x02\u020C" + + "\u020D\x07?\x02\x02\u020D\u020E\x07?\x02\x02\u020E\x80\x03\x02\x02\x02" + + "\u020F\u0210\x07#\x02\x02\u0210\u0211\x07?\x02\x02\u0211\x82\x03\x02\x02" + + "\x02\u0212\u0213\x07>\x02\x02\u0213\x84\x03\x02\x02\x02\u0214\u0215\x07" + + ">\x02\x02\u0215\u0216\x07?\x02\x02\u0216\x86\x03\x02\x02\x02\u0217\u0218" + + "\x07@\x02\x02\u0218\x88\x03\x02\x02\x02\u0219\u021A\x07@\x02\x02\u021A" + + "\u021B\x07?\x02\x02\u021B\x8A\x03\x02\x02\x02\u021C\u021D\x07(\x02\x02" + + "\u021D\x8C\x03\x02\x02\x02\u021E\u021F\x07~\x02\x02\u021F\x8E\x03\x02" + + "\x02\x02\u0220\u0221\x07`\x02\x02\u0221\x90\x03\x02\x02\x02\u0222\u0223" + + "\x07\x80\x02\x02\u0223\x92\x03\x02\x02\x02\u0224\u0225\x07>\x02\x02\u0225" + + "\u0226\x07>\x02\x02\u0226\x94\x03\x02\x02\x02\u0227\u0228\x07@\x02\x02" + + "\u0228\u0229\x07@\x02\x02\u0229\x96\x03\x02\x02\x02\u022A\u022B\x07@\x02" + + "\x02\u022B\u022C\x07@\x02\x02\u022C\u022D\x07@\x02\x02\u022D\x98\x03\x02" + + "\x02\x02\u022E\u022F\x070\x02\x02\u022F\x9A\x03\x02\x02\x02\u0230\u0235" + + "\x05\xB9\\\x02\u0231\u0234\x05\xB9\\\x02\u0232\u0234\x05\xBD^\x02\u0233" + + "\u0231\x03\x02\x02\x02\u0233\u0232\x03\x02\x02\x02\u0234\u0237\x03\x02" + + "\x02\x02\u0235\u0233\x03\x02\x02\x02\u0235\u0236\x03\x02\x02\x02\u0236" + + "\x9C\x03\x02\x02\x02\u0237\u0235\x03\x02\x02\x02\u0238\u023D\x05\xBF_" + + "\x02\u0239\u023D\x05\xC3a\x02\u023A\u023D\x05\xC5b\x02\u023B\u023D\x05" + + "\xC1`\x02\u023C\u0238\x03\x02\x02\x02\u023C\u0239\x03\x02\x02\x02\u023C" + + "\u023A\x03\x02\x02\x02\u023C\u023B\x03\x02\x02\x02\u023D\x9E\x03\x02\x02" + + "\x02\u023E\u0240\x07)\x02\x02\u023F\u0241\x05\xEDv\x02\u0240\u023F\x03" + + "\x02\x02\x02\u0240\u0241\x03\x02\x02\x02\u0241\u0242\x03\x02\x02\x02\u0242" + + "\u0243\x07)\x02\x02\u0243\xA0\x03\x02\x02\x02\u0244\u0246\x07$\x02\x02" + + "\u0245\u0247\x05\xF1x\x02\u0246\u0245\x03\x02\x02\x02\u0246\u0247\x03" + + "\x02\x02\x02\u0247\u0248\x03\x02\x02\x02\u0248\u0249\x07$\x02\x02\u0249" + + "\xA2\x03\x02\x02\x02\u024A\u024B\x05\xCFg\x02\u024B\xA4\x03\x02\x02\x02" + + "\u024C\u024E\t\x02\x02\x02\u024D\u024C\x03\x02\x02\x02\u024E\u024F\x03" + + "\x02\x02\x02\u024F\u024D\x03\x02\x02\x02\u024F\u0250\x03\x02\x02\x02\u0250" + + "\u0251\x03\x02\x02\x02\u0251\u0252\bR\x05\x02\u0252\xA6\x03\x02\x02\x02" + + "\u0253\u0254\t\x03\x02\x02\u0254\u0255\x03\x02\x02\x02\u0255\u0256\bS" + + "\x05\x02\u0256\xA8\x03\x02\x02\x02\u0257\u0258\x07h\x02\x02\u0258\u0259" + + "\x07)\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A\u025B\bT\x06\x02\u025B" + + "\u025C\x03\x02\x02\x02\u025C\u025D\bT\x07\x02\u025D\xAA\x03\x02\x02\x02" + + "\u025E\u025F\x07h\x02\x02\u025F\u0260\x07$\x02\x02\u0260\u0261\x03\x02" + + "\x02\x02\u0261\u0262\bU\b\x02\u0262\u0263\x03\x02\x02\x02\u0263\u0264" + + "\bU\t\x02\u0264\xAC\x03\x02\x02\x02\u0265\u0266\x06V\x03\x02\u0266\u0267" + + "\x07}\x02\x02\u0267\u0268\x03\x02\x02\x02\u0268\u0269\bV\n\x02\u0269\u026A" + + "\bV\v\x02\u026A\xAE\x03\x02\x02\x02\u026B\u026C\x07)\x02\x02\u026C\u026D" + + "\bW\f\x02\u026D\u026E\x03\x02\x02\x02\u026E\u026F\bW\x04\x02\u026F\xB0" + + "\x03\x02\x02\x02\u0270\u0271\x05\xE5r\x02\u0271\xB2\x03\x02\x02\x02\u0272" + + "\u0273\x06Y\x04\x02\u0273\u0274\x07}\x02\x02\u0274\u0275\x03\x02\x02\x02" + + "\u0275\u0276\bY\n\x02\u0276\u0277\bY\v\x02\u0277\xB4\x03\x02\x02\x02\u0278" + + "\u0279\x07$\x02\x02\u0279\u027A\bZ\r\x02\u027A\u027B\x03\x02\x02\x02\u027B" + + "\u027C\bZ\x04\x02\u027C\xB6\x03\x02\x02\x02\u027D\u027E\x05\xE9t\x02\u027E" + + "\xB8\x03\x02\x02\x02\u027F\u0280\x05\xBB]\x02\u0280\xBA\x03\x02\x02\x02" + + "\u0281\u0282\t\x04\x02\x02\u0282\xBC\x03\x02\x02\x02\u0283\u0284\t\x05" + + "\x02\x02\u0284\xBE\x03\x02\x02\x02\u0285\u0287\x05\xBD^\x02\u0286\u0285" + + "\x03\x02\x02\x02\u0287\u0288\x03\x02\x02\x02\u0288\u0286\x03\x02\x02\x02" + + "\u0288\u0289\x03\x02\x02\x02\u0289\xC0\x03\x02\x02\x02\u028A\u028B\x07" + + "2\x02\x02\u028B\u028D\t\x06\x02\x02\u028C\u028E\x05\xC9d\x02\u028D\u028C" + + "\x03\x02\x02\x02\u028E\u028F\x03\x02\x02\x02\u028F\u028D\x03\x02\x02\x02" + + "\u028F\u0290\x03\x02\x02\x02\u0290\xC2\x03\x02\x02\x02\u0291\u0292\x07" + + "2\x02\x02\u0292\u0294\t\x07\x02\x02\u0293\u0295\x05\xCBe\x02\u0294\u0293" + + "\x03\x02\x02\x02\u0295\u0296\x03\x02\x02\x02\u0296\u0294\x03\x02\x02\x02" + + "\u0296\u0297\x03\x02\x02\x02\u0297\xC4\x03\x02\x02\x02\u0298\u0299\x07" + + "2\x02\x02\u0299\u029B\t\b\x02\x02\u029A\u029C\x05\xCDf\x02\u029B\u029A" + + "\x03\x02\x02\x02\u029C\u029D\x03\x02\x02\x02\u029D\u029B\x03\x02\x02\x02" + + "\u029D\u029E\x03\x02\x02\x02\u029E\xC6\x03\x02\x02\x02\u029F\u02A0\t\t" + + "\x02\x02\u02A0\xC8\x03\x02\x02\x02\u02A1\u02A2\t\n\x02\x02\u02A2\xCA\x03" + + "\x02\x02\x02\u02A3\u02A4\t\v\x02\x02\u02A4\xCC\x03\x02\x02\x02\u02A5\u02A6" + + "\t\f\x02\x02\u02A6\xCE\x03\x02\x02\x02\u02A7\u02A9\x05\xD1h\x02\u02A8" + + "\u02AA\x05\xD3i\x02\u02A9\u02A8\x03\x02\x02\x02\u02A9\u02AA\x03\x02\x02" + + "\x02\u02AA\u02AF\x03\x02\x02\x02\u02AB\u02AC\x05\xD5j\x02\u02AC\u02AD" + + "\x05\xD3i\x02\u02AD\u02AF\x03\x02\x02\x02\u02AE\u02A7\x03\x02\x02\x02" + + "\u02AE\u02AB\x03\x02\x02\x02\u02AF\xD0\x03\x02\x02\x02\u02B0\u02B2\x05" + + "\xD5j\x02\u02B1\u02B0\x03\x02\x02\x02\u02B1\u02B2\x03\x02\x02\x02\u02B2" + + "\u02B3\x03\x02\x02\x02\u02B3\u02B4\x070\x02\x02\u02B4\u02B9\x05\xD5j\x02" + + "\u02B5\u02B6\x05\xD5j\x02\u02B6\u02B7\x070\x02\x02\u02B7\u02B9\x03\x02" + + "\x02\x02\u02B8\u02B1\x03\x02\x02\x02\u02B8\u02B5\x03\x02\x02\x02\u02B9" + + "\xD2\x03\x02\x02\x02\u02BA\u02BC\t\r\x02\x02\u02BB\u02BD\x05\xD7k\x02" + + "\u02BC\u02BB\x03\x02\x02\x02\u02BC\u02BD\x03\x02\x02\x02\u02BD\u02BE\x03" + + "\x02\x02\x02\u02BE\u02BF\x05\xD5j\x02\u02BF\xD4\x03\x02\x02\x02\u02C0" + + "\u02C2\x05\xBD^\x02\u02C1\u02C0\x03\x02\x02\x02\u02C2\u02C3\x03\x02\x02" + + "\x02\u02C3\u02C1\x03\x02\x02\x02\u02C3\u02C4\x03\x02\x02\x02\u02C4\xD6" + + "\x03\x02\x02\x02\u02C5\u02C6\t\x0E\x02\x02\u02C6\xD8\x03\x02\x02\x02\u02C7" + + "\u02C9\x05\xDBm\x02\u02C8\u02C7\x03\x02\x02\x02\u02C9\u02CA\x03\x02\x02" + + "\x02\u02CA\u02C8\x03\x02\x02\x02\u02CA\u02CB\x03\x02\x02\x02\u02CB\xDA" + + "\x03\x02\x02\x02\u02CC\u02CF\n\x0F\x02\x02\u02CD\u02CF\x05\xDDn\x02\u02CE" + + "\u02CC\x03\x02\x02\x02\u02CE\u02CD\x03\x02\x02\x02\u02CF\xDC\x03\x02\x02" + + "\x02\u02D0\u02D4\x05\xDFo\x02\u02D1\u02D4\x05\xE1p\x02\u02D2\u02D4\x05" + + "\xE3q\x02\u02D3\u02D0\x03\x02\x02\x02\u02D3\u02D1\x03\x02\x02\x02\u02D3" + + "\u02D2\x03\x02\x02\x02\u02D4\xDE\x03\x02\x02\x02\u02D5\u02D6\x07^\x02" + + "\x02\u02D6\u02D7\t\x10\x02\x02\u02D7\xE0\x03\x02\x02\x02\u02D8\u02D9\x07" + + "^\x02\x02\u02D9\u02DB\x05\xCBe\x02\u02DA\u02DC\x05\xCBe\x02\u02DB\u02DA" + + "\x03\x02\x02\x02\u02DB\u02DC\x03\x02\x02\x02\u02DC\u02DE\x03\x02\x02\x02" + + "\u02DD\u02DF\x05\xCBe\x02\u02DE\u02DD\x03\x02\x02\x02\u02DE\u02DF\x03" + + "\x02\x02\x02\u02DF\xE2\x03\x02\x02\x02\u02E0\u02E1\x07^\x02\x02\u02E1" + + "\u02E2\x07z\x02\x02\u02E2\u02E4\x03\x02\x02\x02\u02E3\u02E5\x05\xCDf\x02" + + "\u02E4\u02E3\x03\x02\x02\x02\u02E5\u02E6\x03\x02\x02\x02\u02E6\u02E4\x03" + + "\x02\x02\x02\u02E6\u02E7\x03\x02\x02\x02\u02E7\xE4\x03\x02\x02\x02\u02E8" + + "\u02EA\x05\xE7s\x02\u02E9\u02E8\x03\x02\x02\x02\u02EA\u02EB\x03\x02\x02" + + "\x02\u02EB\u02E9\x03\x02\x02\x02\u02EB\u02EC\x03\x02\x02\x02\u02EC\xE6" + + "\x03\x02\x02\x02\u02ED\u02F0\n\x11\x02\x02\u02EE\u02F0\x05\xDDn\x02\u02EF" + + "\u02ED\x03\x02\x02\x02\u02EF\u02EE\x03\x02\x02\x02\u02F0\xE8\x03\x02\x02" + + "\x02\u02F1\u02F3\x05\xEBu\x02\u02F2\u02F1\x03\x02\x02\x02\u02F3\u02F4" + + "\x03\x02\x02\x02\u02F4\u02F2\x03\x02\x02\x02\u02F4\u02F5\x03\x02\x02\x02" + + "\u02F5\xEA\x03\x02\x02\x02\u02F6\u02F9\n\x12\x02\x02\u02F7\u02F9\x05\xDD" + + "n\x02\u02F8\u02F6\x03\x02\x02\x02\u02F8\u02F7\x03\x02\x02\x02\u02F9\xEC" + + "\x03\x02\x02\x02\u02FA\u02FC\x05\xEFw\x02\u02FB\u02FA\x03\x02\x02\x02" + + "\u02FC\u02FD\x03\x02\x02\x02\u02FD\u02FB\x03\x02\x02\x02\u02FD\u02FE\x03" + + "\x02\x02\x02\u02FE\xEE\x03\x02\x02\x02\u02FF\u0302\n\x0F\x02\x02\u0300" + + "\u0302\x05\xDDn\x02\u0301\u02FF\x03\x02\x02\x02\u0301\u0300\x03\x02\x02" + + "\x02\u0302\xF0\x03\x02\x02\x02\u0303\u0305\x05\xF3y\x02\u0304\u0303\x03" + + "\x02\x02\x02\u0305\u0306\x03\x02\x02\x02\u0306\u0304\x03\x02\x02\x02\u0306" + + "\u0307\x03\x02\x02\x02\u0307\xF2\x03\x02\x02\x02\u0308\u030B\n\x13\x02" + + "\x02\u0309\u030B\x05\xDDn\x02\u030A\u0308\x03\x02\x02\x02\u030A\u0309" + + "\x03\x02\x02\x02\u030B\xF4\x03\x02\x02\x02\u030C\u030E\n\x03\x02\x02\u030D" + + "\u030C\x03\x02\x02\x02\u030E\u0311\x03\x02\x02\x02\u030F\u030D\x03\x02" + + "\x02\x02\u030F\u0310\x03\x02\x02\x02\u0310\xF6\x03\x02\x02\x02\u0311\u030F" + + "\x03\x02\x02\x02%\x02\x03\x04\xFD\u0233\u0235\u023C\u0240\u0246\u024F" + + "\u0288\u028F\u0296\u029D\u02A9\u02AE\u02B1\u02B8\u02BC\u02C3\u02CA\u02CE" + + "\u02D3\u02DB\u02DE\u02E6\u02EB\u02EF\u02F4\u02F8\u02FD\u0301\u0306\u030A" + + "\u030F\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02\x02\x03\x02\x03T\x02\x07" + + "\x03\x02\x03U\x03\x07\x04\x02\t\x03\x02\x07\x02\x02\x03W\x04\x03Z\x05"; public static readonly _serializedATN: string = Utils.join( - [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], + [ + KipperLexer._serializedATNSegment0, + KipperLexer._serializedATNSegment1, + ], "", ); public static __ATN: ATN; @@ -910,4 +680,6 @@ export class KipperLexer extends KipperLexerBase { return KipperLexer.__ATN; } + } + diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index f3e05b05a..28be96ede 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -29,6 +29,7 @@ null 'new' 'true' 'false' +'matches' 'typeof' 'void' 'null' @@ -120,6 +121,7 @@ Constructor New True False +Matches Typeof Void Null @@ -268,7 +270,8 @@ identifierTypeSpecifierExpression genericTypeSpecifierExpression typeofTypeSpecifierExpression typeSpecifierIdentifier +matchesExpression atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 90, 817, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 3, 2, 5, 2, 178, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 183, 10, 3, 13, 3, 14, 3, 184, 3, 4, 3, 4, 3, 5, 6, 5, 190, 10, 5, 13, 5, 14, 5, 191, 3, 6, 3, 6, 3, 6, 5, 6, 197, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 205, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 217, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 229, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 235, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 240, 10, 15, 12, 15, 14, 15, 243, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 253, 10, 17, 12, 17, 14, 17, 256, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 262, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 272, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 284, 10, 21, 12, 21, 14, 21, 287, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 294, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 303, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 309, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 314, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 325, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 330, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 341, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 350, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 358, 10, 31, 12, 31, 14, 31, 361, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 373, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 378, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 384, 10, 34, 3, 34, 3, 34, 5, 34, 388, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 394, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 400, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 424, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 438, 10, 39, 3, 40, 3, 40, 5, 40, 442, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 450, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 464, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 470, 10, 47, 12, 47, 14, 47, 473, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 478, 10, 47, 12, 47, 14, 47, 481, 11, 47, 3, 47, 5, 47, 484, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 489, 10, 48, 3, 48, 5, 48, 492, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 497, 10, 49, 3, 49, 5, 49, 500, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 508, 10, 51, 12, 51, 14, 51, 511, 11, 51, 5, 51, 513, 10, 51, 3, 51, 5, 51, 516, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 524, 10, 52, 12, 52, 14, 52, 527, 11, 52, 5, 52, 529, 10, 52, 3, 52, 5, 52, 532, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 548, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 557, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 562, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 579, 10, 55, 3, 55, 3, 55, 7, 55, 583, 10, 55, 12, 55, 14, 55, 586, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 591, 10, 56, 12, 56, 14, 56, 594, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 607, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 613, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 620, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 631, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 648, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 656, 10, 69, 12, 69, 14, 69, 659, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 667, 10, 70, 12, 70, 14, 70, 670, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 679, 10, 71, 12, 71, 14, 71, 682, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 692, 10, 73, 12, 73, 14, 73, 695, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 703, 10, 74, 12, 74, 14, 74, 706, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 714, 10, 75, 12, 75, 14, 75, 717, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 725, 10, 76, 12, 76, 14, 76, 728, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 736, 10, 77, 12, 77, 14, 77, 739, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 747, 10, 78, 12, 78, 14, 78, 750, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 758, 10, 79, 12, 79, 14, 79, 761, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 770, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 777, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 7, 83, 784, 10, 83, 12, 83, 14, 83, 787, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 792, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 7, 86, 801, 10, 86, 12, 86, 14, 86, 804, 11, 86, 5, 86, 806, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 2, 2, 13, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 89, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 80, 81, 4, 2, 79, 79, 82, 82, 3, 2, 33, 35, 4, 2, 48, 48, 50, 50, 6, 2, 47, 47, 49, 49, 57, 57, 73, 73, 3, 2, 51, 54, 4, 2, 47, 47, 49, 49, 3, 2, 74, 76, 3, 2, 66, 69, 3, 2, 64, 65, 3, 2, 58, 63, 4, 2, 33, 35, 78, 78, 2, 827, 2, 177, 3, 2, 2, 2, 4, 182, 3, 2, 2, 2, 6, 186, 3, 2, 2, 2, 8, 189, 3, 2, 2, 2, 10, 196, 3, 2, 2, 2, 12, 204, 3, 2, 2, 2, 14, 206, 3, 2, 2, 2, 16, 209, 3, 2, 2, 2, 18, 211, 3, 2, 2, 2, 20, 218, 3, 2, 2, 2, 22, 220, 3, 2, 2, 2, 24, 222, 3, 2, 2, 2, 26, 224, 3, 2, 2, 2, 28, 236, 3, 2, 2, 2, 30, 244, 3, 2, 2, 2, 32, 248, 3, 2, 2, 2, 34, 261, 3, 2, 2, 2, 36, 263, 3, 2, 2, 2, 38, 268, 3, 2, 2, 2, 40, 278, 3, 2, 2, 2, 42, 293, 3, 2, 2, 2, 44, 295, 3, 2, 2, 2, 46, 299, 3, 2, 2, 2, 48, 310, 3, 2, 2, 2, 50, 324, 3, 2, 2, 2, 52, 326, 3, 2, 2, 2, 54, 333, 3, 2, 2, 2, 56, 340, 3, 2, 2, 2, 58, 342, 3, 2, 2, 2, 60, 351, 3, 2, 2, 2, 62, 372, 3, 2, 2, 2, 64, 377, 3, 2, 2, 2, 66, 379, 3, 2, 2, 2, 68, 404, 3, 2, 2, 2, 70, 410, 3, 2, 2, 2, 72, 418, 3, 2, 2, 2, 74, 421, 3, 2, 2, 2, 76, 437, 3, 2, 2, 2, 78, 439, 3, 2, 2, 2, 80, 451, 3, 2, 2, 2, 82, 455, 3, 2, 2, 2, 84, 457, 3, 2, 2, 2, 86, 459, 3, 2, 2, 2, 88, 463, 3, 2, 2, 2, 90, 465, 3, 2, 2, 2, 92, 483, 3, 2, 2, 2, 94, 491, 3, 2, 2, 2, 96, 499, 3, 2, 2, 2, 98, 501, 3, 2, 2, 2, 100, 503, 3, 2, 2, 2, 102, 519, 3, 2, 2, 2, 104, 535, 3, 2, 2, 2, 106, 539, 3, 2, 2, 2, 108, 561, 3, 2, 2, 2, 110, 587, 3, 2, 2, 2, 112, 595, 3, 2, 2, 2, 114, 598, 3, 2, 2, 2, 116, 602, 3, 2, 2, 2, 118, 619, 3, 2, 2, 2, 120, 621, 3, 2, 2, 2, 122, 624, 3, 2, 2, 2, 124, 630, 3, 2, 2, 2, 126, 632, 3, 2, 2, 2, 128, 635, 3, 2, 2, 2, 130, 638, 3, 2, 2, 2, 132, 640, 3, 2, 2, 2, 134, 647, 3, 2, 2, 2, 136, 649, 3, 2, 2, 2, 138, 660, 3, 2, 2, 2, 140, 671, 3, 2, 2, 2, 142, 683, 3, 2, 2, 2, 144, 685, 3, 2, 2, 2, 146, 696, 3, 2, 2, 2, 148, 707, 3, 2, 2, 2, 150, 718, 3, 2, 2, 2, 152, 729, 3, 2, 2, 2, 154, 740, 3, 2, 2, 2, 156, 751, 3, 2, 2, 2, 158, 769, 3, 2, 2, 2, 160, 776, 3, 2, 2, 2, 162, 778, 3, 2, 2, 2, 164, 780, 3, 2, 2, 2, 166, 791, 3, 2, 2, 2, 168, 793, 3, 2, 2, 2, 170, 795, 3, 2, 2, 2, 172, 809, 3, 2, 2, 2, 174, 814, 3, 2, 2, 2, 176, 178, 5, 4, 3, 2, 177, 176, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 7, 2, 2, 3, 180, 3, 3, 2, 2, 2, 181, 183, 5, 6, 4, 2, 182, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 5, 3, 2, 2, 2, 186, 187, 5, 8, 5, 2, 187, 7, 3, 2, 2, 2, 188, 190, 5, 10, 6, 2, 189, 188, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 9, 3, 2, 2, 2, 193, 197, 5, 50, 26, 2, 194, 197, 5, 12, 7, 2, 195, 197, 7, 37, 2, 2, 196, 193, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 196, 195, 3, 2, 2, 2, 197, 11, 3, 2, 2, 2, 198, 199, 5, 14, 8, 2, 199, 200, 7, 37, 2, 2, 200, 205, 3, 2, 2, 2, 201, 205, 5, 26, 14, 2, 202, 205, 5, 32, 17, 2, 203, 205, 5, 40, 21, 2, 204, 198, 3, 2, 2, 2, 204, 201, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 204, 203, 3, 2, 2, 2, 205, 13, 3, 2, 2, 2, 206, 207, 5, 16, 9, 2, 207, 208, 5, 18, 10, 2, 208, 15, 3, 2, 2, 2, 209, 210, 9, 2, 2, 2, 210, 17, 3, 2, 2, 2, 211, 212, 5, 22, 12, 2, 212, 213, 7, 39, 2, 2, 213, 216, 5, 166, 84, 2, 214, 215, 7, 58, 2, 2, 215, 217, 5, 20, 11, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 19, 3, 2, 2, 2, 218, 219, 5, 160, 81, 2, 219, 21, 3, 2, 2, 2, 220, 221, 5, 24, 13, 2, 221, 23, 3, 2, 2, 2, 222, 223, 7, 78, 2, 2, 223, 25, 3, 2, 2, 2, 224, 225, 7, 22, 2, 2, 225, 226, 5, 22, 12, 2, 226, 228, 7, 40, 2, 2, 227, 229, 5, 28, 15, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 41, 2, 2, 231, 232, 7, 25, 2, 2, 232, 234, 5, 166, 84, 2, 233, 235, 5, 52, 27, 2, 234, 233, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 27, 3, 2, 2, 2, 236, 241, 5, 30, 16, 2, 237, 238, 7, 36, 2, 2, 238, 240, 5, 30, 16, 2, 239, 237, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 29, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 245, 5, 22, 12, 2, 245, 246, 7, 39, 2, 2, 246, 247, 5, 166, 84, 2, 247, 31, 3, 2, 2, 2, 248, 249, 7, 27, 2, 2, 249, 250, 5, 22, 12, 2, 250, 254, 7, 45, 2, 2, 251, 253, 5, 34, 18, 2, 252, 251, 3, 2, 2, 2, 253, 256, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 257, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 257, 258, 7, 46, 2, 2, 258, 33, 3, 2, 2, 2, 259, 262, 5, 36, 19, 2, 260, 262, 5, 38, 20, 2, 261, 259, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 35, 3, 2, 2, 2, 263, 264, 5, 22, 12, 2, 264, 265, 7, 39, 2, 2, 265, 266, 5, 166, 84, 2, 266, 267, 7, 37, 2, 2, 267, 37, 3, 2, 2, 2, 268, 269, 5, 22, 12, 2, 269, 271, 7, 40, 2, 2, 270, 272, 5, 28, 15, 2, 271, 270, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 7, 41, 2, 2, 274, 275, 7, 39, 2, 2, 275, 276, 5, 166, 84, 2, 276, 277, 7, 37, 2, 2, 277, 39, 3, 2, 2, 2, 278, 279, 7, 26, 2, 2, 279, 280, 5, 22, 12, 2, 280, 285, 7, 45, 2, 2, 281, 284, 5, 42, 22, 2, 282, 284, 7, 37, 2, 2, 283, 281, 3, 2, 2, 2, 283, 282, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 41, 3, 2, 2, 2, 290, 294, 5, 44, 23, 2, 291, 294, 5, 46, 24, 2, 292, 294, 5, 48, 25, 2, 293, 290, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 292, 3, 2, 2, 2, 294, 43, 3, 2, 2, 2, 295, 296, 5, 22, 12, 2, 296, 297, 7, 39, 2, 2, 297, 298, 5, 166, 84, 2, 298, 45, 3, 2, 2, 2, 299, 300, 5, 22, 12, 2, 300, 302, 7, 40, 2, 2, 301, 303, 5, 28, 15, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 7, 41, 2, 2, 305, 306, 7, 39, 2, 2, 306, 308, 5, 166, 84, 2, 307, 309, 5, 52, 27, 2, 308, 307, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 47, 3, 2, 2, 2, 310, 311, 7, 28, 2, 2, 311, 313, 7, 40, 2, 2, 312, 314, 5, 28, 15, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 41, 2, 2, 316, 317, 5, 52, 27, 2, 317, 49, 3, 2, 2, 2, 318, 325, 5, 54, 28, 2, 319, 325, 5, 56, 29, 2, 320, 325, 5, 64, 33, 2, 321, 325, 5, 72, 37, 2, 322, 325, 5, 74, 38, 2, 323, 325, 5, 52, 27, 2, 324, 318, 3, 2, 2, 2, 324, 319, 3, 2, 2, 2, 324, 320, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 323, 3, 2, 2, 2, 325, 51, 3, 2, 2, 2, 326, 327, 6, 27, 2, 2, 327, 329, 7, 45, 2, 2, 328, 330, 5, 8, 5, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 46, 2, 2, 332, 53, 3, 2, 2, 2, 333, 334, 8, 28, 1, 2, 334, 335, 5, 164, 83, 2, 335, 336, 7, 37, 2, 2, 336, 337, 8, 28, 1, 2, 337, 55, 3, 2, 2, 2, 338, 341, 5, 58, 30, 2, 339, 341, 5, 60, 31, 2, 340, 338, 3, 2, 2, 2, 340, 339, 3, 2, 2, 2, 341, 57, 3, 2, 2, 2, 342, 343, 7, 18, 2, 2, 343, 344, 7, 40, 2, 2, 344, 345, 5, 164, 83, 2, 345, 346, 7, 41, 2, 2, 346, 349, 5, 50, 26, 2, 347, 348, 7, 19, 2, 2, 348, 350, 5, 50, 26, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 59, 3, 2, 2, 2, 351, 352, 7, 11, 2, 2, 352, 353, 7, 40, 2, 2, 353, 354, 5, 164, 83, 2, 354, 355, 7, 41, 2, 2, 355, 359, 7, 45, 2, 2, 356, 358, 5, 62, 32, 2, 357, 356, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 46, 2, 2, 363, 61, 3, 2, 2, 2, 364, 365, 7, 12, 2, 2, 365, 366, 5, 164, 83, 2, 366, 367, 7, 39, 2, 2, 367, 368, 5, 50, 26, 2, 368, 373, 3, 2, 2, 2, 369, 370, 7, 13, 2, 2, 370, 371, 7, 39, 2, 2, 371, 373, 5, 50, 26, 2, 372, 364, 3, 2, 2, 2, 372, 369, 3, 2, 2, 2, 373, 63, 3, 2, 2, 2, 374, 378, 5, 66, 34, 2, 375, 378, 5, 68, 35, 2, 376, 378, 5, 70, 36, 2, 377, 374, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 376, 3, 2, 2, 2, 378, 65, 3, 2, 2, 2, 379, 380, 7, 20, 2, 2, 380, 387, 7, 40, 2, 2, 381, 384, 5, 14, 8, 2, 382, 384, 5, 164, 83, 2, 383, 381, 3, 2, 2, 2, 383, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 8, 34, 1, 2, 386, 388, 3, 2, 2, 2, 387, 383, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 393, 7, 37, 2, 2, 390, 391, 5, 164, 83, 2, 391, 392, 8, 34, 1, 2, 392, 394, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 399, 7, 37, 2, 2, 396, 397, 5, 164, 83, 2, 397, 398, 8, 34, 1, 2, 398, 400, 3, 2, 2, 2, 399, 396, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 7, 41, 2, 2, 402, 403, 5, 50, 26, 2, 403, 67, 3, 2, 2, 2, 404, 405, 7, 17, 2, 2, 405, 406, 7, 40, 2, 2, 406, 407, 5, 164, 83, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 50, 26, 2, 409, 69, 3, 2, 2, 2, 410, 411, 7, 16, 2, 2, 411, 412, 5, 50, 26, 2, 412, 413, 7, 17, 2, 2, 413, 414, 7, 40, 2, 2, 414, 415, 5, 164, 83, 2, 415, 416, 7, 41, 2, 2, 416, 417, 7, 37, 2, 2, 417, 71, 3, 2, 2, 2, 418, 419, 9, 3, 2, 2, 419, 420, 7, 37, 2, 2, 420, 73, 3, 2, 2, 2, 421, 423, 7, 23, 2, 2, 422, 424, 5, 164, 83, 2, 423, 422, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 7, 37, 2, 2, 426, 75, 3, 2, 2, 2, 427, 438, 5, 80, 41, 2, 428, 438, 5, 78, 40, 2, 429, 438, 5, 100, 51, 2, 430, 438, 5, 102, 52, 2, 431, 438, 5, 82, 42, 2, 432, 438, 5, 84, 43, 2, 433, 438, 5, 90, 46, 2, 434, 438, 5, 92, 47, 2, 435, 438, 5, 98, 50, 2, 436, 438, 5, 106, 54, 2, 437, 427, 3, 2, 2, 2, 437, 428, 3, 2, 2, 2, 437, 429, 3, 2, 2, 2, 437, 430, 3, 2, 2, 2, 437, 431, 3, 2, 2, 2, 437, 432, 3, 2, 2, 2, 437, 433, 3, 2, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 436, 3, 2, 2, 2, 438, 77, 3, 2, 2, 2, 439, 441, 7, 40, 2, 2, 440, 442, 5, 28, 15, 2, 441, 440, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 444, 7, 41, 2, 2, 444, 445, 7, 39, 2, 2, 445, 446, 5, 166, 84, 2, 446, 449, 7, 25, 2, 2, 447, 450, 5, 164, 83, 2, 448, 450, 5, 52, 27, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 79, 3, 2, 2, 2, 451, 452, 7, 40, 2, 2, 452, 453, 5, 164, 83, 2, 453, 454, 7, 41, 2, 2, 454, 81, 3, 2, 2, 2, 455, 456, 9, 4, 2, 2, 456, 83, 3, 2, 2, 2, 457, 458, 5, 86, 44, 2, 458, 85, 3, 2, 2, 2, 459, 460, 7, 78, 2, 2, 460, 87, 3, 2, 2, 2, 461, 464, 5, 86, 44, 2, 462, 464, 5, 90, 46, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 89, 3, 2, 2, 2, 465, 466, 9, 5, 2, 2, 466, 91, 3, 2, 2, 2, 467, 471, 7, 85, 2, 2, 468, 470, 5, 94, 48, 2, 469, 468, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 484, 7, 87, 2, 2, 475, 479, 7, 86, 2, 2, 476, 478, 5, 96, 49, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 7, 89, 2, 2, 483, 467, 3, 2, 2, 2, 483, 475, 3, 2, 2, 2, 484, 93, 3, 2, 2, 2, 485, 492, 7, 88, 2, 2, 486, 488, 7, 3, 2, 2, 487, 489, 5, 164, 83, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 492, 7, 44, 2, 2, 491, 485, 3, 2, 2, 2, 491, 486, 3, 2, 2, 2, 492, 95, 3, 2, 2, 2, 493, 500, 7, 90, 2, 2, 494, 496, 7, 3, 2, 2, 495, 497, 5, 164, 83, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 500, 7, 44, 2, 2, 499, 493, 3, 2, 2, 2, 499, 494, 3, 2, 2, 2, 500, 97, 3, 2, 2, 2, 501, 502, 9, 6, 2, 2, 502, 99, 3, 2, 2, 2, 503, 512, 7, 42, 2, 2, 504, 509, 5, 164, 83, 2, 505, 506, 7, 36, 2, 2, 506, 508, 5, 164, 83, 2, 507, 505, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 512, 504, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 515, 3, 2, 2, 2, 514, 516, 7, 36, 2, 2, 515, 514, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 7, 43, 2, 2, 518, 101, 3, 2, 2, 2, 519, 528, 7, 45, 2, 2, 520, 525, 5, 104, 53, 2, 521, 522, 7, 36, 2, 2, 522, 524, 5, 104, 53, 2, 523, 521, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 528, 520, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 532, 7, 36, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 46, 2, 2, 534, 103, 3, 2, 2, 2, 535, 536, 5, 88, 45, 2, 536, 537, 7, 39, 2, 2, 537, 538, 5, 164, 83, 2, 538, 105, 3, 2, 2, 2, 539, 540, 9, 7, 2, 2, 540, 107, 3, 2, 2, 2, 541, 542, 8, 55, 1, 2, 542, 562, 5, 76, 39, 2, 543, 544, 7, 24, 2, 2, 544, 545, 5, 108, 55, 2, 545, 547, 7, 40, 2, 2, 546, 548, 5, 110, 56, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 550, 7, 41, 2, 2, 550, 551, 8, 55, 1, 2, 551, 562, 3, 2, 2, 2, 552, 553, 7, 29, 2, 2, 553, 554, 5, 166, 84, 2, 554, 556, 7, 40, 2, 2, 555, 557, 5, 110, 56, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 41, 2, 2, 559, 560, 8, 55, 1, 2, 560, 562, 3, 2, 2, 2, 561, 541, 3, 2, 2, 2, 561, 543, 3, 2, 2, 2, 561, 552, 3, 2, 2, 2, 562, 584, 3, 2, 2, 2, 563, 564, 12, 8, 2, 2, 564, 565, 5, 112, 57, 2, 565, 566, 8, 55, 1, 2, 566, 583, 3, 2, 2, 2, 567, 568, 12, 7, 2, 2, 568, 569, 5, 114, 58, 2, 569, 570, 8, 55, 1, 2, 570, 583, 3, 2, 2, 2, 571, 572, 12, 6, 2, 2, 572, 573, 5, 116, 59, 2, 573, 574, 8, 55, 1, 2, 574, 583, 3, 2, 2, 2, 575, 576, 12, 5, 2, 2, 576, 578, 7, 40, 2, 2, 577, 579, 5, 110, 56, 2, 578, 577, 3, 2, 2, 2, 578, 579, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 7, 41, 2, 2, 581, 583, 8, 55, 1, 2, 582, 563, 3, 2, 2, 2, 582, 567, 3, 2, 2, 2, 582, 571, 3, 2, 2, 2, 582, 575, 3, 2, 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 109, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 587, 592, 5, 160, 81, 2, 588, 589, 7, 36, 2, 2, 589, 591, 5, 160, 81, 2, 590, 588, 3, 2, 2, 2, 591, 594, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 111, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 596, 7, 77, 2, 2, 596, 597, 5, 86, 44, 2, 597, 113, 3, 2, 2, 2, 598, 599, 7, 42, 2, 2, 599, 600, 5, 164, 83, 2, 600, 601, 7, 43, 2, 2, 601, 115, 3, 2, 2, 2, 602, 606, 7, 42, 2, 2, 603, 604, 5, 164, 83, 2, 604, 605, 8, 59, 1, 2, 605, 607, 3, 2, 2, 2, 606, 603, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 612, 7, 39, 2, 2, 609, 610, 5, 164, 83, 2, 610, 611, 8, 59, 1, 2, 611, 613, 3, 2, 2, 2, 612, 609, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 7, 43, 2, 2, 615, 117, 3, 2, 2, 2, 616, 620, 5, 108, 55, 2, 617, 620, 5, 120, 61, 2, 618, 620, 5, 122, 62, 2, 619, 616, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 619, 618, 3, 2, 2, 2, 620, 119, 3, 2, 2, 2, 621, 622, 5, 108, 55, 2, 622, 623, 5, 130, 66, 2, 623, 121, 3, 2, 2, 2, 624, 625, 7, 32, 2, 2, 625, 626, 5, 160, 81, 2, 626, 123, 3, 2, 2, 2, 627, 631, 5, 118, 60, 2, 628, 631, 5, 126, 64, 2, 629, 631, 5, 128, 65, 2, 630, 627, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 630, 629, 3, 2, 2, 2, 631, 125, 3, 2, 2, 2, 632, 633, 5, 130, 66, 2, 633, 634, 5, 118, 60, 2, 634, 127, 3, 2, 2, 2, 635, 636, 5, 132, 67, 2, 636, 637, 5, 118, 60, 2, 637, 129, 3, 2, 2, 2, 638, 639, 9, 8, 2, 2, 639, 131, 3, 2, 2, 2, 640, 641, 9, 9, 2, 2, 641, 133, 3, 2, 2, 2, 642, 648, 5, 124, 63, 2, 643, 644, 5, 124, 63, 2, 644, 645, 7, 9, 2, 2, 645, 646, 5, 166, 84, 2, 646, 648, 3, 2, 2, 2, 647, 642, 3, 2, 2, 2, 647, 643, 3, 2, 2, 2, 648, 135, 3, 2, 2, 2, 649, 650, 8, 69, 1, 2, 650, 651, 5, 134, 68, 2, 651, 657, 3, 2, 2, 2, 652, 653, 12, 3, 2, 2, 653, 654, 9, 10, 2, 2, 654, 656, 5, 134, 68, 2, 655, 652, 3, 2, 2, 2, 656, 659, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 137, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 661, 8, 70, 1, 2, 661, 662, 5, 136, 69, 2, 662, 668, 3, 2, 2, 2, 663, 664, 12, 3, 2, 2, 664, 665, 9, 11, 2, 2, 665, 667, 5, 136, 69, 2, 666, 663, 3, 2, 2, 2, 667, 670, 3, 2, 2, 2, 668, 666, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 139, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 671, 672, 8, 71, 1, 2, 672, 673, 5, 138, 70, 2, 673, 680, 3, 2, 2, 2, 674, 675, 12, 3, 2, 2, 675, 676, 5, 142, 72, 2, 676, 677, 5, 148, 75, 2, 677, 679, 3, 2, 2, 2, 678, 674, 3, 2, 2, 2, 679, 682, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 141, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 683, 684, 9, 12, 2, 2, 684, 143, 3, 2, 2, 2, 685, 686, 8, 73, 1, 2, 686, 687, 5, 140, 71, 2, 687, 693, 3, 2, 2, 2, 688, 689, 12, 3, 2, 2, 689, 690, 9, 13, 2, 2, 690, 692, 5, 140, 71, 2, 691, 688, 3, 2, 2, 2, 692, 695, 3, 2, 2, 2, 693, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 145, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 696, 697, 8, 74, 1, 2, 697, 698, 5, 144, 73, 2, 698, 704, 3, 2, 2, 2, 699, 700, 12, 3, 2, 2, 700, 701, 9, 14, 2, 2, 701, 703, 5, 144, 73, 2, 702, 699, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 147, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 708, 8, 75, 1, 2, 708, 709, 5, 146, 74, 2, 709, 715, 3, 2, 2, 2, 710, 711, 12, 3, 2, 2, 711, 712, 7, 70, 2, 2, 712, 714, 5, 146, 74, 2, 713, 710, 3, 2, 2, 2, 714, 717, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 149, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 719, 8, 76, 1, 2, 719, 720, 5, 148, 75, 2, 720, 726, 3, 2, 2, 2, 721, 722, 12, 3, 2, 2, 722, 723, 7, 72, 2, 2, 723, 725, 5, 148, 75, 2, 724, 721, 3, 2, 2, 2, 725, 728, 3, 2, 2, 2, 726, 724, 3, 2, 2, 2, 726, 727, 3, 2, 2, 2, 727, 151, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 729, 730, 8, 77, 1, 2, 730, 731, 5, 150, 76, 2, 731, 737, 3, 2, 2, 2, 732, 733, 12, 3, 2, 2, 733, 734, 7, 71, 2, 2, 734, 736, 5, 150, 76, 2, 735, 732, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 153, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 740, 741, 8, 78, 1, 2, 741, 742, 5, 152, 77, 2, 742, 748, 3, 2, 2, 2, 743, 744, 12, 3, 2, 2, 744, 745, 7, 55, 2, 2, 745, 747, 5, 152, 77, 2, 746, 743, 3, 2, 2, 2, 747, 750, 3, 2, 2, 2, 748, 746, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 155, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 751, 752, 8, 79, 1, 2, 752, 753, 5, 154, 78, 2, 753, 759, 3, 2, 2, 2, 754, 755, 12, 3, 2, 2, 755, 756, 7, 56, 2, 2, 756, 758, 5, 154, 78, 2, 757, 754, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 157, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 770, 5, 156, 79, 2, 763, 764, 5, 156, 79, 2, 764, 765, 7, 38, 2, 2, 765, 766, 5, 158, 80, 2, 766, 767, 7, 39, 2, 2, 767, 768, 5, 158, 80, 2, 768, 770, 3, 2, 2, 2, 769, 762, 3, 2, 2, 2, 769, 763, 3, 2, 2, 2, 770, 159, 3, 2, 2, 2, 771, 777, 5, 158, 80, 2, 772, 773, 5, 108, 55, 2, 773, 774, 5, 162, 82, 2, 774, 775, 5, 160, 81, 2, 775, 777, 3, 2, 2, 2, 776, 771, 3, 2, 2, 2, 776, 772, 3, 2, 2, 2, 777, 161, 3, 2, 2, 2, 778, 779, 9, 15, 2, 2, 779, 163, 3, 2, 2, 2, 780, 785, 5, 160, 81, 2, 781, 782, 7, 36, 2, 2, 782, 784, 5, 160, 81, 2, 783, 781, 3, 2, 2, 2, 784, 787, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 165, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 788, 792, 5, 168, 85, 2, 789, 792, 5, 170, 86, 2, 790, 792, 5, 172, 87, 2, 791, 788, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 791, 790, 3, 2, 2, 2, 792, 167, 3, 2, 2, 2, 793, 794, 5, 174, 88, 2, 794, 169, 3, 2, 2, 2, 795, 796, 5, 174, 88, 2, 796, 805, 7, 66, 2, 2, 797, 802, 5, 166, 84, 2, 798, 799, 7, 36, 2, 2, 799, 801, 5, 166, 84, 2, 800, 798, 3, 2, 2, 2, 801, 804, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 805, 797, 3, 2, 2, 2, 805, 806, 3, 2, 2, 2, 806, 807, 3, 2, 2, 2, 807, 808, 7, 68, 2, 2, 808, 171, 3, 2, 2, 2, 809, 810, 7, 32, 2, 2, 810, 811, 7, 40, 2, 2, 811, 812, 5, 174, 88, 2, 812, 813, 7, 41, 2, 2, 813, 173, 3, 2, 2, 2, 814, 815, 9, 16, 2, 2, 815, 175, 3, 2, 2, 2, 77, 177, 184, 191, 196, 204, 216, 228, 234, 241, 254, 261, 271, 283, 285, 293, 302, 308, 313, 324, 329, 340, 349, 359, 372, 377, 383, 387, 393, 399, 423, 437, 441, 449, 463, 471, 479, 483, 488, 491, 496, 499, 509, 512, 515, 525, 528, 531, 547, 556, 561, 578, 582, 584, 592, 606, 612, 619, 630, 647, 657, 668, 680, 693, 704, 715, 726, 737, 748, 759, 769, 776, 785, 791, 802, 805] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 91, 823, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 3, 2, 5, 2, 180, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 4, 3, 4, 3, 5, 6, 5, 192, 10, 5, 13, 5, 14, 5, 193, 3, 6, 3, 6, 3, 6, 5, 6, 199, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 207, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 219, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 231, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 237, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 242, 10, 15, 12, 15, 14, 15, 245, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 255, 10, 17, 12, 17, 14, 17, 258, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 264, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 274, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 286, 10, 21, 12, 21, 14, 21, 289, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 296, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 305, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 311, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 316, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 327, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 332, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 343, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 352, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 360, 10, 31, 12, 31, 14, 31, 363, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 375, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 380, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 5, 34, 390, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 396, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 402, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 426, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 440, 10, 39, 3, 40, 3, 40, 5, 40, 444, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 452, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 466, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 472, 10, 47, 12, 47, 14, 47, 475, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 480, 10, 47, 12, 47, 14, 47, 483, 11, 47, 3, 47, 5, 47, 486, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 491, 10, 48, 3, 48, 5, 48, 494, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 499, 10, 49, 3, 49, 5, 49, 502, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 510, 10, 51, 12, 51, 14, 51, 513, 11, 51, 5, 51, 515, 10, 51, 3, 51, 5, 51, 518, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 526, 10, 52, 12, 52, 14, 52, 529, 11, 52, 5, 52, 531, 10, 52, 3, 52, 5, 52, 534, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 550, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 559, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 564, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 3, 55, 3, 55, 7, 55, 585, 10, 55, 12, 55, 14, 55, 588, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 593, 10, 56, 12, 56, 14, 56, 596, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 609, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 615, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 622, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 633, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 650, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 658, 10, 69, 12, 69, 14, 69, 661, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 669, 10, 70, 12, 70, 14, 70, 672, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 681, 10, 71, 12, 71, 14, 71, 684, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 694, 10, 73, 12, 73, 14, 73, 697, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 705, 10, 74, 12, 74, 14, 74, 708, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 716, 10, 75, 12, 75, 14, 75, 719, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 727, 10, 76, 12, 76, 14, 76, 730, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 738, 10, 77, 12, 77, 14, 77, 741, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 749, 10, 78, 12, 78, 14, 78, 752, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 760, 10, 79, 12, 79, 14, 79, 763, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 772, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 779, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 7, 83, 786, 10, 83, 12, 83, 14, 83, 789, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 794, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 7, 86, 803, 10, 86, 12, 86, 14, 86, 806, 11, 86, 5, 86, 808, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 2, 2, 13, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 90, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 81, 82, 4, 2, 80, 80, 83, 83, 3, 2, 34, 36, 4, 2, 49, 49, 51, 51, 6, 2, 48, 48, 50, 50, 58, 58, 74, 74, 3, 2, 52, 55, 4, 2, 48, 48, 50, 50, 3, 2, 75, 77, 3, 2, 67, 70, 3, 2, 65, 66, 3, 2, 59, 64, 4, 2, 34, 36, 79, 79, 2, 832, 2, 179, 3, 2, 2, 2, 4, 184, 3, 2, 2, 2, 6, 188, 3, 2, 2, 2, 8, 191, 3, 2, 2, 2, 10, 198, 3, 2, 2, 2, 12, 206, 3, 2, 2, 2, 14, 208, 3, 2, 2, 2, 16, 211, 3, 2, 2, 2, 18, 213, 3, 2, 2, 2, 20, 220, 3, 2, 2, 2, 22, 222, 3, 2, 2, 2, 24, 224, 3, 2, 2, 2, 26, 226, 3, 2, 2, 2, 28, 238, 3, 2, 2, 2, 30, 246, 3, 2, 2, 2, 32, 250, 3, 2, 2, 2, 34, 263, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 280, 3, 2, 2, 2, 42, 295, 3, 2, 2, 2, 44, 297, 3, 2, 2, 2, 46, 301, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 326, 3, 2, 2, 2, 52, 328, 3, 2, 2, 2, 54, 335, 3, 2, 2, 2, 56, 342, 3, 2, 2, 2, 58, 344, 3, 2, 2, 2, 60, 353, 3, 2, 2, 2, 62, 374, 3, 2, 2, 2, 64, 379, 3, 2, 2, 2, 66, 381, 3, 2, 2, 2, 68, 406, 3, 2, 2, 2, 70, 412, 3, 2, 2, 2, 72, 420, 3, 2, 2, 2, 74, 423, 3, 2, 2, 2, 76, 439, 3, 2, 2, 2, 78, 441, 3, 2, 2, 2, 80, 453, 3, 2, 2, 2, 82, 457, 3, 2, 2, 2, 84, 459, 3, 2, 2, 2, 86, 461, 3, 2, 2, 2, 88, 465, 3, 2, 2, 2, 90, 467, 3, 2, 2, 2, 92, 485, 3, 2, 2, 2, 94, 493, 3, 2, 2, 2, 96, 501, 3, 2, 2, 2, 98, 503, 3, 2, 2, 2, 100, 505, 3, 2, 2, 2, 102, 521, 3, 2, 2, 2, 104, 537, 3, 2, 2, 2, 106, 541, 3, 2, 2, 2, 108, 563, 3, 2, 2, 2, 110, 589, 3, 2, 2, 2, 112, 597, 3, 2, 2, 2, 114, 600, 3, 2, 2, 2, 116, 604, 3, 2, 2, 2, 118, 621, 3, 2, 2, 2, 120, 623, 3, 2, 2, 2, 122, 626, 3, 2, 2, 2, 124, 632, 3, 2, 2, 2, 126, 634, 3, 2, 2, 2, 128, 637, 3, 2, 2, 2, 130, 640, 3, 2, 2, 2, 132, 642, 3, 2, 2, 2, 134, 649, 3, 2, 2, 2, 136, 651, 3, 2, 2, 2, 138, 662, 3, 2, 2, 2, 140, 673, 3, 2, 2, 2, 142, 685, 3, 2, 2, 2, 144, 687, 3, 2, 2, 2, 146, 698, 3, 2, 2, 2, 148, 709, 3, 2, 2, 2, 150, 720, 3, 2, 2, 2, 152, 731, 3, 2, 2, 2, 154, 742, 3, 2, 2, 2, 156, 753, 3, 2, 2, 2, 158, 771, 3, 2, 2, 2, 160, 778, 3, 2, 2, 2, 162, 780, 3, 2, 2, 2, 164, 782, 3, 2, 2, 2, 166, 793, 3, 2, 2, 2, 168, 795, 3, 2, 2, 2, 170, 797, 3, 2, 2, 2, 172, 811, 3, 2, 2, 2, 174, 816, 3, 2, 2, 2, 176, 818, 3, 2, 2, 2, 178, 180, 5, 4, 3, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 182, 7, 2, 2, 3, 182, 3, 3, 2, 2, 2, 183, 185, 5, 6, 4, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 5, 3, 2, 2, 2, 188, 189, 5, 8, 5, 2, 189, 7, 3, 2, 2, 2, 190, 192, 5, 10, 6, 2, 191, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 9, 3, 2, 2, 2, 195, 199, 5, 50, 26, 2, 196, 199, 5, 12, 7, 2, 197, 199, 7, 38, 2, 2, 198, 195, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 11, 3, 2, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 38, 2, 2, 202, 207, 3, 2, 2, 2, 203, 207, 5, 26, 14, 2, 204, 207, 5, 32, 17, 2, 205, 207, 5, 40, 21, 2, 206, 200, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 13, 3, 2, 2, 2, 208, 209, 5, 16, 9, 2, 209, 210, 5, 18, 10, 2, 210, 15, 3, 2, 2, 2, 211, 212, 9, 2, 2, 2, 212, 17, 3, 2, 2, 2, 213, 214, 5, 22, 12, 2, 214, 215, 7, 40, 2, 2, 215, 218, 5, 166, 84, 2, 216, 217, 7, 59, 2, 2, 217, 219, 5, 20, 11, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 19, 3, 2, 2, 2, 220, 221, 5, 160, 81, 2, 221, 21, 3, 2, 2, 2, 222, 223, 5, 24, 13, 2, 223, 23, 3, 2, 2, 2, 224, 225, 7, 79, 2, 2, 225, 25, 3, 2, 2, 2, 226, 227, 7, 22, 2, 2, 227, 228, 5, 22, 12, 2, 228, 230, 7, 41, 2, 2, 229, 231, 5, 28, 15, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 7, 42, 2, 2, 233, 234, 7, 25, 2, 2, 234, 236, 5, 166, 84, 2, 235, 237, 5, 52, 27, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 27, 3, 2, 2, 2, 238, 243, 5, 30, 16, 2, 239, 240, 7, 37, 2, 2, 240, 242, 5, 30, 16, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 29, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 247, 5, 22, 12, 2, 247, 248, 7, 40, 2, 2, 248, 249, 5, 166, 84, 2, 249, 31, 3, 2, 2, 2, 250, 251, 7, 27, 2, 2, 251, 252, 5, 22, 12, 2, 252, 256, 7, 46, 2, 2, 253, 255, 5, 34, 18, 2, 254, 253, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 47, 2, 2, 260, 33, 3, 2, 2, 2, 261, 264, 5, 36, 19, 2, 262, 264, 5, 38, 20, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 35, 3, 2, 2, 2, 265, 266, 5, 22, 12, 2, 266, 267, 7, 40, 2, 2, 267, 268, 5, 166, 84, 2, 268, 269, 7, 38, 2, 2, 269, 37, 3, 2, 2, 2, 270, 271, 5, 22, 12, 2, 271, 273, 7, 41, 2, 2, 272, 274, 5, 28, 15, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 42, 2, 2, 276, 277, 7, 40, 2, 2, 277, 278, 5, 166, 84, 2, 278, 279, 7, 38, 2, 2, 279, 39, 3, 2, 2, 2, 280, 281, 7, 26, 2, 2, 281, 282, 5, 22, 12, 2, 282, 287, 7, 46, 2, 2, 283, 286, 5, 42, 22, 2, 284, 286, 7, 38, 2, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 289, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 290, 291, 7, 47, 2, 2, 291, 41, 3, 2, 2, 2, 292, 296, 5, 44, 23, 2, 293, 296, 5, 46, 24, 2, 294, 296, 5, 48, 25, 2, 295, 292, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 43, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 299, 7, 40, 2, 2, 299, 300, 5, 166, 84, 2, 300, 45, 3, 2, 2, 2, 301, 302, 5, 22, 12, 2, 302, 304, 7, 41, 2, 2, 303, 305, 5, 28, 15, 2, 304, 303, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 307, 7, 42, 2, 2, 307, 308, 7, 40, 2, 2, 308, 310, 5, 166, 84, 2, 309, 311, 5, 52, 27, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 47, 3, 2, 2, 2, 312, 313, 7, 28, 2, 2, 313, 315, 7, 41, 2, 2, 314, 316, 5, 28, 15, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 7, 42, 2, 2, 318, 319, 5, 52, 27, 2, 319, 49, 3, 2, 2, 2, 320, 327, 5, 54, 28, 2, 321, 327, 5, 56, 29, 2, 322, 327, 5, 64, 33, 2, 323, 327, 5, 72, 37, 2, 324, 327, 5, 74, 38, 2, 325, 327, 5, 52, 27, 2, 326, 320, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 326, 322, 3, 2, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 325, 3, 2, 2, 2, 327, 51, 3, 2, 2, 2, 328, 329, 6, 27, 2, 2, 329, 331, 7, 46, 2, 2, 330, 332, 5, 8, 5, 2, 331, 330, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 7, 47, 2, 2, 334, 53, 3, 2, 2, 2, 335, 336, 8, 28, 1, 2, 336, 337, 5, 164, 83, 2, 337, 338, 7, 38, 2, 2, 338, 339, 8, 28, 1, 2, 339, 55, 3, 2, 2, 2, 340, 343, 5, 58, 30, 2, 341, 343, 5, 60, 31, 2, 342, 340, 3, 2, 2, 2, 342, 341, 3, 2, 2, 2, 343, 57, 3, 2, 2, 2, 344, 345, 7, 18, 2, 2, 345, 346, 7, 41, 2, 2, 346, 347, 5, 164, 83, 2, 347, 348, 7, 42, 2, 2, 348, 351, 5, 50, 26, 2, 349, 350, 7, 19, 2, 2, 350, 352, 5, 50, 26, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 59, 3, 2, 2, 2, 353, 354, 7, 11, 2, 2, 354, 355, 7, 41, 2, 2, 355, 356, 5, 164, 83, 2, 356, 357, 7, 42, 2, 2, 357, 361, 7, 46, 2, 2, 358, 360, 5, 62, 32, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 61, 3, 2, 2, 2, 366, 367, 7, 12, 2, 2, 367, 368, 5, 164, 83, 2, 368, 369, 7, 40, 2, 2, 369, 370, 5, 50, 26, 2, 370, 375, 3, 2, 2, 2, 371, 372, 7, 13, 2, 2, 372, 373, 7, 40, 2, 2, 373, 375, 5, 50, 26, 2, 374, 366, 3, 2, 2, 2, 374, 371, 3, 2, 2, 2, 375, 63, 3, 2, 2, 2, 376, 380, 5, 66, 34, 2, 377, 380, 5, 68, 35, 2, 378, 380, 5, 70, 36, 2, 379, 376, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 378, 3, 2, 2, 2, 380, 65, 3, 2, 2, 2, 381, 382, 7, 20, 2, 2, 382, 389, 7, 41, 2, 2, 383, 386, 5, 14, 8, 2, 384, 386, 5, 164, 83, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 8, 34, 1, 2, 388, 390, 3, 2, 2, 2, 389, 385, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 395, 7, 38, 2, 2, 392, 393, 5, 164, 83, 2, 393, 394, 8, 34, 1, 2, 394, 396, 3, 2, 2, 2, 395, 392, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 401, 7, 38, 2, 2, 398, 399, 5, 164, 83, 2, 399, 400, 8, 34, 1, 2, 400, 402, 3, 2, 2, 2, 401, 398, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 7, 42, 2, 2, 404, 405, 5, 50, 26, 2, 405, 67, 3, 2, 2, 2, 406, 407, 7, 17, 2, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 164, 83, 2, 409, 410, 7, 42, 2, 2, 410, 411, 5, 50, 26, 2, 411, 69, 3, 2, 2, 2, 412, 413, 7, 16, 2, 2, 413, 414, 5, 50, 26, 2, 414, 415, 7, 17, 2, 2, 415, 416, 7, 41, 2, 2, 416, 417, 5, 164, 83, 2, 417, 418, 7, 42, 2, 2, 418, 419, 7, 38, 2, 2, 419, 71, 3, 2, 2, 2, 420, 421, 9, 3, 2, 2, 421, 422, 7, 38, 2, 2, 422, 73, 3, 2, 2, 2, 423, 425, 7, 23, 2, 2, 424, 426, 5, 164, 83, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 38, 2, 2, 428, 75, 3, 2, 2, 2, 429, 440, 5, 80, 41, 2, 430, 440, 5, 78, 40, 2, 431, 440, 5, 100, 51, 2, 432, 440, 5, 102, 52, 2, 433, 440, 5, 82, 42, 2, 434, 440, 5, 84, 43, 2, 435, 440, 5, 90, 46, 2, 436, 440, 5, 92, 47, 2, 437, 440, 5, 98, 50, 2, 438, 440, 5, 106, 54, 2, 439, 429, 3, 2, 2, 2, 439, 430, 3, 2, 2, 2, 439, 431, 3, 2, 2, 2, 439, 432, 3, 2, 2, 2, 439, 433, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 435, 3, 2, 2, 2, 439, 436, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 77, 3, 2, 2, 2, 441, 443, 7, 41, 2, 2, 442, 444, 5, 28, 15, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 7, 42, 2, 2, 446, 447, 7, 40, 2, 2, 447, 448, 5, 166, 84, 2, 448, 451, 7, 25, 2, 2, 449, 452, 5, 164, 83, 2, 450, 452, 5, 52, 27, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 79, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 455, 5, 164, 83, 2, 455, 456, 7, 42, 2, 2, 456, 81, 3, 2, 2, 2, 457, 458, 9, 4, 2, 2, 458, 83, 3, 2, 2, 2, 459, 460, 5, 86, 44, 2, 460, 85, 3, 2, 2, 2, 461, 462, 7, 79, 2, 2, 462, 87, 3, 2, 2, 2, 463, 466, 5, 86, 44, 2, 464, 466, 5, 90, 46, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 89, 3, 2, 2, 2, 467, 468, 9, 5, 2, 2, 468, 91, 3, 2, 2, 2, 469, 473, 7, 86, 2, 2, 470, 472, 5, 94, 48, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 486, 7, 88, 2, 2, 477, 481, 7, 87, 2, 2, 478, 480, 5, 96, 49, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 90, 2, 2, 485, 469, 3, 2, 2, 2, 485, 477, 3, 2, 2, 2, 486, 93, 3, 2, 2, 2, 487, 494, 7, 89, 2, 2, 488, 490, 7, 3, 2, 2, 489, 491, 5, 164, 83, 2, 490, 489, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 494, 7, 45, 2, 2, 493, 487, 3, 2, 2, 2, 493, 488, 3, 2, 2, 2, 494, 95, 3, 2, 2, 2, 495, 502, 7, 91, 2, 2, 496, 498, 7, 3, 2, 2, 497, 499, 5, 164, 83, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 7, 45, 2, 2, 501, 495, 3, 2, 2, 2, 501, 496, 3, 2, 2, 2, 502, 97, 3, 2, 2, 2, 503, 504, 9, 6, 2, 2, 504, 99, 3, 2, 2, 2, 505, 514, 7, 43, 2, 2, 506, 511, 5, 164, 83, 2, 507, 508, 7, 37, 2, 2, 508, 510, 5, 164, 83, 2, 509, 507, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 514, 506, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 518, 7, 37, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 7, 44, 2, 2, 520, 101, 3, 2, 2, 2, 521, 530, 7, 46, 2, 2, 522, 527, 5, 104, 53, 2, 523, 524, 7, 37, 2, 2, 524, 526, 5, 104, 53, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 534, 7, 37, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 47, 2, 2, 536, 103, 3, 2, 2, 2, 537, 538, 5, 88, 45, 2, 538, 539, 7, 40, 2, 2, 539, 540, 5, 164, 83, 2, 540, 105, 3, 2, 2, 2, 541, 542, 9, 7, 2, 2, 542, 107, 3, 2, 2, 2, 543, 544, 8, 55, 1, 2, 544, 564, 5, 76, 39, 2, 545, 546, 7, 24, 2, 2, 546, 547, 5, 108, 55, 2, 547, 549, 7, 41, 2, 2, 548, 550, 5, 110, 56, 2, 549, 548, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 7, 42, 2, 2, 552, 553, 8, 55, 1, 2, 553, 564, 3, 2, 2, 2, 554, 555, 7, 29, 2, 2, 555, 556, 5, 166, 84, 2, 556, 558, 7, 41, 2, 2, 557, 559, 5, 110, 56, 2, 558, 557, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 7, 42, 2, 2, 561, 562, 8, 55, 1, 2, 562, 564, 3, 2, 2, 2, 563, 543, 3, 2, 2, 2, 563, 545, 3, 2, 2, 2, 563, 554, 3, 2, 2, 2, 564, 586, 3, 2, 2, 2, 565, 566, 12, 8, 2, 2, 566, 567, 5, 112, 57, 2, 567, 568, 8, 55, 1, 2, 568, 585, 3, 2, 2, 2, 569, 570, 12, 7, 2, 2, 570, 571, 5, 114, 58, 2, 571, 572, 8, 55, 1, 2, 572, 585, 3, 2, 2, 2, 573, 574, 12, 6, 2, 2, 574, 575, 5, 116, 59, 2, 575, 576, 8, 55, 1, 2, 576, 585, 3, 2, 2, 2, 577, 578, 12, 5, 2, 2, 578, 580, 7, 41, 2, 2, 579, 581, 5, 110, 56, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 42, 2, 2, 583, 585, 8, 55, 1, 2, 584, 565, 3, 2, 2, 2, 584, 569, 3, 2, 2, 2, 584, 573, 3, 2, 2, 2, 584, 577, 3, 2, 2, 2, 585, 588, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 109, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 589, 594, 5, 160, 81, 2, 590, 591, 7, 37, 2, 2, 591, 593, 5, 160, 81, 2, 592, 590, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 111, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 598, 7, 78, 2, 2, 598, 599, 5, 86, 44, 2, 599, 113, 3, 2, 2, 2, 600, 601, 7, 43, 2, 2, 601, 602, 5, 164, 83, 2, 602, 603, 7, 44, 2, 2, 603, 115, 3, 2, 2, 2, 604, 608, 7, 43, 2, 2, 605, 606, 5, 164, 83, 2, 606, 607, 8, 59, 1, 2, 607, 609, 3, 2, 2, 2, 608, 605, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 614, 7, 40, 2, 2, 611, 612, 5, 164, 83, 2, 612, 613, 8, 59, 1, 2, 613, 615, 3, 2, 2, 2, 614, 611, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 7, 44, 2, 2, 617, 117, 3, 2, 2, 2, 618, 622, 5, 108, 55, 2, 619, 622, 5, 120, 61, 2, 620, 622, 5, 122, 62, 2, 621, 618, 3, 2, 2, 2, 621, 619, 3, 2, 2, 2, 621, 620, 3, 2, 2, 2, 622, 119, 3, 2, 2, 2, 623, 624, 5, 108, 55, 2, 624, 625, 5, 130, 66, 2, 625, 121, 3, 2, 2, 2, 626, 627, 7, 33, 2, 2, 627, 628, 5, 160, 81, 2, 628, 123, 3, 2, 2, 2, 629, 633, 5, 118, 60, 2, 630, 633, 5, 126, 64, 2, 631, 633, 5, 128, 65, 2, 632, 629, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 125, 3, 2, 2, 2, 634, 635, 5, 130, 66, 2, 635, 636, 5, 118, 60, 2, 636, 127, 3, 2, 2, 2, 637, 638, 5, 132, 67, 2, 638, 639, 5, 118, 60, 2, 639, 129, 3, 2, 2, 2, 640, 641, 9, 8, 2, 2, 641, 131, 3, 2, 2, 2, 642, 643, 9, 9, 2, 2, 643, 133, 3, 2, 2, 2, 644, 650, 5, 124, 63, 2, 645, 646, 5, 124, 63, 2, 646, 647, 7, 9, 2, 2, 647, 648, 5, 166, 84, 2, 648, 650, 3, 2, 2, 2, 649, 644, 3, 2, 2, 2, 649, 645, 3, 2, 2, 2, 650, 135, 3, 2, 2, 2, 651, 652, 8, 69, 1, 2, 652, 653, 5, 134, 68, 2, 653, 659, 3, 2, 2, 2, 654, 655, 12, 3, 2, 2, 655, 656, 9, 10, 2, 2, 656, 658, 5, 134, 68, 2, 657, 654, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 137, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 663, 8, 70, 1, 2, 663, 664, 5, 136, 69, 2, 664, 670, 3, 2, 2, 2, 665, 666, 12, 3, 2, 2, 666, 667, 9, 11, 2, 2, 667, 669, 5, 136, 69, 2, 668, 665, 3, 2, 2, 2, 669, 672, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 139, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 673, 674, 8, 71, 1, 2, 674, 675, 5, 138, 70, 2, 675, 682, 3, 2, 2, 2, 676, 677, 12, 3, 2, 2, 677, 678, 5, 142, 72, 2, 678, 679, 5, 148, 75, 2, 679, 681, 3, 2, 2, 2, 680, 676, 3, 2, 2, 2, 681, 684, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 141, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 685, 686, 9, 12, 2, 2, 686, 143, 3, 2, 2, 2, 687, 688, 8, 73, 1, 2, 688, 689, 5, 140, 71, 2, 689, 695, 3, 2, 2, 2, 690, 691, 12, 3, 2, 2, 691, 692, 9, 13, 2, 2, 692, 694, 5, 140, 71, 2, 693, 690, 3, 2, 2, 2, 694, 697, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 145, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 698, 699, 8, 74, 1, 2, 699, 700, 5, 144, 73, 2, 700, 706, 3, 2, 2, 2, 701, 702, 12, 3, 2, 2, 702, 703, 9, 14, 2, 2, 703, 705, 5, 144, 73, 2, 704, 701, 3, 2, 2, 2, 705, 708, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 147, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 709, 710, 8, 75, 1, 2, 710, 711, 5, 146, 74, 2, 711, 717, 3, 2, 2, 2, 712, 713, 12, 3, 2, 2, 713, 714, 7, 71, 2, 2, 714, 716, 5, 146, 74, 2, 715, 712, 3, 2, 2, 2, 716, 719, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 149, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 720, 721, 8, 76, 1, 2, 721, 722, 5, 148, 75, 2, 722, 728, 3, 2, 2, 2, 723, 724, 12, 3, 2, 2, 724, 725, 7, 73, 2, 2, 725, 727, 5, 148, 75, 2, 726, 723, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 151, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 8, 77, 1, 2, 732, 733, 5, 150, 76, 2, 733, 739, 3, 2, 2, 2, 734, 735, 12, 3, 2, 2, 735, 736, 7, 72, 2, 2, 736, 738, 5, 150, 76, 2, 737, 734, 3, 2, 2, 2, 738, 741, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 153, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 742, 743, 8, 78, 1, 2, 743, 744, 5, 152, 77, 2, 744, 750, 3, 2, 2, 2, 745, 746, 12, 3, 2, 2, 746, 747, 7, 56, 2, 2, 747, 749, 5, 152, 77, 2, 748, 745, 3, 2, 2, 2, 749, 752, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 155, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 753, 754, 8, 79, 1, 2, 754, 755, 5, 154, 78, 2, 755, 761, 3, 2, 2, 2, 756, 757, 12, 3, 2, 2, 757, 758, 7, 57, 2, 2, 758, 760, 5, 154, 78, 2, 759, 756, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 157, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 764, 772, 5, 156, 79, 2, 765, 766, 5, 156, 79, 2, 766, 767, 7, 39, 2, 2, 767, 768, 5, 158, 80, 2, 768, 769, 7, 40, 2, 2, 769, 770, 5, 158, 80, 2, 770, 772, 3, 2, 2, 2, 771, 764, 3, 2, 2, 2, 771, 765, 3, 2, 2, 2, 772, 159, 3, 2, 2, 2, 773, 779, 5, 158, 80, 2, 774, 775, 5, 108, 55, 2, 775, 776, 5, 162, 82, 2, 776, 777, 5, 160, 81, 2, 777, 779, 3, 2, 2, 2, 778, 773, 3, 2, 2, 2, 778, 774, 3, 2, 2, 2, 779, 161, 3, 2, 2, 2, 780, 781, 9, 15, 2, 2, 781, 163, 3, 2, 2, 2, 782, 787, 5, 160, 81, 2, 783, 784, 7, 37, 2, 2, 784, 786, 5, 160, 81, 2, 785, 783, 3, 2, 2, 2, 786, 789, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 165, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 790, 794, 5, 168, 85, 2, 791, 794, 5, 170, 86, 2, 792, 794, 5, 172, 87, 2, 793, 790, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 792, 3, 2, 2, 2, 794, 167, 3, 2, 2, 2, 795, 796, 5, 174, 88, 2, 796, 169, 3, 2, 2, 2, 797, 798, 5, 174, 88, 2, 798, 807, 7, 67, 2, 2, 799, 804, 5, 166, 84, 2, 800, 801, 7, 37, 2, 2, 801, 803, 5, 166, 84, 2, 802, 800, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 805, 3, 2, 2, 2, 805, 808, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 807, 799, 3, 2, 2, 2, 807, 808, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 810, 7, 69, 2, 2, 810, 171, 3, 2, 2, 2, 811, 812, 7, 33, 2, 2, 812, 813, 7, 41, 2, 2, 813, 814, 5, 174, 88, 2, 814, 815, 7, 42, 2, 2, 815, 173, 3, 2, 2, 2, 816, 817, 9, 16, 2, 2, 817, 175, 3, 2, 2, 2, 818, 819, 5, 160, 81, 2, 819, 820, 7, 32, 2, 2, 820, 821, 5, 166, 84, 2, 821, 177, 3, 2, 2, 2, 77, 179, 186, 193, 198, 206, 218, 230, 236, 243, 256, 263, 273, 285, 287, 295, 304, 310, 315, 326, 331, 342, 351, 361, 374, 379, 385, 389, 395, 401, 425, 439, 443, 451, 465, 473, 481, 485, 490, 493, 498, 501, 511, 514, 517, 527, 530, 533, 549, 558, 563, 580, 584, 586, 594, 608, 614, 621, 632, 649, 659, 670, 682, 695, 706, 717, 728, 739, 750, 761, 771, 778, 787, 793, 804, 807] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens index dfd693766..acbd51711 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens @@ -27,65 +27,66 @@ Constructor=26 New=27 True=28 False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 +Matches=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 'const'=5 'var'=6 'as'=7 @@ -111,48 +112,49 @@ FStringDoubleQuoteAtom=88 'new'=27 'true'=28 'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +'matches'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index b436a610f..6bee61c10 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -1,16 +1,23 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. -import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; -import KipperParserBase from "./base/KipperParserBase"; + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import KipperParserBase from "./base/KipperParserBase"; + import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; @@ -25,6 +32,7 @@ import * as Utils from "antlr4ts/misc/Utils"; import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; + export class KipperParser extends KipperParserBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -55,65 +63,66 @@ export class KipperParser extends KipperParserBase { public static readonly New = 27; public static readonly True = 28; public static readonly False = 29; - public static readonly Typeof = 30; - public static readonly Void = 31; - public static readonly Null = 32; - public static readonly Undefined = 33; - public static readonly Comma = 34; - public static readonly SemiColon = 35; - public static readonly QuestionMark = 36; - public static readonly Colon = 37; - public static readonly LeftParen = 38; - public static readonly RightParen = 39; - public static readonly LeftBracket = 40; - public static readonly RightBracket = 41; - public static readonly FStringExpEnd = 42; - public static readonly LeftBrace = 43; - public static readonly RightBrace = 44; - public static readonly Plus = 45; - public static readonly PlusPlus = 46; - public static readonly Minus = 47; - public static readonly MinusMinus = 48; - public static readonly Star = 49; - public static readonly Div = 50; - public static readonly Mod = 51; - public static readonly PowerTo = 52; - public static readonly AndAnd = 53; - public static readonly OrOr = 54; - public static readonly Not = 55; - public static readonly Assign = 56; - public static readonly PlusAssign = 57; - public static readonly MinusAssign = 58; - public static readonly StarAssign = 59; - public static readonly DivAssign = 60; - public static readonly ModAssign = 61; - public static readonly Equal = 62; - public static readonly NotEqual = 63; - public static readonly Less = 64; - public static readonly LessEqual = 65; - public static readonly Greater = 66; - public static readonly GreaterEqual = 67; - public static readonly BitwiseAnd = 68; - public static readonly BitwiseOr = 69; - public static readonly BitwiseXor = 70; - public static readonly BitwiseNot = 71; - public static readonly BitwiseZeroFillLeftShift = 72; - public static readonly BitwiseSignedRightShift = 73; - public static readonly BitwiseZeroFillRightShift = 74; - public static readonly Dot = 75; - public static readonly Identifier = 76; - public static readonly IntegerConstant = 77; - public static readonly SingleQuoteStringLiteral = 78; - public static readonly DoubleQuoteStringLiteral = 79; - public static readonly FloatingConstant = 80; - public static readonly Whitespace = 81; - public static readonly Newline = 82; - public static readonly FStringSingleQuoteStart = 83; - public static readonly FStringDoubleQuoteStart = 84; - public static readonly FStringSingleQuoteEnd = 85; - public static readonly FStringSingleQuoteAtom = 86; - public static readonly FStringDoubleQuoteEnd = 87; - public static readonly FStringDoubleQuoteAtom = 88; + public static readonly Matches = 30; + public static readonly Typeof = 31; + public static readonly Void = 32; + public static readonly Null = 33; + public static readonly Undefined = 34; + public static readonly Comma = 35; + public static readonly SemiColon = 36; + public static readonly QuestionMark = 37; + public static readonly Colon = 38; + public static readonly LeftParen = 39; + public static readonly RightParen = 40; + public static readonly LeftBracket = 41; + public static readonly RightBracket = 42; + public static readonly FStringExpEnd = 43; + public static readonly LeftBrace = 44; + public static readonly RightBrace = 45; + public static readonly Plus = 46; + public static readonly PlusPlus = 47; + public static readonly Minus = 48; + public static readonly MinusMinus = 49; + public static readonly Star = 50; + public static readonly Div = 51; + public static readonly Mod = 52; + public static readonly PowerTo = 53; + public static readonly AndAnd = 54; + public static readonly OrOr = 55; + public static readonly Not = 56; + public static readonly Assign = 57; + public static readonly PlusAssign = 58; + public static readonly MinusAssign = 59; + public static readonly StarAssign = 60; + public static readonly DivAssign = 61; + public static readonly ModAssign = 62; + public static readonly Equal = 63; + public static readonly NotEqual = 64; + public static readonly Less = 65; + public static readonly LessEqual = 66; + public static readonly Greater = 67; + public static readonly GreaterEqual = 68; + public static readonly BitwiseAnd = 69; + public static readonly BitwiseOr = 70; + public static readonly BitwiseXor = 71; + public static readonly BitwiseNot = 72; + public static readonly BitwiseZeroFillLeftShift = 73; + public static readonly BitwiseSignedRightShift = 74; + public static readonly BitwiseZeroFillRightShift = 75; + public static readonly Dot = 76; + public static readonly Identifier = 77; + public static readonly IntegerConstant = 78; + public static readonly SingleQuoteStringLiteral = 79; + public static readonly DoubleQuoteStringLiteral = 80; + public static readonly FloatingConstant = 81; + public static readonly Whitespace = 82; + public static readonly Newline = 83; + public static readonly FStringSingleQuoteStart = 84; + public static readonly FStringDoubleQuoteStart = 85; + public static readonly FStringSingleQuoteEnd = 86; + public static readonly FStringSingleQuoteAtom = 87; + public static readonly FStringDoubleQuoteEnd = 88; + public static readonly FStringDoubleQuoteAtom = 89; public static readonly RULE_compilationUnit = 0; public static readonly RULE_translationUnit = 1; public static readonly RULE_externalItem = 2; @@ -201,271 +210,69 @@ export class KipperParser extends KipperParserBase { public static readonly RULE_genericTypeSpecifierExpression = 84; public static readonly RULE_typeofTypeSpecifierExpression = 85; public static readonly RULE_typeSpecifierIdentifier = 86; + public static readonly RULE_matchesExpression = 87; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ - "compilationUnit", - "translationUnit", - "externalItem", - "blockItemList", - "blockItem", - "declaration", - "variableDeclaration", - "storageTypeSpecifier", - "initDeclarator", - "initializer", - "declarator", - "directDeclarator", - "functionDeclaration", - "parameterList", - "parameterDeclaration", - "interfaceDeclaration", - "interfaceMemberDeclaration", - "interfacePropertyDeclaration", - "interfaceMethodDeclaration", - "classDeclaration", - "classMemberDeclaration", - "classPropertyDeclaration", - "classMethodDeclaration", - "classConstructorDeclaration", - "statement", - "compoundStatement", - "expressionStatement", - "selectionStatement", - "ifStatement", - "switchStatement", - "switchLabeledStatement", - "iterationStatement", - "forLoopIterationStatement", - "whileLoopIterationStatement", - "doWhileLoopIterationStatement", - "jumpStatement", - "returnStatement", - "primaryExpression", - "lambdaPrimaryExpression", - "tangledPrimaryExpression", - "boolPrimaryExpression", - "identifierPrimaryExpression", - "identifier", - "identifierOrStringPrimaryExpression", - "stringPrimaryExpression", - "fStringPrimaryExpression", - "fStringSingleQuoteAtom", - "fStringDoubleQuoteAtom", - "numberPrimaryExpression", - "arrayPrimaryExpression", - "objectPrimaryExpression", - "objectProperty", - "voidOrNullOrUndefinedPrimaryExpression", - "computedPrimaryExpression", - "argumentExpressionList", - "dotNotation", - "bracketNotation", - "sliceNotation", - "postfixExpression", - "incrementOrDecrementPostfixExpression", - "typeofExpression", - "unaryExpression", - "incrementOrDecrementUnaryExpression", - "operatorModifiedUnaryExpression", - "incrementOrDecrementOperator", - "unaryOperator", - "castOrConvertExpression", - "multiplicativeExpression", - "additiveExpression", - "bitwiseShiftExpression", - "bitwiseShiftOperators", - "relationalExpression", - "equalityExpression", - "bitwiseAndExpression", - "bitwiseXorExpression", - "bitwiseOrExpression", - "logicalAndExpression", - "logicalOrExpression", - "conditionalExpression", - "assignmentExpression", - "assignmentOperator", - "expression", - "typeSpecifierExpression", - "identifierTypeSpecifierExpression", - "genericTypeSpecifierExpression", - "typeofTypeSpecifierExpression", - "typeSpecifierIdentifier", + "compilationUnit", "translationUnit", "externalItem", "blockItemList", + "blockItem", "declaration", "variableDeclaration", "storageTypeSpecifier", + "initDeclarator", "initializer", "declarator", "directDeclarator", "functionDeclaration", + "parameterList", "parameterDeclaration", "interfaceDeclaration", "interfaceMemberDeclaration", + "interfacePropertyDeclaration", "interfaceMethodDeclaration", "classDeclaration", + "classMemberDeclaration", "classPropertyDeclaration", "classMethodDeclaration", + "classConstructorDeclaration", "statement", "compoundStatement", "expressionStatement", + "selectionStatement", "ifStatement", "switchStatement", "switchLabeledStatement", + "iterationStatement", "forLoopIterationStatement", "whileLoopIterationStatement", + "doWhileLoopIterationStatement", "jumpStatement", "returnStatement", "primaryExpression", + "lambdaPrimaryExpression", "tangledPrimaryExpression", "boolPrimaryExpression", + "identifierPrimaryExpression", "identifier", "identifierOrStringPrimaryExpression", + "stringPrimaryExpression", "fStringPrimaryExpression", "fStringSingleQuoteAtom", + "fStringDoubleQuoteAtom", "numberPrimaryExpression", "arrayPrimaryExpression", + "objectPrimaryExpression", "objectProperty", "voidOrNullOrUndefinedPrimaryExpression", + "computedPrimaryExpression", "argumentExpressionList", "dotNotation", + "bracketNotation", "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", + "typeofExpression", "unaryExpression", "incrementOrDecrementUnaryExpression", + "operatorModifiedUnaryExpression", "incrementOrDecrementOperator", "unaryOperator", + "castOrConvertExpression", "multiplicativeExpression", "additiveExpression", + "bitwiseShiftExpression", "bitwiseShiftOperators", "relationalExpression", + "equalityExpression", "bitwiseAndExpression", "bitwiseXorExpression", + "bitwiseOrExpression", "logicalAndExpression", "logicalOrExpression", + "conditionalExpression", "assignmentExpression", "assignmentOperator", + "expression", "typeSpecifierExpression", "identifierTypeSpecifierExpression", + "genericTypeSpecifierExpression", "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", + "matchesExpression", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, - undefined, - undefined, - undefined, - undefined, - "'const'", - "'var'", - "'as'", - "'...'", - "'switch'", - "'case'", - "'default'", - "'break'", - "'continue'", - "'do'", - "'while'", - "'if'", - "'else'", - "'for'", - "'enum'", - "'def'", - "'return'", - "'call'", - "'->'", - "'class'", - "'interface'", - "'constructor'", - "'new'", - "'true'", - "'false'", - "'typeof'", - "'void'", - "'null'", - "'undefined'", - "','", - "';'", - "'?'", - "':'", - "'('", - "')'", - "'['", - "']'", - undefined, - "'{'", - "'}'", - "'+'", - "'++'", - "'-'", - "'--'", - "'*'", - "'/'", - "'%'", - "'**'", - "'&&'", - "'||'", - "'!'", - "'='", - "'+='", - "'-='", - "'*='", - "'/='", - "'%='", - "'=='", - "'!='", - "'<'", - "'<='", - "'>'", - "'>='", - "'&'", - "'|'", - "'^'", - "'~'", - "'<<'", - "'>>'", - "'>>>'", - "'.'", + undefined, undefined, undefined, undefined, undefined, "'const'", "'var'", + "'as'", "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", + "'do'", "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", + "'call'", "'->'", "'class'", "'interface'", "'constructor'", "'new'", + "'true'", "'false'", "'matches'", "'typeof'", "'void'", "'null'", "'undefined'", + "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", + "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", + "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", + "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", + "'>>'", "'>>>'", "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, - "FStringExpStart", - "BlockComment", - "LineComment", - "Pragma", - "Const", - "Var", - "As", - "Spread", - "Switch", - "Case", - "Default", - "Break", - "Continue", - "Do", - "While", - "If", - "Else", - "For", - "Enum", - "DefFunc", - "Return", - "CallFunc", - "RetIndicator", - "Class", - "Interface", - "Constructor", - "New", - "True", - "False", - "Typeof", - "Void", - "Null", - "Undefined", - "Comma", - "SemiColon", - "QuestionMark", - "Colon", - "LeftParen", - "RightParen", - "LeftBracket", - "RightBracket", - "FStringExpEnd", - "LeftBrace", - "RightBrace", - "Plus", - "PlusPlus", - "Minus", - "MinusMinus", - "Star", - "Div", - "Mod", - "PowerTo", - "AndAnd", - "OrOr", - "Not", - "Assign", - "PlusAssign", - "MinusAssign", - "StarAssign", - "DivAssign", - "ModAssign", - "Equal", - "NotEqual", - "Less", - "LessEqual", - "Greater", - "GreaterEqual", - "BitwiseAnd", - "BitwiseOr", - "BitwiseXor", - "BitwiseNot", - "BitwiseZeroFillLeftShift", - "BitwiseSignedRightShift", - "BitwiseZeroFillRightShift", - "Dot", - "Identifier", - "IntegerConstant", - "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", - "FloatingConstant", - "Whitespace", - "Newline", - "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", - "FStringSingleQuoteEnd", - "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", - "FStringDoubleQuoteAtom", + undefined, "FStringExpStart", "BlockComment", "LineComment", "Pragma", + "Const", "Var", "As", "Spread", "Switch", "Case", "Default", "Break", + "Continue", "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", + "CallFunc", "RetIndicator", "Class", "Interface", "Constructor", "New", + "True", "False", "Matches", "Typeof", "Void", "Null", "Undefined", "Comma", + "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", "PlusPlus", + "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", + "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", + "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", "GreaterEqual", + "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", "Dot", "Identifier", + "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", + "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( - KipperParser._LITERAL_NAMES, - KipperParser._SYMBOLIC_NAMES, - [], - ); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperParser._LITERAL_NAMES, KipperParser._SYMBOLIC_NAMES, []); // @Override // @NotNull @@ -475,19 +282,13 @@ export class KipperParser extends KipperParserBase { // tslint:enable:no-trailing-whitespace // @Override - public get grammarFileName(): string { - return "KipperParser.g4"; - } + public get grammarFileName(): string { return "KipperParser.g4"; } // @Override - public get ruleNames(): string[] { - return KipperParser.ruleNames; - } + public get ruleNames(): string[] { return KipperParser.ruleNames; } // @Override - public get serializedATN(): string { - return KipperParser._serializedATN; - } + public get serializedATN(): string { return KipperParser._serializedATN; } protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { return new FailedPredicateException(this, predicate, message); @@ -504,20 +305,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 175; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { - case 1: - { - this.state = 174; - this.translationUnit(); - } - break; + this.state = 177; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 0, this._ctx) ) { + case 1: + { + this.state = 176; + this.translationUnit(); } - this.state = 177; - this.match(KipperParser.EOF); + break; + } + this.state = 179; + this.match(KipperParser.EOF); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -525,7 +327,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -538,28 +341,29 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 180; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 179; - this.externalItem(); - } - } - break; - default: - throw new NoViableAltException(this); + this.state = 182; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 181; + this.externalItem(); } - this.state = 182; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 184; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -567,7 +371,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -580,10 +385,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 184; - this.blockItemList(); + this.state = 186; + this.blockItemList(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -591,7 +397,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -604,28 +411,29 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 187; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 186; - this.blockItem(); - } - } - break; - default: - throw new NoViableAltException(this); + this.state = 189; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 188; + this.blockItem(); } - this.state = 189; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 191; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -633,7 +441,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -645,32 +454,33 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 194; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { - case 1: - { - this.state = 191; - this.statement(); - } - break; + this.state = 196; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) { + case 1: + { + this.state = 193; + this.statement(); + } + break; - case 2: - { - this.state = 192; - this.declaration(); - } - break; + case 2: + { + this.state = 194; + this.declaration(); + } + break; - case 3: - { - this.state = 193; - this.match(KipperParser.SemiColon); - } - break; + case 3: + { + this.state = 195; + this.match(KipperParser.SemiColon); } + break; + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -678,7 +488,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -688,44 +499,45 @@ export class KipperParser extends KipperParserBase { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 202; + this.state = 204; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - this.enterOuterAlt(_localctx, 1); - { - this.state = 196; - this.variableDeclaration(); - this.state = 197; - this.match(KipperParser.SemiColon); - } - break; - case KipperParser.DefFunc: - this.enterOuterAlt(_localctx, 2); - { - this.state = 199; - this.functionDeclaration(); - } - break; - case KipperParser.Interface: - this.enterOuterAlt(_localctx, 3); - { - this.state = 200; - this.interfaceDeclaration(); - } - break; - case KipperParser.Class: - this.enterOuterAlt(_localctx, 4); - { - this.state = 201; - this.classDeclaration(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Const: + case KipperParser.Var: + this.enterOuterAlt(_localctx, 1); + { + this.state = 198; + this.variableDeclaration(); + this.state = 199; + this.match(KipperParser.SemiColon); + } + break; + case KipperParser.DefFunc: + this.enterOuterAlt(_localctx, 2); + { + this.state = 201; + this.functionDeclaration(); + } + break; + case KipperParser.Interface: + this.enterOuterAlt(_localctx, 3); + { + this.state = 202; + this.interfaceDeclaration(); + } + break; + case KipperParser.Class: + this.enterOuterAlt(_localctx, 4); + { + this.state = 203; + this.classDeclaration(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -733,7 +545,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -745,12 +558,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 204; - this.storageTypeSpecifier(); - this.state = 205; - this.initDeclarator(); + this.state = 206; + this.storageTypeSpecifier(); + this.state = 207; + this.initDeclarator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -758,7 +572,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -771,20 +586,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 207; - _la = this._input.LA(1); - if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 209; + _la = this._input.LA(1); + if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -792,7 +608,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -805,25 +622,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 209; - this.declarator(); - this.state = 210; - this.match(KipperParser.Colon); - this.state = 211; - this.typeSpecifierExpression(); + this.state = 211; + this.declarator(); + this.state = 212; + this.match(KipperParser.Colon); + this.state = 213; + this.typeSpecifierExpression(); + this.state = 216; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Assign) { + { this.state = 214; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Assign) { - { - this.state = 212; - this.match(KipperParser.Assign); - this.state = 213; - this.initializer(); - } + this.match(KipperParser.Assign); + this.state = 215; + this.initializer(); } } - } catch (re) { + + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -831,7 +650,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -843,10 +663,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 216; - this.assignmentExpression(); + this.state = 218; + this.assignmentExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -854,7 +675,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -866,10 +688,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 218; - this.directDeclarator(); + this.state = 220; + this.directDeclarator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -877,7 +700,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -889,10 +713,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 220; - this.match(KipperParser.Identifier); + this.state = 222; + this.match(KipperParser.Identifier); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -900,7 +725,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -913,40 +739,41 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 222; - this.match(KipperParser.DefFunc); - this.state = 223; - this.declarator(); - this.state = 224; - this.match(KipperParser.LeftParen); - this.state = 226; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 225; - this.parameterList(); - } + this.state = 224; + this.match(KipperParser.DefFunc); + this.state = 225; + this.declarator(); + this.state = 226; + this.match(KipperParser.LeftParen); + this.state = 228; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 227; + this.parameterList(); } + } - this.state = 228; - this.match(KipperParser.RightParen); - this.state = 229; - this.match(KipperParser.RetIndicator); - this.state = 230; - this.typeSpecifierExpression(); - this.state = 232; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { - case 1: - { - this.state = 231; - this.compoundStatement(); - } - break; + this.state = 230; + this.match(KipperParser.RightParen); + this.state = 231; + this.match(KipperParser.RetIndicator); + this.state = 232; + this.typeSpecifierExpression(); + this.state = 234; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { + case 1: + { + this.state = 233; + this.compoundStatement(); } + break; } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -954,7 +781,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -967,26 +795,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 234; + this.state = 236; + this.parameterDeclaration(); + this.state = 241; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 237; + this.match(KipperParser.Comma); + this.state = 238; this.parameterDeclaration(); - this.state = 239; + } + } + this.state = 243; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 235; - this.match(KipperParser.Comma); - this.state = 236; - this.parameterDeclaration(); - } - } - this.state = 241; - this._errHandler.sync(this); - _la = this._input.LA(1); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -994,7 +823,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1006,14 +836,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 242; - this.declarator(); - this.state = 243; - this.match(KipperParser.Colon); - this.state = 244; - this.typeSpecifierExpression(); + this.state = 244; + this.declarator(); + this.state = 245; + this.match(KipperParser.Colon); + this.state = 246; + this.typeSpecifierExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1021,7 +852,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1034,30 +866,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 246; - this.match(KipperParser.Interface); - this.state = 247; - this.declarator(); - this.state = 248; - this.match(KipperParser.LeftBrace); - this.state = 252; + this.state = 248; + this.match(KipperParser.Interface); + this.state = 249; + this.declarator(); + this.state = 250; + this.match(KipperParser.LeftBrace); + this.state = 254; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Identifier) { + { + { + this.state = 251; + this.interfaceMemberDeclaration(); + } + } + this.state = 256; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Identifier) { - { - { - this.state = 249; - this.interfaceMemberDeclaration(); - } - } - this.state = 254; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 255; - this.match(KipperParser.RightBrace); } - } catch (re) { + this.state = 257; + this.match(KipperParser.RightBrace); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1065,7 +898,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1075,26 +909,27 @@ export class KipperParser extends KipperParserBase { let _localctx: InterfaceMemberDeclarationContext = new InterfaceMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 32, KipperParser.RULE_interfaceMemberDeclaration); try { - this.state = 259; + this.state = 261; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 10, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 257; - this.interfacePropertyDeclaration(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 259; + this.interfacePropertyDeclaration(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 258; - this.interfaceMethodDeclaration(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 260; + this.interfaceMethodDeclaration(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1102,7 +937,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1114,16 +950,17 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 261; - this.declarator(); - this.state = 262; - this.match(KipperParser.Colon); - this.state = 263; - this.typeSpecifierExpression(); - this.state = 264; - this.match(KipperParser.SemiColon); + this.state = 263; + this.declarator(); + this.state = 264; + this.match(KipperParser.Colon); + this.state = 265; + this.typeSpecifierExpression(); + this.state = 266; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1131,7 +968,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1144,30 +982,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 266; - this.declarator(); - this.state = 267; - this.match(KipperParser.LeftParen); - this.state = 269; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 268; - this.parameterList(); - } + this.state = 268; + this.declarator(); + this.state = 269; + this.match(KipperParser.LeftParen); + this.state = 271; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 270; + this.parameterList(); } + } - this.state = 271; - this.match(KipperParser.RightParen); - this.state = 272; - this.match(KipperParser.Colon); - this.state = 273; - this.typeSpecifierExpression(); - this.state = 274; - this.match(KipperParser.SemiColon); + this.state = 273; + this.match(KipperParser.RightParen); + this.state = 274; + this.match(KipperParser.Colon); + this.state = 275; + this.typeSpecifierExpression(); + this.state = 276; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1175,7 +1014,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1188,45 +1028,46 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 276; - this.match(KipperParser.Class); - this.state = 277; - this.declarator(); - this.state = 278; - this.match(KipperParser.LeftBrace); + this.state = 278; + this.match(KipperParser.Class); + this.state = 279; + this.declarator(); + this.state = 280; + this.match(KipperParser.LeftBrace); + this.state = 285; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { + { this.state = 283; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { + switch (this._input.LA(1)) { + case KipperParser.Constructor: + case KipperParser.Identifier: { - this.state = 281; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Constructor: - case KipperParser.Identifier: - { - this.state = 279; - this.classMemberDeclaration(); - } - break; - case KipperParser.SemiColon: - { - this.state = 280; - this.match(KipperParser.SemiColon); - } - break; - default: - throw new NoViableAltException(this); - } + this.state = 281; + this.classMemberDeclaration(); } - this.state = 285; - this._errHandler.sync(this); - _la = this._input.LA(1); + break; + case KipperParser.SemiColon: + { + this.state = 282; + this.match(KipperParser.SemiColon); + } + break; + default: + throw new NoViableAltException(this); + } } - this.state = 286; - this.match(KipperParser.RightBrace); + this.state = 287; + this._errHandler.sync(this); + _la = this._input.LA(1); } - } catch (re) { + this.state = 288; + this.match(KipperParser.RightBrace); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1234,7 +1075,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1244,34 +1086,35 @@ export class KipperParser extends KipperParserBase { let _localctx: ClassMemberDeclarationContext = new ClassMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 40, KipperParser.RULE_classMemberDeclaration); try { - this.state = 291; + this.state = 293; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 14, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 288; - this.classPropertyDeclaration(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 14, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 290; + this.classPropertyDeclaration(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 289; - this.classMethodDeclaration(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 291; + this.classMethodDeclaration(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 290; - this.classConstructorDeclaration(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 292; + this.classConstructorDeclaration(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1279,7 +1122,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1291,14 +1135,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 293; - this.declarator(); - this.state = 294; - this.match(KipperParser.Colon); - this.state = 295; - this.typeSpecifierExpression(); + this.state = 295; + this.declarator(); + this.state = 296; + this.match(KipperParser.Colon); + this.state = 297; + this.typeSpecifierExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1306,7 +1151,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1319,38 +1165,39 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 297; - this.declarator(); - this.state = 298; - this.match(KipperParser.LeftParen); - this.state = 300; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 299; - this.parameterList(); - } + this.state = 299; + this.declarator(); + this.state = 300; + this.match(KipperParser.LeftParen); + this.state = 302; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 301; + this.parameterList(); } + } - this.state = 302; - this.match(KipperParser.RightParen); - this.state = 303; - this.match(KipperParser.Colon); - this.state = 304; - this.typeSpecifierExpression(); - this.state = 306; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 16, this._ctx)) { - case 1: - { - this.state = 305; - this.compoundStatement(); - } - break; + this.state = 304; + this.match(KipperParser.RightParen); + this.state = 305; + this.match(KipperParser.Colon); + this.state = 306; + this.typeSpecifierExpression(); + this.state = 308; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 16, this._ctx) ) { + case 1: + { + this.state = 307; + this.compoundStatement(); } + break; } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1358,7 +1205,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1371,26 +1219,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 308; - this.match(KipperParser.Constructor); - this.state = 309; - this.match(KipperParser.LeftParen); - this.state = 311; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 310; - this.parameterList(); - } + this.state = 310; + this.match(KipperParser.Constructor); + this.state = 311; + this.match(KipperParser.LeftParen); + this.state = 313; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 312; + this.parameterList(); } + } - this.state = 313; - this.match(KipperParser.RightParen); - this.state = 314; - this.compoundStatement(); + this.state = 315; + this.match(KipperParser.RightParen); + this.state = 316; + this.compoundStatement(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1398,7 +1247,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1408,58 +1258,59 @@ export class KipperParser extends KipperParserBase { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 48, KipperParser.RULE_statement); try { - this.state = 322; + this.state = 324; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 18, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 316; - this.expressionStatement(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 18, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 318; + this.expressionStatement(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 317; - this.selectionStatement(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 319; + this.selectionStatement(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 318; - this.iterationStatement(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 320; + this.iterationStatement(); + } + break; - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 319; - this.jumpStatement(); - } - break; + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 321; + this.jumpStatement(); + } + break; - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 320; - this.returnStatement(); - } - break; + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 322; + this.returnStatement(); + } + break; - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 321; - this.compoundStatement(); - } - break; + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 323; + this.compoundStatement(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1467,7 +1318,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1479,26 +1331,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 324; - if (!this.notInsideExpressionStatement()) { - throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); - } - this.state = 325; - this.match(KipperParser.LeftBrace); - this.state = 327; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { - case 1: - { - this.state = 326; - this.blockItemList(); - } - break; + this.state = 326; + if (!(this.notInsideExpressionStatement())) { + throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); + } + this.state = 327; + this.match(KipperParser.LeftBrace); + this.state = 329; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 19, this._ctx) ) { + case 1: + { + this.state = 328; + this.blockItemList(); } - this.state = 329; - this.match(KipperParser.RightBrace); + break; + } + this.state = 331; + this.match(KipperParser.RightBrace); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1506,7 +1359,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1518,14 +1372,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.enterExpressionStatement(); - this.state = 332; - this.expression(); - this.state = 333; - this.match(KipperParser.SemiColon); - this.exitExpressionStatement(); + this.enterExpressionStatement() + this.state = 334; + this.expression(); + this.state = 335; + this.match(KipperParser.SemiColon); + this.exitExpressionStatement() } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1533,7 +1388,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1543,27 +1399,28 @@ export class KipperParser extends KipperParserBase { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 54, KipperParser.RULE_selectionStatement); try { - this.state = 338; + this.state = 340; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.If: - this.enterOuterAlt(_localctx, 1); - { - this.state = 336; - this.ifStatement(); - } - break; - case KipperParser.Switch: - this.enterOuterAlt(_localctx, 2); - { - this.state = 337; - this.switchStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.If: + this.enterOuterAlt(_localctx, 1); + { + this.state = 338; + this.ifStatement(); + } + break; + case KipperParser.Switch: + this.enterOuterAlt(_localctx, 2); + { + this.state = 339; + this.switchStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1571,7 +1428,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1583,30 +1441,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 340; - this.match(KipperParser.If); - this.state = 341; - this.match(KipperParser.LeftParen); - this.state = 342; - this.expression(); - this.state = 343; - this.match(KipperParser.RightParen); - this.state = 344; - this.statement(); + this.state = 342; + this.match(KipperParser.If); + this.state = 343; + this.match(KipperParser.LeftParen); + this.state = 344; + this.expression(); + this.state = 345; + this.match(KipperParser.RightParen); + this.state = 346; + this.statement(); + this.state = 349; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { + case 1: + { this.state = 347; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { - case 1: - { - this.state = 345; - this.match(KipperParser.Else); - this.state = 346; - this.statement(); - } - break; + this.match(KipperParser.Else); + this.state = 348; + this.statement(); } + break; + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1614,7 +1473,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1627,34 +1487,35 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 349; - this.match(KipperParser.Switch); - this.state = 350; - this.match(KipperParser.LeftParen); - this.state = 351; - this.expression(); - this.state = 352; - this.match(KipperParser.RightParen); - this.state = 353; - this.match(KipperParser.LeftBrace); - this.state = 357; + this.state = 351; + this.match(KipperParser.Switch); + this.state = 352; + this.match(KipperParser.LeftParen); + this.state = 353; + this.expression(); + this.state = 354; + this.match(KipperParser.RightParen); + this.state = 355; + this.match(KipperParser.LeftBrace); + this.state = 359; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Case || _la === KipperParser.Default) { + { + { + this.state = 356; + this.switchLabeledStatement(); + } + } + this.state = 361; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Case || _la === KipperParser.Default) { - { - { - this.state = 354; - this.switchLabeledStatement(); - } - } - this.state = 359; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 360; - this.match(KipperParser.RightBrace); } - } catch (re) { + this.state = 362; + this.match(KipperParser.RightBrace); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1662,7 +1523,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1672,37 +1534,38 @@ export class KipperParser extends KipperParserBase { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 60, KipperParser.RULE_switchLabeledStatement); try { - this.state = 370; + this.state = 372; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Case: - this.enterOuterAlt(_localctx, 1); - { - this.state = 362; - this.match(KipperParser.Case); - this.state = 363; - this.expression(); - this.state = 364; - this.match(KipperParser.Colon); - this.state = 365; - this.statement(); - } - break; - case KipperParser.Default: - this.enterOuterAlt(_localctx, 2); - { - this.state = 367; - this.match(KipperParser.Default); - this.state = 368; - this.match(KipperParser.Colon); - this.state = 369; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Case: + this.enterOuterAlt(_localctx, 1); + { + this.state = 364; + this.match(KipperParser.Case); + this.state = 365; + this.expression(); + this.state = 366; + this.match(KipperParser.Colon); + this.state = 367; + this.statement(); + } + break; + case KipperParser.Default: + this.enterOuterAlt(_localctx, 2); + { + this.state = 369; + this.match(KipperParser.Default); + this.state = 370; + this.match(KipperParser.Colon); + this.state = 371; + this.statement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1710,7 +1573,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1720,34 +1584,35 @@ export class KipperParser extends KipperParserBase { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 62, KipperParser.RULE_iterationStatement); try { - this.state = 375; + this.state = 377; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.For: - this.enterOuterAlt(_localctx, 1); - { - this.state = 372; - this.forLoopIterationStatement(); - } - break; - case KipperParser.While: - this.enterOuterAlt(_localctx, 2); - { - this.state = 373; - this.whileLoopIterationStatement(); - } - break; - case KipperParser.Do: - this.enterOuterAlt(_localctx, 3); - { - this.state = 374; - this.doWhileLoopIterationStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.For: + this.enterOuterAlt(_localctx, 1); + { + this.state = 374; + this.forLoopIterationStatement(); + } + break; + case KipperParser.While: + this.enterOuterAlt(_localctx, 2); + { + this.state = 375; + this.whileLoopIterationStatement(); + } + break; + case KipperParser.Do: + this.enterOuterAlt(_localctx, 3); + { + this.state = 376; + this.doWhileLoopIterationStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1755,7 +1620,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1768,191 +1634,94 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 377; - this.match(KipperParser.For); - this.state = 378; - this.match(KipperParser.LeftParen); - this.state = 385; + this.state = 379; + this.match(KipperParser.For); + this.state = 380; + this.match(KipperParser.LeftParen); + this.state = 387; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.CallFunc) | (1 << KipperParser.New) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Typeof))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)) | (1 << (KipperParser.LeftParen - 32)) | (1 << (KipperParser.LeftBracket - 32)) | (1 << (KipperParser.LeftBrace - 32)) | (1 << (KipperParser.Plus - 32)) | (1 << (KipperParser.PlusPlus - 32)) | (1 << (KipperParser.Minus - 32)) | (1 << (KipperParser.MinusMinus - 32)) | (1 << (KipperParser.Not - 32)))) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & ((1 << (KipperParser.BitwiseNot - 72)) | (1 << (KipperParser.Identifier - 72)) | (1 << (KipperParser.IntegerConstant - 72)) | (1 << (KipperParser.SingleQuoteStringLiteral - 72)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 72)) | (1 << (KipperParser.FloatingConstant - 72)) | (1 << (KipperParser.FStringSingleQuoteStart - 72)) | (1 << (KipperParser.FStringDoubleQuoteStart - 72)))) !== 0)) { + { + this.state = 383; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la & ~0x1f) === 0 && - ((1 << _la) & - ((1 << KipperParser.Const) | - (1 << KipperParser.Var) | - (1 << KipperParser.CallFunc) | - (1 << KipperParser.New) | - (1 << KipperParser.True) | - (1 << KipperParser.False) | - (1 << KipperParser.Typeof) | - (1 << KipperParser.Void))) !== - 0) || - (((_la - 32) & ~0x1f) === 0 && - ((1 << (_la - 32)) & - ((1 << (KipperParser.Null - 32)) | - (1 << (KipperParser.Undefined - 32)) | - (1 << (KipperParser.LeftParen - 32)) | - (1 << (KipperParser.LeftBracket - 32)) | - (1 << (KipperParser.LeftBrace - 32)) | - (1 << (KipperParser.Plus - 32)) | - (1 << (KipperParser.PlusPlus - 32)) | - (1 << (KipperParser.Minus - 32)) | - (1 << (KipperParser.MinusMinus - 32)) | - (1 << (KipperParser.Not - 32)))) !== - 0) || - (((_la - 71) & ~0x1f) === 0 && - ((1 << (_la - 71)) & - ((1 << (KipperParser.BitwiseNot - 71)) | - (1 << (KipperParser.Identifier - 71)) | - (1 << (KipperParser.IntegerConstant - 71)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | - (1 << (KipperParser.FloatingConstant - 71)) | - (1 << (KipperParser.FStringSingleQuoteStart - 71)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== - 0) - ) { + switch (this._input.LA(1)) { + case KipperParser.Const: + case KipperParser.Var: { - this.state = 381; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - { - this.state = 379; - this.variableDeclaration(); - } - break; - case KipperParser.CallFunc: - case KipperParser.New: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Typeof: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.BitwiseNot: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - this.state = 380; - this.expression(); - } - break; - default: - throw new NoViableAltException(this); - } - _localctx._forDeclaration = true; + this.state = 381; + this.variableDeclaration(); } - } - - this.state = 387; - this.match(KipperParser.SemiColon); - this.state = 391; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { + break; + case KipperParser.CallFunc: + case KipperParser.New: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Typeof: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.BitwiseNot: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - this.state = 388; - this.expression(); - _localctx._forCondition = true; + this.state = 382; + this.expression(); } + break; + default: + throw new NoViableAltException(this); } + _localctx._forDeclaration = true + } + } - this.state = 393; - this.match(KipperParser.SemiColon); - this.state = 397; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 394; - this.expression(); - _localctx._forIterationExp = true; - } + this.state = 389; + this.match(KipperParser.SemiColon); + this.state = 393; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 390; + this.expression(); + _localctx._forCondition = true } + } - this.state = 399; - this.match(KipperParser.RightParen); - this.state = 400; - this.statement(); + this.state = 395; + this.match(KipperParser.SemiColon); + this.state = 399; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 396; + this.expression(); + _localctx._forIterationExp = true + } + } + + this.state = 401; + this.match(KipperParser.RightParen); + this.state = 402; + this.statement(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1960,7 +1729,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -1972,18 +1742,19 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 402; - this.match(KipperParser.While); - this.state = 403; - this.match(KipperParser.LeftParen); - this.state = 404; - this.expression(); - this.state = 405; - this.match(KipperParser.RightParen); - this.state = 406; - this.statement(); - } - } catch (re) { + this.state = 404; + this.match(KipperParser.While); + this.state = 405; + this.match(KipperParser.LeftParen); + this.state = 406; + this.expression(); + this.state = 407; + this.match(KipperParser.RightParen); + this.state = 408; + this.statement(); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1991,37 +1762,36 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public doWhileLoopIterationStatement(): DoWhileLoopIterationStatementContext { - let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext( - this._ctx, - this.state, - ); + let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 68, KipperParser.RULE_doWhileLoopIterationStatement); try { this.enterOuterAlt(_localctx, 1); { - this.state = 408; - this.match(KipperParser.Do); - this.state = 409; - this.statement(); - this.state = 410; - this.match(KipperParser.While); - this.state = 411; - this.match(KipperParser.LeftParen); - this.state = 412; - this.expression(); - this.state = 413; - this.match(KipperParser.RightParen); - this.state = 414; - this.match(KipperParser.SemiColon); - } - } catch (re) { + this.state = 410; + this.match(KipperParser.Do); + this.state = 411; + this.statement(); + this.state = 412; + this.match(KipperParser.While); + this.state = 413; + this.match(KipperParser.LeftParen); + this.state = 414; + this.expression(); + this.state = 415; + this.match(KipperParser.RightParen); + this.state = 416; + this.match(KipperParser.SemiColon); + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2029,7 +1799,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2042,22 +1813,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 416; - _la = this._input.LA(1); - if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 418; + _la = this._input.LA(1); + if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - this.state = 417; - this.match(KipperParser.SemiColon); + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 419; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2065,7 +1837,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2078,53 +1851,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 419; - this.match(KipperParser.Return); - this.state = 421; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 420; - this.expression(); - } + this.state = 421; + this.match(KipperParser.Return); + this.state = 423; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 422; + this.expression(); } + } - this.state = 423; - this.match(KipperParser.SemiColon); + this.state = 425; + this.match(KipperParser.SemiColon); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2132,7 +1875,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2140,92 +1884,93 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public primaryExpression(): PrimaryExpressionContext { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 74, KipperParser.RULE_primaryExpression); - try { - this.state = 435; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 30, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 425; - this.tangledPrimaryExpression(); - } - break; + this.enterRule(_localctx, 74, KipperParser.RULE_primaryExpression); + try { + this.state = 437; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 30, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 427; + this.tangledPrimaryExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 426; - this.lambdaPrimaryExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 428; + this.lambdaPrimaryExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 427; - this.arrayPrimaryExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 429; + this.arrayPrimaryExpression(); + } + break; - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 428; - this.objectPrimaryExpression(); - } - break; + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 430; + this.objectPrimaryExpression(); + } + break; - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 429; - this.boolPrimaryExpression(); - } - break; + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 431; + this.boolPrimaryExpression(); + } + break; - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 430; - this.identifierPrimaryExpression(); - } - break; + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 432; + this.identifierPrimaryExpression(); + } + break; - case 7: - this.enterOuterAlt(_localctx, 7); - { - this.state = 431; - this.stringPrimaryExpression(); - } - break; + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 433; + this.stringPrimaryExpression(); + } + break; - case 8: - this.enterOuterAlt(_localctx, 8); - { - this.state = 432; - this.fStringPrimaryExpression(); - } - break; + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 434; + this.fStringPrimaryExpression(); + } + break; - case 9: - this.enterOuterAlt(_localctx, 9); - { - this.state = 433; - this.numberPrimaryExpression(); - } - break; + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 435; + this.numberPrimaryExpression(); + } + break; - case 10: - this.enterOuterAlt(_localctx, 10); - { - this.state = 434; - this.voidOrNullOrUndefinedPrimaryExpression(); - } - break; + case 10: + this.enterOuterAlt(_localctx, 10); + { + this.state = 436; + this.voidOrNullOrUndefinedPrimaryExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2233,7 +1978,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2246,45 +1992,46 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 437; - this.match(KipperParser.LeftParen); - this.state = 439; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 438; - this.parameterList(); - } + this.state = 439; + this.match(KipperParser.LeftParen); + this.state = 441; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 440; + this.parameterList(); } + } - this.state = 441; - this.match(KipperParser.RightParen); - this.state = 442; - this.match(KipperParser.Colon); - this.state = 443; - this.typeSpecifierExpression(); - this.state = 444; - this.match(KipperParser.RetIndicator); + this.state = 443; + this.match(KipperParser.RightParen); + this.state = 444; + this.match(KipperParser.Colon); + this.state = 445; + this.typeSpecifierExpression(); + this.state = 446; + this.match(KipperParser.RetIndicator); + this.state = 449; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 32, this._ctx) ) { + case 1: + { this.state = 447; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { - case 1: - { - this.state = 445; - this.expression(); - } - break; + this.expression(); + } + break; - case 2: - { - this.state = 446; - this.compoundStatement(); - } - break; + case 2: + { + this.state = 448; + this.compoundStatement(); } + break; } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2292,7 +2039,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2304,14 +2052,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 449; - this.match(KipperParser.LeftParen); - this.state = 450; - this.expression(); - this.state = 451; - this.match(KipperParser.RightParen); + this.state = 451; + this.match(KipperParser.LeftParen); + this.state = 452; + this.expression(); + this.state = 453; + this.match(KipperParser.RightParen); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2319,7 +2068,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2332,20 +2082,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 453; - _la = this._input.LA(1); - if (!(_la === KipperParser.True || _la === KipperParser.False)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 455; + _la = this._input.LA(1); + if (!(_la === KipperParser.True || _la === KipperParser.False)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2353,7 +2104,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2365,10 +2117,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 455; - this.identifier(); + this.state = 457; + this.identifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2376,7 +2129,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2388,10 +2142,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 457; - this.match(KipperParser.Identifier); + this.state = 459; + this.match(KipperParser.Identifier); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2399,41 +2154,40 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { - let _localctx: IdentifierOrStringPrimaryExpressionContext = new IdentifierOrStringPrimaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IdentifierOrStringPrimaryExpressionContext = new IdentifierOrStringPrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 86, KipperParser.RULE_identifierOrStringPrimaryExpression); try { - this.state = 461; + this.state = 463; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Identifier: - this.enterOuterAlt(_localctx, 1); - { - this.state = 459; - this.identifier(); - } - break; - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - this.enterOuterAlt(_localctx, 2); - { - this.state = 460; - this.stringPrimaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Identifier: + this.enterOuterAlt(_localctx, 1); + { + this.state = 461; + this.identifier(); + } + break; + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + this.enterOuterAlt(_localctx, 2); + { + this.state = 462; + this.stringPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2441,7 +2195,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2454,20 +2209,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 463; - _la = this._input.LA(1); - if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 465; + _la = this._input.LA(1); + if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2475,7 +2231,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2486,59 +2243,60 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 90, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 481; + this.state = 483; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteStart: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringSingleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 467; + this.match(KipperParser.FStringSingleQuoteStart); + this.state = 471; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { - this.state = 465; - this.match(KipperParser.FStringSingleQuoteStart); - this.state = 469; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { - { - { - this.state = 466; - this.fStringSingleQuoteAtom(); - } - } - this.state = 471; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 472; - this.match(KipperParser.FStringSingleQuoteEnd); + { + this.state = 468; + this.fStringSingleQuoteAtom(); } - break; - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); + } + this.state = 473; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 474; + this.match(KipperParser.FStringSingleQuoteEnd); + } + break; + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 475; + this.match(KipperParser.FStringDoubleQuoteStart); + this.state = 479; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { - this.state = 473; - this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 477; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { - { - { - this.state = 474; - this.fStringDoubleQuoteAtom(); - } - } - this.state = 479; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 480; - this.match(KipperParser.FStringDoubleQuoteEnd); + { + this.state = 476; + this.fStringDoubleQuoteAtom(); } - break; - default: - throw new NoViableAltException(this); + } + this.state = 481; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 482; + this.match(KipperParser.FStringDoubleQuoteEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2546,7 +2304,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2557,70 +2316,40 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 92, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 489; + this.state = 491; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteAtom: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringSingleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 485; + this.match(KipperParser.FStringSingleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 486; + this.match(KipperParser.FStringExpStart); + this.state = 488; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { { - this.state = 483; - this.match(KipperParser.FStringSingleQuoteAtom); + this.state = 487; + this.expression(); } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 484; - this.match(KipperParser.FStringExpStart); - this.state = 486; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 485; - this.expression(); - } - } + } - this.state = 488; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 490; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2628,7 +2357,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2639,70 +2369,40 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 94, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 497; + this.state = 499; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringDoubleQuoteAtom: - this.enterOuterAlt(_localctx, 1); + case KipperParser.FStringDoubleQuoteAtom: + this.enterOuterAlt(_localctx, 1); + { + this.state = 493; + this.match(KipperParser.FStringDoubleQuoteAtom); + } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 494; + this.match(KipperParser.FStringExpStart); + this.state = 496; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { { - this.state = 491; - this.match(KipperParser.FStringDoubleQuoteAtom); + this.state = 495; + this.expression(); } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 492; - this.match(KipperParser.FStringExpStart); - this.state = 494; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 493; - this.expression(); - } - } + } - this.state = 496; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 498; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2710,7 +2410,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2723,20 +2424,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 499; - _la = this._input.LA(1); - if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 501; + _la = this._input.LA(1); + if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2744,7 +2446,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2758,81 +2461,51 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 501; - this.match(KipperParser.LeftBracket); - this.state = 510; + this.state = 503; + this.match(KipperParser.LeftBracket); + this.state = 512; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 504; + this.expression(); + this.state = 509; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 502; + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 505; + this.match(KipperParser.Comma); + this.state = 506; this.expression(); - this.state = 507; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 503; - this.match(KipperParser.Comma); - this.state = 504; - this.expression(); - } - } - } - this.state = 509; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + } } } + this.state = 511; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } + } + } - this.state = 513; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Comma) { - { - this.state = 512; - this.match(KipperParser.Comma); - } + this.state = 515; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 514; + this.match(KipperParser.Comma); } + } - this.state = 515; - this.match(KipperParser.RightBracket); + this.state = 517; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2840,7 +2513,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2854,57 +2528,51 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 517; - this.match(KipperParser.LeftBrace); - this.state = 526; + this.state = 519; + this.match(KipperParser.LeftBrace); + this.state = 528; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & ((1 << (KipperParser.Identifier - 77)) | (1 << (KipperParser.SingleQuoteStringLiteral - 77)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 77)))) !== 0)) { + { + this.state = 520; + this.objectProperty(); + this.state = 525; this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - ((_la - 76) & ~0x1f) === 0 && - ((1 << (_la - 76)) & - ((1 << (KipperParser.Identifier - 76)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 76)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 76)))) !== - 0 - ) { - { - this.state = 518; + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 521; + this.match(KipperParser.Comma); + this.state = 522; this.objectProperty(); - this.state = 523; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 519; - this.match(KipperParser.Comma); - this.state = 520; - this.objectProperty(); - } - } - } - this.state = 525; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + } } } + this.state = 527; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + } } + } - this.state = 529; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Comma) { - { - this.state = 528; - this.match(KipperParser.Comma); - } + this.state = 531; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 530; + this.match(KipperParser.Comma); } + } - this.state = 531; - this.match(KipperParser.RightBrace); + this.state = 533; + this.match(KipperParser.RightBrace); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2912,7 +2580,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -2924,14 +2593,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 533; - this.identifierOrStringPrimaryExpression(); - this.state = 534; - this.match(KipperParser.Colon); - this.state = 535; - this.expression(); + this.state = 535; + this.identifierOrStringPrimaryExpression(); + this.state = 536; + this.match(KipperParser.Colon); + this.state = 537; + this.expression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2939,45 +2609,35 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext { - let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 104, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 537; - _la = this._input.LA(1); - if ( - !( - ((_la - 31) & ~0x1f) === 0 && - ((1 << (_la - 31)) & - ((1 << (KipperParser.Void - 31)) | - (1 << (KipperParser.Null - 31)) | - (1 << (KipperParser.Undefined - 31)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 539; + _la = this._input.LA(1); + if (!(((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2985,7 +2645,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3010,279 +2671,179 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 559; + this.state = 561; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 542; + this.primaryExpression(); + } + break; + case KipperParser.CallFunc: + { + _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 543; + this.match(KipperParser.CallFunc); + this.state = 544; + this.computedPrimaryExpression(0); + this.state = 545; + this.match(KipperParser.LeftParen); + this.state = 547; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 546; + this.argumentExpressionList(); + } + } + + this.state = 549; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + } + break; + case KipperParser.New: + { + _localctx = new NewInstantiationExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 552; + this.match(KipperParser.New); + this.state = 553; + this.typeSpecifierExpression(); + this.state = 554; + this.match(KipperParser.LeftParen); + this.state = 556; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 555; + this.argumentExpressionList(); + } + } - this.state = 540; - this.primaryExpression(); + this.state = 558; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression + } + break; + default: + throw new NoViableAltException(this); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 584; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 582; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 51, this._ctx) ) { + case 1: + { + _localctx = new DotNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 563; + if (!(this.precpred(this._ctx, 6))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); + } + this.state = 564; + this.dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } break; - case KipperParser.CallFunc: + + case 2: { - _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 541; - this.match(KipperParser.CallFunc); - this.state = 542; - this.computedPrimaryExpression(0); - this.state = 543; - this.match(KipperParser.LeftParen); - this.state = 545; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 544; - this.argumentExpressionList(); - } - } + _localctx = new BracketNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 567; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 568; + this.bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + } + break; - this.state = 547; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; + case 3: + { + _localctx = new SliceNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 571; + if (!(this.precpred(this._ctx, 4))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); + } + this.state = 572; + this.sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression } break; - case KipperParser.New: + + case 4: { - _localctx = new NewInstantiationExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 550; - this.match(KipperParser.New); - this.state = 551; - this.typeSpecifierExpression(); - this.state = 552; - this.match(KipperParser.LeftParen); - this.state = 554; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 553; - this.argumentExpressionList(); - } + _localctx = new FunctionCallExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 575; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 576; + this.match(KipperParser.LeftParen); + this.state = 578; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 577; + this.argumentExpressionList(); } + } - this.state = 556; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; + this.state = 580; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression } break; - default: - throw new NoViableAltException(this); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 582; + this.state = 586; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 580; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { - case 1: - { - _localctx = new DotNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 561; - if (!this.precpred(this._ctx, 6)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 562; - this.dotNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 2: - { - _localctx = new BracketNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 565; - if (!this.precpred(this._ctx, 5)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 566; - this.bracketNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 3: - { - _localctx = new SliceNotationMemberAccessExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 569; - if (!this.precpred(this._ctx, 4)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); - } - this.state = 570; - this.sliceNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; - } - break; - - case 4: - { - _localctx = new FunctionCallExpressionContext( - new ComputedPrimaryExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 573; - if (!this.precpred(this._ctx, 3)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 574; - this.match(KipperParser.LeftParen); - this.state = 576; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 575; - this.argumentExpressionList(); - } - } - - this.state = 578; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; - } - break; - } - } - } - this.state = 584; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3290,7 +2851,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3303,26 +2865,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 585; + this.state = 587; + this.assignmentExpression(); + this.state = 592; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 588; + this.match(KipperParser.Comma); + this.state = 589; this.assignmentExpression(); - this.state = 590; + } + } + this.state = 594; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 586; - this.match(KipperParser.Comma); - this.state = 587; - this.assignmentExpression(); - } - } - this.state = 592; - this._errHandler.sync(this); - _la = this._input.LA(1); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3330,7 +2893,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3342,12 +2906,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 593; - this.match(KipperParser.Dot); - this.state = 594; - this.identifier(); + this.state = 595; + this.match(KipperParser.Dot); + this.state = 596; + this.identifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3355,7 +2920,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3367,14 +2933,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 596; - this.match(KipperParser.LeftBracket); - this.state = 597; - this.expression(); - this.state = 598; - this.match(KipperParser.RightBracket); + this.state = 598; + this.match(KipperParser.LeftBracket); + this.state = 599; + this.expression(); + this.state = 600; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3382,7 +2949,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3395,98 +2963,37 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 600; - this.match(KipperParser.LeftBracket); - this.state = 604; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 601; - this.expression(); - _localctx.sliceStart = true; - } + this.state = 602; + this.match(KipperParser.LeftBracket); + this.state = 606; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 603; + this.expression(); + _localctx.sliceStart = true } + } - this.state = 606; - this.match(KipperParser.Colon); - this.state = 610; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== - 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== - 0) - ) { - { - this.state = 607; - this.expression(); - _localctx.sliceEnd = true; - } + this.state = 608; + this.match(KipperParser.Colon); + this.state = 612; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + { + this.state = 609; + this.expression(); + _localctx.sliceEnd = true } + } - this.state = 612; - this.match(KipperParser.RightBracket); + this.state = 614; + this.match(KipperParser.RightBracket); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3494,7 +3001,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3504,34 +3012,35 @@ export class KipperParser extends KipperParserBase { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 116, KipperParser.RULE_postfixExpression); try { - this.state = 617; + this.state = 619; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 614; - this.computedPrimaryExpression(0); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 56, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 616; + this.computedPrimaryExpression(0); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 615; - this.incrementOrDecrementPostfixExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 617; + this.incrementOrDecrementPostfixExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 616; - this.typeofExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 618; + this.typeofExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3539,27 +3048,26 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext { - let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 118, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 619; - this.computedPrimaryExpression(0); - this.state = 620; - this.incrementOrDecrementOperator(); + this.state = 621; + this.computedPrimaryExpression(0); + this.state = 622; + this.incrementOrDecrementOperator(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3567,7 +3075,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3579,12 +3088,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 622; - this.match(KipperParser.Typeof); - this.state = 623; - this.assignmentExpression(); + this.state = 624; + this.match(KipperParser.Typeof); + this.state = 625; + this.assignmentExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3592,7 +3102,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3602,55 +3113,56 @@ export class KipperParser extends KipperParserBase { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 122, KipperParser.RULE_unaryExpression); try { - this.state = 628; + this.state = 630; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.CallFunc: - case KipperParser.New: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Typeof: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 625; - this.postfixExpression(); - } - break; - case KipperParser.PlusPlus: - case KipperParser.MinusMinus: - this.enterOuterAlt(_localctx, 2); - { - this.state = 626; - this.incrementOrDecrementUnaryExpression(); - } - break; - case KipperParser.Plus: - case KipperParser.Minus: - case KipperParser.Not: - case KipperParser.BitwiseNot: - this.enterOuterAlt(_localctx, 3); - { - this.state = 627; - this.operatorModifiedUnaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.CallFunc: + case KipperParser.New: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Typeof: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 627; + this.postfixExpression(); + } + break; + case KipperParser.PlusPlus: + case KipperParser.MinusMinus: + this.enterOuterAlt(_localctx, 2); + { + this.state = 628; + this.incrementOrDecrementUnaryExpression(); + } + break; + case KipperParser.Plus: + case KipperParser.Minus: + case KipperParser.Not: + case KipperParser.BitwiseNot: + this.enterOuterAlt(_localctx, 3); + { + this.state = 629; + this.operatorModifiedUnaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3658,27 +3170,26 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext { - let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 124, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 630; - this.incrementOrDecrementOperator(); - this.state = 631; - this.postfixExpression(); + this.state = 632; + this.incrementOrDecrementOperator(); + this.state = 633; + this.postfixExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3686,27 +3197,26 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext { - let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext( - this._ctx, - this.state, - ); + let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 126, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 633; - this.unaryOperator(); - this.state = 634; - this.postfixExpression(); + this.state = 635; + this.unaryOperator(); + this.state = 636; + this.postfixExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3714,7 +3224,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3727,20 +3238,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 636; - _la = this._input.LA(1); - if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 638; + _la = this._input.LA(1); + if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3748,7 +3260,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3761,30 +3274,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 638; - _la = this._input.LA(1); - if ( - !( - ((_la - 45) & ~0x1f) === 0 && - ((1 << (_la - 45)) & - ((1 << (KipperParser.Plus - 45)) | - (1 << (KipperParser.Minus - 45)) | - (1 << (KipperParser.Not - 45)) | - (1 << (KipperParser.BitwiseNot - 45)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 640; + _la = this._input.LA(1); + if (!(((((_la - 46)) & ~0x1F) === 0 && ((1 << (_la - 46)) & ((1 << (KipperParser.Plus - 46)) | (1 << (KipperParser.Minus - 46)) | (1 << (KipperParser.Not - 46)) | (1 << (KipperParser.BitwiseNot - 46)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3792,7 +3296,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3802,32 +3307,33 @@ export class KipperParser extends KipperParserBase { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 132, KipperParser.RULE_castOrConvertExpression); try { - this.state = 645; + this.state = 647; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { - case 1: - _localctx = new PassOnCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 640; - this.unaryExpression(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 58, this._ctx) ) { + case 1: + _localctx = new PassOnCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 642; + this.unaryExpression(); + } + break; - case 2: - _localctx = new ActualCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 641; - this.unaryExpression(); - this.state = 642; - this.match(KipperParser.As); - this.state = 643; - this.typeSpecifierExpression(); - } - break; + case 2: + _localctx = new ActualCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 643; + this.unaryExpression(); + this.state = 644; + this.match(KipperParser.As); + this.state = 645; + this.typeSpecifierExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3835,7 +3341,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -3860,67 +3367,56 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnMultiplicativeExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnMultiplicativeExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 650; + this.castOrConvertExpression(); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 657; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualMultiplicativeExpressionContext(new MultiplicativeExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); + this.state = 652; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 653; + _la = this._input.LA(1); + if (!(((((_la - 50)) & ~0x1F) === 0 && ((1 << (_la - 50)) & ((1 << (KipperParser.Star - 50)) | (1 << (KipperParser.Div - 50)) | (1 << (KipperParser.Mod - 50)) | (1 << (KipperParser.PowerTo - 50)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 648; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 654; this.castOrConvertExpression(); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 655; + this.state = 659; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualMultiplicativeExpressionContext( - new MultiplicativeExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 650; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 651; - _la = this._input.LA(1); - if ( - !( - ((_la - 49) & ~0x1f) === 0 && - ((1 << (_la - 49)) & - ((1 << (KipperParser.Star - 49)) | - (1 << (KipperParser.Div - 49)) | - (1 << (KipperParser.Mod - 49)) | - (1 << (KipperParser.PowerTo - 49)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 652; - this.castOrConvertExpression(); - } - } - } - this.state = 657; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3928,7 +3424,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3953,57 +3450,56 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnAdditiveExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnAdditiveExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 661; + this.multiplicativeExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 668; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualAdditiveExpressionContext(new AdditiveExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); + this.state = 663; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 664; + _la = this._input.LA(1); + if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 659; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 665; this.multiplicativeExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 666; + this.state = 670; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualAdditiveExpressionContext( - new AdditiveExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 661; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 662; - _la = this._input.LA(1); - if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 663; - this.multiplicativeExpression(0); - } - } - } - this.state = 668; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4011,7 +3507,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4035,47 +3532,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 670; - this.additiveExpression(0); + this.state = 672; + this.additiveExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 680; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseShiftExpressionContext(new BitwiseShiftExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); + this.state = 674; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 675; + this.bitwiseShiftOperators(); + this.state = 676; + this.bitwiseAndExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 678; + this.state = 682; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseShiftExpressionContext( - new BitwiseShiftExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 672; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 673; - this.bitwiseShiftOperators(); - this.state = 674; - this.bitwiseAndExpression(0); - } - } - } - this.state = 680; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4083,7 +3579,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4096,29 +3593,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 681; - _la = this._input.LA(1); - if ( - !( - ((_la - 72) & ~0x1f) === 0 && - ((1 << (_la - 72)) & - ((1 << (KipperParser.BitwiseZeroFillLeftShift - 72)) | - (1 << (KipperParser.BitwiseSignedRightShift - 72)) | - (1 << (KipperParser.BitwiseZeroFillRightShift - 72)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 683; + _la = this._input.LA(1); + if (!(((((_la - 73)) & ~0x1F) === 0 && ((1 << (_la - 73)) & ((1 << (KipperParser.BitwiseZeroFillLeftShift - 73)) | (1 << (KipperParser.BitwiseSignedRightShift - 73)) | (1 << (KipperParser.BitwiseZeroFillRightShift - 73)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4126,7 +3615,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4151,67 +3641,56 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnRelationalExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnRelationalExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 686; + this.bitwiseShiftExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 693; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualRelationalExpressionContext(new RelationalExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); + this.state = 688; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 689; + _la = this._input.LA(1); + if (!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & ((1 << (KipperParser.Less - 65)) | (1 << (KipperParser.LessEqual - 65)) | (1 << (KipperParser.Greater - 65)) | (1 << (KipperParser.GreaterEqual - 65)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 684; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 690; this.bitwiseShiftExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 691; + this.state = 695; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualRelationalExpressionContext( - new RelationalExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 686; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 687; - _la = this._input.LA(1); - if ( - !( - ((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Less - 64)) | - (1 << (KipperParser.LessEqual - 64)) | - (1 << (KipperParser.Greater - 64)) | - (1 << (KipperParser.GreaterEqual - 64)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 688; - this.bitwiseShiftExpression(0); - } - } - } - this.state = 693; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4219,7 +3698,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4244,57 +3724,56 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnEqualityExpressionContext(_localctx); - this._ctx = _localctx; + { + _localctx = new PassOnEqualityExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 697; + this.relationalExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 704; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } _prevctx = _localctx; + { + { + _localctx = new ActualEqualityExpressionContext(new EqualityExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); + this.state = 699; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 700; + _la = this._input.LA(1); + if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this.state = 695; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 701; this.relationalExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 702; + this.state = 706; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualEqualityExpressionContext( - new EqualityExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 697; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 698; - _la = this._input.LA(1); - if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 699; - this.relationalExpression(0); - } - } - } - this.state = 704; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4302,7 +3781,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4326,47 +3806,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnBitwiseAndExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 706; + this.state = 708; + this.equalityExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 715; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseAndExpressionContext(new BitwiseAndExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); + this.state = 710; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 711; + this.match(KipperParser.BitwiseAnd); + this.state = 712; this.equalityExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 713; + this.state = 717; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseAndExpressionContext( - new BitwiseAndExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 708; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 709; - this.match(KipperParser.BitwiseAnd); - this.state = 710; - this.equalityExpression(0); - } - } - } - this.state = 715; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4374,7 +3853,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4398,47 +3878,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseXorExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnBitwiseXorExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 717; + this.state = 719; + this.bitwiseAndExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 726; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseXorExpressionContext(new BitwiseXorExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); + this.state = 721; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 722; + this.match(KipperParser.BitwiseXor); + this.state = 723; this.bitwiseAndExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 724; + this.state = 728; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseXorExpressionContext( - new BitwiseXorExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 719; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 720; - this.match(KipperParser.BitwiseXor); - this.state = 721; - this.bitwiseAndExpression(0); - } - } - } - this.state = 726; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4446,7 +3925,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4470,47 +3950,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnBitwiseOrExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 728; + this.state = 730; + this.bitwiseXorExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 737; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseOrExpressionContext(new BitwiseOrExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); + this.state = 732; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 733; + this.match(KipperParser.BitwiseOr); + this.state = 734; this.bitwiseXorExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 735; + this.state = 739; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseOrExpressionContext( - new BitwiseOrExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 730; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 731; - this.match(KipperParser.BitwiseOr); - this.state = 732; - this.bitwiseXorExpression(0); - } - } - } - this.state = 737; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4518,7 +3997,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4542,47 +4022,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnLogicalAndExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 739; + this.state = 741; + this.bitwiseOrExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 748; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalAndExpressionContext(new LogicalAndExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); + this.state = 743; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 744; + this.match(KipperParser.AndAnd); + this.state = 745; this.bitwiseOrExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 746; + this.state = 750; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualLogicalAndExpressionContext( - new LogicalAndExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 741; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 742; - this.match(KipperParser.AndAnd); - this.state = 743; - this.bitwiseOrExpression(0); - } - } - } - this.state = 748; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4590,7 +4069,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4614,47 +4094,46 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; + { + _localctx = new PassOnLogicalOrExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - this.state = 750; + this.state = 752; + this.logicalAndExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 759; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalOrExpressionContext(new LogicalOrExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); + this.state = 754; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 755; + this.match(KipperParser.OrOr); + this.state = 756; this.logicalAndExpression(0); + } + } } - this._ctx._stop = this._input.tryLT(-1); - this.state = 757; + this.state = 761; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - { - _localctx = new ActualLogicalOrExpressionContext( - new LogicalOrExpressionContext(_parentctx, _parentState), - ); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 752; - if (!this.precpred(this._ctx, 1)) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 753; - this.match(KipperParser.OrOr); - this.state = 754; - this.logicalAndExpression(0); - } - } - } - this.state = 759; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); - } } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4662,7 +4141,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4672,36 +4152,37 @@ export class KipperParser extends KipperParserBase { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 156, KipperParser.RULE_conditionalExpression); try { - this.state = 767; + this.state = 769; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { - case 1: - _localctx = new PassOnConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 760; - this.logicalOrExpression(0); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 69, this._ctx) ) { + case 1: + _localctx = new PassOnConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 762; + this.logicalOrExpression(0); + } + break; - case 2: - _localctx = new ActualConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 761; - this.logicalOrExpression(0); - this.state = 762; - this.match(KipperParser.QuestionMark); - this.state = 763; - this.conditionalExpression(); - this.state = 764; - this.match(KipperParser.Colon); - this.state = 765; - this.conditionalExpression(); - } - break; + case 2: + _localctx = new ActualConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 763; + this.logicalOrExpression(0); + this.state = 764; + this.match(KipperParser.QuestionMark); + this.state = 765; + this.conditionalExpression(); + this.state = 766; + this.match(KipperParser.Colon); + this.state = 767; + this.conditionalExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4709,7 +4190,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4719,32 +4201,33 @@ export class KipperParser extends KipperParserBase { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 158, KipperParser.RULE_assignmentExpression); try { - this.state = 774; + this.state = 776; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { - case 1: - _localctx = new PassOnAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 769; - this.conditionalExpression(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 70, this._ctx) ) { + case 1: + _localctx = new PassOnAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 771; + this.conditionalExpression(); + } + break; - case 2: - _localctx = new ActualAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 770; - this.computedPrimaryExpression(0); - this.state = 771; - this.assignmentOperator(); - this.state = 772; - this.assignmentExpression(); - } - break; + case 2: + _localctx = new ActualAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 772; + this.computedPrimaryExpression(0); + this.state = 773; + this.assignmentOperator(); + this.state = 774; + this.assignmentExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4752,7 +4235,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4765,32 +4249,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 776; - _la = this._input.LA(1); - if ( - !( - ((_la - 56) & ~0x1f) === 0 && - ((1 << (_la - 56)) & - ((1 << (KipperParser.Assign - 56)) | - (1 << (KipperParser.PlusAssign - 56)) | - (1 << (KipperParser.MinusAssign - 56)) | - (1 << (KipperParser.StarAssign - 56)) | - (1 << (KipperParser.DivAssign - 56)) | - (1 << (KipperParser.ModAssign - 56)))) !== - 0 - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 778; + _la = this._input.LA(1); + if (!(((((_la - 57)) & ~0x1F) === 0 && ((1 << (_la - 57)) & ((1 << (KipperParser.Assign - 57)) | (1 << (KipperParser.PlusAssign - 57)) | (1 << (KipperParser.MinusAssign - 57)) | (1 << (KipperParser.StarAssign - 57)) | (1 << (KipperParser.DivAssign - 57)) | (1 << (KipperParser.ModAssign - 57)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4798,7 +4271,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4811,28 +4285,29 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 778; - this.assignmentExpression(); - this.state = 783; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 779; - this.match(KipperParser.Comma); - this.state = 780; - this.assignmentExpression(); - } - } + this.state = 780; + this.assignmentExpression(); + this.state = 785; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 781; + this.match(KipperParser.Comma); + this.state = 782; + this.assignmentExpression(); + } } - this.state = 785; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); } + this.state = 787; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); } - } catch (re) { + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4840,7 +4315,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -4850,34 +4326,35 @@ export class KipperParser extends KipperParserBase { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 164, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 789; + this.state = 791; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 786; - this.identifierTypeSpecifierExpression(); - } - break; + switch ( this.interpreter.adaptivePredict(this._input, 72, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 788; + this.identifierTypeSpecifierExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 787; - this.genericTypeSpecifierExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 789; + this.genericTypeSpecifierExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 788; - this.typeofTypeSpecifierExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 790; + this.typeofTypeSpecifierExpression(); + } + break; } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4885,25 +4362,24 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext { - let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); + let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 166, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 791; - this.typeSpecifierIdentifier(); + this.state = 793; + this.typeSpecifierIdentifier(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4911,65 +4387,55 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext { - let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); + let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 168, KipperParser.RULE_genericTypeSpecifierExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 793; - this.typeSpecifierIdentifier(); - this.state = 794; - this.match(KipperParser.Less); - this.state = 803; + this.state = 795; + this.typeSpecifierIdentifier(); + this.state = 796; + this.match(KipperParser.Less); + this.state = 805; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 31)) & ~0x1F) === 0 && ((1 << (_la - 31)) & ((1 << (KipperParser.Typeof - 31)) | (1 << (KipperParser.Void - 31)) | (1 << (KipperParser.Null - 31)) | (1 << (KipperParser.Undefined - 31)))) !== 0) || _la === KipperParser.Identifier) { + { + this.state = 797; + this.typeSpecifierExpression(); + this.state = 802; this._errHandler.sync(this); _la = this._input.LA(1); - if ( - (((_la - 30) & ~0x1f) === 0 && - ((1 << (_la - 30)) & - ((1 << (KipperParser.Typeof - 30)) | - (1 << (KipperParser.Void - 30)) | - (1 << (KipperParser.Null - 30)) | - (1 << (KipperParser.Undefined - 30)))) !== - 0) || - _la === KipperParser.Identifier - ) { + while (_la === KipperParser.Comma) { { - this.state = 795; - this.typeSpecifierExpression(); - this.state = 800; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 796; - this.match(KipperParser.Comma); - this.state = 797; - this.typeSpecifierExpression(); - } - } - this.state = 802; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + { + this.state = 798; + this.match(KipperParser.Comma); + this.state = 799; + this.typeSpecifierExpression(); } + } + this.state = 804; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } + } - this.state = 805; - this.match(KipperParser.Greater); + this.state = 807; + this.match(KipperParser.Greater); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4977,31 +4443,30 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext { - let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext( - this._ctx, - this.state, - ); + let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 170, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 807; - this.match(KipperParser.Typeof); - this.state = 808; - this.match(KipperParser.LeftParen); - this.state = 809; - this.typeSpecifierIdentifier(); - this.state = 810; - this.match(KipperParser.RightParen); + this.state = 809; + this.match(KipperParser.Typeof); + this.state = 810; + this.match(KipperParser.LeftParen); + this.state = 811; + this.typeSpecifierIdentifier(); + this.state = 812; + this.match(KipperParser.RightParen); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -5009,7 +4474,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -5022,30 +4488,50 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 812; - _la = this._input.LA(1); - if ( - !( - (((_la - 31) & ~0x1f) === 0 && - ((1 << (_la - 31)) & - ((1 << (KipperParser.Void - 31)) | - (1 << (KipperParser.Null - 31)) | - (1 << (KipperParser.Undefined - 31)))) !== - 0) || - _la === KipperParser.Identifier - ) - ) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); + this.state = 814; + _la = this._input.LA(1); + if (!(((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)))) !== 0) || _la === KipperParser.Identifier)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public matchesExpression(): MatchesExpressionContext { + let _localctx: MatchesExpressionContext = new MatchesExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 174, KipperParser.RULE_matchesExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 816; + this.assignmentExpression(); + this.state = 817; + this.match(KipperParser.Matches); + this.state = 818; + this.typeSpecifierExpression(); } - } catch (re) { + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -5053,7 +4539,8 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } finally { + } + finally { this.exitRule(); } return _localctx; @@ -5061,528 +4548,534 @@ export class KipperParser extends KipperParserBase { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 25: - return this.compoundStatement_sempred(_localctx as CompoundStatementContext, predIndex); + case 25: + return this.compoundStatement_sempred(_localctx as CompoundStatementContext, predIndex); - case 53: - return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); + case 53: + return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 67: - return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); + case 67: + return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 68: - return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); + case 68: + return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 69: - return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); + case 69: + return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); - case 71: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + case 71: + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 72: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + case 72: + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 73: - return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); + case 73: + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); - case 74: - return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + case 74: + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); - case 75: - return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + case 75: + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); - case 76: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + case 76: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 77: - return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); + case 77: + return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; } private compoundStatement_sempred(_localctx: CompoundStatementContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.notInsideExpressionStatement(); + case 0: + return this.notInsideExpressionStatement(); } return true; } private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.precpred(this._ctx, 6); + case 1: + return this.precpred(this._ctx, 6); - case 2: - return this.precpred(this._ctx, 5); + case 2: + return this.precpred(this._ctx, 5); - case 3: - return this.precpred(this._ctx, 4); + case 3: + return this.precpred(this._ctx, 4); - case 4: - return this.precpred(this._ctx, 3); + case 4: + return this.precpred(this._ctx, 3); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: - return this.precpred(this._ctx, 1); + case 5: + return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: - return this.precpred(this._ctx, 1); + case 6: + return this.precpred(this._ctx, 1); } return true; } private bitwiseShiftExpression_sempred(_localctx: BitwiseShiftExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: - return this.precpred(this._ctx, 1); + case 7: + return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: - return this.precpred(this._ctx, 1); + case 8: + return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: - return this.precpred(this._ctx, 1); + case 9: + return this.precpred(this._ctx, 1); } return true; } private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: - return this.precpred(this._ctx, 1); + case 10: + return this.precpred(this._ctx, 1); } return true; } private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 11: - return this.precpred(this._ctx, 1); + case 11: + return this.precpred(this._ctx, 1); } return true; } private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 12: - return this.precpred(this._ctx, 1); + case 12: + return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 13: - return this.precpred(this._ctx, 1); + case 13: + return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 14: - return this.precpred(this._ctx, 1); + case 14: + return this.precpred(this._ctx, 1); } return true; } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Z\u0331\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03[\u0337\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + - '\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04"\t"\x04#' + - "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + + "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + + "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + - "X\tX\x03\x02\x05\x02\xB2\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\xB7\n\x03" + - "\r\x03\x0E\x03\xB8\x03\x04\x03\x04\x03\x05\x06\x05\xBE\n\x05\r\x05\x0E" + - "\x05\xBF\x03\x06\x03\x06\x03\x06\x05\x06\xC5\n\x06\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x03\x07\x03\x07\x05\x07\xCD\n\x07\x03\b\x03\b\x03\b\x03\t" + - "\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xD9\n\n\x03\v\x03\v\x03\f\x03" + - "\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE5\n\x0E\x03\x0E" + - "\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xEB\n\x0E\x03\x0F\x03\x0F\x03\x0F\x07" + - "\x0F\xF0\n\x0F\f\x0F\x0E\x0F\xF3\v\x0F\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\xFD\n\x11\f\x11\x0E\x11\u0100" + - "\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0106\n\x12\x03\x13\x03" + - "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0110\n\x14" + - "\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x07\x15\u011C\n\x15\f\x15\x0E\x15\u011F\v\x15\x03\x15\x03\x15" + - "\x03\x16\x03\x16\x03\x16\x05\x16\u0126\n\x16\x03\x17\x03\x17\x03\x17\x03" + - "\x17\x03\x18\x03\x18\x03\x18\x05\x18\u012F\n\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x05\x18\u0135\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u013A\n\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x05\x1A\u0145\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u014A\n\x1B\x03\x1B" + - "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D" + - "\u0155\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05" + - "\x1E\u015E\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F" + - "\u0166\n\x1F\f\x1F\x0E\x1F\u0169\v\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 " + - "\x03 \x03 \x03 \x03 \x03 \x05 \u0175\n \x03!\x03!\x03!\x05!\u017A\n!\x03" + - '"\x03"\x03"\x03"\x05"\u0180\n"\x03"\x03"\x05"\u0184\n"\x03"' + - '\x03"\x03"\x03"\x05"\u018A\n"\x03"\x03"\x03"\x03"\x05"\u0190' + - '\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03' + - "$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01A8\n&\x03&\x03" + - "&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x05'\u01B6" + - "\n'\x03(\x03(\x05(\u01BA\n(\x03(\x03(\x03(\x03(\x03(\x03(\x05(\u01C2" + - "\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x05-\u01D0" + - "\n-\x03.\x03.\x03/\x03/\x07/\u01D6\n/\f/\x0E/\u01D9\v/\x03/\x03/\x03/" + - "\x07/\u01DE\n/\f/\x0E/\u01E1\v/\x03/\x05/\u01E4\n/\x030\x030\x030\x05" + - "0\u01E9\n0\x030\x050\u01EC\n0\x031\x031\x031\x051\u01F1\n1\x031\x051\u01F4" + - "\n1\x032\x032\x033\x033\x033\x033\x073\u01FC\n3\f3\x0E3\u01FF\v3\x053" + - "\u0201\n3\x033\x053\u0204\n3\x033\x033\x034\x034\x034\x034\x074\u020C" + - "\n4\f4\x0E4\u020F\v4\x054\u0211\n4\x034\x054\u0214\n4\x034\x034\x035\x03" + - "5\x035\x035\x036\x036\x037\x037\x037\x037\x037\x037\x057\u0224\n7\x03" + - "7\x037\x037\x037\x037\x037\x037\x057\u022D\n7\x037\x037\x037\x057\u0232" + - "\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x057\u0243\n7\x037\x037\x077\u0247\n7\f7\x0E7\u024A\v7\x038\x03" + - "8\x038\x078\u024F\n8\f8\x0E8\u0252\v8\x039\x039\x039\x03:\x03:\x03:\x03" + - ":\x03;\x03;\x03;\x03;\x05;\u025F\n;\x03;\x03;\x03;\x03;\x05;\u0265\n;" + - "\x03;\x03;\x03<\x03<\x03<\x05<\u026C\n<\x03=\x03=\x03=\x03>\x03>\x03>" + - "\x03?\x03?\x03?\x05?\u0277\n?\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B" + - "\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u0288\nD\x03E\x03E\x03E\x03E" + - "\x03E\x03E\x07E\u0290\nE\fE\x0EE\u0293\vE\x03F\x03F\x03F\x03F\x03F\x03" + - "F\x07F\u029B\nF\fF\x0EF\u029E\vF\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x07" + - "G\u02A7\nG\fG\x0EG\u02AA\vG\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x07" + - "I\u02B4\nI\fI\x0EI\u02B7\vI\x03J\x03J\x03J\x03J\x03J\x03J\x07J\u02BF\n" + - "J\fJ\x0EJ\u02C2\vJ\x03K\x03K\x03K\x03K\x03K\x03K\x07K\u02CA\nK\fK\x0E" + - "K\u02CD\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D5\nL\fL\x0EL\u02D8\v" + - "L\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E0\nM\fM\x0EM\u02E3\vM\x03N\x03" + - "N\x03N\x03N\x03N\x03N\x07N\u02EB\nN\fN\x0EN\u02EE\vN\x03O\x03O\x03O\x03" + - "O\x03O\x03O\x07O\u02F6\nO\fO\x0EO\u02F9\vO\x03P\x03P\x03P\x03P\x03P\x03" + - "P\x03P\x05P\u0302\nP\x03Q\x03Q\x03Q\x03Q\x03Q\x05Q\u0309\nQ\x03R\x03R" + - "\x03S\x03S\x03S\x07S\u0310\nS\fS\x0ES\u0313\vS\x03T\x03T\x03T\x05T\u0318" + - "\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x07V\u0321\nV\fV\x0EV\u0324\vV" + - "\x05V\u0326\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x02\x02" + - "\rl\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9CY\x02\x02\x04\x02\x06\x02\b" + - "\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02" + - '\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x02' + - "6\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + - "R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02" + - "n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02" + - "\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02" + - "\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02" + - "\xAA\x02\xAC\x02\xAE\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02" + - "\x1E\x1F\x03\x02PQ\x04\x02OORR\x03\x02!#\x04\x020022\x06\x02//1199II\x03" + - "\x0236\x04\x02//11\x03\x02JL\x03\x02BE\x03\x02@A\x03\x02:?\x04\x02!#N" + - "N\x02\u033B\x02\xB1\x03\x02\x02\x02\x04\xB6\x03\x02\x02\x02\x06\xBA\x03" + - "\x02\x02\x02\b\xBD\x03\x02\x02\x02\n\xC4\x03\x02\x02\x02\f\xCC\x03\x02" + - "\x02\x02\x0E\xCE\x03\x02\x02\x02\x10\xD1\x03\x02\x02\x02\x12\xD3\x03\x02" + - "\x02\x02\x14\xDA\x03\x02\x02\x02\x16\xDC\x03\x02\x02\x02\x18\xDE\x03\x02" + - "\x02\x02\x1A\xE0\x03\x02\x02\x02\x1C\xEC\x03\x02\x02\x02\x1E\xF4\x03\x02" + - '\x02\x02 \xF8\x03\x02\x02\x02"\u0105\x03\x02\x02\x02$\u0107\x03\x02\x02' + - "\x02&\u010C\x03\x02\x02\x02(\u0116\x03\x02\x02\x02*\u0125\x03\x02\x02" + - "\x02,\u0127\x03\x02\x02\x02.\u012B\x03\x02\x02\x020\u0136\x03\x02\x02" + - "\x022\u0144\x03\x02\x02\x024\u0146\x03\x02\x02\x026\u014D\x03\x02\x02" + - "\x028\u0154\x03\x02\x02\x02:\u0156\x03\x02\x02\x02<\u015F\x03\x02\x02" + - "\x02>\u0174\x03\x02\x02\x02@\u0179\x03\x02\x02\x02B\u017B\x03\x02\x02" + - "\x02D\u0194\x03\x02\x02\x02F\u019A\x03\x02\x02\x02H\u01A2\x03\x02\x02" + - "\x02J\u01A5\x03\x02\x02\x02L\u01B5\x03\x02\x02\x02N\u01B7\x03\x02\x02" + - "\x02P\u01C3\x03\x02\x02\x02R\u01C7\x03\x02\x02\x02T\u01C9\x03\x02\x02" + - "\x02V\u01CB\x03\x02\x02\x02X\u01CF\x03\x02\x02\x02Z\u01D1\x03\x02\x02" + - "\x02\\\u01E3\x03\x02\x02\x02^\u01EB\x03\x02\x02\x02`\u01F3\x03\x02\x02" + - "\x02b\u01F5\x03\x02\x02\x02d\u01F7\x03\x02\x02\x02f\u0207\x03\x02\x02" + - "\x02h\u0217\x03\x02\x02\x02j\u021B\x03\x02\x02\x02l\u0231\x03\x02\x02" + - "\x02n\u024B\x03\x02\x02\x02p\u0253\x03\x02\x02\x02r\u0256\x03\x02\x02" + - "\x02t\u025A\x03\x02\x02\x02v\u026B\x03\x02\x02\x02x\u026D\x03\x02\x02" + - "\x02z\u0270\x03\x02\x02\x02|\u0276\x03\x02\x02\x02~\u0278\x03\x02\x02" + - "\x02\x80\u027B\x03\x02\x02\x02\x82\u027E\x03\x02\x02\x02\x84\u0280\x03" + - "\x02\x02\x02\x86\u0287\x03\x02\x02\x02\x88\u0289\x03\x02\x02\x02\x8A\u0294" + - "\x03\x02\x02\x02\x8C\u029F\x03\x02\x02\x02\x8E\u02AB\x03\x02\x02\x02\x90" + - "\u02AD\x03\x02\x02\x02\x92\u02B8\x03\x02\x02\x02\x94\u02C3\x03\x02\x02" + - "\x02\x96\u02CE\x03\x02\x02\x02\x98\u02D9\x03\x02\x02\x02\x9A\u02E4\x03" + - "\x02\x02\x02\x9C\u02EF\x03\x02\x02\x02\x9E\u0301\x03\x02\x02\x02\xA0\u0308" + - "\x03\x02\x02\x02\xA2\u030A\x03\x02\x02\x02\xA4\u030C\x03\x02\x02\x02\xA6" + - "\u0317\x03\x02\x02\x02\xA8\u0319\x03\x02\x02\x02\xAA\u031B\x03\x02\x02" + - "\x02\xAC\u0329\x03\x02\x02\x02\xAE\u032E\x03\x02\x02\x02\xB0\xB2\x05\x04" + - "\x03\x02\xB1\xB0\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\x03\x02" + - "\x02\x02\xB3\xB4\x07\x02\x02\x03\xB4\x03\x03\x02\x02\x02\xB5\xB7\x05\x06" + - "\x04\x02\xB6\xB5\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xB6\x03\x02" + - "\x02\x02\xB8\xB9\x03\x02\x02\x02\xB9\x05\x03\x02\x02\x02\xBA\xBB\x05\b" + - "\x05\x02\xBB\x07\x03\x02\x02\x02\xBC\xBE\x05\n\x06\x02\xBD\xBC\x03\x02" + - "\x02\x02\xBE\xBF\x03\x02\x02\x02\xBF\xBD\x03\x02\x02\x02\xBF\xC0\x03\x02" + - "\x02\x02\xC0\t\x03\x02\x02\x02\xC1\xC5\x052\x1A\x02\xC2\xC5\x05\f\x07" + - "\x02\xC3\xC5\x07%\x02\x02\xC4\xC1\x03\x02\x02\x02\xC4\xC2\x03\x02\x02" + - "\x02\xC4\xC3\x03\x02\x02\x02\xC5\v\x03\x02\x02\x02\xC6\xC7\x05\x0E\b\x02" + - "\xC7\xC8\x07%\x02\x02\xC8\xCD\x03\x02\x02\x02\xC9\xCD\x05\x1A\x0E\x02" + - "\xCA\xCD\x05 \x11\x02\xCB\xCD\x05(\x15\x02\xCC\xC6\x03\x02\x02\x02\xCC" + - "\xC9\x03\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCC\xCB\x03\x02\x02\x02\xCD" + - "\r\x03\x02\x02\x02\xCE\xCF\x05\x10\t\x02\xCF\xD0\x05\x12\n\x02\xD0\x0F" + - "\x03\x02\x02\x02\xD1\xD2\t\x02\x02\x02\xD2\x11\x03\x02\x02\x02\xD3\xD4" + - "\x05\x16\f\x02\xD4\xD5\x07'\x02\x02\xD5\xD8\x05\xA6T\x02\xD6\xD7\x07" + - ":\x02\x02\xD7\xD9\x05\x14\v\x02\xD8\xD6\x03\x02\x02\x02\xD8\xD9\x03\x02" + - "\x02\x02\xD9\x13\x03\x02\x02\x02\xDA\xDB\x05\xA0Q\x02\xDB\x15\x03\x02" + - "\x02\x02\xDC\xDD\x05\x18\r\x02\xDD\x17\x03\x02\x02\x02\xDE\xDF\x07N\x02" + - "\x02\xDF\x19\x03\x02\x02\x02\xE0\xE1\x07\x16\x02\x02\xE1\xE2\x05\x16\f" + - "\x02\xE2\xE4\x07(\x02\x02\xE3\xE5\x05\x1C\x0F\x02\xE4\xE3\x03\x02\x02" + - "\x02\xE4\xE5\x03\x02\x02\x02\xE5\xE6\x03\x02\x02\x02\xE6\xE7\x07)\x02" + - "\x02\xE7\xE8\x07\x19\x02\x02\xE8\xEA\x05\xA6T\x02\xE9\xEB\x054\x1B\x02" + - "\xEA\xE9\x03\x02\x02\x02\xEA\xEB\x03\x02\x02\x02\xEB\x1B\x03\x02\x02\x02" + - "\xEC\xF1\x05\x1E\x10\x02\xED\xEE\x07$\x02\x02\xEE\xF0\x05\x1E\x10\x02" + - "\xEF\xED\x03\x02\x02\x02\xF0\xF3\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02" + - "\xF1\xF2\x03\x02\x02\x02\xF2\x1D\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + - "\xF4\xF5\x05\x16\f\x02\xF5\xF6\x07'\x02\x02\xF6\xF7\x05\xA6T\x02\xF7" + - "\x1F\x03\x02\x02\x02\xF8\xF9\x07\x1B\x02\x02\xF9\xFA\x05\x16\f\x02\xFA" + - '\xFE\x07-\x02\x02\xFB\xFD\x05"\x12\x02\xFC\xFB\x03\x02\x02\x02\xFD\u0100' + - "\x03\x02\x02\x02\xFE\xFC\x03\x02\x02\x02\xFE\xFF\x03\x02\x02\x02\xFF\u0101" + - "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0101\u0102\x07.\x02\x02\u0102" + - "!\x03\x02\x02\x02\u0103\u0106\x05$\x13\x02\u0104\u0106\x05&\x14\x02\u0105" + - "\u0103\x03\x02\x02\x02\u0105\u0104\x03\x02\x02\x02\u0106#\x03\x02\x02" + - "\x02\u0107\u0108\x05\x16\f\x02\u0108\u0109\x07'\x02\x02\u0109\u010A\x05" + - "\xA6T\x02\u010A\u010B\x07%\x02\x02\u010B%\x03\x02\x02\x02\u010C\u010D" + - "\x05\x16\f\x02\u010D\u010F\x07(\x02\x02\u010E\u0110\x05\x1C\x0F\x02\u010F" + - "\u010E\x03\x02\x02\x02\u010F\u0110\x03\x02\x02\x02\u0110\u0111\x03\x02" + - "\x02\x02\u0111\u0112\x07)\x02\x02\u0112\u0113\x07'\x02\x02\u0113\u0114" + - "\x05\xA6T\x02\u0114\u0115\x07%\x02\x02\u0115'\x03\x02\x02\x02\u0116\u0117" + - "\x07\x1A\x02\x02\u0117\u0118\x05\x16\f\x02\u0118\u011D\x07-\x02\x02\u0119" + - "\u011C\x05*\x16\x02\u011A\u011C\x07%\x02\x02\u011B\u0119\x03\x02\x02\x02" + - "\u011B\u011A\x03\x02\x02\x02\u011C\u011F\x03\x02\x02\x02\u011D\u011B\x03" + - "\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E\u0120\x03\x02\x02\x02\u011F" + - "\u011D\x03\x02\x02\x02\u0120\u0121\x07.\x02\x02\u0121)\x03\x02\x02\x02" + - "\u0122\u0126\x05,\x17\x02\u0123\u0126\x05.\x18\x02\u0124\u0126\x050\x19" + - "\x02\u0125\u0122\x03\x02\x02\x02\u0125\u0123\x03\x02\x02\x02\u0125\u0124" + - "\x03\x02\x02\x02\u0126+\x03\x02\x02\x02\u0127\u0128\x05\x16\f\x02\u0128" + - "\u0129\x07'\x02\x02\u0129\u012A\x05\xA6T\x02\u012A-\x03\x02\x02\x02\u012B" + - "\u012C\x05\x16\f\x02\u012C\u012E\x07(\x02\x02\u012D\u012F\x05\x1C\x0F" + - "\x02\u012E\u012D\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F\u0130" + - "\x03\x02\x02\x02\u0130\u0131\x07)\x02\x02\u0131\u0132\x07'\x02\x02\u0132" + - "\u0134\x05\xA6T\x02\u0133\u0135\x054\x1B\x02\u0134\u0133\x03\x02\x02\x02" + - "\u0134\u0135\x03\x02\x02\x02\u0135/\x03\x02\x02\x02\u0136\u0137\x07\x1C" + - "\x02\x02\u0137\u0139\x07(\x02\x02\u0138\u013A\x05\x1C\x0F\x02\u0139\u0138" + - "\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02" + - "\u013B\u013C\x07)\x02\x02\u013C\u013D\x054\x1B\x02\u013D1\x03\x02\x02" + - "\x02\u013E\u0145\x056\x1C\x02\u013F\u0145\x058\x1D\x02\u0140\u0145\x05" + - "@!\x02\u0141\u0145\x05H%\x02\u0142\u0145\x05J&\x02\u0143\u0145\x054\x1B" + - "\x02\u0144\u013E\x03\x02\x02\x02\u0144\u013F\x03\x02\x02\x02\u0144\u0140" + - "\x03\x02\x02\x02\u0144\u0141\x03\x02\x02\x02\u0144\u0142\x03\x02\x02\x02" + - "\u0144\u0143\x03\x02\x02\x02\u01453\x03\x02\x02\x02\u0146\u0147\x06\x1B" + - "\x02\x02\u0147\u0149\x07-\x02\x02\u0148\u014A\x05\b\x05\x02\u0149\u0148" + - "\x03\x02\x02\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014B\x03\x02\x02\x02" + - "\u014B\u014C\x07.\x02\x02\u014C5\x03\x02\x02\x02\u014D\u014E\b\x1C\x01" + - "\x02\u014E\u014F\x05\xA4S\x02\u014F\u0150\x07%\x02\x02\u0150\u0151\b\x1C" + - "\x01\x02\u01517\x03\x02\x02\x02\u0152\u0155\x05:\x1E\x02\u0153\u0155\x05" + - "<\x1F\x02\u0154\u0152\x03\x02\x02\x02\u0154\u0153\x03\x02\x02\x02\u0155" + - "9\x03\x02\x02\x02\u0156\u0157\x07\x12\x02\x02\u0157\u0158\x07(\x02\x02" + - "\u0158\u0159\x05\xA4S\x02\u0159\u015A\x07)\x02\x02\u015A\u015D\x052\x1A" + - "\x02\u015B\u015C\x07\x13\x02\x02\u015C\u015E\x052\x1A\x02\u015D\u015B" + - "\x03\x02\x02\x02\u015D\u015E\x03\x02\x02\x02\u015E;\x03\x02\x02\x02\u015F" + - "\u0160\x07\v\x02\x02\u0160\u0161\x07(\x02\x02\u0161\u0162\x05\xA4S\x02" + - "\u0162\u0163\x07)\x02\x02\u0163\u0167\x07-\x02\x02\u0164\u0166\x05> \x02" + - "\u0165\u0164\x03\x02\x02\x02\u0166\u0169\x03\x02\x02\x02\u0167\u0165\x03" + - "\x02\x02\x02\u0167\u0168\x03\x02\x02\x02\u0168\u016A\x03\x02\x02\x02\u0169" + - "\u0167\x03\x02\x02\x02\u016A\u016B\x07.\x02\x02\u016B=\x03\x02\x02\x02" + - "\u016C\u016D\x07\f\x02\x02\u016D\u016E\x05\xA4S\x02\u016E\u016F\x07'" + - "\x02\x02\u016F\u0170\x052\x1A\x02\u0170\u0175\x03\x02\x02\x02\u0171\u0172" + - "\x07\r\x02\x02\u0172\u0173\x07'\x02\x02\u0173\u0175\x052\x1A\x02\u0174" + - "\u016C\x03\x02\x02\x02\u0174\u0171\x03\x02\x02\x02\u0175?\x03\x02\x02" + - '\x02\u0176\u017A\x05B"\x02\u0177\u017A\x05D#\x02\u0178\u017A\x05F$\x02' + - "\u0179\u0176\x03\x02\x02\x02\u0179\u0177\x03\x02\x02\x02\u0179\u0178\x03" + - "\x02\x02\x02\u017AA\x03\x02\x02\x02\u017B\u017C\x07\x14\x02\x02\u017C" + - "\u0183\x07(\x02\x02\u017D\u0180\x05\x0E\b\x02\u017E\u0180\x05\xA4S\x02" + - "\u017F\u017D\x03\x02\x02\x02\u017F\u017E\x03\x02\x02\x02\u0180\u0181\x03" + - '\x02\x02\x02\u0181\u0182\b"\x01\x02\u0182\u0184\x03\x02\x02\x02\u0183' + - "\u017F\x03\x02\x02\x02\u0183\u0184\x03\x02\x02\x02\u0184\u0185\x03\x02" + - "\x02\x02\u0185\u0189\x07%\x02\x02\u0186\u0187\x05\xA4S\x02\u0187\u0188" + - '\b"\x01\x02\u0188\u018A\x03\x02\x02\x02\u0189\u0186\x03\x02\x02\x02\u0189' + - "\u018A\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02\u018B\u018F\x07%\x02" + - '\x02\u018C\u018D\x05\xA4S\x02\u018D\u018E\b"\x01\x02\u018E\u0190\x03' + - "\x02\x02\x02\u018F\u018C\x03\x02\x02\x02\u018F\u0190\x03\x02\x02\x02\u0190" + - "\u0191\x03\x02\x02\x02\u0191\u0192\x07)\x02\x02\u0192\u0193\x052\x1A\x02" + - "\u0193C\x03\x02\x02\x02\u0194\u0195\x07\x11\x02\x02\u0195\u0196\x07(\x02" + - "\x02\u0196\u0197\x05\xA4S\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05" + - "2\x1A\x02\u0199E\x03\x02\x02\x02\u019A\u019B\x07\x10\x02\x02\u019B\u019C" + - "\x052\x1A\x02\u019C\u019D\x07\x11\x02\x02\u019D\u019E\x07(\x02\x02\u019E" + - "\u019F\x05\xA4S\x02\u019F\u01A0\x07)\x02\x02\u01A0\u01A1\x07%\x02\x02" + - "\u01A1G\x03\x02\x02\x02\u01A2\u01A3\t\x03\x02\x02\u01A3\u01A4\x07%\x02" + - "\x02\u01A4I\x03\x02\x02\x02\u01A5\u01A7\x07\x17\x02\x02\u01A6\u01A8\x05" + - "\xA4S\x02\u01A7\u01A6\x03\x02\x02\x02\u01A7\u01A8\x03\x02\x02\x02\u01A8" + - "\u01A9\x03\x02\x02\x02\u01A9\u01AA\x07%\x02\x02\u01AAK\x03\x02\x02\x02" + - "\u01AB\u01B6\x05P)\x02\u01AC\u01B6\x05N(\x02\u01AD\u01B6\x05d3\x02\u01AE" + - "\u01B6\x05f4\x02\u01AF\u01B6\x05R*\x02\u01B0\u01B6\x05T+\x02\u01B1\u01B6" + - "\x05Z.\x02\u01B2\u01B6\x05\\/\x02\u01B3\u01B6\x05b2\x02\u01B4\u01B6\x05" + - "j6\x02\u01B5\u01AB\x03\x02\x02\x02\u01B5\u01AC\x03\x02\x02\x02\u01B5\u01AD" + - "\x03\x02\x02\x02\u01B5\u01AE\x03\x02\x02\x02\u01B5\u01AF\x03\x02\x02\x02" + - "\u01B5\u01B0\x03\x02\x02\x02\u01B5\u01B1\x03\x02\x02\x02\u01B5\u01B2\x03" + - "\x02\x02\x02\u01B5\u01B3\x03\x02\x02\x02\u01B5\u01B4\x03\x02\x02\x02\u01B6" + - "M\x03\x02\x02\x02\u01B7\u01B9\x07(\x02\x02\u01B8\u01BA\x05\x1C\x0F\x02" + - "\u01B9\u01B8\x03\x02\x02\x02\u01B9\u01BA\x03\x02\x02\x02\u01BA\u01BB\x03" + - "\x02\x02\x02\u01BB\u01BC\x07)\x02\x02\u01BC\u01BD\x07'\x02\x02\u01BD" + - "\u01BE\x05\xA6T\x02\u01BE\u01C1\x07\x19\x02\x02\u01BF\u01C2\x05\xA4S\x02" + - "\u01C0\u01C2\x054\x1B\x02\u01C1\u01BF\x03\x02\x02\x02\u01C1\u01C0\x03" + - "\x02\x02\x02\u01C2O\x03\x02\x02\x02\u01C3\u01C4\x07(\x02\x02\u01C4\u01C5" + - "\x05\xA4S\x02\u01C5\u01C6\x07)\x02\x02\u01C6Q\x03\x02\x02\x02\u01C7\u01C8" + - "\t\x04\x02\x02\u01C8S\x03\x02\x02\x02\u01C9\u01CA\x05V,\x02\u01CAU\x03" + - "\x02\x02\x02\u01CB\u01CC\x07N\x02\x02\u01CCW\x03\x02\x02\x02\u01CD\u01D0" + - "\x05V,\x02\u01CE\u01D0\x05Z.\x02\u01CF\u01CD\x03\x02\x02\x02\u01CF\u01CE" + - "\x03\x02\x02\x02\u01D0Y\x03\x02\x02\x02\u01D1\u01D2\t\x05\x02\x02\u01D2" + - "[\x03\x02\x02\x02\u01D3\u01D7\x07U\x02\x02\u01D4\u01D6\x05^0\x02\u01D5" + - "\u01D4\x03\x02\x02\x02\u01D6\u01D9\x03\x02\x02\x02\u01D7\u01D5\x03\x02" + - "\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8\u01DA\x03\x02\x02\x02\u01D9" + - "\u01D7\x03\x02\x02\x02\u01DA\u01E4\x07W\x02\x02\u01DB\u01DF\x07V\x02\x02" + - "\u01DC\u01DE\x05`1\x02\u01DD\u01DC\x03\x02\x02\x02\u01DE\u01E1\x03\x02" + - "\x02\x02\u01DF\u01DD\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0" + - "\u01E2\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E2\u01E4\x07Y\x02" + - "\x02\u01E3\u01D3\x03\x02\x02\x02\u01E3\u01DB\x03\x02\x02\x02\u01E4]\x03" + - "\x02\x02\x02\u01E5\u01EC\x07X\x02\x02\u01E6\u01E8\x07\x03\x02\x02\u01E7" + - "\u01E9\x05\xA4S\x02\u01E8\u01E7\x03\x02\x02\x02\u01E8\u01E9\x03\x02\x02" + - "\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EC\x07,\x02\x02\u01EB\u01E5" + - "\x03\x02\x02\x02\u01EB\u01E6\x03\x02\x02\x02\u01EC_\x03\x02\x02\x02\u01ED" + - "\u01F4\x07Z\x02\x02\u01EE\u01F0\x07\x03\x02\x02\u01EF\u01F1\x05\xA4S\x02" + - "\u01F0\u01EF\x03\x02\x02\x02\u01F0\u01F1\x03\x02\x02\x02\u01F1\u01F2\x03" + - "\x02\x02\x02\u01F2\u01F4\x07,\x02\x02\u01F3\u01ED\x03\x02\x02\x02\u01F3" + - "\u01EE\x03\x02\x02\x02\u01F4a\x03\x02\x02\x02\u01F5\u01F6\t\x06\x02\x02" + - "\u01F6c\x03\x02\x02\x02\u01F7\u0200\x07*\x02\x02\u01F8\u01FD\x05\xA4S" + - "\x02\u01F9\u01FA\x07$\x02\x02\u01FA\u01FC\x05\xA4S\x02\u01FB\u01F9\x03" + - "\x02\x02\x02\u01FC\u01FF\x03\x02\x02\x02\u01FD\u01FB\x03\x02\x02\x02\u01FD" + - "\u01FE\x03\x02\x02\x02\u01FE\u0201\x03\x02\x02\x02\u01FF\u01FD\x03\x02" + - "\x02\x02\u0200\u01F8\x03\x02\x02\x02\u0200\u0201\x03\x02\x02\x02\u0201" + - "\u0203\x03\x02\x02\x02\u0202\u0204\x07$\x02\x02\u0203\u0202\x03\x02\x02" + - "\x02\u0203\u0204\x03\x02\x02\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0206" + - "\x07+\x02\x02\u0206e\x03\x02\x02\x02\u0207\u0210\x07-\x02\x02\u0208\u020D" + - "\x05h5\x02\u0209\u020A\x07$\x02\x02\u020A\u020C\x05h5\x02\u020B\u0209" + - "\x03\x02\x02\x02\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02" + - "\u020D\u020E\x03\x02\x02\x02"; + "X\tX\x04Y\tY\x03\x02\x05\x02\xB4\n\x02\x03\x02\x03\x02\x03\x03\x06\x03" + + "\xB9\n\x03\r\x03\x0E\x03\xBA\x03\x04\x03\x04\x03\x05\x06\x05\xC0\n\x05" + + "\r\x05\x0E\x05\xC1\x03\x06\x03\x06\x03\x06\x05\x06\xC7\n\x06\x03\x07\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\xCF\n\x07\x03\b\x03\b\x03" + + "\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xDB\n\n\x03\v\x03\v" + + "\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE7\n" + + "\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xED\n\x0E\x03\x0F\x03\x0F" + + "\x03\x0F\x07\x0F\xF2\n\x0F\f\x0F\x0E\x0F\xF5\v\x0F\x03\x10\x03\x10\x03" + + "\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\xFF\n\x11\f\x11\x0E" + + "\x11\u0102\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0108\n\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0112" + + "\n\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x03\x15\x07\x15\u011E\n\x15\f\x15\x0E\x15\u0121\v\x15\x03\x15" + + "\x03\x15\x03\x16\x03\x16\x03\x16\x05\x16\u0128\n\x16\x03\x17\x03\x17\x03" + + "\x17\x03\x17\x03\x18\x03\x18\x03\x18\x05\x18\u0131\n\x18\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x05\x18\u0137\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u013C" + + "\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + + "\x03\x1A\x05\x1A\u0147\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u014C\n\x1B" + + "\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D" + + "\x05\x1D\u0157\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + + "\x1E\x05\x1E\u0160\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F" + + "\x07\x1F\u0168\n\x1F\f\x1F\x0E\x1F\u016B\v\x1F\x03\x1F\x03\x1F\x03 \x03" + + " \x03 \x03 \x03 \x03 \x03 \x03 \x05 \u0177\n \x03!\x03!\x03!\x05!\u017C" + + "\n!\x03\"\x03\"\x03\"\x03\"\x05\"\u0182\n\"\x03\"\x03\"\x05\"\u0186\n" + + "\"\x03\"\x03\"\x03\"\x03\"\x05\"\u018C\n\"\x03\"\x03\"\x03\"\x03\"\x05" + + "\"\u0192\n\"\x03\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03" + + "$\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01AA\n" + + "&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03" + + "\'\x05\'\u01B8\n\'\x03(\x03(\x05(\u01BC\n(\x03(\x03(\x03(\x03(\x03(\x03" + + "(\x05(\u01C4\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03" + + "-\x03-\x05-\u01D2\n-\x03.\x03.\x03/\x03/\x07/\u01D8\n/\f/\x0E/\u01DB\v" + + "/\x03/\x03/\x03/\x07/\u01E0\n/\f/\x0E/\u01E3\v/\x03/\x05/\u01E6\n/\x03" + + "0\x030\x030\x050\u01EB\n0\x030\x050\u01EE\n0\x031\x031\x031\x051\u01F3" + + "\n1\x031\x051\u01F6\n1\x032\x032\x033\x033\x033\x033\x073\u01FE\n3\f3" + + "\x0E3\u0201\v3\x053\u0203\n3\x033\x053\u0206\n3\x033\x033\x034\x034\x03" + + "4\x034\x074\u020E\n4\f4\x0E4\u0211\v4\x054\u0213\n4\x034\x054\u0216\n" + + "4\x034\x034\x035\x035\x035\x035\x036\x036\x037\x037\x037\x037\x037\x03" + + "7\x057\u0226\n7\x037\x037\x037\x037\x037\x037\x037\x057\u022F\n7\x037" + + "\x037\x037\x057\u0234\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037" + + "\x037\x037\x037\x037\x037\x037\x057\u0245\n7\x037\x037\x077\u0249\n7\f" + + "7\x0E7\u024C\v7\x038\x038\x038\x078\u0251\n8\f8\x0E8\u0254\v8\x039\x03" + + "9\x039\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x05;\u0261\n;\x03;\x03" + + ";\x03;\x03;\x05;\u0267\n;\x03;\x03;\x03<\x03<\x03<\x05<\u026E\n<\x03=" + + "\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?\x05?\u0279\n?\x03@\x03@\x03@" + + "\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u028A" + + "\nD\x03E\x03E\x03E\x03E\x03E\x03E\x07E\u0292\nE\fE\x0EE\u0295\vE\x03F" + + "\x03F\x03F\x03F\x03F\x03F\x07F\u029D\nF\fF\x0EF\u02A0\vF\x03G\x03G\x03" + + "G\x03G\x03G\x03G\x03G\x07G\u02A9\nG\fG\x0EG\u02AC\vG\x03H\x03H\x03I\x03" + + "I\x03I\x03I\x03I\x03I\x07I\u02B6\nI\fI\x0EI\u02B9\vI\x03J\x03J\x03J\x03" + + "J\x03J\x03J\x07J\u02C1\nJ\fJ\x0EJ\u02C4\vJ\x03K\x03K\x03K\x03K\x03K\x03" + + "K\x07K\u02CC\nK\fK\x0EK\u02CF\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D7" + + "\nL\fL\x0EL\u02DA\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E2\nM\fM\x0E" + + "M\u02E5\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02ED\nN\fN\x0EN\u02F0\v" + + "N\x03O\x03O\x03O\x03O\x03O\x03O\x07O\u02F8\nO\fO\x0EO\u02FB\vO\x03P\x03" + + "P\x03P\x03P\x03P\x03P\x03P\x05P\u0304\nP\x03Q\x03Q\x03Q\x03Q\x03Q\x05" + + "Q\u030B\nQ\x03R\x03R\x03S\x03S\x03S\x07S\u0312\nS\fS\x0ES\u0315\vS\x03" + + "T\x03T\x03T\x05T\u031A\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x07V\u0323" + + "\nV\fV\x0EV\u0326\vV\x05V\u0328\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W" + + "\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x02\x02\rl\x88\x8A\x8C\x90\x92\x94" + + "\x96\x98\x9A\x9CZ\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10" + + "\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02" + + "$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02" + + "@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02" + + "\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02" + + "x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C" + + "\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E" + + "\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0" + + "\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02QR\x04" + + "\x02PPSS\x03\x02\"$\x04\x021133\x06\x020022::JJ\x03\x0247\x04\x020022" + + "\x03\x02KM\x03\x02CF\x03\x02AB\x03\x02;@\x04\x02\"$OO\x02\u0340\x02\xB3" + + "\x03\x02\x02\x02\x04\xB8\x03\x02\x02\x02\x06\xBC\x03\x02\x02\x02\b\xBF" + + "\x03\x02\x02\x02\n\xC6\x03\x02\x02\x02\f\xCE\x03\x02\x02\x02\x0E\xD0\x03" + + "\x02\x02\x02\x10\xD3\x03\x02\x02\x02\x12\xD5\x03\x02\x02\x02\x14\xDC\x03" + + "\x02\x02\x02\x16\xDE\x03\x02\x02\x02\x18\xE0\x03\x02\x02\x02\x1A\xE2\x03" + + "\x02\x02\x02\x1C\xEE\x03\x02\x02\x02\x1E\xF6\x03\x02\x02\x02 \xFA\x03" + + "\x02\x02\x02\"\u0107\x03\x02\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03" + + "\x02\x02\x02(\u0118\x03\x02\x02\x02*\u0127\x03\x02\x02\x02,\u0129\x03" + + "\x02\x02\x02.\u012D\x03\x02\x02\x020\u0138\x03\x02\x02\x022\u0146\x03" + + "\x02\x02\x024\u0148\x03\x02\x02\x026\u014F\x03\x02\x02\x028\u0156\x03" + + "\x02\x02\x02:\u0158\x03\x02\x02\x02<\u0161\x03\x02\x02\x02>\u0176\x03" + + "\x02\x02\x02@\u017B\x03\x02\x02\x02B\u017D\x03\x02\x02\x02D\u0196\x03" + + "\x02\x02\x02F\u019C\x03\x02\x02\x02H\u01A4\x03\x02\x02\x02J\u01A7\x03" + + "\x02\x02\x02L\u01B7\x03\x02\x02\x02N\u01B9\x03\x02\x02\x02P\u01C5\x03" + + "\x02\x02\x02R\u01C9\x03\x02\x02\x02T\u01CB\x03\x02\x02\x02V\u01CD\x03" + + "\x02\x02\x02X\u01D1\x03\x02\x02\x02Z\u01D3\x03\x02\x02\x02\\\u01E5\x03" + + "\x02\x02\x02^\u01ED\x03\x02\x02\x02`\u01F5\x03\x02\x02\x02b\u01F7\x03" + + "\x02\x02\x02d\u01F9\x03\x02\x02\x02f\u0209\x03\x02\x02\x02h\u0219\x03" + + "\x02\x02\x02j\u021D\x03\x02\x02\x02l\u0233\x03\x02\x02\x02n\u024D\x03" + + "\x02\x02\x02p\u0255\x03\x02\x02\x02r\u0258\x03\x02\x02\x02t\u025C\x03" + + "\x02\x02\x02v\u026D\x03\x02\x02\x02x\u026F\x03\x02\x02\x02z\u0272\x03" + + "\x02\x02\x02|\u0278\x03\x02\x02\x02~\u027A\x03\x02\x02\x02\x80\u027D\x03" + + "\x02\x02\x02\x82\u0280\x03\x02\x02\x02\x84\u0282\x03\x02\x02\x02\x86\u0289" + + "\x03\x02\x02\x02\x88\u028B\x03\x02\x02\x02\x8A\u0296\x03\x02\x02\x02\x8C" + + "\u02A1\x03\x02\x02\x02\x8E\u02AD\x03\x02\x02\x02\x90\u02AF\x03\x02\x02" + + "\x02\x92\u02BA\x03\x02\x02\x02\x94\u02C5\x03\x02\x02\x02\x96\u02D0\x03" + + "\x02\x02\x02\x98\u02DB\x03\x02\x02\x02\x9A\u02E6\x03\x02\x02\x02\x9C\u02F1" + + "\x03\x02\x02\x02\x9E\u0303\x03\x02\x02\x02\xA0\u030A\x03\x02\x02\x02\xA2" + + "\u030C\x03\x02\x02\x02\xA4\u030E\x03\x02\x02\x02\xA6\u0319\x03\x02\x02" + + "\x02\xA8\u031B\x03\x02\x02\x02\xAA\u031D\x03\x02\x02\x02\xAC\u032B\x03" + + "\x02\x02\x02\xAE\u0330\x03\x02\x02\x02\xB0\u0332\x03\x02\x02\x02\xB2\xB4" + + "\x05\x04\x03\x02\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\xB5" + + "\x03\x02\x02\x02\xB5\xB6\x07\x02\x02\x03\xB6\x03\x03\x02\x02\x02\xB7\xB9" + + "\x05\x06\x04\x02\xB8\xB7\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xB8" + + "\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB\x05\x03\x02\x02\x02\xBC\xBD" + + "\x05\b\x05\x02\xBD\x07\x03\x02\x02\x02\xBE\xC0\x05\n\x06\x02\xBF\xBE\x03" + + "\x02\x02\x02\xC0\xC1\x03\x02\x02\x02\xC1\xBF\x03\x02\x02\x02\xC1\xC2\x03" + + "\x02\x02\x02\xC2\t\x03\x02\x02\x02\xC3\xC7\x052\x1A\x02\xC4\xC7\x05\f" + + "\x07\x02\xC5\xC7\x07&\x02\x02\xC6\xC3\x03\x02\x02\x02\xC6\xC4\x03\x02" + + "\x02\x02\xC6\xC5\x03\x02\x02\x02\xC7\v\x03\x02\x02\x02\xC8\xC9\x05\x0E" + + "\b\x02\xC9\xCA\x07&\x02\x02\xCA\xCF\x03\x02\x02\x02\xCB\xCF\x05\x1A\x0E" + + "\x02\xCC\xCF\x05 \x11\x02\xCD\xCF\x05(\x15\x02\xCE\xC8\x03\x02\x02\x02" + + "\xCE\xCB\x03\x02\x02\x02\xCE\xCC\x03\x02\x02\x02\xCE\xCD\x03\x02\x02\x02" + + "\xCF\r\x03\x02\x02\x02\xD0\xD1\x05\x10\t\x02\xD1\xD2\x05\x12\n\x02\xD2" + + "\x0F\x03\x02\x02\x02\xD3\xD4\t\x02\x02\x02\xD4\x11\x03\x02\x02\x02\xD5" + + "\xD6\x05\x16\f\x02\xD6\xD7\x07(\x02\x02\xD7\xDA\x05\xA6T\x02\xD8\xD9\x07" + + ";\x02\x02\xD9\xDB\x05\x14\v\x02\xDA\xD8\x03\x02\x02\x02\xDA\xDB\x03\x02" + + "\x02\x02\xDB\x13\x03\x02\x02\x02\xDC\xDD\x05\xA0Q\x02\xDD\x15\x03\x02" + + "\x02\x02\xDE\xDF\x05\x18\r\x02\xDF\x17\x03\x02\x02\x02\xE0\xE1\x07O\x02" + + "\x02\xE1\x19\x03\x02\x02\x02\xE2\xE3\x07\x16\x02\x02\xE3\xE4\x05\x16\f" + + "\x02\xE4\xE6\x07)\x02\x02\xE5\xE7\x05\x1C\x0F\x02\xE6\xE5\x03\x02\x02" + + "\x02\xE6\xE7\x03\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x07*\x02" + + "\x02\xE9\xEA\x07\x19\x02\x02\xEA\xEC\x05\xA6T\x02\xEB\xED\x054\x1B\x02" + + "\xEC\xEB\x03\x02\x02\x02\xEC\xED\x03\x02\x02\x02\xED\x1B\x03\x02\x02\x02" + + "\xEE\xF3\x05\x1E\x10\x02\xEF\xF0\x07%\x02\x02\xF0\xF2\x05\x1E\x10\x02" + + "\xF1\xEF\x03\x02\x02\x02\xF2\xF5\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + + "\xF3\xF4\x03\x02\x02\x02\xF4\x1D\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + + "\xF6\xF7\x05\x16\f\x02\xF7\xF8\x07(\x02\x02\xF8\xF9\x05\xA6T\x02\xF9\x1F" + + "\x03\x02\x02\x02\xFA\xFB\x07\x1B\x02\x02\xFB\xFC\x05\x16\f\x02\xFC\u0100" + + "\x07.\x02\x02\xFD\xFF\x05\"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102" + + "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02" + + "\u0101\u0103\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0103\u0104\x07" + + "/\x02\x02\u0104!\x03\x02\x02\x02\u0105\u0108\x05$\x13\x02\u0106\u0108" + + "\x05&\x14\x02\u0107\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02" + + "\u0108#\x03\x02\x02\x02\u0109\u010A\x05\x16\f\x02\u010A\u010B\x07(\x02" + + "\x02\u010B\u010C\x05\xA6T\x02\u010C\u010D\x07&\x02\x02\u010D%\x03\x02" + + "\x02\x02\u010E\u010F\x05\x16\f\x02\u010F\u0111\x07)\x02\x02\u0110\u0112" + + "\x05\x1C\x0F\x02\u0111\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02" + + "\u0112\u0113\x03\x02\x02\x02\u0113\u0114\x07*\x02\x02\u0114\u0115\x07" + + "(\x02\x02\u0115\u0116\x05\xA6T\x02\u0116\u0117\x07&\x02\x02\u0117\'\x03" + + "\x02\x02\x02\u0118\u0119\x07\x1A\x02\x02\u0119\u011A\x05\x16\f\x02\u011A" + + "\u011F\x07.\x02\x02\u011B\u011E\x05*\x16\x02\u011C\u011E\x07&\x02\x02" + + "\u011D\u011B\x03\x02\x02\x02\u011D\u011C\x03\x02\x02\x02\u011E\u0121\x03" + + "\x02\x02\x02\u011F\u011D\x03\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120" + + "\u0122\x03\x02\x02\x02\u0121\u011F\x03\x02\x02\x02\u0122\u0123\x07/\x02" + + "\x02\u0123)\x03\x02\x02\x02\u0124\u0128\x05,\x17\x02\u0125\u0128\x05." + + "\x18\x02\u0126\u0128\x050\x19\x02\u0127\u0124\x03\x02\x02\x02\u0127\u0125" + + "\x03\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128+\x03\x02\x02\x02\u0129" + + "\u012A\x05\x16\f\x02\u012A\u012B\x07(\x02\x02\u012B\u012C\x05\xA6T\x02" + + "\u012C-\x03\x02\x02\x02\u012D\u012E\x05\x16\f\x02\u012E\u0130\x07)\x02" + + "\x02\u012F\u0131\x05\x1C\x0F\x02\u0130\u012F\x03\x02\x02\x02\u0130\u0131" + + "\x03\x02\x02\x02\u0131\u0132\x03\x02\x02\x02\u0132\u0133\x07*\x02\x02" + + "\u0133\u0134\x07(\x02\x02\u0134\u0136\x05\xA6T\x02\u0135\u0137\x054\x1B" + + "\x02\u0136\u0135\x03\x02\x02\x02\u0136\u0137\x03\x02\x02\x02\u0137/\x03" + + "\x02\x02\x02\u0138\u0139\x07\x1C\x02\x02\u0139\u013B\x07)\x02\x02\u013A" + + "\u013C\x05\x1C\x0F\x02\u013B\u013A\x03\x02\x02\x02\u013B\u013C\x03\x02" + + "\x02\x02\u013C\u013D\x03\x02\x02\x02\u013D\u013E\x07*\x02\x02\u013E\u013F" + + "\x054\x1B\x02\u013F1\x03\x02\x02\x02\u0140\u0147\x056\x1C\x02\u0141\u0147" + + "\x058\x1D\x02\u0142\u0147\x05@!\x02\u0143\u0147\x05H%\x02\u0144\u0147" + + "\x05J&\x02\u0145\u0147\x054\x1B\x02\u0146\u0140\x03\x02\x02\x02\u0146" + + "\u0141\x03\x02\x02\x02\u0146\u0142\x03\x02\x02\x02\u0146\u0143\x03\x02" + + "\x02\x02\u0146\u0144\x03\x02\x02\x02\u0146\u0145\x03\x02\x02\x02\u0147" + + "3\x03\x02\x02\x02\u0148\u0149\x06\x1B\x02\x02\u0149\u014B\x07.\x02\x02" + + "\u014A\u014C\x05\b\x05\x02\u014B\u014A\x03\x02\x02\x02\u014B\u014C\x03" + + "\x02\x02\x02\u014C\u014D\x03\x02\x02\x02\u014D\u014E\x07/\x02\x02\u014E" + + "5\x03\x02\x02\x02\u014F\u0150\b\x1C\x01\x02\u0150\u0151\x05\xA4S\x02\u0151" + + "\u0152\x07&\x02\x02\u0152\u0153\b\x1C\x01\x02\u01537\x03\x02\x02\x02\u0154" + + "\u0157\x05:\x1E\x02\u0155\u0157\x05<\x1F\x02\u0156\u0154\x03\x02\x02\x02" + + "\u0156\u0155\x03\x02\x02\x02\u01579\x03\x02\x02\x02\u0158\u0159\x07\x12" + + "\x02\x02\u0159\u015A\x07)\x02\x02\u015A\u015B\x05\xA4S\x02\u015B\u015C" + + "\x07*\x02\x02\u015C\u015F\x052\x1A\x02\u015D\u015E\x07\x13\x02\x02\u015E" + + "\u0160\x052\x1A\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02" + + "\x02\u0160;\x03\x02\x02\x02\u0161\u0162\x07\v\x02\x02\u0162\u0163\x07" + + ")\x02\x02\u0163\u0164\x05\xA4S\x02\u0164\u0165\x07*\x02\x02\u0165\u0169" + + "\x07.\x02\x02\u0166\u0168\x05> \x02\u0167\u0166\x03\x02\x02\x02\u0168" + + "\u016B\x03\x02\x02\x02\u0169\u0167\x03\x02\x02\x02\u0169\u016A\x03\x02" + + "\x02\x02\u016A\u016C\x03\x02\x02\x02\u016B\u0169\x03\x02\x02\x02\u016C" + + "\u016D\x07/\x02\x02\u016D=\x03\x02\x02\x02\u016E\u016F\x07\f\x02\x02\u016F" + + "\u0170\x05\xA4S\x02\u0170\u0171\x07(\x02\x02\u0171\u0172\x052\x1A\x02" + + "\u0172\u0177\x03\x02\x02\x02\u0173\u0174\x07\r\x02\x02\u0174\u0175\x07" + + "(\x02\x02\u0175\u0177\x052\x1A\x02\u0176\u016E\x03\x02\x02\x02\u0176\u0173" + + "\x03\x02\x02\x02\u0177?\x03\x02\x02\x02\u0178\u017C\x05B\"\x02\u0179\u017C" + + "\x05D#\x02\u017A\u017C\x05F$\x02\u017B\u0178\x03\x02\x02\x02\u017B\u0179" + + "\x03\x02\x02\x02\u017B\u017A\x03\x02\x02\x02\u017CA\x03\x02\x02\x02\u017D" + + "\u017E\x07\x14\x02\x02\u017E\u0185\x07)\x02\x02\u017F\u0182\x05\x0E\b" + + "\x02\u0180\u0182\x05\xA4S\x02\u0181\u017F\x03\x02\x02\x02\u0181\u0180" + + "\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0184\b\"\x01\x02\u0184" + + "\u0186\x03\x02\x02\x02\u0185\u0181\x03\x02\x02\x02\u0185\u0186\x03\x02" + + "\x02\x02\u0186\u0187\x03\x02\x02\x02\u0187\u018B\x07&\x02\x02\u0188\u0189" + + "\x05\xA4S\x02\u0189\u018A\b\"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B" + + "\u0188\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C\u018D\x03\x02" + + "\x02\x02\u018D\u0191\x07&\x02\x02\u018E\u018F\x05\xA4S\x02\u018F\u0190" + + "\b\"\x01\x02\u0190\u0192\x03\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191" + + "\u0192\x03\x02\x02\x02\u0192\u0193\x03\x02\x02\x02\u0193\u0194\x07*\x02" + + "\x02\u0194\u0195\x052\x1A\x02\u0195C\x03\x02\x02\x02\u0196\u0197\x07\x11" + + "\x02\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05\xA4S\x02\u0199\u019A" + + "\x07*\x02\x02\u019A\u019B\x052\x1A\x02\u019BE\x03\x02\x02\x02\u019C\u019D" + + "\x07\x10\x02\x02\u019D\u019E\x052\x1A\x02\u019E\u019F\x07\x11\x02\x02" + + "\u019F\u01A0\x07)\x02\x02\u01A0\u01A1\x05\xA4S\x02\u01A1\u01A2\x07*\x02" + + "\x02\u01A2\u01A3\x07&\x02\x02\u01A3G\x03\x02\x02\x02\u01A4\u01A5\t\x03" + + "\x02\x02\u01A5\u01A6\x07&\x02\x02\u01A6I\x03\x02\x02\x02\u01A7\u01A9\x07" + + "\x17\x02\x02\u01A8\u01AA\x05\xA4S\x02\u01A9\u01A8\x03\x02\x02\x02\u01A9" + + "\u01AA\x03\x02\x02\x02\u01AA\u01AB\x03\x02\x02\x02\u01AB\u01AC\x07&\x02" + + "\x02\u01ACK\x03\x02\x02\x02\u01AD\u01B8\x05P)\x02\u01AE\u01B8\x05N(\x02" + + "\u01AF\u01B8\x05d3\x02\u01B0\u01B8\x05f4\x02\u01B1\u01B8\x05R*\x02\u01B2" + + "\u01B8\x05T+\x02\u01B3\u01B8\x05Z.\x02\u01B4\u01B8\x05\\/\x02\u01B5\u01B8" + + "\x05b2\x02\u01B6\u01B8\x05j6\x02\u01B7\u01AD\x03\x02\x02\x02\u01B7\u01AE" + + "\x03\x02\x02\x02\u01B7\u01AF\x03\x02\x02\x02\u01B7\u01B0\x03\x02\x02\x02" + + "\u01B7\u01B1\x03\x02\x02\x02\u01B7\u01B2\x03\x02\x02\x02\u01B7\u01B3\x03" + + "\x02\x02\x02\u01B7\u01B4\x03\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7" + + "\u01B6\x03\x02\x02\x02\u01B8M\x03\x02\x02\x02\u01B9\u01BB\x07)\x02\x02" + + "\u01BA\u01BC\x05\x1C\x0F\x02\u01BB\u01BA\x03\x02\x02\x02\u01BB\u01BC\x03" + + "\x02\x02\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01BE\x07*\x02\x02\u01BE" + + "\u01BF\x07(\x02\x02\u01BF\u01C0\x05\xA6T\x02\u01C0\u01C3\x07\x19\x02\x02" + + "\u01C1\u01C4\x05\xA4S\x02\u01C2\u01C4\x054\x1B\x02\u01C3\u01C1\x03\x02" + + "\x02\x02\u01C3\u01C2\x03\x02\x02\x02\u01C4O\x03\x02\x02\x02\u01C5\u01C6" + + "\x07)\x02\x02\u01C6\u01C7\x05\xA4S\x02\u01C7\u01C8\x07*\x02\x02\u01C8" + + "Q\x03\x02\x02\x02\u01C9\u01CA\t\x04\x02\x02\u01CAS\x03\x02\x02\x02\u01CB" + + "\u01CC\x05V,\x02\u01CCU\x03\x02\x02\x02\u01CD\u01CE\x07O\x02\x02\u01CE" + + "W\x03\x02\x02\x02\u01CF\u01D2\x05V,\x02\u01D0\u01D2\x05Z.\x02\u01D1\u01CF" + + "\x03\x02\x02\x02\u01D1\u01D0\x03\x02\x02\x02\u01D2Y\x03\x02\x02\x02\u01D3" + + "\u01D4\t\x05\x02\x02\u01D4[\x03\x02\x02\x02\u01D5\u01D9\x07V\x02\x02\u01D6" + + "\u01D8\x05^0\x02\u01D7\u01D6\x03\x02\x02\x02\u01D8\u01DB\x03\x02\x02\x02" + + "\u01D9\u01D7\x03\x02\x02\x02\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01DC\x03" + + "\x02\x02\x02\u01DB\u01D9\x03\x02\x02\x02\u01DC\u01E6\x07X\x02\x02\u01DD" + + "\u01E1\x07W\x02\x02\u01DE\u01E0\x05`1\x02\u01DF\u01DE\x03\x02\x02\x02" + + "\u01E0\u01E3\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E1\u01E2\x03" + + "\x02\x02\x02\u01E2\u01E4\x03\x02\x02\x02\u01E3\u01E1\x03\x02\x02\x02\u01E4" + + "\u01E6\x07Z\x02\x02\u01E5\u01D5\x03\x02\x02\x02\u01E5\u01DD\x03\x02\x02" + + "\x02\u01E6]\x03\x02\x02\x02\u01E7\u01EE\x07Y\x02\x02\u01E8\u01EA\x07\x03" + + "\x02\x02\u01E9\u01EB\x05\xA4S\x02\u01EA\u01E9\x03\x02\x02\x02\u01EA\u01EB" + + "\x03\x02\x02\x02\u01EB\u01EC\x03\x02\x02\x02\u01EC\u01EE\x07-\x02\x02" + + "\u01ED\u01E7\x03\x02\x02\x02\u01ED\u01E8\x03\x02\x02\x02\u01EE_\x03\x02" + + "\x02\x02\u01EF\u01F6\x07[\x02\x02\u01F0\u01F2\x07\x03\x02\x02\u01F1\u01F3" + + "\x05\xA4S\x02\u01F2\u01F1\x03\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02" + + "\u01F3\u01F4\x03\x02\x02\x02\u01F4\u01F6\x07-\x02\x02\u01F5\u01EF\x03" + + "\x02\x02\x02\u01F5\u01F0\x03\x02\x02\x02\u01F6a\x03\x02\x02\x02\u01F7" + + "\u01F8\t\x06\x02\x02\u01F8c\x03\x02\x02\x02\u01F9\u0202\x07+\x02\x02\u01FA" + + "\u01FF\x05\xA4S\x02\u01FB\u01FC\x07%\x02\x02\u01FC\u01FE\x05\xA4S\x02" + + "\u01FD\u01FB\x03\x02\x02\x02\u01FE\u0201\x03\x02\x02\x02\u01FF\u01FD\x03" + + "\x02\x02\x02\u01FF\u0200\x03\x02\x02\x02\u0200\u0203\x03\x02\x02\x02\u0201" + + "\u01FF\x03\x02\x02\x02\u0202\u01FA\x03\x02\x02\x02\u0202\u0203\x03\x02" + + "\x02\x02\u0203\u0205\x03\x02\x02\x02\u0204\u0206\x07%\x02\x02\u0205\u0204" + + "\x03\x02\x02\x02\u0205\u0206\x03\x02\x02\x02\u0206\u0207\x03\x02\x02\x02" + + "\u0207\u0208\x07,\x02\x02\u0208e\x03\x02\x02\x02\u0209\u0212\x07.\x02" + + "\x02\u020A\u020F\x05h5\x02\u020B\u020C\x07%\x02\x02\u020C\u020E\x05h5" + + "\x02\u020D\u020B\x03\x02"; private static readonly _serializedATNSegment1: string = - "\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u0210\u0208\x03" + - "\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0213\x03\x02\x02\x02\u0212" + - "\u0214\x07$\x02\x02\u0213\u0212\x03\x02\x02\x02\u0213\u0214\x03\x02\x02" + - "\x02\u0214\u0215\x03\x02\x02\x02\u0215\u0216\x07.\x02\x02\u0216g\x03\x02" + - "\x02\x02\u0217\u0218\x05X-\x02\u0218\u0219\x07'\x02\x02\u0219\u021A\x05" + - "\xA4S\x02\u021Ai\x03\x02\x02\x02\u021B\u021C\t\x07\x02\x02\u021Ck\x03" + - "\x02\x02\x02\u021D\u021E\b7\x01\x02\u021E\u0232\x05L'\x02\u021F\u0220" + - "\x07\x18\x02\x02\u0220\u0221\x05l7\x02\u0221\u0223\x07(\x02\x02\u0222" + - "\u0224\x05n8\x02\u0223\u0222\x03\x02\x02\x02\u0223\u0224\x03\x02\x02\x02" + - "\u0224\u0225\x03\x02\x02\x02\u0225\u0226\x07)\x02\x02\u0226\u0227\b7\x01" + - "\x02\u0227\u0232\x03\x02\x02\x02\u0228\u0229\x07\x1D\x02\x02\u0229\u022A" + - "\x05\xA6T\x02\u022A\u022C\x07(\x02\x02\u022B\u022D\x05n8\x02\u022C\u022B" + - "\x03\x02\x02\x02\u022C\u022D\x03\x02\x02\x02\u022D\u022E\x03\x02\x02\x02" + - "\u022E\u022F\x07)\x02\x02\u022F\u0230\b7\x01\x02\u0230\u0232\x03\x02\x02" + - "\x02\u0231\u021D\x03\x02\x02\x02\u0231\u021F\x03\x02\x02\x02\u0231\u0228" + - "\x03\x02\x02\x02\u0232\u0248\x03\x02\x02\x02\u0233\u0234\f\b\x02\x02\u0234" + - "\u0235\x05p9\x02\u0235\u0236\b7\x01\x02\u0236\u0247\x03\x02\x02\x02\u0237" + - "\u0238\f\x07\x02\x02\u0238\u0239\x05r:\x02\u0239\u023A\b7\x01\x02\u023A" + - "\u0247\x03\x02\x02\x02\u023B\u023C\f\x06\x02\x02\u023C\u023D\x05t;\x02" + - "\u023D\u023E\b7\x01\x02\u023E\u0247\x03\x02\x02\x02\u023F\u0240\f\x05" + - "\x02\x02\u0240\u0242\x07(\x02\x02\u0241\u0243\x05n8\x02\u0242\u0241\x03" + - "\x02\x02\x02\u0242\u0243\x03\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244" + - "\u0245\x07)\x02\x02\u0245\u0247\b7\x01\x02\u0246\u0233\x03\x02\x02\x02" + - "\u0246\u0237\x03\x02\x02\x02\u0246\u023B\x03\x02\x02\x02\u0246\u023F\x03" + - "\x02\x02\x02\u0247\u024A\x03\x02\x02\x02\u0248\u0246\x03\x02\x02\x02\u0248" + - "\u0249\x03\x02\x02\x02\u0249m\x03\x02\x02\x02\u024A\u0248\x03\x02\x02" + - "\x02\u024B\u0250\x05\xA0Q\x02\u024C\u024D\x07$\x02\x02\u024D\u024F\x05" + - "\xA0Q\x02\u024E\u024C\x03\x02\x02\x02\u024F\u0252\x03\x02\x02\x02\u0250" + - "\u024E\x03\x02\x02\x02\u0250\u0251\x03\x02\x02\x02\u0251o\x03\x02\x02" + - "\x02\u0252\u0250\x03\x02\x02\x02\u0253\u0254\x07M\x02\x02\u0254\u0255" + - "\x05V,\x02\u0255q\x03\x02\x02\x02\u0256\u0257\x07*\x02\x02\u0257\u0258" + - "\x05\xA4S\x02\u0258\u0259\x07+\x02\x02\u0259s\x03\x02\x02\x02\u025A\u025E" + - "\x07*\x02\x02\u025B\u025C\x05\xA4S\x02\u025C\u025D\b;\x01\x02\u025D\u025F" + - "\x03\x02\x02\x02\u025E\u025B\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02" + - "\u025F\u0260\x03\x02\x02\x02\u0260\u0264\x07'\x02\x02\u0261\u0262\x05" + - "\xA4S\x02\u0262\u0263\b;\x01\x02\u0263\u0265\x03\x02\x02\x02\u0264\u0261" + - "\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02" + - "\u0266\u0267\x07+\x02\x02\u0267u\x03\x02\x02\x02\u0268\u026C\x05l7\x02" + - "\u0269\u026C\x05x=\x02\u026A\u026C\x05z>\x02\u026B\u0268\x03\x02\x02\x02" + - "\u026B\u0269\x03\x02\x02\x02\u026B\u026A\x03\x02\x02\x02\u026Cw\x03\x02" + - "\x02\x02\u026D\u026E\x05l7\x02\u026E\u026F\x05\x82B\x02\u026Fy\x03\x02" + - "\x02\x02\u0270\u0271\x07 \x02\x02\u0271\u0272\x05\xA0Q\x02\u0272{\x03" + - "\x02\x02\x02\u0273\u0277\x05v<\x02\u0274\u0277\x05~@\x02\u0275\u0277\x05" + - "\x80A\x02\u0276\u0273\x03\x02\x02\x02\u0276\u0274\x03\x02\x02\x02\u0276" + - "\u0275\x03\x02\x02\x02\u0277}\x03\x02\x02\x02\u0278\u0279\x05\x82B\x02" + - "\u0279\u027A\x05v<\x02\u027A\x7F\x03\x02\x02\x02\u027B\u027C\x05\x84C" + - "\x02\u027C\u027D\x05v<\x02\u027D\x81\x03\x02\x02\x02\u027E\u027F\t\b\x02" + - "\x02\u027F\x83\x03\x02\x02\x02\u0280\u0281\t\t\x02\x02\u0281\x85\x03\x02" + - "\x02\x02\u0282\u0288\x05|?\x02\u0283\u0284\x05|?\x02\u0284\u0285\x07\t" + - "\x02\x02\u0285\u0286\x05\xA6T\x02\u0286\u0288\x03\x02\x02\x02\u0287\u0282" + - "\x03\x02\x02\x02\u0287\u0283\x03\x02\x02\x02\u0288\x87\x03\x02\x02\x02" + - "\u0289\u028A\bE\x01\x02\u028A\u028B\x05\x86D\x02\u028B\u0291\x03\x02\x02" + - "\x02\u028C\u028D\f\x03\x02\x02\u028D\u028E\t\n\x02\x02\u028E\u0290\x05" + - "\x86D\x02\u028F\u028C\x03\x02\x02\x02\u0290\u0293\x03\x02\x02\x02\u0291" + - "\u028F\x03\x02\x02\x02\u0291\u0292\x03\x02\x02\x02\u0292\x89\x03\x02\x02" + - "\x02\u0293\u0291\x03\x02\x02\x02\u0294\u0295\bF\x01\x02\u0295\u0296\x05" + - "\x88E\x02\u0296\u029C\x03\x02\x02\x02\u0297\u0298\f\x03\x02\x02\u0298" + - "\u0299\t\v\x02\x02\u0299\u029B\x05\x88E\x02\u029A\u0297\x03\x02\x02\x02" + - "\u029B\u029E\x03\x02\x02\x02\u029C\u029A\x03\x02\x02\x02\u029C\u029D\x03" + - "\x02\x02\x02\u029D\x8B\x03\x02\x02\x02\u029E\u029C\x03\x02\x02\x02\u029F" + - "\u02A0\bG\x01\x02\u02A0\u02A1\x05\x8AF\x02\u02A1\u02A8\x03\x02\x02\x02" + - "\u02A2\u02A3\f\x03\x02\x02\u02A3\u02A4\x05\x8EH\x02\u02A4\u02A5\x05\x94" + - "K\x02\u02A5\u02A7\x03\x02\x02\x02\u02A6\u02A2\x03\x02\x02\x02\u02A7\u02AA" + - "\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02" + - "\u02A9\x8D\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02\u02AB\u02AC\t\f" + - "\x02\x02\u02AC\x8F\x03\x02\x02\x02\u02AD\u02AE\bI\x01\x02\u02AE\u02AF" + - "\x05\x8CG\x02\u02AF\u02B5\x03\x02\x02\x02\u02B0\u02B1\f\x03\x02\x02\u02B1" + - "\u02B2\t\r\x02\x02\u02B2\u02B4\x05\x8CG\x02\u02B3\u02B0\x03\x02\x02\x02" + - "\u02B4\u02B7\x03\x02\x02\x02\u02B5\u02B3\x03\x02\x02\x02\u02B5\u02B6\x03" + - "\x02\x02\x02\u02B6\x91\x03\x02\x02\x02\u02B7\u02B5\x03\x02\x02\x02\u02B8" + - "\u02B9\bJ\x01\x02\u02B9\u02BA\x05\x90I\x02\u02BA\u02C0\x03\x02\x02\x02" + - "\u02BB\u02BC\f\x03\x02\x02\u02BC\u02BD\t\x0E\x02\x02\u02BD\u02BF\x05\x90" + - "I\x02\u02BE\u02BB\x03\x02\x02\x02\u02BF\u02C2\x03\x02\x02\x02\u02C0\u02BE" + - "\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\x93\x03\x02\x02\x02" + - "\u02C2\u02C0\x03\x02\x02\x02\u02C3\u02C4\bK\x01\x02\u02C4\u02C5\x05\x92" + - "J\x02\u02C5\u02CB\x03\x02\x02\x02\u02C6\u02C7\f\x03\x02\x02\u02C7\u02C8" + - "\x07F\x02\x02\u02C8\u02CA\x05\x92J\x02\u02C9\u02C6\x03\x02\x02\x02\u02CA" + - "\u02CD\x03\x02\x02\x02\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02" + - "\x02\x02\u02CC\x95\x03\x02\x02\x02\u02CD\u02CB\x03\x02\x02\x02\u02CE\u02CF" + - "\bL\x01\x02\u02CF\u02D0\x05\x94K\x02\u02D0\u02D6\x03\x02\x02\x02\u02D1" + - "\u02D2\f\x03\x02\x02\u02D2\u02D3\x07H\x02\x02\u02D3\u02D5\x05\x94K\x02" + - "\u02D4\u02D1\x03\x02\x02\x02\u02D5\u02D8\x03\x02\x02\x02\u02D6\u02D4\x03" + - "\x02\x02\x02\u02D6\u02D7\x03\x02\x02\x02\u02D7\x97\x03\x02\x02\x02\u02D8" + - "\u02D6\x03\x02\x02\x02\u02D9\u02DA\bM\x01\x02\u02DA\u02DB\x05\x96L\x02" + - "\u02DB\u02E1\x03\x02\x02\x02\u02DC\u02DD\f\x03\x02\x02\u02DD\u02DE\x07" + - "G\x02\x02\u02DE\u02E0\x05\x96L\x02\u02DF\u02DC\x03\x02\x02\x02\u02E0\u02E3" + - "\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02" + - "\u02E2\x99\x03\x02\x02\x02\u02E3\u02E1\x03\x02\x02\x02\u02E4\u02E5\bN" + - "\x01\x02\u02E5\u02E6\x05\x98M\x02\u02E6\u02EC\x03\x02\x02\x02\u02E7\u02E8" + - "\f\x03\x02\x02\u02E8\u02E9\x077\x02\x02\u02E9\u02EB\x05\x98M\x02\u02EA" + - "\u02E7\x03\x02\x02\x02\u02EB\u02EE\x03\x02\x02\x02\u02EC\u02EA\x03\x02" + - "\x02\x02\u02EC\u02ED\x03\x02\x02\x02\u02ED\x9B\x03\x02\x02\x02\u02EE\u02EC" + - "\x03\x02\x02\x02\u02EF\u02F0\bO\x01\x02\u02F0\u02F1\x05\x9AN\x02\u02F1" + - "\u02F7\x03\x02\x02\x02\u02F2\u02F3\f\x03\x02\x02\u02F3\u02F4\x078\x02" + - "\x02\u02F4\u02F6\x05\x9AN\x02\u02F5\u02F2\x03\x02\x02\x02\u02F6\u02F9" + - "\x03\x02\x02\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7\u02F8\x03\x02\x02\x02" + - "\u02F8\x9D\x03\x02\x02\x02\u02F9\u02F7\x03\x02\x02\x02\u02FA\u0302\x05" + - "\x9CO\x02\u02FB\u02FC\x05\x9CO\x02\u02FC\u02FD\x07&\x02\x02\u02FD\u02FE" + - "\x05\x9EP\x02\u02FE\u02FF\x07'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300" + - "\u0302\x03\x02\x02\x02\u0301\u02FA\x03\x02\x02\x02\u0301\u02FB\x03\x02" + - "\x02\x02\u0302\x9F\x03\x02\x02\x02\u0303\u0309\x05\x9EP\x02\u0304\u0305" + - "\x05l7\x02\u0305\u0306\x05\xA2R\x02\u0306\u0307\x05\xA0Q\x02\u0307\u0309" + - "\x03\x02\x02\x02\u0308\u0303\x03\x02\x02\x02\u0308\u0304\x03\x02\x02\x02" + - "\u0309\xA1\x03\x02\x02\x02\u030A\u030B\t\x0F\x02\x02\u030B\xA3\x03\x02" + - "\x02\x02\u030C\u0311\x05\xA0Q\x02\u030D\u030E\x07$\x02\x02\u030E\u0310" + - "\x05\xA0Q\x02\u030F\u030D\x03\x02\x02\x02\u0310\u0313\x03\x02\x02\x02" + - "\u0311\u030F\x03\x02\x02\x02\u0311\u0312\x03\x02\x02\x02\u0312\xA5\x03" + - "\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0314\u0318\x05\xA8U\x02\u0315" + - "\u0318\x05\xAAV\x02\u0316\u0318\x05\xACW\x02\u0317\u0314\x03\x02\x02\x02" + - "\u0317\u0315\x03\x02\x02\x02\u0317\u0316\x03\x02\x02\x02\u0318\xA7\x03" + - "\x02\x02\x02\u0319\u031A\x05\xAEX\x02\u031A\xA9\x03\x02\x02\x02\u031B" + - "\u031C\x05\xAEX\x02\u031C\u0325\x07B\x02\x02\u031D\u0322\x05\xA6T\x02" + - "\u031E\u031F\x07$\x02\x02\u031F\u0321\x05\xA6T\x02\u0320\u031E\x03\x02" + - "\x02\x02\u0321\u0324\x03\x02\x02\x02\u0322\u0320\x03\x02\x02\x02\u0322" + - "\u0323\x03\x02\x02\x02\u0323\u0326\x03\x02\x02\x02\u0324\u0322\x03\x02" + - "\x02\x02\u0325\u031D\x03\x02\x02\x02\u0325\u0326\x03\x02\x02\x02\u0326" + - "\u0327\x03\x02\x02\x02\u0327\u0328\x07D\x02\x02\u0328\xAB\x03\x02\x02" + - "\x02\u0329\u032A\x07 \x02\x02\u032A\u032B\x07(\x02\x02\u032B\u032C\x05" + - "\xAEX\x02\u032C\u032D\x07)\x02\x02\u032D\xAD\x03\x02\x02\x02\u032E\u032F" + - "\t\x10\x02\x02\u032F\xAF\x03\x02\x02\x02M\xB1\xB8\xBF\xC4\xCC\xD8\xE4" + - "\xEA\xF1\xFE\u0105\u010F\u011B\u011D\u0125\u012E\u0134\u0139\u0144\u0149" + - "\u0154\u015D\u0167\u0174\u0179\u017F\u0183\u0189\u018F\u01A7\u01B5\u01B9" + - "\u01C1\u01CF\u01D7\u01DF\u01E3\u01E8\u01EB\u01F0\u01F3\u01FD\u0200\u0203" + - "\u020D\u0210\u0213\u0223\u022C\u0231\u0242\u0246\u0248\u0250\u025E\u0264" + - "\u026B\u0276\u0287\u0291\u029C\u02A8\u02B5\u02C0\u02CB\u02D6\u02E1\u02EC" + - "\u02F7\u0301\u0308\u0311\u0317\u0322\u0325"; + "\x02\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u020F" + + "\u0210\x03\x02\x02\x02\u0210\u0213\x03\x02\x02\x02\u0211\u020F\x03\x02" + + "\x02\x02\u0212\u020A\x03\x02\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213" + + "\u0215\x03\x02\x02\x02\u0214\u0216\x07%\x02\x02\u0215\u0214\x03\x02\x02" + + "\x02\u0215\u0216\x03\x02\x02\x02\u0216\u0217\x03\x02\x02\x02\u0217\u0218" + + "\x07/\x02\x02\u0218g\x03\x02\x02\x02\u0219\u021A\x05X-\x02\u021A\u021B" + + "\x07(\x02\x02\u021B\u021C\x05\xA4S\x02\u021Ci\x03\x02\x02\x02\u021D\u021E" + + "\t\x07\x02\x02\u021Ek\x03\x02\x02\x02\u021F\u0220\b7\x01\x02\u0220\u0234" + + "\x05L\'\x02\u0221\u0222\x07\x18\x02\x02\u0222\u0223\x05l7\x02\u0223\u0225" + + "\x07)\x02\x02\u0224\u0226\x05n8\x02\u0225\u0224\x03\x02\x02\x02\u0225" + + "\u0226\x03\x02\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227\u0228\x07*\x02" + + "\x02\u0228\u0229\b7\x01\x02\u0229\u0234\x03\x02\x02\x02\u022A\u022B\x07" + + "\x1D\x02\x02\u022B\u022C\x05\xA6T\x02\u022C\u022E\x07)\x02\x02\u022D\u022F" + + "\x05n8\x02\u022E\u022D\x03\x02\x02\x02\u022E\u022F\x03\x02\x02\x02\u022F" + + "\u0230\x03\x02\x02\x02\u0230\u0231\x07*\x02\x02\u0231\u0232\b7\x01\x02" + + "\u0232\u0234\x03\x02\x02\x02\u0233\u021F\x03\x02\x02\x02\u0233\u0221\x03" + + "\x02\x02\x02\u0233\u022A\x03\x02\x02\x02\u0234\u024A\x03\x02\x02\x02\u0235" + + "\u0236\f\b\x02\x02\u0236\u0237\x05p9\x02\u0237\u0238\b7\x01\x02\u0238" + + "\u0249\x03\x02\x02\x02\u0239\u023A\f\x07\x02\x02\u023A\u023B\x05r:\x02" + + "\u023B\u023C\b7\x01\x02\u023C\u0249\x03\x02\x02\x02\u023D\u023E\f\x06" + + "\x02\x02\u023E\u023F\x05t;\x02\u023F\u0240\b7\x01\x02\u0240\u0249\x03" + + "\x02\x02\x02\u0241\u0242\f\x05\x02\x02\u0242\u0244\x07)\x02\x02\u0243" + + "\u0245\x05n8\x02\u0244\u0243\x03\x02\x02\x02\u0244\u0245\x03\x02\x02\x02" + + "\u0245\u0246\x03\x02\x02\x02\u0246\u0247\x07*\x02\x02\u0247\u0249\b7\x01" + + "\x02\u0248\u0235\x03\x02\x02\x02\u0248\u0239\x03\x02\x02\x02\u0248\u023D" + + "\x03\x02\x02\x02\u0248\u0241\x03\x02\x02\x02\u0249\u024C\x03\x02\x02\x02" + + "\u024A\u0248\x03\x02\x02\x02\u024A\u024B\x03\x02\x02\x02\u024Bm\x03\x02" + + "\x02\x02\u024C\u024A\x03\x02\x02\x02\u024D\u0252\x05\xA0Q\x02\u024E\u024F" + + "\x07%\x02\x02\u024F\u0251\x05\xA0Q\x02\u0250\u024E\x03\x02\x02\x02\u0251" + + "\u0254\x03\x02\x02\x02\u0252\u0250\x03\x02\x02\x02\u0252\u0253\x03\x02" + + "\x02\x02\u0253o\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0255\u0256" + + "\x07N\x02\x02\u0256\u0257\x05V,\x02\u0257q\x03\x02\x02\x02\u0258\u0259" + + "\x07+\x02\x02\u0259\u025A\x05\xA4S\x02\u025A\u025B\x07,\x02\x02\u025B" + + "s\x03\x02\x02\x02\u025C\u0260\x07+\x02\x02\u025D\u025E\x05\xA4S\x02\u025E" + + "\u025F\b;\x01\x02\u025F\u0261\x03\x02\x02\x02\u0260\u025D\x03\x02\x02" + + "\x02\u0260\u0261\x03\x02\x02\x02\u0261\u0262\x03\x02\x02\x02\u0262\u0266" + + "\x07(\x02\x02\u0263\u0264\x05\xA4S\x02\u0264\u0265\b;\x01\x02\u0265\u0267" + + "\x03\x02\x02\x02\u0266\u0263\x03\x02\x02\x02\u0266\u0267\x03\x02\x02\x02" + + "\u0267\u0268\x03\x02\x02\x02\u0268\u0269\x07,\x02\x02\u0269u\x03\x02\x02" + + "\x02\u026A\u026E\x05l7\x02\u026B\u026E\x05x=\x02\u026C\u026E\x05z>\x02" + + "\u026D\u026A\x03\x02\x02\x02\u026D\u026B\x03\x02\x02\x02\u026D\u026C\x03" + + "\x02\x02\x02\u026Ew\x03\x02\x02\x02\u026F\u0270\x05l7\x02\u0270\u0271" + + "\x05\x82B\x02\u0271y\x03\x02\x02\x02\u0272\u0273\x07!\x02\x02\u0273\u0274" + + "\x05\xA0Q\x02\u0274{\x03\x02\x02\x02\u0275\u0279\x05v<\x02\u0276\u0279" + + "\x05~@\x02\u0277\u0279\x05\x80A\x02\u0278\u0275\x03\x02\x02\x02\u0278" + + "\u0276\x03\x02\x02\x02\u0278\u0277\x03\x02\x02\x02\u0279}\x03\x02\x02" + + "\x02\u027A\u027B\x05\x82B\x02\u027B\u027C\x05v<\x02\u027C\x7F\x03\x02" + + "\x02\x02\u027D\u027E\x05\x84C\x02\u027E\u027F\x05v<\x02\u027F\x81\x03" + + "\x02\x02\x02\u0280\u0281\t\b\x02\x02\u0281\x83\x03\x02\x02\x02\u0282\u0283" + + "\t\t\x02\x02\u0283\x85\x03\x02\x02\x02\u0284\u028A\x05|?\x02\u0285\u0286" + + "\x05|?\x02\u0286\u0287\x07\t\x02\x02\u0287\u0288\x05\xA6T\x02\u0288\u028A" + + "\x03\x02\x02\x02\u0289\u0284\x03\x02\x02\x02\u0289\u0285\x03\x02\x02\x02" + + "\u028A\x87\x03\x02\x02\x02\u028B\u028C\bE\x01\x02\u028C\u028D\x05\x86" + + "D\x02\u028D\u0293\x03\x02\x02\x02\u028E\u028F\f\x03\x02\x02\u028F\u0290" + + "\t\n\x02\x02\u0290\u0292\x05\x86D\x02\u0291\u028E\x03\x02\x02\x02\u0292" + + "\u0295\x03\x02\x02\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02" + + "\x02\x02\u0294\x89\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0296\u0297" + + "\bF\x01\x02\u0297\u0298\x05\x88E\x02\u0298\u029E\x03\x02\x02\x02\u0299" + + "\u029A\f\x03\x02\x02\u029A\u029B\t\v\x02\x02\u029B\u029D\x05\x88E\x02" + + "\u029C\u0299\x03\x02\x02\x02\u029D\u02A0\x03\x02\x02\x02\u029E\u029C\x03" + + "\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\x8B\x03\x02\x02\x02\u02A0" + + "\u029E\x03\x02\x02\x02\u02A1\u02A2\bG\x01\x02\u02A2\u02A3\x05\x8AF\x02" + + "\u02A3\u02AA\x03\x02\x02\x02\u02A4\u02A5\f\x03\x02\x02\u02A5\u02A6\x05" + + "\x8EH\x02\u02A6\u02A7\x05\x94K\x02\u02A7\u02A9\x03\x02\x02\x02\u02A8\u02A4" + + "\x03\x02\x02\x02\u02A9\u02AC\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02" + + "\u02AA\u02AB\x03\x02\x02\x02\u02AB\x8D\x03\x02\x02\x02\u02AC\u02AA\x03" + + "\x02\x02\x02\u02AD\u02AE\t\f\x02\x02\u02AE\x8F\x03\x02\x02\x02\u02AF\u02B0" + + "\bI\x01\x02\u02B0\u02B1\x05\x8CG\x02\u02B1\u02B7\x03\x02\x02\x02\u02B2" + + "\u02B3\f\x03\x02\x02\u02B3\u02B4\t\r\x02\x02\u02B4\u02B6\x05\x8CG\x02" + + "\u02B5\u02B2\x03\x02\x02\x02\u02B6\u02B9\x03\x02\x02\x02\u02B7\u02B5\x03" + + "\x02\x02\x02\u02B7\u02B8\x03\x02\x02\x02\u02B8\x91\x03\x02\x02\x02\u02B9" + + "\u02B7\x03\x02\x02\x02\u02BA\u02BB\bJ\x01\x02\u02BB\u02BC\x05\x90I\x02" + + "\u02BC\u02C2\x03\x02\x02\x02\u02BD\u02BE\f\x03\x02\x02\u02BE\u02BF\t\x0E" + + "\x02\x02\u02BF\u02C1\x05\x90I\x02\u02C0\u02BD\x03\x02\x02\x02\u02C1\u02C4" + + "\x03\x02\x02\x02\u02C2\u02C0\x03\x02\x02\x02\u02C2\u02C3\x03\x02\x02\x02" + + "\u02C3\x93\x03\x02\x02\x02\u02C4\u02C2\x03\x02\x02\x02\u02C5\u02C6\bK" + + "\x01\x02\u02C6\u02C7\x05\x92J\x02\u02C7\u02CD\x03\x02\x02\x02\u02C8\u02C9" + + "\f\x03\x02\x02\u02C9\u02CA\x07G\x02\x02\u02CA\u02CC\x05\x92J\x02\u02CB" + + "\u02C8\x03\x02\x02\x02\u02CC\u02CF\x03\x02\x02\x02\u02CD\u02CB\x03\x02" + + "\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\x95\x03\x02\x02\x02\u02CF\u02CD" + + "\x03\x02\x02\x02\u02D0\u02D1\bL\x01\x02\u02D1\u02D2\x05\x94K\x02\u02D2" + + "\u02D8\x03\x02\x02\x02\u02D3\u02D4\f\x03\x02\x02\u02D4\u02D5\x07I\x02" + + "\x02\u02D5\u02D7\x05\x94K\x02\u02D6\u02D3\x03\x02\x02\x02\u02D7\u02DA" + + "\x03\x02\x02\x02\u02D8\u02D6\x03\x02\x02\x02\u02D8\u02D9\x03\x02\x02\x02" + + "\u02D9\x97\x03\x02\x02\x02\u02DA\u02D8\x03\x02\x02\x02\u02DB\u02DC\bM" + + "\x01\x02\u02DC\u02DD\x05\x96L\x02\u02DD\u02E3\x03\x02\x02\x02\u02DE\u02DF" + + "\f\x03\x02\x02\u02DF\u02E0\x07H\x02\x02\u02E0\u02E2\x05\x96L\x02\u02E1" + + "\u02DE\x03\x02\x02\x02\u02E2\u02E5\x03\x02\x02\x02\u02E3\u02E1\x03\x02" + + "\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\x99\x03\x02\x02\x02\u02E5\u02E3" + + "\x03\x02\x02\x02\u02E6\u02E7\bN\x01\x02\u02E7\u02E8\x05\x98M\x02\u02E8" + + "\u02EE\x03\x02\x02\x02\u02E9\u02EA\f\x03\x02\x02\u02EA\u02EB\x078\x02" + + "\x02\u02EB\u02ED\x05\x98M\x02\u02EC\u02E9\x03\x02\x02\x02\u02ED\u02F0" + + "\x03\x02\x02\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02EF\x03\x02\x02\x02" + + "\u02EF\x9B\x03\x02\x02\x02\u02F0\u02EE\x03\x02\x02\x02\u02F1\u02F2\bO" + + "\x01\x02\u02F2\u02F3\x05\x9AN\x02\u02F3\u02F9\x03\x02\x02\x02\u02F4\u02F5" + + "\f\x03\x02\x02\u02F5\u02F6\x079\x02\x02\u02F6\u02F8\x05\x9AN\x02\u02F7" + + "\u02F4\x03\x02\x02\x02\u02F8\u02FB\x03\x02\x02\x02\u02F9\u02F7\x03\x02" + + "\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\x9D\x03\x02\x02\x02\u02FB\u02F9" + + "\x03\x02\x02\x02\u02FC\u0304\x05\x9CO\x02\u02FD\u02FE\x05\x9CO\x02\u02FE" + + "\u02FF\x07\'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300\u0301\x07(\x02\x02" + + "\u0301\u0302\x05\x9EP\x02\u0302\u0304\x03\x02\x02\x02\u0303\u02FC\x03" + + "\x02\x02\x02\u0303\u02FD\x03\x02\x02\x02\u0304\x9F\x03\x02\x02\x02\u0305" + + "\u030B\x05\x9EP\x02\u0306\u0307\x05l7\x02\u0307\u0308\x05\xA2R\x02\u0308" + + "\u0309\x05\xA0Q\x02\u0309\u030B\x03\x02\x02\x02\u030A\u0305\x03\x02\x02" + + "\x02\u030A\u0306\x03\x02\x02\x02\u030B\xA1\x03\x02\x02\x02\u030C\u030D" + + "\t\x0F\x02\x02\u030D\xA3\x03\x02\x02\x02\u030E\u0313\x05\xA0Q\x02\u030F" + + "\u0310\x07%\x02\x02\u0310\u0312\x05\xA0Q\x02\u0311\u030F\x03\x02\x02\x02" + + "\u0312\u0315\x03\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0313\u0314\x03" + + "\x02\x02\x02\u0314\xA5\x03\x02\x02\x02\u0315\u0313\x03\x02\x02\x02\u0316" + + "\u031A\x05\xA8U\x02\u0317\u031A\x05\xAAV\x02\u0318\u031A\x05\xACW\x02" + + "\u0319\u0316\x03\x02\x02\x02\u0319\u0317\x03\x02\x02\x02\u0319\u0318\x03" + + "\x02\x02\x02\u031A\xA7\x03\x02\x02\x02\u031B\u031C\x05\xAEX\x02\u031C" + + "\xA9\x03\x02\x02\x02\u031D\u031E\x05\xAEX\x02\u031E\u0327\x07C\x02\x02" + + "\u031F\u0324\x05\xA6T\x02\u0320\u0321\x07%\x02\x02\u0321\u0323\x05\xA6" + + "T\x02\u0322\u0320\x03\x02\x02\x02\u0323\u0326\x03\x02\x02\x02\u0324\u0322" + + "\x03\x02\x02\x02\u0324\u0325\x03\x02\x02\x02\u0325\u0328\x03\x02\x02\x02" + + "\u0326\u0324\x03\x02\x02\x02\u0327\u031F\x03\x02\x02\x02\u0327\u0328\x03" + + "\x02\x02\x02\u0328\u0329\x03\x02\x02\x02\u0329\u032A\x07E\x02\x02\u032A" + + "\xAB\x03\x02\x02\x02\u032B\u032C\x07!\x02\x02\u032C\u032D\x07)\x02\x02" + + "\u032D\u032E\x05\xAEX\x02\u032E\u032F\x07*\x02\x02\u032F\xAD\x03\x02\x02" + + "\x02\u0330\u0331\t\x10\x02\x02\u0331\xAF\x03\x02\x02\x02\u0332\u0333\x05" + + "\xA0Q\x02\u0333\u0334\x07 \x02\x02\u0334\u0335\x05\xA6T\x02\u0335\xB1" + + "\x03\x02\x02\x02M\xB3\xBA\xC1\xC6\xCE\xDA\xE6\xEC\xF3\u0100\u0107\u0111" + + "\u011D\u011F\u0127\u0130\u0136\u013B\u0146\u014B\u0156\u015F\u0169\u0176" + + "\u017B\u0181\u0185\u018B\u0191\u01A9\u01B7\u01BB\u01C3\u01D1\u01D9\u01E1" + + "\u01E5\u01EA\u01ED\u01F2\u01F5\u01FF\u0202\u0205\u020F\u0212\u0215\u0225" + + "\u022E\u0233\u0244\u0248\u024A\u0252\u0260\u0266\u026D\u0278\u0289\u0293" + + "\u029E\u02AA\u02B7\u02C2\u02CD\u02D8\u02E3\u02EE\u02F9\u0303\u030A\u0313" + + "\u0319\u0324\u0327"; public static readonly _serializedATN: string = Utils.join( - [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], + [ + KipperParser._serializedATNSegment0, + KipperParser._serializedATNSegment1, + ], "", ); public static __ATN: ATN; @@ -5593,12 +5086,11 @@ export class KipperParser extends KipperParserBase { return KipperParser.__ATN; } + } export class CompilationUnitContext extends KipperParserRuleContext { - public EOF(): TerminalNode { - return this.getToken(KipperParser.EOF, 0); - } + public EOF(): TerminalNode { return this.getToken(KipperParser.EOF, 0); } public translationUnit(): TranslationUnitContext | undefined { return this.tryGetRuleContext(0, TranslationUnitContext); } @@ -5606,9 +5098,7 @@ export class CompilationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_compilationUnit; - } + public get ruleIndex(): number { return KipperParser.RULE_compilationUnit; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompilationUnit) { @@ -5631,6 +5121,7 @@ export class CompilationUnitContext extends KipperParserRuleContext { } } + export class TranslationUnitContext extends KipperParserRuleContext { public externalItem(): ExternalItemContext[]; public externalItem(i: number): ExternalItemContext; @@ -5645,9 +5136,7 @@ export class TranslationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_translationUnit; - } + public get ruleIndex(): number { return KipperParser.RULE_translationUnit; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTranslationUnit) { @@ -5670,14 +5159,13 @@ export class TranslationUnitContext extends KipperParserRuleContext { } } + export class ExternalItemContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_externalItem; - } + public get ruleIndex(): number { return KipperParser.RULE_externalItem; } public copyFrom(ctx: ExternalItemContext): void { super.copyFrom(ctx); } @@ -5712,6 +5200,7 @@ export class ExternalBlockItemContext extends ExternalItemContext { } } + export class BlockItemListContext extends KipperParserRuleContext { public blockItem(): BlockItemContext[]; public blockItem(i: number): BlockItemContext; @@ -5726,9 +5215,7 @@ export class BlockItemListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_blockItemList; - } + public get ruleIndex(): number { return KipperParser.RULE_blockItemList; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItemList) { @@ -5751,6 +5238,7 @@ export class BlockItemListContext extends KipperParserRuleContext { } } + export class BlockItemContext extends KipperParserRuleContext { public statement(): StatementContext | undefined { return this.tryGetRuleContext(0, StatementContext); @@ -5758,16 +5246,12 @@ export class BlockItemContext extends KipperParserRuleContext { public declaration(): DeclarationContext | undefined { return this.tryGetRuleContext(0, DeclarationContext); } - public SemiColon(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_blockItem; - } + public get ruleIndex(): number { return KipperParser.RULE_blockItem; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItem) { @@ -5790,13 +5274,12 @@ export class BlockItemContext extends KipperParserRuleContext { } } + export class DeclarationContext extends KipperParserRuleContext { public variableDeclaration(): VariableDeclarationContext | undefined { return this.tryGetRuleContext(0, VariableDeclarationContext); } - public SemiColon(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } public functionDeclaration(): FunctionDeclarationContext | undefined { return this.tryGetRuleContext(0, FunctionDeclarationContext); } @@ -5810,9 +5293,7 @@ export class DeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_declaration; - } + public get ruleIndex(): number { return KipperParser.RULE_declaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclaration) { @@ -5835,6 +5316,7 @@ export class DeclarationContext extends KipperParserRuleContext { } } + export class VariableDeclarationContext extends KipperParserRuleContext { public storageTypeSpecifier(): StorageTypeSpecifierContext { return this.getRuleContext(0, StorageTypeSpecifierContext); @@ -5846,9 +5328,7 @@ export class VariableDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_variableDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_variableDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVariableDeclaration) { @@ -5871,20 +5351,15 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } + export class StorageTypeSpecifierContext extends KipperParserRuleContext { - public Var(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Var, 0); - } - public Const(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Const, 0); - } + public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } + public Const(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Const, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_storageTypeSpecifier; - } + public get ruleIndex(): number { return KipperParser.RULE_storageTypeSpecifier; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStorageTypeSpecifier) { @@ -5907,19 +5382,16 @@ export class StorageTypeSpecifierContext extends KipperParserRuleContext { } } + export class InitDeclaratorContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public Assign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Assign, 0); - } + public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } public initializer(): InitializerContext | undefined { return this.tryGetRuleContext(0, InitializerContext); } @@ -5927,9 +5399,7 @@ export class InitDeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_initDeclarator; - } + public get ruleIndex(): number { return KipperParser.RULE_initDeclarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitDeclarator) { @@ -5952,6 +5422,7 @@ export class InitDeclaratorContext extends KipperParserRuleContext { } } + export class InitializerContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); @@ -5960,9 +5431,7 @@ export class InitializerContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_initializer; - } + public get ruleIndex(): number { return KipperParser.RULE_initializer; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitializer) { @@ -5985,6 +5454,7 @@ export class InitializerContext extends KipperParserRuleContext { } } + export class DeclaratorContext extends KipperParserRuleContext { public directDeclarator(): DirectDeclaratorContext { return this.getRuleContext(0, DirectDeclaratorContext); @@ -5993,9 +5463,7 @@ export class DeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_declarator; - } + public get ruleIndex(): number { return KipperParser.RULE_declarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclarator) { @@ -6018,17 +5486,14 @@ export class DeclaratorContext extends KipperParserRuleContext { } } + export class DirectDeclaratorContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { - return this.getToken(KipperParser.Identifier, 0); - } + public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_directDeclarator; - } + public get ruleIndex(): number { return KipperParser.RULE_directDeclarator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDirectDeclarator) { @@ -6051,22 +5516,15 @@ export class DirectDeclaratorContext extends KipperParserRuleContext { } } + export class FunctionDeclarationContext extends KipperParserRuleContext { - public DefFunc(): TerminalNode { - return this.getToken(KipperParser.DefFunc, 0); - } + public DefFunc(): TerminalNode { return this.getToken(KipperParser.DefFunc, 0); } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public RetIndicator(): TerminalNode { - return this.getToken(KipperParser.RetIndicator, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -6080,9 +5538,7 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_functionDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_functionDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFunctionDeclaration) { @@ -6105,6 +5561,7 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } } + export class ParameterListContext extends KipperParserRuleContext { public parameterDeclaration(): ParameterDeclarationContext[]; public parameterDeclaration(i: number): ParameterDeclarationContext; @@ -6128,9 +5585,7 @@ export class ParameterListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_parameterList; - } + public get ruleIndex(): number { return KipperParser.RULE_parameterList; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterList) { @@ -6153,13 +5608,12 @@ export class ParameterListContext extends KipperParserRuleContext { } } + export class ParameterDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -6167,9 +5621,7 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_parameterDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_parameterDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterDeclaration) { @@ -6192,24 +5644,17 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { } } + export class InterfaceDeclarationContext extends KipperParserRuleContext { - public Interface(): TerminalNode { - return this.getToken(KipperParser.Interface, 0); - } + public Interface(): TerminalNode { return this.getToken(KipperParser.Interface, 0); } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public interfaceMemberDeclaration(): InterfaceMemberDeclarationContext[]; public interfaceMemberDeclaration(i: number): InterfaceMemberDeclarationContext; - public interfaceMemberDeclaration( - i?: number, - ): InterfaceMemberDeclarationContext | InterfaceMemberDeclarationContext[] { + public interfaceMemberDeclaration(i?: number): InterfaceMemberDeclarationContext | InterfaceMemberDeclarationContext[] { if (i === undefined) { return this.getRuleContexts(InterfaceMemberDeclarationContext); } else { @@ -6220,9 +5665,7 @@ export class InterfaceDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_interfaceDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_interfaceDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceDeclaration) { @@ -6245,6 +5688,7 @@ export class InterfaceDeclarationContext extends KipperParserRuleContext { } } + export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { public interfacePropertyDeclaration(): InterfacePropertyDeclarationContext | undefined { return this.tryGetRuleContext(0, InterfacePropertyDeclarationContext); @@ -6256,9 +5700,7 @@ export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_interfaceMemberDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_interfaceMemberDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceMemberDeclaration) { @@ -6281,26 +5723,21 @@ export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { } } + export class InterfacePropertyDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_interfacePropertyDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_interfacePropertyDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfacePropertyDeclaration) { @@ -6323,25 +5760,18 @@ export class InterfacePropertyDeclarationContext extends KipperParserRuleContext } } + export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } public parameterList(): ParameterListContext | undefined { return this.tryGetRuleContext(0, ParameterListContext); } @@ -6349,9 +5779,7 @@ export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_interfaceMethodDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_interfaceMethodDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceMethodDeclaration) { @@ -6374,19 +5802,14 @@ export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { } } + export class ClassDeclarationContext extends KipperParserRuleContext { - public Class(): TerminalNode { - return this.getToken(KipperParser.Class, 0); - } + public Class(): TerminalNode { return this.getToken(KipperParser.Class, 0); } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public classMemberDeclaration(): ClassMemberDeclarationContext[]; public classMemberDeclaration(i: number): ClassMemberDeclarationContext; public classMemberDeclaration(i?: number): ClassMemberDeclarationContext | ClassMemberDeclarationContext[] { @@ -6409,9 +5832,7 @@ export class ClassDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_classDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_classDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassDeclaration) { @@ -6434,6 +5855,7 @@ export class ClassDeclarationContext extends KipperParserRuleContext { } } + export class ClassMemberDeclarationContext extends KipperParserRuleContext { public classPropertyDeclaration(): ClassPropertyDeclarationContext | undefined { return this.tryGetRuleContext(0, ClassPropertyDeclarationContext); @@ -6448,9 +5870,7 @@ export class ClassMemberDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_classMemberDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_classMemberDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassMemberDeclaration) { @@ -6473,13 +5893,12 @@ export class ClassMemberDeclarationContext extends KipperParserRuleContext { } } + export class ClassPropertyDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -6487,9 +5906,7 @@ export class ClassPropertyDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_classPropertyDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_classPropertyDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassPropertyDeclaration) { @@ -6512,19 +5929,14 @@ export class ClassPropertyDeclarationContext extends KipperParserRuleContext { } } + export class ClassMethodDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -6538,9 +5950,7 @@ export class ClassMethodDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_classMethodDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_classMethodDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassMethodDeclaration) { @@ -6563,16 +5973,11 @@ export class ClassMethodDeclarationContext extends KipperParserRuleContext { } } + export class ClassConstructorDeclarationContext extends KipperParserRuleContext { - public Constructor(): TerminalNode { - return this.getToken(KipperParser.Constructor, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public Constructor(): TerminalNode { return this.getToken(KipperParser.Constructor, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public compoundStatement(): CompoundStatementContext { return this.getRuleContext(0, CompoundStatementContext); } @@ -6583,9 +5988,7 @@ export class ClassConstructorDeclarationContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_classConstructorDeclaration; - } + public get ruleIndex(): number { return KipperParser.RULE_classConstructorDeclaration; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassConstructorDeclaration) { @@ -6608,6 +6011,7 @@ export class ClassConstructorDeclarationContext extends KipperParserRuleContext } } + export class StatementContext extends KipperParserRuleContext { public expressionStatement(): ExpressionStatementContext | undefined { return this.tryGetRuleContext(0, ExpressionStatementContext); @@ -6631,9 +6035,7 @@ export class StatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_statement; - } + public get ruleIndex(): number { return KipperParser.RULE_statement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStatement) { @@ -6656,13 +6058,10 @@ export class StatementContext extends KipperParserRuleContext { } } + export class CompoundStatementContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public blockItemList(): BlockItemListContext | undefined { return this.tryGetRuleContext(0, BlockItemListContext); } @@ -6670,9 +6069,7 @@ export class CompoundStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_compoundStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_compoundStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompoundStatement) { @@ -6695,20 +6092,17 @@ export class CompoundStatementContext extends KipperParserRuleContext { } } + export class ExpressionStatementContext extends KipperParserRuleContext { public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_expressionStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_expressionStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpressionStatement) { @@ -6731,6 +6125,7 @@ export class ExpressionStatementContext extends KipperParserRuleContext { } } + export class SelectionStatementContext extends KipperParserRuleContext { public ifStatement(): IfStatementContext | undefined { return this.tryGetRuleContext(0, IfStatementContext); @@ -6742,9 +6137,7 @@ export class SelectionStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_selectionStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_selectionStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSelectionStatement) { @@ -6767,19 +6160,14 @@ export class SelectionStatementContext extends KipperParserRuleContext { } } + export class IfStatementContext extends KipperParserRuleContext { - public If(): TerminalNode { - return this.getToken(KipperParser.If, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public If(): TerminalNode { return this.getToken(KipperParser.If, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext[]; public statement(i: number): StatementContext; public statement(i?: number): StatementContext | StatementContext[] { @@ -6789,16 +6177,12 @@ export class IfStatementContext extends KipperParserRuleContext { return this.getRuleContext(i, StatementContext); } } - public Else(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Else, 0); - } + public Else(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Else, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_ifStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_ifStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIfStatement) { @@ -6821,25 +6205,16 @@ export class IfStatementContext extends KipperParserRuleContext { } } + export class SwitchStatementContext extends KipperParserRuleContext { - public Switch(): TerminalNode { - return this.getToken(KipperParser.Switch, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public Switch(): TerminalNode { return this.getToken(KipperParser.Switch, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public switchLabeledStatement(): SwitchLabeledStatementContext[]; public switchLabeledStatement(i: number): SwitchLabeledStatementContext; public switchLabeledStatement(i?: number): SwitchLabeledStatementContext | SwitchLabeledStatementContext[] { @@ -6853,9 +6228,7 @@ export class SwitchStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_switchStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_switchStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchStatement) { @@ -6878,29 +6251,22 @@ export class SwitchStatementContext extends KipperParserRuleContext { } } + export class SwitchLabeledStatementContext extends KipperParserRuleContext { - public Case(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Case, 0); - } + public Case(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Case, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public Default(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Default, 0); - } + public Default(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Default, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_switchLabeledStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_switchLabeledStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchLabeledStatement) { @@ -6923,6 +6289,7 @@ export class SwitchLabeledStatementContext extends KipperParserRuleContext { } } + export class IterationStatementContext extends KipperParserRuleContext { public forLoopIterationStatement(): ForLoopIterationStatementContext | undefined { return this.tryGetRuleContext(0, ForLoopIterationStatementContext); @@ -6937,9 +6304,7 @@ export class IterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_iterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_iterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIterationStatement) { @@ -6962,16 +6327,13 @@ export class IterationStatementContext extends KipperParserRuleContext { } } + export class ForLoopIterationStatementContext extends KipperParserRuleContext { public _forDeclaration: boolean = false; public _forCondition: boolean = false; public _forIterationExp: boolean = false; - public For(): TerminalNode { - return this.getToken(KipperParser.For, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public For(): TerminalNode { return this.getToken(KipperParser.For, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public SemiColon(): TerminalNode[]; public SemiColon(i: number): TerminalNode; public SemiColon(i?: number): TerminalNode | TerminalNode[] { @@ -6981,9 +6343,7 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { return this.getToken(KipperParser.SemiColon, i); } } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -7003,9 +6363,7 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_forLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_forLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterForLoopIterationStatement) { @@ -7028,19 +6386,14 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { } } + export class WhileLoopIterationStatementContext extends KipperParserRuleContext { - public While(): TerminalNode { - return this.getToken(KipperParser.While, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -7048,9 +6401,7 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_whileLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_whileLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterWhileLoopIterationStatement) { @@ -7073,35 +6424,24 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext } } + export class DoWhileLoopIterationStatementContext extends KipperParserRuleContext { - public Do(): TerminalNode { - return this.getToken(KipperParser.Do, 0); - } + public Do(): TerminalNode { return this.getToken(KipperParser.Do, 0); } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public While(): TerminalNode { - return this.getToken(KipperParser.While, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_doWhileLoopIterationStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_doWhileLoopIterationStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDoWhileLoopIterationStatement) { @@ -7124,23 +6464,16 @@ export class DoWhileLoopIterationStatementContext extends KipperParserRuleContex } } + export class JumpStatementContext extends KipperParserRuleContext { - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } - public Continue(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Continue, 0); - } - public Break(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Break, 0); - } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public Continue(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Continue, 0); } + public Break(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Break, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_jumpStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_jumpStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterJumpStatement) { @@ -7163,13 +6496,10 @@ export class JumpStatementContext extends KipperParserRuleContext { } } + export class ReturnStatementContext extends KipperParserRuleContext { - public Return(): TerminalNode { - return this.getToken(KipperParser.Return, 0); - } - public SemiColon(): TerminalNode { - return this.getToken(KipperParser.SemiColon, 0); - } + public Return(): TerminalNode { return this.getToken(KipperParser.Return, 0); } + public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -7177,9 +6507,7 @@ export class ReturnStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_returnStatement; - } + public get ruleIndex(): number { return KipperParser.RULE_returnStatement; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterReturnStatement) { @@ -7202,6 +6530,7 @@ export class ReturnStatementContext extends KipperParserRuleContext { } } + export class PrimaryExpressionContext extends KipperParserRuleContext { public tangledPrimaryExpression(): TangledPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, TangledPrimaryExpressionContext); @@ -7237,9 +6566,7 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_primaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_primaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPrimaryExpression) { @@ -7262,22 +6589,15 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { } } + export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public RetIndicator(): TerminalNode { - return this.getToken(KipperParser.RetIndicator, 0); - } + public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -7291,9 +6611,7 @@ export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_lambdaPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_lambdaPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterLambdaPrimaryExpression) { @@ -7316,23 +6634,18 @@ export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { } } + export class TangledPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_tangledPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_tangledPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTangledPrimaryExpression) { @@ -7355,20 +6668,15 @@ export class TangledPrimaryExpressionContext extends KipperParserRuleContext { } } + export class BoolPrimaryExpressionContext extends KipperParserRuleContext { - public True(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.True, 0); - } - public False(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.False, 0); - } + public True(): TerminalNode | undefined { return this.tryGetToken(KipperParser.True, 0); } + public False(): TerminalNode | undefined { return this.tryGetToken(KipperParser.False, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_boolPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_boolPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBoolPrimaryExpression) { @@ -7391,6 +6699,7 @@ export class BoolPrimaryExpressionContext extends KipperParserRuleContext { } } + export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); @@ -7399,9 +6708,7 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifierPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_identifierPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierPrimaryExpression) { @@ -7424,17 +6731,14 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext } } + export class IdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { - return this.getToken(KipperParser.Identifier, 0); - } + public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifier; - } + public get ruleIndex(): number { return KipperParser.RULE_identifier; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifier) { @@ -7457,6 +6761,7 @@ export class IdentifierContext extends KipperParserRuleContext { } } + export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext | undefined { return this.tryGetRuleContext(0, IdentifierContext); @@ -7468,9 +6773,7 @@ export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRule super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifierOrStringPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_identifierOrStringPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierOrStringPrimaryExpression) { @@ -7493,20 +6796,15 @@ export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRule } } + export class StringPrimaryExpressionContext extends KipperParserRuleContext { - public SingleQuoteStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); - } - public DoubleQuoteStringLiteral(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); - } + public SingleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); } + public DoubleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_stringPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_stringPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStringPrimaryExpression) { @@ -7529,13 +6827,10 @@ export class StringPrimaryExpressionContext extends KipperParserRuleContext { } } + export class FStringPrimaryExpressionContext extends KipperParserRuleContext { - public FStringSingleQuoteStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); - } - public FStringSingleQuoteEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); - } + public FStringSingleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); } + public FStringSingleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); } public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { @@ -7545,12 +6840,8 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { return this.getRuleContext(i, FStringSingleQuoteAtomContext); } } - public FStringDoubleQuoteStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); - } - public FStringDoubleQuoteEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); - } + public FStringDoubleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); } + public FStringDoubleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); } public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { @@ -7564,9 +6855,7 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_fStringPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringPrimaryExpression) { @@ -7589,16 +6878,11 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { } } + export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { - public FStringSingleQuoteAtom(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); - } - public FStringExpStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpStart, 0); - } - public FStringExpEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpEnd, 0); - } + public FStringSingleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); } + public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } + public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -7606,9 +6890,7 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringSingleQuoteAtom; - } + public get ruleIndex(): number { return KipperParser.RULE_fStringSingleQuoteAtom; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringSingleQuoteAtom) { @@ -7631,16 +6913,11 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { } } + export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { - public FStringDoubleQuoteAtom(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); - } - public FStringExpStart(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpStart, 0); - } - public FStringExpEnd(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FStringExpEnd, 0); - } + public FStringDoubleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); } + public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } + public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -7648,9 +6925,7 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_fStringDoubleQuoteAtom; - } + public get ruleIndex(): number { return KipperParser.RULE_fStringDoubleQuoteAtom; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringDoubleQuoteAtom) { @@ -7673,20 +6948,15 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { } } + export class NumberPrimaryExpressionContext extends KipperParserRuleContext { - public IntegerConstant(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.IntegerConstant, 0); - } - public FloatingConstant(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.FloatingConstant, 0); - } + public IntegerConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.IntegerConstant, 0); } + public FloatingConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FloatingConstant, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_numberPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_numberPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterNumberPrimaryExpression) { @@ -7709,13 +6979,10 @@ export class NumberPrimaryExpressionContext extends KipperParserRuleContext { } } + export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -7738,9 +7005,7 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_arrayPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_arrayPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArrayPrimaryExpression) { @@ -7763,13 +7028,10 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { } } + export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { - return this.getToken(KipperParser.LeftBrace, 0); - } - public RightBrace(): TerminalNode { - return this.getToken(KipperParser.RightBrace, 0); - } + public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } + public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } public objectProperty(): ObjectPropertyContext[]; public objectProperty(i: number): ObjectPropertyContext; public objectProperty(i?: number): ObjectPropertyContext | ObjectPropertyContext[] { @@ -7792,9 +7054,7 @@ export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_objectPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_objectPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterObjectPrimaryExpression) { @@ -7817,13 +7077,12 @@ export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { } } + export class ObjectPropertyContext extends KipperParserRuleContext { public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { return this.getRuleContext(0, IdentifierOrStringPrimaryExpressionContext); } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } @@ -7831,9 +7090,7 @@ export class ObjectPropertyContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_objectProperty; - } + public get ruleIndex(): number { return KipperParser.RULE_objectProperty; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterObjectProperty) { @@ -7856,23 +7113,16 @@ export class ObjectPropertyContext extends KipperParserRuleContext { } } + export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { - public Void(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Void, 0); - } - public Null(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Null, 0); - } - public Undefined(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Undefined, 0); - } + public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } + public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } + public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVoidOrNullOrUndefinedPrimaryExpression) { @@ -7895,15 +7145,14 @@ export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserR } } + export class ComputedPrimaryExpressionContext extends KipperParserRuleContext { public _labelASTKind: ASTKind | undefined; constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_computedPrimaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_computedPrimaryExpression; } public copyFrom(ctx: ComputedPrimaryExpressionContext): void { super.copyFrom(ctx); this._labelASTKind = ctx._labelASTKind; @@ -8038,12 +7287,8 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -8073,18 +7318,12 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont } } export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public CallFunc(): TerminalNode { - return this.getToken(KipperParser.CallFunc, 0); - } + public CallFunc(): TerminalNode { return this.getToken(KipperParser.CallFunc, 0); } public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -8114,18 +7353,12 @@ export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryEx } } export class NewInstantiationExpressionContext extends ComputedPrimaryExpressionContext { - public New(): TerminalNode { - return this.getToken(KipperParser.New, 0); - } + public New(): TerminalNode { return this.getToken(KipperParser.New, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -8155,6 +7388,7 @@ export class NewInstantiationExpressionContext extends ComputedPrimaryExpression } } + export class ArgumentExpressionListContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -8178,9 +7412,7 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_argumentExpressionList; - } + public get ruleIndex(): number { return KipperParser.RULE_argumentExpressionList; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArgumentExpressionList) { @@ -8203,10 +7435,9 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { } } + export class DotNotationContext extends KipperParserRuleContext { - public Dot(): TerminalNode { - return this.getToken(KipperParser.Dot, 0); - } + public Dot(): TerminalNode { return this.getToken(KipperParser.Dot, 0); } public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); } @@ -8214,9 +7445,7 @@ export class DotNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_dotNotation; - } + public get ruleIndex(): number { return KipperParser.RULE_dotNotation; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDotNotation) { @@ -8239,23 +7468,18 @@ export class DotNotationContext extends KipperParserRuleContext { } } + export class BracketNotationContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bracketNotation; - } + public get ruleIndex(): number { return KipperParser.RULE_bracketNotation; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBracketNotation) { @@ -8278,18 +7502,13 @@ export class BracketNotationContext extends KipperParserRuleContext { } } + export class SliceNotationContext extends KipperParserRuleContext { public sliceStart: boolean = false; public sliceEnd: boolean = false; - public LeftBracket(): TerminalNode { - return this.getToken(KipperParser.LeftBracket, 0); - } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } - public RightBracket(): TerminalNode { - return this.getToken(KipperParser.RightBracket, 0); - } + public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -8303,9 +7522,7 @@ export class SliceNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_sliceNotation; - } + public get ruleIndex(): number { return KipperParser.RULE_sliceNotation; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSliceNotation) { @@ -8328,6 +7545,7 @@ export class SliceNotationContext extends KipperParserRuleContext { } } + export class PostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, ComputedPrimaryExpressionContext); @@ -8342,9 +7560,7 @@ export class PostfixExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_postfixExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_postfixExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPostfixExpression) { @@ -8367,6 +7583,7 @@ export class PostfixExpressionContext extends KipperParserRuleContext { } } + export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); @@ -8378,9 +7595,7 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementPostfixExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementPostfixExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementPostfixExpression) { @@ -8403,10 +7618,9 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu } } + export class TypeofExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { - return this.getToken(KipperParser.Typeof, 0); - } + public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); } @@ -8414,9 +7628,7 @@ export class TypeofExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeofExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_typeofExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofExpression) { @@ -8439,6 +7651,7 @@ export class TypeofExpressionContext extends KipperParserRuleContext { } } + export class UnaryExpressionContext extends KipperParserRuleContext { public postfixExpression(): PostfixExpressionContext | undefined { return this.tryGetRuleContext(0, PostfixExpressionContext); @@ -8453,9 +7666,7 @@ export class UnaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_unaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_unaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryExpression) { @@ -8478,6 +7689,7 @@ export class UnaryExpressionContext extends KipperParserRuleContext { } } + export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { return this.getRuleContext(0, IncrementOrDecrementOperatorContext); @@ -8489,9 +7701,7 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementUnaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementUnaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementUnaryExpression) { @@ -8514,6 +7724,7 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule } } + export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { public unaryOperator(): UnaryOperatorContext { return this.getRuleContext(0, UnaryOperatorContext); @@ -8525,9 +7736,7 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_operatorModifiedUnaryExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_operatorModifiedUnaryExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterOperatorModifiedUnaryExpression) { @@ -8550,20 +7759,15 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont } } + export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { - public PlusPlus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PlusPlus, 0); - } - public MinusMinus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.MinusMinus, 0); - } + public PlusPlus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusPlus, 0); } + public MinusMinus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusMinus, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_incrementOrDecrementOperator; - } + public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementOperator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementOperator) { @@ -8586,26 +7790,17 @@ export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext } } + export class UnaryOperatorContext extends KipperParserRuleContext { - public Plus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Plus, 0); - } - public Minus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Minus, 0); - } - public Not(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Not, 0); - } - public BitwiseNot(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.BitwiseNot, 0); - } + public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } + public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } + public Not(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Not, 0); } + public BitwiseNot(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseNot, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_unaryOperator; - } + public get ruleIndex(): number { return KipperParser.RULE_unaryOperator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryOperator) { @@ -8628,14 +7823,13 @@ export class UnaryOperatorContext extends KipperParserRuleContext { } } + export class CastOrConvertExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_castOrConvertExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_castOrConvertExpression; } public copyFrom(ctx: CastOrConvertExpressionContext): void { super.copyFrom(ctx); } @@ -8673,9 +7867,7 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio public unaryExpression(): UnaryExpressionContext { return this.getRuleContext(0, UnaryExpressionContext); } - public As(): TerminalNode { - return this.getToken(KipperParser.As, 0); - } + public As(): TerminalNode { return this.getToken(KipperParser.As, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -8705,14 +7897,13 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio } } + export class MultiplicativeExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_multiplicativeExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_multiplicativeExpression; } public copyFrom(ctx: MultiplicativeExpressionContext): void { super.copyFrom(ctx); } @@ -8753,18 +7944,10 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress public castOrConvertExpression(): CastOrConvertExpressionContext { return this.getRuleContext(0, CastOrConvertExpressionContext); } - public Star(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Star, 0); - } - public Div(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Div, 0); - } - public Mod(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Mod, 0); - } - public PowerTo(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PowerTo, 0); - } + public Star(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Star, 0); } + public Div(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Div, 0); } + public Mod(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Mod, 0); } + public PowerTo(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PowerTo, 0); } constructor(ctx: MultiplicativeExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8791,14 +7974,13 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress } } + export class AdditiveExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_additiveExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_additiveExpression; } public copyFrom(ctx: AdditiveExpressionContext): void { super.copyFrom(ctx); } @@ -8839,12 +8021,8 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { public multiplicativeExpression(): MultiplicativeExpressionContext { return this.getRuleContext(0, MultiplicativeExpressionContext); } - public Plus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Plus, 0); - } - public Minus(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Minus, 0); - } + public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } + public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } constructor(ctx: AdditiveExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8871,14 +8049,13 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { } } + export class BitwiseShiftExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bitwiseShiftExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftExpression; } public copyFrom(ctx: BitwiseShiftExpressionContext): void { super.copyFrom(ctx); } @@ -8948,23 +8125,16 @@ export class ActualBitwiseShiftExpressionContext extends BitwiseShiftExpressionC } } + export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { - public BitwiseZeroFillLeftShift(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); - } - public BitwiseSignedRightShift(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); - } - public BitwiseZeroFillRightShift(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); - } + public BitwiseZeroFillLeftShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); } + public BitwiseSignedRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); } + public BitwiseZeroFillRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bitwiseShiftOperators; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftOperators; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBitwiseShiftOperators) { @@ -8987,14 +8157,13 @@ export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { } } + export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_relationalExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_relationalExpression; } public copyFrom(ctx: RelationalExpressionContext): void { super.copyFrom(ctx); } @@ -9035,18 +8204,10 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte public bitwiseShiftExpression(): BitwiseShiftExpressionContext { return this.getRuleContext(0, BitwiseShiftExpressionContext); } - public Less(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Less, 0); - } - public Greater(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Greater, 0); - } - public LessEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.LessEqual, 0); - } - public GreaterEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.GreaterEqual, 0); - } + public Less(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Less, 0); } + public Greater(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Greater, 0); } + public LessEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.LessEqual, 0); } + public GreaterEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.GreaterEqual, 0); } constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -9073,14 +8234,13 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte } } + export class EqualityExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_equalityExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_equalityExpression; } public copyFrom(ctx: EqualityExpressionContext): void { super.copyFrom(ctx); } @@ -9121,12 +8281,8 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { public relationalExpression(): RelationalExpressionContext { return this.getRuleContext(0, RelationalExpressionContext); } - public Equal(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Equal, 0); - } - public NotEqual(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.NotEqual, 0); - } + public Equal(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Equal, 0); } + public NotEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.NotEqual, 0); } constructor(ctx: EqualityExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -9153,14 +8309,13 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { } } + export class BitwiseAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bitwiseAndExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseAndExpression; } public copyFrom(ctx: BitwiseAndExpressionContext): void { super.copyFrom(ctx); } @@ -9198,9 +8353,7 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } - public BitwiseAnd(): TerminalNode { - return this.getToken(KipperParser.BitwiseAnd, 0); - } + public BitwiseAnd(): TerminalNode { return this.getToken(KipperParser.BitwiseAnd, 0); } public equalityExpression(): EqualityExpressionContext { return this.getRuleContext(0, EqualityExpressionContext); } @@ -9230,14 +8383,13 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte } } + export class BitwiseXorExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bitwiseXorExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseXorExpression; } public copyFrom(ctx: BitwiseXorExpressionContext): void { super.copyFrom(ctx); } @@ -9275,9 +8427,7 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } - public BitwiseXor(): TerminalNode { - return this.getToken(KipperParser.BitwiseXor, 0); - } + public BitwiseXor(): TerminalNode { return this.getToken(KipperParser.BitwiseXor, 0); } public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } @@ -9307,14 +8457,13 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte } } + export class BitwiseOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_bitwiseOrExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_bitwiseOrExpression; } public copyFrom(ctx: BitwiseOrExpressionContext): void { super.copyFrom(ctx); } @@ -9352,9 +8501,7 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } - public BitwiseOr(): TerminalNode { - return this.getToken(KipperParser.BitwiseOr, 0); - } + public BitwiseOr(): TerminalNode { return this.getToken(KipperParser.BitwiseOr, 0); } public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } @@ -9384,14 +8531,13 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext } } + export class LogicalAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_logicalAndExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_logicalAndExpression; } public copyFrom(ctx: LogicalAndExpressionContext): void { super.copyFrom(ctx); } @@ -9429,9 +8575,7 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } - public AndAnd(): TerminalNode { - return this.getToken(KipperParser.AndAnd, 0); - } + public AndAnd(): TerminalNode { return this.getToken(KipperParser.AndAnd, 0); } public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } @@ -9461,14 +8605,13 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte } } + export class LogicalOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_logicalOrExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_logicalOrExpression; } public copyFrom(ctx: LogicalOrExpressionContext): void { super.copyFrom(ctx); } @@ -9506,9 +8649,7 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public OrOr(): TerminalNode { - return this.getToken(KipperParser.OrOr, 0); - } + public OrOr(): TerminalNode { return this.getToken(KipperParser.OrOr, 0); } public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } @@ -9538,14 +8679,13 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext } } + export class ConditionalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_conditionalExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_conditionalExpression; } public copyFrom(ctx: ConditionalExpressionContext): void { super.copyFrom(ctx); } @@ -9583,9 +8723,7 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public QuestionMark(): TerminalNode { - return this.getToken(KipperParser.QuestionMark, 0); - } + public QuestionMark(): TerminalNode { return this.getToken(KipperParser.QuestionMark, 0); } public conditionalExpression(): ConditionalExpressionContext[]; public conditionalExpression(i: number): ConditionalExpressionContext; public conditionalExpression(i?: number): ConditionalExpressionContext | ConditionalExpressionContext[] { @@ -9595,9 +8733,7 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon return this.getRuleContext(i, ConditionalExpressionContext); } } - public Colon(): TerminalNode { - return this.getToken(KipperParser.Colon, 0); - } + public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } constructor(ctx: ConditionalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -9624,14 +8760,13 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon } } + export class AssignmentExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_assignmentExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_assignmentExpression; } public copyFrom(ctx: AssignmentExpressionContext): void { super.copyFrom(ctx); } @@ -9701,32 +8836,19 @@ export class ActualAssignmentExpressionContext extends AssignmentExpressionConte } } + export class AssignmentOperatorContext extends KipperParserRuleContext { - public Assign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Assign, 0); - } - public StarAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.StarAssign, 0); - } - public DivAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.DivAssign, 0); - } - public ModAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.ModAssign, 0); - } - public PlusAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.PlusAssign, 0); - } - public MinusAssign(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.MinusAssign, 0); - } + public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } + public StarAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.StarAssign, 0); } + public DivAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DivAssign, 0); } + public ModAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.ModAssign, 0); } + public PlusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusAssign, 0); } + public MinusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusAssign, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_assignmentOperator; - } + public get ruleIndex(): number { return KipperParser.RULE_assignmentOperator; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterAssignmentOperator) { @@ -9749,6 +8871,7 @@ export class AssignmentOperatorContext extends KipperParserRuleContext { } } + export class ExpressionContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -9772,9 +8895,7 @@ export class ExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_expression; - } + public get ruleIndex(): number { return KipperParser.RULE_expression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpression) { @@ -9797,6 +8918,7 @@ export class ExpressionContext extends KipperParserRuleContext { } } + export class TypeSpecifierExpressionContext extends KipperParserRuleContext { public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext | undefined { return this.tryGetRuleContext(0, IdentifierTypeSpecifierExpressionContext); @@ -9811,9 +8933,7 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierExpression) { @@ -9836,6 +8956,7 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { } } + export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); @@ -9844,9 +8965,7 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_identifierTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_identifierTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierTypeSpecifierExpression) { @@ -9869,16 +8988,13 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo } } + export class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public Less(): TerminalNode { - return this.getToken(KipperParser.Less, 0); - } - public Greater(): TerminalNode { - return this.getToken(KipperParser.Greater, 0); - } + public Less(): TerminalNode { return this.getToken(KipperParser.Less, 0); } + public Greater(): TerminalNode { return this.getToken(KipperParser.Greater, 0); } public typeSpecifierExpression(): TypeSpecifierExpressionContext[]; public typeSpecifierExpression(i: number): TypeSpecifierExpressionContext; public typeSpecifierExpression(i?: number): TypeSpecifierExpressionContext | TypeSpecifierExpressionContext[] { @@ -9901,9 +9017,7 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_genericTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_genericTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterGenericTypeSpecifierExpression) { @@ -9926,26 +9040,19 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte } } + export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { - return this.getToken(KipperParser.Typeof, 0); - } - public LeftParen(): TerminalNode { - return this.getToken(KipperParser.LeftParen, 0); - } + public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } + public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public RightParen(): TerminalNode { - return this.getToken(KipperParser.RightParen, 0); - } + public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeofTypeSpecifierExpression; - } + public get ruleIndex(): number { return KipperParser.RULE_typeofTypeSpecifierExpression; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofTypeSpecifierExpression) { @@ -9968,26 +9075,17 @@ export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContex } } + export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Identifier, 0); - } - public Null(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Null, 0); - } - public Undefined(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Undefined, 0); - } - public Void(): TerminalNode | undefined { - return this.tryGetToken(KipperParser.Void, 0); - } + public Identifier(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Identifier, 0); } + public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } + public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } + public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { - return KipperParser.RULE_typeSpecifierIdentifier; - } + public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierIdentifier; } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierIdentifier) { @@ -10009,3 +9107,41 @@ export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { } } } + + +export class MatchesExpressionContext extends KipperParserRuleContext { + public assignmentExpression(): AssignmentExpressionContext { + return this.getRuleContext(0, AssignmentExpressionContext); + } + public Matches(): TerminalNode { return this.getToken(KipperParser.Matches, 0); } + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return KipperParser.RULE_matchesExpression; } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterMatchesExpression) { + listener.enterMatchesExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitMatchesExpression) { + listener.exitMatchesExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitMatchesExpression) { + return visitor.visitMatchesExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 4797a5272..c7cd214dd 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -1,133 +1,137 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import KipperParserBase from "./base/KipperParserBase"; + import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofExpressionContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { MatchesExpressionContext } from "./KipperParser"; + /** * This interface defines a complete listener for a parse tree produced by @@ -1532,4 +1536,16 @@ export interface KipperParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => void; + + /** + * Enter a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + enterMatchesExpression?: (ctx: MatchesExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + exitMatchesExpression?: (ctx: MatchesExpressionContext) => void; } + diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index 6c7f4c2dd..df7ff500d 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -1,133 +1,137 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT -// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax -// kind values. + + // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax + // kind values. + import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; + import KipperParserBase from "./base/KipperParserBase"; + import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofExpressionContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; +import { MatchesExpressionContext } from "./KipperParser"; + /** * This interface defines a complete generic visitor for a parse tree produced @@ -1017,4 +1021,12 @@ export interface KipperParserVisitor extends ParseTreeVisitor { * @return the visitor result */ visitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchesExpression?: (ctx: MatchesExpressionContext) => Result; } + diff --git a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts index 205d6a35f..1fa556f7b 100644 --- a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts @@ -104,6 +104,7 @@ export const ParseRuleKindMapping = { RULE_genericTypeSpecifierExpression: KipperParser.RULE_genericTypeSpecifierExpression, RULE_typeofTypeSpecifierExpression: KipperParser.RULE_typeofTypeSpecifierExpression, RULE_typeSpecifierIdentifier: KipperParser.RULE_typeSpecifierIdentifier, + RULE_matchesExpression: KipperParser.RULE_matchesExpression, // Labelled rules, which don't have a corresponding identifier number in KipperParser. RULE_memberAccessExpression: 1001, // -> See 'computedPrimaryExpression' RULE_functionCallExpression: 1002, // -> See 'computedPrimaryExpression' diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 12f7fbd39..ea2b08d04 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -60,6 +60,7 @@ import type { import { KipperSemanticErrorHandler } from "../semantics"; import type { ClassConstructorDeclaration } from "../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; import type { NewInstantiationExpression } from "../ast/nodes/expressions/new-instantiation-expression"; +import { MatchesExpression } from "../ast/nodes/expressions/matches-expression/matches-expression"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. @@ -342,4 +343,9 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa * Performs translation-specific semantic analysis for {@link TypeofExpression} instances. */ public abstract typeofExpression?: TargetASTNodeSemanticAnalyser; + + /** + * Performs translation-specific semantic analysis for {@link MatchesExpression} instances. + */ + public abstract matchesExpression?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 4763d4794..a9add70ce 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -60,6 +60,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; +import { MatchesExpression } from "../../ast/nodes/expressions/matches-expression/matches-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -436,4 +437,9 @@ export abstract class KipperTargetCodeGenerator { * Translates a {@link TypeofExpression} into a specific language. */ public abstract typeofExpression: TargetASTNodeCodeGenerator; + + /** + * Translates a {@link MatchesExpression} into a specific language. + */ + public abstract matchesExpression: TargetASTNodeCodeGenerator; } From 7797e5a4d513af99bf1e6378ed8e908ce7b67748 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:41:42 +0200 Subject: [PATCH 10/81] [#672] minor: added matches expression to the ast listener --- kipper/core/src/compiler/ast/ast-generator.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index e3ef2f3ab..ff117ba19 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -12,7 +12,7 @@ import type { ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import type { +import { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualBitwiseAndExpressionContext, @@ -63,7 +63,7 @@ import type { KipperParserListener, KipperParserRuleContext, LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, + LogicalAndExpressionContext, MatchesExpressionContext, NewInstantiationExpressionContext, NumberPrimaryExpressionContext, ObjectPrimaryExpressionContext, @@ -782,6 +782,16 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitTypeofExpression: (ctx: TypeofExpressionContext) => void = this.handleExitingTreeNode; + /** + * Enter a parse tree produced by the KipperParser.matchesExpression + */ + public enterMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by the KipperParser.matchesExpression + */ + public exitMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleExitingTreeNode; + // NOTE: // We are ignoring the 'conditionalExpression' rule, and only going to handle the rule // 'actualConditionalExpression', which implements a more precise 'conditionalExpression' rule. From 678286c82363f188820b9e2b49d8bb6667c1060f Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 17:58:23 +0200 Subject: [PATCH 11/81] [#672] minor: finished listener and mappings --- kipper/core/src/compiler/ast/ast-generator.ts | 5 +- .../core/src/compiler/ast/common/ast-types.ts | 5 +- .../compiler/ast/mapping/ast-node-mapper.ts | 4 + .../matches-expression-semantics.ts | 4 +- .../matches-expression/matches-expression.ts | 15 + .../lexer-parser/antlr/KipperLexer.ts | 481 +- .../lexer-parser/antlr/KipperParser.ts | 6315 ++++++++++------- .../antlr/KipperParserListener.ts | 12 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 12 +- .../semantics/analyser/type-checker.ts | 3 + .../target-presets/semantic-analyser.ts | 2 +- .../translation/code-generator.ts | 2 +- kipper/target-js/src/code-generator.ts | 8 + kipper/target-js/src/semantic-analyser.ts | 5 + 14 files changed, 4042 insertions(+), 2831 deletions(-) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index ff117ba19..c80453d41 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -12,7 +12,7 @@ import type { ParserStatementContext, } from "./common"; import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { +import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualBitwiseAndExpressionContext, @@ -63,7 +63,8 @@ import { KipperParserListener, KipperParserRuleContext, LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, MatchesExpressionContext, + LogicalAndExpressionContext, + MatchesExpressionContext, NewInstantiationExpressionContext, NumberPrimaryExpressionContext, ObjectPrimaryExpressionContext, diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index b00b3b5ac..2033c895c 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -2,7 +2,7 @@ * AST pre-set types that are used throughout the compiler. * @since 0.10.0 */ -import { +import type { AdditiveExpressionContext, ArrayPrimaryExpressionContext, AssignmentExpressionContext, @@ -39,7 +39,8 @@ import { JumpStatementContext, KindParseRuleMapping, LogicalAndExpressionContext, - LogicalOrExpressionContext, MatchesExpressionContext, + LogicalOrExpressionContext, + MatchesExpressionContext, MultiplicativeExpressionContext, NewInstantiationExpressionContext, NumberPrimaryExpressionContext, diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index d0a4f99b4..f1d4e2539 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -126,6 +126,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; +import { MatchesExpression } from "../nodes/expressions/matches-expression/matches-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -192,6 +193,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpression, [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpression, [ParseRuleKindMapping.RULE_typeofExpression]: TypeofExpression, + [ParseRuleKindMapping.RULE_matchesExpression]: MatchesExpression, } satisfies Record>; /** @@ -268,6 +270,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpressionContext, [ParseRuleKindMapping.RULE_typeofExpression]: TypeofExpressionContext, [ParseRuleKindMapping.RULE_newInstantiationExpression]: NewInstantiationExpressionContext, + [ParseRuleKindMapping.RULE_matchesExpression]: MatchesExpression, [ParseRuleKindMapping.RULE_memberAccessExpression]: [ // Due to the nature of the parser not handling the notations as one rule, it's an array DotNotationMemberAccessExpressionContext, @@ -351,6 +354,7 @@ export class ASTNodeMapper { RULE_lambdaPrimaryExpression: LambdaPrimaryExpression, RULE_typeofExpression: TypeofExpression, RULE_newInstantiationExpression: NewInstantiationExpression, + RULE_matchesExpression: MatchesExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts index fcfc45a55..02da59abe 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts @@ -9,10 +9,10 @@ import type { Expression } from "../expression"; export interface MatchesExpressionSemantics extends ExpressionSemantics { /** - * The interface to match against. + * The pattern to match against. * @since 0.12.0 */ - interface: IdentifierTypeSpecifierExpression; + pattern: IdentifierTypeSpecifierExpression; /** * The expression to match against the interface. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts index a15168b4e..977be15f8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -14,6 +14,8 @@ import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-pa import { Expression } from "../expression"; import type { MatchesExpressionSemantics } from "./matches-expression-semantics"; import type { MatchesExpressionTypeSemantics } from "./matches-expression-type-semantics"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; /** * Matches expression, which checks if a value matches a pattern. @@ -93,8 +95,17 @@ export class MatchesExpression extends Expression< * the children has already failed and as such no parent node should run type checking. */ public async primarySemanticAnalysis(): Promise { + const value = this.children[0] as Expression; + const pattern = this.children[1] as IdentifierTypeSpecifierExpression; + if (!value || !pattern) { + throw new UnableToDetermineSemanticDataError(); + } + this.semanticData = { + expression: value, + pattern: pattern, + }; } /** @@ -106,7 +117,11 @@ export class MatchesExpression extends Expression< * @since 0.12.0 */ public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + const matchType = semanticData.pattern.getTypeSemanticData().storedType; + + this.programCtx.typeCheck(this).validMatchesExpression(semanticData.expression, semanticData.pattern); } /** diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index 8a61faaf7..8d5c3198b 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -1,8 +1,6 @@ // Generated from ./KipperLexer.g4 by ANTLR 4.9.0-SNAPSHOT - - import KipperLexerBase from "./base/KipperLexerBase"; - +import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -17,7 +15,6 @@ import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; - export class KipperLexer extends KipperLexerBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -114,73 +111,311 @@ export class KipperLexer extends KipperLexerBase { public static readonly DOUBLE_QUOTE_FSTRING = 2; // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = [ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", "PRAGMA", - ]; + public static readonly channelNames: string[] = ["DEFAULT_TOKEN_CHANNEL", "HIDDEN", "COMMENT", "PRAGMA"]; // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = [ - "DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING", - ]; + public static readonly modeNames: string[] = ["DEFAULT_MODE", "SINGLE_QUOTE_FSTRING", "DOUBLE_QUOTE_FSTRING"]; public static readonly ruleNames: string[] = [ - "BlockComment", "LineComment", "Pragma", "Const", "Var", "As", "Spread", - "Switch", "Case", "Default", "Break", "Continue", "Do", "While", "If", - "Else", "For", "Enum", "DefFunc", "Return", "CallFunc", "RetIndicator", - "Class", "Interface", "Constructor", "New", "True", "False", "Matches", - "Typeof", "Void", "Null", "Undefined", "Comma", "SemiColon", "QuestionMark", - "Colon", "LeftParen", "RightParen", "LeftBracket", "RightBracket", "FStringExpEnd", - "LeftBrace", "RightBrace", "Plus", "PlusPlus", "Minus", "MinusMinus", - "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", "Not", "Assign", "PlusAssign", - "MinusAssign", "StarAssign", "DivAssign", "ModAssign", "Equal", "NotEqual", - "Less", "LessEqual", "Greater", "GreaterEqual", "BitwiseAnd", "BitwiseOr", - "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", "BitwiseSignedRightShift", - "BitwiseZeroFillRightShift", "Dot", "Identifier", "IntegerConstant", "SingleQuoteStringLiteral", - "DoubleQuoteStringLiteral", "FloatingConstant", "Whitespace", "Newline", - "FStringSingleQuoteStart", "FStringDoubleQuoteStart", "FStringSingleQuoteExpStart", - "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", "FStringDoubleQuoteExpStart", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", "IdentifierNondigit", - "Nondigit", "Digit", "DecimalConstant", "BinaryConstant", "OctalConstant", - "HexadecimalConstant", "NonzeroDigit", "BinaryDigit", "OctalDigit", "HexadecimalDigit", - "DecimalFloatingConstant", "FractionalConstant", "ExponentPart", "DigitSequence", - "Sign", "CCharSequence", "CChar", "EscapeSequence", "SimpleEscapeSequence", - "OctalEscapeSequence", "HexadecimalEscapeSequence", "SingleQuoteFStringSCharSequence", - "SingleQuoteFStringSChar", "DoubleQuoteFStringSCharSequence", "DoubleQuoteFStringSChar", - "SingleQuoteSCharSequence", "SingleQuoteSChar", "DoubleQuoteSCharSequence", - "DoubleQuoteSChar", "CommentContent", + "BlockComment", + "LineComment", + "Pragma", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "Class", + "Interface", + "Constructor", + "New", + "True", + "False", + "Matches", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteExpStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteExpStart", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", + "IdentifierNondigit", + "Nondigit", + "Digit", + "DecimalConstant", + "BinaryConstant", + "OctalConstant", + "HexadecimalConstant", + "NonzeroDigit", + "BinaryDigit", + "OctalDigit", + "HexadecimalDigit", + "DecimalFloatingConstant", + "FractionalConstant", + "ExponentPart", + "DigitSequence", + "Sign", + "CCharSequence", + "CChar", + "EscapeSequence", + "SimpleEscapeSequence", + "OctalEscapeSequence", + "HexadecimalEscapeSequence", + "SingleQuoteFStringSCharSequence", + "SingleQuoteFStringSChar", + "DoubleQuoteFStringSCharSequence", + "DoubleQuoteFStringSChar", + "SingleQuoteSCharSequence", + "SingleQuoteSChar", + "DoubleQuoteSCharSequence", + "DoubleQuoteSChar", + "CommentContent", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, "'const'", "'var'", - "'as'", "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", - "'do'", "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", - "'call'", "'->'", "'class'", "'interface'", "'constructor'", "'new'", - "'true'", "'false'", "'matches'", "'typeof'", "'void'", "'null'", "'undefined'", - "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", - "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", - "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", - "'>>'", "'>>>'", "'.'", + undefined, + undefined, + undefined, + undefined, + undefined, + "'const'", + "'var'", + "'as'", + "'...'", + "'switch'", + "'case'", + "'default'", + "'break'", + "'continue'", + "'do'", + "'while'", + "'if'", + "'else'", + "'for'", + "'enum'", + "'def'", + "'return'", + "'call'", + "'->'", + "'class'", + "'interface'", + "'constructor'", + "'new'", + "'true'", + "'false'", + "'matches'", + "'typeof'", + "'void'", + "'null'", + "'undefined'", + "','", + "';'", + "'?'", + "':'", + "'('", + "')'", + "'['", + "']'", + undefined, + "'{'", + "'}'", + "'+'", + "'++'", + "'-'", + "'--'", + "'*'", + "'/'", + "'%'", + "'**'", + "'&&'", + "'||'", + "'!'", + "'='", + "'+='", + "'-='", + "'*='", + "'/='", + "'%='", + "'=='", + "'!='", + "'<'", + "'<='", + "'>'", + "'>='", + "'&'", + "'|'", + "'^'", + "'~'", + "'<<'", + "'>>'", + "'>>>'", + "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "FStringExpStart", "BlockComment", "LineComment", "Pragma", - "Const", "Var", "As", "Spread", "Switch", "Case", "Default", "Break", - "Continue", "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", - "CallFunc", "RetIndicator", "Class", "Interface", "Constructor", "New", - "True", "False", "Matches", "Typeof", "Void", "Null", "Undefined", "Comma", - "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", "LeftBracket", - "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", "PlusPlus", - "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", - "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", - "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", "GreaterEqual", - "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", - "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", "Dot", "Identifier", - "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", - "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", + undefined, + "FStringExpStart", + "BlockComment", + "LineComment", + "Pragma", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "Class", + "Interface", + "Constructor", + "New", + "True", + "False", + "Matches", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperLexer._LITERAL_NAMES, KipperLexer._SYMBOLIC_NAMES, []); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( + KipperLexer._LITERAL_NAMES, + KipperLexer._SYMBOLIC_NAMES, + [], + ); // @Override // @NotNull @@ -189,107 +424,116 @@ export class KipperLexer extends KipperLexerBase { } // tslint:enable:no-trailing-whitespace - constructor(input: CharStream) { super(input); this._interp = new LexerATNSimulator(KipperLexer._ATN, this); } // @Override - public get grammarFileName(): string { return "KipperLexer.g4"; } + public get grammarFileName(): string { + return "KipperLexer.g4"; + } // @Override - public get ruleNames(): string[] { return KipperLexer.ruleNames; } + public get ruleNames(): string[] { + return KipperLexer.ruleNames; + } // @Override - public get serializedATN(): string { return KipperLexer._serializedATN; } + public get serializedATN(): string { + return KipperLexer._serializedATN; + } // @Override - public get channelNames(): string[] { return KipperLexer.channelNames; } + public get channelNames(): string[] { + return KipperLexer.channelNames; + } // @Override - public get modeNames(): string[] { return KipperLexer.modeNames; } + public get modeNames(): string[] { + return KipperLexer.modeNames; + } // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 82: - this.FStringSingleQuoteStart_action(_localctx, actionIndex); - break; + case 82: + this.FStringSingleQuoteStart_action(_localctx, actionIndex); + break; - case 83: - this.FStringDoubleQuoteStart_action(_localctx, actionIndex); - break; + case 83: + this.FStringDoubleQuoteStart_action(_localctx, actionIndex); + break; - case 85: - this.FStringSingleQuoteEnd_action(_localctx, actionIndex); - break; + case 85: + this.FStringSingleQuoteEnd_action(_localctx, actionIndex); + break; - case 88: - this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); - break; + case 88: + this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); + break; } } private FStringSingleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 0: - this.incrementFStringDepth() - break; + case 0: + this.incrementFStringDepth(); + break; } } private FStringDoubleQuoteStart_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 1: - this.incrementFStringDepth() - break; + case 1: + this.incrementFStringDepth(); + break; } } private FStringSingleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 2: - this.decrementFStringDepth() - break; + case 2: + this.decrementFStringDepth(); + break; } } private FStringDoubleQuoteEnd_action(_localctx: RuleContext, actionIndex: number): void { switch (actionIndex) { - case 3: - this.decrementFStringDepth() - break; + case 3: + this.decrementFStringDepth(); + break; } } // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 41: - return this.FStringExpEnd_sempred(_localctx, predIndex); + case 41: + return this.FStringExpEnd_sempred(_localctx, predIndex); - case 84: - return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); + case 84: + return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 87: - return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); + case 87: + return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; } private FStringExpEnd_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.insideFString(); + case 0: + return this.insideFString(); } return true; } private FStringSingleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.insideFString(); + case 1: + return this.insideFString(); } return true; } private FStringDoubleQuoteExpStart_sempred(_localctx: RuleContext, predIndex: number): boolean { switch (predIndex) { - case 2: - return this.insideFString(); + case 2: + return this.insideFString(); } return true; } @@ -303,7 +547,7 @@ export class KipperLexer extends KipperLexerBase { "\x04\x12\t\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16" + "\x04\x17\t\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B" + "\x04\x1C\t\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!" + - "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t" + + "\t!\x04\"\t\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t" + ")\x04*\t*\x04+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x04" + "2\t2\x043\t3\x044\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04" + ";\t;\x04<\t<\x04=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04" + @@ -333,9 +577,9 @@ export class KipperLexer extends KipperLexerBase { "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03" + "\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + "\x1E\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03" + - "\x1F\x03 \x03 \x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03!\x03\"\x03\"\x03" + - "\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%" + - "\x03%\x03&\x03&\x03\'\x03\'\x03(\x03(\x03)\x03)\x03*\x03*\x03+\x03+\x03" + + '\x1F\x03 \x03 \x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03!\x03"\x03"\x03' + + '"\x03"\x03"\x03"\x03"\x03"\x03"\x03"\x03#\x03#\x03$\x03$\x03%' + + "\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03*\x03*\x03+\x03+\x03" + "+\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03/\x03/\x03/\x030\x030\x03" + "1\x031\x031\x032\x032\x033\x033\x034\x034\x035\x035\x035\x036\x036\x03" + "6\x037\x037\x037\x038\x038\x039\x039\x03:\x03:\x03:\x03;\x03;\x03;\x03" + @@ -363,9 +607,9 @@ export class KipperLexer extends KipperLexerBase { "y\u030B\ny\x03z\x07z\u030E\nz\fz\x0Ez\u0311\vz\x03\xFD\x02\x02{\x05\x02" + "\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02" + "\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11" + - "!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + + "!\x02\x12#\x02\x13%\x02\x14'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + "\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02" + - "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02," + + "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02," + "W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x02" + "8o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83" + "\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93" + @@ -377,7 +621,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3" + "\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02\xEF" + "\x02\x02\xF1\x02\x02\xF3\x02\x02\xF5\x02\x02\x05\x02\x03\x04\x14\x06\x02" + - "\v\v\r\x0E\"\"\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|" + + '\v\v\r\x0E""\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|' + "\x03\x022;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03" + "\x0229\x05\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E" + "\x02$$))AA^^cdhhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02" + @@ -387,7 +631,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02" + "\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02" + "\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02" + - "\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" + + "\x02\x02%\x03\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02" + "+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" + "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" + "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" + @@ -416,7 +660,7 @@ export class KipperLexer extends KipperLexerBase { "\x03\x02\x02\x02\x17\u0135\x03\x02\x02\x02\x19\u013D\x03\x02\x02\x02\x1B" + "\u0143\x03\x02\x02\x02\x1D\u014C\x03\x02\x02\x02\x1F\u014F\x03\x02\x02" + "\x02!\u0155\x03\x02\x02\x02#\u0158\x03\x02\x02\x02%\u015D\x03\x02\x02" + - "\x02\'\u0161\x03\x02\x02\x02)\u0166\x03\x02\x02\x02+\u016A\x03\x02\x02" + + "\x02'\u0161\x03\x02\x02\x02)\u0166\x03\x02\x02\x02+\u016A\x03\x02\x02" + "\x02-\u0171\x03\x02\x02\x02/\u0176\x03\x02\x02\x021\u0179\x03\x02\x02" + "\x023\u017F\x03\x02\x02\x025\u0189\x03\x02\x02\x027\u0195\x03\x02\x02" + "\x029\u0199\x03\x02\x02\x02;\u019E\x03\x02\x02\x02=\u01A4\x03\x02\x02" + @@ -487,7 +731,7 @@ export class KipperLexer extends KipperLexerBase { "\x02\x02\u014F\u0150\x07y\x02\x02\u0150\u0151\x07j\x02\x02\u0151\u0152" + "\x07k\x02\x02\u0152\u0153\x07n\x02\x02\u0153\u0154\x07g\x02\x02\u0154" + " \x03\x02\x02\x02\u0155\u0156\x07k\x02\x02\u0156\u0157\x07h\x02\x02\u0157" + - "\"\x03\x02\x02\x02\u0158\u0159\x07g\x02\x02\u0159\u015A\x07n\x02\x02\u015A" + + '"\x03\x02\x02\x02\u0158\u0159\x07g\x02\x02\u0159\u015A\x07n\x02\x02\u015A' + "\u015B\x07u\x02\x02\u015B\u015C\x07g\x02\x02\u015C$\x03\x02\x02\x02\u015D" + "\u015E\x07h\x02\x02\u015E\u015F\x07q\x02\x02\u015F\u0160\x07t\x02\x02" + "\u0160&\x03\x02\x02\x02\u0161\u0162\x07g\x02\x02\u0162\u0163\x07p\x02" + @@ -539,7 +783,7 @@ export class KipperLexer extends KipperLexerBase { "\x07-\x02\x02\u01E4`\x03\x02\x02\x02\u01E5\u01E6\x07/\x02\x02\u01E6b\x03" + "\x02\x02\x02\u01E7\u01E8\x07/\x02\x02\u01E8\u01E9\x07/\x02\x02\u01E9d" + "\x03\x02\x02\x02\u01EA\u01EB\x07,\x02\x02\u01EBf\x03\x02\x02\x02\u01EC" + - "\u01ED\x071\x02\x02\u01EDh\x03\x02\x02\x02\u01EE\u01EF\x07\'\x02\x02\u01EF" + + "\u01ED\x071\x02\x02\u01EDh\x03\x02\x02\x02\u01EE\u01EF\x07'\x02\x02\u01EF" + "j\x03\x02\x02\x02\u01F0\u01F1\x07,\x02\x02\u01F1\u01F2\x07,\x02\x02\u01F2" + "l\x03\x02\x02\x02\u01F3\u01F4\x07(\x02\x02\u01F4\u01F5\x07(\x02\x02\u01F5" + "n\x03\x02\x02\x02\u01F6\u01F7\x07~\x02\x02\u01F7\u01F8\x07~\x02\x02\u01F8" + @@ -550,7 +794,7 @@ export class KipperLexer extends KipperLexerBase { "\u0201\x07/\x02\x02\u0201\u0202\x07?\x02\x02\u0202x\x03\x02\x02\x02\u0203" + "\u0204\x07,\x02\x02\u0204\u0205\x07?\x02\x02\u0205z\x03\x02\x02\x02\u0206" + "\u0207\x071\x02\x02\u0207\u0208\x07?\x02\x02\u0208|\x03\x02\x02\x02\u0209" + - "\u020A\x07\'\x02\x02\u020A\u020B\x07?\x02\x02\u020B~\x03\x02\x02\x02\u020C" + + "\u020A\x07'\x02\x02\u020A\u020B\x07?\x02\x02\u020B~\x03\x02\x02\x02\u020C" + "\u020D\x07?\x02\x02\u020D\u020E\x07?\x02\x02\u020E\x80\x03\x02\x02\x02" + "\u020F\u0210\x07#\x02\x02\u0210\u0211\x07?\x02\x02\u0211\x82\x03\x02\x02" + "\x02\u0212\u0213\x07>\x02\x02\u0213\x84\x03\x02\x02\x02\u0214\u0215\x07" + @@ -666,10 +910,7 @@ export class KipperLexer extends KipperLexerBase { "\u030F\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02\x02\x03\x02\x03T\x02\x07" + "\x03\x02\x03U\x03\x07\x04\x02\t\x03\x02\x07\x02\x02\x03W\x04\x03Z\x05"; public static readonly _serializedATN: string = Utils.join( - [ - KipperLexer._serializedATNSegment0, - KipperLexer._serializedATNSegment1, - ], + [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], "", ); public static __ATN: ATN; @@ -680,6 +921,4 @@ export class KipperLexer extends KipperLexerBase { return KipperLexer.__ATN; } - } - diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index 6bee61c10..f232e19de 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -1,11 +1,9 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - import KipperParserBase from "./base/KipperParserBase"; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; @@ -32,7 +30,6 @@ import * as Utils from "antlr4ts/misc/Utils"; import { KipperParserListener } from "./KipperParserListener"; import { KipperParserVisitor } from "./KipperParserVisitor"; - export class KipperParser extends KipperParserBase { public static readonly FStringExpStart = 1; public static readonly BlockComment = 2; @@ -213,66 +210,272 @@ export class KipperParser extends KipperParserBase { public static readonly RULE_matchesExpression = 87; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ - "compilationUnit", "translationUnit", "externalItem", "blockItemList", - "blockItem", "declaration", "variableDeclaration", "storageTypeSpecifier", - "initDeclarator", "initializer", "declarator", "directDeclarator", "functionDeclaration", - "parameterList", "parameterDeclaration", "interfaceDeclaration", "interfaceMemberDeclaration", - "interfacePropertyDeclaration", "interfaceMethodDeclaration", "classDeclaration", - "classMemberDeclaration", "classPropertyDeclaration", "classMethodDeclaration", - "classConstructorDeclaration", "statement", "compoundStatement", "expressionStatement", - "selectionStatement", "ifStatement", "switchStatement", "switchLabeledStatement", - "iterationStatement", "forLoopIterationStatement", "whileLoopIterationStatement", - "doWhileLoopIterationStatement", "jumpStatement", "returnStatement", "primaryExpression", - "lambdaPrimaryExpression", "tangledPrimaryExpression", "boolPrimaryExpression", - "identifierPrimaryExpression", "identifier", "identifierOrStringPrimaryExpression", - "stringPrimaryExpression", "fStringPrimaryExpression", "fStringSingleQuoteAtom", - "fStringDoubleQuoteAtom", "numberPrimaryExpression", "arrayPrimaryExpression", - "objectPrimaryExpression", "objectProperty", "voidOrNullOrUndefinedPrimaryExpression", - "computedPrimaryExpression", "argumentExpressionList", "dotNotation", - "bracketNotation", "sliceNotation", "postfixExpression", "incrementOrDecrementPostfixExpression", - "typeofExpression", "unaryExpression", "incrementOrDecrementUnaryExpression", - "operatorModifiedUnaryExpression", "incrementOrDecrementOperator", "unaryOperator", - "castOrConvertExpression", "multiplicativeExpression", "additiveExpression", - "bitwiseShiftExpression", "bitwiseShiftOperators", "relationalExpression", - "equalityExpression", "bitwiseAndExpression", "bitwiseXorExpression", - "bitwiseOrExpression", "logicalAndExpression", "logicalOrExpression", - "conditionalExpression", "assignmentExpression", "assignmentOperator", - "expression", "typeSpecifierExpression", "identifierTypeSpecifierExpression", - "genericTypeSpecifierExpression", "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", + "compilationUnit", + "translationUnit", + "externalItem", + "blockItemList", + "blockItem", + "declaration", + "variableDeclaration", + "storageTypeSpecifier", + "initDeclarator", + "initializer", + "declarator", + "directDeclarator", + "functionDeclaration", + "parameterList", + "parameterDeclaration", + "interfaceDeclaration", + "interfaceMemberDeclaration", + "interfacePropertyDeclaration", + "interfaceMethodDeclaration", + "classDeclaration", + "classMemberDeclaration", + "classPropertyDeclaration", + "classMethodDeclaration", + "classConstructorDeclaration", + "statement", + "compoundStatement", + "expressionStatement", + "selectionStatement", + "ifStatement", + "switchStatement", + "switchLabeledStatement", + "iterationStatement", + "forLoopIterationStatement", + "whileLoopIterationStatement", + "doWhileLoopIterationStatement", + "jumpStatement", + "returnStatement", + "primaryExpression", + "lambdaPrimaryExpression", + "tangledPrimaryExpression", + "boolPrimaryExpression", + "identifierPrimaryExpression", + "identifier", + "identifierOrStringPrimaryExpression", + "stringPrimaryExpression", + "fStringPrimaryExpression", + "fStringSingleQuoteAtom", + "fStringDoubleQuoteAtom", + "numberPrimaryExpression", + "arrayPrimaryExpression", + "objectPrimaryExpression", + "objectProperty", + "voidOrNullOrUndefinedPrimaryExpression", + "computedPrimaryExpression", + "argumentExpressionList", + "dotNotation", + "bracketNotation", + "sliceNotation", + "postfixExpression", + "incrementOrDecrementPostfixExpression", + "typeofExpression", + "unaryExpression", + "incrementOrDecrementUnaryExpression", + "operatorModifiedUnaryExpression", + "incrementOrDecrementOperator", + "unaryOperator", + "castOrConvertExpression", + "multiplicativeExpression", + "additiveExpression", + "bitwiseShiftExpression", + "bitwiseShiftOperators", + "relationalExpression", + "equalityExpression", + "bitwiseAndExpression", + "bitwiseXorExpression", + "bitwiseOrExpression", + "logicalAndExpression", + "logicalOrExpression", + "conditionalExpression", + "assignmentExpression", + "assignmentOperator", + "expression", + "typeSpecifierExpression", + "identifierTypeSpecifierExpression", + "genericTypeSpecifierExpression", + "typeofTypeSpecifierExpression", + "typeSpecifierIdentifier", "matchesExpression", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, "'const'", "'var'", - "'as'", "'...'", "'switch'", "'case'", "'default'", "'break'", "'continue'", - "'do'", "'while'", "'if'", "'else'", "'for'", "'enum'", "'def'", "'return'", - "'call'", "'->'", "'class'", "'interface'", "'constructor'", "'new'", - "'true'", "'false'", "'matches'", "'typeof'", "'void'", "'null'", "'undefined'", - "','", "';'", "'?'", "':'", "'('", "')'", "'['", "']'", undefined, "'{'", - "'}'", "'+'", "'++'", "'-'", "'--'", "'*'", "'/'", "'%'", "'**'", "'&&'", - "'||'", "'!'", "'='", "'+='", "'-='", "'*='", "'/='", "'%='", "'=='", - "'!='", "'<'", "'<='", "'>'", "'>='", "'&'", "'|'", "'^'", "'~'", "'<<'", - "'>>'", "'>>>'", "'.'", + undefined, + undefined, + undefined, + undefined, + undefined, + "'const'", + "'var'", + "'as'", + "'...'", + "'switch'", + "'case'", + "'default'", + "'break'", + "'continue'", + "'do'", + "'while'", + "'if'", + "'else'", + "'for'", + "'enum'", + "'def'", + "'return'", + "'call'", + "'->'", + "'class'", + "'interface'", + "'constructor'", + "'new'", + "'true'", + "'false'", + "'matches'", + "'typeof'", + "'void'", + "'null'", + "'undefined'", + "','", + "';'", + "'?'", + "':'", + "'('", + "')'", + "'['", + "']'", + undefined, + "'{'", + "'}'", + "'+'", + "'++'", + "'-'", + "'--'", + "'*'", + "'/'", + "'%'", + "'**'", + "'&&'", + "'||'", + "'!'", + "'='", + "'+='", + "'-='", + "'*='", + "'/='", + "'%='", + "'=='", + "'!='", + "'<'", + "'<='", + "'>'", + "'>='", + "'&'", + "'|'", + "'^'", + "'~'", + "'<<'", + "'>>'", + "'>>>'", + "'.'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, "FStringExpStart", "BlockComment", "LineComment", "Pragma", - "Const", "Var", "As", "Spread", "Switch", "Case", "Default", "Break", - "Continue", "Do", "While", "If", "Else", "For", "Enum", "DefFunc", "Return", - "CallFunc", "RetIndicator", "Class", "Interface", "Constructor", "New", - "True", "False", "Matches", "Typeof", "Void", "Null", "Undefined", "Comma", - "SemiColon", "QuestionMark", "Colon", "LeftParen", "RightParen", "LeftBracket", - "RightBracket", "FStringExpEnd", "LeftBrace", "RightBrace", "Plus", "PlusPlus", - "Minus", "MinusMinus", "Star", "Div", "Mod", "PowerTo", "AndAnd", "OrOr", - "Not", "Assign", "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", - "ModAssign", "Equal", "NotEqual", "Less", "LessEqual", "Greater", "GreaterEqual", - "BitwiseAnd", "BitwiseOr", "BitwiseXor", "BitwiseNot", "BitwiseZeroFillLeftShift", - "BitwiseSignedRightShift", "BitwiseZeroFillRightShift", "Dot", "Identifier", - "IntegerConstant", "SingleQuoteStringLiteral", "DoubleQuoteStringLiteral", - "FloatingConstant", "Whitespace", "Newline", "FStringSingleQuoteStart", - "FStringDoubleQuoteStart", "FStringSingleQuoteEnd", "FStringSingleQuoteAtom", - "FStringDoubleQuoteEnd", "FStringDoubleQuoteAtom", + undefined, + "FStringExpStart", + "BlockComment", + "LineComment", + "Pragma", + "Const", + "Var", + "As", + "Spread", + "Switch", + "Case", + "Default", + "Break", + "Continue", + "Do", + "While", + "If", + "Else", + "For", + "Enum", + "DefFunc", + "Return", + "CallFunc", + "RetIndicator", + "Class", + "Interface", + "Constructor", + "New", + "True", + "False", + "Matches", + "Typeof", + "Void", + "Null", + "Undefined", + "Comma", + "SemiColon", + "QuestionMark", + "Colon", + "LeftParen", + "RightParen", + "LeftBracket", + "RightBracket", + "FStringExpEnd", + "LeftBrace", + "RightBrace", + "Plus", + "PlusPlus", + "Minus", + "MinusMinus", + "Star", + "Div", + "Mod", + "PowerTo", + "AndAnd", + "OrOr", + "Not", + "Assign", + "PlusAssign", + "MinusAssign", + "StarAssign", + "DivAssign", + "ModAssign", + "Equal", + "NotEqual", + "Less", + "LessEqual", + "Greater", + "GreaterEqual", + "BitwiseAnd", + "BitwiseOr", + "BitwiseXor", + "BitwiseNot", + "BitwiseZeroFillLeftShift", + "BitwiseSignedRightShift", + "BitwiseZeroFillRightShift", + "Dot", + "Identifier", + "IntegerConstant", + "SingleQuoteStringLiteral", + "DoubleQuoteStringLiteral", + "FloatingConstant", + "Whitespace", + "Newline", + "FStringSingleQuoteStart", + "FStringDoubleQuoteStart", + "FStringSingleQuoteEnd", + "FStringSingleQuoteAtom", + "FStringDoubleQuoteEnd", + "FStringDoubleQuoteAtom", ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(KipperParser._LITERAL_NAMES, KipperParser._SYMBOLIC_NAMES, []); + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl( + KipperParser._LITERAL_NAMES, + KipperParser._SYMBOLIC_NAMES, + [], + ); // @Override // @NotNull @@ -282,13 +485,19 @@ export class KipperParser extends KipperParserBase { // tslint:enable:no-trailing-whitespace // @Override - public get grammarFileName(): string { return "KipperParser.g4"; } + public get grammarFileName(): string { + return "KipperParser.g4"; + } // @Override - public get ruleNames(): string[] { return KipperParser.ruleNames; } + public get ruleNames(): string[] { + return KipperParser.ruleNames; + } // @Override - public get serializedATN(): string { return KipperParser._serializedATN; } + public get serializedATN(): string { + return KipperParser._serializedATN; + } protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { return new FailedPredicateException(this, predicate, message); @@ -305,21 +514,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 177; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 0, this._ctx) ) { - case 1: - { - this.state = 176; - this.translationUnit(); + this.state = 177; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { + case 1: + { + this.state = 176; + this.translationUnit(); + } + break; } - break; - } - this.state = 179; - this.match(KipperParser.EOF); + this.state = 179; + this.match(KipperParser.EOF); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -327,8 +535,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -341,29 +548,28 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 182; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 181; - this.externalItem(); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 184; + this.state = 182; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 181; + this.externalItem(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 184; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -371,8 +577,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -385,11 +590,10 @@ export class KipperParser extends KipperParserBase { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 186; - this.blockItemList(); + this.state = 186; + this.blockItemList(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -397,8 +601,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -411,29 +614,28 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 189; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 188; - this.blockItem(); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 191; + this.state = 189; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 188; + this.blockItem(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 191; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -441,8 +643,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -454,33 +655,32 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 196; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) { - case 1: - { - this.state = 193; - this.statement(); - } - break; + this.state = 196; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { + case 1: + { + this.state = 193; + this.statement(); + } + break; - case 2: - { - this.state = 194; - this.declaration(); - } - break; + case 2: + { + this.state = 194; + this.declaration(); + } + break; - case 3: - { - this.state = 195; - this.match(KipperParser.SemiColon); + case 3: + { + this.state = 195; + this.match(KipperParser.SemiColon); + } + break; } - break; - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -488,8 +688,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -502,42 +701,41 @@ export class KipperParser extends KipperParserBase { this.state = 204; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - this.enterOuterAlt(_localctx, 1); - { - this.state = 198; - this.variableDeclaration(); - this.state = 199; - this.match(KipperParser.SemiColon); - } - break; - case KipperParser.DefFunc: - this.enterOuterAlt(_localctx, 2); - { - this.state = 201; - this.functionDeclaration(); - } - break; - case KipperParser.Interface: - this.enterOuterAlt(_localctx, 3); - { - this.state = 202; - this.interfaceDeclaration(); - } - break; - case KipperParser.Class: - this.enterOuterAlt(_localctx, 4); - { - this.state = 203; - this.classDeclaration(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Const: + case KipperParser.Var: + this.enterOuterAlt(_localctx, 1); + { + this.state = 198; + this.variableDeclaration(); + this.state = 199; + this.match(KipperParser.SemiColon); + } + break; + case KipperParser.DefFunc: + this.enterOuterAlt(_localctx, 2); + { + this.state = 201; + this.functionDeclaration(); + } + break; + case KipperParser.Interface: + this.enterOuterAlt(_localctx, 3); + { + this.state = 202; + this.interfaceDeclaration(); + } + break; + case KipperParser.Class: + this.enterOuterAlt(_localctx, 4); + { + this.state = 203; + this.classDeclaration(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -545,8 +743,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -558,13 +755,12 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 206; - this.storageTypeSpecifier(); - this.state = 207; - this.initDeclarator(); + this.state = 206; + this.storageTypeSpecifier(); + this.state = 207; + this.initDeclarator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -572,8 +768,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -586,21 +781,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 209; - _la = this._input.LA(1); - if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 209; + _la = this._input.LA(1); + if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -608,8 +802,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -622,27 +815,25 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 211; - this.declarator(); - this.state = 212; - this.match(KipperParser.Colon); - this.state = 213; - this.typeSpecifierExpression(); - this.state = 216; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Assign) { - { - this.state = 214; - this.match(KipperParser.Assign); - this.state = 215; - this.initializer(); + this.state = 211; + this.declarator(); + this.state = 212; + this.match(KipperParser.Colon); + this.state = 213; + this.typeSpecifierExpression(); + this.state = 216; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Assign) { + { + this.state = 214; + this.match(KipperParser.Assign); + this.state = 215; + this.initializer(); + } } } - - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -650,8 +841,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -663,11 +853,10 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 218; - this.assignmentExpression(); + this.state = 218; + this.assignmentExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -675,8 +864,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -688,11 +876,10 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 220; - this.directDeclarator(); + this.state = 220; + this.directDeclarator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -700,8 +887,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -713,11 +899,10 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 222; - this.match(KipperParser.Identifier); + this.state = 222; + this.match(KipperParser.Identifier); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -725,8 +910,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -739,41 +923,40 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 224; - this.match(KipperParser.DefFunc); - this.state = 225; - this.declarator(); - this.state = 226; - this.match(KipperParser.LeftParen); - this.state = 228; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 227; - this.parameterList(); + this.state = 224; + this.match(KipperParser.DefFunc); + this.state = 225; + this.declarator(); + this.state = 226; + this.match(KipperParser.LeftParen); + this.state = 228; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 227; + this.parameterList(); + } } - } - this.state = 230; - this.match(KipperParser.RightParen); - this.state = 231; - this.match(KipperParser.RetIndicator); - this.state = 232; - this.typeSpecifierExpression(); - this.state = 234; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { - case 1: - { - this.state = 233; - this.compoundStatement(); + this.state = 230; + this.match(KipperParser.RightParen); + this.state = 231; + this.match(KipperParser.RetIndicator); + this.state = 232; + this.typeSpecifierExpression(); + this.state = 234; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { + case 1: + { + this.state = 233; + this.compoundStatement(); + } + break; } - break; } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -781,8 +964,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -795,27 +977,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 236; - this.parameterDeclaration(); - this.state = 241; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 237; - this.match(KipperParser.Comma); - this.state = 238; + this.state = 236; this.parameterDeclaration(); - } - } - this.state = 243; + this.state = 241; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 237; + this.match(KipperParser.Comma); + this.state = 238; + this.parameterDeclaration(); + } + } + this.state = 243; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -823,8 +1004,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -836,15 +1016,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 244; - this.declarator(); - this.state = 245; - this.match(KipperParser.Colon); - this.state = 246; - this.typeSpecifierExpression(); + this.state = 244; + this.declarator(); + this.state = 245; + this.match(KipperParser.Colon); + this.state = 246; + this.typeSpecifierExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -852,8 +1031,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -866,31 +1044,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 248; - this.match(KipperParser.Interface); - this.state = 249; - this.declarator(); - this.state = 250; - this.match(KipperParser.LeftBrace); - this.state = 254; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Identifier) { - { - { - this.state = 251; - this.interfaceMemberDeclaration(); - } - } - this.state = 256; + this.state = 248; + this.match(KipperParser.Interface); + this.state = 249; + this.declarator(); + this.state = 250; + this.match(KipperParser.LeftBrace); + this.state = 254; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Identifier) { + { + { + this.state = 251; + this.interfaceMemberDeclaration(); + } + } + this.state = 256; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 257; + this.match(KipperParser.RightBrace); } - this.state = 257; - this.match(KipperParser.RightBrace); - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -898,8 +1075,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -911,25 +1087,24 @@ export class KipperParser extends KipperParserBase { try { this.state = 261; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 259; - this.interfacePropertyDeclaration(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 10, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 259; + this.interfacePropertyDeclaration(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 260; - this.interfaceMethodDeclaration(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 260; + this.interfaceMethodDeclaration(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -937,8 +1112,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -950,17 +1124,16 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 263; - this.declarator(); - this.state = 264; - this.match(KipperParser.Colon); - this.state = 265; - this.typeSpecifierExpression(); - this.state = 266; - this.match(KipperParser.SemiColon); + this.state = 263; + this.declarator(); + this.state = 264; + this.match(KipperParser.Colon); + this.state = 265; + this.typeSpecifierExpression(); + this.state = 266; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -968,8 +1141,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -982,31 +1154,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 268; - this.declarator(); - this.state = 269; - this.match(KipperParser.LeftParen); - this.state = 271; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 270; - this.parameterList(); + this.state = 268; + this.declarator(); + this.state = 269; + this.match(KipperParser.LeftParen); + this.state = 271; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 270; + this.parameterList(); + } } - } - this.state = 273; - this.match(KipperParser.RightParen); - this.state = 274; - this.match(KipperParser.Colon); - this.state = 275; - this.typeSpecifierExpression(); - this.state = 276; - this.match(KipperParser.SemiColon); + this.state = 273; + this.match(KipperParser.RightParen); + this.state = 274; + this.match(KipperParser.Colon); + this.state = 275; + this.typeSpecifierExpression(); + this.state = 276; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1014,8 +1185,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1028,46 +1198,45 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 278; - this.match(KipperParser.Class); - this.state = 279; - this.declarator(); - this.state = 280; - this.match(KipperParser.LeftBrace); - this.state = 285; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { - { - this.state = 283; + this.state = 278; + this.match(KipperParser.Class); + this.state = 279; + this.declarator(); + this.state = 280; + this.match(KipperParser.LeftBrace); + this.state = 285; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Constructor: - case KipperParser.Identifier: - { - this.state = 281; - this.classMemberDeclaration(); - } - break; - case KipperParser.SemiColon: + _la = this._input.LA(1); + while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { { - this.state = 282; - this.match(KipperParser.SemiColon); + this.state = 283; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Constructor: + case KipperParser.Identifier: + { + this.state = 281; + this.classMemberDeclaration(); + } + break; + case KipperParser.SemiColon: + { + this.state = 282; + this.match(KipperParser.SemiColon); + } + break; + default: + throw new NoViableAltException(this); + } } - break; - default: - throw new NoViableAltException(this); - } + this.state = 287; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 287; - this._errHandler.sync(this); - _la = this._input.LA(1); + this.state = 288; + this.match(KipperParser.RightBrace); } - this.state = 288; - this.match(KipperParser.RightBrace); - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1075,8 +1244,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1088,33 +1256,32 @@ export class KipperParser extends KipperParserBase { try { this.state = 293; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 14, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 290; - this.classPropertyDeclaration(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 14, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 290; + this.classPropertyDeclaration(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 291; - this.classMethodDeclaration(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 291; + this.classMethodDeclaration(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 292; - this.classConstructorDeclaration(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 292; + this.classConstructorDeclaration(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1122,8 +1289,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1135,15 +1301,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 295; - this.declarator(); - this.state = 296; - this.match(KipperParser.Colon); - this.state = 297; - this.typeSpecifierExpression(); + this.state = 295; + this.declarator(); + this.state = 296; + this.match(KipperParser.Colon); + this.state = 297; + this.typeSpecifierExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1151,8 +1316,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1165,39 +1329,38 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 299; - this.declarator(); - this.state = 300; - this.match(KipperParser.LeftParen); - this.state = 302; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 301; - this.parameterList(); + this.state = 299; + this.declarator(); + this.state = 300; + this.match(KipperParser.LeftParen); + this.state = 302; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 301; + this.parameterList(); + } } - } - this.state = 304; - this.match(KipperParser.RightParen); - this.state = 305; - this.match(KipperParser.Colon); - this.state = 306; - this.typeSpecifierExpression(); - this.state = 308; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 16, this._ctx) ) { - case 1: - { - this.state = 307; - this.compoundStatement(); + this.state = 304; + this.match(KipperParser.RightParen); + this.state = 305; + this.match(KipperParser.Colon); + this.state = 306; + this.typeSpecifierExpression(); + this.state = 308; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 16, this._ctx)) { + case 1: + { + this.state = 307; + this.compoundStatement(); + } + break; } - break; - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1205,8 +1368,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1219,27 +1381,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 310; - this.match(KipperParser.Constructor); - this.state = 311; - this.match(KipperParser.LeftParen); - this.state = 313; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 312; - this.parameterList(); + this.state = 310; + this.match(KipperParser.Constructor); + this.state = 311; + this.match(KipperParser.LeftParen); + this.state = 313; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 312; + this.parameterList(); + } } - } - this.state = 315; - this.match(KipperParser.RightParen); - this.state = 316; - this.compoundStatement(); + this.state = 315; + this.match(KipperParser.RightParen); + this.state = 316; + this.compoundStatement(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1247,8 +1408,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1260,57 +1420,56 @@ export class KipperParser extends KipperParserBase { try { this.state = 324; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 18, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 318; - this.expressionStatement(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 18, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 318; + this.expressionStatement(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 319; - this.selectionStatement(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 319; + this.selectionStatement(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 320; - this.iterationStatement(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 320; + this.iterationStatement(); + } + break; - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 321; - this.jumpStatement(); - } - break; + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 321; + this.jumpStatement(); + } + break; - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 322; - this.returnStatement(); - } - break; + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 322; + this.returnStatement(); + } + break; - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 323; - this.compoundStatement(); - } - break; + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 323; + this.compoundStatement(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1318,8 +1477,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1331,27 +1489,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 326; - if (!(this.notInsideExpressionStatement())) { - throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); - } - this.state = 327; - this.match(KipperParser.LeftBrace); - this.state = 329; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 19, this._ctx) ) { - case 1: - { - this.state = 328; - this.blockItemList(); + this.state = 326; + if (!this.notInsideExpressionStatement()) { + throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); } - break; - } - this.state = 331; - this.match(KipperParser.RightBrace); + this.state = 327; + this.match(KipperParser.LeftBrace); + this.state = 329; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { + case 1: + { + this.state = 328; + this.blockItemList(); + } + break; + } + this.state = 331; + this.match(KipperParser.RightBrace); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1359,8 +1516,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1372,15 +1528,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.enterExpressionStatement() - this.state = 334; - this.expression(); - this.state = 335; - this.match(KipperParser.SemiColon); - this.exitExpressionStatement() + this.enterExpressionStatement(); + this.state = 334; + this.expression(); + this.state = 335; + this.match(KipperParser.SemiColon); + this.exitExpressionStatement(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1388,8 +1543,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1402,25 +1556,24 @@ export class KipperParser extends KipperParserBase { this.state = 340; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.If: - this.enterOuterAlt(_localctx, 1); - { - this.state = 338; - this.ifStatement(); - } - break; - case KipperParser.Switch: - this.enterOuterAlt(_localctx, 2); - { - this.state = 339; - this.switchStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.If: + this.enterOuterAlt(_localctx, 1); + { + this.state = 338; + this.ifStatement(); + } + break; + case KipperParser.Switch: + this.enterOuterAlt(_localctx, 2); + { + this.state = 339; + this.switchStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1428,8 +1581,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1441,31 +1593,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 342; - this.match(KipperParser.If); - this.state = 343; - this.match(KipperParser.LeftParen); - this.state = 344; - this.expression(); - this.state = 345; - this.match(KipperParser.RightParen); - this.state = 346; - this.statement(); - this.state = 349; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { - case 1: - { - this.state = 347; - this.match(KipperParser.Else); - this.state = 348; + this.state = 342; + this.match(KipperParser.If); + this.state = 343; + this.match(KipperParser.LeftParen); + this.state = 344; + this.expression(); + this.state = 345; + this.match(KipperParser.RightParen); + this.state = 346; this.statement(); + this.state = 349; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { + case 1: + { + this.state = 347; + this.match(KipperParser.Else); + this.state = 348; + this.statement(); + } + break; } - break; - } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1473,8 +1624,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1487,35 +1637,34 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 351; - this.match(KipperParser.Switch); - this.state = 352; - this.match(KipperParser.LeftParen); - this.state = 353; - this.expression(); - this.state = 354; - this.match(KipperParser.RightParen); - this.state = 355; - this.match(KipperParser.LeftBrace); - this.state = 359; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Case || _la === KipperParser.Default) { - { - { - this.state = 356; - this.switchLabeledStatement(); - } - } - this.state = 361; + this.state = 351; + this.match(KipperParser.Switch); + this.state = 352; + this.match(KipperParser.LeftParen); + this.state = 353; + this.expression(); + this.state = 354; + this.match(KipperParser.RightParen); + this.state = 355; + this.match(KipperParser.LeftBrace); + this.state = 359; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Case || _la === KipperParser.Default) { + { + { + this.state = 356; + this.switchLabeledStatement(); + } + } + this.state = 361; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 362; + this.match(KipperParser.RightBrace); } - this.state = 362; - this.match(KipperParser.RightBrace); - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1523,8 +1672,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1537,35 +1685,34 @@ export class KipperParser extends KipperParserBase { this.state = 372; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Case: - this.enterOuterAlt(_localctx, 1); - { - this.state = 364; - this.match(KipperParser.Case); - this.state = 365; - this.expression(); - this.state = 366; - this.match(KipperParser.Colon); - this.state = 367; - this.statement(); - } - break; - case KipperParser.Default: - this.enterOuterAlt(_localctx, 2); - { - this.state = 369; - this.match(KipperParser.Default); - this.state = 370; - this.match(KipperParser.Colon); - this.state = 371; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Case: + this.enterOuterAlt(_localctx, 1); + { + this.state = 364; + this.match(KipperParser.Case); + this.state = 365; + this.expression(); + this.state = 366; + this.match(KipperParser.Colon); + this.state = 367; + this.statement(); + } + break; + case KipperParser.Default: + this.enterOuterAlt(_localctx, 2); + { + this.state = 369; + this.match(KipperParser.Default); + this.state = 370; + this.match(KipperParser.Colon); + this.state = 371; + this.statement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1573,8 +1720,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1587,32 +1733,31 @@ export class KipperParser extends KipperParserBase { this.state = 377; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.For: - this.enterOuterAlt(_localctx, 1); - { - this.state = 374; - this.forLoopIterationStatement(); - } - break; - case KipperParser.While: - this.enterOuterAlt(_localctx, 2); - { - this.state = 375; - this.whileLoopIterationStatement(); - } - break; - case KipperParser.Do: - this.enterOuterAlt(_localctx, 3); - { - this.state = 376; - this.doWhileLoopIterationStatement(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.For: + this.enterOuterAlt(_localctx, 1); + { + this.state = 374; + this.forLoopIterationStatement(); + } + break; + case KipperParser.While: + this.enterOuterAlt(_localctx, 2); + { + this.state = 375; + this.whileLoopIterationStatement(); + } + break; + case KipperParser.Do: + this.enterOuterAlt(_localctx, 3); + { + this.state = 376; + this.doWhileLoopIterationStatement(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1620,8 +1765,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1634,94 +1778,191 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 379; - this.match(KipperParser.For); - this.state = 380; - this.match(KipperParser.LeftParen); - this.state = 387; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << KipperParser.Const) | (1 << KipperParser.Var) | (1 << KipperParser.CallFunc) | (1 << KipperParser.New) | (1 << KipperParser.True) | (1 << KipperParser.False) | (1 << KipperParser.Typeof))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)) | (1 << (KipperParser.LeftParen - 32)) | (1 << (KipperParser.LeftBracket - 32)) | (1 << (KipperParser.LeftBrace - 32)) | (1 << (KipperParser.Plus - 32)) | (1 << (KipperParser.PlusPlus - 32)) | (1 << (KipperParser.Minus - 32)) | (1 << (KipperParser.MinusMinus - 32)) | (1 << (KipperParser.Not - 32)))) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & ((1 << (KipperParser.BitwiseNot - 72)) | (1 << (KipperParser.Identifier - 72)) | (1 << (KipperParser.IntegerConstant - 72)) | (1 << (KipperParser.SingleQuoteStringLiteral - 72)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 72)) | (1 << (KipperParser.FloatingConstant - 72)) | (1 << (KipperParser.FStringSingleQuoteStart - 72)) | (1 << (KipperParser.FStringDoubleQuoteStart - 72)))) !== 0)) { - { - this.state = 383; + this.state = 379; + this.match(KipperParser.For); + this.state = 380; + this.match(KipperParser.LeftParen); + this.state = 387; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.Const: - case KipperParser.Var: - { - this.state = 381; - this.variableDeclaration(); - } - break; - case KipperParser.CallFunc: - case KipperParser.New: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Typeof: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Plus: - case KipperParser.PlusPlus: - case KipperParser.Minus: - case KipperParser.MinusMinus: - case KipperParser.Not: - case KipperParser.BitwiseNot: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: + _la = this._input.LA(1); + if ( + ((_la & ~0x1f) === 0 && + ((1 << _la) & + ((1 << KipperParser.Const) | + (1 << KipperParser.Var) | + (1 << KipperParser.CallFunc) | + (1 << KipperParser.New) | + (1 << KipperParser.True) | + (1 << KipperParser.False) | + (1 << KipperParser.Typeof))) !== + 0) || + (((_la - 32) & ~0x1f) === 0 && + ((1 << (_la - 32)) & + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)) | + (1 << (KipperParser.LeftParen - 32)) | + (1 << (KipperParser.LeftBracket - 32)) | + (1 << (KipperParser.LeftBrace - 32)) | + (1 << (KipperParser.Plus - 32)) | + (1 << (KipperParser.PlusPlus - 32)) | + (1 << (KipperParser.Minus - 32)) | + (1 << (KipperParser.MinusMinus - 32)) | + (1 << (KipperParser.Not - 32)))) !== + 0) || + (((_la - 72) & ~0x1f) === 0 && + ((1 << (_la - 72)) & + ((1 << (KipperParser.BitwiseNot - 72)) | + (1 << (KipperParser.Identifier - 72)) | + (1 << (KipperParser.IntegerConstant - 72)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 72)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 72)) | + (1 << (KipperParser.FloatingConstant - 72)) | + (1 << (KipperParser.FStringSingleQuoteStart - 72)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 72)))) !== + 0) + ) { { - this.state = 382; - this.expression(); + this.state = 383; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case KipperParser.Const: + case KipperParser.Var: + { + this.state = 381; + this.variableDeclaration(); + } + break; + case KipperParser.CallFunc: + case KipperParser.New: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Typeof: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Plus: + case KipperParser.PlusPlus: + case KipperParser.Minus: + case KipperParser.MinusMinus: + case KipperParser.Not: + case KipperParser.BitwiseNot: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + { + this.state = 382; + this.expression(); + } + break; + default: + throw new NoViableAltException(this); + } + _localctx._forDeclaration = true; } - break; - default: - throw new NoViableAltException(this); } - _localctx._forDeclaration = true - } - } - this.state = 389; - this.match(KipperParser.SemiColon); - this.state = 393; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 390; - this.expression(); - _localctx._forCondition = true + this.state = 389; + this.match(KipperParser.SemiColon); + this.state = 393; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 390; + this.expression(); + _localctx._forCondition = true; + } } - } - this.state = 395; - this.match(KipperParser.SemiColon); - this.state = 399; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 396; - this.expression(); - _localctx._forIterationExp = true + this.state = 395; + this.match(KipperParser.SemiColon); + this.state = 399; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 396; + this.expression(); + _localctx._forIterationExp = true; + } } - } - this.state = 401; - this.match(KipperParser.RightParen); - this.state = 402; - this.statement(); + this.state = 401; + this.match(KipperParser.RightParen); + this.state = 402; + this.statement(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1729,8 +1970,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1742,19 +1982,18 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 404; - this.match(KipperParser.While); - this.state = 405; - this.match(KipperParser.LeftParen); - this.state = 406; - this.expression(); - this.state = 407; - this.match(KipperParser.RightParen); - this.state = 408; - this.statement(); - } - } - catch (re) { + this.state = 404; + this.match(KipperParser.While); + this.state = 405; + this.match(KipperParser.LeftParen); + this.state = 406; + this.expression(); + this.state = 407; + this.match(KipperParser.RightParen); + this.state = 408; + this.statement(); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1762,36 +2001,37 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public doWhileLoopIterationStatement(): DoWhileLoopIterationStatementContext { - let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext(this._ctx, this.state); + let _localctx: DoWhileLoopIterationStatementContext = new DoWhileLoopIterationStatementContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 68, KipperParser.RULE_doWhileLoopIterationStatement); try { this.enterOuterAlt(_localctx, 1); { - this.state = 410; - this.match(KipperParser.Do); - this.state = 411; - this.statement(); - this.state = 412; - this.match(KipperParser.While); - this.state = 413; - this.match(KipperParser.LeftParen); - this.state = 414; - this.expression(); - this.state = 415; - this.match(KipperParser.RightParen); - this.state = 416; - this.match(KipperParser.SemiColon); - } - } - catch (re) { + this.state = 410; + this.match(KipperParser.Do); + this.state = 411; + this.statement(); + this.state = 412; + this.match(KipperParser.While); + this.state = 413; + this.match(KipperParser.LeftParen); + this.state = 414; + this.expression(); + this.state = 415; + this.match(KipperParser.RightParen); + this.state = 416; + this.match(KipperParser.SemiColon); + } + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1799,8 +2039,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1813,23 +2052,22 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 418; - _la = this._input.LA(1); - if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 418; + _la = this._input.LA(1); + if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 419; - this.match(KipperParser.SemiColon); + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 419; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1837,8 +2075,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1851,23 +2088,53 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 421; - this.match(KipperParser.Return); - this.state = 423; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 422; - this.expression(); + this.state = 421; + this.match(KipperParser.Return); + this.state = 423; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 422; + this.expression(); + } } - } - this.state = 425; - this.match(KipperParser.SemiColon); + this.state = 425; + this.match(KipperParser.SemiColon); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1875,8 +2142,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1888,89 +2154,88 @@ export class KipperParser extends KipperParserBase { try { this.state = 437; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 30, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 427; - this.tangledPrimaryExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 30, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 427; + this.tangledPrimaryExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 428; - this.lambdaPrimaryExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 428; + this.lambdaPrimaryExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 429; - this.arrayPrimaryExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 429; + this.arrayPrimaryExpression(); + } + break; - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 430; - this.objectPrimaryExpression(); - } - break; + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 430; + this.objectPrimaryExpression(); + } + break; - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 431; - this.boolPrimaryExpression(); - } - break; + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 431; + this.boolPrimaryExpression(); + } + break; - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 432; - this.identifierPrimaryExpression(); - } - break; + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 432; + this.identifierPrimaryExpression(); + } + break; - case 7: - this.enterOuterAlt(_localctx, 7); - { - this.state = 433; - this.stringPrimaryExpression(); - } - break; + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 433; + this.stringPrimaryExpression(); + } + break; - case 8: - this.enterOuterAlt(_localctx, 8); - { - this.state = 434; - this.fStringPrimaryExpression(); - } - break; + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 434; + this.fStringPrimaryExpression(); + } + break; - case 9: - this.enterOuterAlt(_localctx, 9); - { - this.state = 435; - this.numberPrimaryExpression(); - } - break; + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 435; + this.numberPrimaryExpression(); + } + break; - case 10: - this.enterOuterAlt(_localctx, 10); - { - this.state = 436; - this.voidOrNullOrUndefinedPrimaryExpression(); - } - break; + case 10: + this.enterOuterAlt(_localctx, 10); + { + this.state = 436; + this.voidOrNullOrUndefinedPrimaryExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -1978,8 +2243,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -1992,46 +2256,45 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 439; - this.match(KipperParser.LeftParen); - this.state = 441; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Identifier) { - { - this.state = 440; - this.parameterList(); + this.state = 439; + this.match(KipperParser.LeftParen); + this.state = 441; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Identifier) { + { + this.state = 440; + this.parameterList(); + } } - } - this.state = 443; - this.match(KipperParser.RightParen); - this.state = 444; - this.match(KipperParser.Colon); - this.state = 445; - this.typeSpecifierExpression(); - this.state = 446; - this.match(KipperParser.RetIndicator); - this.state = 449; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 32, this._ctx) ) { - case 1: - { - this.state = 447; - this.expression(); - } - break; + this.state = 443; + this.match(KipperParser.RightParen); + this.state = 444; + this.match(KipperParser.Colon); + this.state = 445; + this.typeSpecifierExpression(); + this.state = 446; + this.match(KipperParser.RetIndicator); + this.state = 449; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { + case 1: + { + this.state = 447; + this.expression(); + } + break; - case 2: - { - this.state = 448; - this.compoundStatement(); + case 2: + { + this.state = 448; + this.compoundStatement(); + } + break; } - break; } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2039,8 +2302,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2052,15 +2314,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 451; - this.match(KipperParser.LeftParen); - this.state = 452; - this.expression(); - this.state = 453; - this.match(KipperParser.RightParen); + this.state = 451; + this.match(KipperParser.LeftParen); + this.state = 452; + this.expression(); + this.state = 453; + this.match(KipperParser.RightParen); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2068,8 +2329,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2082,21 +2342,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 455; - _la = this._input.LA(1); - if (!(_la === KipperParser.True || _la === KipperParser.False)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 455; + _la = this._input.LA(1); + if (!(_la === KipperParser.True || _la === KipperParser.False)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2104,8 +2363,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2117,11 +2375,10 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 457; - this.identifier(); + this.state = 457; + this.identifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2129,8 +2386,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2142,11 +2398,10 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 459; - this.match(KipperParser.Identifier); + this.state = 459; + this.match(KipperParser.Identifier); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2154,40 +2409,41 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { - let _localctx: IdentifierOrStringPrimaryExpressionContext = new IdentifierOrStringPrimaryExpressionContext(this._ctx, this.state); + let _localctx: IdentifierOrStringPrimaryExpressionContext = new IdentifierOrStringPrimaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 86, KipperParser.RULE_identifierOrStringPrimaryExpression); try { this.state = 463; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.Identifier: - this.enterOuterAlt(_localctx, 1); - { - this.state = 461; - this.identifier(); - } - break; - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - this.enterOuterAlt(_localctx, 2); - { - this.state = 462; - this.stringPrimaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.Identifier: + this.enterOuterAlt(_localctx, 1); + { + this.state = 461; + this.identifier(); + } + break; + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + this.enterOuterAlt(_localctx, 2); + { + this.state = 462; + this.stringPrimaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2195,8 +2451,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2209,21 +2464,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 465; - _la = this._input.LA(1); - if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 465; + _la = this._input.LA(1); + if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2231,8 +2485,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2246,57 +2499,56 @@ export class KipperParser extends KipperParserBase { this.state = 483; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 467; - this.match(KipperParser.FStringSingleQuoteStart); - this.state = 471; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { - { + case KipperParser.FStringSingleQuoteStart: + this.enterOuterAlt(_localctx, 1); { - this.state = 468; - this.fStringSingleQuoteAtom(); - } + this.state = 467; + this.match(KipperParser.FStringSingleQuoteStart); + this.state = 471; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { + { + { + this.state = 468; + this.fStringSingleQuoteAtom(); + } + } + this.state = 473; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 474; + this.match(KipperParser.FStringSingleQuoteEnd); } - this.state = 473; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 474; - this.match(KipperParser.FStringSingleQuoteEnd); - } - break; - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 475; - this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 479; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { - { + break; + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 2); { - this.state = 476; - this.fStringDoubleQuoteAtom(); - } + this.state = 475; + this.match(KipperParser.FStringDoubleQuoteStart); + this.state = 479; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { + { + { + this.state = 476; + this.fStringDoubleQuoteAtom(); + } + } + this.state = 481; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 482; + this.match(KipperParser.FStringDoubleQuoteEnd); } - this.state = 481; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 482; - this.match(KipperParser.FStringDoubleQuoteEnd); - } - break; - default: - throw new NoViableAltException(this); + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2304,8 +2556,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2319,37 +2570,67 @@ export class KipperParser extends KipperParserBase { this.state = 491; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringSingleQuoteAtom: - this.enterOuterAlt(_localctx, 1); - { - this.state = 485; - this.match(KipperParser.FStringSingleQuoteAtom); - } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 486; - this.match(KipperParser.FStringExpStart); - this.state = 488; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + case KipperParser.FStringSingleQuoteAtom: + this.enterOuterAlt(_localctx, 1); { - this.state = 487; - this.expression(); + this.state = 485; + this.match(KipperParser.FStringSingleQuoteAtom); } - } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 486; + this.match(KipperParser.FStringExpStart); + this.state = 488; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 487; + this.expression(); + } + } - this.state = 490; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 490; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2357,8 +2638,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2372,37 +2652,67 @@ export class KipperParser extends KipperParserBase { this.state = 499; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.FStringDoubleQuoteAtom: - this.enterOuterAlt(_localctx, 1); - { - this.state = 493; - this.match(KipperParser.FStringDoubleQuoteAtom); - } - break; - case KipperParser.FStringExpStart: - this.enterOuterAlt(_localctx, 2); - { - this.state = 494; - this.match(KipperParser.FStringExpStart); - this.state = 496; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { + case KipperParser.FStringDoubleQuoteAtom: + this.enterOuterAlt(_localctx, 1); { - this.state = 495; - this.expression(); + this.state = 493; + this.match(KipperParser.FStringDoubleQuoteAtom); } - } + break; + case KipperParser.FStringExpStart: + this.enterOuterAlt(_localctx, 2); + { + this.state = 494; + this.match(KipperParser.FStringExpStart); + this.state = 496; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 495; + this.expression(); + } + } - this.state = 498; - this.match(KipperParser.FStringExpEnd); - } - break; - default: - throw new NoViableAltException(this); + this.state = 498; + this.match(KipperParser.FStringExpEnd); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2410,8 +2720,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2423,22 +2732,21 @@ export class KipperParser extends KipperParserBase { let _la: number; try { this.enterOuterAlt(_localctx, 1); - { - this.state = 501; - _la = this._input.LA(1); - if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + { + this.state = 501; + _la = this._input.LA(1); + if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2446,8 +2754,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2461,51 +2768,81 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 503; - this.match(KipperParser.LeftBracket); - this.state = 512; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 504; - this.expression(); - this.state = 509; + this.state = 503; + this.match(KipperParser.LeftBracket); + this.state = 512; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 505; - this.match(KipperParser.Comma); - this.state = 506; + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 504; this.expression(); - } + this.state = 509; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 505; + this.match(KipperParser.Comma); + this.state = 506; + this.expression(); + } + } + } + this.state = 511; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } } - this.state = 511; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } - } - } - this.state = 515; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Comma) { - { - this.state = 514; - this.match(KipperParser.Comma); + this.state = 515; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 514; + this.match(KipperParser.Comma); + } } - } - this.state = 517; - this.match(KipperParser.RightBracket); + this.state = 517; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2513,8 +2850,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2528,51 +2864,57 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 519; - this.match(KipperParser.LeftBrace); - this.state = 528; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 77)) & ~0x1F) === 0 && ((1 << (_la - 77)) & ((1 << (KipperParser.Identifier - 77)) | (1 << (KipperParser.SingleQuoteStringLiteral - 77)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 77)))) !== 0)) { - { - this.state = 520; - this.objectProperty(); - this.state = 525; + this.state = 519; + this.match(KipperParser.LeftBrace); + this.state = 528; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 521; - this.match(KipperParser.Comma); - this.state = 522; + _la = this._input.LA(1); + if ( + ((_la - 77) & ~0x1f) === 0 && + ((1 << (_la - 77)) & + ((1 << (KipperParser.Identifier - 77)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 77)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 77)))) !== + 0 + ) { + { + this.state = 520; this.objectProperty(); - } + this.state = 525; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 521; + this.match(KipperParser.Comma); + this.state = 522; + this.objectProperty(); + } + } + } + this.state = 527; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); } } - this.state = 527; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); - } } - } - this.state = 531; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === KipperParser.Comma) { - { - this.state = 530; - this.match(KipperParser.Comma); + this.state = 531; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === KipperParser.Comma) { + { + this.state = 530; + this.match(KipperParser.Comma); + } } - } - this.state = 533; - this.match(KipperParser.RightBrace); + this.state = 533; + this.match(KipperParser.RightBrace); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2580,8 +2922,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2593,15 +2934,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 535; - this.identifierOrStringPrimaryExpression(); - this.state = 536; - this.match(KipperParser.Colon); - this.state = 537; - this.expression(); + this.state = 535; + this.identifierOrStringPrimaryExpression(); + this.state = 536; + this.match(KipperParser.Colon); + this.state = 537; + this.expression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2609,35 +2949,45 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public voidOrNullOrUndefinedPrimaryExpression(): VoidOrNullOrUndefinedPrimaryExpressionContext { - let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext(this._ctx, this.state); + let _localctx: VoidOrNullOrUndefinedPrimaryExpressionContext = new VoidOrNullOrUndefinedPrimaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 104, KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 539; - _la = this._input.LA(1); - if (!(((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 539; + _la = this._input.LA(1); + if ( + !( + ((_la - 32) & ~0x1f) === 0 && + ((1 << (_la - 32)) & + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2645,8 +2995,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2671,179 +3020,279 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 561; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case KipperParser.True: - case KipperParser.False: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - { - _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 542; - this.primaryExpression(); - } - break; - case KipperParser.CallFunc: - { - _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 543; - this.match(KipperParser.CallFunc); - this.state = 544; - this.computedPrimaryExpression(0); - this.state = 545; - this.match(KipperParser.LeftParen); - this.state = 547; + this.state = 561; this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 546; - this.argumentExpressionList(); - } - } - - this.state = 549; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression - } - break; - case KipperParser.New: - { - _localctx = new NewInstantiationExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 552; - this.match(KipperParser.New); - this.state = 553; - this.typeSpecifierExpression(); - this.state = 554; - this.match(KipperParser.LeftParen); - this.state = 556; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 555; - this.argumentExpressionList(); - } - } - - this.state = 558; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression - } - break; - default: - throw new NoViableAltException(this); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 584; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 582; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 51, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case KipperParser.True: + case KipperParser.False: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: { - _localctx = new DotNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 563; - if (!(this.precpred(this._ctx, 6))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 564; - this.dotNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression - } - break; + _localctx = new PassOncomputedPrimaryExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; - case 2: - { - _localctx = new BracketNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 567; - if (!(this.precpred(this._ctx, 5))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 568; - this.bracketNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + this.state = 542; + this.primaryExpression(); } break; - - case 3: + case KipperParser.CallFunc: { - _localctx = new SliceNotationMemberAccessExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 571; - if (!(this.precpred(this._ctx, 4))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); - } - this.state = 572; - this.sliceNotation(); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression + _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 543; + this.match(KipperParser.CallFunc); + this.state = 544; + this.computedPrimaryExpression(0); + this.state = 545; + this.match(KipperParser.LeftParen); + this.state = 547; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 546; + this.argumentExpressionList(); + } + } + + this.state = 549; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } break; - - case 4: + case KipperParser.New: { - _localctx = new FunctionCallExpressionContext(new ComputedPrimaryExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 575; - if (!(this.precpred(this._ctx, 3))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 576; - this.match(KipperParser.LeftParen); - this.state = 578; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 577; - this.argumentExpressionList(); + _localctx = new NewInstantiationExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 552; + this.match(KipperParser.New); + this.state = 553; + this.typeSpecifierExpression(); + this.state = 554; + this.match(KipperParser.LeftParen); + this.state = 556; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 555; + this.argumentExpressionList(); + } } - } - this.state = 580; - this.match(KipperParser.RightParen); - _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression + this.state = 558; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; } break; - } - } + default: + throw new NoViableAltException(this); } - this.state = 586; + this._ctx._stop = this._input.tryLT(-1); + this.state = 584; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 582; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { + case 1: + { + _localctx = new DotNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 563; + if (!this.precpred(this._ctx, 6)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); + } + this.state = 564; + this.dotNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 2: + { + _localctx = new BracketNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 567; + if (!this.precpred(this._ctx, 5)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 568; + this.bracketNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 3: + { + _localctx = new SliceNotationMemberAccessExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 571; + if (!this.precpred(this._ctx, 4)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); + } + this.state = 572; + this.sliceNotation(); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; + } + break; + + case 4: + { + _localctx = new FunctionCallExpressionContext( + new ComputedPrimaryExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); + this.state = 575; + if (!this.precpred(this._ctx, 3)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 576; + this.match(KipperParser.LeftParen); + this.state = 578; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 577; + this.argumentExpressionList(); + } + } + + this.state = 580; + this.match(KipperParser.RightParen); + _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; + } + break; + } + } + } + this.state = 586; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2851,8 +3300,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -2865,27 +3313,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 587; - this.assignmentExpression(); - this.state = 592; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === KipperParser.Comma) { - { - { - this.state = 588; - this.match(KipperParser.Comma); - this.state = 589; + this.state = 587; this.assignmentExpression(); - } - } - this.state = 594; + this.state = 592; this._errHandler.sync(this); _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 588; + this.match(KipperParser.Comma); + this.state = 589; + this.assignmentExpression(); + } + } + this.state = 594; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2893,8 +3340,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2906,13 +3352,12 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 595; - this.match(KipperParser.Dot); - this.state = 596; - this.identifier(); + this.state = 595; + this.match(KipperParser.Dot); + this.state = 596; + this.identifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2920,8 +3365,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2933,15 +3377,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 598; - this.match(KipperParser.LeftBracket); - this.state = 599; - this.expression(); - this.state = 600; - this.match(KipperParser.RightBracket); + this.state = 598; + this.match(KipperParser.LeftBracket); + this.state = 599; + this.expression(); + this.state = 600; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -2949,8 +3392,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -2963,37 +3405,98 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 602; - this.match(KipperParser.LeftBracket); - this.state = 606; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 603; - this.expression(); - _localctx.sliceStart = true + this.state = 602; + this.match(KipperParser.LeftBracket); + this.state = 606; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 603; + this.expression(); + _localctx.sliceStart = true; + } } - } - this.state = 608; - this.match(KipperParser.Colon); - this.state = 612; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 22)) & ~0x1F) === 0 && ((1 << (_la - 22)) & ((1 << (KipperParser.CallFunc - 22)) | (1 << (KipperParser.New - 22)) | (1 << (KipperParser.True - 22)) | (1 << (KipperParser.False - 22)) | (1 << (KipperParser.Typeof - 22)) | (1 << (KipperParser.Void - 22)) | (1 << (KipperParser.Null - 22)) | (1 << (KipperParser.Undefined - 22)) | (1 << (KipperParser.LeftParen - 22)) | (1 << (KipperParser.LeftBracket - 22)) | (1 << (KipperParser.LeftBrace - 22)) | (1 << (KipperParser.Plus - 22)) | (1 << (KipperParser.PlusPlus - 22)) | (1 << (KipperParser.Minus - 22)) | (1 << (KipperParser.MinusMinus - 22)))) !== 0) || ((((_la - 56)) & ~0x1F) === 0 && ((1 << (_la - 56)) & ((1 << (KipperParser.Not - 56)) | (1 << (KipperParser.BitwiseNot - 56)) | (1 << (KipperParser.Identifier - 56)) | (1 << (KipperParser.IntegerConstant - 56)) | (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | (1 << (KipperParser.FloatingConstant - 56)) | (1 << (KipperParser.FStringSingleQuoteStart - 56)) | (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0)) { - { - this.state = 609; - this.expression(); - _localctx.sliceEnd = true + this.state = 608; + this.match(KipperParser.Colon); + this.state = 612; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ( + (((_la - 22) & ~0x1f) === 0 && + ((1 << (_la - 22)) & + ((1 << (KipperParser.CallFunc - 22)) | + (1 << (KipperParser.New - 22)) | + (1 << (KipperParser.True - 22)) | + (1 << (KipperParser.False - 22)) | + (1 << (KipperParser.Typeof - 22)) | + (1 << (KipperParser.Void - 22)) | + (1 << (KipperParser.Null - 22)) | + (1 << (KipperParser.Undefined - 22)) | + (1 << (KipperParser.LeftParen - 22)) | + (1 << (KipperParser.LeftBracket - 22)) | + (1 << (KipperParser.LeftBrace - 22)) | + (1 << (KipperParser.Plus - 22)) | + (1 << (KipperParser.PlusPlus - 22)) | + (1 << (KipperParser.Minus - 22)) | + (1 << (KipperParser.MinusMinus - 22)))) !== + 0) || + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== + 0) + ) { + { + this.state = 609; + this.expression(); + _localctx.sliceEnd = true; + } } - } - this.state = 614; - this.match(KipperParser.RightBracket); + this.state = 614; + this.match(KipperParser.RightBracket); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3001,8 +3504,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3014,33 +3516,32 @@ export class KipperParser extends KipperParserBase { try { this.state = 619; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 56, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 616; - this.computedPrimaryExpression(0); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 616; + this.computedPrimaryExpression(0); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 617; - this.incrementOrDecrementPostfixExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 617; + this.incrementOrDecrementPostfixExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 618; - this.typeofExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 618; + this.typeofExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3048,26 +3549,27 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementPostfixExpression(): IncrementOrDecrementPostfixExpressionContext { - let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext(this._ctx, this.state); + let _localctx: IncrementOrDecrementPostfixExpressionContext = new IncrementOrDecrementPostfixExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 118, KipperParser.RULE_incrementOrDecrementPostfixExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 621; - this.computedPrimaryExpression(0); - this.state = 622; - this.incrementOrDecrementOperator(); + this.state = 621; + this.computedPrimaryExpression(0); + this.state = 622; + this.incrementOrDecrementOperator(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3075,8 +3577,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3088,13 +3589,12 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 624; - this.match(KipperParser.Typeof); - this.state = 625; - this.assignmentExpression(); + this.state = 624; + this.match(KipperParser.Typeof); + this.state = 625; + this.assignmentExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3102,8 +3602,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3116,53 +3615,52 @@ export class KipperParser extends KipperParserBase { this.state = 630; this._errHandler.sync(this); switch (this._input.LA(1)) { - case KipperParser.CallFunc: - case KipperParser.New: - case KipperParser.True: - case KipperParser.False: - case KipperParser.Typeof: - case KipperParser.Void: - case KipperParser.Null: - case KipperParser.Undefined: - case KipperParser.LeftParen: - case KipperParser.LeftBracket: - case KipperParser.LeftBrace: - case KipperParser.Identifier: - case KipperParser.IntegerConstant: - case KipperParser.SingleQuoteStringLiteral: - case KipperParser.DoubleQuoteStringLiteral: - case KipperParser.FloatingConstant: - case KipperParser.FStringSingleQuoteStart: - case KipperParser.FStringDoubleQuoteStart: - this.enterOuterAlt(_localctx, 1); - { - this.state = 627; - this.postfixExpression(); - } - break; - case KipperParser.PlusPlus: - case KipperParser.MinusMinus: - this.enterOuterAlt(_localctx, 2); - { - this.state = 628; - this.incrementOrDecrementUnaryExpression(); - } - break; - case KipperParser.Plus: - case KipperParser.Minus: - case KipperParser.Not: - case KipperParser.BitwiseNot: - this.enterOuterAlt(_localctx, 3); - { - this.state = 629; - this.operatorModifiedUnaryExpression(); - } - break; - default: - throw new NoViableAltException(this); + case KipperParser.CallFunc: + case KipperParser.New: + case KipperParser.True: + case KipperParser.False: + case KipperParser.Typeof: + case KipperParser.Void: + case KipperParser.Null: + case KipperParser.Undefined: + case KipperParser.LeftParen: + case KipperParser.LeftBracket: + case KipperParser.LeftBrace: + case KipperParser.Identifier: + case KipperParser.IntegerConstant: + case KipperParser.SingleQuoteStringLiteral: + case KipperParser.DoubleQuoteStringLiteral: + case KipperParser.FloatingConstant: + case KipperParser.FStringSingleQuoteStart: + case KipperParser.FStringDoubleQuoteStart: + this.enterOuterAlt(_localctx, 1); + { + this.state = 627; + this.postfixExpression(); + } + break; + case KipperParser.PlusPlus: + case KipperParser.MinusMinus: + this.enterOuterAlt(_localctx, 2); + { + this.state = 628; + this.incrementOrDecrementUnaryExpression(); + } + break; + case KipperParser.Plus: + case KipperParser.Minus: + case KipperParser.Not: + case KipperParser.BitwiseNot: + this.enterOuterAlt(_localctx, 3); + { + this.state = 629; + this.operatorModifiedUnaryExpression(); + } + break; + default: + throw new NoViableAltException(this); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3170,26 +3668,27 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public incrementOrDecrementUnaryExpression(): IncrementOrDecrementUnaryExpressionContext { - let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext(this._ctx, this.state); + let _localctx: IncrementOrDecrementUnaryExpressionContext = new IncrementOrDecrementUnaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 124, KipperParser.RULE_incrementOrDecrementUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 632; - this.incrementOrDecrementOperator(); - this.state = 633; - this.postfixExpression(); + this.state = 632; + this.incrementOrDecrementOperator(); + this.state = 633; + this.postfixExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3197,26 +3696,27 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public operatorModifiedUnaryExpression(): OperatorModifiedUnaryExpressionContext { - let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext(this._ctx, this.state); + let _localctx: OperatorModifiedUnaryExpressionContext = new OperatorModifiedUnaryExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 126, KipperParser.RULE_operatorModifiedUnaryExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 635; - this.unaryOperator(); - this.state = 636; - this.postfixExpression(); + this.state = 635; + this.unaryOperator(); + this.state = 636; + this.postfixExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3224,8 +3724,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3238,21 +3737,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 638; - _la = this._input.LA(1); - if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 638; + _la = this._input.LA(1); + if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3260,8 +3758,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3274,21 +3771,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 640; - _la = this._input.LA(1); - if (!(((((_la - 46)) & ~0x1F) === 0 && ((1 << (_la - 46)) & ((1 << (KipperParser.Plus - 46)) | (1 << (KipperParser.Minus - 46)) | (1 << (KipperParser.Not - 46)) | (1 << (KipperParser.BitwiseNot - 46)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 640; + _la = this._input.LA(1); + if ( + !( + ((_la - 46) & ~0x1f) === 0 && + ((1 << (_la - 46)) & + ((1 << (KipperParser.Plus - 46)) | + (1 << (KipperParser.Minus - 46)) | + (1 << (KipperParser.Not - 46)) | + (1 << (KipperParser.BitwiseNot - 46)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3296,8 +3802,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3309,31 +3814,30 @@ export class KipperParser extends KipperParserBase { try { this.state = 647; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 58, this._ctx) ) { - case 1: - _localctx = new PassOnCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 642; - this.unaryExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { + case 1: + _localctx = new PassOnCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 642; + this.unaryExpression(); + } + break; - case 2: - _localctx = new ActualCastOrConvertExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 643; - this.unaryExpression(); - this.state = 644; - this.match(KipperParser.As); - this.state = 645; - this.typeSpecifierExpression(); - } - break; + case 2: + _localctx = new ActualCastOrConvertExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 643; + this.unaryExpression(); + this.state = 644; + this.match(KipperParser.As); + this.state = 645; + this.typeSpecifierExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3341,8 +3845,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3367,56 +3870,67 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnMultiplicativeExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 650; - this.castOrConvertExpression(); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 657; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnMultiplicativeExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualMultiplicativeExpressionContext(new MultiplicativeExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 652; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 653; - _la = this._input.LA(1); - if (!(((((_la - 50)) & ~0x1F) === 0 && ((1 << (_la - 50)) & ((1 << (KipperParser.Star - 50)) | (1 << (KipperParser.Div - 50)) | (1 << (KipperParser.Mod - 50)) | (1 << (KipperParser.PowerTo - 50)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 654; + this.state = 650; this.castOrConvertExpression(); - } - } } - this.state = 659; + this._ctx._stop = this._input.tryLT(-1); + this.state = 657; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualMultiplicativeExpressionContext( + new MultiplicativeExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); + this.state = 652; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 653; + _la = this._input.LA(1); + if ( + !( + ((_la - 50) & ~0x1f) === 0 && + ((1 << (_la - 50)) & + ((1 << (KipperParser.Star - 50)) | + (1 << (KipperParser.Div - 50)) | + (1 << (KipperParser.Mod - 50)) | + (1 << (KipperParser.PowerTo - 50)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 654; + this.castOrConvertExpression(); + } + } + } + this.state = 659; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3424,8 +3938,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3450,56 +3963,57 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnAdditiveExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 661; - this.multiplicativeExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 668; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnAdditiveExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualAdditiveExpressionContext(new AdditiveExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 663; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 664; - _la = this._input.LA(1); - if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 665; + this.state = 661; this.multiplicativeExpression(0); - } - } } - this.state = 670; + this._ctx._stop = this._input.tryLT(-1); + this.state = 668; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualAdditiveExpressionContext( + new AdditiveExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); + this.state = 663; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 664; + _la = this._input.LA(1); + if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 665; + this.multiplicativeExpression(0); + } + } + } + this.state = 670; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3507,8 +4021,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3532,46 +4045,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 672; - this.additiveExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 680; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseShiftExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseShiftExpressionContext(new BitwiseShiftExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 674; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 675; - this.bitwiseShiftOperators(); - this.state = 676; - this.bitwiseAndExpression(0); - } - } + + this.state = 672; + this.additiveExpression(0); } - this.state = 682; + this._ctx._stop = this._input.tryLT(-1); + this.state = 680; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseShiftExpressionContext( + new BitwiseShiftExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); + this.state = 674; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 675; + this.bitwiseShiftOperators(); + this.state = 676; + this.bitwiseAndExpression(0); + } + } + } + this.state = 682; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3579,8 +4093,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3593,21 +4106,29 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 683; - _la = this._input.LA(1); - if (!(((((_la - 73)) & ~0x1F) === 0 && ((1 << (_la - 73)) & ((1 << (KipperParser.BitwiseZeroFillLeftShift - 73)) | (1 << (KipperParser.BitwiseSignedRightShift - 73)) | (1 << (KipperParser.BitwiseZeroFillRightShift - 73)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 683; + _la = this._input.LA(1); + if ( + !( + ((_la - 73) & ~0x1f) === 0 && + ((1 << (_la - 73)) & + ((1 << (KipperParser.BitwiseZeroFillLeftShift - 73)) | + (1 << (KipperParser.BitwiseSignedRightShift - 73)) | + (1 << (KipperParser.BitwiseZeroFillRightShift - 73)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3615,8 +4136,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -3641,56 +4161,67 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnRelationalExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 686; - this.bitwiseShiftExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 693; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnRelationalExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualRelationalExpressionContext(new RelationalExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 688; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 689; - _la = this._input.LA(1); - if (!(((((_la - 65)) & ~0x1F) === 0 && ((1 << (_la - 65)) & ((1 << (KipperParser.Less - 65)) | (1 << (KipperParser.LessEqual - 65)) | (1 << (KipperParser.Greater - 65)) | (1 << (KipperParser.GreaterEqual - 65)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 690; + this.state = 686; this.bitwiseShiftExpression(0); - } - } } - this.state = 695; + this._ctx._stop = this._input.tryLT(-1); + this.state = 693; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualRelationalExpressionContext( + new RelationalExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); + this.state = 688; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 689; + _la = this._input.LA(1); + if ( + !( + ((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.Less - 65)) | + (1 << (KipperParser.LessEqual - 65)) | + (1 << (KipperParser.Greater - 65)) | + (1 << (KipperParser.GreaterEqual - 65)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 690; + this.bitwiseShiftExpression(0); + } + } + } + this.state = 695; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3698,8 +4229,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3724,56 +4254,57 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnEqualityExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 697; - this.relationalExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 704; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnEqualityExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualEqualityExpressionContext(new EqualityExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 699; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 700; - _la = this._input.LA(1); - if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 701; + this.state = 697; this.relationalExpression(0); - } - } } - this.state = 706; + this._ctx._stop = this._input.tryLT(-1); + this.state = 704; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualEqualityExpressionContext( + new EqualityExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); + this.state = 699; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 700; + _la = this._input.LA(1); + if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 701; + this.relationalExpression(0); + } + } + } + this.state = 706; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3781,8 +4312,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3806,46 +4336,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 708; - this.equalityExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 715; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseAndExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseAndExpressionContext(new BitwiseAndExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 710; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 711; - this.match(KipperParser.BitwiseAnd); - this.state = 712; + + this.state = 708; this.equalityExpression(0); - } - } } - this.state = 717; + this._ctx._stop = this._input.tryLT(-1); + this.state = 715; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseAndExpressionContext( + new BitwiseAndExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); + this.state = 710; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 711; + this.match(KipperParser.BitwiseAnd); + this.state = 712; + this.equalityExpression(0); + } + } + } + this.state = 717; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3853,8 +4384,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3878,46 +4408,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseXorExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 719; - this.bitwiseAndExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 726; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseXorExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseXorExpressionContext(new BitwiseXorExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 721; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 722; - this.match(KipperParser.BitwiseXor); - this.state = 723; + + this.state = 719; this.bitwiseAndExpression(0); - } - } } - this.state = 728; + this._ctx._stop = this._input.tryLT(-1); + this.state = 726; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseXorExpressionContext( + new BitwiseXorExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); + this.state = 721; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 722; + this.match(KipperParser.BitwiseXor); + this.state = 723; + this.bitwiseAndExpression(0); + } + } + } + this.state = 728; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3925,8 +4456,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -3950,46 +4480,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnBitwiseOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 730; - this.bitwiseXorExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 737; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnBitwiseOrExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualBitwiseOrExpressionContext(new BitwiseOrExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 732; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 733; - this.match(KipperParser.BitwiseOr); - this.state = 734; + + this.state = 730; this.bitwiseXorExpression(0); - } - } } - this.state = 739; + this._ctx._stop = this._input.tryLT(-1); + this.state = 737; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualBitwiseOrExpressionContext( + new BitwiseOrExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); + this.state = 732; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 733; + this.match(KipperParser.BitwiseOr); + this.state = 734; + this.bitwiseXorExpression(0); + } + } + } + this.state = 739; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -3997,8 +4528,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4022,46 +4552,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalAndExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 741; - this.bitwiseOrExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 748; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnLogicalAndExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualLogicalAndExpressionContext(new LogicalAndExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 743; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 744; - this.match(KipperParser.AndAnd); - this.state = 745; + + this.state = 741; this.bitwiseOrExpression(0); - } - } } - this.state = 750; + this._ctx._stop = this._input.tryLT(-1); + this.state = 748; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalAndExpressionContext( + new LogicalAndExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); + this.state = 743; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 744; + this.match(KipperParser.AndAnd); + this.state = 745; + this.bitwiseOrExpression(0); + } + } + } + this.state = 750; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4069,8 +4600,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4094,46 +4624,47 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - { - _localctx = new PassOnLogicalOrExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 752; - this.logicalAndExpression(0); - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 759; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } + { + _localctx = new PassOnLogicalOrExpressionContext(_localctx); + this._ctx = _localctx; _prevctx = _localctx; - { - { - _localctx = new ActualLogicalOrExpressionContext(new LogicalOrExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 754; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 755; - this.match(KipperParser.OrOr); - this.state = 756; + + this.state = 752; this.logicalAndExpression(0); - } - } } - this.state = 761; + this._ctx._stop = this._input.tryLT(-1); + this.state = 759; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualLogicalOrExpressionContext( + new LogicalOrExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); + this.state = 754; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 755; + this.match(KipperParser.OrOr); + this.state = 756; + this.logicalAndExpression(0); + } + } + } + this.state = 761; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4141,8 +4672,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; @@ -4154,35 +4684,34 @@ export class KipperParser extends KipperParserBase { try { this.state = 769; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 69, this._ctx) ) { - case 1: - _localctx = new PassOnConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 762; - this.logicalOrExpression(0); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { + case 1: + _localctx = new PassOnConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 762; + this.logicalOrExpression(0); + } + break; - case 2: - _localctx = new ActualConditionalExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 763; - this.logicalOrExpression(0); - this.state = 764; - this.match(KipperParser.QuestionMark); - this.state = 765; - this.conditionalExpression(); - this.state = 766; - this.match(KipperParser.Colon); - this.state = 767; - this.conditionalExpression(); - } - break; + case 2: + _localctx = new ActualConditionalExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 763; + this.logicalOrExpression(0); + this.state = 764; + this.match(KipperParser.QuestionMark); + this.state = 765; + this.conditionalExpression(); + this.state = 766; + this.match(KipperParser.Colon); + this.state = 767; + this.conditionalExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4190,8 +4719,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4203,31 +4731,30 @@ export class KipperParser extends KipperParserBase { try { this.state = 776; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 70, this._ctx) ) { - case 1: - _localctx = new PassOnAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 771; - this.conditionalExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { + case 1: + _localctx = new PassOnAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 1); + { + this.state = 771; + this.conditionalExpression(); + } + break; - case 2: - _localctx = new ActualAssignmentExpressionContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 772; - this.computedPrimaryExpression(0); - this.state = 773; - this.assignmentOperator(); - this.state = 774; - this.assignmentExpression(); - } - break; + case 2: + _localctx = new ActualAssignmentExpressionContext(_localctx); + this.enterOuterAlt(_localctx, 2); + { + this.state = 772; + this.computedPrimaryExpression(0); + this.state = 773; + this.assignmentOperator(); + this.state = 774; + this.assignmentExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4235,8 +4762,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4249,21 +4775,32 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 778; - _la = this._input.LA(1); - if (!(((((_la - 57)) & ~0x1F) === 0 && ((1 << (_la - 57)) & ((1 << (KipperParser.Assign - 57)) | (1 << (KipperParser.PlusAssign - 57)) | (1 << (KipperParser.MinusAssign - 57)) | (1 << (KipperParser.StarAssign - 57)) | (1 << (KipperParser.DivAssign - 57)) | (1 << (KipperParser.ModAssign - 57)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 778; + _la = this._input.LA(1); + if ( + !( + ((_la - 57) & ~0x1f) === 0 && + ((1 << (_la - 57)) & + ((1 << (KipperParser.Assign - 57)) | + (1 << (KipperParser.PlusAssign - 57)) | + (1 << (KipperParser.MinusAssign - 57)) | + (1 << (KipperParser.StarAssign - 57)) | + (1 << (KipperParser.DivAssign - 57)) | + (1 << (KipperParser.ModAssign - 57)))) !== + 0 + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4271,8 +4808,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4285,29 +4821,28 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 780; - this.assignmentExpression(); - this.state = 785; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 781; - this.match(KipperParser.Comma); - this.state = 782; - this.assignmentExpression(); - } - } - } - this.state = 787; + this.state = 780; + this.assignmentExpression(); + this.state = 785; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 781; + this.match(KipperParser.Comma); + this.state = 782; + this.assignmentExpression(); + } + } + } + this.state = 787; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + } } - } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4315,8 +4850,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4328,33 +4862,32 @@ export class KipperParser extends KipperParserBase { try { this.state = 791; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 72, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 788; - this.identifierTypeSpecifierExpression(); - } - break; + switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 788; + this.identifierTypeSpecifierExpression(); + } + break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 789; - this.genericTypeSpecifierExpression(); - } - break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 789; + this.genericTypeSpecifierExpression(); + } + break; - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 790; - this.typeofTypeSpecifierExpression(); - } - break; + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 790; + this.typeofTypeSpecifierExpression(); + } + break; } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4362,24 +4895,25 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext { - let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: IdentifierTypeSpecifierExpressionContext = new IdentifierTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 166, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 793; - this.typeSpecifierIdentifier(); + this.state = 793; + this.typeSpecifierIdentifier(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4387,55 +4921,65 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public genericTypeSpecifierExpression(): GenericTypeSpecifierExpressionContext { - let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: GenericTypeSpecifierExpressionContext = new GenericTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 168, KipperParser.RULE_genericTypeSpecifierExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 795; - this.typeSpecifierIdentifier(); - this.state = 796; - this.match(KipperParser.Less); - this.state = 805; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 31)) & ~0x1F) === 0 && ((1 << (_la - 31)) & ((1 << (KipperParser.Typeof - 31)) | (1 << (KipperParser.Void - 31)) | (1 << (KipperParser.Null - 31)) | (1 << (KipperParser.Undefined - 31)))) !== 0) || _la === KipperParser.Identifier) { - { - this.state = 797; - this.typeSpecifierExpression(); - this.state = 802; + this.state = 795; + this.typeSpecifierIdentifier(); + this.state = 796; + this.match(KipperParser.Less); + this.state = 805; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === KipperParser.Comma) { + if ( + (((_la - 31) & ~0x1f) === 0 && + ((1 << (_la - 31)) & + ((1 << (KipperParser.Typeof - 31)) | + (1 << (KipperParser.Void - 31)) | + (1 << (KipperParser.Null - 31)) | + (1 << (KipperParser.Undefined - 31)))) !== + 0) || + _la === KipperParser.Identifier + ) { { - { - this.state = 798; - this.match(KipperParser.Comma); - this.state = 799; - this.typeSpecifierExpression(); - } + this.state = 797; + this.typeSpecifierExpression(); + this.state = 802; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === KipperParser.Comma) { + { + { + this.state = 798; + this.match(KipperParser.Comma); + this.state = 799; + this.typeSpecifierExpression(); + } + } + this.state = 804; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } - this.state = 804; - this._errHandler.sync(this); - _la = this._input.LA(1); - } } - } - this.state = 807; - this.match(KipperParser.Greater); + this.state = 807; + this.match(KipperParser.Greater); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4443,30 +4987,31 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) public typeofTypeSpecifierExpression(): TypeofTypeSpecifierExpressionContext { - let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext(this._ctx, this.state); + let _localctx: TypeofTypeSpecifierExpressionContext = new TypeofTypeSpecifierExpressionContext( + this._ctx, + this.state, + ); this.enterRule(_localctx, 170, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 809; - this.match(KipperParser.Typeof); - this.state = 810; - this.match(KipperParser.LeftParen); - this.state = 811; - this.typeSpecifierIdentifier(); - this.state = 812; - this.match(KipperParser.RightParen); + this.state = 809; + this.match(KipperParser.Typeof); + this.state = 810; + this.match(KipperParser.LeftParen); + this.state = 811; + this.typeSpecifierIdentifier(); + this.state = 812; + this.match(KipperParser.RightParen); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4474,8 +5019,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4488,21 +5032,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 814; - _la = this._input.LA(1); - if (!(((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (KipperParser.Void - 32)) | (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)))) !== 0) || _la === KipperParser.Identifier)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 814; + _la = this._input.LA(1); + if ( + !( + (((_la - 32) & ~0x1f) === 0 && + ((1 << (_la - 32)) & + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)))) !== + 0) || + _la === KipperParser.Identifier + ) + ) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } + this._errHandler.reportMatch(this); + this.consume(); + } } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4510,8 +5063,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4523,15 +5075,14 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 816; - this.assignmentExpression(); - this.state = 817; - this.match(KipperParser.Matches); - this.state = 818; - this.typeSpecifierExpression(); + this.state = 816; + this.assignmentExpression(); + this.state = 817; + this.match(KipperParser.Matches); + this.state = 818; + this.typeSpecifierExpression(); } - } - catch (re) { + } catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -4539,8 +5090,7 @@ export class KipperParser extends KipperParserBase { } else { throw re; } - } - finally { + } finally { this.exitRule(); } return _localctx; @@ -4548,134 +5098,134 @@ export class KipperParser extends KipperParserBase { public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 25: - return this.compoundStatement_sempred(_localctx as CompoundStatementContext, predIndex); + case 25: + return this.compoundStatement_sempred(_localctx as CompoundStatementContext, predIndex); - case 53: - return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); + case 53: + return this.computedPrimaryExpression_sempred(_localctx as ComputedPrimaryExpressionContext, predIndex); - case 67: - return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); + case 67: + return this.multiplicativeExpression_sempred(_localctx as MultiplicativeExpressionContext, predIndex); - case 68: - return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); + case 68: + return this.additiveExpression_sempred(_localctx as AdditiveExpressionContext, predIndex); - case 69: - return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); + case 69: + return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); - case 71: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + case 71: + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); - case 72: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + case 72: + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); - case 73: - return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); + case 73: + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); - case 74: - return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + case 74: + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); - case 75: - return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + case 75: + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); - case 76: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + case 76: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); - case 77: - return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); + case 77: + return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; } private compoundStatement_sempred(_localctx: CompoundStatementContext, predIndex: number): boolean { switch (predIndex) { - case 0: - return this.notInsideExpressionStatement(); + case 0: + return this.notInsideExpressionStatement(); } return true; } private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 1: - return this.precpred(this._ctx, 6); + case 1: + return this.precpred(this._ctx, 6); - case 2: - return this.precpred(this._ctx, 5); + case 2: + return this.precpred(this._ctx, 5); - case 3: - return this.precpred(this._ctx, 4); + case 3: + return this.precpred(this._ctx, 4); - case 4: - return this.precpred(this._ctx, 3); + case 4: + return this.precpred(this._ctx, 3); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: - return this.precpred(this._ctx, 1); + case 5: + return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: - return this.precpred(this._ctx, 1); + case 6: + return this.precpred(this._ctx, 1); } return true; } private bitwiseShiftExpression_sempred(_localctx: BitwiseShiftExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: - return this.precpred(this._ctx, 1); + case 7: + return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: - return this.precpred(this._ctx, 1); + case 8: + return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: - return this.precpred(this._ctx, 1); + case 9: + return this.precpred(this._ctx, 1); } return true; } private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: - return this.precpred(this._ctx, 1); + case 10: + return this.precpred(this._ctx, 1); } return true; } private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 11: - return this.precpred(this._ctx, 1); + case 11: + return this.precpred(this._ctx, 1); } return true; } private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 12: - return this.precpred(this._ctx, 1); + case 12: + return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 13: - return this.precpred(this._ctx, 1); + case 13: + return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 14: - return this.precpred(this._ctx, 1); + case 14: + return this.precpred(this._ctx, 1); } return true; } @@ -4688,8 +5238,8 @@ export class KipperParser extends KipperParserBase { "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + "\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C\x04" + - "\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04#" + - "\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + + '\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04"\t"\x04#' + + "\t#\x04$\t$\x04%\t%\x04&\t&\x04'\t'\x04(\t(\x04)\t)\x04*\t*\x04+\t+" + "\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x044" + "\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + @@ -4718,12 +5268,12 @@ export class KipperParser extends KipperParserBase { "\x1E\x05\x1E\u0160\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F" + "\x07\x1F\u0168\n\x1F\f\x1F\x0E\x1F\u016B\v\x1F\x03\x1F\x03\x1F\x03 \x03" + " \x03 \x03 \x03 \x03 \x03 \x03 \x05 \u0177\n \x03!\x03!\x03!\x05!\u017C" + - "\n!\x03\"\x03\"\x03\"\x03\"\x05\"\u0182\n\"\x03\"\x03\"\x05\"\u0186\n" + - "\"\x03\"\x03\"\x03\"\x03\"\x05\"\u018C\n\"\x03\"\x03\"\x03\"\x03\"\x05" + - "\"\u0192\n\"\x03\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03" + + '\n!\x03"\x03"\x03"\x03"\x05"\u0182\n"\x03"\x03"\x05"\u0186\n' + + '"\x03"\x03"\x03"\x03"\x05"\u018C\n"\x03"\x03"\x03"\x03"\x05' + + '"\u0192\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03' + "$\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01AA\n" + - "&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03" + - "\'\x05\'\u01B8\n\'\x03(\x03(\x05(\u01BC\n(\x03(\x03(\x03(\x03(\x03(\x03" + + "&\x03&\x03&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03" + + "'\x05'\u01B8\n'\x03(\x03(\x05(\u01BC\n(\x03(\x03(\x03(\x03(\x03(\x03" + "(\x05(\u01C4\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03" + "-\x03-\x05-\u01D2\n-\x03.\x03.\x03/\x03/\x07/\u01D8\n/\f/\x0E/\u01DB\v" + "/\x03/\x03/\x03/\x07/\u01E0\n/\f/\x0E/\u01E3\v/\x03/\x05/\u01E6\n/\x03" + @@ -4755,7 +5305,7 @@ export class KipperParser extends KipperParserBase { "\nV\fV\x0EV\u0326\vV\x05V\u0328\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W" + "\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x02\x02\rl\x88\x8A\x8C\x90\x92\x94" + "\x96\x98\x9A\x9CZ\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10" + - "\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02" + + '\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02' + "$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02" + "@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02" + "\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02" + @@ -4763,14 +5313,14 @@ export class KipperParser extends KipperParserBase { "\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E" + "\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0" + "\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02QR\x04" + - "\x02PPSS\x03\x02\"$\x04\x021133\x06\x020022::JJ\x03\x0247\x04\x020022" + - "\x03\x02KM\x03\x02CF\x03\x02AB\x03\x02;@\x04\x02\"$OO\x02\u0340\x02\xB3" + + '\x02PPSS\x03\x02"$\x04\x021133\x06\x020022::JJ\x03\x0247\x04\x020022' + + '\x03\x02KM\x03\x02CF\x03\x02AB\x03\x02;@\x04\x02"$OO\x02\u0340\x02\xB3' + "\x03\x02\x02\x02\x04\xB8\x03\x02\x02\x02\x06\xBC\x03\x02\x02\x02\b\xBF" + "\x03\x02\x02\x02\n\xC6\x03\x02\x02\x02\f\xCE\x03\x02\x02\x02\x0E\xD0\x03" + "\x02\x02\x02\x10\xD3\x03\x02\x02\x02\x12\xD5\x03\x02\x02\x02\x14\xDC\x03" + "\x02\x02\x02\x16\xDE\x03\x02\x02\x02\x18\xE0\x03\x02\x02\x02\x1A\xE2\x03" + "\x02\x02\x02\x1C\xEE\x03\x02\x02\x02\x1E\xF6\x03\x02\x02\x02 \xFA\x03" + - "\x02\x02\x02\"\u0107\x03\x02\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03" + + '\x02\x02\x02"\u0107\x03\x02\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03' + "\x02\x02\x02(\u0118\x03\x02\x02\x02*\u0127\x03\x02\x02\x02,\u0129\x03" + "\x02\x02\x02.\u012D\x03\x02\x02\x020\u0138\x03\x02\x02\x022\u0146\x03" + "\x02\x02\x024\u0148\x03\x02\x02\x026\u014F\x03\x02\x02\x028\u0156\x03" + @@ -4823,7 +5373,7 @@ export class KipperParser extends KipperParserBase { "\xF3\xF4\x03\x02\x02\x02\xF4\x1D\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + "\xF6\xF7\x05\x16\f\x02\xF7\xF8\x07(\x02\x02\xF8\xF9\x05\xA6T\x02\xF9\x1F" + "\x03\x02\x02\x02\xFA\xFB\x07\x1B\x02\x02\xFB\xFC\x05\x16\f\x02\xFC\u0100" + - "\x07.\x02\x02\xFD\xFF\x05\"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102" + + '\x07.\x02\x02\xFD\xFF\x05"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102' + "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02" + "\u0101\u0103\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0103\u0104\x07" + "/\x02\x02\u0104!\x03\x02\x02\x02\u0105\u0108\x05$\x13\x02\u0106\u0108" + @@ -4833,7 +5383,7 @@ export class KipperParser extends KipperParserBase { "\x02\x02\u010E\u010F\x05\x16\f\x02\u010F\u0111\x07)\x02\x02\u0110\u0112" + "\x05\x1C\x0F\x02\u0111\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02" + "\u0112\u0113\x03\x02\x02\x02\u0113\u0114\x07*\x02\x02\u0114\u0115\x07" + - "(\x02\x02\u0115\u0116\x05\xA6T\x02\u0116\u0117\x07&\x02\x02\u0117\'\x03" + + "(\x02\x02\u0115\u0116\x05\xA6T\x02\u0116\u0117\x07&\x02\x02\u0117'\x03" + "\x02\x02\x02\u0118\u0119\x07\x1A\x02\x02\u0119\u011A\x05\x16\f\x02\u011A" + "\u011F\x07.\x02\x02\u011B\u011E\x05*\x16\x02\u011C\u011E\x07&\x02\x02" + "\u011D\u011B\x03\x02\x02\x02\u011D\u011C\x03\x02\x02\x02\u011E\u0121\x03" + @@ -4875,18 +5425,18 @@ export class KipperParser extends KipperParserBase { "\u0170\x05\xA4S\x02\u0170\u0171\x07(\x02\x02\u0171\u0172\x052\x1A\x02" + "\u0172\u0177\x03\x02\x02\x02\u0173\u0174\x07\r\x02\x02\u0174\u0175\x07" + "(\x02\x02\u0175\u0177\x052\x1A\x02\u0176\u016E\x03\x02\x02\x02\u0176\u0173" + - "\x03\x02\x02\x02\u0177?\x03\x02\x02\x02\u0178\u017C\x05B\"\x02\u0179\u017C" + + '\x03\x02\x02\x02\u0177?\x03\x02\x02\x02\u0178\u017C\x05B"\x02\u0179\u017C' + "\x05D#\x02\u017A\u017C\x05F$\x02\u017B\u0178\x03\x02\x02\x02\u017B\u0179" + "\x03\x02\x02\x02\u017B\u017A\x03\x02\x02\x02\u017CA\x03\x02\x02\x02\u017D" + "\u017E\x07\x14\x02\x02\u017E\u0185\x07)\x02\x02\u017F\u0182\x05\x0E\b" + "\x02\u0180\u0182\x05\xA4S\x02\u0181\u017F\x03\x02\x02\x02\u0181\u0180" + - "\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0184\b\"\x01\x02\u0184" + + '\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0184\b"\x01\x02\u0184' + "\u0186\x03\x02\x02\x02\u0185\u0181\x03\x02\x02\x02\u0185\u0186\x03\x02" + "\x02\x02\u0186\u0187\x03\x02\x02\x02\u0187\u018B\x07&\x02\x02\u0188\u0189" + - "\x05\xA4S\x02\u0189\u018A\b\"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B" + + '\x05\xA4S\x02\u0189\u018A\b"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B' + "\u0188\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C\u018D\x03\x02" + "\x02\x02\u018D\u0191\x07&\x02\x02\u018E\u018F\x05\xA4S\x02\u018F\u0190" + - "\b\"\x01\x02\u0190\u0192\x03\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191" + + '\b"\x01\x02\u0190\u0192\x03\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191' + "\u0192\x03\x02\x02\x02\u0192\u0193\x03\x02\x02\x02\u0193\u0194\x07*\x02" + "\x02\u0194\u0195\x052\x1A\x02\u0195C\x03\x02\x02\x02\u0196\u0197\x07\x11" + "\x02\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05\xA4S\x02\u0199\u019A" + @@ -4950,7 +5500,7 @@ export class KipperParser extends KipperParserBase { "\x07/\x02\x02\u0218g\x03\x02\x02\x02\u0219\u021A\x05X-\x02\u021A\u021B" + "\x07(\x02\x02\u021B\u021C\x05\xA4S\x02\u021Ci\x03\x02\x02\x02\u021D\u021E" + "\t\x07\x02\x02\u021Ek\x03\x02\x02\x02\u021F\u0220\b7\x01\x02\u0220\u0234" + - "\x05L\'\x02\u0221\u0222\x07\x18\x02\x02\u0222\u0223\x05l7\x02\u0223\u0225" + + "\x05L'\x02\u0221\u0222\x07\x18\x02\x02\u0222\u0223\x05l7\x02\u0223\u0225" + "\x07)\x02\x02\u0224\u0226\x05n8\x02\u0225\u0224\x03\x02\x02\x02\u0225" + "\u0226\x03\x02\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227\u0228\x07*\x02" + "\x02\u0228\u0229\b7\x01\x02\u0229\u0234\x03\x02\x02\x02\u022A\u022B\x07" + @@ -5041,7 +5591,7 @@ export class KipperParser extends KipperParserBase { "\u02F4\x03\x02\x02\x02\u02F8\u02FB\x03\x02\x02\x02\u02F9\u02F7\x03\x02" + "\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\x9D\x03\x02\x02\x02\u02FB\u02F9" + "\x03\x02\x02\x02\u02FC\u0304\x05\x9CO\x02\u02FD\u02FE\x05\x9CO\x02\u02FE" + - "\u02FF\x07\'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300\u0301\x07(\x02\x02" + + "\u02FF\x07'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300\u0301\x07(\x02\x02" + "\u0301\u0302\x05\x9EP\x02\u0302\u0304\x03\x02\x02\x02\u0303\u02FC\x03" + "\x02\x02\x02\u0303\u02FD\x03\x02\x02\x02\u0304\x9F\x03\x02\x02\x02\u0305" + "\u030B\x05\x9EP\x02\u0306\u0307\x05l7\x02\u0307\u0308\x05\xA2R\x02\u0308" + @@ -5072,10 +5622,7 @@ export class KipperParser extends KipperParserBase { "\u029E\u02AA\u02B7\u02C2\u02CD\u02D8\u02E3\u02EE\u02F9\u0303\u030A\u0313" + "\u0319\u0324\u0327"; public static readonly _serializedATN: string = Utils.join( - [ - KipperParser._serializedATNSegment0, - KipperParser._serializedATNSegment1, - ], + [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", ); public static __ATN: ATN; @@ -5086,11 +5633,12 @@ export class KipperParser extends KipperParserBase { return KipperParser.__ATN; } - } export class CompilationUnitContext extends KipperParserRuleContext { - public EOF(): TerminalNode { return this.getToken(KipperParser.EOF, 0); } + public EOF(): TerminalNode { + return this.getToken(KipperParser.EOF, 0); + } public translationUnit(): TranslationUnitContext | undefined { return this.tryGetRuleContext(0, TranslationUnitContext); } @@ -5098,7 +5646,9 @@ export class CompilationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_compilationUnit; } + public get ruleIndex(): number { + return KipperParser.RULE_compilationUnit; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompilationUnit) { @@ -5121,7 +5671,6 @@ export class CompilationUnitContext extends KipperParserRuleContext { } } - export class TranslationUnitContext extends KipperParserRuleContext { public externalItem(): ExternalItemContext[]; public externalItem(i: number): ExternalItemContext; @@ -5136,7 +5685,9 @@ export class TranslationUnitContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_translationUnit; } + public get ruleIndex(): number { + return KipperParser.RULE_translationUnit; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTranslationUnit) { @@ -5159,13 +5710,14 @@ export class TranslationUnitContext extends KipperParserRuleContext { } } - export class ExternalItemContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_externalItem; } + public get ruleIndex(): number { + return KipperParser.RULE_externalItem; + } public copyFrom(ctx: ExternalItemContext): void { super.copyFrom(ctx); } @@ -5200,7 +5752,6 @@ export class ExternalBlockItemContext extends ExternalItemContext { } } - export class BlockItemListContext extends KipperParserRuleContext { public blockItem(): BlockItemContext[]; public blockItem(i: number): BlockItemContext; @@ -5215,7 +5766,9 @@ export class BlockItemListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_blockItemList; } + public get ruleIndex(): number { + return KipperParser.RULE_blockItemList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItemList) { @@ -5238,7 +5791,6 @@ export class BlockItemListContext extends KipperParserRuleContext { } } - export class BlockItemContext extends KipperParserRuleContext { public statement(): StatementContext | undefined { return this.tryGetRuleContext(0, StatementContext); @@ -5246,12 +5798,16 @@ export class BlockItemContext extends KipperParserRuleContext { public declaration(): DeclarationContext | undefined { return this.tryGetRuleContext(0, DeclarationContext); } - public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_blockItem; } + public get ruleIndex(): number { + return KipperParser.RULE_blockItem; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBlockItem) { @@ -5274,12 +5830,13 @@ export class BlockItemContext extends KipperParserRuleContext { } } - export class DeclarationContext extends KipperParserRuleContext { public variableDeclaration(): VariableDeclarationContext | undefined { return this.tryGetRuleContext(0, VariableDeclarationContext); } - public SemiColon(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SemiColon, 0); + } public functionDeclaration(): FunctionDeclarationContext | undefined { return this.tryGetRuleContext(0, FunctionDeclarationContext); } @@ -5293,7 +5850,9 @@ export class DeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_declaration; } + public get ruleIndex(): number { + return KipperParser.RULE_declaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclaration) { @@ -5316,7 +5875,6 @@ export class DeclarationContext extends KipperParserRuleContext { } } - export class VariableDeclarationContext extends KipperParserRuleContext { public storageTypeSpecifier(): StorageTypeSpecifierContext { return this.getRuleContext(0, StorageTypeSpecifierContext); @@ -5328,7 +5886,9 @@ export class VariableDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_variableDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_variableDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVariableDeclaration) { @@ -5351,15 +5911,20 @@ export class VariableDeclarationContext extends KipperParserRuleContext { } } - export class StorageTypeSpecifierContext extends KipperParserRuleContext { - public Var(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Var, 0); } - public Const(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Const, 0); } + public Var(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Var, 0); + } + public Const(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Const, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_storageTypeSpecifier; } + public get ruleIndex(): number { + return KipperParser.RULE_storageTypeSpecifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStorageTypeSpecifier) { @@ -5382,16 +5947,19 @@ export class StorageTypeSpecifierContext extends KipperParserRuleContext { } } - export class InitDeclaratorContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } + public Assign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Assign, 0); + } public initializer(): InitializerContext | undefined { return this.tryGetRuleContext(0, InitializerContext); } @@ -5399,7 +5967,9 @@ export class InitDeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_initDeclarator; } + public get ruleIndex(): number { + return KipperParser.RULE_initDeclarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitDeclarator) { @@ -5422,7 +5992,6 @@ export class InitDeclaratorContext extends KipperParserRuleContext { } } - export class InitializerContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); @@ -5431,7 +6000,9 @@ export class InitializerContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_initializer; } + public get ruleIndex(): number { + return KipperParser.RULE_initializer; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInitializer) { @@ -5454,7 +6025,6 @@ export class InitializerContext extends KipperParserRuleContext { } } - export class DeclaratorContext extends KipperParserRuleContext { public directDeclarator(): DirectDeclaratorContext { return this.getRuleContext(0, DirectDeclaratorContext); @@ -5463,7 +6033,9 @@ export class DeclaratorContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_declarator; } + public get ruleIndex(): number { + return KipperParser.RULE_declarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDeclarator) { @@ -5486,14 +6058,17 @@ export class DeclaratorContext extends KipperParserRuleContext { } } - export class DirectDeclaratorContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } + public Identifier(): TerminalNode { + return this.getToken(KipperParser.Identifier, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_directDeclarator; } + public get ruleIndex(): number { + return KipperParser.RULE_directDeclarator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDirectDeclarator) { @@ -5516,15 +6091,22 @@ export class DirectDeclaratorContext extends KipperParserRuleContext { } } - export class FunctionDeclarationContext extends KipperParserRuleContext { - public DefFunc(): TerminalNode { return this.getToken(KipperParser.DefFunc, 0); } + public DefFunc(): TerminalNode { + return this.getToken(KipperParser.DefFunc, 0); + } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public RetIndicator(): TerminalNode { + return this.getToken(KipperParser.RetIndicator, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -5538,7 +6120,9 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_functionDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_functionDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFunctionDeclaration) { @@ -5561,7 +6145,6 @@ export class FunctionDeclarationContext extends KipperParserRuleContext { } } - export class ParameterListContext extends KipperParserRuleContext { public parameterDeclaration(): ParameterDeclarationContext[]; public parameterDeclaration(i: number): ParameterDeclarationContext; @@ -5585,7 +6168,9 @@ export class ParameterListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_parameterList; } + public get ruleIndex(): number { + return KipperParser.RULE_parameterList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterList) { @@ -5608,12 +6193,13 @@ export class ParameterListContext extends KipperParserRuleContext { } } - export class ParameterDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -5621,7 +6207,9 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_parameterDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_parameterDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterParameterDeclaration) { @@ -5644,17 +6232,24 @@ export class ParameterDeclarationContext extends KipperParserRuleContext { } } - export class InterfaceDeclarationContext extends KipperParserRuleContext { - public Interface(): TerminalNode { return this.getToken(KipperParser.Interface, 0); } + public Interface(): TerminalNode { + return this.getToken(KipperParser.Interface, 0); + } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public interfaceMemberDeclaration(): InterfaceMemberDeclarationContext[]; public interfaceMemberDeclaration(i: number): InterfaceMemberDeclarationContext; - public interfaceMemberDeclaration(i?: number): InterfaceMemberDeclarationContext | InterfaceMemberDeclarationContext[] { + public interfaceMemberDeclaration( + i?: number, + ): InterfaceMemberDeclarationContext | InterfaceMemberDeclarationContext[] { if (i === undefined) { return this.getRuleContexts(InterfaceMemberDeclarationContext); } else { @@ -5665,7 +6260,9 @@ export class InterfaceDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_interfaceDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_interfaceDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceDeclaration) { @@ -5688,7 +6285,6 @@ export class InterfaceDeclarationContext extends KipperParserRuleContext { } } - export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { public interfacePropertyDeclaration(): InterfacePropertyDeclarationContext | undefined { return this.tryGetRuleContext(0, InterfacePropertyDeclarationContext); @@ -5700,7 +6296,9 @@ export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_interfaceMemberDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_interfaceMemberDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceMemberDeclaration) { @@ -5723,21 +6321,26 @@ export class InterfaceMemberDeclarationContext extends KipperParserRuleContext { } } - export class InterfacePropertyDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_interfacePropertyDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_interfacePropertyDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfacePropertyDeclaration) { @@ -5760,18 +6363,25 @@ export class InterfacePropertyDeclarationContext extends KipperParserRuleContext } } - export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } public parameterList(): ParameterListContext | undefined { return this.tryGetRuleContext(0, ParameterListContext); } @@ -5779,7 +6389,9 @@ export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_interfaceMethodDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_interfaceMethodDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterInterfaceMethodDeclaration) { @@ -5802,14 +6414,19 @@ export class InterfaceMethodDeclarationContext extends KipperParserRuleContext { } } - export class ClassDeclarationContext extends KipperParserRuleContext { - public Class(): TerminalNode { return this.getToken(KipperParser.Class, 0); } + public Class(): TerminalNode { + return this.getToken(KipperParser.Class, 0); + } public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public classMemberDeclaration(): ClassMemberDeclarationContext[]; public classMemberDeclaration(i: number): ClassMemberDeclarationContext; public classMemberDeclaration(i?: number): ClassMemberDeclarationContext | ClassMemberDeclarationContext[] { @@ -5832,7 +6449,9 @@ export class ClassDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_classDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_classDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassDeclaration) { @@ -5855,7 +6474,6 @@ export class ClassDeclarationContext extends KipperParserRuleContext { } } - export class ClassMemberDeclarationContext extends KipperParserRuleContext { public classPropertyDeclaration(): ClassPropertyDeclarationContext | undefined { return this.tryGetRuleContext(0, ClassPropertyDeclarationContext); @@ -5870,7 +6488,9 @@ export class ClassMemberDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_classMemberDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_classMemberDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassMemberDeclaration) { @@ -5893,12 +6513,13 @@ export class ClassMemberDeclarationContext extends KipperParserRuleContext { } } - export class ClassPropertyDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -5906,7 +6527,9 @@ export class ClassPropertyDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_classPropertyDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_classPropertyDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassPropertyDeclaration) { @@ -5929,14 +6552,19 @@ export class ClassPropertyDeclarationContext extends KipperParserRuleContext { } } - export class ClassMethodDeclarationContext extends KipperParserRuleContext { public declarator(): DeclaratorContext { return this.getRuleContext(0, DeclaratorContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -5950,7 +6578,9 @@ export class ClassMethodDeclarationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_classMethodDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_classMethodDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassMethodDeclaration) { @@ -5973,11 +6603,16 @@ export class ClassMethodDeclarationContext extends KipperParserRuleContext { } } - export class ClassConstructorDeclarationContext extends KipperParserRuleContext { - public Constructor(): TerminalNode { return this.getToken(KipperParser.Constructor, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public Constructor(): TerminalNode { + return this.getToken(KipperParser.Constructor, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public compoundStatement(): CompoundStatementContext { return this.getRuleContext(0, CompoundStatementContext); } @@ -5988,7 +6623,9 @@ export class ClassConstructorDeclarationContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_classConstructorDeclaration; } + public get ruleIndex(): number { + return KipperParser.RULE_classConstructorDeclaration; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterClassConstructorDeclaration) { @@ -6011,7 +6648,6 @@ export class ClassConstructorDeclarationContext extends KipperParserRuleContext } } - export class StatementContext extends KipperParserRuleContext { public expressionStatement(): ExpressionStatementContext | undefined { return this.tryGetRuleContext(0, ExpressionStatementContext); @@ -6035,7 +6671,9 @@ export class StatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_statement; } + public get ruleIndex(): number { + return KipperParser.RULE_statement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStatement) { @@ -6058,10 +6696,13 @@ export class StatementContext extends KipperParserRuleContext { } } - export class CompoundStatementContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public blockItemList(): BlockItemListContext | undefined { return this.tryGetRuleContext(0, BlockItemListContext); } @@ -6069,7 +6710,9 @@ export class CompoundStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_compoundStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_compoundStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterCompoundStatement) { @@ -6092,17 +6735,20 @@ export class CompoundStatementContext extends KipperParserRuleContext { } } - export class ExpressionStatementContext extends KipperParserRuleContext { public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_expressionStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_expressionStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpressionStatement) { @@ -6125,7 +6771,6 @@ export class ExpressionStatementContext extends KipperParserRuleContext { } } - export class SelectionStatementContext extends KipperParserRuleContext { public ifStatement(): IfStatementContext | undefined { return this.tryGetRuleContext(0, IfStatementContext); @@ -6137,7 +6782,9 @@ export class SelectionStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_selectionStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_selectionStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSelectionStatement) { @@ -6160,14 +6807,19 @@ export class SelectionStatementContext extends KipperParserRuleContext { } } - export class IfStatementContext extends KipperParserRuleContext { - public If(): TerminalNode { return this.getToken(KipperParser.If, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public If(): TerminalNode { + return this.getToken(KipperParser.If, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext[]; public statement(i: number): StatementContext; public statement(i?: number): StatementContext | StatementContext[] { @@ -6177,12 +6829,16 @@ export class IfStatementContext extends KipperParserRuleContext { return this.getRuleContext(i, StatementContext); } } - public Else(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Else, 0); } + public Else(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Else, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_ifStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_ifStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIfStatement) { @@ -6205,16 +6861,25 @@ export class IfStatementContext extends KipperParserRuleContext { } } - export class SwitchStatementContext extends KipperParserRuleContext { - public Switch(): TerminalNode { return this.getToken(KipperParser.Switch, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public Switch(): TerminalNode { + return this.getToken(KipperParser.Switch, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public switchLabeledStatement(): SwitchLabeledStatementContext[]; public switchLabeledStatement(i: number): SwitchLabeledStatementContext; public switchLabeledStatement(i?: number): SwitchLabeledStatementContext | SwitchLabeledStatementContext[] { @@ -6228,7 +6893,9 @@ export class SwitchStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_switchStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_switchStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchStatement) { @@ -6251,22 +6918,29 @@ export class SwitchStatementContext extends KipperParserRuleContext { } } - export class SwitchLabeledStatementContext extends KipperParserRuleContext { - public Case(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Case, 0); } + public Case(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Case, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public Default(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Default, 0); } + public Default(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Default, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_switchLabeledStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_switchLabeledStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSwitchLabeledStatement) { @@ -6289,7 +6963,6 @@ export class SwitchLabeledStatementContext extends KipperParserRuleContext { } } - export class IterationStatementContext extends KipperParserRuleContext { public forLoopIterationStatement(): ForLoopIterationStatementContext | undefined { return this.tryGetRuleContext(0, ForLoopIterationStatementContext); @@ -6304,7 +6977,9 @@ export class IterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_iterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_iterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIterationStatement) { @@ -6327,13 +7002,16 @@ export class IterationStatementContext extends KipperParserRuleContext { } } - export class ForLoopIterationStatementContext extends KipperParserRuleContext { public _forDeclaration: boolean = false; public _forCondition: boolean = false; public _forIterationExp: boolean = false; - public For(): TerminalNode { return this.getToken(KipperParser.For, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public For(): TerminalNode { + return this.getToken(KipperParser.For, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public SemiColon(): TerminalNode[]; public SemiColon(i: number): TerminalNode; public SemiColon(i?: number): TerminalNode | TerminalNode[] { @@ -6343,7 +7021,9 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { return this.getToken(KipperParser.SemiColon, i); } } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -6363,7 +7043,9 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_forLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_forLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterForLoopIterationStatement) { @@ -6386,14 +7068,19 @@ export class ForLoopIterationStatementContext extends KipperParserRuleContext { } } - export class WhileLoopIterationStatementContext extends KipperParserRuleContext { - public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public While(): TerminalNode { + return this.getToken(KipperParser.While, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } @@ -6401,7 +7088,9 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_whileLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_whileLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterWhileLoopIterationStatement) { @@ -6424,24 +7113,35 @@ export class WhileLoopIterationStatementContext extends KipperParserRuleContext } } - export class DoWhileLoopIterationStatementContext extends KipperParserRuleContext { - public Do(): TerminalNode { return this.getToken(KipperParser.Do, 0); } + public Do(): TerminalNode { + return this.getToken(KipperParser.Do, 0); + } public statement(): StatementContext { return this.getRuleContext(0, StatementContext); } - public While(): TerminalNode { return this.getToken(KipperParser.While, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public While(): TerminalNode { + return this.getToken(KipperParser.While, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_doWhileLoopIterationStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_doWhileLoopIterationStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDoWhileLoopIterationStatement) { @@ -6464,16 +7164,23 @@ export class DoWhileLoopIterationStatementContext extends KipperParserRuleContex } } - export class JumpStatementContext extends KipperParserRuleContext { - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } - public Continue(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Continue, 0); } - public Break(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Break, 0); } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } + public Continue(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Continue, 0); + } + public Break(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Break, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_jumpStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_jumpStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterJumpStatement) { @@ -6496,10 +7203,13 @@ export class JumpStatementContext extends KipperParserRuleContext { } } - export class ReturnStatementContext extends KipperParserRuleContext { - public Return(): TerminalNode { return this.getToken(KipperParser.Return, 0); } - public SemiColon(): TerminalNode { return this.getToken(KipperParser.SemiColon, 0); } + public Return(): TerminalNode { + return this.getToken(KipperParser.Return, 0); + } + public SemiColon(): TerminalNode { + return this.getToken(KipperParser.SemiColon, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -6507,7 +7217,9 @@ export class ReturnStatementContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_returnStatement; } + public get ruleIndex(): number { + return KipperParser.RULE_returnStatement; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterReturnStatement) { @@ -6530,7 +7242,6 @@ export class ReturnStatementContext extends KipperParserRuleContext { } } - export class PrimaryExpressionContext extends KipperParserRuleContext { public tangledPrimaryExpression(): TangledPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, TangledPrimaryExpressionContext); @@ -6566,7 +7277,9 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_primaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_primaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPrimaryExpression) { @@ -6589,15 +7302,22 @@ export class PrimaryExpressionContext extends KipperParserRuleContext { } } - export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public RetIndicator(): TerminalNode { return this.getToken(KipperParser.RetIndicator, 0); } + public RetIndicator(): TerminalNode { + return this.getToken(KipperParser.RetIndicator, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -6611,7 +7331,9 @@ export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_lambdaPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_lambdaPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterLambdaPrimaryExpression) { @@ -6634,18 +7356,23 @@ export class LambdaPrimaryExpressionContext extends KipperParserRuleContext { } } - export class TangledPrimaryExpressionContext extends KipperParserRuleContext { - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_tangledPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_tangledPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTangledPrimaryExpression) { @@ -6668,15 +7395,20 @@ export class TangledPrimaryExpressionContext extends KipperParserRuleContext { } } - export class BoolPrimaryExpressionContext extends KipperParserRuleContext { - public True(): TerminalNode | undefined { return this.tryGetToken(KipperParser.True, 0); } - public False(): TerminalNode | undefined { return this.tryGetToken(KipperParser.False, 0); } + public True(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.True, 0); + } + public False(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.False, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_boolPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_boolPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBoolPrimaryExpression) { @@ -6699,7 +7431,6 @@ export class BoolPrimaryExpressionContext extends KipperParserRuleContext { } } - export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); @@ -6708,7 +7439,9 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifierPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_identifierPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierPrimaryExpression) { @@ -6731,14 +7464,17 @@ export class IdentifierPrimaryExpressionContext extends KipperParserRuleContext } } - export class IdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(KipperParser.Identifier, 0); } + public Identifier(): TerminalNode { + return this.getToken(KipperParser.Identifier, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifier; } + public get ruleIndex(): number { + return KipperParser.RULE_identifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifier) { @@ -6761,7 +7497,6 @@ export class IdentifierContext extends KipperParserRuleContext { } } - export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRuleContext { public identifier(): IdentifierContext | undefined { return this.tryGetRuleContext(0, IdentifierContext); @@ -6773,7 +7508,9 @@ export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRule super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifierOrStringPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_identifierOrStringPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierOrStringPrimaryExpression) { @@ -6796,15 +7533,20 @@ export class IdentifierOrStringPrimaryExpressionContext extends KipperParserRule } } - export class StringPrimaryExpressionContext extends KipperParserRuleContext { - public SingleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); } - public DoubleQuoteStringLiteral(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); } + public SingleQuoteStringLiteral(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.SingleQuoteStringLiteral, 0); + } + public DoubleQuoteStringLiteral(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.DoubleQuoteStringLiteral, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_stringPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_stringPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterStringPrimaryExpression) { @@ -6827,10 +7569,13 @@ export class StringPrimaryExpressionContext extends KipperParserRuleContext { } } - export class FStringPrimaryExpressionContext extends KipperParserRuleContext { - public FStringSingleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); } - public FStringSingleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); } + public FStringSingleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteStart, 0); + } + public FStringSingleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteEnd, 0); + } public fStringSingleQuoteAtom(): FStringSingleQuoteAtomContext[]; public fStringSingleQuoteAtom(i: number): FStringSingleQuoteAtomContext; public fStringSingleQuoteAtom(i?: number): FStringSingleQuoteAtomContext | FStringSingleQuoteAtomContext[] { @@ -6840,8 +7585,12 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { return this.getRuleContext(i, FStringSingleQuoteAtomContext); } } - public FStringDoubleQuoteStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); } - public FStringDoubleQuoteEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); } + public FStringDoubleQuoteStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteStart, 0); + } + public FStringDoubleQuoteEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteEnd, 0); + } public fStringDoubleQuoteAtom(): FStringDoubleQuoteAtomContext[]; public fStringDoubleQuoteAtom(i: number): FStringDoubleQuoteAtomContext; public fStringDoubleQuoteAtom(i?: number): FStringDoubleQuoteAtomContext | FStringDoubleQuoteAtomContext[] { @@ -6855,7 +7604,9 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringPrimaryExpression) { @@ -6878,11 +7629,16 @@ export class FStringPrimaryExpressionContext extends KipperParserRuleContext { } } - export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { - public FStringSingleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); } - public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } - public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public FStringSingleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringSingleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -6890,7 +7646,9 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringSingleQuoteAtom; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringSingleQuoteAtom; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringSingleQuoteAtom) { @@ -6913,11 +7671,16 @@ export class FStringSingleQuoteAtomContext extends KipperParserRuleContext { } } - export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { - public FStringDoubleQuoteAtom(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); } - public FStringExpStart(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpStart, 0); } - public FStringExpEnd(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FStringExpEnd, 0); } + public FStringDoubleQuoteAtom(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringDoubleQuoteAtom, 0); + } + public FStringExpStart(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpStart, 0); + } + public FStringExpEnd(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FStringExpEnd, 0); + } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -6925,7 +7688,9 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_fStringDoubleQuoteAtom; } + public get ruleIndex(): number { + return KipperParser.RULE_fStringDoubleQuoteAtom; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterFStringDoubleQuoteAtom) { @@ -6948,15 +7713,20 @@ export class FStringDoubleQuoteAtomContext extends KipperParserRuleContext { } } - export class NumberPrimaryExpressionContext extends KipperParserRuleContext { - public IntegerConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.IntegerConstant, 0); } - public FloatingConstant(): TerminalNode | undefined { return this.tryGetToken(KipperParser.FloatingConstant, 0); } + public IntegerConstant(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.IntegerConstant, 0); + } + public FloatingConstant(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.FloatingConstant, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_numberPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_numberPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterNumberPrimaryExpression) { @@ -6979,10 +7749,13 @@ export class NumberPrimaryExpressionContext extends KipperParserRuleContext { } } - export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -7005,7 +7778,9 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_arrayPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_arrayPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArrayPrimaryExpression) { @@ -7028,10 +7803,13 @@ export class ArrayPrimaryExpressionContext extends KipperParserRuleContext { } } - export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { - public LeftBrace(): TerminalNode { return this.getToken(KipperParser.LeftBrace, 0); } - public RightBrace(): TerminalNode { return this.getToken(KipperParser.RightBrace, 0); } + public LeftBrace(): TerminalNode { + return this.getToken(KipperParser.LeftBrace, 0); + } + public RightBrace(): TerminalNode { + return this.getToken(KipperParser.RightBrace, 0); + } public objectProperty(): ObjectPropertyContext[]; public objectProperty(i: number): ObjectPropertyContext; public objectProperty(i?: number): ObjectPropertyContext | ObjectPropertyContext[] { @@ -7054,7 +7832,9 @@ export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_objectPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_objectPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterObjectPrimaryExpression) { @@ -7077,12 +7857,13 @@ export class ObjectPrimaryExpressionContext extends KipperParserRuleContext { } } - export class ObjectPropertyContext extends KipperParserRuleContext { public identifierOrStringPrimaryExpression(): IdentifierOrStringPrimaryExpressionContext { return this.getRuleContext(0, IdentifierOrStringPrimaryExpressionContext); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } @@ -7090,7 +7871,9 @@ export class ObjectPropertyContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_objectProperty; } + public get ruleIndex(): number { + return KipperParser.RULE_objectProperty; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterObjectProperty) { @@ -7113,16 +7896,23 @@ export class ObjectPropertyContext extends KipperParserRuleContext { } } - export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserRuleContext { - public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } - public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } - public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } + public Void(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Void, 0); + } + public Null(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Null, 0); + } + public Undefined(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Undefined, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_voidOrNullOrUndefinedPrimaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterVoidOrNullOrUndefinedPrimaryExpression) { @@ -7145,14 +7935,15 @@ export class VoidOrNullOrUndefinedPrimaryExpressionContext extends KipperParserR } } - export class ComputedPrimaryExpressionContext extends KipperParserRuleContext { public _labelASTKind: ASTKind | undefined; constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_computedPrimaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_computedPrimaryExpression; + } public copyFrom(ctx: ComputedPrimaryExpressionContext): void { super.copyFrom(ctx); this._labelASTKind = ctx._labelASTKind; @@ -7287,8 +8078,12 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -7318,12 +8113,18 @@ export class FunctionCallExpressionContext extends ComputedPrimaryExpressionCont } } export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryExpressionContext { - public CallFunc(): TerminalNode { return this.getToken(KipperParser.CallFunc, 0); } + public CallFunc(): TerminalNode { + return this.getToken(KipperParser.CallFunc, 0); + } public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -7353,12 +8154,18 @@ export class ExplicitCallFunctionCallExpressionContext extends ComputedPrimaryEx } } export class NewInstantiationExpressionContext extends ComputedPrimaryExpressionContext { - public New(): TerminalNode { return this.getToken(KipperParser.New, 0); } + public New(): TerminalNode { + return this.getToken(KipperParser.New, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } public argumentExpressionList(): ArgumentExpressionListContext | undefined { return this.tryGetRuleContext(0, ArgumentExpressionListContext); } @@ -7388,7 +8195,6 @@ export class NewInstantiationExpressionContext extends ComputedPrimaryExpression } } - export class ArgumentExpressionListContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -7412,7 +8218,9 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_argumentExpressionList; } + public get ruleIndex(): number { + return KipperParser.RULE_argumentExpressionList; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterArgumentExpressionList) { @@ -7435,9 +8243,10 @@ export class ArgumentExpressionListContext extends KipperParserRuleContext { } } - export class DotNotationContext extends KipperParserRuleContext { - public Dot(): TerminalNode { return this.getToken(KipperParser.Dot, 0); } + public Dot(): TerminalNode { + return this.getToken(KipperParser.Dot, 0); + } public identifier(): IdentifierContext { return this.getRuleContext(0, IdentifierContext); } @@ -7445,7 +8254,9 @@ export class DotNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_dotNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_dotNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterDotNotation) { @@ -7468,18 +8279,23 @@ export class DotNotationContext extends KipperParserRuleContext { } } - export class BracketNotationContext extends KipperParserRuleContext { - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bracketNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_bracketNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBracketNotation) { @@ -7502,13 +8318,18 @@ export class BracketNotationContext extends KipperParserRuleContext { } } - export class SliceNotationContext extends KipperParserRuleContext { public sliceStart: boolean = false; public sliceEnd: boolean = false; - public LeftBracket(): TerminalNode { return this.getToken(KipperParser.LeftBracket, 0); } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } - public RightBracket(): TerminalNode { return this.getToken(KipperParser.RightBracket, 0); } + public LeftBracket(): TerminalNode { + return this.getToken(KipperParser.LeftBracket, 0); + } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } + public RightBracket(): TerminalNode { + return this.getToken(KipperParser.RightBracket, 0); + } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -7522,7 +8343,9 @@ export class SliceNotationContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_sliceNotation; } + public get ruleIndex(): number { + return KipperParser.RULE_sliceNotation; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterSliceNotation) { @@ -7545,7 +8368,6 @@ export class SliceNotationContext extends KipperParserRuleContext { } } - export class PostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext | undefined { return this.tryGetRuleContext(0, ComputedPrimaryExpressionContext); @@ -7560,7 +8382,9 @@ export class PostfixExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_postfixExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_postfixExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterPostfixExpression) { @@ -7583,7 +8407,6 @@ export class PostfixExpressionContext extends KipperParserRuleContext { } } - export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRuleContext { public computedPrimaryExpression(): ComputedPrimaryExpressionContext { return this.getRuleContext(0, ComputedPrimaryExpressionContext); @@ -7595,7 +8418,9 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementPostfixExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementPostfixExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementPostfixExpression) { @@ -7618,9 +8443,10 @@ export class IncrementOrDecrementPostfixExpressionContext extends KipperParserRu } } - export class TypeofExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } + public Typeof(): TerminalNode { + return this.getToken(KipperParser.Typeof, 0); + } public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); } @@ -7628,7 +8454,9 @@ export class TypeofExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeofExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_typeofExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofExpression) { @@ -7651,7 +8479,6 @@ export class TypeofExpressionContext extends KipperParserRuleContext { } } - export class UnaryExpressionContext extends KipperParserRuleContext { public postfixExpression(): PostfixExpressionContext | undefined { return this.tryGetRuleContext(0, PostfixExpressionContext); @@ -7666,7 +8493,9 @@ export class UnaryExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_unaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_unaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryExpression) { @@ -7689,7 +8518,6 @@ export class UnaryExpressionContext extends KipperParserRuleContext { } } - export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRuleContext { public incrementOrDecrementOperator(): IncrementOrDecrementOperatorContext { return this.getRuleContext(0, IncrementOrDecrementOperatorContext); @@ -7701,7 +8529,9 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementUnaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementUnaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementUnaryExpression) { @@ -7724,7 +8554,6 @@ export class IncrementOrDecrementUnaryExpressionContext extends KipperParserRule } } - export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleContext { public unaryOperator(): UnaryOperatorContext { return this.getRuleContext(0, UnaryOperatorContext); @@ -7736,7 +8565,9 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_operatorModifiedUnaryExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_operatorModifiedUnaryExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterOperatorModifiedUnaryExpression) { @@ -7759,15 +8590,20 @@ export class OperatorModifiedUnaryExpressionContext extends KipperParserRuleCont } } - export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext { - public PlusPlus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusPlus, 0); } - public MinusMinus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusMinus, 0); } + public PlusPlus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PlusPlus, 0); + } + public MinusMinus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.MinusMinus, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_incrementOrDecrementOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_incrementOrDecrementOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIncrementOrDecrementOperator) { @@ -7790,17 +8626,26 @@ export class IncrementOrDecrementOperatorContext extends KipperParserRuleContext } } - export class UnaryOperatorContext extends KipperParserRuleContext { - public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } - public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } - public Not(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Not, 0); } - public BitwiseNot(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseNot, 0); } + public Plus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Plus, 0); + } + public Minus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Minus, 0); + } + public Not(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Not, 0); + } + public BitwiseNot(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseNot, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_unaryOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_unaryOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterUnaryOperator) { @@ -7823,13 +8668,14 @@ export class UnaryOperatorContext extends KipperParserRuleContext { } } - export class CastOrConvertExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_castOrConvertExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_castOrConvertExpression; + } public copyFrom(ctx: CastOrConvertExpressionContext): void { super.copyFrom(ctx); } @@ -7867,7 +8713,9 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio public unaryExpression(): UnaryExpressionContext { return this.getRuleContext(0, UnaryExpressionContext); } - public As(): TerminalNode { return this.getToken(KipperParser.As, 0); } + public As(): TerminalNode { + return this.getToken(KipperParser.As, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -7897,13 +8745,14 @@ export class ActualCastOrConvertExpressionContext extends CastOrConvertExpressio } } - export class MultiplicativeExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_multiplicativeExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_multiplicativeExpression; + } public copyFrom(ctx: MultiplicativeExpressionContext): void { super.copyFrom(ctx); } @@ -7944,10 +8793,18 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress public castOrConvertExpression(): CastOrConvertExpressionContext { return this.getRuleContext(0, CastOrConvertExpressionContext); } - public Star(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Star, 0); } - public Div(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Div, 0); } - public Mod(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Mod, 0); } - public PowerTo(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PowerTo, 0); } + public Star(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Star, 0); + } + public Div(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Div, 0); + } + public Mod(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Mod, 0); + } + public PowerTo(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PowerTo, 0); + } constructor(ctx: MultiplicativeExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -7974,13 +8831,14 @@ export class ActualMultiplicativeExpressionContext extends MultiplicativeExpress } } - export class AdditiveExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_additiveExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_additiveExpression; + } public copyFrom(ctx: AdditiveExpressionContext): void { super.copyFrom(ctx); } @@ -8021,8 +8879,12 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { public multiplicativeExpression(): MultiplicativeExpressionContext { return this.getRuleContext(0, MultiplicativeExpressionContext); } - public Plus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Plus, 0); } - public Minus(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Minus, 0); } + public Plus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Plus, 0); + } + public Minus(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Minus, 0); + } constructor(ctx: AdditiveExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8049,13 +8911,14 @@ export class ActualAdditiveExpressionContext extends AdditiveExpressionContext { } } - export class BitwiseShiftExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseShiftExpression; + } public copyFrom(ctx: BitwiseShiftExpressionContext): void { super.copyFrom(ctx); } @@ -8125,16 +8988,23 @@ export class ActualBitwiseShiftExpressionContext extends BitwiseShiftExpressionC } } - export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { - public BitwiseZeroFillLeftShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); } - public BitwiseSignedRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); } - public BitwiseZeroFillRightShift(): TerminalNode | undefined { return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); } + public BitwiseZeroFillLeftShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseZeroFillLeftShift, 0); + } + public BitwiseSignedRightShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseSignedRightShift, 0); + } + public BitwiseZeroFillRightShift(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.BitwiseZeroFillRightShift, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseShiftOperators; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseShiftOperators; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterBitwiseShiftOperators) { @@ -8157,13 +9027,14 @@ export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { } } - export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_relationalExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_relationalExpression; + } public copyFrom(ctx: RelationalExpressionContext): void { super.copyFrom(ctx); } @@ -8204,10 +9075,18 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte public bitwiseShiftExpression(): BitwiseShiftExpressionContext { return this.getRuleContext(0, BitwiseShiftExpressionContext); } - public Less(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Less, 0); } - public Greater(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Greater, 0); } - public LessEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.LessEqual, 0); } - public GreaterEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.GreaterEqual, 0); } + public Less(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Less, 0); + } + public Greater(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Greater, 0); + } + public LessEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.LessEqual, 0); + } + public GreaterEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.GreaterEqual, 0); + } constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8234,13 +9113,14 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte } } - export class EqualityExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_equalityExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_equalityExpression; + } public copyFrom(ctx: EqualityExpressionContext): void { super.copyFrom(ctx); } @@ -8281,8 +9161,12 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { public relationalExpression(): RelationalExpressionContext { return this.getRuleContext(0, RelationalExpressionContext); } - public Equal(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Equal, 0); } - public NotEqual(): TerminalNode | undefined { return this.tryGetToken(KipperParser.NotEqual, 0); } + public Equal(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Equal, 0); + } + public NotEqual(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.NotEqual, 0); + } constructor(ctx: EqualityExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8309,13 +9193,14 @@ export class ActualEqualityExpressionContext extends EqualityExpressionContext { } } - export class BitwiseAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseAndExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseAndExpression; + } public copyFrom(ctx: BitwiseAndExpressionContext): void { super.copyFrom(ctx); } @@ -8353,7 +9238,9 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } - public BitwiseAnd(): TerminalNode { return this.getToken(KipperParser.BitwiseAnd, 0); } + public BitwiseAnd(): TerminalNode { + return this.getToken(KipperParser.BitwiseAnd, 0); + } public equalityExpression(): EqualityExpressionContext { return this.getRuleContext(0, EqualityExpressionContext); } @@ -8383,13 +9270,14 @@ export class ActualBitwiseAndExpressionContext extends BitwiseAndExpressionConte } } - export class BitwiseXorExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseXorExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseXorExpression; + } public copyFrom(ctx: BitwiseXorExpressionContext): void { super.copyFrom(ctx); } @@ -8427,7 +9315,9 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } - public BitwiseXor(): TerminalNode { return this.getToken(KipperParser.BitwiseXor, 0); } + public BitwiseXor(): TerminalNode { + return this.getToken(KipperParser.BitwiseXor, 0); + } public bitwiseAndExpression(): BitwiseAndExpressionContext { return this.getRuleContext(0, BitwiseAndExpressionContext); } @@ -8457,13 +9347,14 @@ export class ActualBitwiseXorExpressionContext extends BitwiseXorExpressionConte } } - export class BitwiseOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_bitwiseOrExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_bitwiseOrExpression; + } public copyFrom(ctx: BitwiseOrExpressionContext): void { super.copyFrom(ctx); } @@ -8501,7 +9392,9 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } - public BitwiseOr(): TerminalNode { return this.getToken(KipperParser.BitwiseOr, 0); } + public BitwiseOr(): TerminalNode { + return this.getToken(KipperParser.BitwiseOr, 0); + } public bitwiseXorExpression(): BitwiseXorExpressionContext { return this.getRuleContext(0, BitwiseXorExpressionContext); } @@ -8531,13 +9424,14 @@ export class ActualBitwiseOrExpressionContext extends BitwiseOrExpressionContext } } - export class LogicalAndExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_logicalAndExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_logicalAndExpression; + } public copyFrom(ctx: LogicalAndExpressionContext): void { super.copyFrom(ctx); } @@ -8575,7 +9469,9 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } - public AndAnd(): TerminalNode { return this.getToken(KipperParser.AndAnd, 0); } + public AndAnd(): TerminalNode { + return this.getToken(KipperParser.AndAnd, 0); + } public bitwiseOrExpression(): BitwiseOrExpressionContext { return this.getRuleContext(0, BitwiseOrExpressionContext); } @@ -8605,13 +9501,14 @@ export class ActualLogicalAndExpressionContext extends LogicalAndExpressionConte } } - export class LogicalOrExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_logicalOrExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_logicalOrExpression; + } public copyFrom(ctx: LogicalOrExpressionContext): void { super.copyFrom(ctx); } @@ -8649,7 +9546,9 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public OrOr(): TerminalNode { return this.getToken(KipperParser.OrOr, 0); } + public OrOr(): TerminalNode { + return this.getToken(KipperParser.OrOr, 0); + } public logicalAndExpression(): LogicalAndExpressionContext { return this.getRuleContext(0, LogicalAndExpressionContext); } @@ -8679,13 +9578,14 @@ export class ActualLogicalOrExpressionContext extends LogicalOrExpressionContext } } - export class ConditionalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_conditionalExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_conditionalExpression; + } public copyFrom(ctx: ConditionalExpressionContext): void { super.copyFrom(ctx); } @@ -8723,7 +9623,9 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon public logicalOrExpression(): LogicalOrExpressionContext { return this.getRuleContext(0, LogicalOrExpressionContext); } - public QuestionMark(): TerminalNode { return this.getToken(KipperParser.QuestionMark, 0); } + public QuestionMark(): TerminalNode { + return this.getToken(KipperParser.QuestionMark, 0); + } public conditionalExpression(): ConditionalExpressionContext[]; public conditionalExpression(i: number): ConditionalExpressionContext; public conditionalExpression(i?: number): ConditionalExpressionContext | ConditionalExpressionContext[] { @@ -8733,7 +9635,9 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon return this.getRuleContext(i, ConditionalExpressionContext); } } - public Colon(): TerminalNode { return this.getToken(KipperParser.Colon, 0); } + public Colon(): TerminalNode { + return this.getToken(KipperParser.Colon, 0); + } constructor(ctx: ConditionalExpressionContext) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); @@ -8760,13 +9664,14 @@ export class ActualConditionalExpressionContext extends ConditionalExpressionCon } } - export class AssignmentExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_assignmentExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_assignmentExpression; + } public copyFrom(ctx: AssignmentExpressionContext): void { super.copyFrom(ctx); } @@ -8836,19 +9741,32 @@ export class ActualAssignmentExpressionContext extends AssignmentExpressionConte } } - export class AssignmentOperatorContext extends KipperParserRuleContext { - public Assign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Assign, 0); } - public StarAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.StarAssign, 0); } - public DivAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.DivAssign, 0); } - public ModAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.ModAssign, 0); } - public PlusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.PlusAssign, 0); } - public MinusAssign(): TerminalNode | undefined { return this.tryGetToken(KipperParser.MinusAssign, 0); } + public Assign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Assign, 0); + } + public StarAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.StarAssign, 0); + } + public DivAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.DivAssign, 0); + } + public ModAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.ModAssign, 0); + } + public PlusAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.PlusAssign, 0); + } + public MinusAssign(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.MinusAssign, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_assignmentOperator; } + public get ruleIndex(): number { + return KipperParser.RULE_assignmentOperator; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterAssignmentOperator) { @@ -8871,7 +9789,6 @@ export class AssignmentOperatorContext extends KipperParserRuleContext { } } - export class ExpressionContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext[]; public assignmentExpression(i: number): AssignmentExpressionContext; @@ -8895,7 +9812,9 @@ export class ExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_expression; } + public get ruleIndex(): number { + return KipperParser.RULE_expression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterExpression) { @@ -8918,7 +9837,6 @@ export class ExpressionContext extends KipperParserRuleContext { } } - export class TypeSpecifierExpressionContext extends KipperParserRuleContext { public identifierTypeSpecifierExpression(): IdentifierTypeSpecifierExpressionContext | undefined { return this.tryGetRuleContext(0, IdentifierTypeSpecifierExpressionContext); @@ -8933,7 +9851,9 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_typeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierExpression) { @@ -8956,7 +9876,6 @@ export class TypeSpecifierExpressionContext extends KipperParserRuleContext { } } - export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); @@ -8965,7 +9884,9 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_identifierTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_identifierTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterIdentifierTypeSpecifierExpression) { @@ -8988,13 +9909,16 @@ export class IdentifierTypeSpecifierExpressionContext extends KipperParserRuleCo } } - export class GenericTypeSpecifierExpressionContext extends KipperParserRuleContext { public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public Less(): TerminalNode { return this.getToken(KipperParser.Less, 0); } - public Greater(): TerminalNode { return this.getToken(KipperParser.Greater, 0); } + public Less(): TerminalNode { + return this.getToken(KipperParser.Less, 0); + } + public Greater(): TerminalNode { + return this.getToken(KipperParser.Greater, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext[]; public typeSpecifierExpression(i: number): TypeSpecifierExpressionContext; public typeSpecifierExpression(i?: number): TypeSpecifierExpressionContext | TypeSpecifierExpressionContext[] { @@ -9017,7 +9941,9 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_genericTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_genericTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterGenericTypeSpecifierExpression) { @@ -9040,19 +9966,26 @@ export class GenericTypeSpecifierExpressionContext extends KipperParserRuleConte } } - export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContext { - public Typeof(): TerminalNode { return this.getToken(KipperParser.Typeof, 0); } - public LeftParen(): TerminalNode { return this.getToken(KipperParser.LeftParen, 0); } + public Typeof(): TerminalNode { + return this.getToken(KipperParser.Typeof, 0); + } + public LeftParen(): TerminalNode { + return this.getToken(KipperParser.LeftParen, 0); + } public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { return this.getRuleContext(0, TypeSpecifierIdentifierContext); } - public RightParen(): TerminalNode { return this.getToken(KipperParser.RightParen, 0); } + public RightParen(): TerminalNode { + return this.getToken(KipperParser.RightParen, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeofTypeSpecifierExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_typeofTypeSpecifierExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeofTypeSpecifierExpression) { @@ -9075,17 +10008,26 @@ export class TypeofTypeSpecifierExpressionContext extends KipperParserRuleContex } } - export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { - public Identifier(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Identifier, 0); } - public Null(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Null, 0); } - public Undefined(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Undefined, 0); } - public Void(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Void, 0); } + public Identifier(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Identifier, 0); + } + public Null(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Null, 0); + } + public Undefined(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Undefined, 0); + } + public Void(): TerminalNode | undefined { + return this.tryGetToken(KipperParser.Void, 0); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_typeSpecifierIdentifier; } + public get ruleIndex(): number { + return KipperParser.RULE_typeSpecifierIdentifier; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterTypeSpecifierIdentifier) { @@ -9108,12 +10050,13 @@ export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { } } - export class MatchesExpressionContext extends KipperParserRuleContext { public assignmentExpression(): AssignmentExpressionContext { return this.getRuleContext(0, AssignmentExpressionContext); } - public Matches(): TerminalNode { return this.getToken(KipperParser.Matches, 0); } + public Matches(): TerminalNode { + return this.getToken(KipperParser.Matches, 0); + } public typeSpecifierExpression(): TypeSpecifierExpressionContext { return this.getRuleContext(0, TypeSpecifierExpressionContext); } @@ -9121,7 +10064,9 @@ export class MatchesExpressionContext extends KipperParserRuleContext { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return KipperParser.RULE_matchesExpression; } + public get ruleIndex(): number { + return KipperParser.RULE_matchesExpression; + } // @Override public enterRule(listener: KipperParserListener): void { if (listener.enterMatchesExpression) { @@ -9143,5 +10088,3 @@ export class MatchesExpressionContext extends KipperParserRuleContext { } } } - - diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index c7cd214dd..f6ed2c06c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -1,11 +1,9 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - import KipperParserBase from "./base/KipperParserBase"; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; @@ -132,7 +130,6 @@ import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; import { MatchesExpressionContext } from "./KipperParser"; - /** * This interface defines a complete listener for a parse tree produced by * `KipperParser`. @@ -1548,4 +1545,3 @@ export interface KipperParserListener extends ParseTreeListener { */ exitMatchesExpression?: (ctx: MatchesExpressionContext) => void; } - diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index df7ff500d..1f7d92879 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -1,11 +1,9 @@ // Generated from ./KipperParser.g4 by ANTLR 4.9.0-SNAPSHOT - - // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax - // kind values. - import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; - import KipperParserBase from "./base/KipperParserBase"; - +// Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax +// kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; @@ -132,7 +130,6 @@ import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; import { MatchesExpressionContext } from "./KipperParser"; - /** * This interface defines a complete generic visitor for a parse tree produced * by `KipperParser`. @@ -1029,4 +1026,3 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitMatchesExpression?: (ctx: MatchesExpressionContext) => Result; } - diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 260b8eea5..413d42907 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -9,6 +9,7 @@ import type { ArrayPrimaryExpression, AssignmentExpression, FunctionDeclaration, + IdentifierTypeSpecifierExpression, IncrementOrDecrementPostfixExpression, IncrementOrDecrementPostfixExpressionSemantics, LambdaPrimaryExpression, @@ -826,4 +827,6 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { } } } + + validMatchesExpression(expression: Expression, pattern: IdentifierTypeSpecifierExpression) {} } diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index ea2b08d04..80768aa6e 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -60,7 +60,7 @@ import type { import { KipperSemanticErrorHandler } from "../semantics"; import type { ClassConstructorDeclaration } from "../ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration"; import type { NewInstantiationExpression } from "../ast/nodes/expressions/new-instantiation-expression"; -import { MatchesExpression } from "../ast/nodes/expressions/matches-expression/matches-expression"; +import type { MatchesExpression } from "../ast/nodes/expressions/matches-expression/matches-expression"; /** * Represents a function that checks the semantics for a {@link AnalysableASTNode}. diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index a9add70ce..9eb960789 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -60,7 +60,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import { MatchesExpression } from "../../ast/nodes/expressions/matches-expression/matches-expression"; +import type { MatchesExpression } from "../../ast/nodes/expressions/matches-expression/matches-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 4ae1728a8..ea751754a 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -76,6 +76,7 @@ import { } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; +import type { MatchesExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/matches-expression/matches-expression"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -1096,4 +1097,11 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [TargetJS.getBuiltInIdentifier("typeOf"), "(", ...operand, ")"]; }; + + /** + * Translates a {@link MatchesExpression} into the JavaScript language. + */ + matchesExpression = async (node: MatchesExpression): Promise => { + return []; + }; } diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 7cbe67a47..590ae0013 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -322,4 +322,9 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys * Performs typescript-specific semantic analysis for {@link TypeofExpression} instances. */ typeofExpression = undefined; + + /** + * Performs typescript-specific semantic analysis for {@link MatchesExpression} instances. + */ + matchesExpression = undefined; } From d5d0f705ef6d3352b7f430e2e24a376ca7c90e0d Mon Sep 17 00:00:00 2001 From: rat Date: Tue, 3 Sep 2024 18:58:46 +0200 Subject: [PATCH 12/81] wip --- kipper/core/KipperLexer.g4 | 2 + kipper/core/KipperLexer.tokens | 310 +- kipper/core/KipperParser.g4 | 10 +- kipper/core/KipperParser.tokens | 310 +- kipper/core/src/compiler/ast/ast-generator.ts | 11 + .../core/src/compiler/ast/common/ast-types.ts | 10 +- .../compiler/ast/mapping/ast-node-mapper.ts | 5 + .../relational-expression/index.ts | 1 + .../instanceof-expression/index.ts | 3 + .../instanceof-expression-semantics.ts | 3 + .../instanceof-expression-type-semantics.ts | 16 + .../instanceof-expression.ts | 70 + .../lexer-parser/antlr/KipperLexer.interp | 5 +- .../lexer-parser/antlr/KipperLexer.tokens | 310 +- .../lexer-parser/antlr/KipperLexer.ts | 892 +++--- .../lexer-parser/antlr/KipperParser.interp | 5 +- .../lexer-parser/antlr/KipperParser.tokens | 310 +- .../lexer-parser/antlr/KipperParser.ts | 2837 +++++++++-------- .../antlr/KipperParserListener.ts | 286 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 272 +- .../lexer-parser/parse-rule-kind-mapping.ts | 1 + .../target-presets/semantic-analyser.ts | 6 + .../translation/code-generator.ts | 6 + kipper/target-js/src/code-generator.ts | 6 + kipper/target-js/src/semantic-analyser.ts | 3 + test/module/core/core-functionality.test.ts | 21 + 26 files changed, 3073 insertions(+), 2638 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts diff --git a/kipper/core/KipperLexer.g4 b/kipper/core/KipperLexer.g4 index c939cf9de..9e5ada5e1 100644 --- a/kipper/core/KipperLexer.g4 +++ b/kipper/core/KipperLexer.g4 @@ -36,6 +36,8 @@ Pragma -> channel(PRAGMA) ; +InstanceOf : 'instanceof'; + // const / var Const : 'const'; Var : 'var'; diff --git a/kipper/core/KipperLexer.tokens b/kipper/core/KipperLexer.tokens index dfd693766..9842baf9c 100644 --- a/kipper/core/KipperLexer.tokens +++ b/kipper/core/KipperLexer.tokens @@ -2,157 +2,159 @@ FStringExpStart=1 BlockComment=2 LineComment=3 Pragma=4 -Const=5 -Var=6 -As=7 -Spread=8 -Switch=9 -Case=10 -Default=11 -Break=12 -Continue=13 -Do=14 -While=15 -If=16 -Else=17 -For=18 -Enum=19 -DefFunc=20 -Return=21 -CallFunc=22 -RetIndicator=23 -Class=24 -Interface=25 -Constructor=26 -New=27 -True=28 -False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 -'const'=5 -'var'=6 -'as'=7 -'...'=8 -'switch'=9 -'case'=10 -'default'=11 -'break'=12 -'continue'=13 -'do'=14 -'while'=15 -'if'=16 -'else'=17 -'for'=18 -'enum'=19 -'def'=20 -'return'=21 -'call'=22 -'->'=23 -'class'=24 -'interface'=25 -'constructor'=26 -'new'=27 -'true'=28 -'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +InstanceOf=5 +Const=6 +Var=7 +As=8 +Spread=9 +Switch=10 +Case=11 +Default=12 +Break=13 +Continue=14 +Do=15 +While=16 +If=17 +Else=18 +For=19 +Enum=20 +DefFunc=21 +Return=22 +CallFunc=23 +RetIndicator=24 +Class=25 +Interface=26 +Constructor=27 +New=28 +True=29 +False=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 +'instanceof'=5 +'const'=6 +'var'=7 +'as'=8 +'...'=9 +'switch'=10 +'case'=11 +'default'=12 +'break'=13 +'continue'=14 +'do'=15 +'while'=16 +'if'=17 +'else'=18 +'for'=19 +'enum'=20 +'def'=21 +'return'=22 +'call'=23 +'->'=24 +'class'=25 +'interface'=26 +'constructor'=27 +'new'=28 +'true'=29 +'false'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index 432ebe5cf..ce6da2860 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -368,8 +368,13 @@ bitwiseShiftOperators : '<<' | '>>' | '>>>' ; +instanceOfExpression + : bitwiseShiftExpression #passOnInstanceOfExpression + | instanceOfExpression 'instanceof' typeSpecifierExpression #actualInstanceOfExpression + ; + relationalExpression - : bitwiseShiftExpression # passOnRelationalExpression + : instanceOfExpression # passOnRelationalExpression | relationalExpression ('<'|'>'|'<='|'>=') bitwiseShiftExpression # actualRelationalExpression ; @@ -433,10 +438,13 @@ genericTypeSpecifierExpression : typeSpecifierIdentifier '<' (typeSpecifierExpression (',' typeSpecifierExpression)*)? '>' ; + typeofTypeSpecifierExpression : 'typeof' '(' typeSpecifierIdentifier ')' ; + + typeSpecifierIdentifier : (Identifier | 'null' | 'undefined' | 'void') ; diff --git a/kipper/core/KipperParser.tokens b/kipper/core/KipperParser.tokens index dfd693766..9842baf9c 100644 --- a/kipper/core/KipperParser.tokens +++ b/kipper/core/KipperParser.tokens @@ -2,157 +2,159 @@ FStringExpStart=1 BlockComment=2 LineComment=3 Pragma=4 -Const=5 -Var=6 -As=7 -Spread=8 -Switch=9 -Case=10 -Default=11 -Break=12 -Continue=13 -Do=14 -While=15 -If=16 -Else=17 -For=18 -Enum=19 -DefFunc=20 -Return=21 -CallFunc=22 -RetIndicator=23 -Class=24 -Interface=25 -Constructor=26 -New=27 -True=28 -False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 -'const'=5 -'var'=6 -'as'=7 -'...'=8 -'switch'=9 -'case'=10 -'default'=11 -'break'=12 -'continue'=13 -'do'=14 -'while'=15 -'if'=16 -'else'=17 -'for'=18 -'enum'=19 -'def'=20 -'return'=21 -'call'=22 -'->'=23 -'class'=24 -'interface'=25 -'constructor'=26 -'new'=27 -'true'=28 -'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +InstanceOf=5 +Const=6 +Var=7 +As=8 +Spread=9 +Switch=10 +Case=11 +Default=12 +Break=13 +Continue=14 +Do=15 +While=16 +If=17 +Else=18 +For=19 +Enum=20 +DefFunc=21 +Return=22 +CallFunc=23 +RetIndicator=24 +Class=25 +Interface=26 +Constructor=27 +New=28 +True=29 +False=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 +'instanceof'=5 +'const'=6 +'var'=7 +'as'=8 +'...'=9 +'switch'=10 +'case'=11 +'default'=12 +'break'=13 +'continue'=14 +'do'=15 +'while'=16 +'if'=17 +'else'=18 +'for'=19 +'enum'=20 +'def'=21 +'return'=22 +'call'=23 +'->'=24 +'class'=25 +'interface'=26 +'constructor'=27 +'new'=28 +'true'=29 +'false'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index e3ef2f3ab..7da81f087 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -56,6 +56,7 @@ import type { IncrementOrDecrementUnaryExpressionContext, InitDeclaratorContext, InitializerContext, + InstanceOfExpressionContext, InterfaceDeclarationContext, InterfaceMethodDeclarationContext, InterfacePropertyDeclarationContext, @@ -264,6 +265,16 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi // Expression section // ------------------------------------------------------------------------------------------------------------------- + /** + * Enter a parse tree produced by `KipperParser.instanceOfExpression`. + */ + public enterInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by `KipperParser.instanceOfExpression`. + */ + public exitInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void = this.handleExitingTreeNode; + /** * Enter a parse tree produced by `KipperParser.identifierPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). diff --git a/kipper/core/src/compiler/ast/common/ast-types.ts b/kipper/core/src/compiler/ast/common/ast-types.ts index 33c11dac8..f9b41de8e 100644 --- a/kipper/core/src/compiler/ast/common/ast-types.ts +++ b/kipper/core/src/compiler/ast/common/ast-types.ts @@ -33,6 +33,7 @@ import type { IfStatementContext, IncrementOrDecrementPostfixExpressionContext, IncrementOrDecrementUnaryExpressionContext, + InstanceOfExpressionContext, InterfaceDeclarationContext, InterfaceMethodDeclarationContext, InterfacePropertyDeclarationContext, @@ -92,7 +93,8 @@ export type ParserExpressionContext = | BitwiseAndExpressionContext | BitwiseXorExpressionContext | NewInstantiationExpressionContext - | BitwiseShiftExpressionContext; + | BitwiseShiftExpressionContext + | InstanceOfExpressionContext; /** * Union type of all usable statement rule context classes implemented by the {@link ParseRuleKindMapping} for a @@ -208,7 +210,8 @@ export type ASTExpressionKind = | typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression | typeof ParseRuleKindMapping.RULE_memberAccessExpression | typeof ParseRuleKindMapping.RULE_typeofExpression - | typeof ParseRuleKindMapping.RULE_newInstantiationExpression; + | typeof ParseRuleKindMapping.RULE_newInstantiationExpression + | typeof ParseRuleKindMapping.RULE_instanceofExpression; /** * Union type of all possible {@link ParserASTNode.kind} values that have a constructable {@link CompilableASTNode}. @@ -291,7 +294,8 @@ export type ASTExpressionRuleName = | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_lambdaPrimaryExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_memberAccessExpression] | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_typeofExpression] - | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_newInstantiationExpression]; + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_newInstantiationExpression] + | (typeof KindParseRuleMapping)[typeof ParseRuleKindMapping.RULE_instanceofExpression]; /** * Union type of all possible {@link ParserASTNode.ruleName} values that have a constructable {@link CompilableASTNode}. diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index d0a4f99b4..c7facac15 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -35,6 +35,7 @@ import { IfStatementContext, IncrementOrDecrementPostfixExpressionContext, IncrementOrDecrementUnaryExpressionContext, + InstanceOfExpressionContext, InterfaceDeclarationContext, InterfaceMethodDeclarationContext, InterfacePropertyDeclarationContext, @@ -126,6 +127,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; +import { InstanceofExpression } from "../nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -192,6 +194,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpression, [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpression, [ParseRuleKindMapping.RULE_typeofExpression]: TypeofExpression, + [ParseRuleKindMapping.RULE_instanceofExpression]: InstanceofExpression, } satisfies Record>; /** @@ -268,6 +271,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpressionContext, [ParseRuleKindMapping.RULE_typeofExpression]: TypeofExpressionContext, [ParseRuleKindMapping.RULE_newInstantiationExpression]: NewInstantiationExpressionContext, + [ParseRuleKindMapping.RULE_instanceofExpression]: InstanceOfExpressionContext, [ParseRuleKindMapping.RULE_memberAccessExpression]: [ // Due to the nature of the parser not handling the notations as one rule, it's an array DotNotationMemberAccessExpressionContext, @@ -351,6 +355,7 @@ export class ASTNodeMapper { RULE_lambdaPrimaryExpression: LambdaPrimaryExpression, RULE_typeofExpression: TypeofExpression, RULE_newInstantiationExpression: NewInstantiationExpression, + RULE_instanceofExpression: InstanceofExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts index 15d259d3d..a102c36f1 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts @@ -5,3 +5,4 @@ export * from "./relational-expression"; export * from "./relational-expression-semantics"; export * from "./relational-expression-type-semantics"; +export * from "./instanceof-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts new file mode 100644 index 000000000..343ff1ad0 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts @@ -0,0 +1,3 @@ +export * from "./instanceof-expression"; +export * from "./instanceof-expression-semantics"; +export * from "./instanceof-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts new file mode 100644 index 000000000..401031b37 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts @@ -0,0 +1,3 @@ +import type { ExpressionSemantics } from "../../../expression-semantics"; + +export interface InstanceofExpressionSemantics extends ExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts new file mode 100644 index 000000000..1952232a2 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts @@ -0,0 +1,16 @@ +import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; +import type { CustomType } from "../../../../../../semantics"; + +export interface InstanceofExpressionTypeSemantics extends ExpressionTypeSemantics { + /** + * The type that the left-hand side of the instanceof expression is being checked against. + * @since 0.1.0 + */ + toBeChecked: CustomType; + + /** + * The type that the right-hand side of the instanceof expression is being checked against. + */ + + toBeCheckedAgainst: CustomType; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts new file mode 100644 index 000000000..fdf76ad91 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts @@ -0,0 +1,70 @@ +import type { TargetASTNodeSemanticAnalyser } from "../../../../../../target-presets"; +import { Expression } from "../../../expression"; +import type { InstanceofExpressionSemantics } from "./instanceof-expression-semantics"; +import type { InstanceofExpressionTypeSemantics } from "./instanceof-expression-type-semantics"; +import type { InstanceOfExpressionContext } from "../../../../../../lexer-parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../lexer-parser"; +import type { CompilableASTNode } from "../../../../../compilable-ast-node"; + +export class InstanceofExpression extends Expression { + /** + * The static kind for this AST Node. + * @since 0.12.0 + */ + public static readonly kind = ParseRuleKindMapping.RULE_instanceofExpression; + /** + * The static rule name for this AST Node. + * @since 0.12.0 + */ + public static readonly ruleName = KindParseRuleMapping[this.kind]; + + /** + * The private field '_antlrRuleCtx' that actually stores the variable data, + * which is returned inside the {@link this.antlrRuleCtx}. + * @private + */ + protected override readonly _antlrRuleCtx: InstanceOfExpressionContext; + + constructor(antlrRuleCtx: InstanceOfExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + + /** + * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST + * node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.10.0 + */ + public override get kind() { + return InstanceofExpression.kind; + } + + /** + * Returns the rule name of this AST Node. This represents the specific type of the {@link antlrRuleCtx} that this + * AST node wraps. + * + * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example + * {@link ParseRuleKindMapping.RULE_expression}. + * @since 0.11.0 + */ + public override get ruleName() { + return InstanceofExpression.ruleName; + } + + public async primarySemanticAnalysis(): Promise { + console.log("InstanceofExpression primarySemanticAnalysis"); + throw new Error("Method not implemented."); + } + + public async primarySemanticTypeChecking(): Promise { + throw new Error("Method not implemented."); + } + + public targetCodeGenerator = this.codeGenerator.instanceofExpression; + targetSemanticAnalysis = this.semanticAnalyser.instanceofExpression; + + public checkForWarnings = undefined; // TODO! +} diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp index e91f2b974..612fc2372 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.interp @@ -4,6 +4,7 @@ null null null null +'instanceof' 'const' 'var' 'as' @@ -95,6 +96,7 @@ FStringExpStart BlockComment LineComment Pragma +InstanceOf Const Var As @@ -184,6 +186,7 @@ rule names: BlockComment LineComment Pragma +InstanceOf Const Var As @@ -316,4 +319,4 @@ SINGLE_QUOTE_FSTRING DOUBLE_QUOTE_FSTRING atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 90, 776, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 250, 10, 2, 12, 2, 14, 2, 253, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 7, 76, 554, 10, 76, 12, 76, 14, 76, 557, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 5, 77, 563, 10, 77, 3, 78, 3, 78, 5, 78, 567, 10, 78, 3, 78, 3, 78, 3, 79, 3, 79, 5, 79, 573, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 81, 6, 81, 580, 10, 81, 13, 81, 14, 81, 581, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 6, 94, 637, 10, 94, 13, 94, 14, 94, 638, 3, 95, 3, 95, 3, 95, 6, 95, 644, 10, 95, 13, 95, 14, 95, 645, 3, 96, 3, 96, 3, 96, 6, 96, 651, 10, 96, 13, 96, 14, 96, 652, 3, 97, 3, 97, 3, 97, 6, 97, 658, 10, 97, 13, 97, 14, 97, 659, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 5, 102, 672, 10, 102, 3, 102, 3, 102, 3, 102, 5, 102, 677, 10, 102, 3, 103, 5, 103, 680, 10, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 5, 103, 687, 10, 103, 3, 104, 3, 104, 5, 104, 691, 10, 104, 3, 104, 3, 104, 3, 105, 6, 105, 696, 10, 105, 13, 105, 14, 105, 697, 3, 106, 3, 106, 3, 107, 6, 107, 703, 10, 107, 13, 107, 14, 107, 704, 3, 108, 3, 108, 5, 108, 709, 10, 108, 3, 109, 3, 109, 3, 109, 5, 109, 714, 10, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 5, 111, 722, 10, 111, 3, 111, 5, 111, 725, 10, 111, 3, 112, 3, 112, 3, 112, 3, 112, 6, 112, 731, 10, 112, 13, 112, 14, 112, 732, 3, 113, 6, 113, 736, 10, 113, 13, 113, 14, 113, 737, 3, 114, 3, 114, 5, 114, 742, 10, 114, 3, 115, 6, 115, 745, 10, 115, 13, 115, 14, 115, 746, 3, 116, 3, 116, 5, 116, 751, 10, 116, 3, 117, 6, 117, 754, 10, 117, 13, 117, 14, 117, 755, 3, 118, 3, 118, 5, 118, 760, 10, 118, 3, 119, 6, 119, 763, 10, 119, 13, 119, 14, 119, 764, 3, 120, 3, 120, 5, 120, 769, 10, 120, 3, 121, 7, 121, 772, 10, 121, 12, 121, 14, 121, 775, 11, 121, 3, 251, 2, 2, 122, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 2, 173, 2, 87, 175, 2, 88, 177, 2, 2, 179, 2, 89, 181, 2, 90, 183, 2, 2, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 777, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 3, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 3, 175, 3, 2, 2, 2, 4, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 4, 181, 3, 2, 2, 2, 5, 245, 3, 2, 2, 2, 7, 259, 3, 2, 2, 2, 9, 266, 3, 2, 2, 2, 11, 278, 3, 2, 2, 2, 13, 284, 3, 2, 2, 2, 15, 288, 3, 2, 2, 2, 17, 291, 3, 2, 2, 2, 19, 295, 3, 2, 2, 2, 21, 302, 3, 2, 2, 2, 23, 307, 3, 2, 2, 2, 25, 315, 3, 2, 2, 2, 27, 321, 3, 2, 2, 2, 29, 330, 3, 2, 2, 2, 31, 333, 3, 2, 2, 2, 33, 339, 3, 2, 2, 2, 35, 342, 3, 2, 2, 2, 37, 347, 3, 2, 2, 2, 39, 351, 3, 2, 2, 2, 41, 356, 3, 2, 2, 2, 43, 360, 3, 2, 2, 2, 45, 367, 3, 2, 2, 2, 47, 372, 3, 2, 2, 2, 49, 375, 3, 2, 2, 2, 51, 381, 3, 2, 2, 2, 53, 391, 3, 2, 2, 2, 55, 403, 3, 2, 2, 2, 57, 407, 3, 2, 2, 2, 59, 412, 3, 2, 2, 2, 61, 418, 3, 2, 2, 2, 63, 425, 3, 2, 2, 2, 65, 430, 3, 2, 2, 2, 67, 435, 3, 2, 2, 2, 69, 445, 3, 2, 2, 2, 71, 447, 3, 2, 2, 2, 73, 449, 3, 2, 2, 2, 75, 451, 3, 2, 2, 2, 77, 453, 3, 2, 2, 2, 79, 455, 3, 2, 2, 2, 81, 457, 3, 2, 2, 2, 83, 459, 3, 2, 2, 2, 85, 461, 3, 2, 2, 2, 87, 466, 3, 2, 2, 2, 89, 468, 3, 2, 2, 2, 91, 470, 3, 2, 2, 2, 93, 472, 3, 2, 2, 2, 95, 475, 3, 2, 2, 2, 97, 477, 3, 2, 2, 2, 99, 480, 3, 2, 2, 2, 101, 482, 3, 2, 2, 2, 103, 484, 3, 2, 2, 2, 105, 486, 3, 2, 2, 2, 107, 489, 3, 2, 2, 2, 109, 492, 3, 2, 2, 2, 111, 495, 3, 2, 2, 2, 113, 497, 3, 2, 2, 2, 115, 499, 3, 2, 2, 2, 117, 502, 3, 2, 2, 2, 119, 505, 3, 2, 2, 2, 121, 508, 3, 2, 2, 2, 123, 511, 3, 2, 2, 2, 125, 514, 3, 2, 2, 2, 127, 517, 3, 2, 2, 2, 129, 520, 3, 2, 2, 2, 131, 522, 3, 2, 2, 2, 133, 525, 3, 2, 2, 2, 135, 527, 3, 2, 2, 2, 137, 530, 3, 2, 2, 2, 139, 532, 3, 2, 2, 2, 141, 534, 3, 2, 2, 2, 143, 536, 3, 2, 2, 2, 145, 538, 3, 2, 2, 2, 147, 541, 3, 2, 2, 2, 149, 544, 3, 2, 2, 2, 151, 548, 3, 2, 2, 2, 153, 550, 3, 2, 2, 2, 155, 562, 3, 2, 2, 2, 157, 564, 3, 2, 2, 2, 159, 570, 3, 2, 2, 2, 161, 576, 3, 2, 2, 2, 163, 579, 3, 2, 2, 2, 165, 585, 3, 2, 2, 2, 167, 589, 3, 2, 2, 2, 169, 596, 3, 2, 2, 2, 171, 603, 3, 2, 2, 2, 173, 609, 3, 2, 2, 2, 175, 614, 3, 2, 2, 2, 177, 616, 3, 2, 2, 2, 179, 622, 3, 2, 2, 2, 181, 627, 3, 2, 2, 2, 183, 629, 3, 2, 2, 2, 185, 631, 3, 2, 2, 2, 187, 633, 3, 2, 2, 2, 189, 636, 3, 2, 2, 2, 191, 640, 3, 2, 2, 2, 193, 647, 3, 2, 2, 2, 195, 654, 3, 2, 2, 2, 197, 661, 3, 2, 2, 2, 199, 663, 3, 2, 2, 2, 201, 665, 3, 2, 2, 2, 203, 667, 3, 2, 2, 2, 205, 676, 3, 2, 2, 2, 207, 686, 3, 2, 2, 2, 209, 688, 3, 2, 2, 2, 211, 695, 3, 2, 2, 2, 213, 699, 3, 2, 2, 2, 215, 702, 3, 2, 2, 2, 217, 708, 3, 2, 2, 2, 219, 713, 3, 2, 2, 2, 221, 715, 3, 2, 2, 2, 223, 718, 3, 2, 2, 2, 225, 726, 3, 2, 2, 2, 227, 735, 3, 2, 2, 2, 229, 741, 3, 2, 2, 2, 231, 744, 3, 2, 2, 2, 233, 750, 3, 2, 2, 2, 235, 753, 3, 2, 2, 2, 237, 759, 3, 2, 2, 2, 239, 762, 3, 2, 2, 2, 241, 768, 3, 2, 2, 2, 243, 773, 3, 2, 2, 2, 245, 246, 7, 49, 2, 2, 246, 247, 7, 44, 2, 2, 247, 251, 3, 2, 2, 2, 248, 250, 11, 2, 2, 2, 249, 248, 3, 2, 2, 2, 250, 253, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 251, 249, 3, 2, 2, 2, 252, 254, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 255, 7, 44, 2, 2, 255, 256, 7, 49, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 2, 2, 2, 258, 6, 3, 2, 2, 2, 259, 260, 7, 49, 2, 2, 260, 261, 7, 49, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 5, 243, 121, 2, 263, 264, 3, 2, 2, 2, 264, 265, 8, 3, 2, 2, 265, 8, 3, 2, 2, 2, 266, 267, 7, 37, 2, 2, 267, 268, 7, 114, 2, 2, 268, 269, 7, 116, 2, 2, 269, 270, 7, 99, 2, 2, 270, 271, 7, 105, 2, 2, 271, 272, 7, 111, 2, 2, 272, 273, 7, 99, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 5, 243, 121, 2, 275, 276, 3, 2, 2, 2, 276, 277, 8, 4, 3, 2, 277, 10, 3, 2, 2, 2, 278, 279, 7, 101, 2, 2, 279, 280, 7, 113, 2, 2, 280, 281, 7, 112, 2, 2, 281, 282, 7, 117, 2, 2, 282, 283, 7, 118, 2, 2, 283, 12, 3, 2, 2, 2, 284, 285, 7, 120, 2, 2, 285, 286, 7, 99, 2, 2, 286, 287, 7, 116, 2, 2, 287, 14, 3, 2, 2, 2, 288, 289, 7, 99, 2, 2, 289, 290, 7, 117, 2, 2, 290, 16, 3, 2, 2, 2, 291, 292, 7, 48, 2, 2, 292, 293, 7, 48, 2, 2, 293, 294, 7, 48, 2, 2, 294, 18, 3, 2, 2, 2, 295, 296, 7, 117, 2, 2, 296, 297, 7, 121, 2, 2, 297, 298, 7, 107, 2, 2, 298, 299, 7, 118, 2, 2, 299, 300, 7, 101, 2, 2, 300, 301, 7, 106, 2, 2, 301, 20, 3, 2, 2, 2, 302, 303, 7, 101, 2, 2, 303, 304, 7, 99, 2, 2, 304, 305, 7, 117, 2, 2, 305, 306, 7, 103, 2, 2, 306, 22, 3, 2, 2, 2, 307, 308, 7, 102, 2, 2, 308, 309, 7, 103, 2, 2, 309, 310, 7, 104, 2, 2, 310, 311, 7, 99, 2, 2, 311, 312, 7, 119, 2, 2, 312, 313, 7, 110, 2, 2, 313, 314, 7, 118, 2, 2, 314, 24, 3, 2, 2, 2, 315, 316, 7, 100, 2, 2, 316, 317, 7, 116, 2, 2, 317, 318, 7, 103, 2, 2, 318, 319, 7, 99, 2, 2, 319, 320, 7, 109, 2, 2, 320, 26, 3, 2, 2, 2, 321, 322, 7, 101, 2, 2, 322, 323, 7, 113, 2, 2, 323, 324, 7, 112, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 107, 2, 2, 326, 327, 7, 112, 2, 2, 327, 328, 7, 119, 2, 2, 328, 329, 7, 103, 2, 2, 329, 28, 3, 2, 2, 2, 330, 331, 7, 102, 2, 2, 331, 332, 7, 113, 2, 2, 332, 30, 3, 2, 2, 2, 333, 334, 7, 121, 2, 2, 334, 335, 7, 106, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 110, 2, 2, 337, 338, 7, 103, 2, 2, 338, 32, 3, 2, 2, 2, 339, 340, 7, 107, 2, 2, 340, 341, 7, 104, 2, 2, 341, 34, 3, 2, 2, 2, 342, 343, 7, 103, 2, 2, 343, 344, 7, 110, 2, 2, 344, 345, 7, 117, 2, 2, 345, 346, 7, 103, 2, 2, 346, 36, 3, 2, 2, 2, 347, 348, 7, 104, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 116, 2, 2, 350, 38, 3, 2, 2, 2, 351, 352, 7, 103, 2, 2, 352, 353, 7, 112, 2, 2, 353, 354, 7, 119, 2, 2, 354, 355, 7, 111, 2, 2, 355, 40, 3, 2, 2, 2, 356, 357, 7, 102, 2, 2, 357, 358, 7, 103, 2, 2, 358, 359, 7, 104, 2, 2, 359, 42, 3, 2, 2, 2, 360, 361, 7, 116, 2, 2, 361, 362, 7, 103, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 119, 2, 2, 364, 365, 7, 116, 2, 2, 365, 366, 7, 112, 2, 2, 366, 44, 3, 2, 2, 2, 367, 368, 7, 101, 2, 2, 368, 369, 7, 99, 2, 2, 369, 370, 7, 110, 2, 2, 370, 371, 7, 110, 2, 2, 371, 46, 3, 2, 2, 2, 372, 373, 7, 47, 2, 2, 373, 374, 7, 64, 2, 2, 374, 48, 3, 2, 2, 2, 375, 376, 7, 101, 2, 2, 376, 377, 7, 110, 2, 2, 377, 378, 7, 99, 2, 2, 378, 379, 7, 117, 2, 2, 379, 380, 7, 117, 2, 2, 380, 50, 3, 2, 2, 2, 381, 382, 7, 107, 2, 2, 382, 383, 7, 112, 2, 2, 383, 384, 7, 118, 2, 2, 384, 385, 7, 103, 2, 2, 385, 386, 7, 116, 2, 2, 386, 387, 7, 104, 2, 2, 387, 388, 7, 99, 2, 2, 388, 389, 7, 101, 2, 2, 389, 390, 7, 103, 2, 2, 390, 52, 3, 2, 2, 2, 391, 392, 7, 101, 2, 2, 392, 393, 7, 113, 2, 2, 393, 394, 7, 112, 2, 2, 394, 395, 7, 117, 2, 2, 395, 396, 7, 118, 2, 2, 396, 397, 7, 116, 2, 2, 397, 398, 7, 119, 2, 2, 398, 399, 7, 101, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 113, 2, 2, 401, 402, 7, 116, 2, 2, 402, 54, 3, 2, 2, 2, 403, 404, 7, 112, 2, 2, 404, 405, 7, 103, 2, 2, 405, 406, 7, 121, 2, 2, 406, 56, 3, 2, 2, 2, 407, 408, 7, 118, 2, 2, 408, 409, 7, 116, 2, 2, 409, 410, 7, 119, 2, 2, 410, 411, 7, 103, 2, 2, 411, 58, 3, 2, 2, 2, 412, 413, 7, 104, 2, 2, 413, 414, 7, 99, 2, 2, 414, 415, 7, 110, 2, 2, 415, 416, 7, 117, 2, 2, 416, 417, 7, 103, 2, 2, 417, 60, 3, 2, 2, 2, 418, 419, 7, 118, 2, 2, 419, 420, 7, 123, 2, 2, 420, 421, 7, 114, 2, 2, 421, 422, 7, 103, 2, 2, 422, 423, 7, 113, 2, 2, 423, 424, 7, 104, 2, 2, 424, 62, 3, 2, 2, 2, 425, 426, 7, 120, 2, 2, 426, 427, 7, 113, 2, 2, 427, 428, 7, 107, 2, 2, 428, 429, 7, 102, 2, 2, 429, 64, 3, 2, 2, 2, 430, 431, 7, 112, 2, 2, 431, 432, 7, 119, 2, 2, 432, 433, 7, 110, 2, 2, 433, 434, 7, 110, 2, 2, 434, 66, 3, 2, 2, 2, 435, 436, 7, 119, 2, 2, 436, 437, 7, 112, 2, 2, 437, 438, 7, 102, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 104, 2, 2, 440, 441, 7, 107, 2, 2, 441, 442, 7, 112, 2, 2, 442, 443, 7, 103, 2, 2, 443, 444, 7, 102, 2, 2, 444, 68, 3, 2, 2, 2, 445, 446, 7, 46, 2, 2, 446, 70, 3, 2, 2, 2, 447, 448, 7, 61, 2, 2, 448, 72, 3, 2, 2, 2, 449, 450, 7, 65, 2, 2, 450, 74, 3, 2, 2, 2, 451, 452, 7, 60, 2, 2, 452, 76, 3, 2, 2, 2, 453, 454, 7, 42, 2, 2, 454, 78, 3, 2, 2, 2, 455, 456, 7, 43, 2, 2, 456, 80, 3, 2, 2, 2, 457, 458, 7, 93, 2, 2, 458, 82, 3, 2, 2, 2, 459, 460, 7, 95, 2, 2, 460, 84, 3, 2, 2, 2, 461, 462, 6, 42, 2, 2, 462, 463, 7, 127, 2, 2, 463, 464, 3, 2, 2, 2, 464, 465, 8, 42, 4, 2, 465, 86, 3, 2, 2, 2, 466, 467, 7, 125, 2, 2, 467, 88, 3, 2, 2, 2, 468, 469, 7, 127, 2, 2, 469, 90, 3, 2, 2, 2, 470, 471, 7, 45, 2, 2, 471, 92, 3, 2, 2, 2, 472, 473, 7, 45, 2, 2, 473, 474, 7, 45, 2, 2, 474, 94, 3, 2, 2, 2, 475, 476, 7, 47, 2, 2, 476, 96, 3, 2, 2, 2, 477, 478, 7, 47, 2, 2, 478, 479, 7, 47, 2, 2, 479, 98, 3, 2, 2, 2, 480, 481, 7, 44, 2, 2, 481, 100, 3, 2, 2, 2, 482, 483, 7, 49, 2, 2, 483, 102, 3, 2, 2, 2, 484, 485, 7, 39, 2, 2, 485, 104, 3, 2, 2, 2, 486, 487, 7, 44, 2, 2, 487, 488, 7, 44, 2, 2, 488, 106, 3, 2, 2, 2, 489, 490, 7, 40, 2, 2, 490, 491, 7, 40, 2, 2, 491, 108, 3, 2, 2, 2, 492, 493, 7, 126, 2, 2, 493, 494, 7, 126, 2, 2, 494, 110, 3, 2, 2, 2, 495, 496, 7, 35, 2, 2, 496, 112, 3, 2, 2, 2, 497, 498, 7, 63, 2, 2, 498, 114, 3, 2, 2, 2, 499, 500, 7, 45, 2, 2, 500, 501, 7, 63, 2, 2, 501, 116, 3, 2, 2, 2, 502, 503, 7, 47, 2, 2, 503, 504, 7, 63, 2, 2, 504, 118, 3, 2, 2, 2, 505, 506, 7, 44, 2, 2, 506, 507, 7, 63, 2, 2, 507, 120, 3, 2, 2, 2, 508, 509, 7, 49, 2, 2, 509, 510, 7, 63, 2, 2, 510, 122, 3, 2, 2, 2, 511, 512, 7, 39, 2, 2, 512, 513, 7, 63, 2, 2, 513, 124, 3, 2, 2, 2, 514, 515, 7, 63, 2, 2, 515, 516, 7, 63, 2, 2, 516, 126, 3, 2, 2, 2, 517, 518, 7, 35, 2, 2, 518, 519, 7, 63, 2, 2, 519, 128, 3, 2, 2, 2, 520, 521, 7, 62, 2, 2, 521, 130, 3, 2, 2, 2, 522, 523, 7, 62, 2, 2, 523, 524, 7, 63, 2, 2, 524, 132, 3, 2, 2, 2, 525, 526, 7, 64, 2, 2, 526, 134, 3, 2, 2, 2, 527, 528, 7, 64, 2, 2, 528, 529, 7, 63, 2, 2, 529, 136, 3, 2, 2, 2, 530, 531, 7, 40, 2, 2, 531, 138, 3, 2, 2, 2, 532, 533, 7, 126, 2, 2, 533, 140, 3, 2, 2, 2, 534, 535, 7, 96, 2, 2, 535, 142, 3, 2, 2, 2, 536, 537, 7, 128, 2, 2, 537, 144, 3, 2, 2, 2, 538, 539, 7, 62, 2, 2, 539, 540, 7, 62, 2, 2, 540, 146, 3, 2, 2, 2, 541, 542, 7, 64, 2, 2, 542, 543, 7, 64, 2, 2, 543, 148, 3, 2, 2, 2, 544, 545, 7, 64, 2, 2, 545, 546, 7, 64, 2, 2, 546, 547, 7, 64, 2, 2, 547, 150, 3, 2, 2, 2, 548, 549, 7, 48, 2, 2, 549, 152, 3, 2, 2, 2, 550, 555, 5, 183, 91, 2, 551, 554, 5, 183, 91, 2, 552, 554, 5, 187, 93, 2, 553, 551, 3, 2, 2, 2, 553, 552, 3, 2, 2, 2, 554, 557, 3, 2, 2, 2, 555, 553, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 154, 3, 2, 2, 2, 557, 555, 3, 2, 2, 2, 558, 563, 5, 189, 94, 2, 559, 563, 5, 193, 96, 2, 560, 563, 5, 195, 97, 2, 561, 563, 5, 191, 95, 2, 562, 558, 3, 2, 2, 2, 562, 559, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 562, 561, 3, 2, 2, 2, 563, 156, 3, 2, 2, 2, 564, 566, 7, 41, 2, 2, 565, 567, 5, 235, 117, 2, 566, 565, 3, 2, 2, 2, 566, 567, 3, 2, 2, 2, 567, 568, 3, 2, 2, 2, 568, 569, 7, 41, 2, 2, 569, 158, 3, 2, 2, 2, 570, 572, 7, 36, 2, 2, 571, 573, 5, 239, 119, 2, 572, 571, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 7, 36, 2, 2, 575, 160, 3, 2, 2, 2, 576, 577, 5, 205, 102, 2, 577, 162, 3, 2, 2, 2, 578, 580, 9, 2, 2, 2, 579, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 8, 81, 5, 2, 584, 164, 3, 2, 2, 2, 585, 586, 9, 3, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 8, 82, 5, 2, 588, 166, 3, 2, 2, 2, 589, 590, 7, 104, 2, 2, 590, 591, 7, 41, 2, 2, 591, 592, 3, 2, 2, 2, 592, 593, 8, 83, 6, 2, 593, 594, 3, 2, 2, 2, 594, 595, 8, 83, 7, 2, 595, 168, 3, 2, 2, 2, 596, 597, 7, 104, 2, 2, 597, 598, 7, 36, 2, 2, 598, 599, 3, 2, 2, 2, 599, 600, 8, 84, 8, 2, 600, 601, 3, 2, 2, 2, 601, 602, 8, 84, 9, 2, 602, 170, 3, 2, 2, 2, 603, 604, 6, 85, 3, 2, 604, 605, 7, 125, 2, 2, 605, 606, 3, 2, 2, 2, 606, 607, 8, 85, 10, 2, 607, 608, 8, 85, 11, 2, 608, 172, 3, 2, 2, 2, 609, 610, 7, 41, 2, 2, 610, 611, 8, 86, 12, 2, 611, 612, 3, 2, 2, 2, 612, 613, 8, 86, 4, 2, 613, 174, 3, 2, 2, 2, 614, 615, 5, 227, 113, 2, 615, 176, 3, 2, 2, 2, 616, 617, 6, 88, 4, 2, 617, 618, 7, 125, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 8, 88, 10, 2, 620, 621, 8, 88, 11, 2, 621, 178, 3, 2, 2, 2, 622, 623, 7, 36, 2, 2, 623, 624, 8, 89, 13, 2, 624, 625, 3, 2, 2, 2, 625, 626, 8, 89, 4, 2, 626, 180, 3, 2, 2, 2, 627, 628, 5, 231, 115, 2, 628, 182, 3, 2, 2, 2, 629, 630, 5, 185, 92, 2, 630, 184, 3, 2, 2, 2, 631, 632, 9, 4, 2, 2, 632, 186, 3, 2, 2, 2, 633, 634, 9, 5, 2, 2, 634, 188, 3, 2, 2, 2, 635, 637, 5, 187, 93, 2, 636, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 190, 3, 2, 2, 2, 640, 641, 7, 50, 2, 2, 641, 643, 9, 6, 2, 2, 642, 644, 5, 199, 99, 2, 643, 642, 3, 2, 2, 2, 644, 645, 3, 2, 2, 2, 645, 643, 3, 2, 2, 2, 645, 646, 3, 2, 2, 2, 646, 192, 3, 2, 2, 2, 647, 648, 7, 50, 2, 2, 648, 650, 9, 7, 2, 2, 649, 651, 5, 201, 100, 2, 650, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 194, 3, 2, 2, 2, 654, 655, 7, 50, 2, 2, 655, 657, 9, 8, 2, 2, 656, 658, 5, 203, 101, 2, 657, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 196, 3, 2, 2, 2, 661, 662, 9, 9, 2, 2, 662, 198, 3, 2, 2, 2, 663, 664, 9, 10, 2, 2, 664, 200, 3, 2, 2, 2, 665, 666, 9, 11, 2, 2, 666, 202, 3, 2, 2, 2, 667, 668, 9, 12, 2, 2, 668, 204, 3, 2, 2, 2, 669, 671, 5, 207, 103, 2, 670, 672, 5, 209, 104, 2, 671, 670, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 677, 3, 2, 2, 2, 673, 674, 5, 211, 105, 2, 674, 675, 5, 209, 104, 2, 675, 677, 3, 2, 2, 2, 676, 669, 3, 2, 2, 2, 676, 673, 3, 2, 2, 2, 677, 206, 3, 2, 2, 2, 678, 680, 5, 211, 105, 2, 679, 678, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 682, 7, 48, 2, 2, 682, 687, 5, 211, 105, 2, 683, 684, 5, 211, 105, 2, 684, 685, 7, 48, 2, 2, 685, 687, 3, 2, 2, 2, 686, 679, 3, 2, 2, 2, 686, 683, 3, 2, 2, 2, 687, 208, 3, 2, 2, 2, 688, 690, 9, 13, 2, 2, 689, 691, 5, 213, 106, 2, 690, 689, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 693, 5, 211, 105, 2, 693, 210, 3, 2, 2, 2, 694, 696, 5, 187, 93, 2, 695, 694, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 212, 3, 2, 2, 2, 699, 700, 9, 14, 2, 2, 700, 214, 3, 2, 2, 2, 701, 703, 5, 217, 108, 2, 702, 701, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 216, 3, 2, 2, 2, 706, 709, 10, 15, 2, 2, 707, 709, 5, 219, 109, 2, 708, 706, 3, 2, 2, 2, 708, 707, 3, 2, 2, 2, 709, 218, 3, 2, 2, 2, 710, 714, 5, 221, 110, 2, 711, 714, 5, 223, 111, 2, 712, 714, 5, 225, 112, 2, 713, 710, 3, 2, 2, 2, 713, 711, 3, 2, 2, 2, 713, 712, 3, 2, 2, 2, 714, 220, 3, 2, 2, 2, 715, 716, 7, 94, 2, 2, 716, 717, 9, 16, 2, 2, 717, 222, 3, 2, 2, 2, 718, 719, 7, 94, 2, 2, 719, 721, 5, 201, 100, 2, 720, 722, 5, 201, 100, 2, 721, 720, 3, 2, 2, 2, 721, 722, 3, 2, 2, 2, 722, 724, 3, 2, 2, 2, 723, 725, 5, 201, 100, 2, 724, 723, 3, 2, 2, 2, 724, 725, 3, 2, 2, 2, 725, 224, 3, 2, 2, 2, 726, 727, 7, 94, 2, 2, 727, 728, 7, 122, 2, 2, 728, 730, 3, 2, 2, 2, 729, 731, 5, 203, 101, 2, 730, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 730, 3, 2, 2, 2, 732, 733, 3, 2, 2, 2, 733, 226, 3, 2, 2, 2, 734, 736, 5, 229, 114, 2, 735, 734, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 228, 3, 2, 2, 2, 739, 742, 10, 17, 2, 2, 740, 742, 5, 219, 109, 2, 741, 739, 3, 2, 2, 2, 741, 740, 3, 2, 2, 2, 742, 230, 3, 2, 2, 2, 743, 745, 5, 233, 116, 2, 744, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 232, 3, 2, 2, 2, 748, 751, 10, 18, 2, 2, 749, 751, 5, 219, 109, 2, 750, 748, 3, 2, 2, 2, 750, 749, 3, 2, 2, 2, 751, 234, 3, 2, 2, 2, 752, 754, 5, 237, 118, 2, 753, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 236, 3, 2, 2, 2, 757, 760, 10, 15, 2, 2, 758, 760, 5, 219, 109, 2, 759, 757, 3, 2, 2, 2, 759, 758, 3, 2, 2, 2, 760, 238, 3, 2, 2, 2, 761, 763, 5, 241, 120, 2, 762, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 240, 3, 2, 2, 2, 766, 769, 10, 19, 2, 2, 767, 769, 5, 219, 109, 2, 768, 766, 3, 2, 2, 2, 768, 767, 3, 2, 2, 2, 769, 242, 3, 2, 2, 2, 770, 772, 10, 3, 2, 2, 771, 770, 3, 2, 2, 2, 772, 775, 3, 2, 2, 2, 773, 771, 3, 2, 2, 2, 773, 774, 3, 2, 2, 2, 774, 244, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 37, 2, 3, 4, 251, 553, 555, 562, 566, 572, 581, 638, 645, 652, 659, 671, 676, 679, 686, 690, 697, 704, 708, 713, 721, 724, 732, 737, 741, 746, 750, 755, 759, 764, 768, 773, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 83, 2, 7, 3, 2, 3, 84, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 86, 4, 3, 89, 5] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 91, 789, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 252, 10, 2, 12, 2, 14, 2, 255, 11, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 7, 77, 567, 10, 77, 12, 77, 14, 77, 570, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 5, 78, 576, 10, 78, 3, 79, 3, 79, 5, 79, 580, 10, 79, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, 586, 10, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 82, 6, 82, 593, 10, 82, 13, 82, 14, 82, 594, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 6, 95, 650, 10, 95, 13, 95, 14, 95, 651, 3, 96, 3, 96, 3, 96, 6, 96, 657, 10, 96, 13, 96, 14, 96, 658, 3, 97, 3, 97, 3, 97, 6, 97, 664, 10, 97, 13, 97, 14, 97, 665, 3, 98, 3, 98, 3, 98, 6, 98, 671, 10, 98, 13, 98, 14, 98, 672, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 102, 3, 102, 3, 103, 3, 103, 5, 103, 685, 10, 103, 3, 103, 3, 103, 3, 103, 5, 103, 690, 10, 103, 3, 104, 5, 104, 693, 10, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 700, 10, 104, 3, 105, 3, 105, 5, 105, 704, 10, 105, 3, 105, 3, 105, 3, 106, 6, 106, 709, 10, 106, 13, 106, 14, 106, 710, 3, 107, 3, 107, 3, 108, 6, 108, 716, 10, 108, 13, 108, 14, 108, 717, 3, 109, 3, 109, 5, 109, 722, 10, 109, 3, 110, 3, 110, 3, 110, 5, 110, 727, 10, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 5, 112, 735, 10, 112, 3, 112, 5, 112, 738, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 6, 113, 744, 10, 113, 13, 113, 14, 113, 745, 3, 114, 6, 114, 749, 10, 114, 13, 114, 14, 114, 750, 3, 115, 3, 115, 5, 115, 755, 10, 115, 3, 116, 6, 116, 758, 10, 116, 13, 116, 14, 116, 759, 3, 117, 3, 117, 5, 117, 764, 10, 117, 3, 118, 6, 118, 767, 10, 118, 13, 118, 14, 118, 768, 3, 119, 3, 119, 5, 119, 773, 10, 119, 3, 120, 6, 120, 776, 10, 120, 13, 120, 14, 120, 777, 3, 121, 3, 121, 5, 121, 782, 10, 121, 3, 122, 7, 122, 785, 10, 122, 12, 122, 14, 122, 788, 11, 122, 3, 253, 2, 2, 123, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 87, 173, 2, 2, 175, 2, 88, 177, 2, 89, 179, 2, 2, 181, 2, 90, 183, 2, 91, 185, 2, 2, 187, 2, 2, 189, 2, 2, 191, 2, 2, 193, 2, 2, 195, 2, 2, 197, 2, 2, 199, 2, 2, 201, 2, 2, 203, 2, 2, 205, 2, 2, 207, 2, 2, 209, 2, 2, 211, 2, 2, 213, 2, 2, 215, 2, 2, 217, 2, 2, 219, 2, 2, 221, 2, 2, 223, 2, 2, 225, 2, 2, 227, 2, 2, 229, 2, 2, 231, 2, 2, 233, 2, 2, 235, 2, 2, 237, 2, 2, 239, 2, 2, 241, 2, 2, 243, 2, 2, 245, 2, 2, 5, 2, 3, 4, 20, 6, 2, 11, 11, 13, 14, 34, 34, 162, 162, 5, 2, 12, 12, 15, 15, 8234, 8235, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 4, 2, 68, 68, 100, 100, 4, 2, 81, 81, 113, 113, 4, 2, 90, 90, 122, 122, 3, 2, 51, 59, 3, 2, 50, 51, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 14, 2, 36, 36, 41, 41, 65, 65, 94, 94, 99, 100, 104, 104, 112, 112, 116, 116, 118, 118, 120, 120, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 41, 41, 94, 94, 125, 125, 127, 127, 8, 2, 12, 12, 15, 15, 36, 36, 94, 94, 125, 125, 127, 127, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 2, 790, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 3, 173, 3, 2, 2, 2, 3, 175, 3, 2, 2, 2, 3, 177, 3, 2, 2, 2, 4, 179, 3, 2, 2, 2, 4, 181, 3, 2, 2, 2, 4, 183, 3, 2, 2, 2, 5, 247, 3, 2, 2, 2, 7, 261, 3, 2, 2, 2, 9, 268, 3, 2, 2, 2, 11, 280, 3, 2, 2, 2, 13, 291, 3, 2, 2, 2, 15, 297, 3, 2, 2, 2, 17, 301, 3, 2, 2, 2, 19, 304, 3, 2, 2, 2, 21, 308, 3, 2, 2, 2, 23, 315, 3, 2, 2, 2, 25, 320, 3, 2, 2, 2, 27, 328, 3, 2, 2, 2, 29, 334, 3, 2, 2, 2, 31, 343, 3, 2, 2, 2, 33, 346, 3, 2, 2, 2, 35, 352, 3, 2, 2, 2, 37, 355, 3, 2, 2, 2, 39, 360, 3, 2, 2, 2, 41, 364, 3, 2, 2, 2, 43, 369, 3, 2, 2, 2, 45, 373, 3, 2, 2, 2, 47, 380, 3, 2, 2, 2, 49, 385, 3, 2, 2, 2, 51, 388, 3, 2, 2, 2, 53, 394, 3, 2, 2, 2, 55, 404, 3, 2, 2, 2, 57, 416, 3, 2, 2, 2, 59, 420, 3, 2, 2, 2, 61, 425, 3, 2, 2, 2, 63, 431, 3, 2, 2, 2, 65, 438, 3, 2, 2, 2, 67, 443, 3, 2, 2, 2, 69, 448, 3, 2, 2, 2, 71, 458, 3, 2, 2, 2, 73, 460, 3, 2, 2, 2, 75, 462, 3, 2, 2, 2, 77, 464, 3, 2, 2, 2, 79, 466, 3, 2, 2, 2, 81, 468, 3, 2, 2, 2, 83, 470, 3, 2, 2, 2, 85, 472, 3, 2, 2, 2, 87, 474, 3, 2, 2, 2, 89, 479, 3, 2, 2, 2, 91, 481, 3, 2, 2, 2, 93, 483, 3, 2, 2, 2, 95, 485, 3, 2, 2, 2, 97, 488, 3, 2, 2, 2, 99, 490, 3, 2, 2, 2, 101, 493, 3, 2, 2, 2, 103, 495, 3, 2, 2, 2, 105, 497, 3, 2, 2, 2, 107, 499, 3, 2, 2, 2, 109, 502, 3, 2, 2, 2, 111, 505, 3, 2, 2, 2, 113, 508, 3, 2, 2, 2, 115, 510, 3, 2, 2, 2, 117, 512, 3, 2, 2, 2, 119, 515, 3, 2, 2, 2, 121, 518, 3, 2, 2, 2, 123, 521, 3, 2, 2, 2, 125, 524, 3, 2, 2, 2, 127, 527, 3, 2, 2, 2, 129, 530, 3, 2, 2, 2, 131, 533, 3, 2, 2, 2, 133, 535, 3, 2, 2, 2, 135, 538, 3, 2, 2, 2, 137, 540, 3, 2, 2, 2, 139, 543, 3, 2, 2, 2, 141, 545, 3, 2, 2, 2, 143, 547, 3, 2, 2, 2, 145, 549, 3, 2, 2, 2, 147, 551, 3, 2, 2, 2, 149, 554, 3, 2, 2, 2, 151, 557, 3, 2, 2, 2, 153, 561, 3, 2, 2, 2, 155, 563, 3, 2, 2, 2, 157, 575, 3, 2, 2, 2, 159, 577, 3, 2, 2, 2, 161, 583, 3, 2, 2, 2, 163, 589, 3, 2, 2, 2, 165, 592, 3, 2, 2, 2, 167, 598, 3, 2, 2, 2, 169, 602, 3, 2, 2, 2, 171, 609, 3, 2, 2, 2, 173, 616, 3, 2, 2, 2, 175, 622, 3, 2, 2, 2, 177, 627, 3, 2, 2, 2, 179, 629, 3, 2, 2, 2, 181, 635, 3, 2, 2, 2, 183, 640, 3, 2, 2, 2, 185, 642, 3, 2, 2, 2, 187, 644, 3, 2, 2, 2, 189, 646, 3, 2, 2, 2, 191, 649, 3, 2, 2, 2, 193, 653, 3, 2, 2, 2, 195, 660, 3, 2, 2, 2, 197, 667, 3, 2, 2, 2, 199, 674, 3, 2, 2, 2, 201, 676, 3, 2, 2, 2, 203, 678, 3, 2, 2, 2, 205, 680, 3, 2, 2, 2, 207, 689, 3, 2, 2, 2, 209, 699, 3, 2, 2, 2, 211, 701, 3, 2, 2, 2, 213, 708, 3, 2, 2, 2, 215, 712, 3, 2, 2, 2, 217, 715, 3, 2, 2, 2, 219, 721, 3, 2, 2, 2, 221, 726, 3, 2, 2, 2, 223, 728, 3, 2, 2, 2, 225, 731, 3, 2, 2, 2, 227, 739, 3, 2, 2, 2, 229, 748, 3, 2, 2, 2, 231, 754, 3, 2, 2, 2, 233, 757, 3, 2, 2, 2, 235, 763, 3, 2, 2, 2, 237, 766, 3, 2, 2, 2, 239, 772, 3, 2, 2, 2, 241, 775, 3, 2, 2, 2, 243, 781, 3, 2, 2, 2, 245, 786, 3, 2, 2, 2, 247, 248, 7, 49, 2, 2, 248, 249, 7, 44, 2, 2, 249, 253, 3, 2, 2, 2, 250, 252, 11, 2, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 254, 256, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 257, 7, 44, 2, 2, 257, 258, 7, 49, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 8, 2, 2, 2, 260, 6, 3, 2, 2, 2, 261, 262, 7, 49, 2, 2, 262, 263, 7, 49, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 5, 245, 122, 2, 265, 266, 3, 2, 2, 2, 266, 267, 8, 3, 2, 2, 267, 8, 3, 2, 2, 2, 268, 269, 7, 37, 2, 2, 269, 270, 7, 114, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 99, 2, 2, 272, 273, 7, 105, 2, 2, 273, 274, 7, 111, 2, 2, 274, 275, 7, 99, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 5, 245, 122, 2, 277, 278, 3, 2, 2, 2, 278, 279, 8, 4, 3, 2, 279, 10, 3, 2, 2, 2, 280, 281, 7, 107, 2, 2, 281, 282, 7, 112, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 118, 2, 2, 284, 285, 7, 99, 2, 2, 285, 286, 7, 112, 2, 2, 286, 287, 7, 101, 2, 2, 287, 288, 7, 103, 2, 2, 288, 289, 7, 113, 2, 2, 289, 290, 7, 104, 2, 2, 290, 12, 3, 2, 2, 2, 291, 292, 7, 101, 2, 2, 292, 293, 7, 113, 2, 2, 293, 294, 7, 112, 2, 2, 294, 295, 7, 117, 2, 2, 295, 296, 7, 118, 2, 2, 296, 14, 3, 2, 2, 2, 297, 298, 7, 120, 2, 2, 298, 299, 7, 99, 2, 2, 299, 300, 7, 116, 2, 2, 300, 16, 3, 2, 2, 2, 301, 302, 7, 99, 2, 2, 302, 303, 7, 117, 2, 2, 303, 18, 3, 2, 2, 2, 304, 305, 7, 48, 2, 2, 305, 306, 7, 48, 2, 2, 306, 307, 7, 48, 2, 2, 307, 20, 3, 2, 2, 2, 308, 309, 7, 117, 2, 2, 309, 310, 7, 121, 2, 2, 310, 311, 7, 107, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 101, 2, 2, 313, 314, 7, 106, 2, 2, 314, 22, 3, 2, 2, 2, 315, 316, 7, 101, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 117, 2, 2, 318, 319, 7, 103, 2, 2, 319, 24, 3, 2, 2, 2, 320, 321, 7, 102, 2, 2, 321, 322, 7, 103, 2, 2, 322, 323, 7, 104, 2, 2, 323, 324, 7, 99, 2, 2, 324, 325, 7, 119, 2, 2, 325, 326, 7, 110, 2, 2, 326, 327, 7, 118, 2, 2, 327, 26, 3, 2, 2, 2, 328, 329, 7, 100, 2, 2, 329, 330, 7, 116, 2, 2, 330, 331, 7, 103, 2, 2, 331, 332, 7, 99, 2, 2, 332, 333, 7, 109, 2, 2, 333, 28, 3, 2, 2, 2, 334, 335, 7, 101, 2, 2, 335, 336, 7, 113, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 118, 2, 2, 338, 339, 7, 107, 2, 2, 339, 340, 7, 112, 2, 2, 340, 341, 7, 119, 2, 2, 341, 342, 7, 103, 2, 2, 342, 30, 3, 2, 2, 2, 343, 344, 7, 102, 2, 2, 344, 345, 7, 113, 2, 2, 345, 32, 3, 2, 2, 2, 346, 347, 7, 121, 2, 2, 347, 348, 7, 106, 2, 2, 348, 349, 7, 107, 2, 2, 349, 350, 7, 110, 2, 2, 350, 351, 7, 103, 2, 2, 351, 34, 3, 2, 2, 2, 352, 353, 7, 107, 2, 2, 353, 354, 7, 104, 2, 2, 354, 36, 3, 2, 2, 2, 355, 356, 7, 103, 2, 2, 356, 357, 7, 110, 2, 2, 357, 358, 7, 117, 2, 2, 358, 359, 7, 103, 2, 2, 359, 38, 3, 2, 2, 2, 360, 361, 7, 104, 2, 2, 361, 362, 7, 113, 2, 2, 362, 363, 7, 116, 2, 2, 363, 40, 3, 2, 2, 2, 364, 365, 7, 103, 2, 2, 365, 366, 7, 112, 2, 2, 366, 367, 7, 119, 2, 2, 367, 368, 7, 111, 2, 2, 368, 42, 3, 2, 2, 2, 369, 370, 7, 102, 2, 2, 370, 371, 7, 103, 2, 2, 371, 372, 7, 104, 2, 2, 372, 44, 3, 2, 2, 2, 373, 374, 7, 116, 2, 2, 374, 375, 7, 103, 2, 2, 375, 376, 7, 118, 2, 2, 376, 377, 7, 119, 2, 2, 377, 378, 7, 116, 2, 2, 378, 379, 7, 112, 2, 2, 379, 46, 3, 2, 2, 2, 380, 381, 7, 101, 2, 2, 381, 382, 7, 99, 2, 2, 382, 383, 7, 110, 2, 2, 383, 384, 7, 110, 2, 2, 384, 48, 3, 2, 2, 2, 385, 386, 7, 47, 2, 2, 386, 387, 7, 64, 2, 2, 387, 50, 3, 2, 2, 2, 388, 389, 7, 101, 2, 2, 389, 390, 7, 110, 2, 2, 390, 391, 7, 99, 2, 2, 391, 392, 7, 117, 2, 2, 392, 393, 7, 117, 2, 2, 393, 52, 3, 2, 2, 2, 394, 395, 7, 107, 2, 2, 395, 396, 7, 112, 2, 2, 396, 397, 7, 118, 2, 2, 397, 398, 7, 103, 2, 2, 398, 399, 7, 116, 2, 2, 399, 400, 7, 104, 2, 2, 400, 401, 7, 99, 2, 2, 401, 402, 7, 101, 2, 2, 402, 403, 7, 103, 2, 2, 403, 54, 3, 2, 2, 2, 404, 405, 7, 101, 2, 2, 405, 406, 7, 113, 2, 2, 406, 407, 7, 112, 2, 2, 407, 408, 7, 117, 2, 2, 408, 409, 7, 118, 2, 2, 409, 410, 7, 116, 2, 2, 410, 411, 7, 119, 2, 2, 411, 412, 7, 101, 2, 2, 412, 413, 7, 118, 2, 2, 413, 414, 7, 113, 2, 2, 414, 415, 7, 116, 2, 2, 415, 56, 3, 2, 2, 2, 416, 417, 7, 112, 2, 2, 417, 418, 7, 103, 2, 2, 418, 419, 7, 121, 2, 2, 419, 58, 3, 2, 2, 2, 420, 421, 7, 118, 2, 2, 421, 422, 7, 116, 2, 2, 422, 423, 7, 119, 2, 2, 423, 424, 7, 103, 2, 2, 424, 60, 3, 2, 2, 2, 425, 426, 7, 104, 2, 2, 426, 427, 7, 99, 2, 2, 427, 428, 7, 110, 2, 2, 428, 429, 7, 117, 2, 2, 429, 430, 7, 103, 2, 2, 430, 62, 3, 2, 2, 2, 431, 432, 7, 118, 2, 2, 432, 433, 7, 123, 2, 2, 433, 434, 7, 114, 2, 2, 434, 435, 7, 103, 2, 2, 435, 436, 7, 113, 2, 2, 436, 437, 7, 104, 2, 2, 437, 64, 3, 2, 2, 2, 438, 439, 7, 120, 2, 2, 439, 440, 7, 113, 2, 2, 440, 441, 7, 107, 2, 2, 441, 442, 7, 102, 2, 2, 442, 66, 3, 2, 2, 2, 443, 444, 7, 112, 2, 2, 444, 445, 7, 119, 2, 2, 445, 446, 7, 110, 2, 2, 446, 447, 7, 110, 2, 2, 447, 68, 3, 2, 2, 2, 448, 449, 7, 119, 2, 2, 449, 450, 7, 112, 2, 2, 450, 451, 7, 102, 2, 2, 451, 452, 7, 103, 2, 2, 452, 453, 7, 104, 2, 2, 453, 454, 7, 107, 2, 2, 454, 455, 7, 112, 2, 2, 455, 456, 7, 103, 2, 2, 456, 457, 7, 102, 2, 2, 457, 70, 3, 2, 2, 2, 458, 459, 7, 46, 2, 2, 459, 72, 3, 2, 2, 2, 460, 461, 7, 61, 2, 2, 461, 74, 3, 2, 2, 2, 462, 463, 7, 65, 2, 2, 463, 76, 3, 2, 2, 2, 464, 465, 7, 60, 2, 2, 465, 78, 3, 2, 2, 2, 466, 467, 7, 42, 2, 2, 467, 80, 3, 2, 2, 2, 468, 469, 7, 43, 2, 2, 469, 82, 3, 2, 2, 2, 470, 471, 7, 93, 2, 2, 471, 84, 3, 2, 2, 2, 472, 473, 7, 95, 2, 2, 473, 86, 3, 2, 2, 2, 474, 475, 6, 43, 2, 2, 475, 476, 7, 127, 2, 2, 476, 477, 3, 2, 2, 2, 477, 478, 8, 43, 4, 2, 478, 88, 3, 2, 2, 2, 479, 480, 7, 125, 2, 2, 480, 90, 3, 2, 2, 2, 481, 482, 7, 127, 2, 2, 482, 92, 3, 2, 2, 2, 483, 484, 7, 45, 2, 2, 484, 94, 3, 2, 2, 2, 485, 486, 7, 45, 2, 2, 486, 487, 7, 45, 2, 2, 487, 96, 3, 2, 2, 2, 488, 489, 7, 47, 2, 2, 489, 98, 3, 2, 2, 2, 490, 491, 7, 47, 2, 2, 491, 492, 7, 47, 2, 2, 492, 100, 3, 2, 2, 2, 493, 494, 7, 44, 2, 2, 494, 102, 3, 2, 2, 2, 495, 496, 7, 49, 2, 2, 496, 104, 3, 2, 2, 2, 497, 498, 7, 39, 2, 2, 498, 106, 3, 2, 2, 2, 499, 500, 7, 44, 2, 2, 500, 501, 7, 44, 2, 2, 501, 108, 3, 2, 2, 2, 502, 503, 7, 40, 2, 2, 503, 504, 7, 40, 2, 2, 504, 110, 3, 2, 2, 2, 505, 506, 7, 126, 2, 2, 506, 507, 7, 126, 2, 2, 507, 112, 3, 2, 2, 2, 508, 509, 7, 35, 2, 2, 509, 114, 3, 2, 2, 2, 510, 511, 7, 63, 2, 2, 511, 116, 3, 2, 2, 2, 512, 513, 7, 45, 2, 2, 513, 514, 7, 63, 2, 2, 514, 118, 3, 2, 2, 2, 515, 516, 7, 47, 2, 2, 516, 517, 7, 63, 2, 2, 517, 120, 3, 2, 2, 2, 518, 519, 7, 44, 2, 2, 519, 520, 7, 63, 2, 2, 520, 122, 3, 2, 2, 2, 521, 522, 7, 49, 2, 2, 522, 523, 7, 63, 2, 2, 523, 124, 3, 2, 2, 2, 524, 525, 7, 39, 2, 2, 525, 526, 7, 63, 2, 2, 526, 126, 3, 2, 2, 2, 527, 528, 7, 63, 2, 2, 528, 529, 7, 63, 2, 2, 529, 128, 3, 2, 2, 2, 530, 531, 7, 35, 2, 2, 531, 532, 7, 63, 2, 2, 532, 130, 3, 2, 2, 2, 533, 534, 7, 62, 2, 2, 534, 132, 3, 2, 2, 2, 535, 536, 7, 62, 2, 2, 536, 537, 7, 63, 2, 2, 537, 134, 3, 2, 2, 2, 538, 539, 7, 64, 2, 2, 539, 136, 3, 2, 2, 2, 540, 541, 7, 64, 2, 2, 541, 542, 7, 63, 2, 2, 542, 138, 3, 2, 2, 2, 543, 544, 7, 40, 2, 2, 544, 140, 3, 2, 2, 2, 545, 546, 7, 126, 2, 2, 546, 142, 3, 2, 2, 2, 547, 548, 7, 96, 2, 2, 548, 144, 3, 2, 2, 2, 549, 550, 7, 128, 2, 2, 550, 146, 3, 2, 2, 2, 551, 552, 7, 62, 2, 2, 552, 553, 7, 62, 2, 2, 553, 148, 3, 2, 2, 2, 554, 555, 7, 64, 2, 2, 555, 556, 7, 64, 2, 2, 556, 150, 3, 2, 2, 2, 557, 558, 7, 64, 2, 2, 558, 559, 7, 64, 2, 2, 559, 560, 7, 64, 2, 2, 560, 152, 3, 2, 2, 2, 561, 562, 7, 48, 2, 2, 562, 154, 3, 2, 2, 2, 563, 568, 5, 185, 92, 2, 564, 567, 5, 185, 92, 2, 565, 567, 5, 189, 94, 2, 566, 564, 3, 2, 2, 2, 566, 565, 3, 2, 2, 2, 567, 570, 3, 2, 2, 2, 568, 566, 3, 2, 2, 2, 568, 569, 3, 2, 2, 2, 569, 156, 3, 2, 2, 2, 570, 568, 3, 2, 2, 2, 571, 576, 5, 191, 95, 2, 572, 576, 5, 195, 97, 2, 573, 576, 5, 197, 98, 2, 574, 576, 5, 193, 96, 2, 575, 571, 3, 2, 2, 2, 575, 572, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 575, 574, 3, 2, 2, 2, 576, 158, 3, 2, 2, 2, 577, 579, 7, 41, 2, 2, 578, 580, 5, 237, 118, 2, 579, 578, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 7, 41, 2, 2, 582, 160, 3, 2, 2, 2, 583, 585, 7, 36, 2, 2, 584, 586, 5, 241, 120, 2, 585, 584, 3, 2, 2, 2, 585, 586, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 7, 36, 2, 2, 588, 162, 3, 2, 2, 2, 589, 590, 5, 207, 103, 2, 590, 164, 3, 2, 2, 2, 591, 593, 9, 2, 2, 2, 592, 591, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 8, 82, 5, 2, 597, 166, 3, 2, 2, 2, 598, 599, 9, 3, 2, 2, 599, 600, 3, 2, 2, 2, 600, 601, 8, 83, 5, 2, 601, 168, 3, 2, 2, 2, 602, 603, 7, 104, 2, 2, 603, 604, 7, 41, 2, 2, 604, 605, 3, 2, 2, 2, 605, 606, 8, 84, 6, 2, 606, 607, 3, 2, 2, 2, 607, 608, 8, 84, 7, 2, 608, 170, 3, 2, 2, 2, 609, 610, 7, 104, 2, 2, 610, 611, 7, 36, 2, 2, 611, 612, 3, 2, 2, 2, 612, 613, 8, 85, 8, 2, 613, 614, 3, 2, 2, 2, 614, 615, 8, 85, 9, 2, 615, 172, 3, 2, 2, 2, 616, 617, 6, 86, 3, 2, 617, 618, 7, 125, 2, 2, 618, 619, 3, 2, 2, 2, 619, 620, 8, 86, 10, 2, 620, 621, 8, 86, 11, 2, 621, 174, 3, 2, 2, 2, 622, 623, 7, 41, 2, 2, 623, 624, 8, 87, 12, 2, 624, 625, 3, 2, 2, 2, 625, 626, 8, 87, 4, 2, 626, 176, 3, 2, 2, 2, 627, 628, 5, 229, 114, 2, 628, 178, 3, 2, 2, 2, 629, 630, 6, 89, 4, 2, 630, 631, 7, 125, 2, 2, 631, 632, 3, 2, 2, 2, 632, 633, 8, 89, 10, 2, 633, 634, 8, 89, 11, 2, 634, 180, 3, 2, 2, 2, 635, 636, 7, 36, 2, 2, 636, 637, 8, 90, 13, 2, 637, 638, 3, 2, 2, 2, 638, 639, 8, 90, 4, 2, 639, 182, 3, 2, 2, 2, 640, 641, 5, 233, 116, 2, 641, 184, 3, 2, 2, 2, 642, 643, 5, 187, 93, 2, 643, 186, 3, 2, 2, 2, 644, 645, 9, 4, 2, 2, 645, 188, 3, 2, 2, 2, 646, 647, 9, 5, 2, 2, 647, 190, 3, 2, 2, 2, 648, 650, 5, 189, 94, 2, 649, 648, 3, 2, 2, 2, 650, 651, 3, 2, 2, 2, 651, 649, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 192, 3, 2, 2, 2, 653, 654, 7, 50, 2, 2, 654, 656, 9, 6, 2, 2, 655, 657, 5, 201, 100, 2, 656, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 656, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 194, 3, 2, 2, 2, 660, 661, 7, 50, 2, 2, 661, 663, 9, 7, 2, 2, 662, 664, 5, 203, 101, 2, 663, 662, 3, 2, 2, 2, 664, 665, 3, 2, 2, 2, 665, 663, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 196, 3, 2, 2, 2, 667, 668, 7, 50, 2, 2, 668, 670, 9, 8, 2, 2, 669, 671, 5, 205, 102, 2, 670, 669, 3, 2, 2, 2, 671, 672, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 198, 3, 2, 2, 2, 674, 675, 9, 9, 2, 2, 675, 200, 3, 2, 2, 2, 676, 677, 9, 10, 2, 2, 677, 202, 3, 2, 2, 2, 678, 679, 9, 11, 2, 2, 679, 204, 3, 2, 2, 2, 680, 681, 9, 12, 2, 2, 681, 206, 3, 2, 2, 2, 682, 684, 5, 209, 104, 2, 683, 685, 5, 211, 105, 2, 684, 683, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 690, 3, 2, 2, 2, 686, 687, 5, 213, 106, 2, 687, 688, 5, 211, 105, 2, 688, 690, 3, 2, 2, 2, 689, 682, 3, 2, 2, 2, 689, 686, 3, 2, 2, 2, 690, 208, 3, 2, 2, 2, 691, 693, 5, 213, 106, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 695, 7, 48, 2, 2, 695, 700, 5, 213, 106, 2, 696, 697, 5, 213, 106, 2, 697, 698, 7, 48, 2, 2, 698, 700, 3, 2, 2, 2, 699, 692, 3, 2, 2, 2, 699, 696, 3, 2, 2, 2, 700, 210, 3, 2, 2, 2, 701, 703, 9, 13, 2, 2, 702, 704, 5, 215, 107, 2, 703, 702, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 706, 5, 213, 106, 2, 706, 212, 3, 2, 2, 2, 707, 709, 5, 189, 94, 2, 708, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 710, 711, 3, 2, 2, 2, 711, 214, 3, 2, 2, 2, 712, 713, 9, 14, 2, 2, 713, 216, 3, 2, 2, 2, 714, 716, 5, 219, 109, 2, 715, 714, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 218, 3, 2, 2, 2, 719, 722, 10, 15, 2, 2, 720, 722, 5, 221, 110, 2, 721, 719, 3, 2, 2, 2, 721, 720, 3, 2, 2, 2, 722, 220, 3, 2, 2, 2, 723, 727, 5, 223, 111, 2, 724, 727, 5, 225, 112, 2, 725, 727, 5, 227, 113, 2, 726, 723, 3, 2, 2, 2, 726, 724, 3, 2, 2, 2, 726, 725, 3, 2, 2, 2, 727, 222, 3, 2, 2, 2, 728, 729, 7, 94, 2, 2, 729, 730, 9, 16, 2, 2, 730, 224, 3, 2, 2, 2, 731, 732, 7, 94, 2, 2, 732, 734, 5, 203, 101, 2, 733, 735, 5, 203, 101, 2, 734, 733, 3, 2, 2, 2, 734, 735, 3, 2, 2, 2, 735, 737, 3, 2, 2, 2, 736, 738, 5, 203, 101, 2, 737, 736, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 226, 3, 2, 2, 2, 739, 740, 7, 94, 2, 2, 740, 741, 7, 122, 2, 2, 741, 743, 3, 2, 2, 2, 742, 744, 5, 205, 102, 2, 743, 742, 3, 2, 2, 2, 744, 745, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 228, 3, 2, 2, 2, 747, 749, 5, 231, 115, 2, 748, 747, 3, 2, 2, 2, 749, 750, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 230, 3, 2, 2, 2, 752, 755, 10, 17, 2, 2, 753, 755, 5, 221, 110, 2, 754, 752, 3, 2, 2, 2, 754, 753, 3, 2, 2, 2, 755, 232, 3, 2, 2, 2, 756, 758, 5, 235, 117, 2, 757, 756, 3, 2, 2, 2, 758, 759, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 234, 3, 2, 2, 2, 761, 764, 10, 18, 2, 2, 762, 764, 5, 221, 110, 2, 763, 761, 3, 2, 2, 2, 763, 762, 3, 2, 2, 2, 764, 236, 3, 2, 2, 2, 765, 767, 5, 239, 119, 2, 766, 765, 3, 2, 2, 2, 767, 768, 3, 2, 2, 2, 768, 766, 3, 2, 2, 2, 768, 769, 3, 2, 2, 2, 769, 238, 3, 2, 2, 2, 770, 773, 10, 15, 2, 2, 771, 773, 5, 221, 110, 2, 772, 770, 3, 2, 2, 2, 772, 771, 3, 2, 2, 2, 773, 240, 3, 2, 2, 2, 774, 776, 5, 243, 121, 2, 775, 774, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 775, 3, 2, 2, 2, 777, 778, 3, 2, 2, 2, 778, 242, 3, 2, 2, 2, 779, 782, 10, 19, 2, 2, 780, 782, 5, 221, 110, 2, 781, 779, 3, 2, 2, 2, 781, 780, 3, 2, 2, 2, 782, 244, 3, 2, 2, 2, 783, 785, 10, 3, 2, 2, 784, 783, 3, 2, 2, 2, 785, 788, 3, 2, 2, 2, 786, 784, 3, 2, 2, 2, 786, 787, 3, 2, 2, 2, 787, 246, 3, 2, 2, 2, 788, 786, 3, 2, 2, 2, 37, 2, 3, 4, 253, 566, 568, 575, 579, 585, 594, 651, 658, 665, 672, 684, 689, 692, 699, 703, 710, 717, 721, 726, 734, 737, 745, 750, 754, 759, 763, 768, 772, 777, 781, 786, 14, 2, 4, 2, 2, 5, 2, 6, 2, 2, 2, 3, 2, 3, 84, 2, 7, 3, 2, 3, 85, 3, 7, 4, 2, 9, 3, 2, 7, 2, 2, 3, 87, 4, 3, 90, 5] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens index dfd693766..9842baf9c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.tokens @@ -2,157 +2,159 @@ FStringExpStart=1 BlockComment=2 LineComment=3 Pragma=4 -Const=5 -Var=6 -As=7 -Spread=8 -Switch=9 -Case=10 -Default=11 -Break=12 -Continue=13 -Do=14 -While=15 -If=16 -Else=17 -For=18 -Enum=19 -DefFunc=20 -Return=21 -CallFunc=22 -RetIndicator=23 -Class=24 -Interface=25 -Constructor=26 -New=27 -True=28 -False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 -'const'=5 -'var'=6 -'as'=7 -'...'=8 -'switch'=9 -'case'=10 -'default'=11 -'break'=12 -'continue'=13 -'do'=14 -'while'=15 -'if'=16 -'else'=17 -'for'=18 -'enum'=19 -'def'=20 -'return'=21 -'call'=22 -'->'=23 -'class'=24 -'interface'=25 -'constructor'=26 -'new'=27 -'true'=28 -'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +InstanceOf=5 +Const=6 +Var=7 +As=8 +Spread=9 +Switch=10 +Case=11 +Default=12 +Break=13 +Continue=14 +Do=15 +While=16 +If=17 +Else=18 +For=19 +Enum=20 +DefFunc=21 +Return=22 +CallFunc=23 +RetIndicator=24 +Class=25 +Interface=26 +Constructor=27 +New=28 +True=29 +False=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 +'instanceof'=5 +'const'=6 +'var'=7 +'as'=8 +'...'=9 +'switch'=10 +'case'=11 +'default'=12 +'break'=13 +'continue'=14 +'do'=15 +'while'=16 +'if'=17 +'else'=18 +'for'=19 +'enum'=20 +'def'=21 +'return'=22 +'call'=23 +'->'=24 +'class'=25 +'interface'=26 +'constructor'=27 +'new'=28 +'true'=29 +'false'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index fcc1aef27..fef79ba8c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -5,7 +5,10 @@ import KipperLexerBase from "./base/KipperLexerBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; import { RuleContext } from "antlr4ts/RuleContext"; import { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; @@ -17,90 +20,91 @@ export class KipperLexer extends KipperLexerBase { public static readonly BlockComment = 2; public static readonly LineComment = 3; public static readonly Pragma = 4; - public static readonly Const = 5; - public static readonly Var = 6; - public static readonly As = 7; - public static readonly Spread = 8; - public static readonly Switch = 9; - public static readonly Case = 10; - public static readonly Default = 11; - public static readonly Break = 12; - public static readonly Continue = 13; - public static readonly Do = 14; - public static readonly While = 15; - public static readonly If = 16; - public static readonly Else = 17; - public static readonly For = 18; - public static readonly Enum = 19; - public static readonly DefFunc = 20; - public static readonly Return = 21; - public static readonly CallFunc = 22; - public static readonly RetIndicator = 23; - public static readonly Class = 24; - public static readonly Interface = 25; - public static readonly Constructor = 26; - public static readonly New = 27; - public static readonly True = 28; - public static readonly False = 29; - public static readonly Typeof = 30; - public static readonly Void = 31; - public static readonly Null = 32; - public static readonly Undefined = 33; - public static readonly Comma = 34; - public static readonly SemiColon = 35; - public static readonly QuestionMark = 36; - public static readonly Colon = 37; - public static readonly LeftParen = 38; - public static readonly RightParen = 39; - public static readonly LeftBracket = 40; - public static readonly RightBracket = 41; - public static readonly FStringExpEnd = 42; - public static readonly LeftBrace = 43; - public static readonly RightBrace = 44; - public static readonly Plus = 45; - public static readonly PlusPlus = 46; - public static readonly Minus = 47; - public static readonly MinusMinus = 48; - public static readonly Star = 49; - public static readonly Div = 50; - public static readonly Mod = 51; - public static readonly PowerTo = 52; - public static readonly AndAnd = 53; - public static readonly OrOr = 54; - public static readonly Not = 55; - public static readonly Assign = 56; - public static readonly PlusAssign = 57; - public static readonly MinusAssign = 58; - public static readonly StarAssign = 59; - public static readonly DivAssign = 60; - public static readonly ModAssign = 61; - public static readonly Equal = 62; - public static readonly NotEqual = 63; - public static readonly Less = 64; - public static readonly LessEqual = 65; - public static readonly Greater = 66; - public static readonly GreaterEqual = 67; - public static readonly BitwiseAnd = 68; - public static readonly BitwiseOr = 69; - public static readonly BitwiseXor = 70; - public static readonly BitwiseNot = 71; - public static readonly BitwiseZeroFillLeftShift = 72; - public static readonly BitwiseSignedRightShift = 73; - public static readonly BitwiseZeroFillRightShift = 74; - public static readonly Dot = 75; - public static readonly Identifier = 76; - public static readonly IntegerConstant = 77; - public static readonly SingleQuoteStringLiteral = 78; - public static readonly DoubleQuoteStringLiteral = 79; - public static readonly FloatingConstant = 80; - public static readonly Whitespace = 81; - public static readonly Newline = 82; - public static readonly FStringSingleQuoteStart = 83; - public static readonly FStringDoubleQuoteStart = 84; - public static readonly FStringSingleQuoteEnd = 85; - public static readonly FStringSingleQuoteAtom = 86; - public static readonly FStringDoubleQuoteEnd = 87; - public static readonly FStringDoubleQuoteAtom = 88; + public static readonly InstanceOf = 5; + public static readonly Const = 6; + public static readonly Var = 7; + public static readonly As = 8; + public static readonly Spread = 9; + public static readonly Switch = 10; + public static readonly Case = 11; + public static readonly Default = 12; + public static readonly Break = 13; + public static readonly Continue = 14; + public static readonly Do = 15; + public static readonly While = 16; + public static readonly If = 17; + public static readonly Else = 18; + public static readonly For = 19; + public static readonly Enum = 20; + public static readonly DefFunc = 21; + public static readonly Return = 22; + public static readonly CallFunc = 23; + public static readonly RetIndicator = 24; + public static readonly Class = 25; + public static readonly Interface = 26; + public static readonly Constructor = 27; + public static readonly New = 28; + public static readonly True = 29; + public static readonly False = 30; + public static readonly Typeof = 31; + public static readonly Void = 32; + public static readonly Null = 33; + public static readonly Undefined = 34; + public static readonly Comma = 35; + public static readonly SemiColon = 36; + public static readonly QuestionMark = 37; + public static readonly Colon = 38; + public static readonly LeftParen = 39; + public static readonly RightParen = 40; + public static readonly LeftBracket = 41; + public static readonly RightBracket = 42; + public static readonly FStringExpEnd = 43; + public static readonly LeftBrace = 44; + public static readonly RightBrace = 45; + public static readonly Plus = 46; + public static readonly PlusPlus = 47; + public static readonly Minus = 48; + public static readonly MinusMinus = 49; + public static readonly Star = 50; + public static readonly Div = 51; + public static readonly Mod = 52; + public static readonly PowerTo = 53; + public static readonly AndAnd = 54; + public static readonly OrOr = 55; + public static readonly Not = 56; + public static readonly Assign = 57; + public static readonly PlusAssign = 58; + public static readonly MinusAssign = 59; + public static readonly StarAssign = 60; + public static readonly DivAssign = 61; + public static readonly ModAssign = 62; + public static readonly Equal = 63; + public static readonly NotEqual = 64; + public static readonly Less = 65; + public static readonly LessEqual = 66; + public static readonly Greater = 67; + public static readonly GreaterEqual = 68; + public static readonly BitwiseAnd = 69; + public static readonly BitwiseOr = 70; + public static readonly BitwiseXor = 71; + public static readonly BitwiseNot = 72; + public static readonly BitwiseZeroFillLeftShift = 73; + public static readonly BitwiseSignedRightShift = 74; + public static readonly BitwiseZeroFillRightShift = 75; + public static readonly Dot = 76; + public static readonly Identifier = 77; + public static readonly IntegerConstant = 78; + public static readonly SingleQuoteStringLiteral = 79; + public static readonly DoubleQuoteStringLiteral = 80; + public static readonly FloatingConstant = 81; + public static readonly Whitespace = 82; + public static readonly Newline = 83; + public static readonly FStringSingleQuoteStart = 84; + public static readonly FStringDoubleQuoteStart = 85; + public static readonly FStringSingleQuoteEnd = 86; + public static readonly FStringSingleQuoteAtom = 87; + public static readonly FStringDoubleQuoteEnd = 88; + public static readonly FStringDoubleQuoteAtom = 89; public static readonly COMMENT = 2; public static readonly PRAGMA = 3; public static readonly SINGLE_QUOTE_FSTRING = 1; @@ -116,6 +120,7 @@ export class KipperLexer extends KipperLexerBase { "BlockComment", "LineComment", "Pragma", + "InstanceOf", "Const", "Var", "As", @@ -241,6 +246,7 @@ export class KipperLexer extends KipperLexerBase { undefined, undefined, undefined, + "'instanceof'", "'const'", "'var'", "'as'", @@ -319,6 +325,7 @@ export class KipperLexer extends KipperLexerBase { "BlockComment", "LineComment", "Pragma", + "InstanceOf", "Const", "Var", "As", @@ -450,19 +457,19 @@ export class KipperLexer extends KipperLexerBase { // @Override public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 81: + case 82: this.FStringSingleQuoteStart_action(_localctx, actionIndex); break; - case 82: + case 83: this.FStringDoubleQuoteStart_action(_localctx, actionIndex); break; - case 84: + case 85: this.FStringSingleQuoteEnd_action(_localctx, actionIndex); break; - case 87: + case 88: this.FStringDoubleQuoteEnd_action(_localctx, actionIndex); break; } @@ -498,13 +505,13 @@ export class KipperLexer extends KipperLexerBase { // @Override public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { - case 40: + case 41: return this.FStringExpEnd_sempred(_localctx, predIndex); - case 83: + case 84: return this.FStringSingleQuoteExpStart_sempred(_localctx, predIndex); - case 86: + case 87: return this.FStringDoubleQuoteExpStart_sempred(_localctx, predIndex); } return true; @@ -533,7 +540,7 @@ export class KipperLexer extends KipperLexerBase { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02Z\u0308\b\x01" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02[\u0315\b\x01" + "\b\x01\b\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04" + "\x06\t\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f" + "\t\f\x04\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11" + @@ -550,354 +557,361 @@ export class KipperLexer extends KipperLexerBase { "^\x04_\t_\x04`\t`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04" + "g\tg\x04h\th\x04i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04" + "p\tp\x04q\tq\x04r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04" + - "y\ty\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xFA\n\x02\f\x02\x0E\x02\xFD" + - "\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x03" + - "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04" + - "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05" + - "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07" + - "\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t" + - "\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + - "\v\x03\v\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03" + - "\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x11" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13" + - "\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16" + - "\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B" + - "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + - "\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03" + - ' \x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03!\x03"\x03"\x03#\x03' + - "#\x03$\x03$\x03%\x03%\x03&\x03&\x03'\x03'\x03(\x03(\x03)\x03)\x03*\x03" + - "*\x03*\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x03.\x03.\x03.\x03/\x03" + - "/\x030\x030\x030\x031\x031\x032\x032\x033\x033\x034\x034\x034\x035\x03" + - "5\x035\x036\x036\x036\x037\x037\x038\x038\x039\x039\x039\x03:\x03:\x03" + - ":\x03;\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03" + - "?\x03?\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03C\x03D\x03D\x03" + - "E\x03E\x03F\x03F\x03G\x03G\x03H\x03H\x03H\x03I\x03I\x03I\x03J\x03J\x03" + - "J\x03J\x03K\x03K\x03L\x03L\x03L\x07L\u022A\nL\fL\x0EL\u022D\vL\x03M\x03" + - "M\x03M\x03M\x05M\u0233\nM\x03N\x03N\x05N\u0237\nN\x03N\x03N\x03O\x03O" + - "\x05O\u023D\nO\x03O\x03O\x03P\x03P\x03Q\x06Q\u0244\nQ\rQ\x0EQ\u0245\x03" + - "Q\x03Q\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03T\x03" + - "T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03" + - "V\x03V\x03V\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03" + - "Y\x03Y\x03Z\x03Z\x03[\x03[\x03\\\x03\\\x03]\x03]\x03^\x06^\u027D\n^\r" + - "^\x0E^\u027E\x03_\x03_\x03_\x06_\u0284\n_\r_\x0E_\u0285\x03`\x03`\x03" + - "`\x06`\u028B\n`\r`\x0E`\u028C\x03a\x03a\x03a\x06a\u0292\na\ra\x0Ea\u0293" + - "\x03b\x03b\x03c\x03c\x03d\x03d\x03e\x03e\x03f\x03f\x05f\u02A0\nf\x03f" + - "\x03f\x03f\x05f\u02A5\nf\x03g\x05g\u02A8\ng\x03g\x03g\x03g\x03g\x03g\x05" + - "g\u02AF\ng\x03h\x03h\x05h\u02B3\nh\x03h\x03h\x03i\x06i\u02B8\ni\ri\x0E" + - "i\u02B9\x03j\x03j\x03k\x06k\u02BF\nk\rk\x0Ek\u02C0\x03l\x03l\x05l\u02C5" + - "\nl\x03m\x03m\x03m\x05m\u02CA\nm\x03n\x03n\x03n\x03o\x03o\x03o\x05o\u02D2" + - "\no\x03o\x05o\u02D5\no\x03p\x03p\x03p\x03p\x06p\u02DB\np\rp\x0Ep\u02DC" + - "\x03q\x06q\u02E0\nq\rq\x0Eq\u02E1\x03r\x03r\x05r\u02E6\nr\x03s\x06s\u02E9" + - "\ns\rs\x0Es\u02EA\x03t\x03t\x05t\u02EF\nt\x03u\x06u\u02F2\nu\ru\x0Eu\u02F3" + - "\x03v\x03v\x05v\u02F8\nv\x03w\x06w\u02FB\nw\rw\x0Ew\u02FC\x03x\x03x\x05" + - "x\u0301\nx\x03y\x07y\u0304\ny\fy\x0Ey\u0307\vy\x03\xFB\x02\x02z\x05\x02" + - "\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02" + - "\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11" + - "!\x02\x12#\x02\x13%\x02\x14'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + - "\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02" + - "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02," + - "W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x02" + - "8o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83" + - "\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93" + - "\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3" + - "\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02\x02\xAD\x02W\xAF\x02X\xB1\x02" + - "\x02\xB3\x02Y\xB5\x02Z\xB7\x02\x02\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02" + - "\xBF\x02\x02\xC1\x02\x02\xC3\x02\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02" + - "\xCB\x02\x02\xCD\x02\x02\xCF\x02\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02" + - "\xD7\x02\x02\xD9\x02\x02\xDB\x02\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02" + - "\xE3\x02\x02\xE5\x02\x02\xE7\x02\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02" + - "\xEF\x02\x02\xF1\x02\x02\xF3\x02\x02\x05\x02\x03\x04\x14\x06\x02\v\v\r" + - '\x0E""\xA2\xA2\x05\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|\x03\x02' + - "2;\x04\x02DDdd\x04\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05" + - "\x022;CHch\x04\x02GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$)" + - ")AA^^cdhhppttvvxx}}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f" + - "\x0F\x0F$$^^}}\x7F\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u0309\x02\x05\x03\x02" + - "\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02" + - "\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02" + - "\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02" + - "\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02" + - "\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02" + - "\x02%\x03\x02\x02\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+" + - "\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02" + - "\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02" + - "\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03" + - "\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02" + - "\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02" + - "M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02" + - "\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02" + - "\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03" + - "\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02" + - "\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02" + - "o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02" + - "\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02" + - "\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02" + - "\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02" + - "\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02" + - "\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02" + - "\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02" + - "\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02" + - "\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02" + - "\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x03\xAB\x03\x02\x02\x02" + - "\x03\xAD\x03\x02\x02\x02\x03\xAF\x03\x02\x02\x02\x04\xB1\x03\x02\x02\x02" + - "\x04\xB3\x03\x02\x02\x02\x04\xB5\x03\x02\x02\x02\x05\xF5\x03\x02\x02\x02" + - "\x07\u0103\x03\x02\x02\x02\t\u010A\x03\x02\x02\x02\v\u0116\x03\x02\x02" + - "\x02\r\u011C\x03\x02\x02\x02\x0F\u0120\x03\x02\x02\x02\x11\u0123\x03\x02" + - "\x02\x02\x13\u0127\x03\x02\x02\x02\x15\u012E\x03\x02\x02\x02\x17\u0133" + - "\x03\x02\x02\x02\x19\u013B\x03\x02\x02\x02\x1B\u0141\x03\x02\x02\x02\x1D" + - "\u014A\x03\x02\x02\x02\x1F\u014D\x03\x02\x02\x02!\u0153\x03\x02\x02\x02" + - "#\u0156\x03\x02\x02\x02%\u015B\x03\x02\x02\x02'\u015F\x03\x02\x02\x02" + - ")\u0164\x03\x02\x02\x02+\u0168\x03\x02\x02\x02-\u016F\x03\x02\x02\x02" + - "/\u0174\x03\x02\x02\x021\u0177\x03\x02\x02\x023\u017D\x03\x02\x02\x02" + - "5\u0187\x03\x02\x02\x027\u0193\x03\x02\x02\x029\u0197\x03\x02\x02\x02" + - ";\u019C\x03\x02\x02\x02=\u01A2\x03\x02\x02\x02?\u01A9\x03\x02\x02\x02" + - "A\u01AE\x03\x02\x02\x02C\u01B3\x03\x02\x02\x02E\u01BD\x03\x02\x02\x02" + - "G\u01BF\x03\x02\x02\x02I\u01C1\x03\x02\x02\x02K\u01C3\x03\x02\x02\x02" + - "M\u01C5\x03\x02\x02\x02O\u01C7\x03\x02\x02\x02Q\u01C9\x03\x02\x02\x02" + - "S\u01CB\x03\x02\x02\x02U\u01CD\x03\x02\x02\x02W\u01D2\x03\x02\x02\x02" + - "Y\u01D4\x03\x02\x02\x02[\u01D6\x03\x02\x02\x02]\u01D8\x03\x02\x02\x02" + - "_\u01DB\x03\x02\x02\x02a\u01DD\x03\x02\x02\x02c\u01E0\x03\x02\x02\x02" + - "e\u01E2\x03\x02\x02\x02g\u01E4\x03\x02\x02\x02i\u01E6\x03\x02\x02\x02" + - "k\u01E9\x03\x02\x02\x02m\u01EC\x03\x02\x02\x02o\u01EF\x03\x02\x02\x02" + - "q\u01F1\x03\x02\x02\x02s\u01F3\x03\x02\x02\x02u\u01F6\x03\x02\x02\x02" + - "w\u01F9\x03\x02\x02\x02y\u01FC\x03\x02\x02\x02{\u01FF\x03\x02\x02\x02" + - "}\u0202\x03\x02\x02\x02\x7F\u0205\x03\x02\x02\x02\x81\u0208\x03\x02\x02" + - "\x02\x83\u020A\x03\x02\x02\x02\x85\u020D\x03\x02\x02\x02\x87\u020F\x03" + - "\x02\x02\x02\x89\u0212\x03\x02\x02\x02\x8B\u0214\x03\x02\x02\x02\x8D\u0216" + - "\x03\x02\x02\x02\x8F\u0218\x03\x02\x02\x02\x91\u021A\x03\x02\x02\x02\x93" + - "\u021D\x03\x02\x02\x02\x95\u0220\x03\x02\x02\x02\x97\u0224\x03\x02\x02" + - "\x02\x99\u0226\x03\x02\x02\x02\x9B\u0232\x03\x02\x02\x02\x9D\u0234\x03" + - "\x02\x02\x02\x9F\u023A\x03\x02\x02\x02\xA1\u0240\x03\x02\x02\x02\xA3\u0243" + - "\x03\x02\x02\x02\xA5\u0249\x03\x02\x02\x02\xA7\u024D\x03\x02\x02\x02\xA9" + - "\u0254\x03\x02\x02\x02\xAB\u025B\x03\x02\x02\x02\xAD\u0261\x03\x02\x02" + - "\x02\xAF\u0266\x03\x02\x02\x02\xB1\u0268\x03\x02\x02\x02\xB3\u026E\x03" + - "\x02\x02\x02\xB5\u0273\x03\x02\x02\x02\xB7\u0275\x03\x02\x02\x02\xB9\u0277" + - "\x03\x02\x02\x02\xBB\u0279\x03\x02\x02\x02\xBD\u027C\x03\x02\x02\x02\xBF" + - "\u0280\x03\x02\x02\x02\xC1\u0287\x03\x02\x02\x02\xC3\u028E\x03\x02\x02" + - "\x02\xC5\u0295\x03\x02\x02\x02\xC7\u0297\x03\x02\x02\x02\xC9\u0299\x03" + - "\x02\x02\x02\xCB\u029B\x03\x02\x02\x02\xCD\u02A4\x03\x02\x02\x02\xCF\u02AE" + - "\x03\x02\x02\x02\xD1\u02B0\x03\x02\x02\x02\xD3\u02B7\x03\x02\x02\x02\xD5" + - "\u02BB\x03\x02\x02\x02\xD7\u02BE\x03\x02\x02\x02\xD9\u02C4\x03\x02\x02" + - "\x02\xDB\u02C9\x03\x02\x02\x02\xDD\u02CB\x03\x02\x02\x02\xDF\u02CE\x03" + - "\x02\x02\x02\xE1\u02D6\x03\x02\x02\x02\xE3\u02DF\x03\x02\x02\x02\xE5\u02E5" + - "\x03\x02\x02\x02\xE7\u02E8\x03\x02\x02\x02\xE9\u02EE\x03\x02\x02\x02\xEB" + - "\u02F1\x03\x02\x02\x02\xED\u02F7\x03\x02\x02\x02\xEF\u02FA\x03\x02\x02" + - "\x02\xF1\u0300\x03\x02\x02\x02\xF3\u0305\x03\x02\x02\x02\xF5\xF6\x071" + - "\x02\x02\xF6\xF7\x07,\x02\x02\xF7\xFB\x03\x02\x02\x02\xF8\xFA\v\x02\x02" + - "\x02\xF9\xF8\x03\x02\x02\x02\xFA\xFD\x03\x02\x02\x02\xFB\xFC\x03\x02\x02" + - "\x02\xFB\xF9\x03\x02\x02\x02\xFC\xFE\x03\x02\x02\x02\xFD\xFB\x03\x02\x02" + - "\x02\xFE\xFF\x07,\x02\x02\xFF\u0100\x071\x02\x02\u0100\u0101\x03\x02\x02" + - "\x02\u0101\u0102\b\x02\x02\x02\u0102\x06\x03\x02\x02\x02\u0103\u0104\x07" + - "1\x02\x02\u0104\u0105\x071\x02\x02\u0105\u0106\x03\x02\x02\x02\u0106\u0107" + - "\x05\xF3y\x02\u0107\u0108\x03\x02\x02\x02\u0108\u0109\b\x03\x02\x02\u0109" + - "\b\x03\x02\x02\x02\u010A\u010B\x07%\x02\x02\u010B\u010C\x07r\x02\x02\u010C" + - "\u010D\x07t\x02\x02\u010D\u010E\x07c\x02\x02\u010E\u010F\x07i\x02\x02" + - "\u010F\u0110\x07o\x02\x02\u0110\u0111\x07c\x02\x02\u0111\u0112\x03\x02" + - "\x02\x02\u0112\u0113\x05\xF3y\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0115" + - "\b\x04\x03\x02\u0115\n\x03\x02\x02\x02\u0116\u0117\x07e\x02\x02\u0117" + - "\u0118\x07q\x02\x02\u0118\u0119\x07p\x02\x02\u0119\u011A\x07u\x02\x02" + - "\u011A\u011B\x07v\x02\x02\u011B\f\x03\x02\x02\x02\u011C\u011D\x07x\x02" + - "\x02\u011D\u011E\x07c\x02\x02\u011E\u011F\x07t\x02\x02\u011F\x0E\x03\x02" + - "\x02\x02\u0120\u0121\x07c\x02\x02\u0121\u0122\x07u\x02\x02\u0122\x10\x03" + - "\x02\x02\x02\u0123\u0124\x070\x02\x02\u0124\u0125\x070\x02\x02\u0125\u0126" + - "\x070\x02\x02\u0126\x12\x03\x02\x02\x02\u0127\u0128\x07u\x02\x02\u0128" + - "\u0129\x07y\x02\x02\u0129\u012A\x07k\x02\x02\u012A\u012B\x07v\x02\x02" + - "\u012B\u012C\x07e\x02\x02\u012C\u012D\x07j\x02\x02\u012D\x14\x03\x02\x02" + - "\x02\u012E\u012F\x07e\x02\x02\u012F\u0130\x07c\x02\x02\u0130\u0131\x07" + - "u\x02\x02\u0131\u0132\x07g\x02\x02\u0132\x16\x03\x02\x02\x02\u0133\u0134" + - "\x07f\x02\x02\u0134\u0135\x07g\x02\x02\u0135\u0136\x07h\x02\x02\u0136" + - "\u0137\x07c\x02\x02\u0137\u0138\x07w\x02\x02\u0138\u0139\x07n\x02\x02" + - "\u0139\u013A\x07v\x02\x02\u013A\x18\x03\x02\x02\x02\u013B\u013C\x07d\x02" + - "\x02\u013C\u013D\x07t\x02\x02\u013D\u013E\x07g\x02\x02\u013E\u013F\x07" + - "c\x02\x02\u013F\u0140\x07m\x02\x02\u0140\x1A\x03\x02\x02\x02\u0141\u0142" + - "\x07e\x02\x02\u0142\u0143\x07q\x02\x02\u0143\u0144\x07p\x02\x02\u0144" + - "\u0145\x07v\x02\x02\u0145\u0146\x07k\x02\x02\u0146\u0147\x07p\x02\x02" + - "\u0147\u0148\x07w\x02\x02\u0148\u0149\x07g\x02\x02\u0149\x1C\x03\x02\x02" + - "\x02\u014A\u014B\x07f\x02\x02\u014B\u014C\x07q\x02\x02\u014C\x1E\x03\x02" + - "\x02\x02\u014D\u014E\x07y\x02\x02\u014E\u014F\x07j\x02\x02\u014F\u0150" + - "\x07k\x02\x02\u0150\u0151\x07n\x02\x02\u0151\u0152\x07g\x02\x02\u0152" + - " \x03\x02\x02\x02\u0153\u0154\x07k\x02\x02\u0154\u0155\x07h\x02\x02\u0155" + - '"\x03\x02\x02\x02\u0156\u0157\x07g\x02\x02\u0157\u0158\x07n\x02\x02\u0158' + - "\u0159\x07u\x02\x02\u0159\u015A\x07g\x02\x02\u015A$\x03\x02\x02\x02\u015B" + - "\u015C\x07h\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07t\x02\x02" + - "\u015E&\x03\x02\x02\x02\u015F\u0160\x07g\x02\x02\u0160\u0161\x07p\x02" + - "\x02\u0161\u0162\x07w\x02\x02\u0162\u0163\x07o\x02\x02\u0163(\x03\x02" + - "\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u0166\x07g\x02\x02\u0166\u0167" + - "\x07h\x02\x02\u0167*\x03\x02\x02\x02\u0168\u0169\x07t\x02\x02\u0169\u016A" + - "\x07g\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07w\x02\x02\u016C" + - "\u016D\x07t\x02\x02\u016D\u016E\x07p\x02\x02\u016E,\x03\x02\x02\x02\u016F" + - "\u0170\x07e\x02\x02\u0170\u0171\x07c\x02\x02\u0171\u0172\x07n\x02\x02" + - "\u0172\u0173\x07n\x02\x02\u0173.\x03\x02\x02\x02\u0174\u0175\x07/\x02" + - "\x02\u0175\u0176\x07@\x02\x02\u01760\x03\x02\x02\x02\u0177\u0178\x07e" + - "\x02\x02\u0178\u0179\x07n\x02\x02\u0179\u017A\x07c\x02\x02\u017A\u017B" + - "\x07u\x02\x02\u017B\u017C\x07u\x02\x02\u017C2\x03\x02\x02\x02\u017D\u017E" + - "\x07k\x02\x02\u017E\u017F\x07p\x02\x02\u017F\u0180\x07v\x02\x02\u0180" + - "\u0181\x07g\x02\x02\u0181\u0182\x07t\x02\x02\u0182\u0183\x07h\x02\x02" + - "\u0183\u0184\x07c\x02\x02\u0184\u0185\x07e\x02\x02\u0185\u0186\x07g\x02" + - "\x02\u01864\x03\x02\x02\x02\u0187\u0188\x07e\x02\x02\u0188\u0189\x07q" + - "\x02\x02\u0189\u018A\x07p\x02\x02\u018A\u018B\x07u\x02\x02\u018B\u018C" + - "\x07v\x02\x02\u018C\u018D\x07t\x02\x02\u018D\u018E\x07w\x02\x02\u018E" + - "\u018F\x07e\x02\x02\u018F\u0190\x07v\x02\x02\u0190\u0191\x07q\x02\x02" + - "\u0191\u0192\x07t\x02\x02\u01926\x03\x02\x02\x02\u0193\u0194\x07p\x02" + - "\x02\u0194\u0195\x07g\x02\x02\u0195\u0196\x07y\x02\x02\u01968\x03\x02" + - "\x02\x02\u0197\u0198\x07v\x02\x02\u0198\u0199\x07t\x02\x02\u0199\u019A" + - "\x07w\x02\x02\u019A\u019B\x07g\x02\x02\u019B:\x03\x02\x02\x02\u019C\u019D" + - "\x07h\x02\x02\u019D\u019E\x07c\x02\x02\u019E\u019F\x07n\x02\x02\u019F" + - "\u01A0\x07u\x02\x02\u01A0\u01A1\x07g\x02\x02\u01A1<\x03\x02\x02\x02\u01A2" + - "\u01A3\x07v\x02\x02\u01A3\u01A4\x07{\x02\x02\u01A4\u01A5\x07r\x02\x02" + - "\u01A5\u01A6\x07g\x02\x02\u01A6\u01A7\x07q\x02\x02\u01A7\u01A8\x07h\x02" + - "\x02\u01A8>\x03\x02\x02\x02\u01A9\u01AA\x07x\x02\x02\u01AA\u01AB\x07q" + - "\x02\x02\u01AB\u01AC\x07k\x02\x02\u01AC\u01AD\x07f\x02\x02\u01AD@\x03" + - "\x02\x02\x02\u01AE\u01AF\x07p\x02\x02\u01AF\u01B0\x07w\x02\x02\u01B0\u01B1" + - "\x07n\x02\x02\u01B1\u01B2\x07n\x02\x02\u01B2B\x03\x02\x02\x02\u01B3\u01B4" + - "\x07w\x02\x02\u01B4\u01B5\x07p\x02\x02\u01B5\u01B6\x07f\x02\x02\u01B6" + - "\u01B7\x07g\x02\x02\u01B7\u01B8\x07h\x02\x02\u01B8\u01B9\x07k\x02\x02" + - "\u01B9\u01BA\x07p\x02\x02\u01BA\u01BB\x07g\x02\x02\u01BB\u01BC\x07f\x02" + - "\x02\u01BCD\x03\x02\x02\x02\u01BD\u01BE\x07.\x02\x02\u01BEF\x03\x02\x02" + - "\x02\u01BF\u01C0\x07=\x02\x02\u01C0H\x03\x02\x02\x02\u01C1\u01C2\x07A" + - "\x02\x02\u01C2J\x03\x02\x02\x02\u01C3\u01C4\x07<\x02\x02\u01C4L\x03\x02" + - "\x02\x02\u01C5\u01C6\x07*\x02\x02\u01C6N\x03\x02\x02\x02\u01C7\u01C8\x07" + - "+\x02\x02\u01C8P\x03\x02\x02\x02\u01C9\u01CA\x07]\x02\x02\u01CAR\x03\x02" + - "\x02\x02\u01CB\u01CC\x07_\x02\x02\u01CCT\x03\x02\x02\x02\u01CD\u01CE\x06" + - "*\x02\x02\u01CE\u01CF\x07\x7F\x02\x02\u01CF\u01D0\x03\x02\x02\x02\u01D0" + - "\u01D1\b*\x04\x02\u01D1V\x03\x02\x02\x02\u01D2\u01D3\x07}\x02\x02\u01D3" + - "X\x03\x02\x02\x02\u01D4\u01D5\x07\x7F\x02\x02\u01D5Z\x03\x02\x02\x02\u01D6" + - "\u01D7\x07-\x02\x02\u01D7\\\x03\x02\x02\x02\u01D8\u01D9\x07-\x02\x02\u01D9" + - "\u01DA\x07-\x02\x02\u01DA^\x03\x02\x02\x02\u01DB\u01DC\x07/\x02\x02\u01DC" + - "`\x03\x02\x02\x02\u01DD\u01DE\x07/\x02\x02\u01DE\u01DF\x07/\x02\x02\u01DF" + - "b\x03\x02\x02\x02\u01E0\u01E1\x07,\x02\x02\u01E1d\x03\x02\x02\x02\u01E2" + - "\u01E3\x071\x02\x02\u01E3f\x03\x02\x02\x02\u01E4\u01E5\x07'\x02\x02\u01E5" + - "h\x03\x02\x02\x02\u01E6\u01E7\x07,\x02\x02\u01E7\u01E8\x07,\x02\x02\u01E8" + - "j\x03\x02\x02\x02\u01E9\u01EA\x07(\x02\x02\u01EA\u01EB\x07(\x02\x02\u01EB" + - "l\x03\x02\x02\x02\u01EC\u01ED\x07~\x02\x02\u01ED\u01EE\x07~\x02\x02\u01EE" + - "n\x03\x02\x02\x02\u01EF\u01F0\x07#\x02\x02\u01F0p\x03\x02\x02\x02\u01F1" + - "\u01F2\x07?\x02\x02\u01F2r\x03\x02\x02\x02\u01F3\u01F4\x07-\x02\x02\u01F4" + - "\u01F5\x07?\x02\x02\u01F5t\x03\x02\x02\x02\u01F6\u01F7\x07/\x02\x02\u01F7" + - "\u01F8\x07?\x02\x02\u01F8v\x03\x02\x02\x02\u01F9\u01FA\x07,\x02\x02\u01FA" + - "\u01FB\x07?\x02\x02\u01FBx\x03\x02\x02\x02\u01FC\u01FD\x071\x02\x02\u01FD" + - "\u01FE\x07?\x02\x02\u01FEz\x03\x02\x02\x02\u01FF\u0200\x07'\x02\x02\u0200" + - "\u0201\x07?\x02\x02"; + "y\ty\x04z\tz\x03\x02\x03\x02\x03\x02\x03\x02\x07\x02\xFC\n\x02\f\x02\x0E" + + "\x02\xFF\v\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03" + + "\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x04\x03\x04" + + "\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05" + + "\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05\x03\x05" + + "\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03\x07" + + "\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\t\x03\t\x03\t\x03\t\x03\n\x03\n" + + "\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03\v\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03" + + "\x10\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x16\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03" + + "\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D\x03" + + "\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1F\x03" + + "\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 " + + '\x03!\x03!\x03!\x03!\x03!\x03"\x03"\x03"\x03"\x03"\x03"\x03"\x03' + + '"\x03"\x03"\x03#\x03#\x03$\x03$\x03%\x03%\x03&\x03&\x03\'\x03\'\x03' + + "(\x03(\x03)\x03)\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x03,\x03,\x03-\x03" + + "-\x03.\x03.\x03/\x03/\x03/\x030\x030\x031\x031\x031\x032\x032\x033\x03" + + "3\x034\x034\x035\x035\x035\x036\x036\x036\x037\x037\x037\x038\x038\x03" + + "9\x039\x03:\x03:\x03:\x03;\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x03" + + ">\x03>\x03>\x03?\x03?\x03?\x03@\x03@\x03@\x03A\x03A\x03B\x03B\x03B\x03" + + "C\x03C\x03D\x03D\x03D\x03E\x03E\x03F\x03F\x03G\x03G\x03H\x03H\x03I\x03" + + "I\x03I\x03J\x03J\x03J\x03K\x03K\x03K\x03K\x03L\x03L\x03M\x03M\x03M\x07" + + "M\u0237\nM\fM\x0EM\u023A\vM\x03N\x03N\x03N\x03N\x05N\u0240\nN\x03O\x03" + + "O\x05O\u0244\nO\x03O\x03O\x03P\x03P\x05P\u024A\nP\x03P\x03P\x03Q\x03Q" + + "\x03R\x06R\u0251\nR\rR\x0ER\u0252\x03R\x03R\x03S\x03S\x03S\x03S\x03T\x03" + + "T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03" + + "V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03Y\x03Y\x03" + + "Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03Z\x03[\x03[\x03\\\x03\\\x03]\x03" + + "]\x03^\x03^\x03_\x06_\u028A\n_\r_\x0E_\u028B\x03`\x03`\x03`\x06`\u0291" + + "\n`\r`\x0E`\u0292\x03a\x03a\x03a\x06a\u0298\na\ra\x0Ea\u0299\x03b\x03" + + "b\x03b\x06b\u029F\nb\rb\x0Eb\u02A0\x03c\x03c\x03d\x03d\x03e\x03e\x03f" + + "\x03f\x03g\x03g\x05g\u02AD\ng\x03g\x03g\x03g\x05g\u02B2\ng\x03h\x05h\u02B5" + + "\nh\x03h\x03h\x03h\x03h\x03h\x05h\u02BC\nh\x03i\x03i\x05i\u02C0\ni\x03" + + "i\x03i\x03j\x06j\u02C5\nj\rj\x0Ej\u02C6\x03k\x03k\x03l\x06l\u02CC\nl\r" + + "l\x0El\u02CD\x03m\x03m\x05m\u02D2\nm\x03n\x03n\x03n\x05n\u02D7\nn\x03" + + "o\x03o\x03o\x03p\x03p\x03p\x05p\u02DF\np\x03p\x05p\u02E2\np\x03q\x03q" + + "\x03q\x03q\x06q\u02E8\nq\rq\x0Eq\u02E9\x03r\x06r\u02ED\nr\rr\x0Er\u02EE" + + "\x03s\x03s\x05s\u02F3\ns\x03t\x06t\u02F6\nt\rt\x0Et\u02F7\x03u\x03u\x05" + + "u\u02FC\nu\x03v\x06v\u02FF\nv\rv\x0Ev\u0300\x03w\x03w\x05w\u0305\nw\x03" + + "x\x06x\u0308\nx\rx\x0Ex\u0309\x03y\x03y\x05y\u030E\ny\x03z\x07z\u0311" + + "\nz\fz\x0Ez\u0314\vz\x03\xFD\x02\x02{\x05\x02\x04\x07\x02\x05\t\x02\x06" + + "\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02\r\x19" + + "\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%\x02\x14" + + "'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B5\x02" + + '\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02"C\x02#E\x02$G\x02%I' + + "\x02&K\x02'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_\x02" + + "1a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02E\x89\x02" + + "F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02M\x99\x02" + + "N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02U\xA9\x02" + + "V\xAB\x02W\xAD\x02\x02\xAF\x02X\xB1\x02Y\xB3\x02\x02\xB5\x02Z\xB7\x02" + + "[\xB9\x02\x02\xBB\x02\x02\xBD\x02\x02\xBF\x02\x02\xC1\x02\x02\xC3\x02" + + "\x02\xC5\x02\x02\xC7\x02\x02\xC9\x02\x02\xCB\x02\x02\xCD\x02\x02\xCF\x02" + + "\x02\xD1\x02\x02\xD3\x02\x02\xD5\x02\x02\xD7\x02\x02\xD9\x02\x02\xDB\x02" + + "\x02\xDD\x02\x02\xDF\x02\x02\xE1\x02\x02\xE3\x02\x02\xE5\x02\x02\xE7\x02" + + "\x02\xE9\x02\x02\xEB\x02\x02\xED\x02\x02\xEF\x02\x02\xF1\x02\x02\xF3\x02" + + '\x02\xF5\x02\x02\x05\x02\x03\x04\x14\x06\x02\v\v\r\x0E""\xA2\xA2\x05' + + "\x02\f\f\x0F\x0F\u202A\u202B\x05\x02C\\aac|\x03\x022;\x04\x02DDdd\x04" + + "\x02QQqq\x04\x02ZZzz\x03\x023;\x03\x0223\x03\x0229\x05\x022;CHch\x04\x02" + + "GGgg\x04\x02--//\x06\x02\f\f\x0F\x0F))^^\x0E\x02$$))AA^^cdhhppttvvxx}" + + "}\x7F\x7F\b\x02\f\f\x0F\x0F))^^}}\x7F\x7F\b\x02\f\f\x0F\x0F$$^^}}\x7F" + + "\x7F\x06\x02\f\f\x0F\x0F$$^^\x02\u0316\x02\x05\x03\x02\x02\x02\x02\x07" + + "\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03" + + "\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03" + + "\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03" + + "\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03" + + "\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02" + + "\x02\x02'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02" + + "-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02" + + "\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02" + + "\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03" + + "\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02" + + "\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02" + + "O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02" + + "\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02" + + "\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03" + + "\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02" + + "\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02" + + "q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02w\x03\x02" + + "\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02\x02\x02" + + "\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02\x02" + + "\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02\x02" + + "\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02\x02\x02" + + "\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02\x02\x02" + + "\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02\x02\x02" + + "\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02\x02\xA1\x03\x02\x02\x02" + + "\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02\x02\xA7\x03\x02\x02\x02" + + "\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02\x03\xAD\x03\x02\x02\x02" + + "\x03\xAF\x03\x02\x02\x02\x03\xB1\x03\x02\x02\x02\x04\xB3\x03\x02\x02\x02" + + "\x04\xB5\x03\x02\x02\x02\x04\xB7\x03\x02\x02\x02\x05\xF7\x03\x02\x02\x02" + + "\x07\u0105\x03\x02\x02\x02\t\u010C\x03\x02\x02\x02\v\u0118\x03\x02\x02" + + "\x02\r\u0123\x03\x02\x02\x02\x0F\u0129\x03\x02\x02\x02\x11\u012D\x03\x02" + + "\x02\x02\x13\u0130\x03\x02\x02\x02\x15\u0134\x03\x02\x02\x02\x17\u013B" + + "\x03\x02\x02\x02\x19\u0140\x03\x02\x02\x02\x1B\u0148\x03\x02\x02\x02\x1D" + + "\u014E\x03\x02\x02\x02\x1F\u0157\x03\x02\x02\x02!\u015A\x03\x02\x02\x02" + + "#\u0160\x03\x02\x02\x02%\u0163\x03\x02\x02\x02'\u0168\x03\x02\x02\x02" + + ")\u016C\x03\x02\x02\x02+\u0171\x03\x02\x02\x02-\u0175\x03\x02\x02\x02" + + "/\u017C\x03\x02\x02\x021\u0181\x03\x02\x02\x023\u0184\x03\x02\x02\x02" + + "5\u018A\x03\x02\x02\x027\u0194\x03\x02\x02\x029\u01A0\x03\x02\x02\x02" + + ";\u01A4\x03\x02\x02\x02=\u01A9\x03\x02\x02\x02?\u01AF\x03\x02\x02\x02" + + "A\u01B6\x03\x02\x02\x02C\u01BB\x03\x02\x02\x02E\u01C0\x03\x02\x02\x02" + + "G\u01CA\x03\x02\x02\x02I\u01CC\x03\x02\x02\x02K\u01CE\x03\x02\x02\x02" + + "M\u01D0\x03\x02\x02\x02O\u01D2\x03\x02\x02\x02Q\u01D4\x03\x02\x02\x02" + + "S\u01D6\x03\x02\x02\x02U\u01D8\x03\x02\x02\x02W\u01DA\x03\x02\x02\x02" + + "Y\u01DF\x03\x02\x02\x02[\u01E1\x03\x02\x02\x02]\u01E3\x03\x02\x02\x02" + + "_\u01E5\x03\x02\x02\x02a\u01E8\x03\x02\x02\x02c\u01EA\x03\x02\x02\x02" + + "e\u01ED\x03\x02\x02\x02g\u01EF\x03\x02\x02\x02i\u01F1\x03\x02\x02\x02" + + "k\u01F3\x03\x02\x02\x02m\u01F6\x03\x02\x02\x02o\u01F9\x03\x02\x02\x02" + + "q\u01FC\x03\x02\x02\x02s\u01FE\x03\x02\x02\x02u\u0200\x03\x02\x02\x02" + + "w\u0203\x03\x02\x02\x02y\u0206\x03\x02\x02\x02{\u0209\x03\x02\x02\x02" + + "}\u020C\x03\x02\x02\x02\x7F\u020F\x03\x02\x02\x02\x81\u0212\x03\x02\x02" + + "\x02\x83\u0215\x03\x02\x02\x02\x85\u0217\x03\x02\x02\x02\x87\u021A\x03" + + "\x02\x02\x02\x89\u021C\x03\x02\x02\x02\x8B\u021F\x03\x02\x02\x02\x8D\u0221" + + "\x03\x02\x02\x02\x8F\u0223\x03\x02\x02\x02\x91\u0225\x03\x02\x02\x02\x93" + + "\u0227\x03\x02\x02\x02\x95\u022A\x03\x02\x02\x02\x97\u022D\x03\x02\x02" + + "\x02\x99\u0231\x03\x02\x02\x02\x9B\u0233\x03\x02\x02\x02\x9D\u023F\x03" + + "\x02\x02\x02\x9F\u0241\x03\x02\x02\x02\xA1\u0247\x03\x02\x02\x02\xA3\u024D" + + "\x03\x02\x02\x02\xA5\u0250\x03\x02\x02\x02\xA7\u0256\x03\x02\x02\x02\xA9" + + "\u025A\x03\x02\x02\x02\xAB\u0261\x03\x02\x02\x02\xAD\u0268\x03\x02\x02" + + "\x02\xAF\u026E\x03\x02\x02\x02\xB1\u0273\x03\x02\x02\x02\xB3\u0275\x03" + + "\x02\x02\x02\xB5\u027B\x03\x02\x02\x02\xB7\u0280\x03\x02\x02\x02\xB9\u0282" + + "\x03\x02\x02\x02\xBB\u0284\x03\x02\x02\x02\xBD\u0286\x03\x02\x02\x02\xBF" + + "\u0289\x03\x02\x02\x02\xC1\u028D\x03\x02\x02\x02\xC3\u0294\x03\x02\x02" + + "\x02\xC5\u029B\x03\x02\x02\x02\xC7\u02A2\x03\x02\x02\x02\xC9\u02A4\x03" + + "\x02\x02\x02\xCB\u02A6\x03\x02\x02\x02\xCD\u02A8\x03\x02\x02\x02\xCF\u02B1" + + "\x03\x02\x02\x02\xD1\u02BB\x03\x02\x02\x02\xD3\u02BD\x03\x02\x02\x02\xD5" + + "\u02C4\x03\x02\x02\x02\xD7\u02C8\x03\x02\x02\x02\xD9\u02CB\x03\x02\x02" + + "\x02\xDB\u02D1\x03\x02\x02\x02\xDD\u02D6\x03\x02\x02\x02\xDF\u02D8\x03" + + "\x02\x02\x02\xE1\u02DB\x03\x02\x02\x02\xE3\u02E3\x03\x02\x02\x02\xE5\u02EC" + + "\x03\x02\x02\x02\xE7\u02F2\x03\x02\x02\x02\xE9\u02F5\x03\x02\x02\x02\xEB" + + "\u02FB\x03\x02\x02\x02\xED\u02FE\x03\x02\x02\x02\xEF\u0304\x03\x02\x02" + + "\x02\xF1\u0307\x03\x02\x02\x02\xF3\u030D\x03\x02\x02\x02\xF5\u0312\x03" + + "\x02\x02\x02\xF7\xF8\x071\x02\x02\xF8\xF9\x07,\x02\x02\xF9\xFD\x03\x02" + + "\x02\x02\xFA\xFC\v\x02\x02\x02\xFB\xFA\x03\x02\x02\x02\xFC\xFF\x03\x02" + + "\x02\x02\xFD\xFE\x03\x02\x02\x02\xFD\xFB\x03\x02\x02\x02\xFE\u0100\x03" + + "\x02\x02\x02\xFF\xFD\x03\x02\x02\x02\u0100\u0101\x07,\x02\x02\u0101\u0102" + + "\x071\x02\x02\u0102\u0103\x03\x02\x02\x02\u0103\u0104\b\x02\x02\x02\u0104" + + "\x06\x03\x02\x02\x02\u0105\u0106\x071\x02\x02\u0106\u0107\x071\x02\x02" + + "\u0107\u0108\x03\x02\x02\x02\u0108\u0109\x05\xF5z\x02\u0109\u010A\x03" + + "\x02\x02\x02\u010A\u010B\b\x03\x02\x02\u010B\b\x03\x02\x02\x02\u010C\u010D" + + "\x07%\x02\x02\u010D\u010E\x07r\x02\x02\u010E\u010F\x07t\x02\x02\u010F" + + "\u0110\x07c\x02\x02\u0110\u0111\x07i\x02\x02\u0111\u0112\x07o\x02\x02" + + "\u0112\u0113\x07c\x02\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0115\x05" + + "\xF5z\x02\u0115\u0116\x03\x02\x02\x02\u0116\u0117\b\x04\x03\x02\u0117" + + "\n\x03\x02\x02\x02\u0118\u0119\x07k\x02\x02\u0119\u011A\x07p\x02\x02\u011A" + + "\u011B\x07u\x02\x02\u011B\u011C\x07v\x02\x02\u011C\u011D\x07c\x02\x02" + + "\u011D\u011E\x07p\x02\x02\u011E\u011F\x07e\x02\x02\u011F\u0120\x07g\x02" + + "\x02\u0120\u0121\x07q\x02\x02\u0121\u0122\x07h\x02\x02\u0122\f\x03\x02" + + "\x02\x02\u0123\u0124\x07e\x02\x02\u0124\u0125\x07q\x02\x02\u0125\u0126" + + "\x07p\x02\x02\u0126\u0127\x07u\x02\x02\u0127\u0128\x07v\x02\x02\u0128" + + "\x0E\x03\x02\x02\x02\u0129\u012A\x07x\x02\x02\u012A\u012B\x07c\x02\x02" + + "\u012B\u012C\x07t\x02\x02\u012C\x10\x03\x02\x02\x02\u012D\u012E\x07c\x02" + + "\x02\u012E\u012F\x07u\x02\x02\u012F\x12\x03\x02\x02\x02\u0130\u0131\x07" + + "0\x02\x02\u0131\u0132\x070\x02\x02\u0132\u0133\x070\x02\x02\u0133\x14" + + "\x03\x02\x02\x02\u0134\u0135\x07u\x02\x02\u0135\u0136\x07y\x02\x02\u0136" + + "\u0137\x07k\x02\x02\u0137\u0138\x07v\x02\x02\u0138\u0139\x07e\x02\x02" + + "\u0139\u013A\x07j\x02\x02\u013A\x16\x03\x02\x02\x02\u013B\u013C\x07e\x02" + + "\x02\u013C\u013D\x07c\x02\x02\u013D\u013E\x07u\x02\x02\u013E\u013F\x07" + + "g\x02\x02\u013F\x18\x03\x02\x02\x02\u0140\u0141\x07f\x02\x02\u0141\u0142" + + "\x07g\x02\x02\u0142\u0143\x07h\x02\x02\u0143\u0144\x07c\x02\x02\u0144" + + "\u0145\x07w\x02\x02\u0145\u0146\x07n\x02\x02\u0146\u0147\x07v\x02\x02" + + "\u0147\x1A\x03\x02\x02\x02\u0148\u0149\x07d\x02\x02\u0149\u014A\x07t\x02" + + "\x02\u014A\u014B\x07g\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07" + + "m\x02\x02\u014D\x1C\x03\x02\x02\x02\u014E\u014F\x07e\x02\x02\u014F\u0150" + + "\x07q\x02\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07v\x02\x02\u0152" + + "\u0153\x07k\x02\x02\u0153\u0154\x07p\x02\x02\u0154\u0155\x07w\x02\x02" + + "\u0155\u0156\x07g\x02\x02\u0156\x1E\x03\x02\x02\x02\u0157\u0158\x07f\x02" + + "\x02\u0158\u0159\x07q\x02\x02\u0159 \x03\x02\x02\x02\u015A\u015B\x07y" + + "\x02\x02\u015B\u015C\x07j\x02\x02\u015C\u015D\x07k\x02\x02\u015D\u015E" + + '\x07n\x02\x02\u015E\u015F\x07g\x02\x02\u015F"\x03\x02\x02\x02\u0160\u0161' + + "\x07k\x02\x02\u0161\u0162\x07h\x02\x02\u0162$\x03\x02\x02\x02\u0163\u0164" + + "\x07g\x02\x02\u0164\u0165\x07n\x02\x02\u0165\u0166\x07u\x02\x02\u0166" + + "\u0167\x07g\x02\x02\u0167&\x03\x02\x02\x02\u0168\u0169\x07h\x02\x02\u0169" + + "\u016A\x07q\x02\x02\u016A\u016B\x07t\x02\x02\u016B(\x03\x02\x02\x02\u016C" + + "\u016D\x07g\x02\x02\u016D\u016E\x07p\x02\x02\u016E\u016F\x07w\x02\x02" + + "\u016F\u0170\x07o\x02\x02\u0170*\x03\x02\x02\x02\u0171\u0172\x07f\x02" + + "\x02\u0172\u0173\x07g\x02\x02\u0173\u0174\x07h\x02\x02\u0174,\x03\x02" + + "\x02\x02\u0175\u0176\x07t\x02\x02\u0176\u0177\x07g\x02\x02\u0177\u0178" + + "\x07v\x02\x02\u0178\u0179\x07w\x02\x02\u0179\u017A\x07t\x02\x02\u017A" + + "\u017B\x07p\x02\x02\u017B.\x03\x02\x02\x02\u017C\u017D\x07e\x02\x02\u017D" + + "\u017E\x07c\x02\x02\u017E\u017F\x07n\x02\x02\u017F\u0180\x07n\x02\x02" + + "\u01800\x03\x02\x02\x02\u0181\u0182\x07/\x02\x02\u0182\u0183\x07@\x02" + + "\x02\u01832\x03\x02\x02\x02\u0184\u0185\x07e\x02\x02\u0185\u0186\x07n" + + "\x02\x02\u0186\u0187\x07c\x02\x02\u0187\u0188\x07u\x02\x02\u0188\u0189" + + "\x07u\x02\x02\u01894\x03\x02\x02\x02\u018A\u018B\x07k\x02\x02\u018B\u018C" + + "\x07p\x02\x02\u018C\u018D\x07v\x02\x02\u018D\u018E\x07g\x02\x02\u018E" + + "\u018F\x07t\x02\x02\u018F\u0190\x07h\x02\x02\u0190\u0191\x07c\x02\x02" + + "\u0191\u0192\x07e\x02\x02\u0192\u0193\x07g\x02\x02\u01936\x03\x02\x02" + + "\x02\u0194\u0195\x07e\x02\x02\u0195\u0196\x07q\x02\x02\u0196\u0197\x07" + + "p\x02\x02\u0197\u0198\x07u\x02\x02\u0198\u0199\x07v\x02\x02\u0199\u019A" + + "\x07t\x02\x02\u019A\u019B\x07w\x02\x02\u019B\u019C\x07e\x02\x02\u019C" + + "\u019D\x07v\x02\x02\u019D\u019E\x07q\x02\x02\u019E\u019F\x07t\x02\x02" + + "\u019F8\x03\x02\x02\x02\u01A0\u01A1\x07p\x02\x02\u01A1\u01A2\x07g\x02" + + "\x02\u01A2\u01A3\x07y\x02\x02\u01A3:\x03\x02\x02\x02\u01A4\u01A5\x07v" + + "\x02\x02\u01A5\u01A6\x07t\x02\x02\u01A6\u01A7\x07w\x02\x02\u01A7\u01A8" + + "\x07g\x02\x02\u01A8<\x03\x02\x02\x02\u01A9\u01AA\x07h\x02\x02\u01AA\u01AB" + + "\x07c\x02\x02\u01AB\u01AC\x07n\x02\x02\u01AC\u01AD\x07u\x02\x02\u01AD" + + "\u01AE\x07g\x02\x02\u01AE>\x03\x02\x02\x02\u01AF\u01B0\x07v\x02\x02\u01B0" + + "\u01B1\x07{\x02\x02\u01B1\u01B2\x07r\x02\x02\u01B2\u01B3\x07g\x02\x02" + + "\u01B3\u01B4\x07q\x02\x02\u01B4\u01B5\x07h\x02\x02\u01B5@\x03\x02\x02" + + "\x02\u01B6\u01B7\x07x\x02\x02\u01B7\u01B8\x07q\x02\x02\u01B8\u01B9\x07" + + "k\x02\x02\u01B9\u01BA\x07f\x02\x02\u01BAB\x03\x02\x02\x02\u01BB\u01BC" + + "\x07p\x02\x02\u01BC\u01BD\x07w\x02\x02\u01BD\u01BE\x07n\x02\x02\u01BE" + + "\u01BF\x07n\x02\x02\u01BFD\x03\x02\x02\x02\u01C0\u01C1\x07w\x02\x02\u01C1" + + "\u01C2\x07p\x02\x02\u01C2\u01C3\x07f\x02\x02\u01C3\u01C4\x07g\x02\x02" + + "\u01C4\u01C5\x07h\x02\x02\u01C5\u01C6\x07k\x02\x02\u01C6\u01C7\x07p\x02" + + "\x02\u01C7\u01C8\x07g\x02\x02\u01C8\u01C9\x07f\x02\x02\u01C9F\x03\x02" + + "\x02\x02\u01CA\u01CB\x07.\x02\x02\u01CBH\x03\x02\x02\x02\u01CC\u01CD\x07" + + "=\x02\x02\u01CDJ\x03\x02\x02\x02\u01CE\u01CF\x07A\x02\x02\u01CFL\x03\x02" + + "\x02\x02\u01D0\u01D1\x07<\x02\x02\u01D1N\x03\x02\x02\x02\u01D2\u01D3\x07" + + "*\x02\x02\u01D3P\x03\x02\x02\x02\u01D4\u01D5\x07+\x02\x02\u01D5R\x03\x02" + + "\x02\x02\u01D6\u01D7\x07]\x02\x02\u01D7T\x03\x02\x02\x02\u01D8\u01D9\x07" + + "_\x02\x02\u01D9V\x03\x02\x02\x02\u01DA\u01DB\x06+\x02\x02\u01DB\u01DC" + + "\x07\x7F\x02\x02\u01DC\u01DD\x03\x02\x02\x02\u01DD\u01DE\b+\x04\x02\u01DE" + + "X\x03\x02\x02\x02\u01DF\u01E0\x07}\x02\x02\u01E0Z\x03\x02\x02\x02\u01E1" + + "\u01E2\x07\x7F\x02\x02\u01E2\\\x03\x02\x02\x02\u01E3\u01E4\x07-\x02\x02" + + "\u01E4^\x03\x02\x02\x02\u01E5\u01E6\x07-\x02\x02\u01E6\u01E7\x07-\x02" + + "\x02\u01E7`\x03\x02\x02\x02\u01E8\u01E9\x07/\x02\x02\u01E9b\x03\x02\x02" + + "\x02\u01EA\u01EB\x07/\x02\x02\u01EB\u01EC\x07/\x02\x02\u01ECd\x03\x02" + + "\x02\x02\u01ED\u01EE\x07,\x02\x02\u01EEf\x03\x02\x02\x02\u01EF\u01F0\x07" + + "1\x02\x02\u01F0h\x03\x02\x02\x02\u01F1\u01F2\x07'\x02\x02\u01F2j\x03" + + "\x02\x02\x02\u01F3\u01F4\x07,\x02\x02\u01F4\u01F5\x07,\x02\x02\u01F5l" + + "\x03\x02\x02\x02\u01F6\u01F7\x07(\x02\x02\u01F7\u01F8\x07(\x02\x02\u01F8" + + "n\x03\x02\x02\x02\u01F9\u01FA\x07~\x02\x02\u01FA\u01FB\x07~\x02\x02\u01FB" + + "p\x03\x02\x02\x02\u01FC"; private static readonly _serializedATNSegment1: string = - "\u0201|\x03\x02\x02\x02\u0202\u0203\x07?\x02\x02\u0203\u0204\x07?\x02" + - "\x02\u0204~\x03\x02\x02\x02\u0205\u0206\x07#\x02\x02\u0206\u0207\x07?" + - "\x02\x02\u0207\x80\x03\x02\x02\x02\u0208\u0209\x07>\x02\x02\u0209\x82" + - "\x03\x02\x02\x02\u020A\u020B\x07>\x02\x02\u020B\u020C\x07?\x02\x02\u020C" + - "\x84\x03\x02\x02\x02\u020D\u020E\x07@\x02\x02\u020E\x86\x03\x02\x02\x02" + - "\u020F\u0210\x07@\x02\x02\u0210\u0211\x07?\x02\x02\u0211\x88\x03\x02\x02" + - "\x02\u0212\u0213\x07(\x02\x02\u0213\x8A\x03\x02\x02\x02\u0214\u0215\x07" + - "~\x02\x02\u0215\x8C\x03\x02\x02\x02\u0216\u0217\x07`\x02\x02\u0217\x8E" + - "\x03\x02\x02\x02\u0218\u0219\x07\x80\x02\x02\u0219\x90\x03\x02\x02\x02" + - "\u021A\u021B\x07>\x02\x02\u021B\u021C\x07>\x02\x02\u021C\x92\x03\x02\x02" + - "\x02\u021D\u021E\x07@\x02\x02\u021E\u021F\x07@\x02\x02\u021F\x94\x03\x02" + - "\x02\x02\u0220\u0221\x07@\x02\x02\u0221\u0222\x07@\x02\x02\u0222\u0223" + - "\x07@\x02\x02\u0223\x96\x03\x02\x02\x02\u0224\u0225\x070\x02\x02\u0225" + - "\x98\x03\x02\x02\x02\u0226\u022B\x05\xB7[\x02\u0227\u022A\x05\xB7[\x02" + - "\u0228\u022A\x05\xBB]\x02\u0229\u0227\x03\x02\x02\x02\u0229\u0228\x03" + - "\x02\x02\x02\u022A\u022D\x03\x02\x02\x02\u022B\u0229\x03\x02\x02\x02\u022B" + - "\u022C\x03\x02\x02\x02\u022C\x9A\x03\x02\x02\x02\u022D\u022B\x03\x02\x02" + - "\x02\u022E\u0233\x05\xBD^\x02\u022F\u0233\x05\xC1`\x02\u0230\u0233\x05" + - "\xC3a\x02\u0231\u0233\x05\xBF_\x02\u0232\u022E\x03\x02\x02\x02\u0232\u022F" + - "\x03\x02\x02\x02\u0232\u0230\x03\x02\x02\x02\u0232\u0231\x03\x02\x02\x02" + - "\u0233\x9C\x03\x02\x02\x02\u0234\u0236\x07)\x02\x02\u0235\u0237\x05\xEB" + - "u\x02\u0236\u0235\x03\x02\x02\x02\u0236\u0237\x03\x02\x02\x02\u0237\u0238" + - "\x03\x02\x02\x02\u0238\u0239\x07)\x02\x02\u0239\x9E\x03\x02\x02\x02\u023A" + - "\u023C\x07$\x02\x02\u023B\u023D\x05\xEFw\x02\u023C\u023B\x03\x02\x02\x02" + - "\u023C\u023D\x03\x02\x02\x02\u023D\u023E\x03\x02\x02\x02\u023E\u023F\x07" + - "$\x02\x02\u023F\xA0\x03\x02\x02\x02\u0240\u0241\x05\xCDf\x02\u0241\xA2" + - "\x03\x02\x02\x02\u0242\u0244\t\x02\x02\x02\u0243\u0242\x03\x02\x02\x02" + - "\u0244\u0245\x03\x02\x02\x02\u0245\u0243\x03\x02\x02\x02\u0245\u0246\x03" + - "\x02\x02\x02\u0246\u0247\x03\x02\x02\x02\u0247\u0248\bQ\x05\x02\u0248" + - "\xA4\x03\x02\x02\x02\u0249\u024A\t\x03\x02\x02\u024A\u024B\x03\x02\x02" + - "\x02\u024B\u024C\bR\x05\x02\u024C\xA6\x03\x02\x02\x02\u024D\u024E\x07" + - "h\x02\x02\u024E\u024F\x07)\x02\x02\u024F\u0250\x03\x02\x02\x02\u0250\u0251" + - "\bS\x06\x02\u0251\u0252\x03\x02\x02\x02\u0252\u0253\bS\x07\x02\u0253\xA8" + - "\x03\x02\x02\x02\u0254\u0255\x07h\x02\x02\u0255\u0256\x07$\x02\x02\u0256" + - "\u0257\x03\x02\x02\x02\u0257\u0258\bT\b\x02\u0258\u0259\x03\x02\x02\x02" + - "\u0259\u025A\bT\t\x02\u025A\xAA\x03\x02\x02\x02\u025B\u025C\x06U\x03\x02" + - "\u025C\u025D\x07}\x02\x02\u025D\u025E\x03\x02\x02\x02\u025E\u025F\bU\n" + - "\x02\u025F\u0260\bU\v\x02\u0260\xAC\x03\x02\x02\x02\u0261\u0262\x07)\x02" + - "\x02\u0262\u0263\bV\f\x02\u0263\u0264\x03\x02\x02\x02\u0264\u0265\bV\x04" + - "\x02\u0265\xAE\x03\x02\x02\x02\u0266\u0267\x05\xE3q\x02\u0267\xB0\x03" + - "\x02\x02\x02\u0268\u0269\x06X\x04\x02\u0269\u026A\x07}\x02\x02\u026A\u026B" + - "\x03\x02\x02\x02\u026B\u026C\bX\n\x02\u026C\u026D\bX\v\x02\u026D\xB2\x03" + - "\x02\x02\x02\u026E\u026F\x07$\x02\x02\u026F\u0270\bY\r\x02\u0270\u0271" + - "\x03\x02\x02\x02\u0271\u0272\bY\x04\x02\u0272\xB4\x03\x02\x02\x02\u0273" + - "\u0274\x05\xE7s\x02\u0274\xB6\x03\x02\x02\x02\u0275\u0276\x05\xB9\\\x02" + - "\u0276\xB8\x03\x02\x02\x02\u0277\u0278\t\x04\x02\x02\u0278\xBA\x03\x02" + - "\x02\x02\u0279\u027A\t\x05\x02\x02\u027A\xBC\x03\x02\x02\x02\u027B\u027D" + - "\x05\xBB]\x02\u027C\u027B\x03\x02\x02\x02\u027D\u027E\x03\x02\x02\x02" + - "\u027E\u027C\x03\x02\x02\x02\u027E\u027F\x03\x02\x02\x02\u027F\xBE\x03" + - "\x02\x02\x02\u0280\u0281\x072\x02\x02\u0281\u0283\t\x06\x02\x02\u0282" + - "\u0284\x05\xC7c\x02\u0283\u0282\x03\x02\x02\x02\u0284\u0285\x03\x02\x02" + - "\x02\u0285\u0283\x03\x02\x02\x02\u0285\u0286\x03\x02\x02\x02\u0286\xC0" + - "\x03\x02\x02\x02\u0287\u0288\x072\x02\x02\u0288\u028A\t\x07\x02\x02\u0289" + - "\u028B\x05\xC9d\x02\u028A\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02" + - "\x02\u028C\u028A\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02\u028D\xC2" + - "\x03\x02\x02\x02\u028E\u028F\x072\x02\x02\u028F\u0291\t\b\x02\x02\u0290" + - "\u0292\x05\xCBe\x02\u0291\u0290\x03\x02\x02\x02\u0292\u0293\x03\x02\x02" + - "\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02\x02\x02\u0294\xC4" + - "\x03\x02\x02\x02\u0295\u0296\t\t\x02\x02\u0296\xC6\x03\x02\x02\x02\u0297" + - "\u0298\t\n\x02\x02\u0298\xC8\x03\x02\x02\x02\u0299\u029A\t\v\x02\x02\u029A" + - "\xCA\x03\x02\x02\x02\u029B\u029C\t\f\x02\x02\u029C\xCC\x03\x02\x02\x02" + - "\u029D\u029F\x05\xCFg\x02\u029E\u02A0\x05\xD1h\x02\u029F\u029E\x03\x02" + - "\x02\x02\u029F\u02A0\x03\x02\x02\x02\u02A0\u02A5\x03\x02\x02\x02\u02A1" + - "\u02A2\x05\xD3i\x02\u02A2\u02A3\x05\xD1h\x02\u02A3\u02A5\x03\x02\x02\x02" + - "\u02A4\u029D\x03\x02\x02\x02\u02A4\u02A1\x03\x02\x02\x02\u02A5\xCE\x03" + - "\x02\x02\x02\u02A6\u02A8\x05\xD3i\x02\u02A7\u02A6\x03\x02\x02\x02\u02A7" + - "\u02A8\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02\u02A9\u02AA\x070\x02" + - "\x02\u02AA\u02AF\x05\xD3i\x02\u02AB\u02AC\x05\xD3i\x02\u02AC\u02AD\x07" + - "0\x02\x02\u02AD\u02AF\x03\x02\x02\x02\u02AE\u02A7\x03\x02\x02\x02\u02AE" + - "\u02AB\x03\x02\x02\x02\u02AF\xD0\x03\x02\x02\x02\u02B0\u02B2\t\r\x02\x02" + - "\u02B1\u02B3\x05\xD5j\x02\u02B2\u02B1\x03\x02\x02\x02\u02B2\u02B3\x03" + - "\x02\x02\x02\u02B3\u02B4\x03\x02\x02\x02\u02B4\u02B5\x05\xD3i\x02\u02B5" + - "\xD2\x03\x02\x02\x02\u02B6\u02B8\x05\xBB]\x02\u02B7\u02B6\x03\x02\x02" + - "\x02\u02B8\u02B9\x03\x02\x02\x02\u02B9\u02B7\x03\x02\x02\x02\u02B9\u02BA" + - "\x03\x02\x02\x02\u02BA\xD4\x03\x02\x02\x02\u02BB\u02BC\t\x0E\x02\x02\u02BC" + - "\xD6\x03\x02\x02\x02\u02BD\u02BF\x05\xD9l\x02\u02BE\u02BD\x03\x02\x02" + - "\x02\u02BF\u02C0\x03\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" + - "\x03\x02\x02\x02\u02C1\xD8\x03\x02\x02\x02\u02C2\u02C5\n\x0F\x02\x02\u02C3" + - "\u02C5\x05\xDBm\x02\u02C4\u02C2\x03\x02\x02\x02\u02C4\u02C3\x03\x02\x02" + - "\x02\u02C5\xDA\x03\x02\x02\x02\u02C6\u02CA\x05\xDDn\x02\u02C7\u02CA\x05" + - "\xDFo\x02\u02C8\u02CA\x05\xE1p\x02\u02C9\u02C6\x03\x02\x02\x02\u02C9\u02C7" + - "\x03\x02\x02\x02\u02C9\u02C8\x03\x02\x02\x02\u02CA\xDC\x03\x02\x02\x02" + - "\u02CB\u02CC\x07^\x02\x02\u02CC\u02CD\t\x10\x02\x02\u02CD\xDE\x03\x02" + - "\x02\x02\u02CE\u02CF\x07^\x02\x02\u02CF\u02D1\x05\xC9d\x02\u02D0\u02D2" + - "\x05\xC9d\x02\u02D1\u02D0\x03\x02\x02\x02\u02D1\u02D2\x03\x02\x02\x02" + - "\u02D2\u02D4\x03\x02\x02\x02\u02D3\u02D5\x05\xC9d\x02\u02D4\u02D3\x03" + - "\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\xE0\x03\x02\x02\x02\u02D6" + - "\u02D7\x07^\x02\x02\u02D7\u02D8\x07z\x02\x02\u02D8\u02DA\x03\x02\x02\x02" + - "\u02D9\u02DB\x05\xCBe\x02\u02DA\u02D9\x03\x02\x02\x02\u02DB\u02DC\x03" + - "\x02\x02\x02\u02DC\u02DA\x03\x02\x02\x02\u02DC\u02DD\x03\x02\x02\x02\u02DD" + - "\xE2\x03\x02\x02\x02\u02DE\u02E0\x05\xE5r\x02\u02DF\u02DE\x03\x02\x02" + - "\x02\u02E0\u02E1\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2" + - "\x03\x02\x02\x02\u02E2\xE4\x03\x02\x02\x02\u02E3\u02E6\n\x11\x02\x02\u02E4" + - "\u02E6\x05\xDBm\x02\u02E5\u02E3\x03\x02\x02\x02\u02E5\u02E4\x03\x02\x02" + - "\x02\u02E6\xE6\x03\x02\x02\x02\u02E7\u02E9\x05\xE9t\x02\u02E8\u02E7\x03" + - "\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02\u02EA\u02E8\x03\x02\x02\x02\u02EA" + - "\u02EB\x03\x02\x02\x02\u02EB\xE8\x03\x02\x02\x02\u02EC\u02EF\n\x12\x02" + - "\x02\u02ED\u02EF\x05\xDBm\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02ED" + - "\x03\x02\x02\x02\u02EF\xEA\x03\x02\x02\x02\u02F0\u02F2\x05\xEDv\x02\u02F1" + - "\u02F0\x03\x02\x02\x02\u02F2\u02F3\x03\x02\x02\x02\u02F3\u02F1\x03\x02" + - "\x02\x02\u02F3\u02F4\x03\x02\x02\x02\u02F4\xEC\x03\x02\x02\x02\u02F5\u02F8" + - "\n\x0F\x02\x02\u02F6\u02F8\x05\xDBm\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7" + - "\u02F6\x03\x02\x02\x02\u02F8\xEE\x03\x02\x02\x02\u02F9\u02FB\x05\xF1x" + - "\x02\u02FA\u02F9\x03\x02\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FC\u02FA" + - "\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02\u02FD\xF0\x03\x02\x02\x02" + - "\u02FE\u0301\n\x13\x02\x02\u02FF\u0301\x05\xDBm\x02\u0300\u02FE\x03\x02" + - "\x02\x02\u0300\u02FF\x03\x02\x02\x02\u0301\xF2\x03\x02\x02\x02\u0302\u0304" + - "\n\x03\x02\x02\u0303\u0302\x03\x02\x02\x02\u0304\u0307\x03\x02\x02\x02" + - "\u0305\u0303\x03\x02\x02\x02\u0305\u0306\x03\x02\x02\x02\u0306\xF4\x03" + - "\x02\x02\x02\u0307\u0305\x03\x02\x02\x02%\x02\x03\x04\xFB\u0229\u022B" + - "\u0232\u0236\u023C\u0245\u027E\u0285\u028C\u0293\u029F\u02A4\u02A7\u02AE" + - "\u02B2\u02B9\u02C0\u02C4\u02C9\u02D1\u02D4\u02DC\u02E1\u02E5\u02EA\u02EE" + - "\u02F3\u02F7\u02FC\u0300\u0305\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02" + - "\x02\x03\x02\x03S\x02\x07\x03\x02\x03T\x03\x07\x04\x02\t\x03\x02\x07\x02" + - "\x02\x03V\x04\x03Y\x05"; + "\u01FD\x07#\x02\x02\u01FDr\x03\x02\x02\x02\u01FE\u01FF\x07?\x02\x02\u01FF" + + "t\x03\x02\x02\x02\u0200\u0201\x07-\x02\x02\u0201\u0202\x07?\x02\x02\u0202" + + "v\x03\x02\x02\x02\u0203\u0204\x07/\x02\x02\u0204\u0205\x07?\x02\x02\u0205" + + "x\x03\x02\x02\x02\u0206\u0207\x07,\x02\x02\u0207\u0208\x07?\x02\x02\u0208" + + "z\x03\x02\x02\x02\u0209\u020A\x071\x02\x02\u020A\u020B\x07?\x02\x02\u020B" + + "|\x03\x02\x02\x02\u020C\u020D\x07'\x02\x02\u020D\u020E\x07?\x02\x02\u020E" + + "~\x03\x02\x02\x02\u020F\u0210\x07?\x02\x02\u0210\u0211\x07?\x02\x02\u0211" + + "\x80\x03\x02\x02\x02\u0212\u0213\x07#\x02\x02\u0213\u0214\x07?\x02\x02" + + "\u0214\x82\x03\x02\x02\x02\u0215\u0216\x07>\x02\x02\u0216\x84\x03\x02" + + "\x02\x02\u0217\u0218\x07>\x02\x02\u0218\u0219\x07?\x02\x02\u0219\x86\x03" + + "\x02\x02\x02\u021A\u021B\x07@\x02\x02\u021B\x88\x03\x02\x02\x02\u021C" + + "\u021D\x07@\x02\x02\u021D\u021E\x07?\x02\x02\u021E\x8A\x03\x02\x02\x02" + + "\u021F\u0220\x07(\x02\x02\u0220\x8C\x03\x02\x02\x02\u0221\u0222\x07~\x02" + + "\x02\u0222\x8E\x03\x02\x02\x02\u0223\u0224\x07`\x02\x02\u0224\x90\x03" + + "\x02\x02\x02\u0225\u0226\x07\x80\x02\x02\u0226\x92\x03\x02\x02\x02\u0227" + + "\u0228\x07>\x02\x02\u0228\u0229\x07>\x02\x02\u0229\x94\x03\x02\x02\x02" + + "\u022A\u022B\x07@\x02\x02\u022B\u022C\x07@\x02\x02\u022C\x96\x03\x02\x02" + + "\x02\u022D\u022E\x07@\x02\x02\u022E\u022F\x07@\x02\x02\u022F\u0230\x07" + + "@\x02\x02\u0230\x98\x03\x02\x02\x02\u0231\u0232\x070\x02\x02\u0232\x9A" + + "\x03\x02\x02\x02\u0233\u0238\x05\xB9\\\x02\u0234\u0237\x05\xB9\\\x02\u0235" + + "\u0237\x05\xBD^\x02\u0236\u0234\x03\x02\x02\x02\u0236\u0235\x03\x02\x02" + + "\x02\u0237\u023A\x03\x02\x02\x02\u0238\u0236\x03\x02\x02\x02\u0238\u0239" + + "\x03\x02\x02\x02\u0239\x9C\x03\x02\x02\x02\u023A\u0238\x03\x02\x02\x02" + + "\u023B\u0240\x05\xBF_\x02\u023C\u0240\x05\xC3a\x02\u023D\u0240\x05\xC5" + + "b\x02\u023E\u0240\x05\xC1`\x02\u023F\u023B\x03\x02\x02\x02\u023F\u023C" + + "\x03\x02\x02\x02\u023F\u023D\x03\x02\x02\x02\u023F\u023E\x03\x02\x02\x02" + + "\u0240\x9E\x03\x02\x02\x02\u0241\u0243\x07)\x02\x02\u0242\u0244\x05\xED" + + "v\x02\u0243\u0242\x03\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244\u0245" + + "\x03\x02\x02\x02\u0245\u0246\x07)\x02\x02\u0246\xA0\x03\x02\x02\x02\u0247" + + "\u0249\x07$\x02\x02\u0248\u024A\x05\xF1x\x02\u0249\u0248\x03\x02\x02\x02" + + "\u0249\u024A\x03\x02\x02\x02\u024A\u024B\x03\x02\x02\x02\u024B\u024C\x07" + + "$\x02\x02\u024C\xA2\x03\x02\x02\x02\u024D\u024E\x05\xCFg\x02\u024E\xA4" + + "\x03\x02\x02\x02\u024F\u0251\t\x02\x02\x02\u0250\u024F\x03\x02\x02\x02" + + "\u0251\u0252\x03\x02\x02\x02\u0252\u0250\x03\x02\x02\x02\u0252\u0253\x03" + + "\x02\x02\x02\u0253\u0254\x03\x02\x02\x02\u0254\u0255\bR\x05\x02\u0255" + + "\xA6\x03\x02\x02\x02\u0256\u0257\t\x03\x02\x02\u0257\u0258\x03\x02\x02" + + "\x02\u0258\u0259\bS\x05\x02\u0259\xA8\x03\x02\x02\x02\u025A\u025B\x07" + + "h\x02\x02\u025B\u025C\x07)\x02\x02\u025C\u025D\x03\x02\x02\x02\u025D\u025E" + + "\bT\x06\x02\u025E\u025F\x03\x02\x02\x02\u025F\u0260\bT\x07\x02\u0260\xAA" + + "\x03\x02\x02\x02\u0261\u0262\x07h\x02\x02\u0262\u0263\x07$\x02\x02\u0263" + + "\u0264\x03\x02\x02\x02\u0264\u0265\bU\b\x02\u0265\u0266\x03\x02\x02\x02" + + "\u0266\u0267\bU\t\x02\u0267\xAC\x03\x02\x02\x02\u0268\u0269\x06V\x03\x02" + + "\u0269\u026A\x07}\x02\x02\u026A\u026B\x03\x02\x02\x02\u026B\u026C\bV\n" + + "\x02\u026C\u026D\bV\v\x02\u026D\xAE\x03\x02\x02\x02\u026E\u026F\x07)\x02" + + "\x02\u026F\u0270\bW\f\x02\u0270\u0271\x03\x02\x02\x02\u0271\u0272\bW\x04" + + "\x02\u0272\xB0\x03\x02\x02\x02\u0273\u0274\x05\xE5r\x02\u0274\xB2\x03" + + "\x02\x02\x02\u0275\u0276\x06Y\x04\x02\u0276\u0277\x07}\x02\x02\u0277\u0278" + + "\x03\x02\x02\x02\u0278\u0279\bY\n\x02\u0279\u027A\bY\v\x02\u027A\xB4\x03" + + "\x02\x02\x02\u027B\u027C\x07$\x02\x02\u027C\u027D\bZ\r\x02\u027D\u027E" + + "\x03\x02\x02\x02\u027E\u027F\bZ\x04\x02\u027F\xB6\x03\x02\x02\x02\u0280" + + "\u0281\x05\xE9t\x02\u0281\xB8\x03\x02\x02\x02\u0282\u0283\x05\xBB]\x02" + + "\u0283\xBA\x03\x02\x02\x02\u0284\u0285\t\x04\x02\x02\u0285\xBC\x03\x02" + + "\x02\x02\u0286\u0287\t\x05\x02\x02\u0287\xBE\x03\x02\x02\x02\u0288\u028A" + + "\x05\xBD^\x02\u0289\u0288\x03\x02\x02\x02\u028A\u028B\x03\x02\x02\x02" + + "\u028B\u0289\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C\xC0\x03" + + "\x02\x02\x02\u028D\u028E\x072\x02\x02\u028E\u0290\t\x06\x02\x02\u028F" + + "\u0291\x05\xC9d\x02\u0290\u028F\x03\x02\x02\x02\u0291\u0292\x03\x02\x02" + + "\x02\u0292\u0290\x03\x02\x02\x02\u0292\u0293\x03\x02\x02\x02\u0293\xC2" + + "\x03\x02\x02\x02\u0294\u0295\x072\x02\x02\u0295\u0297\t\x07\x02\x02\u0296" + + "\u0298\x05\xCBe\x02\u0297\u0296\x03\x02\x02\x02\u0298\u0299\x03\x02\x02" + + "\x02\u0299\u0297\x03\x02\x02\x02\u0299\u029A\x03\x02\x02\x02\u029A\xC4" + + "\x03\x02\x02\x02\u029B\u029C\x072\x02\x02\u029C\u029E\t\b\x02\x02\u029D" + + "\u029F\x05\xCDf\x02\u029E\u029D\x03\x02\x02\x02\u029F\u02A0\x03\x02\x02" + + "\x02\u02A0\u029E\x03\x02\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1\xC6" + + "\x03\x02\x02\x02\u02A2\u02A3\t\t\x02\x02\u02A3\xC8\x03\x02\x02\x02\u02A4" + + "\u02A5\t\n\x02\x02\u02A5\xCA\x03\x02\x02\x02\u02A6\u02A7\t\v\x02\x02\u02A7" + + "\xCC\x03\x02\x02\x02\u02A8\u02A9\t\f\x02\x02\u02A9\xCE\x03\x02\x02\x02" + + "\u02AA\u02AC\x05\xD1h\x02\u02AB\u02AD\x05\xD3i\x02\u02AC\u02AB\x03\x02" + + "\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\u02B2\x03\x02\x02\x02\u02AE" + + "\u02AF\x05\xD5j\x02\u02AF\u02B0\x05\xD3i\x02\u02B0\u02B2\x03\x02\x02\x02" + + "\u02B1\u02AA\x03\x02\x02\x02\u02B1\u02AE\x03\x02\x02\x02\u02B2\xD0\x03" + + "\x02\x02\x02\u02B3\u02B5\x05\xD5j\x02\u02B4\u02B3\x03\x02\x02\x02\u02B4" + + "\u02B5\x03\x02\x02\x02\u02B5\u02B6\x03\x02\x02\x02\u02B6\u02B7\x070\x02" + + "\x02\u02B7\u02BC\x05\xD5j\x02\u02B8\u02B9\x05\xD5j\x02\u02B9\u02BA\x07" + + "0\x02\x02\u02BA\u02BC\x03\x02\x02\x02\u02BB\u02B4\x03\x02\x02\x02\u02BB" + + "\u02B8\x03\x02\x02\x02\u02BC\xD2\x03\x02\x02\x02\u02BD\u02BF\t\r\x02\x02" + + "\u02BE\u02C0\x05\xD7k\x02\u02BF\u02BE\x03\x02\x02\x02\u02BF\u02C0\x03" + + "\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\u02C2\x05\xD5j\x02\u02C2" + + "\xD4\x03\x02\x02\x02\u02C3\u02C5\x05\xBD^\x02\u02C4\u02C3\x03\x02\x02" + + "\x02\u02C5\u02C6\x03\x02\x02\x02\u02C6\u02C4\x03\x02\x02\x02\u02C6\u02C7" + + "\x03\x02\x02\x02\u02C7\xD6\x03\x02\x02\x02\u02C8\u02C9\t\x0E\x02\x02\u02C9" + + "\xD8\x03\x02\x02\x02\u02CA\u02CC\x05\xDBm\x02\u02CB\u02CA\x03\x02\x02" + + "\x02\u02CC\u02CD\x03\x02\x02\x02\u02CD\u02CB\x03\x02\x02\x02\u02CD\u02CE" + + "\x03\x02\x02\x02\u02CE\xDA\x03\x02\x02\x02\u02CF\u02D2\n\x0F\x02\x02\u02D0" + + "\u02D2\x05\xDDn\x02\u02D1\u02CF\x03\x02\x02\x02\u02D1\u02D0\x03\x02\x02" + + "\x02\u02D2\xDC\x03\x02\x02\x02\u02D3\u02D7\x05\xDFo\x02\u02D4\u02D7\x05" + + "\xE1p\x02\u02D5\u02D7\x05\xE3q\x02\u02D6\u02D3\x03\x02\x02\x02\u02D6\u02D4" + + "\x03\x02\x02\x02\u02D6\u02D5\x03\x02\x02\x02\u02D7\xDE\x03\x02\x02\x02" + + "\u02D8\u02D9\x07^\x02\x02\u02D9\u02DA\t\x10\x02\x02\u02DA\xE0\x03\x02" + + "\x02\x02\u02DB\u02DC\x07^\x02\x02\u02DC\u02DE\x05\xCBe\x02\u02DD\u02DF" + + "\x05\xCBe\x02\u02DE\u02DD\x03\x02\x02\x02\u02DE\u02DF\x03\x02\x02\x02" + + "\u02DF\u02E1\x03\x02\x02\x02\u02E0\u02E2\x05\xCBe\x02\u02E1\u02E0\x03" + + "\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02\u02E2\xE2\x03\x02\x02\x02\u02E3" + + "\u02E4\x07^\x02\x02\u02E4\u02E5\x07z\x02\x02\u02E5\u02E7\x03\x02\x02\x02" + + "\u02E6\u02E8\x05\xCDf\x02\u02E7\u02E6\x03\x02\x02\x02\u02E8\u02E9\x03" + + "\x02\x02\x02\u02E9\u02E7\x03\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02\u02EA" + + "\xE4\x03\x02\x02\x02\u02EB\u02ED\x05\xE7s\x02\u02EC\u02EB\x03\x02\x02" + + "\x02\u02ED\u02EE\x03\x02\x02\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02EF" + + "\x03\x02\x02\x02\u02EF\xE6\x03\x02\x02\x02\u02F0\u02F3\n\x11\x02\x02\u02F1" + + "\u02F3\x05\xDDn\x02\u02F2\u02F0\x03\x02\x02\x02\u02F2\u02F1\x03\x02\x02" + + "\x02\u02F3\xE8\x03\x02\x02\x02\u02F4\u02F6\x05\xEBu\x02\u02F5\u02F4\x03" + + "\x02\x02\x02\u02F6\u02F7\x03\x02\x02\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7" + + "\u02F8\x03\x02\x02\x02\u02F8\xEA\x03\x02\x02\x02\u02F9\u02FC\n\x12\x02" + + "\x02\u02FA\u02FC\x05\xDDn\x02\u02FB\u02F9\x03\x02\x02\x02\u02FB\u02FA" + + "\x03\x02\x02\x02\u02FC\xEC\x03\x02\x02\x02\u02FD\u02FF\x05\xEFw\x02\u02FE" + + "\u02FD\x03\x02\x02\x02\u02FF\u0300\x03\x02\x02\x02\u0300\u02FE\x03\x02" + + "\x02\x02\u0300\u0301\x03\x02\x02\x02\u0301\xEE\x03\x02\x02\x02\u0302\u0305" + + "\n\x0F\x02\x02\u0303\u0305\x05\xDDn\x02\u0304\u0302\x03\x02\x02\x02\u0304" + + "\u0303\x03\x02\x02\x02\u0305\xF0\x03\x02\x02\x02\u0306\u0308\x05\xF3y" + + "\x02\u0307\u0306\x03\x02\x02\x02\u0308\u0309\x03\x02\x02\x02\u0309\u0307" + + "\x03\x02\x02\x02\u0309\u030A\x03\x02\x02\x02\u030A\xF2\x03\x02\x02\x02" + + "\u030B\u030E\n\x13\x02\x02\u030C\u030E\x05\xDDn\x02\u030D\u030B\x03\x02" + + "\x02\x02\u030D\u030C\x03\x02\x02\x02\u030E\xF4\x03\x02\x02\x02\u030F\u0311" + + "\n\x03\x02\x02\u0310\u030F\x03\x02\x02\x02\u0311\u0314\x03\x02\x02\x02" + + "\u0312\u0310\x03\x02\x02\x02\u0312\u0313\x03\x02\x02\x02\u0313\xF6\x03" + + "\x02\x02\x02\u0314\u0312\x03\x02\x02\x02%\x02\x03\x04\xFD\u0236\u0238" + + "\u023F\u0243\u0249\u0252\u028B\u0292\u0299\u02A0\u02AC\u02B1\u02B4\u02BB" + + "\u02BF\u02C6\u02CD\u02D1\u02D6\u02DE\u02E1\u02E9\u02EE\u02F2\u02F7\u02FB" + + "\u0300\u0304\u0309\u030D\u0312\x0E\x02\x04\x02\x02\x05\x02\x06\x02\x02" + + "\x02\x03\x02\x03T\x02\x07\x03\x02\x03U\x03\x07\x04\x02\t\x03\x02\x07\x02" + + "\x02\x03W\x04\x03Z\x05"; public static readonly _serializedATN: string = Utils.join( [KipperLexer._serializedATNSegment0, KipperLexer._serializedATNSegment1], "", diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index f3e05b05a..f8870c661 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -4,6 +4,7 @@ null null null null +'instanceof' 'const' 'var' 'as' @@ -95,6 +96,7 @@ FStringExpStart BlockComment LineComment Pragma +InstanceOf Const Var As @@ -252,6 +254,7 @@ multiplicativeExpression additiveExpression bitwiseShiftExpression bitwiseShiftOperators +instanceOfExpression relationalExpression equalityExpression bitwiseAndExpression @@ -271,4 +274,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 90, 817, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 3, 2, 5, 2, 178, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 183, 10, 3, 13, 3, 14, 3, 184, 3, 4, 3, 4, 3, 5, 6, 5, 190, 10, 5, 13, 5, 14, 5, 191, 3, 6, 3, 6, 3, 6, 5, 6, 197, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 205, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 217, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 229, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 235, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 240, 10, 15, 12, 15, 14, 15, 243, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 253, 10, 17, 12, 17, 14, 17, 256, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 262, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 272, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 284, 10, 21, 12, 21, 14, 21, 287, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 294, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 303, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 309, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 314, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 325, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 330, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 341, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 350, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 358, 10, 31, 12, 31, 14, 31, 361, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 373, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 378, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 384, 10, 34, 3, 34, 3, 34, 5, 34, 388, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 394, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 400, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 424, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 438, 10, 39, 3, 40, 3, 40, 5, 40, 442, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 450, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 464, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 470, 10, 47, 12, 47, 14, 47, 473, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 478, 10, 47, 12, 47, 14, 47, 481, 11, 47, 3, 47, 5, 47, 484, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 489, 10, 48, 3, 48, 5, 48, 492, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 497, 10, 49, 3, 49, 5, 49, 500, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 508, 10, 51, 12, 51, 14, 51, 511, 11, 51, 5, 51, 513, 10, 51, 3, 51, 5, 51, 516, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 524, 10, 52, 12, 52, 14, 52, 527, 11, 52, 5, 52, 529, 10, 52, 3, 52, 5, 52, 532, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 548, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 557, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 562, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 579, 10, 55, 3, 55, 3, 55, 7, 55, 583, 10, 55, 12, 55, 14, 55, 586, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 591, 10, 56, 12, 56, 14, 56, 594, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 607, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 613, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 620, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 631, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 648, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 656, 10, 69, 12, 69, 14, 69, 659, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 667, 10, 70, 12, 70, 14, 70, 670, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 679, 10, 71, 12, 71, 14, 71, 682, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 692, 10, 73, 12, 73, 14, 73, 695, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 703, 10, 74, 12, 74, 14, 74, 706, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 714, 10, 75, 12, 75, 14, 75, 717, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 725, 10, 76, 12, 76, 14, 76, 728, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 736, 10, 77, 12, 77, 14, 77, 739, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 747, 10, 78, 12, 78, 14, 78, 750, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 758, 10, 79, 12, 79, 14, 79, 761, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 770, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 777, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 7, 83, 784, 10, 83, 12, 83, 14, 83, 787, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 792, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 7, 86, 801, 10, 86, 12, 86, 14, 86, 804, 11, 86, 5, 86, 806, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 2, 2, 13, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 89, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 80, 81, 4, 2, 79, 79, 82, 82, 3, 2, 33, 35, 4, 2, 48, 48, 50, 50, 6, 2, 47, 47, 49, 49, 57, 57, 73, 73, 3, 2, 51, 54, 4, 2, 47, 47, 49, 49, 3, 2, 74, 76, 3, 2, 66, 69, 3, 2, 64, 65, 3, 2, 58, 63, 4, 2, 33, 35, 78, 78, 2, 827, 2, 177, 3, 2, 2, 2, 4, 182, 3, 2, 2, 2, 6, 186, 3, 2, 2, 2, 8, 189, 3, 2, 2, 2, 10, 196, 3, 2, 2, 2, 12, 204, 3, 2, 2, 2, 14, 206, 3, 2, 2, 2, 16, 209, 3, 2, 2, 2, 18, 211, 3, 2, 2, 2, 20, 218, 3, 2, 2, 2, 22, 220, 3, 2, 2, 2, 24, 222, 3, 2, 2, 2, 26, 224, 3, 2, 2, 2, 28, 236, 3, 2, 2, 2, 30, 244, 3, 2, 2, 2, 32, 248, 3, 2, 2, 2, 34, 261, 3, 2, 2, 2, 36, 263, 3, 2, 2, 2, 38, 268, 3, 2, 2, 2, 40, 278, 3, 2, 2, 2, 42, 293, 3, 2, 2, 2, 44, 295, 3, 2, 2, 2, 46, 299, 3, 2, 2, 2, 48, 310, 3, 2, 2, 2, 50, 324, 3, 2, 2, 2, 52, 326, 3, 2, 2, 2, 54, 333, 3, 2, 2, 2, 56, 340, 3, 2, 2, 2, 58, 342, 3, 2, 2, 2, 60, 351, 3, 2, 2, 2, 62, 372, 3, 2, 2, 2, 64, 377, 3, 2, 2, 2, 66, 379, 3, 2, 2, 2, 68, 404, 3, 2, 2, 2, 70, 410, 3, 2, 2, 2, 72, 418, 3, 2, 2, 2, 74, 421, 3, 2, 2, 2, 76, 437, 3, 2, 2, 2, 78, 439, 3, 2, 2, 2, 80, 451, 3, 2, 2, 2, 82, 455, 3, 2, 2, 2, 84, 457, 3, 2, 2, 2, 86, 459, 3, 2, 2, 2, 88, 463, 3, 2, 2, 2, 90, 465, 3, 2, 2, 2, 92, 483, 3, 2, 2, 2, 94, 491, 3, 2, 2, 2, 96, 499, 3, 2, 2, 2, 98, 501, 3, 2, 2, 2, 100, 503, 3, 2, 2, 2, 102, 519, 3, 2, 2, 2, 104, 535, 3, 2, 2, 2, 106, 539, 3, 2, 2, 2, 108, 561, 3, 2, 2, 2, 110, 587, 3, 2, 2, 2, 112, 595, 3, 2, 2, 2, 114, 598, 3, 2, 2, 2, 116, 602, 3, 2, 2, 2, 118, 619, 3, 2, 2, 2, 120, 621, 3, 2, 2, 2, 122, 624, 3, 2, 2, 2, 124, 630, 3, 2, 2, 2, 126, 632, 3, 2, 2, 2, 128, 635, 3, 2, 2, 2, 130, 638, 3, 2, 2, 2, 132, 640, 3, 2, 2, 2, 134, 647, 3, 2, 2, 2, 136, 649, 3, 2, 2, 2, 138, 660, 3, 2, 2, 2, 140, 671, 3, 2, 2, 2, 142, 683, 3, 2, 2, 2, 144, 685, 3, 2, 2, 2, 146, 696, 3, 2, 2, 2, 148, 707, 3, 2, 2, 2, 150, 718, 3, 2, 2, 2, 152, 729, 3, 2, 2, 2, 154, 740, 3, 2, 2, 2, 156, 751, 3, 2, 2, 2, 158, 769, 3, 2, 2, 2, 160, 776, 3, 2, 2, 2, 162, 778, 3, 2, 2, 2, 164, 780, 3, 2, 2, 2, 166, 791, 3, 2, 2, 2, 168, 793, 3, 2, 2, 2, 170, 795, 3, 2, 2, 2, 172, 809, 3, 2, 2, 2, 174, 814, 3, 2, 2, 2, 176, 178, 5, 4, 3, 2, 177, 176, 3, 2, 2, 2, 177, 178, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 7, 2, 2, 3, 180, 3, 3, 2, 2, 2, 181, 183, 5, 6, 4, 2, 182, 181, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 182, 3, 2, 2, 2, 184, 185, 3, 2, 2, 2, 185, 5, 3, 2, 2, 2, 186, 187, 5, 8, 5, 2, 187, 7, 3, 2, 2, 2, 188, 190, 5, 10, 6, 2, 189, 188, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 9, 3, 2, 2, 2, 193, 197, 5, 50, 26, 2, 194, 197, 5, 12, 7, 2, 195, 197, 7, 37, 2, 2, 196, 193, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 196, 195, 3, 2, 2, 2, 197, 11, 3, 2, 2, 2, 198, 199, 5, 14, 8, 2, 199, 200, 7, 37, 2, 2, 200, 205, 3, 2, 2, 2, 201, 205, 5, 26, 14, 2, 202, 205, 5, 32, 17, 2, 203, 205, 5, 40, 21, 2, 204, 198, 3, 2, 2, 2, 204, 201, 3, 2, 2, 2, 204, 202, 3, 2, 2, 2, 204, 203, 3, 2, 2, 2, 205, 13, 3, 2, 2, 2, 206, 207, 5, 16, 9, 2, 207, 208, 5, 18, 10, 2, 208, 15, 3, 2, 2, 2, 209, 210, 9, 2, 2, 2, 210, 17, 3, 2, 2, 2, 211, 212, 5, 22, 12, 2, 212, 213, 7, 39, 2, 2, 213, 216, 5, 166, 84, 2, 214, 215, 7, 58, 2, 2, 215, 217, 5, 20, 11, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 19, 3, 2, 2, 2, 218, 219, 5, 160, 81, 2, 219, 21, 3, 2, 2, 2, 220, 221, 5, 24, 13, 2, 221, 23, 3, 2, 2, 2, 222, 223, 7, 78, 2, 2, 223, 25, 3, 2, 2, 2, 224, 225, 7, 22, 2, 2, 225, 226, 5, 22, 12, 2, 226, 228, 7, 40, 2, 2, 227, 229, 5, 28, 15, 2, 228, 227, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 7, 41, 2, 2, 231, 232, 7, 25, 2, 2, 232, 234, 5, 166, 84, 2, 233, 235, 5, 52, 27, 2, 234, 233, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 27, 3, 2, 2, 2, 236, 241, 5, 30, 16, 2, 237, 238, 7, 36, 2, 2, 238, 240, 5, 30, 16, 2, 239, 237, 3, 2, 2, 2, 240, 243, 3, 2, 2, 2, 241, 239, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 29, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 245, 5, 22, 12, 2, 245, 246, 7, 39, 2, 2, 246, 247, 5, 166, 84, 2, 247, 31, 3, 2, 2, 2, 248, 249, 7, 27, 2, 2, 249, 250, 5, 22, 12, 2, 250, 254, 7, 45, 2, 2, 251, 253, 5, 34, 18, 2, 252, 251, 3, 2, 2, 2, 253, 256, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 257, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 257, 258, 7, 46, 2, 2, 258, 33, 3, 2, 2, 2, 259, 262, 5, 36, 19, 2, 260, 262, 5, 38, 20, 2, 261, 259, 3, 2, 2, 2, 261, 260, 3, 2, 2, 2, 262, 35, 3, 2, 2, 2, 263, 264, 5, 22, 12, 2, 264, 265, 7, 39, 2, 2, 265, 266, 5, 166, 84, 2, 266, 267, 7, 37, 2, 2, 267, 37, 3, 2, 2, 2, 268, 269, 5, 22, 12, 2, 269, 271, 7, 40, 2, 2, 270, 272, 5, 28, 15, 2, 271, 270, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 3, 2, 2, 2, 273, 274, 7, 41, 2, 2, 274, 275, 7, 39, 2, 2, 275, 276, 5, 166, 84, 2, 276, 277, 7, 37, 2, 2, 277, 39, 3, 2, 2, 2, 278, 279, 7, 26, 2, 2, 279, 280, 5, 22, 12, 2, 280, 285, 7, 45, 2, 2, 281, 284, 5, 42, 22, 2, 282, 284, 7, 37, 2, 2, 283, 281, 3, 2, 2, 2, 283, 282, 3, 2, 2, 2, 284, 287, 3, 2, 2, 2, 285, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 288, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 288, 289, 7, 46, 2, 2, 289, 41, 3, 2, 2, 2, 290, 294, 5, 44, 23, 2, 291, 294, 5, 46, 24, 2, 292, 294, 5, 48, 25, 2, 293, 290, 3, 2, 2, 2, 293, 291, 3, 2, 2, 2, 293, 292, 3, 2, 2, 2, 294, 43, 3, 2, 2, 2, 295, 296, 5, 22, 12, 2, 296, 297, 7, 39, 2, 2, 297, 298, 5, 166, 84, 2, 298, 45, 3, 2, 2, 2, 299, 300, 5, 22, 12, 2, 300, 302, 7, 40, 2, 2, 301, 303, 5, 28, 15, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 7, 41, 2, 2, 305, 306, 7, 39, 2, 2, 306, 308, 5, 166, 84, 2, 307, 309, 5, 52, 27, 2, 308, 307, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 47, 3, 2, 2, 2, 310, 311, 7, 28, 2, 2, 311, 313, 7, 40, 2, 2, 312, 314, 5, 28, 15, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 316, 7, 41, 2, 2, 316, 317, 5, 52, 27, 2, 317, 49, 3, 2, 2, 2, 318, 325, 5, 54, 28, 2, 319, 325, 5, 56, 29, 2, 320, 325, 5, 64, 33, 2, 321, 325, 5, 72, 37, 2, 322, 325, 5, 74, 38, 2, 323, 325, 5, 52, 27, 2, 324, 318, 3, 2, 2, 2, 324, 319, 3, 2, 2, 2, 324, 320, 3, 2, 2, 2, 324, 321, 3, 2, 2, 2, 324, 322, 3, 2, 2, 2, 324, 323, 3, 2, 2, 2, 325, 51, 3, 2, 2, 2, 326, 327, 6, 27, 2, 2, 327, 329, 7, 45, 2, 2, 328, 330, 5, 8, 5, 2, 329, 328, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 331, 3, 2, 2, 2, 331, 332, 7, 46, 2, 2, 332, 53, 3, 2, 2, 2, 333, 334, 8, 28, 1, 2, 334, 335, 5, 164, 83, 2, 335, 336, 7, 37, 2, 2, 336, 337, 8, 28, 1, 2, 337, 55, 3, 2, 2, 2, 338, 341, 5, 58, 30, 2, 339, 341, 5, 60, 31, 2, 340, 338, 3, 2, 2, 2, 340, 339, 3, 2, 2, 2, 341, 57, 3, 2, 2, 2, 342, 343, 7, 18, 2, 2, 343, 344, 7, 40, 2, 2, 344, 345, 5, 164, 83, 2, 345, 346, 7, 41, 2, 2, 346, 349, 5, 50, 26, 2, 347, 348, 7, 19, 2, 2, 348, 350, 5, 50, 26, 2, 349, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 59, 3, 2, 2, 2, 351, 352, 7, 11, 2, 2, 352, 353, 7, 40, 2, 2, 353, 354, 5, 164, 83, 2, 354, 355, 7, 41, 2, 2, 355, 359, 7, 45, 2, 2, 356, 358, 5, 62, 32, 2, 357, 356, 3, 2, 2, 2, 358, 361, 3, 2, 2, 2, 359, 357, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 362, 363, 7, 46, 2, 2, 363, 61, 3, 2, 2, 2, 364, 365, 7, 12, 2, 2, 365, 366, 5, 164, 83, 2, 366, 367, 7, 39, 2, 2, 367, 368, 5, 50, 26, 2, 368, 373, 3, 2, 2, 2, 369, 370, 7, 13, 2, 2, 370, 371, 7, 39, 2, 2, 371, 373, 5, 50, 26, 2, 372, 364, 3, 2, 2, 2, 372, 369, 3, 2, 2, 2, 373, 63, 3, 2, 2, 2, 374, 378, 5, 66, 34, 2, 375, 378, 5, 68, 35, 2, 376, 378, 5, 70, 36, 2, 377, 374, 3, 2, 2, 2, 377, 375, 3, 2, 2, 2, 377, 376, 3, 2, 2, 2, 378, 65, 3, 2, 2, 2, 379, 380, 7, 20, 2, 2, 380, 387, 7, 40, 2, 2, 381, 384, 5, 14, 8, 2, 382, 384, 5, 164, 83, 2, 383, 381, 3, 2, 2, 2, 383, 382, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 386, 8, 34, 1, 2, 386, 388, 3, 2, 2, 2, 387, 383, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 393, 7, 37, 2, 2, 390, 391, 5, 164, 83, 2, 391, 392, 8, 34, 1, 2, 392, 394, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 395, 3, 2, 2, 2, 395, 399, 7, 37, 2, 2, 396, 397, 5, 164, 83, 2, 397, 398, 8, 34, 1, 2, 398, 400, 3, 2, 2, 2, 399, 396, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 7, 41, 2, 2, 402, 403, 5, 50, 26, 2, 403, 67, 3, 2, 2, 2, 404, 405, 7, 17, 2, 2, 405, 406, 7, 40, 2, 2, 406, 407, 5, 164, 83, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 50, 26, 2, 409, 69, 3, 2, 2, 2, 410, 411, 7, 16, 2, 2, 411, 412, 5, 50, 26, 2, 412, 413, 7, 17, 2, 2, 413, 414, 7, 40, 2, 2, 414, 415, 5, 164, 83, 2, 415, 416, 7, 41, 2, 2, 416, 417, 7, 37, 2, 2, 417, 71, 3, 2, 2, 2, 418, 419, 9, 3, 2, 2, 419, 420, 7, 37, 2, 2, 420, 73, 3, 2, 2, 2, 421, 423, 7, 23, 2, 2, 422, 424, 5, 164, 83, 2, 423, 422, 3, 2, 2, 2, 423, 424, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 426, 7, 37, 2, 2, 426, 75, 3, 2, 2, 2, 427, 438, 5, 80, 41, 2, 428, 438, 5, 78, 40, 2, 429, 438, 5, 100, 51, 2, 430, 438, 5, 102, 52, 2, 431, 438, 5, 82, 42, 2, 432, 438, 5, 84, 43, 2, 433, 438, 5, 90, 46, 2, 434, 438, 5, 92, 47, 2, 435, 438, 5, 98, 50, 2, 436, 438, 5, 106, 54, 2, 437, 427, 3, 2, 2, 2, 437, 428, 3, 2, 2, 2, 437, 429, 3, 2, 2, 2, 437, 430, 3, 2, 2, 2, 437, 431, 3, 2, 2, 2, 437, 432, 3, 2, 2, 2, 437, 433, 3, 2, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 436, 3, 2, 2, 2, 438, 77, 3, 2, 2, 2, 439, 441, 7, 40, 2, 2, 440, 442, 5, 28, 15, 2, 441, 440, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 443, 3, 2, 2, 2, 443, 444, 7, 41, 2, 2, 444, 445, 7, 39, 2, 2, 445, 446, 5, 166, 84, 2, 446, 449, 7, 25, 2, 2, 447, 450, 5, 164, 83, 2, 448, 450, 5, 52, 27, 2, 449, 447, 3, 2, 2, 2, 449, 448, 3, 2, 2, 2, 450, 79, 3, 2, 2, 2, 451, 452, 7, 40, 2, 2, 452, 453, 5, 164, 83, 2, 453, 454, 7, 41, 2, 2, 454, 81, 3, 2, 2, 2, 455, 456, 9, 4, 2, 2, 456, 83, 3, 2, 2, 2, 457, 458, 5, 86, 44, 2, 458, 85, 3, 2, 2, 2, 459, 460, 7, 78, 2, 2, 460, 87, 3, 2, 2, 2, 461, 464, 5, 86, 44, 2, 462, 464, 5, 90, 46, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 89, 3, 2, 2, 2, 465, 466, 9, 5, 2, 2, 466, 91, 3, 2, 2, 2, 467, 471, 7, 85, 2, 2, 468, 470, 5, 94, 48, 2, 469, 468, 3, 2, 2, 2, 470, 473, 3, 2, 2, 2, 471, 469, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 474, 484, 7, 87, 2, 2, 475, 479, 7, 86, 2, 2, 476, 478, 5, 96, 49, 2, 477, 476, 3, 2, 2, 2, 478, 481, 3, 2, 2, 2, 479, 477, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 482, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 482, 484, 7, 89, 2, 2, 483, 467, 3, 2, 2, 2, 483, 475, 3, 2, 2, 2, 484, 93, 3, 2, 2, 2, 485, 492, 7, 88, 2, 2, 486, 488, 7, 3, 2, 2, 487, 489, 5, 164, 83, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 492, 7, 44, 2, 2, 491, 485, 3, 2, 2, 2, 491, 486, 3, 2, 2, 2, 492, 95, 3, 2, 2, 2, 493, 500, 7, 90, 2, 2, 494, 496, 7, 3, 2, 2, 495, 497, 5, 164, 83, 2, 496, 495, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 498, 3, 2, 2, 2, 498, 500, 7, 44, 2, 2, 499, 493, 3, 2, 2, 2, 499, 494, 3, 2, 2, 2, 500, 97, 3, 2, 2, 2, 501, 502, 9, 6, 2, 2, 502, 99, 3, 2, 2, 2, 503, 512, 7, 42, 2, 2, 504, 509, 5, 164, 83, 2, 505, 506, 7, 36, 2, 2, 506, 508, 5, 164, 83, 2, 507, 505, 3, 2, 2, 2, 508, 511, 3, 2, 2, 2, 509, 507, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 512, 504, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 515, 3, 2, 2, 2, 514, 516, 7, 36, 2, 2, 515, 514, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 7, 43, 2, 2, 518, 101, 3, 2, 2, 2, 519, 528, 7, 45, 2, 2, 520, 525, 5, 104, 53, 2, 521, 522, 7, 36, 2, 2, 522, 524, 5, 104, 53, 2, 523, 521, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 528, 520, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 532, 7, 36, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 46, 2, 2, 534, 103, 3, 2, 2, 2, 535, 536, 5, 88, 45, 2, 536, 537, 7, 39, 2, 2, 537, 538, 5, 164, 83, 2, 538, 105, 3, 2, 2, 2, 539, 540, 9, 7, 2, 2, 540, 107, 3, 2, 2, 2, 541, 542, 8, 55, 1, 2, 542, 562, 5, 76, 39, 2, 543, 544, 7, 24, 2, 2, 544, 545, 5, 108, 55, 2, 545, 547, 7, 40, 2, 2, 546, 548, 5, 110, 56, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 550, 7, 41, 2, 2, 550, 551, 8, 55, 1, 2, 551, 562, 3, 2, 2, 2, 552, 553, 7, 29, 2, 2, 553, 554, 5, 166, 84, 2, 554, 556, 7, 40, 2, 2, 555, 557, 5, 110, 56, 2, 556, 555, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 558, 3, 2, 2, 2, 558, 559, 7, 41, 2, 2, 559, 560, 8, 55, 1, 2, 560, 562, 3, 2, 2, 2, 561, 541, 3, 2, 2, 2, 561, 543, 3, 2, 2, 2, 561, 552, 3, 2, 2, 2, 562, 584, 3, 2, 2, 2, 563, 564, 12, 8, 2, 2, 564, 565, 5, 112, 57, 2, 565, 566, 8, 55, 1, 2, 566, 583, 3, 2, 2, 2, 567, 568, 12, 7, 2, 2, 568, 569, 5, 114, 58, 2, 569, 570, 8, 55, 1, 2, 570, 583, 3, 2, 2, 2, 571, 572, 12, 6, 2, 2, 572, 573, 5, 116, 59, 2, 573, 574, 8, 55, 1, 2, 574, 583, 3, 2, 2, 2, 575, 576, 12, 5, 2, 2, 576, 578, 7, 40, 2, 2, 577, 579, 5, 110, 56, 2, 578, 577, 3, 2, 2, 2, 578, 579, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 581, 7, 41, 2, 2, 581, 583, 8, 55, 1, 2, 582, 563, 3, 2, 2, 2, 582, 567, 3, 2, 2, 2, 582, 571, 3, 2, 2, 2, 582, 575, 3, 2, 2, 2, 583, 586, 3, 2, 2, 2, 584, 582, 3, 2, 2, 2, 584, 585, 3, 2, 2, 2, 585, 109, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 587, 592, 5, 160, 81, 2, 588, 589, 7, 36, 2, 2, 589, 591, 5, 160, 81, 2, 590, 588, 3, 2, 2, 2, 591, 594, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 593, 111, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 596, 7, 77, 2, 2, 596, 597, 5, 86, 44, 2, 597, 113, 3, 2, 2, 2, 598, 599, 7, 42, 2, 2, 599, 600, 5, 164, 83, 2, 600, 601, 7, 43, 2, 2, 601, 115, 3, 2, 2, 2, 602, 606, 7, 42, 2, 2, 603, 604, 5, 164, 83, 2, 604, 605, 8, 59, 1, 2, 605, 607, 3, 2, 2, 2, 606, 603, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 612, 7, 39, 2, 2, 609, 610, 5, 164, 83, 2, 610, 611, 8, 59, 1, 2, 611, 613, 3, 2, 2, 2, 612, 609, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 7, 43, 2, 2, 615, 117, 3, 2, 2, 2, 616, 620, 5, 108, 55, 2, 617, 620, 5, 120, 61, 2, 618, 620, 5, 122, 62, 2, 619, 616, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 619, 618, 3, 2, 2, 2, 620, 119, 3, 2, 2, 2, 621, 622, 5, 108, 55, 2, 622, 623, 5, 130, 66, 2, 623, 121, 3, 2, 2, 2, 624, 625, 7, 32, 2, 2, 625, 626, 5, 160, 81, 2, 626, 123, 3, 2, 2, 2, 627, 631, 5, 118, 60, 2, 628, 631, 5, 126, 64, 2, 629, 631, 5, 128, 65, 2, 630, 627, 3, 2, 2, 2, 630, 628, 3, 2, 2, 2, 630, 629, 3, 2, 2, 2, 631, 125, 3, 2, 2, 2, 632, 633, 5, 130, 66, 2, 633, 634, 5, 118, 60, 2, 634, 127, 3, 2, 2, 2, 635, 636, 5, 132, 67, 2, 636, 637, 5, 118, 60, 2, 637, 129, 3, 2, 2, 2, 638, 639, 9, 8, 2, 2, 639, 131, 3, 2, 2, 2, 640, 641, 9, 9, 2, 2, 641, 133, 3, 2, 2, 2, 642, 648, 5, 124, 63, 2, 643, 644, 5, 124, 63, 2, 644, 645, 7, 9, 2, 2, 645, 646, 5, 166, 84, 2, 646, 648, 3, 2, 2, 2, 647, 642, 3, 2, 2, 2, 647, 643, 3, 2, 2, 2, 648, 135, 3, 2, 2, 2, 649, 650, 8, 69, 1, 2, 650, 651, 5, 134, 68, 2, 651, 657, 3, 2, 2, 2, 652, 653, 12, 3, 2, 2, 653, 654, 9, 10, 2, 2, 654, 656, 5, 134, 68, 2, 655, 652, 3, 2, 2, 2, 656, 659, 3, 2, 2, 2, 657, 655, 3, 2, 2, 2, 657, 658, 3, 2, 2, 2, 658, 137, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 660, 661, 8, 70, 1, 2, 661, 662, 5, 136, 69, 2, 662, 668, 3, 2, 2, 2, 663, 664, 12, 3, 2, 2, 664, 665, 9, 11, 2, 2, 665, 667, 5, 136, 69, 2, 666, 663, 3, 2, 2, 2, 667, 670, 3, 2, 2, 2, 668, 666, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 139, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 671, 672, 8, 71, 1, 2, 672, 673, 5, 138, 70, 2, 673, 680, 3, 2, 2, 2, 674, 675, 12, 3, 2, 2, 675, 676, 5, 142, 72, 2, 676, 677, 5, 148, 75, 2, 677, 679, 3, 2, 2, 2, 678, 674, 3, 2, 2, 2, 679, 682, 3, 2, 2, 2, 680, 678, 3, 2, 2, 2, 680, 681, 3, 2, 2, 2, 681, 141, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 683, 684, 9, 12, 2, 2, 684, 143, 3, 2, 2, 2, 685, 686, 8, 73, 1, 2, 686, 687, 5, 140, 71, 2, 687, 693, 3, 2, 2, 2, 688, 689, 12, 3, 2, 2, 689, 690, 9, 13, 2, 2, 690, 692, 5, 140, 71, 2, 691, 688, 3, 2, 2, 2, 692, 695, 3, 2, 2, 2, 693, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 145, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 696, 697, 8, 74, 1, 2, 697, 698, 5, 144, 73, 2, 698, 704, 3, 2, 2, 2, 699, 700, 12, 3, 2, 2, 700, 701, 9, 14, 2, 2, 701, 703, 5, 144, 73, 2, 702, 699, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 147, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 708, 8, 75, 1, 2, 708, 709, 5, 146, 74, 2, 709, 715, 3, 2, 2, 2, 710, 711, 12, 3, 2, 2, 711, 712, 7, 70, 2, 2, 712, 714, 5, 146, 74, 2, 713, 710, 3, 2, 2, 2, 714, 717, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 149, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 719, 8, 76, 1, 2, 719, 720, 5, 148, 75, 2, 720, 726, 3, 2, 2, 2, 721, 722, 12, 3, 2, 2, 722, 723, 7, 72, 2, 2, 723, 725, 5, 148, 75, 2, 724, 721, 3, 2, 2, 2, 725, 728, 3, 2, 2, 2, 726, 724, 3, 2, 2, 2, 726, 727, 3, 2, 2, 2, 727, 151, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 729, 730, 8, 77, 1, 2, 730, 731, 5, 150, 76, 2, 731, 737, 3, 2, 2, 2, 732, 733, 12, 3, 2, 2, 733, 734, 7, 71, 2, 2, 734, 736, 5, 150, 76, 2, 735, 732, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 153, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 740, 741, 8, 78, 1, 2, 741, 742, 5, 152, 77, 2, 742, 748, 3, 2, 2, 2, 743, 744, 12, 3, 2, 2, 744, 745, 7, 55, 2, 2, 745, 747, 5, 152, 77, 2, 746, 743, 3, 2, 2, 2, 747, 750, 3, 2, 2, 2, 748, 746, 3, 2, 2, 2, 748, 749, 3, 2, 2, 2, 749, 155, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 751, 752, 8, 79, 1, 2, 752, 753, 5, 154, 78, 2, 753, 759, 3, 2, 2, 2, 754, 755, 12, 3, 2, 2, 755, 756, 7, 56, 2, 2, 756, 758, 5, 154, 78, 2, 757, 754, 3, 2, 2, 2, 758, 761, 3, 2, 2, 2, 759, 757, 3, 2, 2, 2, 759, 760, 3, 2, 2, 2, 760, 157, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 762, 770, 5, 156, 79, 2, 763, 764, 5, 156, 79, 2, 764, 765, 7, 38, 2, 2, 765, 766, 5, 158, 80, 2, 766, 767, 7, 39, 2, 2, 767, 768, 5, 158, 80, 2, 768, 770, 3, 2, 2, 2, 769, 762, 3, 2, 2, 2, 769, 763, 3, 2, 2, 2, 770, 159, 3, 2, 2, 2, 771, 777, 5, 158, 80, 2, 772, 773, 5, 108, 55, 2, 773, 774, 5, 162, 82, 2, 774, 775, 5, 160, 81, 2, 775, 777, 3, 2, 2, 2, 776, 771, 3, 2, 2, 2, 776, 772, 3, 2, 2, 2, 777, 161, 3, 2, 2, 2, 778, 779, 9, 15, 2, 2, 779, 163, 3, 2, 2, 2, 780, 785, 5, 160, 81, 2, 781, 782, 7, 36, 2, 2, 782, 784, 5, 160, 81, 2, 783, 781, 3, 2, 2, 2, 784, 787, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 165, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 788, 792, 5, 168, 85, 2, 789, 792, 5, 170, 86, 2, 790, 792, 5, 172, 87, 2, 791, 788, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 791, 790, 3, 2, 2, 2, 792, 167, 3, 2, 2, 2, 793, 794, 5, 174, 88, 2, 794, 169, 3, 2, 2, 2, 795, 796, 5, 174, 88, 2, 796, 805, 7, 66, 2, 2, 797, 802, 5, 166, 84, 2, 798, 799, 7, 36, 2, 2, 799, 801, 5, 166, 84, 2, 800, 798, 3, 2, 2, 2, 801, 804, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 805, 797, 3, 2, 2, 2, 805, 806, 3, 2, 2, 2, 806, 807, 3, 2, 2, 2, 807, 808, 7, 68, 2, 2, 808, 171, 3, 2, 2, 2, 809, 810, 7, 32, 2, 2, 810, 811, 7, 40, 2, 2, 811, 812, 5, 174, 88, 2, 812, 813, 7, 41, 2, 2, 813, 173, 3, 2, 2, 2, 814, 815, 9, 16, 2, 2, 815, 175, 3, 2, 2, 2, 77, 177, 184, 191, 196, 204, 216, 228, 234, 241, 254, 261, 271, 283, 285, 293, 302, 308, 313, 324, 329, 340, 349, 359, 372, 377, 383, 387, 393, 399, 423, 437, 441, 449, 463, 471, 479, 483, 488, 491, 496, 499, 509, 512, 515, 525, 528, 531, 547, 556, 561, 578, 582, 584, 592, 606, 612, 619, 630, 647, 657, 668, 680, 693, 704, 715, 726, 737, 748, 759, 769, 776, 785, 791, 802, 805] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 91, 830, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 3, 2, 5, 2, 180, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 4, 3, 4, 3, 5, 6, 5, 192, 10, 5, 13, 5, 14, 5, 193, 3, 6, 3, 6, 3, 6, 5, 6, 199, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 207, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 219, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 231, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 237, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 242, 10, 15, 12, 15, 14, 15, 245, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 255, 10, 17, 12, 17, 14, 17, 258, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 264, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 274, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 286, 10, 21, 12, 21, 14, 21, 289, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 296, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 305, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 311, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 316, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 327, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 332, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 343, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 352, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 360, 10, 31, 12, 31, 14, 31, 363, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 375, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 380, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 5, 34, 390, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 396, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 402, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 426, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 440, 10, 39, 3, 40, 3, 40, 5, 40, 444, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 452, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 466, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 472, 10, 47, 12, 47, 14, 47, 475, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 480, 10, 47, 12, 47, 14, 47, 483, 11, 47, 3, 47, 5, 47, 486, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 491, 10, 48, 3, 48, 5, 48, 494, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 499, 10, 49, 3, 49, 5, 49, 502, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 510, 10, 51, 12, 51, 14, 51, 513, 11, 51, 5, 51, 515, 10, 51, 3, 51, 5, 51, 518, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 526, 10, 52, 12, 52, 14, 52, 529, 11, 52, 5, 52, 531, 10, 52, 3, 52, 5, 52, 534, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 550, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 559, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 564, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 3, 55, 3, 55, 7, 55, 585, 10, 55, 12, 55, 14, 55, 588, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 593, 10, 56, 12, 56, 14, 56, 596, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 609, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 615, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 622, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 633, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 650, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 658, 10, 69, 12, 69, 14, 69, 661, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 669, 10, 70, 12, 70, 14, 70, 672, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 681, 10, 71, 12, 71, 14, 71, 684, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 694, 10, 73, 12, 73, 14, 73, 697, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 705, 10, 74, 12, 74, 14, 74, 708, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 716, 10, 75, 12, 75, 14, 75, 719, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 727, 10, 76, 12, 76, 14, 76, 730, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 738, 10, 77, 12, 77, 14, 77, 741, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 749, 10, 78, 12, 78, 14, 78, 752, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 760, 10, 79, 12, 79, 14, 79, 763, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 771, 10, 80, 12, 80, 14, 80, 774, 11, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 783, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 790, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 7, 84, 797, 10, 84, 12, 84, 14, 84, 800, 11, 84, 3, 85, 3, 85, 3, 85, 5, 85, 805, 10, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 814, 10, 87, 12, 87, 14, 87, 817, 11, 87, 5, 87, 819, 10, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 2, 2, 14, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 158, 90, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 2, 17, 3, 2, 8, 9, 3, 2, 15, 16, 3, 2, 31, 32, 3, 2, 81, 82, 4, 2, 80, 80, 83, 83, 3, 2, 34, 36, 4, 2, 49, 49, 51, 51, 6, 2, 48, 48, 50, 50, 58, 58, 74, 74, 3, 2, 52, 55, 4, 2, 48, 48, 50, 50, 3, 2, 75, 77, 3, 2, 67, 70, 3, 2, 65, 66, 3, 2, 59, 64, 4, 2, 34, 36, 79, 79, 2, 840, 2, 179, 3, 2, 2, 2, 4, 184, 3, 2, 2, 2, 6, 188, 3, 2, 2, 2, 8, 191, 3, 2, 2, 2, 10, 198, 3, 2, 2, 2, 12, 206, 3, 2, 2, 2, 14, 208, 3, 2, 2, 2, 16, 211, 3, 2, 2, 2, 18, 213, 3, 2, 2, 2, 20, 220, 3, 2, 2, 2, 22, 222, 3, 2, 2, 2, 24, 224, 3, 2, 2, 2, 26, 226, 3, 2, 2, 2, 28, 238, 3, 2, 2, 2, 30, 246, 3, 2, 2, 2, 32, 250, 3, 2, 2, 2, 34, 263, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 280, 3, 2, 2, 2, 42, 295, 3, 2, 2, 2, 44, 297, 3, 2, 2, 2, 46, 301, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 326, 3, 2, 2, 2, 52, 328, 3, 2, 2, 2, 54, 335, 3, 2, 2, 2, 56, 342, 3, 2, 2, 2, 58, 344, 3, 2, 2, 2, 60, 353, 3, 2, 2, 2, 62, 374, 3, 2, 2, 2, 64, 379, 3, 2, 2, 2, 66, 381, 3, 2, 2, 2, 68, 406, 3, 2, 2, 2, 70, 412, 3, 2, 2, 2, 72, 420, 3, 2, 2, 2, 74, 423, 3, 2, 2, 2, 76, 439, 3, 2, 2, 2, 78, 441, 3, 2, 2, 2, 80, 453, 3, 2, 2, 2, 82, 457, 3, 2, 2, 2, 84, 459, 3, 2, 2, 2, 86, 461, 3, 2, 2, 2, 88, 465, 3, 2, 2, 2, 90, 467, 3, 2, 2, 2, 92, 485, 3, 2, 2, 2, 94, 493, 3, 2, 2, 2, 96, 501, 3, 2, 2, 2, 98, 503, 3, 2, 2, 2, 100, 505, 3, 2, 2, 2, 102, 521, 3, 2, 2, 2, 104, 537, 3, 2, 2, 2, 106, 541, 3, 2, 2, 2, 108, 563, 3, 2, 2, 2, 110, 589, 3, 2, 2, 2, 112, 597, 3, 2, 2, 2, 114, 600, 3, 2, 2, 2, 116, 604, 3, 2, 2, 2, 118, 621, 3, 2, 2, 2, 120, 623, 3, 2, 2, 2, 122, 626, 3, 2, 2, 2, 124, 632, 3, 2, 2, 2, 126, 634, 3, 2, 2, 2, 128, 637, 3, 2, 2, 2, 130, 640, 3, 2, 2, 2, 132, 642, 3, 2, 2, 2, 134, 649, 3, 2, 2, 2, 136, 651, 3, 2, 2, 2, 138, 662, 3, 2, 2, 2, 140, 673, 3, 2, 2, 2, 142, 685, 3, 2, 2, 2, 144, 687, 3, 2, 2, 2, 146, 698, 3, 2, 2, 2, 148, 709, 3, 2, 2, 2, 150, 720, 3, 2, 2, 2, 152, 731, 3, 2, 2, 2, 154, 742, 3, 2, 2, 2, 156, 753, 3, 2, 2, 2, 158, 764, 3, 2, 2, 2, 160, 782, 3, 2, 2, 2, 162, 789, 3, 2, 2, 2, 164, 791, 3, 2, 2, 2, 166, 793, 3, 2, 2, 2, 168, 804, 3, 2, 2, 2, 170, 806, 3, 2, 2, 2, 172, 808, 3, 2, 2, 2, 174, 822, 3, 2, 2, 2, 176, 827, 3, 2, 2, 2, 178, 180, 5, 4, 3, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 182, 7, 2, 2, 3, 182, 3, 3, 2, 2, 2, 183, 185, 5, 6, 4, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 5, 3, 2, 2, 2, 188, 189, 5, 8, 5, 2, 189, 7, 3, 2, 2, 2, 190, 192, 5, 10, 6, 2, 191, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 9, 3, 2, 2, 2, 195, 199, 5, 50, 26, 2, 196, 199, 5, 12, 7, 2, 197, 199, 7, 38, 2, 2, 198, 195, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 11, 3, 2, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 38, 2, 2, 202, 207, 3, 2, 2, 2, 203, 207, 5, 26, 14, 2, 204, 207, 5, 32, 17, 2, 205, 207, 5, 40, 21, 2, 206, 200, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 13, 3, 2, 2, 2, 208, 209, 5, 16, 9, 2, 209, 210, 5, 18, 10, 2, 210, 15, 3, 2, 2, 2, 211, 212, 9, 2, 2, 2, 212, 17, 3, 2, 2, 2, 213, 214, 5, 22, 12, 2, 214, 215, 7, 40, 2, 2, 215, 218, 5, 168, 85, 2, 216, 217, 7, 59, 2, 2, 217, 219, 5, 20, 11, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 19, 3, 2, 2, 2, 220, 221, 5, 162, 82, 2, 221, 21, 3, 2, 2, 2, 222, 223, 5, 24, 13, 2, 223, 23, 3, 2, 2, 2, 224, 225, 7, 79, 2, 2, 225, 25, 3, 2, 2, 2, 226, 227, 7, 23, 2, 2, 227, 228, 5, 22, 12, 2, 228, 230, 7, 41, 2, 2, 229, 231, 5, 28, 15, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 7, 42, 2, 2, 233, 234, 7, 26, 2, 2, 234, 236, 5, 168, 85, 2, 235, 237, 5, 52, 27, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 27, 3, 2, 2, 2, 238, 243, 5, 30, 16, 2, 239, 240, 7, 37, 2, 2, 240, 242, 5, 30, 16, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 29, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 247, 5, 22, 12, 2, 247, 248, 7, 40, 2, 2, 248, 249, 5, 168, 85, 2, 249, 31, 3, 2, 2, 2, 250, 251, 7, 28, 2, 2, 251, 252, 5, 22, 12, 2, 252, 256, 7, 46, 2, 2, 253, 255, 5, 34, 18, 2, 254, 253, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 47, 2, 2, 260, 33, 3, 2, 2, 2, 261, 264, 5, 36, 19, 2, 262, 264, 5, 38, 20, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 35, 3, 2, 2, 2, 265, 266, 5, 22, 12, 2, 266, 267, 7, 40, 2, 2, 267, 268, 5, 168, 85, 2, 268, 269, 7, 38, 2, 2, 269, 37, 3, 2, 2, 2, 270, 271, 5, 22, 12, 2, 271, 273, 7, 41, 2, 2, 272, 274, 5, 28, 15, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 42, 2, 2, 276, 277, 7, 40, 2, 2, 277, 278, 5, 168, 85, 2, 278, 279, 7, 38, 2, 2, 279, 39, 3, 2, 2, 2, 280, 281, 7, 27, 2, 2, 281, 282, 5, 22, 12, 2, 282, 287, 7, 46, 2, 2, 283, 286, 5, 42, 22, 2, 284, 286, 7, 38, 2, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 289, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 290, 291, 7, 47, 2, 2, 291, 41, 3, 2, 2, 2, 292, 296, 5, 44, 23, 2, 293, 296, 5, 46, 24, 2, 294, 296, 5, 48, 25, 2, 295, 292, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 43, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 299, 7, 40, 2, 2, 299, 300, 5, 168, 85, 2, 300, 45, 3, 2, 2, 2, 301, 302, 5, 22, 12, 2, 302, 304, 7, 41, 2, 2, 303, 305, 5, 28, 15, 2, 304, 303, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 307, 7, 42, 2, 2, 307, 308, 7, 40, 2, 2, 308, 310, 5, 168, 85, 2, 309, 311, 5, 52, 27, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 47, 3, 2, 2, 2, 312, 313, 7, 29, 2, 2, 313, 315, 7, 41, 2, 2, 314, 316, 5, 28, 15, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 7, 42, 2, 2, 318, 319, 5, 52, 27, 2, 319, 49, 3, 2, 2, 2, 320, 327, 5, 54, 28, 2, 321, 327, 5, 56, 29, 2, 322, 327, 5, 64, 33, 2, 323, 327, 5, 72, 37, 2, 324, 327, 5, 74, 38, 2, 325, 327, 5, 52, 27, 2, 326, 320, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 326, 322, 3, 2, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 325, 3, 2, 2, 2, 327, 51, 3, 2, 2, 2, 328, 329, 6, 27, 2, 2, 329, 331, 7, 46, 2, 2, 330, 332, 5, 8, 5, 2, 331, 330, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 7, 47, 2, 2, 334, 53, 3, 2, 2, 2, 335, 336, 8, 28, 1, 2, 336, 337, 5, 166, 84, 2, 337, 338, 7, 38, 2, 2, 338, 339, 8, 28, 1, 2, 339, 55, 3, 2, 2, 2, 340, 343, 5, 58, 30, 2, 341, 343, 5, 60, 31, 2, 342, 340, 3, 2, 2, 2, 342, 341, 3, 2, 2, 2, 343, 57, 3, 2, 2, 2, 344, 345, 7, 19, 2, 2, 345, 346, 7, 41, 2, 2, 346, 347, 5, 166, 84, 2, 347, 348, 7, 42, 2, 2, 348, 351, 5, 50, 26, 2, 349, 350, 7, 20, 2, 2, 350, 352, 5, 50, 26, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 59, 3, 2, 2, 2, 353, 354, 7, 12, 2, 2, 354, 355, 7, 41, 2, 2, 355, 356, 5, 166, 84, 2, 356, 357, 7, 42, 2, 2, 357, 361, 7, 46, 2, 2, 358, 360, 5, 62, 32, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 61, 3, 2, 2, 2, 366, 367, 7, 13, 2, 2, 367, 368, 5, 166, 84, 2, 368, 369, 7, 40, 2, 2, 369, 370, 5, 50, 26, 2, 370, 375, 3, 2, 2, 2, 371, 372, 7, 14, 2, 2, 372, 373, 7, 40, 2, 2, 373, 375, 5, 50, 26, 2, 374, 366, 3, 2, 2, 2, 374, 371, 3, 2, 2, 2, 375, 63, 3, 2, 2, 2, 376, 380, 5, 66, 34, 2, 377, 380, 5, 68, 35, 2, 378, 380, 5, 70, 36, 2, 379, 376, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 378, 3, 2, 2, 2, 380, 65, 3, 2, 2, 2, 381, 382, 7, 21, 2, 2, 382, 389, 7, 41, 2, 2, 383, 386, 5, 14, 8, 2, 384, 386, 5, 166, 84, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 8, 34, 1, 2, 388, 390, 3, 2, 2, 2, 389, 385, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 395, 7, 38, 2, 2, 392, 393, 5, 166, 84, 2, 393, 394, 8, 34, 1, 2, 394, 396, 3, 2, 2, 2, 395, 392, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 401, 7, 38, 2, 2, 398, 399, 5, 166, 84, 2, 399, 400, 8, 34, 1, 2, 400, 402, 3, 2, 2, 2, 401, 398, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 7, 42, 2, 2, 404, 405, 5, 50, 26, 2, 405, 67, 3, 2, 2, 2, 406, 407, 7, 18, 2, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 166, 84, 2, 409, 410, 7, 42, 2, 2, 410, 411, 5, 50, 26, 2, 411, 69, 3, 2, 2, 2, 412, 413, 7, 17, 2, 2, 413, 414, 5, 50, 26, 2, 414, 415, 7, 18, 2, 2, 415, 416, 7, 41, 2, 2, 416, 417, 5, 166, 84, 2, 417, 418, 7, 42, 2, 2, 418, 419, 7, 38, 2, 2, 419, 71, 3, 2, 2, 2, 420, 421, 9, 3, 2, 2, 421, 422, 7, 38, 2, 2, 422, 73, 3, 2, 2, 2, 423, 425, 7, 24, 2, 2, 424, 426, 5, 166, 84, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 38, 2, 2, 428, 75, 3, 2, 2, 2, 429, 440, 5, 80, 41, 2, 430, 440, 5, 78, 40, 2, 431, 440, 5, 100, 51, 2, 432, 440, 5, 102, 52, 2, 433, 440, 5, 82, 42, 2, 434, 440, 5, 84, 43, 2, 435, 440, 5, 90, 46, 2, 436, 440, 5, 92, 47, 2, 437, 440, 5, 98, 50, 2, 438, 440, 5, 106, 54, 2, 439, 429, 3, 2, 2, 2, 439, 430, 3, 2, 2, 2, 439, 431, 3, 2, 2, 2, 439, 432, 3, 2, 2, 2, 439, 433, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 435, 3, 2, 2, 2, 439, 436, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 77, 3, 2, 2, 2, 441, 443, 7, 41, 2, 2, 442, 444, 5, 28, 15, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 7, 42, 2, 2, 446, 447, 7, 40, 2, 2, 447, 448, 5, 168, 85, 2, 448, 451, 7, 26, 2, 2, 449, 452, 5, 166, 84, 2, 450, 452, 5, 52, 27, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 79, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 455, 5, 166, 84, 2, 455, 456, 7, 42, 2, 2, 456, 81, 3, 2, 2, 2, 457, 458, 9, 4, 2, 2, 458, 83, 3, 2, 2, 2, 459, 460, 5, 86, 44, 2, 460, 85, 3, 2, 2, 2, 461, 462, 7, 79, 2, 2, 462, 87, 3, 2, 2, 2, 463, 466, 5, 86, 44, 2, 464, 466, 5, 90, 46, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 89, 3, 2, 2, 2, 467, 468, 9, 5, 2, 2, 468, 91, 3, 2, 2, 2, 469, 473, 7, 86, 2, 2, 470, 472, 5, 94, 48, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 486, 7, 88, 2, 2, 477, 481, 7, 87, 2, 2, 478, 480, 5, 96, 49, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 90, 2, 2, 485, 469, 3, 2, 2, 2, 485, 477, 3, 2, 2, 2, 486, 93, 3, 2, 2, 2, 487, 494, 7, 89, 2, 2, 488, 490, 7, 3, 2, 2, 489, 491, 5, 166, 84, 2, 490, 489, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 494, 7, 45, 2, 2, 493, 487, 3, 2, 2, 2, 493, 488, 3, 2, 2, 2, 494, 95, 3, 2, 2, 2, 495, 502, 7, 91, 2, 2, 496, 498, 7, 3, 2, 2, 497, 499, 5, 166, 84, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 7, 45, 2, 2, 501, 495, 3, 2, 2, 2, 501, 496, 3, 2, 2, 2, 502, 97, 3, 2, 2, 2, 503, 504, 9, 6, 2, 2, 504, 99, 3, 2, 2, 2, 505, 514, 7, 43, 2, 2, 506, 511, 5, 166, 84, 2, 507, 508, 7, 37, 2, 2, 508, 510, 5, 166, 84, 2, 509, 507, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 514, 506, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 518, 7, 37, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 7, 44, 2, 2, 520, 101, 3, 2, 2, 2, 521, 530, 7, 46, 2, 2, 522, 527, 5, 104, 53, 2, 523, 524, 7, 37, 2, 2, 524, 526, 5, 104, 53, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 534, 7, 37, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 47, 2, 2, 536, 103, 3, 2, 2, 2, 537, 538, 5, 88, 45, 2, 538, 539, 7, 40, 2, 2, 539, 540, 5, 166, 84, 2, 540, 105, 3, 2, 2, 2, 541, 542, 9, 7, 2, 2, 542, 107, 3, 2, 2, 2, 543, 544, 8, 55, 1, 2, 544, 564, 5, 76, 39, 2, 545, 546, 7, 25, 2, 2, 546, 547, 5, 108, 55, 2, 547, 549, 7, 41, 2, 2, 548, 550, 5, 110, 56, 2, 549, 548, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 7, 42, 2, 2, 552, 553, 8, 55, 1, 2, 553, 564, 3, 2, 2, 2, 554, 555, 7, 30, 2, 2, 555, 556, 5, 168, 85, 2, 556, 558, 7, 41, 2, 2, 557, 559, 5, 110, 56, 2, 558, 557, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 7, 42, 2, 2, 561, 562, 8, 55, 1, 2, 562, 564, 3, 2, 2, 2, 563, 543, 3, 2, 2, 2, 563, 545, 3, 2, 2, 2, 563, 554, 3, 2, 2, 2, 564, 586, 3, 2, 2, 2, 565, 566, 12, 8, 2, 2, 566, 567, 5, 112, 57, 2, 567, 568, 8, 55, 1, 2, 568, 585, 3, 2, 2, 2, 569, 570, 12, 7, 2, 2, 570, 571, 5, 114, 58, 2, 571, 572, 8, 55, 1, 2, 572, 585, 3, 2, 2, 2, 573, 574, 12, 6, 2, 2, 574, 575, 5, 116, 59, 2, 575, 576, 8, 55, 1, 2, 576, 585, 3, 2, 2, 2, 577, 578, 12, 5, 2, 2, 578, 580, 7, 41, 2, 2, 579, 581, 5, 110, 56, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 42, 2, 2, 583, 585, 8, 55, 1, 2, 584, 565, 3, 2, 2, 2, 584, 569, 3, 2, 2, 2, 584, 573, 3, 2, 2, 2, 584, 577, 3, 2, 2, 2, 585, 588, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 109, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 589, 594, 5, 162, 82, 2, 590, 591, 7, 37, 2, 2, 591, 593, 5, 162, 82, 2, 592, 590, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 111, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 598, 7, 78, 2, 2, 598, 599, 5, 86, 44, 2, 599, 113, 3, 2, 2, 2, 600, 601, 7, 43, 2, 2, 601, 602, 5, 166, 84, 2, 602, 603, 7, 44, 2, 2, 603, 115, 3, 2, 2, 2, 604, 608, 7, 43, 2, 2, 605, 606, 5, 166, 84, 2, 606, 607, 8, 59, 1, 2, 607, 609, 3, 2, 2, 2, 608, 605, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 614, 7, 40, 2, 2, 611, 612, 5, 166, 84, 2, 612, 613, 8, 59, 1, 2, 613, 615, 3, 2, 2, 2, 614, 611, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 7, 44, 2, 2, 617, 117, 3, 2, 2, 2, 618, 622, 5, 108, 55, 2, 619, 622, 5, 120, 61, 2, 620, 622, 5, 122, 62, 2, 621, 618, 3, 2, 2, 2, 621, 619, 3, 2, 2, 2, 621, 620, 3, 2, 2, 2, 622, 119, 3, 2, 2, 2, 623, 624, 5, 108, 55, 2, 624, 625, 5, 130, 66, 2, 625, 121, 3, 2, 2, 2, 626, 627, 7, 33, 2, 2, 627, 628, 5, 162, 82, 2, 628, 123, 3, 2, 2, 2, 629, 633, 5, 118, 60, 2, 630, 633, 5, 126, 64, 2, 631, 633, 5, 128, 65, 2, 632, 629, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 125, 3, 2, 2, 2, 634, 635, 5, 130, 66, 2, 635, 636, 5, 118, 60, 2, 636, 127, 3, 2, 2, 2, 637, 638, 5, 132, 67, 2, 638, 639, 5, 118, 60, 2, 639, 129, 3, 2, 2, 2, 640, 641, 9, 8, 2, 2, 641, 131, 3, 2, 2, 2, 642, 643, 9, 9, 2, 2, 643, 133, 3, 2, 2, 2, 644, 650, 5, 124, 63, 2, 645, 646, 5, 124, 63, 2, 646, 647, 7, 10, 2, 2, 647, 648, 5, 168, 85, 2, 648, 650, 3, 2, 2, 2, 649, 644, 3, 2, 2, 2, 649, 645, 3, 2, 2, 2, 650, 135, 3, 2, 2, 2, 651, 652, 8, 69, 1, 2, 652, 653, 5, 134, 68, 2, 653, 659, 3, 2, 2, 2, 654, 655, 12, 3, 2, 2, 655, 656, 9, 10, 2, 2, 656, 658, 5, 134, 68, 2, 657, 654, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 137, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 663, 8, 70, 1, 2, 663, 664, 5, 136, 69, 2, 664, 670, 3, 2, 2, 2, 665, 666, 12, 3, 2, 2, 666, 667, 9, 11, 2, 2, 667, 669, 5, 136, 69, 2, 668, 665, 3, 2, 2, 2, 669, 672, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 139, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 673, 674, 8, 71, 1, 2, 674, 675, 5, 138, 70, 2, 675, 682, 3, 2, 2, 2, 676, 677, 12, 3, 2, 2, 677, 678, 5, 142, 72, 2, 678, 679, 5, 150, 76, 2, 679, 681, 3, 2, 2, 2, 680, 676, 3, 2, 2, 2, 681, 684, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 141, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 685, 686, 9, 12, 2, 2, 686, 143, 3, 2, 2, 2, 687, 688, 8, 73, 1, 2, 688, 689, 5, 140, 71, 2, 689, 695, 3, 2, 2, 2, 690, 691, 12, 3, 2, 2, 691, 692, 7, 7, 2, 2, 692, 694, 5, 168, 85, 2, 693, 690, 3, 2, 2, 2, 694, 697, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 145, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 698, 699, 8, 74, 1, 2, 699, 700, 5, 144, 73, 2, 700, 706, 3, 2, 2, 2, 701, 702, 12, 3, 2, 2, 702, 703, 9, 13, 2, 2, 703, 705, 5, 140, 71, 2, 704, 701, 3, 2, 2, 2, 705, 708, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 147, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 709, 710, 8, 75, 1, 2, 710, 711, 5, 146, 74, 2, 711, 717, 3, 2, 2, 2, 712, 713, 12, 3, 2, 2, 713, 714, 9, 14, 2, 2, 714, 716, 5, 146, 74, 2, 715, 712, 3, 2, 2, 2, 716, 719, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 149, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 720, 721, 8, 76, 1, 2, 721, 722, 5, 148, 75, 2, 722, 728, 3, 2, 2, 2, 723, 724, 12, 3, 2, 2, 724, 725, 7, 71, 2, 2, 725, 727, 5, 148, 75, 2, 726, 723, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 151, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 8, 77, 1, 2, 732, 733, 5, 150, 76, 2, 733, 739, 3, 2, 2, 2, 734, 735, 12, 3, 2, 2, 735, 736, 7, 73, 2, 2, 736, 738, 5, 150, 76, 2, 737, 734, 3, 2, 2, 2, 738, 741, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 153, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 742, 743, 8, 78, 1, 2, 743, 744, 5, 152, 77, 2, 744, 750, 3, 2, 2, 2, 745, 746, 12, 3, 2, 2, 746, 747, 7, 72, 2, 2, 747, 749, 5, 152, 77, 2, 748, 745, 3, 2, 2, 2, 749, 752, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 155, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 753, 754, 8, 79, 1, 2, 754, 755, 5, 154, 78, 2, 755, 761, 3, 2, 2, 2, 756, 757, 12, 3, 2, 2, 757, 758, 7, 56, 2, 2, 758, 760, 5, 154, 78, 2, 759, 756, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 157, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 764, 765, 8, 80, 1, 2, 765, 766, 5, 156, 79, 2, 766, 772, 3, 2, 2, 2, 767, 768, 12, 3, 2, 2, 768, 769, 7, 57, 2, 2, 769, 771, 5, 156, 79, 2, 770, 767, 3, 2, 2, 2, 771, 774, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 772, 773, 3, 2, 2, 2, 773, 159, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 775, 783, 5, 158, 80, 2, 776, 777, 5, 158, 80, 2, 777, 778, 7, 39, 2, 2, 778, 779, 5, 160, 81, 2, 779, 780, 7, 40, 2, 2, 780, 781, 5, 160, 81, 2, 781, 783, 3, 2, 2, 2, 782, 775, 3, 2, 2, 2, 782, 776, 3, 2, 2, 2, 783, 161, 3, 2, 2, 2, 784, 790, 5, 160, 81, 2, 785, 786, 5, 108, 55, 2, 786, 787, 5, 164, 83, 2, 787, 788, 5, 162, 82, 2, 788, 790, 3, 2, 2, 2, 789, 784, 3, 2, 2, 2, 789, 785, 3, 2, 2, 2, 790, 163, 3, 2, 2, 2, 791, 792, 9, 15, 2, 2, 792, 165, 3, 2, 2, 2, 793, 798, 5, 162, 82, 2, 794, 795, 7, 37, 2, 2, 795, 797, 5, 162, 82, 2, 796, 794, 3, 2, 2, 2, 797, 800, 3, 2, 2, 2, 798, 796, 3, 2, 2, 2, 798, 799, 3, 2, 2, 2, 799, 167, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 801, 805, 5, 170, 86, 2, 802, 805, 5, 172, 87, 2, 803, 805, 5, 174, 88, 2, 804, 801, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 803, 3, 2, 2, 2, 805, 169, 3, 2, 2, 2, 806, 807, 5, 176, 89, 2, 807, 171, 3, 2, 2, 2, 808, 809, 5, 176, 89, 2, 809, 818, 7, 67, 2, 2, 810, 815, 5, 168, 85, 2, 811, 812, 7, 37, 2, 2, 812, 814, 5, 168, 85, 2, 813, 811, 3, 2, 2, 2, 814, 817, 3, 2, 2, 2, 815, 813, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 819, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 818, 810, 3, 2, 2, 2, 818, 819, 3, 2, 2, 2, 819, 820, 3, 2, 2, 2, 820, 821, 7, 69, 2, 2, 821, 173, 3, 2, 2, 2, 822, 823, 7, 33, 2, 2, 823, 824, 7, 41, 2, 2, 824, 825, 5, 176, 89, 2, 825, 826, 7, 42, 2, 2, 826, 175, 3, 2, 2, 2, 827, 828, 9, 16, 2, 2, 828, 177, 3, 2, 2, 2, 78, 179, 186, 193, 198, 206, 218, 230, 236, 243, 256, 263, 273, 285, 287, 295, 304, 310, 315, 326, 331, 342, 351, 361, 374, 379, 385, 389, 395, 401, 425, 439, 443, 451, 465, 473, 481, 485, 490, 493, 498, 501, 511, 514, 517, 527, 530, 533, 549, 558, 563, 580, 584, 586, 594, 608, 614, 621, 632, 649, 659, 670, 682, 695, 706, 717, 728, 739, 750, 761, 772, 782, 789, 798, 804, 815, 818] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens index dfd693766..9842baf9c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.tokens @@ -2,157 +2,159 @@ FStringExpStart=1 BlockComment=2 LineComment=3 Pragma=4 -Const=5 -Var=6 -As=7 -Spread=8 -Switch=9 -Case=10 -Default=11 -Break=12 -Continue=13 -Do=14 -While=15 -If=16 -Else=17 -For=18 -Enum=19 -DefFunc=20 -Return=21 -CallFunc=22 -RetIndicator=23 -Class=24 -Interface=25 -Constructor=26 -New=27 -True=28 -False=29 -Typeof=30 -Void=31 -Null=32 -Undefined=33 -Comma=34 -SemiColon=35 -QuestionMark=36 -Colon=37 -LeftParen=38 -RightParen=39 -LeftBracket=40 -RightBracket=41 -FStringExpEnd=42 -LeftBrace=43 -RightBrace=44 -Plus=45 -PlusPlus=46 -Minus=47 -MinusMinus=48 -Star=49 -Div=50 -Mod=51 -PowerTo=52 -AndAnd=53 -OrOr=54 -Not=55 -Assign=56 -PlusAssign=57 -MinusAssign=58 -StarAssign=59 -DivAssign=60 -ModAssign=61 -Equal=62 -NotEqual=63 -Less=64 -LessEqual=65 -Greater=66 -GreaterEqual=67 -BitwiseAnd=68 -BitwiseOr=69 -BitwiseXor=70 -BitwiseNot=71 -BitwiseZeroFillLeftShift=72 -BitwiseSignedRightShift=73 -BitwiseZeroFillRightShift=74 -Dot=75 -Identifier=76 -IntegerConstant=77 -SingleQuoteStringLiteral=78 -DoubleQuoteStringLiteral=79 -FloatingConstant=80 -Whitespace=81 -Newline=82 -FStringSingleQuoteStart=83 -FStringDoubleQuoteStart=84 -FStringSingleQuoteEnd=85 -FStringSingleQuoteAtom=86 -FStringDoubleQuoteEnd=87 -FStringDoubleQuoteAtom=88 -'const'=5 -'var'=6 -'as'=7 -'...'=8 -'switch'=9 -'case'=10 -'default'=11 -'break'=12 -'continue'=13 -'do'=14 -'while'=15 -'if'=16 -'else'=17 -'for'=18 -'enum'=19 -'def'=20 -'return'=21 -'call'=22 -'->'=23 -'class'=24 -'interface'=25 -'constructor'=26 -'new'=27 -'true'=28 -'false'=29 -'typeof'=30 -'void'=31 -'null'=32 -'undefined'=33 -','=34 -';'=35 -'?'=36 -':'=37 -'('=38 -')'=39 -'['=40 -']'=41 -'{'=43 -'}'=44 -'+'=45 -'++'=46 -'-'=47 -'--'=48 -'*'=49 -'/'=50 -'%'=51 -'**'=52 -'&&'=53 -'||'=54 -'!'=55 -'='=56 -'+='=57 -'-='=58 -'*='=59 -'/='=60 -'%='=61 -'=='=62 -'!='=63 -'<'=64 -'<='=65 -'>'=66 -'>='=67 -'&'=68 -'|'=69 -'^'=70 -'~'=71 -'<<'=72 -'>>'=73 -'>>>'=74 -'.'=75 +InstanceOf=5 +Const=6 +Var=7 +As=8 +Spread=9 +Switch=10 +Case=11 +Default=12 +Break=13 +Continue=14 +Do=15 +While=16 +If=17 +Else=18 +For=19 +Enum=20 +DefFunc=21 +Return=22 +CallFunc=23 +RetIndicator=24 +Class=25 +Interface=26 +Constructor=27 +New=28 +True=29 +False=30 +Typeof=31 +Void=32 +Null=33 +Undefined=34 +Comma=35 +SemiColon=36 +QuestionMark=37 +Colon=38 +LeftParen=39 +RightParen=40 +LeftBracket=41 +RightBracket=42 +FStringExpEnd=43 +LeftBrace=44 +RightBrace=45 +Plus=46 +PlusPlus=47 +Minus=48 +MinusMinus=49 +Star=50 +Div=51 +Mod=52 +PowerTo=53 +AndAnd=54 +OrOr=55 +Not=56 +Assign=57 +PlusAssign=58 +MinusAssign=59 +StarAssign=60 +DivAssign=61 +ModAssign=62 +Equal=63 +NotEqual=64 +Less=65 +LessEqual=66 +Greater=67 +GreaterEqual=68 +BitwiseAnd=69 +BitwiseOr=70 +BitwiseXor=71 +BitwiseNot=72 +BitwiseZeroFillLeftShift=73 +BitwiseSignedRightShift=74 +BitwiseZeroFillRightShift=75 +Dot=76 +Identifier=77 +IntegerConstant=78 +SingleQuoteStringLiteral=79 +DoubleQuoteStringLiteral=80 +FloatingConstant=81 +Whitespace=82 +Newline=83 +FStringSingleQuoteStart=84 +FStringDoubleQuoteStart=85 +FStringSingleQuoteEnd=86 +FStringSingleQuoteAtom=87 +FStringDoubleQuoteEnd=88 +FStringDoubleQuoteAtom=89 +'instanceof'=5 +'const'=6 +'var'=7 +'as'=8 +'...'=9 +'switch'=10 +'case'=11 +'default'=12 +'break'=13 +'continue'=14 +'do'=15 +'while'=16 +'if'=17 +'else'=18 +'for'=19 +'enum'=20 +'def'=21 +'return'=22 +'call'=23 +'->'=24 +'class'=25 +'interface'=26 +'constructor'=27 +'new'=28 +'true'=29 +'false'=30 +'typeof'=31 +'void'=32 +'null'=33 +'undefined'=34 +','=35 +';'=36 +'?'=37 +':'=38 +'('=39 +')'=40 +'['=41 +']'=42 +'{'=44 +'}'=45 +'+'=46 +'++'=47 +'-'=48 +'--'=49 +'*'=50 +'/'=51 +'%'=52 +'**'=53 +'&&'=54 +'||'=55 +'!'=56 +'='=57 +'+='=58 +'-='=59 +'*='=60 +'/='=61 +'%='=62 +'=='=63 +'!='=64 +'<'=65 +'<='=66 +'>'=67 +'>='=68 +'&'=69 +'|'=70 +'^'=71 +'~'=72 +'<<'=73 +'>>'=74 +'>>>'=75 +'.'=76 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index b436a610f..5d2a22fd9 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -2,15 +2,20 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; import { RecognitionException } from "antlr4ts/RecognitionException"; import { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; @@ -30,90 +35,91 @@ export class KipperParser extends KipperParserBase { public static readonly BlockComment = 2; public static readonly LineComment = 3; public static readonly Pragma = 4; - public static readonly Const = 5; - public static readonly Var = 6; - public static readonly As = 7; - public static readonly Spread = 8; - public static readonly Switch = 9; - public static readonly Case = 10; - public static readonly Default = 11; - public static readonly Break = 12; - public static readonly Continue = 13; - public static readonly Do = 14; - public static readonly While = 15; - public static readonly If = 16; - public static readonly Else = 17; - public static readonly For = 18; - public static readonly Enum = 19; - public static readonly DefFunc = 20; - public static readonly Return = 21; - public static readonly CallFunc = 22; - public static readonly RetIndicator = 23; - public static readonly Class = 24; - public static readonly Interface = 25; - public static readonly Constructor = 26; - public static readonly New = 27; - public static readonly True = 28; - public static readonly False = 29; - public static readonly Typeof = 30; - public static readonly Void = 31; - public static readonly Null = 32; - public static readonly Undefined = 33; - public static readonly Comma = 34; - public static readonly SemiColon = 35; - public static readonly QuestionMark = 36; - public static readonly Colon = 37; - public static readonly LeftParen = 38; - public static readonly RightParen = 39; - public static readonly LeftBracket = 40; - public static readonly RightBracket = 41; - public static readonly FStringExpEnd = 42; - public static readonly LeftBrace = 43; - public static readonly RightBrace = 44; - public static readonly Plus = 45; - public static readonly PlusPlus = 46; - public static readonly Minus = 47; - public static readonly MinusMinus = 48; - public static readonly Star = 49; - public static readonly Div = 50; - public static readonly Mod = 51; - public static readonly PowerTo = 52; - public static readonly AndAnd = 53; - public static readonly OrOr = 54; - public static readonly Not = 55; - public static readonly Assign = 56; - public static readonly PlusAssign = 57; - public static readonly MinusAssign = 58; - public static readonly StarAssign = 59; - public static readonly DivAssign = 60; - public static readonly ModAssign = 61; - public static readonly Equal = 62; - public static readonly NotEqual = 63; - public static readonly Less = 64; - public static readonly LessEqual = 65; - public static readonly Greater = 66; - public static readonly GreaterEqual = 67; - public static readonly BitwiseAnd = 68; - public static readonly BitwiseOr = 69; - public static readonly BitwiseXor = 70; - public static readonly BitwiseNot = 71; - public static readonly BitwiseZeroFillLeftShift = 72; - public static readonly BitwiseSignedRightShift = 73; - public static readonly BitwiseZeroFillRightShift = 74; - public static readonly Dot = 75; - public static readonly Identifier = 76; - public static readonly IntegerConstant = 77; - public static readonly SingleQuoteStringLiteral = 78; - public static readonly DoubleQuoteStringLiteral = 79; - public static readonly FloatingConstant = 80; - public static readonly Whitespace = 81; - public static readonly Newline = 82; - public static readonly FStringSingleQuoteStart = 83; - public static readonly FStringDoubleQuoteStart = 84; - public static readonly FStringSingleQuoteEnd = 85; - public static readonly FStringSingleQuoteAtom = 86; - public static readonly FStringDoubleQuoteEnd = 87; - public static readonly FStringDoubleQuoteAtom = 88; + public static readonly InstanceOf = 5; + public static readonly Const = 6; + public static readonly Var = 7; + public static readonly As = 8; + public static readonly Spread = 9; + public static readonly Switch = 10; + public static readonly Case = 11; + public static readonly Default = 12; + public static readonly Break = 13; + public static readonly Continue = 14; + public static readonly Do = 15; + public static readonly While = 16; + public static readonly If = 17; + public static readonly Else = 18; + public static readonly For = 19; + public static readonly Enum = 20; + public static readonly DefFunc = 21; + public static readonly Return = 22; + public static readonly CallFunc = 23; + public static readonly RetIndicator = 24; + public static readonly Class = 25; + public static readonly Interface = 26; + public static readonly Constructor = 27; + public static readonly New = 28; + public static readonly True = 29; + public static readonly False = 30; + public static readonly Typeof = 31; + public static readonly Void = 32; + public static readonly Null = 33; + public static readonly Undefined = 34; + public static readonly Comma = 35; + public static readonly SemiColon = 36; + public static readonly QuestionMark = 37; + public static readonly Colon = 38; + public static readonly LeftParen = 39; + public static readonly RightParen = 40; + public static readonly LeftBracket = 41; + public static readonly RightBracket = 42; + public static readonly FStringExpEnd = 43; + public static readonly LeftBrace = 44; + public static readonly RightBrace = 45; + public static readonly Plus = 46; + public static readonly PlusPlus = 47; + public static readonly Minus = 48; + public static readonly MinusMinus = 49; + public static readonly Star = 50; + public static readonly Div = 51; + public static readonly Mod = 52; + public static readonly PowerTo = 53; + public static readonly AndAnd = 54; + public static readonly OrOr = 55; + public static readonly Not = 56; + public static readonly Assign = 57; + public static readonly PlusAssign = 58; + public static readonly MinusAssign = 59; + public static readonly StarAssign = 60; + public static readonly DivAssign = 61; + public static readonly ModAssign = 62; + public static readonly Equal = 63; + public static readonly NotEqual = 64; + public static readonly Less = 65; + public static readonly LessEqual = 66; + public static readonly Greater = 67; + public static readonly GreaterEqual = 68; + public static readonly BitwiseAnd = 69; + public static readonly BitwiseOr = 70; + public static readonly BitwiseXor = 71; + public static readonly BitwiseNot = 72; + public static readonly BitwiseZeroFillLeftShift = 73; + public static readonly BitwiseSignedRightShift = 74; + public static readonly BitwiseZeroFillRightShift = 75; + public static readonly Dot = 76; + public static readonly Identifier = 77; + public static readonly IntegerConstant = 78; + public static readonly SingleQuoteStringLiteral = 79; + public static readonly DoubleQuoteStringLiteral = 80; + public static readonly FloatingConstant = 81; + public static readonly Whitespace = 82; + public static readonly Newline = 83; + public static readonly FStringSingleQuoteStart = 84; + public static readonly FStringDoubleQuoteStart = 85; + public static readonly FStringSingleQuoteEnd = 86; + public static readonly FStringSingleQuoteAtom = 87; + public static readonly FStringDoubleQuoteEnd = 88; + public static readonly FStringDoubleQuoteAtom = 89; public static readonly RULE_compilationUnit = 0; public static readonly RULE_translationUnit = 1; public static readonly RULE_externalItem = 2; @@ -185,22 +191,23 @@ export class KipperParser extends KipperParserBase { public static readonly RULE_additiveExpression = 68; public static readonly RULE_bitwiseShiftExpression = 69; public static readonly RULE_bitwiseShiftOperators = 70; - public static readonly RULE_relationalExpression = 71; - public static readonly RULE_equalityExpression = 72; - public static readonly RULE_bitwiseAndExpression = 73; - public static readonly RULE_bitwiseXorExpression = 74; - public static readonly RULE_bitwiseOrExpression = 75; - public static readonly RULE_logicalAndExpression = 76; - public static readonly RULE_logicalOrExpression = 77; - public static readonly RULE_conditionalExpression = 78; - public static readonly RULE_assignmentExpression = 79; - public static readonly RULE_assignmentOperator = 80; - public static readonly RULE_expression = 81; - public static readonly RULE_typeSpecifierExpression = 82; - public static readonly RULE_identifierTypeSpecifierExpression = 83; - public static readonly RULE_genericTypeSpecifierExpression = 84; - public static readonly RULE_typeofTypeSpecifierExpression = 85; - public static readonly RULE_typeSpecifierIdentifier = 86; + public static readonly RULE_instanceOfExpression = 71; + public static readonly RULE_relationalExpression = 72; + public static readonly RULE_equalityExpression = 73; + public static readonly RULE_bitwiseAndExpression = 74; + public static readonly RULE_bitwiseXorExpression = 75; + public static readonly RULE_bitwiseOrExpression = 76; + public static readonly RULE_logicalAndExpression = 77; + public static readonly RULE_logicalOrExpression = 78; + public static readonly RULE_conditionalExpression = 79; + public static readonly RULE_assignmentExpression = 80; + public static readonly RULE_assignmentOperator = 81; + public static readonly RULE_expression = 82; + public static readonly RULE_typeSpecifierExpression = 83; + public static readonly RULE_identifierTypeSpecifierExpression = 84; + public static readonly RULE_genericTypeSpecifierExpression = 85; + public static readonly RULE_typeofTypeSpecifierExpression = 86; + public static readonly RULE_typeSpecifierIdentifier = 87; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "compilationUnit", @@ -274,6 +281,7 @@ export class KipperParser extends KipperParserBase { "additiveExpression", "bitwiseShiftExpression", "bitwiseShiftOperators", + "instanceOfExpression", "relationalExpression", "equalityExpression", "bitwiseAndExpression", @@ -298,6 +306,7 @@ export class KipperParser extends KipperParserBase { undefined, undefined, undefined, + "'instanceof'", "'const'", "'var'", "'as'", @@ -376,6 +385,7 @@ export class KipperParser extends KipperParserBase { "BlockComment", "LineComment", "Pragma", + "InstanceOf", "Const", "Var", "As", @@ -504,17 +514,17 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 175; + this.state = 177; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { case 1: { - this.state = 174; + this.state = 176; this.translationUnit(); } break; } - this.state = 177; + this.state = 179; this.match(KipperParser.EOF); } } catch (re) { @@ -538,7 +548,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 180; + this.state = 182; this._errHandler.sync(this); _alt = 1; do { @@ -546,7 +556,7 @@ export class KipperParser extends KipperParserBase { case 1: { { - this.state = 179; + this.state = 181; this.externalItem(); } } @@ -554,7 +564,7 @@ export class KipperParser extends KipperParserBase { default: throw new NoViableAltException(this); } - this.state = 182; + this.state = 184; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 1, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -580,7 +590,7 @@ export class KipperParser extends KipperParserBase { _localctx = new ExternalBlockItemContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 184; + this.state = 186; this.blockItemList(); } } catch (re) { @@ -604,7 +614,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 187; + this.state = 189; this._errHandler.sync(this); _alt = 1; do { @@ -612,7 +622,7 @@ export class KipperParser extends KipperParserBase { case 1: { { - this.state = 186; + this.state = 188; this.blockItem(); } } @@ -620,7 +630,7 @@ export class KipperParser extends KipperParserBase { default: throw new NoViableAltException(this); } - this.state = 189; + this.state = 191; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 2, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); @@ -645,26 +655,26 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 194; + this.state = 196; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 3, this._ctx)) { case 1: { - this.state = 191; + this.state = 193; this.statement(); } break; case 2: { - this.state = 192; + this.state = 194; this.declaration(); } break; case 3: { - this.state = 193; + this.state = 195; this.match(KipperParser.SemiColon); } break; @@ -688,37 +698,37 @@ export class KipperParser extends KipperParserBase { let _localctx: DeclarationContext = new DeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 10, KipperParser.RULE_declaration); try { - this.state = 202; + this.state = 204; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: this.enterOuterAlt(_localctx, 1); { - this.state = 196; + this.state = 198; this.variableDeclaration(); - this.state = 197; + this.state = 199; this.match(KipperParser.SemiColon); } break; case KipperParser.DefFunc: this.enterOuterAlt(_localctx, 2); { - this.state = 199; + this.state = 201; this.functionDeclaration(); } break; case KipperParser.Interface: this.enterOuterAlt(_localctx, 3); { - this.state = 200; + this.state = 202; this.interfaceDeclaration(); } break; case KipperParser.Class: this.enterOuterAlt(_localctx, 4); { - this.state = 201; + this.state = 203; this.classDeclaration(); } break; @@ -745,9 +755,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 204; + this.state = 206; this.storageTypeSpecifier(); - this.state = 205; + this.state = 207; this.initDeclarator(); } } catch (re) { @@ -771,7 +781,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 207; + this.state = 209; _la = this._input.LA(1); if (!(_la === KipperParser.Const || _la === KipperParser.Var)) { this._errHandler.recoverInline(this); @@ -805,20 +815,20 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 209; + this.state = 211; this.declarator(); - this.state = 210; + this.state = 212; this.match(KipperParser.Colon); - this.state = 211; + this.state = 213; this.typeSpecifierExpression(); - this.state = 214; + this.state = 216; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Assign) { { - this.state = 212; + this.state = 214; this.match(KipperParser.Assign); - this.state = 213; + this.state = 215; this.initializer(); } } @@ -843,7 +853,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 216; + this.state = 218; this.assignmentExpression(); } } catch (re) { @@ -866,7 +876,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 218; + this.state = 220; this.directDeclarator(); } } catch (re) { @@ -889,7 +899,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 220; + this.state = 222; this.match(KipperParser.Identifier); } } catch (re) { @@ -913,34 +923,34 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 222; + this.state = 224; this.match(KipperParser.DefFunc); - this.state = 223; + this.state = 225; this.declarator(); - this.state = 224; - this.match(KipperParser.LeftParen); this.state = 226; + this.match(KipperParser.LeftParen); + this.state = 228; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 225; + this.state = 227; this.parameterList(); } } - this.state = 228; + this.state = 230; this.match(KipperParser.RightParen); - this.state = 229; + this.state = 231; this.match(KipperParser.RetIndicator); - this.state = 230; - this.typeSpecifierExpression(); this.state = 232; + this.typeSpecifierExpression(); + this.state = 234; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 7, this._ctx)) { case 1: { - this.state = 231; + this.state = 233; this.compoundStatement(); } break; @@ -967,21 +977,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 234; + this.state = 236; this.parameterDeclaration(); - this.state = 239; + this.state = 241; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 235; + this.state = 237; this.match(KipperParser.Comma); - this.state = 236; + this.state = 238; this.parameterDeclaration(); } } - this.state = 241; + this.state = 243; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1006,11 +1016,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 242; + this.state = 244; this.declarator(); - this.state = 243; + this.state = 245; this.match(KipperParser.Colon); - this.state = 244; + this.state = 246; this.typeSpecifierExpression(); } } catch (re) { @@ -1034,27 +1044,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 246; + this.state = 248; this.match(KipperParser.Interface); - this.state = 247; + this.state = 249; this.declarator(); - this.state = 248; + this.state = 250; this.match(KipperParser.LeftBrace); - this.state = 252; + this.state = 254; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Identifier) { { { - this.state = 249; + this.state = 251; this.interfaceMemberDeclaration(); } } - this.state = 254; + this.state = 256; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 255; + this.state = 257; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1075,13 +1085,13 @@ export class KipperParser extends KipperParserBase { let _localctx: InterfaceMemberDeclarationContext = new InterfaceMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 32, KipperParser.RULE_interfaceMemberDeclaration); try { - this.state = 259; + this.state = 261; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 10, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 257; + this.state = 259; this.interfacePropertyDeclaration(); } break; @@ -1089,7 +1099,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 258; + this.state = 260; this.interfaceMethodDeclaration(); } break; @@ -1114,13 +1124,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 261; + this.state = 263; this.declarator(); - this.state = 262; + this.state = 264; this.match(KipperParser.Colon); - this.state = 263; + this.state = 265; this.typeSpecifierExpression(); - this.state = 264; + this.state = 266; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1144,27 +1154,27 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 266; + this.state = 268; this.declarator(); - this.state = 267; - this.match(KipperParser.LeftParen); this.state = 269; + this.match(KipperParser.LeftParen); + this.state = 271; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 268; + this.state = 270; this.parameterList(); } } - this.state = 271; + this.state = 273; this.match(KipperParser.RightParen); - this.state = 272; + this.state = 274; this.match(KipperParser.Colon); - this.state = 273; + this.state = 275; this.typeSpecifierExpression(); - this.state = 274; + this.state = 276; this.match(KipperParser.SemiColon); } } catch (re) { @@ -1188,30 +1198,30 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 276; + this.state = 278; this.match(KipperParser.Class); - this.state = 277; + this.state = 279; this.declarator(); - this.state = 278; + this.state = 280; this.match(KipperParser.LeftBrace); - this.state = 283; + this.state = 285; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Constructor || _la === KipperParser.SemiColon || _la === KipperParser.Identifier) { { - this.state = 281; + this.state = 283; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Constructor: case KipperParser.Identifier: { - this.state = 279; + this.state = 281; this.classMemberDeclaration(); } break; case KipperParser.SemiColon: { - this.state = 280; + this.state = 282; this.match(KipperParser.SemiColon); } break; @@ -1219,11 +1229,11 @@ export class KipperParser extends KipperParserBase { throw new NoViableAltException(this); } } - this.state = 285; + this.state = 287; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 286; + this.state = 288; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1244,13 +1254,13 @@ export class KipperParser extends KipperParserBase { let _localctx: ClassMemberDeclarationContext = new ClassMemberDeclarationContext(this._ctx, this.state); this.enterRule(_localctx, 40, KipperParser.RULE_classMemberDeclaration); try { - this.state = 291; + this.state = 293; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 14, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 288; + this.state = 290; this.classPropertyDeclaration(); } break; @@ -1258,7 +1268,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 289; + this.state = 291; this.classMethodDeclaration(); } break; @@ -1266,7 +1276,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 290; + this.state = 292; this.classConstructorDeclaration(); } break; @@ -1291,11 +1301,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 293; + this.state = 295; this.declarator(); - this.state = 294; + this.state = 296; this.match(KipperParser.Colon); - this.state = 295; + this.state = 297; this.typeSpecifierExpression(); } } catch (re) { @@ -1319,32 +1329,32 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 297; + this.state = 299; this.declarator(); - this.state = 298; - this.match(KipperParser.LeftParen); this.state = 300; + this.match(KipperParser.LeftParen); + this.state = 302; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 299; + this.state = 301; this.parameterList(); } } - this.state = 302; + this.state = 304; this.match(KipperParser.RightParen); - this.state = 303; + this.state = 305; this.match(KipperParser.Colon); - this.state = 304; - this.typeSpecifierExpression(); this.state = 306; + this.typeSpecifierExpression(); + this.state = 308; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 16, this._ctx)) { case 1: { - this.state = 305; + this.state = 307; this.compoundStatement(); } break; @@ -1371,23 +1381,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 308; + this.state = 310; this.match(KipperParser.Constructor); - this.state = 309; - this.match(KipperParser.LeftParen); this.state = 311; + this.match(KipperParser.LeftParen); + this.state = 313; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 310; + this.state = 312; this.parameterList(); } } - this.state = 313; + this.state = 315; this.match(KipperParser.RightParen); - this.state = 314; + this.state = 316; this.compoundStatement(); } } catch (re) { @@ -1408,13 +1418,13 @@ export class KipperParser extends KipperParserBase { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); this.enterRule(_localctx, 48, KipperParser.RULE_statement); try { - this.state = 322; + this.state = 324; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 18, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 316; + this.state = 318; this.expressionStatement(); } break; @@ -1422,7 +1432,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 317; + this.state = 319; this.selectionStatement(); } break; @@ -1430,7 +1440,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 318; + this.state = 320; this.iterationStatement(); } break; @@ -1438,7 +1448,7 @@ export class KipperParser extends KipperParserBase { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 319; + this.state = 321; this.jumpStatement(); } break; @@ -1446,7 +1456,7 @@ export class KipperParser extends KipperParserBase { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 320; + this.state = 322; this.returnStatement(); } break; @@ -1454,7 +1464,7 @@ export class KipperParser extends KipperParserBase { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 321; + this.state = 323; this.compoundStatement(); } break; @@ -1479,23 +1489,23 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 324; + this.state = 326; if (!this.notInsideExpressionStatement()) { throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); } - this.state = 325; - this.match(KipperParser.LeftBrace); this.state = 327; + this.match(KipperParser.LeftBrace); + this.state = 329; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { case 1: { - this.state = 326; + this.state = 328; this.blockItemList(); } break; } - this.state = 329; + this.state = 331; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1519,9 +1529,9 @@ export class KipperParser extends KipperParserBase { this.enterOuterAlt(_localctx, 1); { this.enterExpressionStatement(); - this.state = 332; + this.state = 334; this.expression(); - this.state = 333; + this.state = 335; this.match(KipperParser.SemiColon); this.exitExpressionStatement(); } @@ -1543,20 +1553,20 @@ export class KipperParser extends KipperParserBase { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 54, KipperParser.RULE_selectionStatement); try { - this.state = 338; + this.state = 340; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.If: this.enterOuterAlt(_localctx, 1); { - this.state = 336; + this.state = 338; this.ifStatement(); } break; case KipperParser.Switch: this.enterOuterAlt(_localctx, 2); { - this.state = 337; + this.state = 339; this.switchStatement(); } break; @@ -1583,24 +1593,24 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 340; + this.state = 342; this.match(KipperParser.If); - this.state = 341; + this.state = 343; this.match(KipperParser.LeftParen); - this.state = 342; + this.state = 344; this.expression(); - this.state = 343; + this.state = 345; this.match(KipperParser.RightParen); - this.state = 344; + this.state = 346; this.statement(); - this.state = 347; + this.state = 349; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { case 1: { - this.state = 345; + this.state = 347; this.match(KipperParser.Else); - this.state = 346; + this.state = 348; this.statement(); } break; @@ -1627,31 +1637,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 349; + this.state = 351; this.match(KipperParser.Switch); - this.state = 350; + this.state = 352; this.match(KipperParser.LeftParen); - this.state = 351; + this.state = 353; this.expression(); - this.state = 352; + this.state = 354; this.match(KipperParser.RightParen); - this.state = 353; + this.state = 355; this.match(KipperParser.LeftBrace); - this.state = 357; + this.state = 359; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Case || _la === KipperParser.Default) { { { - this.state = 354; + this.state = 356; this.switchLabeledStatement(); } } - this.state = 359; + this.state = 361; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 360; + this.state = 362; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1672,30 +1682,30 @@ export class KipperParser extends KipperParserBase { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 60, KipperParser.RULE_switchLabeledStatement); try { - this.state = 370; + this.state = 372; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Case: this.enterOuterAlt(_localctx, 1); { - this.state = 362; + this.state = 364; this.match(KipperParser.Case); - this.state = 363; + this.state = 365; this.expression(); - this.state = 364; + this.state = 366; this.match(KipperParser.Colon); - this.state = 365; + this.state = 367; this.statement(); } break; case KipperParser.Default: this.enterOuterAlt(_localctx, 2); { - this.state = 367; + this.state = 369; this.match(KipperParser.Default); - this.state = 368; + this.state = 370; this.match(KipperParser.Colon); - this.state = 369; + this.state = 371; this.statement(); } break; @@ -1720,27 +1730,27 @@ export class KipperParser extends KipperParserBase { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 62, KipperParser.RULE_iterationStatement); try { - this.state = 375; + this.state = 377; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.For: this.enterOuterAlt(_localctx, 1); { - this.state = 372; + this.state = 374; this.forLoopIterationStatement(); } break; case KipperParser.While: this.enterOuterAlt(_localctx, 2); { - this.state = 373; + this.state = 375; this.whileLoopIterationStatement(); } break; case KipperParser.Do: this.enterOuterAlt(_localctx, 3); { - this.state = 374; + this.state = 376; this.doWhileLoopIterationStatement(); } break; @@ -1768,11 +1778,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 377; + this.state = 379; this.match(KipperParser.For); - this.state = 378; + this.state = 380; this.match(KipperParser.LeftParen); - this.state = 385; + this.state = 387; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1784,12 +1794,12 @@ export class KipperParser extends KipperParserBase { (1 << KipperParser.New) | (1 << KipperParser.True) | (1 << KipperParser.False) | - (1 << KipperParser.Typeof) | - (1 << KipperParser.Void))) !== + (1 << KipperParser.Typeof))) !== 0) || (((_la - 32) & ~0x1f) === 0 && ((1 << (_la - 32)) & - ((1 << (KipperParser.Null - 32)) | + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | (1 << (KipperParser.Undefined - 32)) | (1 << (KipperParser.LeftParen - 32)) | (1 << (KipperParser.LeftBracket - 32)) | @@ -1800,26 +1810,26 @@ export class KipperParser extends KipperParserBase { (1 << (KipperParser.MinusMinus - 32)) | (1 << (KipperParser.Not - 32)))) !== 0) || - (((_la - 71) & ~0x1f) === 0 && - ((1 << (_la - 71)) & - ((1 << (KipperParser.BitwiseNot - 71)) | - (1 << (KipperParser.Identifier - 71)) | - (1 << (KipperParser.IntegerConstant - 71)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 71)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 71)) | - (1 << (KipperParser.FloatingConstant - 71)) | - (1 << (KipperParser.FStringSingleQuoteStart - 71)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 71)))) !== + (((_la - 72) & ~0x1f) === 0 && + ((1 << (_la - 72)) & + ((1 << (KipperParser.BitwiseNot - 72)) | + (1 << (KipperParser.Identifier - 72)) | + (1 << (KipperParser.IntegerConstant - 72)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 72)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 72)) | + (1 << (KipperParser.FloatingConstant - 72)) | + (1 << (KipperParser.FStringSingleQuoteStart - 72)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 72)))) !== 0) ) { { - this.state = 381; + this.state = 383; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: { - this.state = 379; + this.state = 381; this.variableDeclaration(); } break; @@ -1848,7 +1858,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringSingleQuoteStart: case KipperParser.FStringDoubleQuoteStart: { - this.state = 380; + this.state = 382; this.expression(); } break; @@ -1859,97 +1869,97 @@ export class KipperParser extends KipperParserBase { } } - this.state = 387; + this.state = 389; this.match(KipperParser.SemiColon); - this.state = 391; + this.state = 393; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 388; + this.state = 390; this.expression(); _localctx._forCondition = true; } } - this.state = 393; + this.state = 395; this.match(KipperParser.SemiColon); - this.state = 397; + this.state = 399; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 394; + this.state = 396; this.expression(); _localctx._forIterationExp = true; } } - this.state = 399; + this.state = 401; this.match(KipperParser.RightParen); - this.state = 400; + this.state = 402; this.statement(); } } catch (re) { @@ -1972,15 +1982,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 402; + this.state = 404; this.match(KipperParser.While); - this.state = 403; + this.state = 405; this.match(KipperParser.LeftParen); - this.state = 404; + this.state = 406; this.expression(); - this.state = 405; + this.state = 407; this.match(KipperParser.RightParen); - this.state = 406; + this.state = 408; this.statement(); } } catch (re) { @@ -2006,19 +2016,19 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 408; + this.state = 410; this.match(KipperParser.Do); - this.state = 409; + this.state = 411; this.statement(); - this.state = 410; + this.state = 412; this.match(KipperParser.While); - this.state = 411; + this.state = 413; this.match(KipperParser.LeftParen); - this.state = 412; + this.state = 414; this.expression(); - this.state = 413; + this.state = 415; this.match(KipperParser.RightParen); - this.state = 414; + this.state = 416; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2042,7 +2052,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 416; + this.state = 418; _la = this._input.LA(1); if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { this._errHandler.recoverInline(this); @@ -2054,7 +2064,7 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 417; + this.state = 419; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2078,50 +2088,50 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 419; - this.match(KipperParser.Return); this.state = 421; + this.match(KipperParser.Return); + this.state = 423; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 420; + this.state = 422; this.expression(); } } - this.state = 423; + this.state = 425; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2142,13 +2152,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 74, KipperParser.RULE_primaryExpression); try { - this.state = 435; + this.state = 437; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 30, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 425; + this.state = 427; this.tangledPrimaryExpression(); } break; @@ -2156,7 +2166,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 426; + this.state = 428; this.lambdaPrimaryExpression(); } break; @@ -2164,7 +2174,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 427; + this.state = 429; this.arrayPrimaryExpression(); } break; @@ -2172,7 +2182,7 @@ export class KipperParser extends KipperParserBase { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 428; + this.state = 430; this.objectPrimaryExpression(); } break; @@ -2180,7 +2190,7 @@ export class KipperParser extends KipperParserBase { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 429; + this.state = 431; this.boolPrimaryExpression(); } break; @@ -2188,7 +2198,7 @@ export class KipperParser extends KipperParserBase { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 430; + this.state = 432; this.identifierPrimaryExpression(); } break; @@ -2196,7 +2206,7 @@ export class KipperParser extends KipperParserBase { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 431; + this.state = 433; this.stringPrimaryExpression(); } break; @@ -2204,7 +2214,7 @@ export class KipperParser extends KipperParserBase { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 432; + this.state = 434; this.fStringPrimaryExpression(); } break; @@ -2212,7 +2222,7 @@ export class KipperParser extends KipperParserBase { case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 433; + this.state = 435; this.numberPrimaryExpression(); } break; @@ -2220,7 +2230,7 @@ export class KipperParser extends KipperParserBase { case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 434; + this.state = 436; this.voidOrNullOrUndefinedPrimaryExpression(); } break; @@ -2246,39 +2256,39 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 437; - this.match(KipperParser.LeftParen); this.state = 439; + this.match(KipperParser.LeftParen); + this.state = 441; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 438; + this.state = 440; this.parameterList(); } } - this.state = 441; + this.state = 443; this.match(KipperParser.RightParen); - this.state = 442; + this.state = 444; this.match(KipperParser.Colon); - this.state = 443; + this.state = 445; this.typeSpecifierExpression(); - this.state = 444; + this.state = 446; this.match(KipperParser.RetIndicator); - this.state = 447; + this.state = 449; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { case 1: { - this.state = 445; + this.state = 447; this.expression(); } break; case 2: { - this.state = 446; + this.state = 448; this.compoundStatement(); } break; @@ -2304,11 +2314,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 449; + this.state = 451; this.match(KipperParser.LeftParen); - this.state = 450; + this.state = 452; this.expression(); - this.state = 451; + this.state = 453; this.match(KipperParser.RightParen); } } catch (re) { @@ -2332,7 +2342,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 453; + this.state = 455; _la = this._input.LA(1); if (!(_la === KipperParser.True || _la === KipperParser.False)) { this._errHandler.recoverInline(this); @@ -2365,7 +2375,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 455; + this.state = 457; this.identifier(); } } catch (re) { @@ -2388,7 +2398,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 457; + this.state = 459; this.match(KipperParser.Identifier); } } catch (re) { @@ -2412,13 +2422,13 @@ export class KipperParser extends KipperParserBase { ); this.enterRule(_localctx, 86, KipperParser.RULE_identifierOrStringPrimaryExpression); try { - this.state = 461; + this.state = 463; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Identifier: this.enterOuterAlt(_localctx, 1); { - this.state = 459; + this.state = 461; this.identifier(); } break; @@ -2426,7 +2436,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.DoubleQuoteStringLiteral: this.enterOuterAlt(_localctx, 2); { - this.state = 460; + this.state = 462; this.stringPrimaryExpression(); } break; @@ -2454,7 +2464,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 463; + this.state = 465; _la = this._input.LA(1); if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { this._errHandler.recoverInline(this); @@ -2486,52 +2496,52 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 90, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 481; + this.state = 483; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 465; + this.state = 467; this.match(KipperParser.FStringSingleQuoteStart); - this.state = 469; + this.state = 471; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { { - this.state = 466; + this.state = 468; this.fStringSingleQuoteAtom(); } } - this.state = 471; + this.state = 473; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 472; + this.state = 474; this.match(KipperParser.FStringSingleQuoteEnd); } break; case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 2); { - this.state = 473; + this.state = 475; this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 477; + this.state = 479; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { { - this.state = 474; + this.state = 476; this.fStringDoubleQuoteAtom(); } } - this.state = 479; + this.state = 481; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 480; + this.state = 482; this.match(KipperParser.FStringDoubleQuoteEnd); } break; @@ -2557,63 +2567,63 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 92, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 489; + this.state = 491; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 483; + this.state = 485; this.match(KipperParser.FStringSingleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 484; - this.match(KipperParser.FStringExpStart); this.state = 486; + this.match(KipperParser.FStringExpStart); + this.state = 488; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 485; + this.state = 487; this.expression(); } } - this.state = 488; + this.state = 490; this.match(KipperParser.FStringExpEnd); } break; @@ -2639,63 +2649,63 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 94, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 497; + this.state = 499; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringDoubleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 491; + this.state = 493; this.match(KipperParser.FStringDoubleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 492; - this.match(KipperParser.FStringExpStart); this.state = 494; + this.match(KipperParser.FStringExpStart); + this.state = 496; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 493; + this.state = 495; this.expression(); } } - this.state = 496; + this.state = 498; this.match(KipperParser.FStringExpEnd); } break; @@ -2723,7 +2733,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 499; + this.state = 501; _la = this._input.LA(1); if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { this._errHandler.recoverInline(this); @@ -2758,78 +2768,78 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 501; + this.state = 503; this.match(KipperParser.LeftBracket); - this.state = 510; + this.state = 512; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 502; + this.state = 504; this.expression(); - this.state = 507; + this.state = 509; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 503; + this.state = 505; this.match(KipperParser.Comma); - this.state = 504; + this.state = 506; this.expression(); } } } - this.state = 509; + this.state = 511; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); } } } - this.state = 513; + this.state = 515; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 512; + this.state = 514; this.match(KipperParser.Comma); } } - this.state = 515; + this.state = 517; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2854,54 +2864,54 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 517; + this.state = 519; this.match(KipperParser.LeftBrace); - this.state = 526; + this.state = 528; this._errHandler.sync(this); _la = this._input.LA(1); if ( - ((_la - 76) & ~0x1f) === 0 && - ((1 << (_la - 76)) & - ((1 << (KipperParser.Identifier - 76)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 76)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 76)))) !== + ((_la - 77) & ~0x1f) === 0 && + ((1 << (_la - 77)) & + ((1 << (KipperParser.Identifier - 77)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 77)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 77)))) !== 0 ) { { - this.state = 518; + this.state = 520; this.objectProperty(); - this.state = 523; + this.state = 525; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 519; + this.state = 521; this.match(KipperParser.Comma); - this.state = 520; + this.state = 522; this.objectProperty(); } } } - this.state = 525; + this.state = 527; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); } } } - this.state = 529; + this.state = 531; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 528; + this.state = 530; this.match(KipperParser.Comma); } } - this.state = 531; + this.state = 533; this.match(KipperParser.RightBrace); } } catch (re) { @@ -2924,11 +2934,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 533; + this.state = 535; this.identifierOrStringPrimaryExpression(); - this.state = 534; + this.state = 536; this.match(KipperParser.Colon); - this.state = 535; + this.state = 537; this.expression(); } } catch (re) { @@ -2955,15 +2965,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 537; + this.state = 539; _la = this._input.LA(1); if ( !( - ((_la - 31) & ~0x1f) === 0 && - ((1 << (_la - 31)) & - ((1 << (KipperParser.Void - 31)) | - (1 << (KipperParser.Null - 31)) | - (1 << (KipperParser.Undefined - 31)))) !== + ((_la - 32) & ~0x1f) === 0 && + ((1 << (_la - 32)) & + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)))) !== 0 ) ) { @@ -3010,7 +3020,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 559; + this.state = 561; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -3033,7 +3043,7 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 540; + this.state = 542; this.primaryExpression(); } break; @@ -3042,54 +3052,54 @@ export class KipperParser extends KipperParserBase { _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 541; + this.state = 543; this.match(KipperParser.CallFunc); - this.state = 542; + this.state = 544; this.computedPrimaryExpression(0); - this.state = 543; - this.match(KipperParser.LeftParen); this.state = 545; + this.match(KipperParser.LeftParen); + this.state = 547; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 544; + this.state = 546; this.argumentExpressionList(); } } - this.state = 547; + this.state = 549; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3099,54 +3109,54 @@ export class KipperParser extends KipperParserBase { _localctx = new NewInstantiationExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 550; + this.state = 552; this.match(KipperParser.New); - this.state = 551; + this.state = 553; this.typeSpecifierExpression(); - this.state = 552; - this.match(KipperParser.LeftParen); this.state = 554; + this.match(KipperParser.LeftParen); + this.state = 556; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 553; + this.state = 555; this.argumentExpressionList(); } } - this.state = 556; + this.state = 558; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; } @@ -3155,7 +3165,7 @@ export class KipperParser extends KipperParserBase { throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 582; + this.state = 584; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3165,7 +3175,7 @@ export class KipperParser extends KipperParserBase { } _prevctx = _localctx; { - this.state = 580; + this.state = 582; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { case 1: @@ -3174,11 +3184,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 561; + this.state = 563; if (!this.precpred(this._ctx, 6)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 562; + this.state = 564; this.dotNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3190,11 +3200,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 565; + this.state = 567; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 566; + this.state = 568; this.bracketNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3206,11 +3216,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 569; + this.state = 571; if (!this.precpred(this._ctx, 4)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 570; + this.state = 572; this.sliceNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3222,54 +3232,54 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 573; + this.state = 575; if (!this.precpred(this._ctx, 3)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 574; - this.match(KipperParser.LeftParen); this.state = 576; + this.match(KipperParser.LeftParen); + this.state = 578; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 575; + this.state = 577; this.argumentExpressionList(); } } - this.state = 578; + this.state = 580; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3277,7 +3287,7 @@ export class KipperParser extends KipperParserBase { } } } - this.state = 584; + this.state = 586; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); } @@ -3303,21 +3313,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 585; + this.state = 587; this.assignmentExpression(); - this.state = 590; + this.state = 592; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 586; + this.state = 588; this.match(KipperParser.Comma); - this.state = 587; + this.state = 589; this.assignmentExpression(); } } - this.state = 592; + this.state = 594; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3342,9 +3352,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 593; + this.state = 595; this.match(KipperParser.Dot); - this.state = 594; + this.state = 596; this.identifier(); } } catch (re) { @@ -3367,11 +3377,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 596; + this.state = 598; this.match(KipperParser.LeftBracket); - this.state = 597; + this.state = 599; this.expression(); - this.state = 598; + this.state = 600; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3395,95 +3405,95 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 600; + this.state = 602; this.match(KipperParser.LeftBracket); - this.state = 604; + this.state = 606; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 601; + this.state = 603; this.expression(); _localctx.sliceStart = true; } } - this.state = 606; + this.state = 608; this.match(KipperParser.Colon); - this.state = 610; + this.state = 612; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 22) & ~0x1f) === 0 && - ((1 << (_la - 22)) & - ((1 << (KipperParser.CallFunc - 22)) | - (1 << (KipperParser.New - 22)) | - (1 << (KipperParser.True - 22)) | - (1 << (KipperParser.False - 22)) | - (1 << (KipperParser.Typeof - 22)) | - (1 << (KipperParser.Void - 22)) | - (1 << (KipperParser.Null - 22)) | - (1 << (KipperParser.Undefined - 22)) | - (1 << (KipperParser.LeftParen - 22)) | - (1 << (KipperParser.LeftBracket - 22)) | - (1 << (KipperParser.LeftBrace - 22)) | - (1 << (KipperParser.Plus - 22)) | - (1 << (KipperParser.PlusPlus - 22)) | - (1 << (KipperParser.Minus - 22)) | - (1 << (KipperParser.MinusMinus - 22)))) !== + (((_la - 23) & ~0x1f) === 0 && + ((1 << (_la - 23)) & + ((1 << (KipperParser.CallFunc - 23)) | + (1 << (KipperParser.New - 23)) | + (1 << (KipperParser.True - 23)) | + (1 << (KipperParser.False - 23)) | + (1 << (KipperParser.Typeof - 23)) | + (1 << (KipperParser.Void - 23)) | + (1 << (KipperParser.Null - 23)) | + (1 << (KipperParser.Undefined - 23)) | + (1 << (KipperParser.LeftParen - 23)) | + (1 << (KipperParser.LeftBracket - 23)) | + (1 << (KipperParser.LeftBrace - 23)) | + (1 << (KipperParser.Plus - 23)) | + (1 << (KipperParser.PlusPlus - 23)) | + (1 << (KipperParser.Minus - 23)) | + (1 << (KipperParser.MinusMinus - 23)))) !== 0) || - (((_la - 55) & ~0x1f) === 0 && - ((1 << (_la - 55)) & - ((1 << (KipperParser.Not - 55)) | - (1 << (KipperParser.BitwiseNot - 55)) | - (1 << (KipperParser.Identifier - 55)) | - (1 << (KipperParser.IntegerConstant - 55)) | - (1 << (KipperParser.SingleQuoteStringLiteral - 55)) | - (1 << (KipperParser.DoubleQuoteStringLiteral - 55)) | - (1 << (KipperParser.FloatingConstant - 55)) | - (1 << (KipperParser.FStringSingleQuoteStart - 55)) | - (1 << (KipperParser.FStringDoubleQuoteStart - 55)))) !== + (((_la - 56) & ~0x1f) === 0 && + ((1 << (_la - 56)) & + ((1 << (KipperParser.Not - 56)) | + (1 << (KipperParser.BitwiseNot - 56)) | + (1 << (KipperParser.Identifier - 56)) | + (1 << (KipperParser.IntegerConstant - 56)) | + (1 << (KipperParser.SingleQuoteStringLiteral - 56)) | + (1 << (KipperParser.DoubleQuoteStringLiteral - 56)) | + (1 << (KipperParser.FloatingConstant - 56)) | + (1 << (KipperParser.FStringSingleQuoteStart - 56)) | + (1 << (KipperParser.FStringDoubleQuoteStart - 56)))) !== 0) ) { { - this.state = 607; + this.state = 609; this.expression(); _localctx.sliceEnd = true; } } - this.state = 612; + this.state = 614; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3504,13 +3514,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 116, KipperParser.RULE_postfixExpression); try { - this.state = 617; + this.state = 619; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 614; + this.state = 616; this.computedPrimaryExpression(0); } break; @@ -3518,7 +3528,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 615; + this.state = 617; this.incrementOrDecrementPostfixExpression(); } break; @@ -3526,7 +3536,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 616; + this.state = 618; this.typeofExpression(); } break; @@ -3554,9 +3564,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 619; + this.state = 621; this.computedPrimaryExpression(0); - this.state = 620; + this.state = 622; this.incrementOrDecrementOperator(); } } catch (re) { @@ -3579,9 +3589,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 622; + this.state = 624; this.match(KipperParser.Typeof); - this.state = 623; + this.state = 625; this.assignmentExpression(); } } catch (re) { @@ -3602,7 +3612,7 @@ export class KipperParser extends KipperParserBase { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 122, KipperParser.RULE_unaryExpression); try { - this.state = 628; + this.state = 630; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: @@ -3625,7 +3635,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 625; + this.state = 627; this.postfixExpression(); } break; @@ -3633,7 +3643,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 626; + this.state = 628; this.incrementOrDecrementUnaryExpression(); } break; @@ -3643,7 +3653,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.BitwiseNot: this.enterOuterAlt(_localctx, 3); { - this.state = 627; + this.state = 629; this.operatorModifiedUnaryExpression(); } break; @@ -3673,9 +3683,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 630; + this.state = 632; this.incrementOrDecrementOperator(); - this.state = 631; + this.state = 633; this.postfixExpression(); } } catch (re) { @@ -3701,9 +3711,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 633; + this.state = 635; this.unaryOperator(); - this.state = 634; + this.state = 636; this.postfixExpression(); } } catch (re) { @@ -3727,7 +3737,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 636; + this.state = 638; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -3761,16 +3771,16 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 638; + this.state = 640; _la = this._input.LA(1); if ( !( - ((_la - 45) & ~0x1f) === 0 && - ((1 << (_la - 45)) & - ((1 << (KipperParser.Plus - 45)) | - (1 << (KipperParser.Minus - 45)) | - (1 << (KipperParser.Not - 45)) | - (1 << (KipperParser.BitwiseNot - 45)))) !== + ((_la - 46) & ~0x1f) === 0 && + ((1 << (_la - 46)) & + ((1 << (KipperParser.Plus - 46)) | + (1 << (KipperParser.Minus - 46)) | + (1 << (KipperParser.Not - 46)) | + (1 << (KipperParser.BitwiseNot - 46)))) !== 0 ) ) { @@ -3802,14 +3812,14 @@ export class KipperParser extends KipperParserBase { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 132, KipperParser.RULE_castOrConvertExpression); try { - this.state = 645; + this.state = 647; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 640; + this.state = 642; this.unaryExpression(); } break; @@ -3818,11 +3828,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 641; + this.state = 643; this.unaryExpression(); - this.state = 642; + this.state = 644; this.match(KipperParser.As); - this.state = 643; + this.state = 645; this.typeSpecifierExpression(); } break; @@ -3865,11 +3875,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 648; + this.state = 650; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 655; + this.state = 657; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3884,20 +3894,20 @@ export class KipperParser extends KipperParserBase { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 650; + this.state = 652; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 651; + this.state = 653; _la = this._input.LA(1); if ( !( - ((_la - 49) & ~0x1f) === 0 && - ((1 << (_la - 49)) & - ((1 << (KipperParser.Star - 49)) | - (1 << (KipperParser.Div - 49)) | - (1 << (KipperParser.Mod - 49)) | - (1 << (KipperParser.PowerTo - 49)))) !== + ((_la - 50) & ~0x1f) === 0 && + ((1 << (_la - 50)) & + ((1 << (KipperParser.Star - 50)) | + (1 << (KipperParser.Div - 50)) | + (1 << (KipperParser.Mod - 50)) | + (1 << (KipperParser.PowerTo - 50)))) !== 0 ) ) { @@ -3910,12 +3920,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 652; + this.state = 654; this.castOrConvertExpression(); } } } - this.state = 657; + this.state = 659; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); } @@ -3958,11 +3968,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 659; + this.state = 661; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 666; + this.state = 668; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -3977,11 +3987,11 @@ export class KipperParser extends KipperParserBase { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 661; + this.state = 663; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 662; + this.state = 664; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -3993,12 +4003,12 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 663; + this.state = 665; this.multiplicativeExpression(0); } } } - this.state = 668; + this.state = 670; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); } @@ -4040,11 +4050,11 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 670; + this.state = 672; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 678; + this.state = 680; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -4059,18 +4069,18 @@ export class KipperParser extends KipperParserBase { new BitwiseShiftExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 672; + this.state = 674; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 673; + this.state = 675; this.bitwiseShiftOperators(); - this.state = 674; + this.state = 676; this.bitwiseAndExpression(0); } } } - this.state = 680; + this.state = 682; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); } @@ -4096,15 +4106,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 681; + this.state = 683; _la = this._input.LA(1); if ( !( - ((_la - 72) & ~0x1f) === 0 && - ((1 << (_la - 72)) & - ((1 << (KipperParser.BitwiseZeroFillLeftShift - 72)) | - (1 << (KipperParser.BitwiseSignedRightShift - 72)) | - (1 << (KipperParser.BitwiseZeroFillRightShift - 72)))) !== + ((_la - 73) & ~0x1f) === 0 && + ((1 << (_la - 73)) & + ((1 << (KipperParser.BitwiseZeroFillLeftShift - 73)) | + (1 << (KipperParser.BitwiseSignedRightShift - 73)) | + (1 << (KipperParser.BitwiseZeroFillRightShift - 73)))) !== 0 ) ) { @@ -4132,6 +4142,78 @@ export class KipperParser extends KipperParserBase { return _localctx; } + public instanceOfExpression(): InstanceOfExpressionContext; + public instanceOfExpression(_p: number): InstanceOfExpressionContext; + // @RuleVersion(0) + public instanceOfExpression(_p?: number): InstanceOfExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: InstanceOfExpressionContext = new InstanceOfExpressionContext(this._ctx, _parentState); + let _prevctx: InstanceOfExpressionContext = _localctx; + let _startState: number = 142; + this.enterRecursionRule(_localctx, 142, KipperParser.RULE_instanceOfExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnInstanceOfExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 686; + this.bitwiseShiftExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 693; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualInstanceOfExpressionContext( + new InstanceOfExpressionContext(_parentctx, _parentState), + ); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_instanceOfExpression); + this.state = 688; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 689; + this.match(KipperParser.InstanceOf); + this.state = 690; + this.typeSpecifierExpression(); + } + } + } + this.state = 695; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + } + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + public relationalExpression(): RelationalExpressionContext; public relationalExpression(_p: number): RelationalExpressionContext; // @RuleVersion(0) @@ -4144,8 +4226,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); let _prevctx: RelationalExpressionContext = _localctx; - let _startState: number = 142; - this.enterRecursionRule(_localctx, 142, KipperParser.RULE_relationalExpression, _p); + let _startState: number = 144; + this.enterRecursionRule(_localctx, 144, KipperParser.RULE_relationalExpression, _p); let _la: number; try { let _alt: number; @@ -4156,13 +4238,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 684; - this.bitwiseShiftExpression(0); + this.state = 697; + this.instanceOfExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 691; + this.state = 704; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4175,20 +4257,20 @@ export class KipperParser extends KipperParserBase { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 686; + this.state = 699; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 687; + this.state = 700; _la = this._input.LA(1); if ( !( - ((_la - 64) & ~0x1f) === 0 && - ((1 << (_la - 64)) & - ((1 << (KipperParser.Less - 64)) | - (1 << (KipperParser.LessEqual - 64)) | - (1 << (KipperParser.Greater - 64)) | - (1 << (KipperParser.GreaterEqual - 64)))) !== + ((_la - 65) & ~0x1f) === 0 && + ((1 << (_la - 65)) & + ((1 << (KipperParser.Less - 65)) | + (1 << (KipperParser.LessEqual - 65)) | + (1 << (KipperParser.Greater - 65)) | + (1 << (KipperParser.GreaterEqual - 65)))) !== 0 ) ) { @@ -4201,14 +4283,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 688; + this.state = 701; this.bitwiseShiftExpression(0); } } } - this.state = 693; + this.state = 706; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); } } } catch (re) { @@ -4237,8 +4319,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 144; - this.enterRecursionRule(_localctx, 144, KipperParser.RULE_equalityExpression, _p); + let _startState: number = 146; + this.enterRecursionRule(_localctx, 146, KipperParser.RULE_equalityExpression, _p); let _la: number; try { let _alt: number; @@ -4249,13 +4331,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 695; + this.state = 708; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 702; + this.state = 715; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4268,11 +4350,11 @@ export class KipperParser extends KipperParserBase { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 697; + this.state = 710; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 698; + this.state = 711; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -4284,14 +4366,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 699; + this.state = 712; this.relationalExpression(0); } } } - this.state = 704; + this.state = 717; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); } } } catch (re) { @@ -4320,8 +4402,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseAndExpressionContext = new BitwiseAndExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseAndExpressionContext = _localctx; - let _startState: number = 146; - this.enterRecursionRule(_localctx, 146, KipperParser.RULE_bitwiseAndExpression, _p); + let _startState: number = 148; + this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4331,13 +4413,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 706; + this.state = 719; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 713; + this.state = 726; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4350,20 +4432,20 @@ export class KipperParser extends KipperParserBase { new BitwiseAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 708; + this.state = 721; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 709; + this.state = 722; this.match(KipperParser.BitwiseAnd); - this.state = 710; + this.state = 723; this.equalityExpression(0); } } } - this.state = 715; + this.state = 728; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); } } } catch (re) { @@ -4392,8 +4474,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseXorExpressionContext = new BitwiseXorExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseXorExpressionContext = _localctx; - let _startState: number = 148; - this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseXorExpression, _p); + let _startState: number = 150; + this.enterRecursionRule(_localctx, 150, KipperParser.RULE_bitwiseXorExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4403,13 +4485,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 717; + this.state = 730; this.bitwiseAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 724; + this.state = 737; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4422,20 +4504,20 @@ export class KipperParser extends KipperParserBase { new BitwiseXorExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 719; + this.state = 732; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 720; + this.state = 733; this.match(KipperParser.BitwiseXor); - this.state = 721; + this.state = 734; this.bitwiseAndExpression(0); } } } - this.state = 726; + this.state = 739; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); } } } catch (re) { @@ -4464,8 +4546,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseOrExpressionContext = new BitwiseOrExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseOrExpressionContext = _localctx; - let _startState: number = 150; - this.enterRecursionRule(_localctx, 150, KipperParser.RULE_bitwiseOrExpression, _p); + let _startState: number = 152; + this.enterRecursionRule(_localctx, 152, KipperParser.RULE_bitwiseOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4475,13 +4557,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 728; + this.state = 741; this.bitwiseXorExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 735; + this.state = 748; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4494,20 +4576,20 @@ export class KipperParser extends KipperParserBase { new BitwiseOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 730; + this.state = 743; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 731; + this.state = 744; this.match(KipperParser.BitwiseOr); - this.state = 732; + this.state = 745; this.bitwiseXorExpression(0); } } } - this.state = 737; + this.state = 750; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); } } } catch (re) { @@ -4536,8 +4618,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); let _prevctx: LogicalAndExpressionContext = _localctx; - let _startState: number = 152; - this.enterRecursionRule(_localctx, 152, KipperParser.RULE_logicalAndExpression, _p); + let _startState: number = 154; + this.enterRecursionRule(_localctx, 154, KipperParser.RULE_logicalAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4547,13 +4629,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 739; + this.state = 752; this.bitwiseOrExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 746; + this.state = 759; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4566,20 +4648,20 @@ export class KipperParser extends KipperParserBase { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 741; + this.state = 754; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 742; + this.state = 755; this.match(KipperParser.AndAnd); - this.state = 743; + this.state = 756; this.bitwiseOrExpression(0); } } } - this.state = 748; + this.state = 761; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); } } } catch (re) { @@ -4608,8 +4690,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); let _prevctx: LogicalOrExpressionContext = _localctx; - let _startState: number = 154; - this.enterRecursionRule(_localctx, 154, KipperParser.RULE_logicalOrExpression, _p); + let _startState: number = 156; + this.enterRecursionRule(_localctx, 156, KipperParser.RULE_logicalOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4619,13 +4701,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 750; + this.state = 763; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 757; + this.state = 770; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4638,20 +4720,20 @@ export class KipperParser extends KipperParserBase { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 752; + this.state = 765; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 753; + this.state = 766; this.match(KipperParser.OrOr); - this.state = 754; + this.state = 767; this.logicalAndExpression(0); } } } - this.state = 759; + this.state = 772; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); } } } catch (re) { @@ -4670,16 +4752,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public conditionalExpression(): ConditionalExpressionContext { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 156, KipperParser.RULE_conditionalExpression); + this.enterRule(_localctx, 158, KipperParser.RULE_conditionalExpression); try { - this.state = 767; + this.state = 780; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 760; + this.state = 773; this.logicalOrExpression(0); } break; @@ -4688,15 +4770,15 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 761; + this.state = 774; this.logicalOrExpression(0); - this.state = 762; + this.state = 775; this.match(KipperParser.QuestionMark); - this.state = 763; + this.state = 776; this.conditionalExpression(); - this.state = 764; + this.state = 777; this.match(KipperParser.Colon); - this.state = 765; + this.state = 778; this.conditionalExpression(); } break; @@ -4717,16 +4799,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentExpression(): AssignmentExpressionContext { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 158, KipperParser.RULE_assignmentExpression); + this.enterRule(_localctx, 160, KipperParser.RULE_assignmentExpression); try { - this.state = 774; + this.state = 787; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 71, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 769; + this.state = 782; this.conditionalExpression(); } break; @@ -4735,11 +4817,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 770; + this.state = 783; this.computedPrimaryExpression(0); - this.state = 771; + this.state = 784; this.assignmentOperator(); - this.state = 772; + this.state = 785; this.assignmentExpression(); } break; @@ -4760,23 +4842,23 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 160, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 162, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 776; + this.state = 789; _la = this._input.LA(1); if ( !( - ((_la - 56) & ~0x1f) === 0 && - ((1 << (_la - 56)) & - ((1 << (KipperParser.Assign - 56)) | - (1 << (KipperParser.PlusAssign - 56)) | - (1 << (KipperParser.MinusAssign - 56)) | - (1 << (KipperParser.StarAssign - 56)) | - (1 << (KipperParser.DivAssign - 56)) | - (1 << (KipperParser.ModAssign - 56)))) !== + ((_la - 57) & ~0x1f) === 0 && + ((1 << (_la - 57)) & + ((1 << (KipperParser.Assign - 57)) | + (1 << (KipperParser.PlusAssign - 57)) | + (1 << (KipperParser.MinusAssign - 57)) | + (1 << (KipperParser.StarAssign - 57)) | + (1 << (KipperParser.DivAssign - 57)) | + (1 << (KipperParser.ModAssign - 57)))) !== 0 ) ) { @@ -4806,30 +4888,30 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 162, KipperParser.RULE_expression); + this.enterRule(_localctx, 164, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 778; + this.state = 791; this.assignmentExpression(); - this.state = 783; + this.state = 796; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 779; + this.state = 792; this.match(KipperParser.Comma); - this.state = 780; + this.state = 793; this.assignmentExpression(); } } } - this.state = 785; + this.state = 798; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); } } } catch (re) { @@ -4848,15 +4930,15 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierExpression(): TypeSpecifierExpressionContext { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 164, KipperParser.RULE_typeSpecifierExpression); + this.enterRule(_localctx, 166, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 789; + this.state = 802; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 73, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 786; + this.state = 799; this.identifierTypeSpecifierExpression(); } break; @@ -4864,7 +4946,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 787; + this.state = 800; this.genericTypeSpecifierExpression(); } break; @@ -4872,7 +4954,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 788; + this.state = 801; this.typeofTypeSpecifierExpression(); } break; @@ -4896,11 +4978,11 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 166, KipperParser.RULE_identifierTypeSpecifierExpression); + this.enterRule(_localctx, 168, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 791; + this.state = 804; this.typeSpecifierIdentifier(); } } catch (re) { @@ -4922,51 +5004,51 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 168, KipperParser.RULE_genericTypeSpecifierExpression); + this.enterRule(_localctx, 170, KipperParser.RULE_genericTypeSpecifierExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 793; + this.state = 806; this.typeSpecifierIdentifier(); - this.state = 794; + this.state = 807; this.match(KipperParser.Less); - this.state = 803; + this.state = 816; this._errHandler.sync(this); _la = this._input.LA(1); if ( - (((_la - 30) & ~0x1f) === 0 && - ((1 << (_la - 30)) & - ((1 << (KipperParser.Typeof - 30)) | - (1 << (KipperParser.Void - 30)) | - (1 << (KipperParser.Null - 30)) | - (1 << (KipperParser.Undefined - 30)))) !== + (((_la - 31) & ~0x1f) === 0 && + ((1 << (_la - 31)) & + ((1 << (KipperParser.Typeof - 31)) | + (1 << (KipperParser.Void - 31)) | + (1 << (KipperParser.Null - 31)) | + (1 << (KipperParser.Undefined - 31)))) !== 0) || _la === KipperParser.Identifier ) { { - this.state = 795; + this.state = 808; this.typeSpecifierExpression(); - this.state = 800; + this.state = 813; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 796; + this.state = 809; this.match(KipperParser.Comma); - this.state = 797; + this.state = 810; this.typeSpecifierExpression(); } } - this.state = 802; + this.state = 815; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 805; + this.state = 818; this.match(KipperParser.Greater); } } catch (re) { @@ -4988,17 +5070,17 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 170, KipperParser.RULE_typeofTypeSpecifierExpression); + this.enterRule(_localctx, 172, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 807; + this.state = 820; this.match(KipperParser.Typeof); - this.state = 808; + this.state = 821; this.match(KipperParser.LeftParen); - this.state = 809; + this.state = 822; this.typeSpecifierIdentifier(); - this.state = 810; + this.state = 823; this.match(KipperParser.RightParen); } } catch (re) { @@ -5017,20 +5099,20 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 172, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 174, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 812; + this.state = 825; _la = this._input.LA(1); if ( !( - (((_la - 31) & ~0x1f) === 0 && - ((1 << (_la - 31)) & - ((1 << (KipperParser.Void - 31)) | - (1 << (KipperParser.Null - 31)) | - (1 << (KipperParser.Undefined - 31)))) !== + (((_la - 32) & ~0x1f) === 0 && + ((1 << (_la - 32)) & + ((1 << (KipperParser.Void - 32)) | + (1 << (KipperParser.Null - 32)) | + (1 << (KipperParser.Undefined - 32)))) !== 0) || _la === KipperParser.Identifier ) @@ -5077,24 +5159,27 @@ export class KipperParser extends KipperParserBase { return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); case 71: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + return this.instanceOfExpression_sempred(_localctx as InstanceOfExpressionContext, predIndex); case 72: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); case 73: - return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); case 74: - return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); case 75: - return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); case 76: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); case 77: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + + case 78: return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; @@ -5143,59 +5228,66 @@ export class KipperParser extends KipperParserBase { } return true; } - private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { + private instanceOfExpression_sempred(_localctx: InstanceOfExpressionContext, predIndex: number): boolean { switch (predIndex) { case 8: return this.precpred(this._ctx, 1); } return true; } - private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { + private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { case 9: return this.precpred(this._ctx, 1); } return true; } - private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { + private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { case 10: return this.precpred(this._ctx, 1); } return true; } - private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { + private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { case 11: return this.precpred(this._ctx, 1); } return true; } - private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { + private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { case 12: return this.precpred(this._ctx, 1); } return true; } - private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { + private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { case 13: return this.precpred(this._ctx, 1); } return true; } - private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { + private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { case 14: return this.precpred(this._ctx, 1); } return true; } + private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 15: + return this.precpred(this._ctx, 1); + } + return true; + } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03Z\u0331\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03[\u033E\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -5208,379 +5300,385 @@ export class KipperParser extends KipperParserBase { "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + - "X\tX\x03\x02\x05\x02\xB2\n\x02\x03\x02\x03\x02\x03\x03\x06\x03\xB7\n\x03" + - "\r\x03\x0E\x03\xB8\x03\x04\x03\x04\x03\x05\x06\x05\xBE\n\x05\r\x05\x0E" + - "\x05\xBF\x03\x06\x03\x06\x03\x06\x05\x06\xC5\n\x06\x03\x07\x03\x07\x03" + - "\x07\x03\x07\x03\x07\x03\x07\x05\x07\xCD\n\x07\x03\b\x03\b\x03\b\x03\t" + - "\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xD9\n\n\x03\v\x03\v\x03\f\x03" + - "\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE5\n\x0E\x03\x0E" + - "\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xEB\n\x0E\x03\x0F\x03\x0F\x03\x0F\x07" + - "\x0F\xF0\n\x0F\f\x0F\x0E\x0F\xF3\v\x0F\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\xFD\n\x11\f\x11\x0E\x11\u0100" + - "\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0106\n\x12\x03\x13\x03" + - "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0110\n\x14" + - "\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x07\x15\u011C\n\x15\f\x15\x0E\x15\u011F\v\x15\x03\x15\x03\x15" + - "\x03\x16\x03\x16\x03\x16\x05\x16\u0126\n\x16\x03\x17\x03\x17\x03\x17\x03" + - "\x17\x03\x18\x03\x18\x03\x18\x05\x18\u012F\n\x18\x03\x18\x03\x18\x03\x18" + - "\x03\x18\x05\x18\u0135\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u013A\n\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x05\x1A\u0145\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u014A\n\x1B\x03\x1B" + - "\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x05\x1D" + - "\u0155\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x05" + - "\x1E\u015E\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F" + - "\u0166\n\x1F\f\x1F\x0E\x1F\u0169\v\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 " + - "\x03 \x03 \x03 \x03 \x03 \x05 \u0175\n \x03!\x03!\x03!\x05!\u017A\n!\x03" + - '"\x03"\x03"\x03"\x05"\u0180\n"\x03"\x03"\x05"\u0184\n"\x03"' + - '\x03"\x03"\x03"\x05"\u018A\n"\x03"\x03"\x03"\x03"\x05"\u0190' + - '\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03' + - "$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01A8\n&\x03&\x03" + - "&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x05'\u01B6" + - "\n'\x03(\x03(\x05(\u01BA\n(\x03(\x03(\x03(\x03(\x03(\x03(\x05(\u01C2" + - "\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x05-\u01D0" + - "\n-\x03.\x03.\x03/\x03/\x07/\u01D6\n/\f/\x0E/\u01D9\v/\x03/\x03/\x03/" + - "\x07/\u01DE\n/\f/\x0E/\u01E1\v/\x03/\x05/\u01E4\n/\x030\x030\x030\x05" + - "0\u01E9\n0\x030\x050\u01EC\n0\x031\x031\x031\x051\u01F1\n1\x031\x051\u01F4" + - "\n1\x032\x032\x033\x033\x033\x033\x073\u01FC\n3\f3\x0E3\u01FF\v3\x053" + - "\u0201\n3\x033\x053\u0204\n3\x033\x033\x034\x034\x034\x034\x074\u020C" + - "\n4\f4\x0E4\u020F\v4\x054\u0211\n4\x034\x054\u0214\n4\x034\x034\x035\x03" + - "5\x035\x035\x036\x036\x037\x037\x037\x037\x037\x037\x057\u0224\n7\x03" + - "7\x037\x037\x037\x037\x037\x037\x057\u022D\n7\x037\x037\x037\x057\u0232" + - "\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x057\u0243\n7\x037\x037\x077\u0247\n7\f7\x0E7\u024A\v7\x038\x03" + - "8\x038\x078\u024F\n8\f8\x0E8\u0252\v8\x039\x039\x039\x03:\x03:\x03:\x03" + - ":\x03;\x03;\x03;\x03;\x05;\u025F\n;\x03;\x03;\x03;\x03;\x05;\u0265\n;" + - "\x03;\x03;\x03<\x03<\x03<\x05<\u026C\n<\x03=\x03=\x03=\x03>\x03>\x03>" + - "\x03?\x03?\x03?\x05?\u0277\n?\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B" + - "\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u0288\nD\x03E\x03E\x03E\x03E" + - "\x03E\x03E\x07E\u0290\nE\fE\x0EE\u0293\vE\x03F\x03F\x03F\x03F\x03F\x03" + - "F\x07F\u029B\nF\fF\x0EF\u029E\vF\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x07" + - "G\u02A7\nG\fG\x0EG\u02AA\vG\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x07" + - "I\u02B4\nI\fI\x0EI\u02B7\vI\x03J\x03J\x03J\x03J\x03J\x03J\x07J\u02BF\n" + - "J\fJ\x0EJ\u02C2\vJ\x03K\x03K\x03K\x03K\x03K\x03K\x07K\u02CA\nK\fK\x0E" + - "K\u02CD\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D5\nL\fL\x0EL\u02D8\v" + - "L\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E0\nM\fM\x0EM\u02E3\vM\x03N\x03" + - "N\x03N\x03N\x03N\x03N\x07N\u02EB\nN\fN\x0EN\u02EE\vN\x03O\x03O\x03O\x03" + - "O\x03O\x03O\x07O\u02F6\nO\fO\x0EO\u02F9\vO\x03P\x03P\x03P\x03P\x03P\x03" + - "P\x03P\x05P\u0302\nP\x03Q\x03Q\x03Q\x03Q\x03Q\x05Q\u0309\nQ\x03R\x03R" + - "\x03S\x03S\x03S\x07S\u0310\nS\fS\x0ES\u0313\vS\x03T\x03T\x03T\x05T\u0318" + - "\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x07V\u0321\nV\fV\x0EV\u0324\vV" + - "\x05V\u0326\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x02\x02" + - "\rl\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9CY\x02\x02\x04\x02\x06\x02\b" + - "\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02" + - '\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x02' + - "6\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02" + - "R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02" + - "n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02" + - "\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02" + - "\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02" + - "\xAA\x02\xAC\x02\xAE\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02" + - "\x1E\x1F\x03\x02PQ\x04\x02OORR\x03\x02!#\x04\x020022\x06\x02//1199II\x03" + - "\x0236\x04\x02//11\x03\x02JL\x03\x02BE\x03\x02@A\x03\x02:?\x04\x02!#N" + - "N\x02\u033B\x02\xB1\x03\x02\x02\x02\x04\xB6\x03\x02\x02\x02\x06\xBA\x03" + - "\x02\x02\x02\b\xBD\x03\x02\x02\x02\n\xC4\x03\x02\x02\x02\f\xCC\x03\x02" + - "\x02\x02\x0E\xCE\x03\x02\x02\x02\x10\xD1\x03\x02\x02\x02\x12\xD3\x03\x02" + - "\x02\x02\x14\xDA\x03\x02\x02\x02\x16\xDC\x03\x02\x02\x02\x18\xDE\x03\x02" + - "\x02\x02\x1A\xE0\x03\x02\x02\x02\x1C\xEC\x03\x02\x02\x02\x1E\xF4\x03\x02" + - '\x02\x02 \xF8\x03\x02\x02\x02"\u0105\x03\x02\x02\x02$\u0107\x03\x02\x02' + - "\x02&\u010C\x03\x02\x02\x02(\u0116\x03\x02\x02\x02*\u0125\x03\x02\x02" + - "\x02,\u0127\x03\x02\x02\x02.\u012B\x03\x02\x02\x020\u0136\x03\x02\x02" + - "\x022\u0144\x03\x02\x02\x024\u0146\x03\x02\x02\x026\u014D\x03\x02\x02" + - "\x028\u0154\x03\x02\x02\x02:\u0156\x03\x02\x02\x02<\u015F\x03\x02\x02" + - "\x02>\u0174\x03\x02\x02\x02@\u0179\x03\x02\x02\x02B\u017B\x03\x02\x02" + - "\x02D\u0194\x03\x02\x02\x02F\u019A\x03\x02\x02\x02H\u01A2\x03\x02\x02" + - "\x02J\u01A5\x03\x02\x02\x02L\u01B5\x03\x02\x02\x02N\u01B7\x03\x02\x02" + - "\x02P\u01C3\x03\x02\x02\x02R\u01C7\x03\x02\x02\x02T\u01C9\x03\x02\x02" + - "\x02V\u01CB\x03\x02\x02\x02X\u01CF\x03\x02\x02\x02Z\u01D1\x03\x02\x02" + - "\x02\\\u01E3\x03\x02\x02\x02^\u01EB\x03\x02\x02\x02`\u01F3\x03\x02\x02" + - "\x02b\u01F5\x03\x02\x02\x02d\u01F7\x03\x02\x02\x02f\u0207\x03\x02\x02" + - "\x02h\u0217\x03\x02\x02\x02j\u021B\x03\x02\x02\x02l\u0231\x03\x02\x02" + - "\x02n\u024B\x03\x02\x02\x02p\u0253\x03\x02\x02\x02r\u0256\x03\x02\x02" + - "\x02t\u025A\x03\x02\x02\x02v\u026B\x03\x02\x02\x02x\u026D\x03\x02\x02" + - "\x02z\u0270\x03\x02\x02\x02|\u0276\x03\x02\x02\x02~\u0278\x03\x02\x02" + - "\x02\x80\u027B\x03\x02\x02\x02\x82\u027E\x03\x02\x02\x02\x84\u0280\x03" + - "\x02\x02\x02\x86\u0287\x03\x02\x02\x02\x88\u0289\x03\x02\x02\x02\x8A\u0294" + - "\x03\x02\x02\x02\x8C\u029F\x03\x02\x02\x02\x8E\u02AB\x03\x02\x02\x02\x90" + - "\u02AD\x03\x02\x02\x02\x92\u02B8\x03\x02\x02\x02\x94\u02C3\x03\x02\x02" + - "\x02\x96\u02CE\x03\x02\x02\x02\x98\u02D9\x03\x02\x02\x02\x9A\u02E4\x03" + - "\x02\x02\x02\x9C\u02EF\x03\x02\x02\x02\x9E\u0301\x03\x02\x02\x02\xA0\u0308" + - "\x03\x02\x02\x02\xA2\u030A\x03\x02\x02\x02\xA4\u030C\x03\x02\x02\x02\xA6" + - "\u0317\x03\x02\x02\x02\xA8\u0319\x03\x02\x02\x02\xAA\u031B\x03\x02\x02" + - "\x02\xAC\u0329\x03\x02\x02\x02\xAE\u032E\x03\x02\x02\x02\xB0\xB2\x05\x04" + - "\x03\x02\xB1\xB0\x03\x02\x02\x02\xB1\xB2\x03\x02\x02\x02\xB2\xB3\x03\x02" + - "\x02\x02\xB3\xB4\x07\x02\x02\x03\xB4\x03\x03\x02\x02\x02\xB5\xB7\x05\x06" + - "\x04\x02\xB6\xB5\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xB6\x03\x02" + - "\x02\x02\xB8\xB9\x03\x02\x02\x02\xB9\x05\x03\x02\x02\x02\xBA\xBB\x05\b" + - "\x05\x02\xBB\x07\x03\x02\x02\x02\xBC\xBE\x05\n\x06\x02\xBD\xBC\x03\x02" + - "\x02\x02\xBE\xBF\x03\x02\x02\x02\xBF\xBD\x03\x02\x02\x02\xBF\xC0\x03\x02" + - "\x02\x02\xC0\t\x03\x02\x02\x02\xC1\xC5\x052\x1A\x02\xC2\xC5\x05\f\x07" + - "\x02\xC3\xC5\x07%\x02\x02\xC4\xC1\x03\x02\x02\x02\xC4\xC2\x03\x02\x02" + - "\x02\xC4\xC3\x03\x02\x02\x02\xC5\v\x03\x02\x02\x02\xC6\xC7\x05\x0E\b\x02" + - "\xC7\xC8\x07%\x02\x02\xC8\xCD\x03\x02\x02\x02\xC9\xCD\x05\x1A\x0E\x02" + - "\xCA\xCD\x05 \x11\x02\xCB\xCD\x05(\x15\x02\xCC\xC6\x03\x02\x02\x02\xCC" + - "\xC9\x03\x02\x02\x02\xCC\xCA\x03\x02\x02\x02\xCC\xCB\x03\x02\x02\x02\xCD" + - "\r\x03\x02\x02\x02\xCE\xCF\x05\x10\t\x02\xCF\xD0\x05\x12\n\x02\xD0\x0F" + - "\x03\x02\x02\x02\xD1\xD2\t\x02\x02\x02\xD2\x11\x03\x02\x02\x02\xD3\xD4" + - "\x05\x16\f\x02\xD4\xD5\x07'\x02\x02\xD5\xD8\x05\xA6T\x02\xD6\xD7\x07" + - ":\x02\x02\xD7\xD9\x05\x14\v\x02\xD8\xD6\x03\x02\x02\x02\xD8\xD9\x03\x02" + - "\x02\x02\xD9\x13\x03\x02\x02\x02\xDA\xDB\x05\xA0Q\x02\xDB\x15\x03\x02" + - "\x02\x02\xDC\xDD\x05\x18\r\x02\xDD\x17\x03\x02\x02\x02\xDE\xDF\x07N\x02" + - "\x02\xDF\x19\x03\x02\x02\x02\xE0\xE1\x07\x16\x02\x02\xE1\xE2\x05\x16\f" + - "\x02\xE2\xE4\x07(\x02\x02\xE3\xE5\x05\x1C\x0F\x02\xE4\xE3\x03\x02\x02" + - "\x02\xE4\xE5\x03\x02\x02\x02\xE5\xE6\x03\x02\x02\x02\xE6\xE7\x07)\x02" + - "\x02\xE7\xE8\x07\x19\x02\x02\xE8\xEA\x05\xA6T\x02\xE9\xEB\x054\x1B\x02" + - "\xEA\xE9\x03\x02\x02\x02\xEA\xEB\x03\x02\x02\x02\xEB\x1B\x03\x02\x02\x02" + - "\xEC\xF1\x05\x1E\x10\x02\xED\xEE\x07$\x02\x02\xEE\xF0\x05\x1E\x10\x02" + - "\xEF\xED\x03\x02\x02\x02\xF0\xF3\x03\x02\x02\x02\xF1\xEF\x03\x02\x02\x02" + - "\xF1\xF2\x03\x02\x02\x02\xF2\x1D\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + - "\xF4\xF5\x05\x16\f\x02\xF5\xF6\x07'\x02\x02\xF6\xF7\x05\xA6T\x02\xF7" + - "\x1F\x03\x02\x02\x02\xF8\xF9\x07\x1B\x02\x02\xF9\xFA\x05\x16\f\x02\xFA" + - '\xFE\x07-\x02\x02\xFB\xFD\x05"\x12\x02\xFC\xFB\x03\x02\x02\x02\xFD\u0100' + - "\x03\x02\x02\x02\xFE\xFC\x03\x02\x02\x02\xFE\xFF\x03\x02\x02\x02\xFF\u0101" + - "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0101\u0102\x07.\x02\x02\u0102" + - "!\x03\x02\x02\x02\u0103\u0106\x05$\x13\x02\u0104\u0106\x05&\x14\x02\u0105" + - "\u0103\x03\x02\x02\x02\u0105\u0104\x03\x02\x02\x02\u0106#\x03\x02\x02" + - "\x02\u0107\u0108\x05\x16\f\x02\u0108\u0109\x07'\x02\x02\u0109\u010A\x05" + - "\xA6T\x02\u010A\u010B\x07%\x02\x02\u010B%\x03\x02\x02\x02\u010C\u010D" + - "\x05\x16\f\x02\u010D\u010F\x07(\x02\x02\u010E\u0110\x05\x1C\x0F\x02\u010F" + - "\u010E\x03\x02\x02\x02\u010F\u0110\x03\x02\x02\x02\u0110\u0111\x03\x02" + - "\x02\x02\u0111\u0112\x07)\x02\x02\u0112\u0113\x07'\x02\x02\u0113\u0114" + - "\x05\xA6T\x02\u0114\u0115\x07%\x02\x02\u0115'\x03\x02\x02\x02\u0116\u0117" + - "\x07\x1A\x02\x02\u0117\u0118\x05\x16\f\x02\u0118\u011D\x07-\x02\x02\u0119" + - "\u011C\x05*\x16\x02\u011A\u011C\x07%\x02\x02\u011B\u0119\x03\x02\x02\x02" + - "\u011B\u011A\x03\x02\x02\x02\u011C\u011F\x03\x02\x02\x02\u011D\u011B\x03" + - "\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E\u0120\x03\x02\x02\x02\u011F" + - "\u011D\x03\x02\x02\x02\u0120\u0121\x07.\x02\x02\u0121)\x03\x02\x02\x02" + - "\u0122\u0126\x05,\x17\x02\u0123\u0126\x05.\x18\x02\u0124\u0126\x050\x19" + - "\x02\u0125\u0122\x03\x02\x02\x02\u0125\u0123\x03\x02\x02\x02\u0125\u0124" + - "\x03\x02\x02\x02\u0126+\x03\x02\x02\x02\u0127\u0128\x05\x16\f\x02\u0128" + - "\u0129\x07'\x02\x02\u0129\u012A\x05\xA6T\x02\u012A-\x03\x02\x02\x02\u012B" + - "\u012C\x05\x16\f\x02\u012C\u012E\x07(\x02\x02\u012D\u012F\x05\x1C\x0F" + - "\x02\u012E\u012D\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F\u0130" + - "\x03\x02\x02\x02\u0130\u0131\x07)\x02\x02\u0131\u0132\x07'\x02\x02\u0132" + - "\u0134\x05\xA6T\x02\u0133\u0135\x054\x1B\x02\u0134\u0133\x03\x02\x02\x02" + - "\u0134\u0135\x03\x02\x02\x02\u0135/\x03\x02\x02\x02\u0136\u0137\x07\x1C" + - "\x02\x02\u0137\u0139\x07(\x02\x02\u0138\u013A\x05\x1C\x0F\x02\u0139\u0138" + - "\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02" + - "\u013B\u013C\x07)\x02\x02\u013C\u013D\x054\x1B\x02\u013D1\x03\x02\x02" + - "\x02\u013E\u0145\x056\x1C\x02\u013F\u0145\x058\x1D\x02\u0140\u0145\x05" + - "@!\x02\u0141\u0145\x05H%\x02\u0142\u0145\x05J&\x02\u0143\u0145\x054\x1B" + - "\x02\u0144\u013E\x03\x02\x02\x02\u0144\u013F\x03\x02\x02\x02\u0144\u0140" + - "\x03\x02\x02\x02\u0144\u0141\x03\x02\x02\x02\u0144\u0142\x03\x02\x02\x02" + - "\u0144\u0143\x03\x02\x02\x02\u01453\x03\x02\x02\x02\u0146\u0147\x06\x1B" + - "\x02\x02\u0147\u0149\x07-\x02\x02\u0148\u014A\x05\b\x05\x02\u0149\u0148" + - "\x03\x02\x02\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014B\x03\x02\x02\x02" + - "\u014B\u014C\x07.\x02\x02\u014C5\x03\x02\x02\x02\u014D\u014E\b\x1C\x01" + - "\x02\u014E\u014F\x05\xA4S\x02\u014F\u0150\x07%\x02\x02\u0150\u0151\b\x1C" + - "\x01\x02\u01517\x03\x02\x02\x02\u0152\u0155\x05:\x1E\x02\u0153\u0155\x05" + - "<\x1F\x02\u0154\u0152\x03\x02\x02\x02\u0154\u0153\x03\x02\x02\x02\u0155" + - "9\x03\x02\x02\x02\u0156\u0157\x07\x12\x02\x02\u0157\u0158\x07(\x02\x02" + - "\u0158\u0159\x05\xA4S\x02\u0159\u015A\x07)\x02\x02\u015A\u015D\x052\x1A" + - "\x02\u015B\u015C\x07\x13\x02\x02\u015C\u015E\x052\x1A\x02\u015D\u015B" + - "\x03\x02\x02\x02\u015D\u015E\x03\x02\x02\x02\u015E;\x03\x02\x02\x02\u015F" + - "\u0160\x07\v\x02\x02\u0160\u0161\x07(\x02\x02\u0161\u0162\x05\xA4S\x02" + - "\u0162\u0163\x07)\x02\x02\u0163\u0167\x07-\x02\x02\u0164\u0166\x05> \x02" + - "\u0165\u0164\x03\x02\x02\x02\u0166\u0169\x03\x02\x02\x02\u0167\u0165\x03" + - "\x02\x02\x02\u0167\u0168\x03\x02\x02\x02\u0168\u016A\x03\x02\x02\x02\u0169" + - "\u0167\x03\x02\x02\x02\u016A\u016B\x07.\x02\x02\u016B=\x03\x02\x02\x02" + - "\u016C\u016D\x07\f\x02\x02\u016D\u016E\x05\xA4S\x02\u016E\u016F\x07'" + - "\x02\x02\u016F\u0170\x052\x1A\x02\u0170\u0175\x03\x02\x02\x02\u0171\u0172" + - "\x07\r\x02\x02\u0172\u0173\x07'\x02\x02\u0173\u0175\x052\x1A\x02\u0174" + - "\u016C\x03\x02\x02\x02\u0174\u0171\x03\x02\x02\x02\u0175?\x03\x02\x02" + - '\x02\u0176\u017A\x05B"\x02\u0177\u017A\x05D#\x02\u0178\u017A\x05F$\x02' + - "\u0179\u0176\x03\x02\x02\x02\u0179\u0177\x03\x02\x02\x02\u0179\u0178\x03" + - "\x02\x02\x02\u017AA\x03\x02\x02\x02\u017B\u017C\x07\x14\x02\x02\u017C" + - "\u0183\x07(\x02\x02\u017D\u0180\x05\x0E\b\x02\u017E\u0180\x05\xA4S\x02" + - "\u017F\u017D\x03\x02\x02\x02\u017F\u017E\x03\x02\x02\x02\u0180\u0181\x03" + - '\x02\x02\x02\u0181\u0182\b"\x01\x02\u0182\u0184\x03\x02\x02\x02\u0183' + - "\u017F\x03\x02\x02\x02\u0183\u0184\x03\x02\x02\x02\u0184\u0185\x03\x02" + - "\x02\x02\u0185\u0189\x07%\x02\x02\u0186\u0187\x05\xA4S\x02\u0187\u0188" + - '\b"\x01\x02\u0188\u018A\x03\x02\x02\x02\u0189\u0186\x03\x02\x02\x02\u0189' + - "\u018A\x03\x02\x02\x02\u018A\u018B\x03\x02\x02\x02\u018B\u018F\x07%\x02" + - '\x02\u018C\u018D\x05\xA4S\x02\u018D\u018E\b"\x01\x02\u018E\u0190\x03' + - "\x02\x02\x02\u018F\u018C\x03\x02\x02\x02\u018F\u0190\x03\x02\x02\x02\u0190" + - "\u0191\x03\x02\x02\x02\u0191\u0192\x07)\x02\x02\u0192\u0193\x052\x1A\x02" + - "\u0193C\x03\x02\x02\x02\u0194\u0195\x07\x11\x02\x02\u0195\u0196\x07(\x02" + - "\x02\u0196\u0197\x05\xA4S\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05" + - "2\x1A\x02\u0199E\x03\x02\x02\x02\u019A\u019B\x07\x10\x02\x02\u019B\u019C" + - "\x052\x1A\x02\u019C\u019D\x07\x11\x02\x02\u019D\u019E\x07(\x02\x02\u019E" + - "\u019F\x05\xA4S\x02\u019F\u01A0\x07)\x02\x02\u01A0\u01A1\x07%\x02\x02" + - "\u01A1G\x03\x02\x02\x02\u01A2\u01A3\t\x03\x02\x02\u01A3\u01A4\x07%\x02" + - "\x02\u01A4I\x03\x02\x02\x02\u01A5\u01A7\x07\x17\x02\x02\u01A6\u01A8\x05" + - "\xA4S\x02\u01A7\u01A6\x03\x02\x02\x02\u01A7\u01A8\x03\x02\x02\x02\u01A8" + - "\u01A9\x03\x02\x02\x02\u01A9\u01AA\x07%\x02\x02\u01AAK\x03\x02\x02\x02" + - "\u01AB\u01B6\x05P)\x02\u01AC\u01B6\x05N(\x02\u01AD\u01B6\x05d3\x02\u01AE" + - "\u01B6\x05f4\x02\u01AF\u01B6\x05R*\x02\u01B0\u01B6\x05T+\x02\u01B1\u01B6" + - "\x05Z.\x02\u01B2\u01B6\x05\\/\x02\u01B3\u01B6\x05b2\x02\u01B4\u01B6\x05" + - "j6\x02\u01B5\u01AB\x03\x02\x02\x02\u01B5\u01AC\x03\x02\x02\x02\u01B5\u01AD" + - "\x03\x02\x02\x02\u01B5\u01AE\x03\x02\x02\x02\u01B5\u01AF\x03\x02\x02\x02" + - "\u01B5\u01B0\x03\x02\x02\x02\u01B5\u01B1\x03\x02\x02\x02\u01B5\u01B2\x03" + - "\x02\x02\x02\u01B5\u01B3\x03\x02\x02\x02\u01B5\u01B4\x03\x02\x02\x02\u01B6" + - "M\x03\x02\x02\x02\u01B7\u01B9\x07(\x02\x02\u01B8\u01BA\x05\x1C\x0F\x02" + - "\u01B9\u01B8\x03\x02\x02\x02\u01B9\u01BA\x03\x02\x02\x02\u01BA\u01BB\x03" + - "\x02\x02\x02\u01BB\u01BC\x07)\x02\x02\u01BC\u01BD\x07'\x02\x02\u01BD" + - "\u01BE\x05\xA6T\x02\u01BE\u01C1\x07\x19\x02\x02\u01BF\u01C2\x05\xA4S\x02" + - "\u01C0\u01C2\x054\x1B\x02\u01C1\u01BF\x03\x02\x02\x02\u01C1\u01C0\x03" + - "\x02\x02\x02\u01C2O\x03\x02\x02\x02\u01C3\u01C4\x07(\x02\x02\u01C4\u01C5" + - "\x05\xA4S\x02\u01C5\u01C6\x07)\x02\x02\u01C6Q\x03\x02\x02\x02\u01C7\u01C8" + - "\t\x04\x02\x02\u01C8S\x03\x02\x02\x02\u01C9\u01CA\x05V,\x02\u01CAU\x03" + - "\x02\x02\x02\u01CB\u01CC\x07N\x02\x02\u01CCW\x03\x02\x02\x02\u01CD\u01D0" + - "\x05V,\x02\u01CE\u01D0\x05Z.\x02\u01CF\u01CD\x03\x02\x02\x02\u01CF\u01CE" + - "\x03\x02\x02\x02\u01D0Y\x03\x02\x02\x02\u01D1\u01D2\t\x05\x02\x02\u01D2" + - "[\x03\x02\x02\x02\u01D3\u01D7\x07U\x02\x02\u01D4\u01D6\x05^0\x02\u01D5" + - "\u01D4\x03\x02\x02\x02\u01D6\u01D9\x03\x02\x02\x02\u01D7\u01D5\x03\x02" + - "\x02\x02\u01D7\u01D8\x03\x02\x02\x02\u01D8\u01DA\x03\x02\x02\x02\u01D9" + - "\u01D7\x03\x02\x02\x02\u01DA\u01E4\x07W\x02\x02\u01DB\u01DF\x07V\x02\x02" + - "\u01DC\u01DE\x05`1\x02\u01DD\u01DC\x03\x02\x02\x02\u01DE\u01E1\x03\x02" + - "\x02\x02\u01DF\u01DD\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02\u01E0" + - "\u01E2\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E2\u01E4\x07Y\x02" + - "\x02\u01E3\u01D3\x03\x02\x02\x02\u01E3\u01DB\x03\x02\x02\x02\u01E4]\x03" + - "\x02\x02\x02\u01E5\u01EC\x07X\x02\x02\u01E6\u01E8\x07\x03\x02\x02\u01E7" + - "\u01E9\x05\xA4S\x02\u01E8\u01E7\x03\x02\x02\x02\u01E8\u01E9\x03\x02\x02" + - "\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EC\x07,\x02\x02\u01EB\u01E5" + - "\x03\x02\x02\x02\u01EB\u01E6\x03\x02\x02\x02\u01EC_\x03\x02\x02\x02\u01ED" + - "\u01F4\x07Z\x02\x02\u01EE\u01F0\x07\x03\x02\x02\u01EF\u01F1\x05\xA4S\x02" + - "\u01F0\u01EF\x03\x02\x02\x02\u01F0\u01F1\x03\x02\x02\x02\u01F1\u01F2\x03" + - "\x02\x02\x02\u01F2\u01F4\x07,\x02\x02\u01F3\u01ED\x03\x02\x02\x02\u01F3" + - "\u01EE\x03\x02\x02\x02\u01F4a\x03\x02\x02\x02\u01F5\u01F6\t\x06\x02\x02" + - "\u01F6c\x03\x02\x02\x02\u01F7\u0200\x07*\x02\x02\u01F8\u01FD\x05\xA4S" + - "\x02\u01F9\u01FA\x07$\x02\x02\u01FA\u01FC\x05\xA4S\x02\u01FB\u01F9\x03" + - "\x02\x02\x02\u01FC\u01FF\x03\x02\x02\x02\u01FD\u01FB\x03\x02\x02\x02\u01FD" + - "\u01FE\x03\x02\x02\x02\u01FE\u0201\x03\x02\x02\x02\u01FF\u01FD\x03\x02" + - "\x02\x02\u0200\u01F8\x03\x02\x02\x02\u0200\u0201\x03\x02\x02\x02\u0201" + - "\u0203\x03\x02\x02\x02\u0202\u0204\x07$\x02\x02\u0203\u0202\x03\x02\x02" + - "\x02\u0203\u0204\x03\x02\x02\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0206" + - "\x07+\x02\x02\u0206e\x03\x02\x02\x02\u0207\u0210\x07-\x02\x02\u0208\u020D" + - "\x05h5\x02\u0209\u020A\x07$\x02\x02\u020A\u020C\x05h5\x02\u020B\u0209" + - "\x03\x02\x02\x02\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02" + - "\u020D\u020E\x03\x02\x02\x02"; + "X\tX\x04Y\tY\x03\x02\x05\x02\xB4\n\x02\x03\x02\x03\x02\x03\x03\x06\x03" + + "\xB9\n\x03\r\x03\x0E\x03\xBA\x03\x04\x03\x04\x03\x05\x06\x05\xC0\n\x05" + + "\r\x05\x0E\x05\xC1\x03\x06\x03\x06\x03\x06\x05\x06\xC7\n\x06\x03\x07\x03" + + "\x07\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07\xCF\n\x07\x03\b\x03\b\x03" + + "\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\xDB\n\n\x03\v\x03\v" + + "\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xE7\n" + + "\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x05\x0E\xED\n\x0E\x03\x0F\x03\x0F" + + "\x03\x0F\x07\x0F\xF2\n\x0F\f\x0F\x0E\x0F\xF5\v\x0F\x03\x10\x03\x10\x03" + + "\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x07\x11\xFF\n\x11\f\x11\x0E" + + "\x11\u0102\v\x11\x03\x11\x03\x11\x03\x12\x03\x12\x05\x12\u0108\n\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0112" + + "\n\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x03\x15\x07\x15\u011E\n\x15\f\x15\x0E\x15\u0121\v\x15\x03\x15" + + "\x03\x15\x03\x16\x03\x16\x03\x16\x05\x16\u0128\n\x16\x03\x17\x03\x17\x03" + + "\x17\x03\x17\x03\x18\x03\x18\x03\x18\x05\x18\u0131\n\x18\x03\x18\x03\x18" + + "\x03\x18\x03\x18\x05\x18\u0137\n\x18\x03\x19\x03\x19\x03\x19\x05\x19\u013C" + + "\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + + "\x03\x1A\x05\x1A\u0147\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u014C\n\x1B" + + "\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D" + + "\x05\x1D\u0157\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + + "\x1E\x05\x1E\u0160\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F" + + "\x07\x1F\u0168\n\x1F\f\x1F\x0E\x1F\u016B\v\x1F\x03\x1F\x03\x1F\x03 \x03" + + " \x03 \x03 \x03 \x03 \x03 \x03 \x05 \u0177\n \x03!\x03!\x03!\x05!\u017C" + + '\n!\x03"\x03"\x03"\x03"\x05"\u0182\n"\x03"\x03"\x05"\u0186\n' + + '"\x03"\x03"\x03"\x03"\x05"\u018C\n"\x03"\x03"\x03"\x03"\x05' + + '"\u0192\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03' + + "$\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05&\u01AA\n" + + "&\x03&\x03&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03" + + "'\x05'\u01B8\n'\x03(\x03(\x05(\u01BC\n(\x03(\x03(\x03(\x03(\x03(\x03" + + "(\x05(\u01C4\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03,\x03" + + "-\x03-\x05-\u01D2\n-\x03.\x03.\x03/\x03/\x07/\u01D8\n/\f/\x0E/\u01DB\v" + + "/\x03/\x03/\x03/\x07/\u01E0\n/\f/\x0E/\u01E3\v/\x03/\x05/\u01E6\n/\x03" + + "0\x030\x030\x050\u01EB\n0\x030\x050\u01EE\n0\x031\x031\x031\x051\u01F3" + + "\n1\x031\x051\u01F6\n1\x032\x032\x033\x033\x033\x033\x073\u01FE\n3\f3" + + "\x0E3\u0201\v3\x053\u0203\n3\x033\x053\u0206\n3\x033\x033\x034\x034\x03" + + "4\x034\x074\u020E\n4\f4\x0E4\u0211\v4\x054\u0213\n4\x034\x054\u0216\n" + + "4\x034\x034\x035\x035\x035\x035\x036\x036\x037\x037\x037\x037\x037\x03" + + "7\x057\u0226\n7\x037\x037\x037\x037\x037\x037\x037\x057\u022F\n7\x037" + + "\x037\x037\x057\u0234\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037" + + "\x037\x037\x037\x037\x037\x037\x057\u0245\n7\x037\x037\x077\u0249\n7\f" + + "7\x0E7\u024C\v7\x038\x038\x038\x078\u0251\n8\f8\x0E8\u0254\v8\x039\x03" + + "9\x039\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x05;\u0261\n;\x03;\x03" + + ";\x03;\x03;\x05;\u0267\n;\x03;\x03;\x03<\x03<\x03<\x05<\u026E\n<\x03=" + + "\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?\x05?\u0279\n?\x03@\x03@\x03@" + + "\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u028A" + + "\nD\x03E\x03E\x03E\x03E\x03E\x03E\x07E\u0292\nE\fE\x0EE\u0295\vE\x03F" + + "\x03F\x03F\x03F\x03F\x03F\x07F\u029D\nF\fF\x0EF\u02A0\vF\x03G\x03G\x03" + + "G\x03G\x03G\x03G\x03G\x07G\u02A9\nG\fG\x0EG\u02AC\vG\x03H\x03H\x03I\x03" + + "I\x03I\x03I\x03I\x03I\x07I\u02B6\nI\fI\x0EI\u02B9\vI\x03J\x03J\x03J\x03" + + "J\x03J\x03J\x07J\u02C1\nJ\fJ\x0EJ\u02C4\vJ\x03K\x03K\x03K\x03K\x03K\x03" + + "K\x07K\u02CC\nK\fK\x0EK\u02CF\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D7" + + "\nL\fL\x0EL\u02DA\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E2\nM\fM\x0E" + + "M\u02E5\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02ED\nN\fN\x0EN\u02F0\v" + + "N\x03O\x03O\x03O\x03O\x03O\x03O\x07O\u02F8\nO\fO\x0EO\u02FB\vO\x03P\x03" + + "P\x03P\x03P\x03P\x03P\x07P\u0303\nP\fP\x0EP\u0306\vP\x03Q\x03Q\x03Q\x03" + + "Q\x03Q\x03Q\x03Q\x05Q\u030F\nQ\x03R\x03R\x03R\x03R\x03R\x05R\u0316\nR" + + "\x03S\x03S\x03T\x03T\x03T\x07T\u031D\nT\fT\x0ET\u0320\vT\x03U\x03U\x03" + + "U\x05U\u0325\nU\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x07W\u032E\nW\fW\x0E" + + "W\u0331\vW\x05W\u0333\nW\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y" + + "\x03Y\x02\x02\x0El\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9C\x9EZ\x02\x02" + + "\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16" + + '\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02' + + ".\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02" + + "J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02" + + "f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80" + + "\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92" + + "\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4" + + "\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02\x02\x11\x03\x02\b" + + '\t\x03\x02\x0F\x10\x03\x02\x1F \x03\x02QR\x04\x02PPSS\x03\x02"$\x04\x02' + + "1133\x06\x020022::JJ\x03\x0247\x04\x020022\x03\x02KM\x03\x02CF\x03\x02" + + 'AB\x03\x02;@\x04\x02"$OO\x02\u0348\x02\xB3\x03\x02\x02\x02\x04\xB8\x03' + + "\x02\x02\x02\x06\xBC\x03\x02\x02\x02\b\xBF\x03\x02\x02\x02\n\xC6\x03\x02" + + "\x02\x02\f\xCE\x03\x02\x02\x02\x0E\xD0\x03\x02\x02\x02\x10\xD3\x03\x02" + + "\x02\x02\x12\xD5\x03\x02\x02\x02\x14\xDC\x03\x02\x02\x02\x16\xDE\x03\x02" + + "\x02\x02\x18\xE0\x03\x02\x02\x02\x1A\xE2\x03\x02\x02\x02\x1C\xEE\x03\x02" + + '\x02\x02\x1E\xF6\x03\x02\x02\x02 \xFA\x03\x02\x02\x02"\u0107\x03\x02' + + "\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03\x02\x02\x02(\u0118\x03\x02" + + "\x02\x02*\u0127\x03\x02\x02\x02,\u0129\x03\x02\x02\x02.\u012D\x03\x02" + + "\x02\x020\u0138\x03\x02\x02\x022\u0146\x03\x02\x02\x024\u0148\x03\x02" + + "\x02\x026\u014F\x03\x02\x02\x028\u0156\x03\x02\x02\x02:\u0158\x03\x02" + + "\x02\x02<\u0161\x03\x02\x02\x02>\u0176\x03\x02\x02\x02@\u017B\x03\x02" + + "\x02\x02B\u017D\x03\x02\x02\x02D\u0196\x03\x02\x02\x02F\u019C\x03\x02" + + "\x02\x02H\u01A4\x03\x02\x02\x02J\u01A7\x03\x02\x02\x02L\u01B7\x03\x02" + + "\x02\x02N\u01B9\x03\x02\x02\x02P\u01C5\x03\x02\x02\x02R\u01C9\x03\x02" + + "\x02\x02T\u01CB\x03\x02\x02\x02V\u01CD\x03\x02\x02\x02X\u01D1\x03\x02" + + "\x02\x02Z\u01D3\x03\x02\x02\x02\\\u01E5\x03\x02\x02\x02^\u01ED\x03\x02" + + "\x02\x02`\u01F5\x03\x02\x02\x02b\u01F7\x03\x02\x02\x02d\u01F9\x03\x02" + + "\x02\x02f\u0209\x03\x02\x02\x02h\u0219\x03\x02\x02\x02j\u021D\x03\x02" + + "\x02\x02l\u0233\x03\x02\x02\x02n\u024D\x03\x02\x02\x02p\u0255\x03\x02" + + "\x02\x02r\u0258\x03\x02\x02\x02t\u025C\x03\x02\x02\x02v\u026D\x03\x02" + + "\x02\x02x\u026F\x03\x02\x02\x02z\u0272\x03\x02\x02\x02|\u0278\x03\x02" + + "\x02\x02~\u027A\x03\x02\x02\x02\x80\u027D\x03\x02\x02\x02\x82\u0280\x03" + + "\x02\x02\x02\x84\u0282\x03\x02\x02\x02\x86\u0289\x03\x02\x02\x02\x88\u028B" + + "\x03\x02\x02\x02\x8A\u0296\x03\x02\x02\x02\x8C\u02A1\x03\x02\x02\x02\x8E" + + "\u02AD\x03\x02\x02\x02\x90\u02AF\x03\x02\x02\x02\x92\u02BA\x03\x02\x02" + + "\x02\x94\u02C5\x03\x02\x02\x02\x96\u02D0\x03\x02\x02\x02\x98\u02DB\x03" + + "\x02\x02\x02\x9A\u02E6\x03\x02\x02\x02\x9C\u02F1\x03\x02\x02\x02\x9E\u02FC" + + "\x03\x02\x02\x02\xA0\u030E\x03\x02\x02\x02\xA2\u0315\x03\x02\x02\x02\xA4" + + "\u0317\x03\x02\x02\x02\xA6\u0319\x03\x02\x02\x02\xA8\u0324\x03\x02\x02" + + "\x02\xAA\u0326\x03\x02\x02\x02\xAC\u0328\x03\x02\x02\x02\xAE\u0336\x03" + + "\x02\x02\x02\xB0\u033B\x03\x02\x02\x02\xB2\xB4\x05\x04\x03\x02\xB3\xB2" + + "\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\xB5\x03\x02\x02\x02\xB5\xB6" + + "\x07\x02\x02\x03\xB6\x03\x03\x02\x02\x02\xB7\xB9\x05\x06\x04\x02\xB8\xB7" + + "\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xB8\x03\x02\x02\x02\xBA\xBB" + + "\x03\x02\x02\x02\xBB\x05\x03\x02\x02\x02\xBC\xBD\x05\b\x05\x02\xBD\x07" + + "\x03\x02\x02\x02\xBE\xC0\x05\n\x06\x02\xBF\xBE\x03\x02\x02\x02\xC0\xC1" + + "\x03\x02\x02\x02\xC1\xBF\x03\x02\x02\x02\xC1\xC2\x03\x02\x02\x02\xC2\t" + + "\x03\x02\x02\x02\xC3\xC7\x052\x1A\x02\xC4\xC7\x05\f\x07\x02\xC5\xC7\x07" + + "&\x02\x02\xC6\xC3\x03\x02\x02\x02\xC6\xC4\x03\x02\x02\x02\xC6\xC5\x03" + + "\x02\x02\x02\xC7\v\x03\x02\x02\x02\xC8\xC9\x05\x0E\b\x02\xC9\xCA\x07&" + + "\x02\x02\xCA\xCF\x03\x02\x02\x02\xCB\xCF\x05\x1A\x0E\x02\xCC\xCF\x05 " + + "\x11\x02\xCD\xCF\x05(\x15\x02\xCE\xC8\x03\x02\x02\x02\xCE\xCB\x03\x02" + + "\x02\x02\xCE\xCC\x03\x02\x02\x02\xCE\xCD\x03\x02\x02\x02\xCF\r\x03\x02" + + "\x02\x02\xD0\xD1\x05\x10\t\x02\xD1\xD2\x05\x12\n\x02\xD2\x0F\x03\x02\x02" + + "\x02\xD3\xD4\t\x02\x02\x02\xD4\x11\x03\x02\x02\x02\xD5\xD6\x05\x16\f\x02" + + "\xD6\xD7\x07(\x02\x02\xD7\xDA\x05\xA8U\x02\xD8\xD9\x07;\x02\x02\xD9\xDB" + + "\x05\x14\v\x02\xDA\xD8\x03\x02\x02\x02\xDA\xDB\x03\x02\x02\x02\xDB\x13" + + "\x03\x02\x02\x02\xDC\xDD\x05\xA2R\x02\xDD\x15\x03\x02\x02\x02\xDE\xDF" + + "\x05\x18\r\x02\xDF\x17\x03\x02\x02\x02\xE0\xE1\x07O\x02\x02\xE1\x19\x03" + + "\x02\x02\x02\xE2\xE3\x07\x17\x02\x02\xE3\xE4\x05\x16\f\x02\xE4\xE6\x07" + + ")\x02\x02\xE5\xE7\x05\x1C\x0F\x02\xE6\xE5\x03\x02\x02\x02\xE6\xE7\x03" + + "\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x07*\x02\x02\xE9\xEA\x07" + + "\x1A\x02\x02\xEA\xEC\x05\xA8U\x02\xEB\xED\x054\x1B\x02\xEC\xEB\x03\x02" + + "\x02\x02\xEC\xED\x03\x02\x02\x02\xED\x1B\x03\x02\x02\x02\xEE\xF3\x05\x1E" + + "\x10\x02\xEF\xF0\x07%\x02\x02\xF0\xF2\x05\x1E\x10\x02\xF1\xEF\x03\x02" + + "\x02\x02\xF2\xF5\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02\xF3\xF4\x03\x02" + + "\x02\x02\xF4\x1D\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02\xF6\xF7\x05\x16" + + "\f\x02\xF7\xF8\x07(\x02\x02\xF8\xF9\x05\xA8U\x02\xF9\x1F\x03\x02\x02\x02" + + "\xFA\xFB\x07\x1C\x02\x02\xFB\xFC\x05\x16\f\x02\xFC\u0100\x07.\x02\x02" + + '\xFD\xFF\x05"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102\x03\x02\x02\x02' + + "\u0100\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02\u0101\u0103\x03" + + "\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0103\u0104\x07/\x02\x02\u0104" + + "!\x03\x02\x02\x02\u0105\u0108\x05$\x13\x02\u0106\u0108\x05&\x14\x02\u0107" + + "\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02\u0108#\x03\x02\x02" + + "\x02\u0109\u010A\x05\x16\f\x02\u010A\u010B\x07(\x02\x02\u010B\u010C\x05" + + "\xA8U\x02\u010C\u010D\x07&\x02\x02\u010D%\x03\x02\x02\x02\u010E\u010F" + + "\x05\x16\f\x02\u010F\u0111\x07)\x02\x02\u0110\u0112\x05\x1C\x0F\x02\u0111" + + "\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112\u0113\x03\x02" + + "\x02\x02\u0113\u0114\x07*\x02\x02\u0114\u0115\x07(\x02\x02\u0115\u0116" + + "\x05\xA8U\x02\u0116\u0117\x07&\x02\x02\u0117'\x03\x02\x02\x02\u0118\u0119" + + "\x07\x1B\x02\x02\u0119\u011A\x05\x16\f\x02\u011A\u011F\x07.\x02\x02\u011B" + + "\u011E\x05*\x16\x02\u011C\u011E\x07&\x02\x02\u011D\u011B\x03\x02\x02\x02" + + "\u011D\u011C\x03\x02\x02\x02\u011E\u0121\x03\x02\x02\x02\u011F\u011D\x03" + + "\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02\x02\u0121" + + "\u011F\x03\x02\x02\x02\u0122\u0123\x07/\x02\x02\u0123)\x03\x02\x02\x02" + + "\u0124\u0128\x05,\x17\x02\u0125\u0128\x05.\x18\x02\u0126\u0128\x050\x19" + + "\x02\u0127\u0124\x03\x02\x02\x02\u0127\u0125\x03\x02\x02\x02\u0127\u0126" + + "\x03\x02\x02\x02\u0128+\x03\x02\x02\x02\u0129\u012A\x05\x16\f\x02\u012A" + + "\u012B\x07(\x02\x02\u012B\u012C\x05\xA8U\x02\u012C-\x03\x02\x02\x02\u012D" + + "\u012E\x05\x16\f\x02\u012E\u0130\x07)\x02\x02\u012F\u0131\x05\x1C\x0F" + + "\x02\u0130\u012F\x03\x02\x02\x02\u0130\u0131\x03\x02\x02\x02\u0131\u0132" + + "\x03\x02\x02\x02\u0132\u0133\x07*\x02\x02\u0133\u0134\x07(\x02\x02\u0134" + + "\u0136\x05\xA8U\x02\u0135\u0137\x054\x1B\x02\u0136\u0135\x03\x02\x02\x02" + + "\u0136\u0137\x03\x02\x02\x02\u0137/\x03\x02\x02\x02\u0138\u0139\x07\x1D" + + "\x02\x02\u0139\u013B\x07)\x02\x02\u013A\u013C\x05\x1C\x0F\x02\u013B\u013A" + + "\x03\x02\x02\x02\u013B\u013C\x03\x02\x02\x02\u013C\u013D\x03\x02\x02\x02" + + "\u013D\u013E\x07*\x02\x02\u013E\u013F\x054\x1B\x02\u013F1\x03\x02\x02" + + "\x02\u0140\u0147\x056\x1C\x02\u0141\u0147\x058\x1D\x02\u0142\u0147\x05" + + "@!\x02\u0143\u0147\x05H%\x02\u0144\u0147\x05J&\x02\u0145\u0147\x054\x1B" + + "\x02\u0146\u0140\x03\x02\x02\x02\u0146\u0141\x03\x02\x02\x02\u0146\u0142" + + "\x03\x02\x02\x02\u0146\u0143\x03\x02\x02\x02\u0146\u0144\x03\x02\x02\x02" + + "\u0146\u0145\x03\x02\x02\x02\u01473\x03\x02\x02\x02\u0148\u0149\x06\x1B" + + "\x02\x02\u0149\u014B\x07.\x02\x02\u014A\u014C\x05\b\x05\x02\u014B\u014A" + + "\x03\x02\x02\x02\u014B\u014C\x03\x02\x02\x02\u014C\u014D\x03\x02\x02\x02" + + "\u014D\u014E\x07/\x02\x02\u014E5\x03\x02\x02\x02\u014F\u0150\b\x1C\x01" + + "\x02\u0150\u0151\x05\xA6T\x02\u0151\u0152\x07&\x02\x02\u0152\u0153\b\x1C" + + "\x01\x02\u01537\x03\x02\x02\x02\u0154\u0157\x05:\x1E\x02\u0155\u0157\x05" + + "<\x1F\x02\u0156\u0154\x03\x02\x02\x02\u0156\u0155\x03\x02\x02\x02\u0157" + + "9\x03\x02\x02\x02\u0158\u0159\x07\x13\x02\x02\u0159\u015A\x07)\x02\x02" + + "\u015A\u015B\x05\xA6T\x02\u015B\u015C\x07*\x02\x02\u015C\u015F\x052\x1A" + + "\x02\u015D\u015E\x07\x14\x02\x02\u015E\u0160\x052\x1A\x02\u015F\u015D" + + "\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160;\x03\x02\x02\x02\u0161" + + "\u0162\x07\f\x02\x02\u0162\u0163\x07)\x02\x02\u0163\u0164\x05\xA6T\x02" + + "\u0164\u0165\x07*\x02\x02\u0165\u0169\x07.\x02\x02\u0166\u0168\x05> \x02" + + "\u0167\u0166\x03\x02\x02\x02\u0168\u016B\x03\x02\x02\x02\u0169\u0167\x03" + + "\x02\x02\x02\u0169\u016A\x03\x02\x02\x02\u016A\u016C\x03\x02\x02\x02\u016B" + + "\u0169\x03\x02\x02\x02\u016C\u016D\x07/\x02\x02\u016D=\x03\x02\x02\x02" + + "\u016E\u016F\x07\r\x02\x02\u016F\u0170\x05\xA6T\x02\u0170\u0171\x07(\x02" + + "\x02\u0171\u0172\x052\x1A\x02\u0172\u0177\x03\x02\x02\x02\u0173\u0174" + + "\x07\x0E\x02\x02\u0174\u0175\x07(\x02\x02\u0175\u0177\x052\x1A\x02\u0176" + + "\u016E\x03\x02\x02\x02\u0176\u0173\x03\x02\x02\x02\u0177?\x03\x02\x02" + + '\x02\u0178\u017C\x05B"\x02\u0179\u017C\x05D#\x02\u017A\u017C\x05F$\x02' + + "\u017B\u0178\x03\x02\x02\x02\u017B\u0179\x03\x02\x02\x02\u017B\u017A\x03" + + "\x02\x02\x02\u017CA\x03\x02\x02\x02\u017D\u017E\x07\x15\x02\x02\u017E" + + "\u0185\x07)\x02\x02\u017F\u0182\x05\x0E\b\x02\u0180\u0182\x05\xA6T\x02" + + "\u0181\u017F\x03\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182\u0183\x03" + + '\x02\x02\x02\u0183\u0184\b"\x01\x02\u0184\u0186\x03\x02\x02\x02\u0185' + + "\u0181\x03\x02\x02\x02\u0185\u0186\x03\x02\x02\x02\u0186\u0187\x03\x02" + + "\x02\x02\u0187\u018B\x07&\x02\x02\u0188\u0189\x05\xA6T\x02\u0189\u018A" + + '\b"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B\u0188\x03\x02\x02\x02\u018B' + + "\u018C\x03\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u0191\x07&\x02" + + '\x02\u018E\u018F\x05\xA6T\x02\u018F\u0190\b"\x01\x02\u0190\u0192\x03' + + "\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191\u0192\x03\x02\x02\x02\u0192" + + "\u0193\x03\x02\x02\x02\u0193\u0194\x07*\x02\x02\u0194\u0195\x052\x1A\x02" + + "\u0195C\x03\x02\x02\x02\u0196\u0197\x07\x12\x02\x02\u0197\u0198\x07)\x02" + + "\x02\u0198\u0199\x05\xA6T\x02\u0199\u019A\x07*\x02\x02\u019A\u019B\x05" + + "2\x1A\x02\u019BE\x03\x02\x02\x02\u019C\u019D\x07\x11\x02\x02\u019D\u019E" + + "\x052\x1A\x02\u019E\u019F\x07\x12\x02\x02\u019F\u01A0\x07)\x02\x02\u01A0" + + "\u01A1\x05\xA6T\x02\u01A1\u01A2\x07*\x02\x02\u01A2\u01A3\x07&\x02\x02" + + "\u01A3G\x03\x02\x02\x02\u01A4\u01A5\t\x03\x02\x02\u01A5\u01A6\x07&\x02" + + "\x02\u01A6I\x03\x02\x02\x02\u01A7\u01A9\x07\x18\x02\x02\u01A8\u01AA\x05" + + "\xA6T\x02\u01A9\u01A8\x03\x02\x02\x02\u01A9\u01AA\x03\x02\x02\x02\u01AA" + + "\u01AB\x03\x02\x02\x02\u01AB\u01AC\x07&\x02\x02\u01ACK\x03\x02\x02\x02" + + "\u01AD\u01B8\x05P)\x02\u01AE\u01B8\x05N(\x02\u01AF\u01B8\x05d3\x02\u01B0" + + "\u01B8\x05f4\x02\u01B1\u01B8\x05R*\x02\u01B2\u01B8\x05T+\x02\u01B3\u01B8" + + "\x05Z.\x02\u01B4\u01B8\x05\\/\x02\u01B5\u01B8\x05b2\x02\u01B6\u01B8\x05" + + "j6\x02\u01B7\u01AD\x03\x02\x02\x02\u01B7\u01AE\x03\x02\x02\x02\u01B7\u01AF" + + "\x03\x02\x02\x02\u01B7\u01B0\x03\x02\x02\x02\u01B7\u01B1\x03\x02\x02\x02" + + "\u01B7\u01B2\x03\x02\x02\x02\u01B7\u01B3\x03\x02\x02\x02\u01B7\u01B4\x03" + + "\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7\u01B6\x03\x02\x02\x02\u01B8" + + "M\x03\x02\x02\x02\u01B9\u01BB\x07)\x02\x02\u01BA\u01BC\x05\x1C\x0F\x02" + + "\u01BB\u01BA\x03\x02\x02\x02\u01BB\u01BC\x03\x02\x02\x02\u01BC\u01BD\x03" + + "\x02\x02\x02\u01BD\u01BE\x07*\x02\x02\u01BE\u01BF\x07(\x02\x02\u01BF\u01C0" + + "\x05\xA8U\x02\u01C0\u01C3\x07\x1A\x02\x02\u01C1\u01C4\x05\xA6T\x02\u01C2" + + "\u01C4\x054\x1B\x02\u01C3\u01C1\x03\x02\x02\x02\u01C3\u01C2\x03\x02\x02" + + "\x02\u01C4O\x03\x02\x02\x02\u01C5\u01C6\x07)\x02\x02\u01C6\u01C7\x05\xA6" + + "T\x02\u01C7\u01C8\x07*\x02\x02\u01C8Q\x03\x02\x02\x02\u01C9\u01CA\t\x04" + + "\x02\x02\u01CAS\x03\x02\x02\x02\u01CB\u01CC\x05V,\x02\u01CCU\x03\x02\x02" + + "\x02\u01CD\u01CE\x07O\x02\x02\u01CEW\x03\x02\x02\x02\u01CF\u01D2\x05V" + + ",\x02\u01D0\u01D2\x05Z.\x02\u01D1\u01CF\x03\x02\x02\x02\u01D1\u01D0\x03" + + "\x02\x02\x02\u01D2Y\x03\x02\x02\x02\u01D3\u01D4\t\x05\x02\x02\u01D4[\x03" + + "\x02\x02\x02\u01D5\u01D9\x07V\x02\x02\u01D6\u01D8\x05^0\x02\u01D7\u01D6" + + "\x03\x02\x02\x02\u01D8\u01DB\x03\x02\x02\x02\u01D9\u01D7\x03\x02\x02\x02" + + "\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01DC\x03\x02\x02\x02\u01DB\u01D9\x03" + + "\x02\x02\x02\u01DC\u01E6\x07X\x02\x02\u01DD\u01E1\x07W\x02\x02\u01DE\u01E0" + + "\x05`1\x02\u01DF\u01DE\x03\x02\x02\x02\u01E0\u01E3\x03\x02\x02\x02\u01E1" + + "\u01DF\x03\x02\x02\x02\u01E1\u01E2\x03\x02\x02\x02\u01E2\u01E4\x03\x02" + + "\x02\x02\u01E3\u01E1\x03\x02\x02\x02\u01E4\u01E6\x07Z\x02\x02\u01E5\u01D5" + + "\x03\x02\x02\x02\u01E5\u01DD\x03\x02\x02\x02\u01E6]\x03\x02\x02\x02\u01E7" + + "\u01EE\x07Y\x02\x02\u01E8\u01EA\x07\x03\x02\x02\u01E9\u01EB\x05\xA6T\x02" + + "\u01EA\u01E9\x03\x02\x02\x02\u01EA\u01EB\x03\x02\x02\x02\u01EB\u01EC\x03" + + "\x02\x02\x02\u01EC\u01EE\x07-\x02\x02\u01ED\u01E7\x03\x02\x02\x02\u01ED" + + "\u01E8\x03\x02\x02\x02\u01EE_\x03\x02\x02\x02\u01EF\u01F6\x07[\x02\x02" + + "\u01F0\u01F2\x07\x03\x02\x02\u01F1\u01F3\x05\xA6T\x02\u01F2\u01F1\x03" + + "\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02\u01F3\u01F4\x03\x02\x02\x02\u01F4" + + "\u01F6\x07-\x02\x02\u01F5\u01EF\x03\x02\x02\x02\u01F5\u01F0\x03\x02\x02" + + "\x02\u01F6a\x03\x02\x02\x02\u01F7\u01F8\t\x06\x02\x02\u01F8c\x03\x02\x02" + + "\x02\u01F9\u0202\x07+\x02\x02\u01FA\u01FF\x05\xA6T\x02\u01FB\u01FC\x07" + + "%\x02\x02\u01FC\u01FE\x05\xA6T\x02\u01FD\u01FB\x03\x02\x02\x02\u01FE\u0201" + + "\x03\x02\x02\x02\u01FF\u01FD\x03\x02\x02\x02\u01FF\u0200\x03\x02\x02\x02" + + "\u0200\u0203\x03\x02\x02\x02\u0201\u01FF\x03\x02\x02\x02\u0202\u01FA\x03" + + "\x02\x02\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0205\x03\x02\x02\x02\u0204" + + "\u0206\x07%\x02\x02\u0205\u0204\x03\x02\x02\x02\u0205\u0206\x03\x02\x02" + + "\x02\u0206\u0207\x03\x02\x02\x02\u0207\u0208\x07,\x02\x02\u0208e\x03\x02" + + "\x02\x02\u0209\u0212\x07.\x02\x02\u020A\u020F\x05h5"; private static readonly _serializedATNSegment1: string = - "\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u0210\u0208\x03" + - "\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0213\x03\x02\x02\x02\u0212" + - "\u0214\x07$\x02\x02\u0213\u0212\x03\x02\x02\x02\u0213\u0214\x03\x02\x02" + - "\x02\u0214\u0215\x03\x02\x02\x02\u0215\u0216\x07.\x02\x02\u0216g\x03\x02" + - "\x02\x02\u0217\u0218\x05X-\x02\u0218\u0219\x07'\x02\x02\u0219\u021A\x05" + - "\xA4S\x02\u021Ai\x03\x02\x02\x02\u021B\u021C\t\x07\x02\x02\u021Ck\x03" + - "\x02\x02\x02\u021D\u021E\b7\x01\x02\u021E\u0232\x05L'\x02\u021F\u0220" + - "\x07\x18\x02\x02\u0220\u0221\x05l7\x02\u0221\u0223\x07(\x02\x02\u0222" + - "\u0224\x05n8\x02\u0223\u0222\x03\x02\x02\x02\u0223\u0224\x03\x02\x02\x02" + - "\u0224\u0225\x03\x02\x02\x02\u0225\u0226\x07)\x02\x02\u0226\u0227\b7\x01" + - "\x02\u0227\u0232\x03\x02\x02\x02\u0228\u0229\x07\x1D\x02\x02\u0229\u022A" + - "\x05\xA6T\x02\u022A\u022C\x07(\x02\x02\u022B\u022D\x05n8\x02\u022C\u022B" + - "\x03\x02\x02\x02\u022C\u022D\x03\x02\x02\x02\u022D\u022E\x03\x02\x02\x02" + - "\u022E\u022F\x07)\x02\x02\u022F\u0230\b7\x01\x02\u0230\u0232\x03\x02\x02" + - "\x02\u0231\u021D\x03\x02\x02\x02\u0231\u021F\x03\x02\x02\x02\u0231\u0228" + - "\x03\x02\x02\x02\u0232\u0248\x03\x02\x02\x02\u0233\u0234\f\b\x02\x02\u0234" + - "\u0235\x05p9\x02\u0235\u0236\b7\x01\x02\u0236\u0247\x03\x02\x02\x02\u0237" + - "\u0238\f\x07\x02\x02\u0238\u0239\x05r:\x02\u0239\u023A\b7\x01\x02\u023A" + - "\u0247\x03\x02\x02\x02\u023B\u023C\f\x06\x02\x02\u023C\u023D\x05t;\x02" + - "\u023D\u023E\b7\x01\x02\u023E\u0247\x03\x02\x02\x02\u023F\u0240\f\x05" + - "\x02\x02\u0240\u0242\x07(\x02\x02\u0241\u0243\x05n8\x02\u0242\u0241\x03" + - "\x02\x02\x02\u0242\u0243\x03\x02\x02\x02\u0243\u0244\x03\x02\x02\x02\u0244" + - "\u0245\x07)\x02\x02\u0245\u0247\b7\x01\x02\u0246\u0233\x03\x02\x02\x02" + - "\u0246\u0237\x03\x02\x02\x02\u0246\u023B\x03\x02\x02\x02\u0246\u023F\x03" + - "\x02\x02\x02\u0247\u024A\x03\x02\x02\x02\u0248\u0246\x03\x02\x02\x02\u0248" + - "\u0249\x03\x02\x02\x02\u0249m\x03\x02\x02\x02\u024A\u0248\x03\x02\x02" + - "\x02\u024B\u0250\x05\xA0Q\x02\u024C\u024D\x07$\x02\x02\u024D\u024F\x05" + - "\xA0Q\x02\u024E\u024C\x03\x02\x02\x02\u024F\u0252\x03\x02\x02\x02\u0250" + - "\u024E\x03\x02\x02\x02\u0250\u0251\x03\x02\x02\x02\u0251o\x03\x02\x02" + - "\x02\u0252\u0250\x03\x02\x02\x02\u0253\u0254\x07M\x02\x02\u0254\u0255" + - "\x05V,\x02\u0255q\x03\x02\x02\x02\u0256\u0257\x07*\x02\x02\u0257\u0258" + - "\x05\xA4S\x02\u0258\u0259\x07+\x02\x02\u0259s\x03\x02\x02\x02\u025A\u025E" + - "\x07*\x02\x02\u025B\u025C\x05\xA4S\x02\u025C\u025D\b;\x01\x02\u025D\u025F" + - "\x03\x02\x02\x02\u025E\u025B\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02" + - "\u025F\u0260\x03\x02\x02\x02\u0260\u0264\x07'\x02\x02\u0261\u0262\x05" + - "\xA4S\x02\u0262\u0263\b;\x01\x02\u0263\u0265\x03\x02\x02\x02\u0264\u0261" + - "\x03\x02\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02" + - "\u0266\u0267\x07+\x02\x02\u0267u\x03\x02\x02\x02\u0268\u026C\x05l7\x02" + - "\u0269\u026C\x05x=\x02\u026A\u026C\x05z>\x02\u026B\u0268\x03\x02\x02\x02" + - "\u026B\u0269\x03\x02\x02\x02\u026B\u026A\x03\x02\x02\x02\u026Cw\x03\x02" + - "\x02\x02\u026D\u026E\x05l7\x02\u026E\u026F\x05\x82B\x02\u026Fy\x03\x02" + - "\x02\x02\u0270\u0271\x07 \x02\x02\u0271\u0272\x05\xA0Q\x02\u0272{\x03" + - "\x02\x02\x02\u0273\u0277\x05v<\x02\u0274\u0277\x05~@\x02\u0275\u0277\x05" + - "\x80A\x02\u0276\u0273\x03\x02\x02\x02\u0276\u0274\x03\x02\x02\x02\u0276" + - "\u0275\x03\x02\x02\x02\u0277}\x03\x02\x02\x02\u0278\u0279\x05\x82B\x02" + - "\u0279\u027A\x05v<\x02\u027A\x7F\x03\x02\x02\x02\u027B\u027C\x05\x84C" + - "\x02\u027C\u027D\x05v<\x02\u027D\x81\x03\x02\x02\x02\u027E\u027F\t\b\x02" + - "\x02\u027F\x83\x03\x02\x02\x02\u0280\u0281\t\t\x02\x02\u0281\x85\x03\x02" + - "\x02\x02\u0282\u0288\x05|?\x02\u0283\u0284\x05|?\x02\u0284\u0285\x07\t" + - "\x02\x02\u0285\u0286\x05\xA6T\x02\u0286\u0288\x03\x02\x02\x02\u0287\u0282" + - "\x03\x02\x02\x02\u0287\u0283\x03\x02\x02\x02\u0288\x87\x03\x02\x02\x02" + - "\u0289\u028A\bE\x01\x02\u028A\u028B\x05\x86D\x02\u028B\u0291\x03\x02\x02" + - "\x02\u028C\u028D\f\x03\x02\x02\u028D\u028E\t\n\x02\x02\u028E\u0290\x05" + - "\x86D\x02\u028F\u028C\x03\x02\x02\x02\u0290\u0293\x03\x02\x02\x02\u0291" + - "\u028F\x03\x02\x02\x02\u0291\u0292\x03\x02\x02\x02\u0292\x89\x03\x02\x02" + - "\x02\u0293\u0291\x03\x02\x02\x02\u0294\u0295\bF\x01\x02\u0295\u0296\x05" + - "\x88E\x02\u0296\u029C\x03\x02\x02\x02\u0297\u0298\f\x03\x02\x02\u0298" + - "\u0299\t\v\x02\x02\u0299\u029B\x05\x88E\x02\u029A\u0297\x03\x02\x02\x02" + - "\u029B\u029E\x03\x02\x02\x02\u029C\u029A\x03\x02\x02\x02\u029C\u029D\x03" + - "\x02\x02\x02\u029D\x8B\x03\x02\x02\x02\u029E\u029C\x03\x02\x02\x02\u029F" + - "\u02A0\bG\x01\x02\u02A0\u02A1\x05\x8AF\x02\u02A1\u02A8\x03\x02\x02\x02" + - "\u02A2\u02A3\f\x03\x02\x02\u02A3\u02A4\x05\x8EH\x02\u02A4\u02A5\x05\x94" + - "K\x02\u02A5\u02A7\x03\x02\x02\x02\u02A6\u02A2\x03\x02\x02\x02\u02A7\u02AA" + - "\x03\x02\x02\x02\u02A8\u02A6\x03\x02\x02\x02\u02A8\u02A9\x03\x02\x02\x02" + - "\u02A9\x8D\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02\u02AB\u02AC\t\f" + - "\x02\x02\u02AC\x8F\x03\x02\x02\x02\u02AD\u02AE\bI\x01\x02\u02AE\u02AF" + - "\x05\x8CG\x02\u02AF\u02B5\x03\x02\x02\x02\u02B0\u02B1\f\x03\x02\x02\u02B1" + - "\u02B2\t\r\x02\x02\u02B2\u02B4\x05\x8CG\x02\u02B3\u02B0\x03\x02\x02\x02" + - "\u02B4\u02B7\x03\x02\x02\x02\u02B5\u02B3\x03\x02\x02\x02\u02B5\u02B6\x03" + - "\x02\x02\x02\u02B6\x91\x03\x02\x02\x02\u02B7\u02B5\x03\x02\x02\x02\u02B8" + - "\u02B9\bJ\x01\x02\u02B9\u02BA\x05\x90I\x02\u02BA\u02C0\x03\x02\x02\x02" + - "\u02BB\u02BC\f\x03\x02\x02\u02BC\u02BD\t\x0E\x02\x02\u02BD\u02BF\x05\x90" + - "I\x02\u02BE\u02BB\x03\x02\x02\x02\u02BF\u02C2\x03\x02\x02\x02\u02C0\u02BE" + - "\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1\x93\x03\x02\x02\x02" + - "\u02C2\u02C0\x03\x02\x02\x02\u02C3\u02C4\bK\x01\x02\u02C4\u02C5\x05\x92" + - "J\x02\u02C5\u02CB\x03\x02\x02\x02\u02C6\u02C7\f\x03\x02\x02\u02C7\u02C8" + - "\x07F\x02\x02\u02C8\u02CA\x05\x92J\x02\u02C9\u02C6\x03\x02\x02\x02\u02CA" + - "\u02CD\x03\x02\x02\x02\u02CB\u02C9\x03\x02\x02\x02\u02CB\u02CC\x03\x02" + - "\x02\x02\u02CC\x95\x03\x02\x02\x02\u02CD\u02CB\x03\x02\x02\x02\u02CE\u02CF" + - "\bL\x01\x02\u02CF\u02D0\x05\x94K\x02\u02D0\u02D6\x03\x02\x02\x02\u02D1" + - "\u02D2\f\x03\x02\x02\u02D2\u02D3\x07H\x02\x02\u02D3\u02D5\x05\x94K\x02" + - "\u02D4\u02D1\x03\x02\x02\x02\u02D5\u02D8\x03\x02\x02\x02\u02D6\u02D4\x03" + - "\x02\x02\x02\u02D6\u02D7\x03\x02\x02\x02\u02D7\x97\x03\x02\x02\x02\u02D8" + - "\u02D6\x03\x02\x02\x02\u02D9\u02DA\bM\x01\x02\u02DA\u02DB\x05\x96L\x02" + - "\u02DB\u02E1\x03\x02\x02\x02\u02DC\u02DD\f\x03\x02\x02\u02DD\u02DE\x07" + - "G\x02\x02\u02DE\u02E0\x05\x96L\x02\u02DF\u02DC\x03\x02\x02\x02\u02E0\u02E3" + - "\x03\x02\x02\x02\u02E1\u02DF\x03\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02" + - "\u02E2\x99\x03\x02\x02\x02\u02E3\u02E1\x03\x02\x02\x02\u02E4\u02E5\bN" + - "\x01\x02\u02E5\u02E6\x05\x98M\x02\u02E6\u02EC\x03\x02\x02\x02\u02E7\u02E8" + - "\f\x03\x02\x02\u02E8\u02E9\x077\x02\x02\u02E9\u02EB\x05\x98M\x02\u02EA" + - "\u02E7\x03\x02\x02\x02\u02EB\u02EE\x03\x02\x02\x02\u02EC\u02EA\x03\x02" + - "\x02\x02\u02EC\u02ED\x03\x02\x02\x02\u02ED\x9B\x03\x02\x02\x02\u02EE\u02EC" + - "\x03\x02\x02\x02\u02EF\u02F0\bO\x01\x02\u02F0\u02F1\x05\x9AN\x02\u02F1" + - "\u02F7\x03\x02\x02\x02\u02F2\u02F3\f\x03\x02\x02\u02F3\u02F4\x078\x02" + - "\x02\u02F4\u02F6\x05\x9AN\x02\u02F5\u02F2\x03\x02\x02\x02\u02F6\u02F9" + - "\x03\x02\x02\x02\u02F7\u02F5\x03\x02\x02\x02\u02F7\u02F8\x03\x02\x02\x02" + - "\u02F8\x9D\x03\x02\x02\x02\u02F9\u02F7\x03\x02\x02\x02\u02FA\u0302\x05" + - "\x9CO\x02\u02FB\u02FC\x05\x9CO\x02\u02FC\u02FD\x07&\x02\x02\u02FD\u02FE" + - "\x05\x9EP\x02\u02FE\u02FF\x07'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300" + - "\u0302\x03\x02\x02\x02\u0301\u02FA\x03\x02\x02\x02\u0301\u02FB\x03\x02" + - "\x02\x02\u0302\x9F\x03\x02\x02\x02\u0303\u0309\x05\x9EP\x02\u0304\u0305" + - "\x05l7\x02\u0305\u0306\x05\xA2R\x02\u0306\u0307\x05\xA0Q\x02\u0307\u0309" + - "\x03\x02\x02\x02\u0308\u0303\x03\x02\x02\x02\u0308\u0304\x03\x02\x02\x02" + - "\u0309\xA1\x03\x02\x02\x02\u030A\u030B\t\x0F\x02\x02\u030B\xA3\x03\x02" + - "\x02\x02\u030C\u0311\x05\xA0Q\x02\u030D\u030E\x07$\x02\x02\u030E\u0310" + - "\x05\xA0Q\x02\u030F\u030D\x03\x02\x02\x02\u0310\u0313\x03\x02\x02\x02" + - "\u0311\u030F\x03\x02\x02\x02\u0311\u0312\x03\x02\x02\x02\u0312\xA5\x03" + - "\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0314\u0318\x05\xA8U\x02\u0315" + - "\u0318\x05\xAAV\x02\u0316\u0318\x05\xACW\x02\u0317\u0314\x03\x02\x02\x02" + - "\u0317\u0315\x03\x02\x02\x02\u0317\u0316\x03\x02\x02\x02\u0318\xA7\x03" + - "\x02\x02\x02\u0319\u031A\x05\xAEX\x02\u031A\xA9\x03\x02\x02\x02\u031B" + - "\u031C\x05\xAEX\x02\u031C\u0325\x07B\x02\x02\u031D\u0322\x05\xA6T\x02" + - "\u031E\u031F\x07$\x02\x02\u031F\u0321\x05\xA6T\x02\u0320\u031E\x03\x02" + - "\x02\x02\u0321\u0324\x03\x02\x02\x02\u0322\u0320\x03\x02\x02\x02\u0322" + - "\u0323\x03\x02\x02\x02\u0323\u0326\x03\x02\x02\x02\u0324\u0322\x03\x02" + - "\x02\x02\u0325\u031D\x03\x02\x02\x02\u0325\u0326\x03\x02\x02\x02\u0326" + - "\u0327\x03\x02\x02\x02\u0327\u0328\x07D\x02\x02\u0328\xAB\x03\x02\x02" + - "\x02\u0329\u032A\x07 \x02\x02\u032A\u032B\x07(\x02\x02\u032B\u032C\x05" + - "\xAEX\x02\u032C\u032D\x07)\x02\x02\u032D\xAD\x03\x02\x02\x02\u032E\u032F" + - "\t\x10\x02\x02\u032F\xAF\x03\x02\x02\x02M\xB1\xB8\xBF\xC4\xCC\xD8\xE4" + - "\xEA\xF1\xFE\u0105\u010F\u011B\u011D\u0125\u012E\u0134\u0139\u0144\u0149" + - "\u0154\u015D\u0167\u0174\u0179\u017F\u0183\u0189\u018F\u01A7\u01B5\u01B9" + - "\u01C1\u01CF\u01D7\u01DF\u01E3\u01E8\u01EB\u01F0\u01F3\u01FD\u0200\u0203" + - "\u020D\u0210\u0213\u0223\u022C\u0231\u0242\u0246\u0248\u0250\u025E\u0264" + - "\u026B\u0276\u0287\u0291\u029C\u02A8\u02B5\u02C0\u02CB\u02D6\u02E1\u02EC" + - "\u02F7\u0301\u0308\u0311\u0317\u0322\u0325"; + "\x02\u020B\u020C\x07%\x02\x02\u020C\u020E\x05h5\x02\u020D\u020B\x03\x02" + + "\x02\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u020F" + + "\u0210\x03\x02\x02\x02\u0210\u0213\x03\x02\x02\x02\u0211\u020F\x03\x02" + + "\x02\x02\u0212\u020A\x03\x02\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213" + + "\u0215\x03\x02\x02\x02\u0214\u0216\x07%\x02\x02\u0215\u0214\x03\x02\x02" + + "\x02\u0215\u0216\x03\x02\x02\x02\u0216\u0217\x03\x02\x02\x02\u0217\u0218" + + "\x07/\x02\x02\u0218g\x03\x02\x02\x02\u0219\u021A\x05X-\x02\u021A\u021B" + + "\x07(\x02\x02\u021B\u021C\x05\xA6T\x02\u021Ci\x03\x02\x02\x02\u021D\u021E" + + "\t\x07\x02\x02\u021Ek\x03\x02\x02\x02\u021F\u0220\b7\x01\x02\u0220\u0234" + + "\x05L'\x02\u0221\u0222\x07\x19\x02\x02\u0222\u0223\x05l7\x02\u0223\u0225" + + "\x07)\x02\x02\u0224\u0226\x05n8\x02\u0225\u0224\x03\x02\x02\x02\u0225" + + "\u0226\x03\x02\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227\u0228\x07*\x02" + + "\x02\u0228\u0229\b7\x01\x02\u0229\u0234\x03\x02\x02\x02\u022A\u022B\x07" + + "\x1E\x02\x02\u022B\u022C\x05\xA8U\x02\u022C\u022E\x07)\x02\x02\u022D\u022F" + + "\x05n8\x02\u022E\u022D\x03\x02\x02\x02\u022E\u022F\x03\x02\x02\x02\u022F" + + "\u0230\x03\x02\x02\x02\u0230\u0231\x07*\x02\x02\u0231\u0232\b7\x01\x02" + + "\u0232\u0234\x03\x02\x02\x02\u0233\u021F\x03\x02\x02\x02\u0233\u0221\x03" + + "\x02\x02\x02\u0233\u022A\x03\x02\x02\x02\u0234\u024A\x03\x02\x02\x02\u0235" + + "\u0236\f\b\x02\x02\u0236\u0237\x05p9\x02\u0237\u0238\b7\x01\x02\u0238" + + "\u0249\x03\x02\x02\x02\u0239\u023A\f\x07\x02\x02\u023A\u023B\x05r:\x02" + + "\u023B\u023C\b7\x01\x02\u023C\u0249\x03\x02\x02\x02\u023D\u023E\f\x06" + + "\x02\x02\u023E\u023F\x05t;\x02\u023F\u0240\b7\x01\x02\u0240\u0249\x03" + + "\x02\x02\x02\u0241\u0242\f\x05\x02\x02\u0242\u0244\x07)\x02\x02\u0243" + + "\u0245\x05n8\x02\u0244\u0243\x03\x02\x02\x02\u0244\u0245\x03\x02\x02\x02" + + "\u0245\u0246\x03\x02\x02\x02\u0246\u0247\x07*\x02\x02\u0247\u0249\b7\x01" + + "\x02\u0248\u0235\x03\x02\x02\x02\u0248\u0239\x03\x02\x02\x02\u0248\u023D" + + "\x03\x02\x02\x02\u0248\u0241\x03\x02\x02\x02\u0249\u024C\x03\x02\x02\x02" + + "\u024A\u0248\x03\x02\x02\x02\u024A\u024B\x03\x02\x02\x02\u024Bm\x03\x02" + + "\x02\x02\u024C\u024A\x03\x02\x02\x02\u024D\u0252\x05\xA2R\x02\u024E\u024F" + + "\x07%\x02\x02\u024F\u0251\x05\xA2R\x02\u0250\u024E\x03\x02\x02\x02\u0251" + + "\u0254\x03\x02\x02\x02\u0252\u0250\x03\x02\x02\x02\u0252\u0253\x03\x02" + + "\x02\x02\u0253o\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0255\u0256" + + "\x07N\x02\x02\u0256\u0257\x05V,\x02\u0257q\x03\x02\x02\x02\u0258\u0259" + + "\x07+\x02\x02\u0259\u025A\x05\xA6T\x02\u025A\u025B\x07,\x02\x02\u025B" + + "s\x03\x02\x02\x02\u025C\u0260\x07+\x02\x02\u025D\u025E\x05\xA6T\x02\u025E" + + "\u025F\b;\x01\x02\u025F\u0261\x03\x02\x02\x02\u0260\u025D\x03\x02\x02" + + "\x02\u0260\u0261\x03\x02\x02\x02\u0261\u0262\x03\x02\x02\x02\u0262\u0266" + + "\x07(\x02\x02\u0263\u0264\x05\xA6T\x02\u0264\u0265\b;\x01\x02\u0265\u0267" + + "\x03\x02\x02\x02\u0266\u0263\x03\x02\x02\x02\u0266\u0267\x03\x02\x02\x02" + + "\u0267\u0268\x03\x02\x02\x02\u0268\u0269\x07,\x02\x02\u0269u\x03\x02\x02" + + "\x02\u026A\u026E\x05l7\x02\u026B\u026E\x05x=\x02\u026C\u026E\x05z>\x02" + + "\u026D\u026A\x03\x02\x02\x02\u026D\u026B\x03\x02\x02\x02\u026D\u026C\x03" + + "\x02\x02\x02\u026Ew\x03\x02\x02\x02\u026F\u0270\x05l7\x02\u0270\u0271" + + "\x05\x82B\x02\u0271y\x03\x02\x02\x02\u0272\u0273\x07!\x02\x02\u0273\u0274" + + "\x05\xA2R\x02\u0274{\x03\x02\x02\x02\u0275\u0279\x05v<\x02\u0276\u0279" + + "\x05~@\x02\u0277\u0279\x05\x80A\x02\u0278\u0275\x03\x02\x02\x02\u0278" + + "\u0276\x03\x02\x02\x02\u0278\u0277\x03\x02\x02\x02\u0279}\x03\x02\x02" + + "\x02\u027A\u027B\x05\x82B\x02\u027B\u027C\x05v<\x02\u027C\x7F\x03\x02" + + "\x02\x02\u027D\u027E\x05\x84C\x02\u027E\u027F\x05v<\x02\u027F\x81\x03" + + "\x02\x02\x02\u0280\u0281\t\b\x02\x02\u0281\x83\x03\x02\x02\x02\u0282\u0283" + + "\t\t\x02\x02\u0283\x85\x03\x02\x02\x02\u0284\u028A\x05|?\x02\u0285\u0286" + + "\x05|?\x02\u0286\u0287\x07\n\x02\x02\u0287\u0288\x05\xA8U\x02\u0288\u028A" + + "\x03\x02\x02\x02\u0289\u0284\x03\x02\x02\x02\u0289\u0285\x03\x02\x02\x02" + + "\u028A\x87\x03\x02\x02\x02\u028B\u028C\bE\x01\x02\u028C\u028D\x05\x86" + + "D\x02\u028D\u0293\x03\x02\x02\x02\u028E\u028F\f\x03\x02\x02\u028F\u0290" + + "\t\n\x02\x02\u0290\u0292\x05\x86D\x02\u0291\u028E\x03\x02\x02\x02\u0292" + + "\u0295\x03\x02\x02\x02\u0293\u0291\x03\x02\x02\x02\u0293\u0294\x03\x02" + + "\x02\x02\u0294\x89\x03\x02\x02\x02\u0295\u0293\x03\x02\x02\x02\u0296\u0297" + + "\bF\x01\x02\u0297\u0298\x05\x88E\x02\u0298\u029E\x03\x02\x02\x02\u0299" + + "\u029A\f\x03\x02\x02\u029A\u029B\t\v\x02\x02\u029B\u029D\x05\x88E\x02" + + "\u029C\u0299\x03\x02\x02\x02\u029D\u02A0\x03\x02\x02\x02\u029E\u029C\x03" + + "\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\x8B\x03\x02\x02\x02\u02A0" + + "\u029E\x03\x02\x02\x02\u02A1\u02A2\bG\x01\x02\u02A2\u02A3\x05\x8AF\x02" + + "\u02A3\u02AA\x03\x02\x02\x02\u02A4\u02A5\f\x03\x02\x02\u02A5\u02A6\x05" + + "\x8EH\x02\u02A6\u02A7\x05\x96L\x02\u02A7\u02A9\x03\x02\x02\x02\u02A8\u02A4" + + "\x03\x02\x02\x02\u02A9\u02AC\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02" + + "\u02AA\u02AB\x03\x02\x02\x02\u02AB\x8D\x03\x02\x02\x02\u02AC\u02AA\x03" + + "\x02\x02\x02\u02AD\u02AE\t\f\x02\x02\u02AE\x8F\x03\x02\x02\x02\u02AF\u02B0" + + "\bI\x01\x02\u02B0\u02B1\x05\x8CG\x02\u02B1\u02B7\x03\x02\x02\x02\u02B2" + + "\u02B3\f\x03\x02\x02\u02B3\u02B4\x07\x07\x02\x02\u02B4\u02B6\x05\xA8U" + + "\x02\u02B5\u02B2\x03\x02\x02\x02\u02B6\u02B9\x03\x02\x02\x02\u02B7\u02B5" + + "\x03\x02\x02\x02\u02B7\u02B8\x03\x02\x02\x02\u02B8\x91\x03\x02\x02\x02" + + "\u02B9\u02B7\x03\x02\x02\x02\u02BA\u02BB\bJ\x01\x02\u02BB\u02BC\x05\x90" + + "I\x02\u02BC\u02C2\x03\x02\x02\x02\u02BD\u02BE\f\x03\x02\x02\u02BE\u02BF" + + "\t\r\x02\x02\u02BF\u02C1\x05\x8CG\x02\u02C0\u02BD\x03\x02\x02\x02\u02C1" + + "\u02C4\x03\x02\x02\x02\u02C2\u02C0\x03\x02\x02\x02\u02C2\u02C3\x03\x02" + + "\x02\x02\u02C3\x93\x03\x02\x02\x02\u02C4\u02C2\x03\x02\x02\x02\u02C5\u02C6" + + "\bK\x01\x02\u02C6\u02C7\x05\x92J\x02\u02C7\u02CD\x03\x02\x02\x02\u02C8" + + "\u02C9\f\x03\x02\x02\u02C9\u02CA\t\x0E\x02\x02\u02CA\u02CC\x05\x92J\x02" + + "\u02CB\u02C8\x03\x02\x02\x02\u02CC\u02CF\x03\x02\x02\x02\u02CD\u02CB\x03" + + "\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\x95\x03\x02\x02\x02\u02CF" + + "\u02CD\x03\x02\x02\x02\u02D0\u02D1\bL\x01\x02\u02D1\u02D2\x05\x94K\x02" + + "\u02D2\u02D8\x03\x02\x02\x02\u02D3\u02D4\f\x03\x02\x02\u02D4\u02D5\x07" + + "G\x02\x02\u02D5\u02D7\x05\x94K\x02\u02D6\u02D3\x03\x02\x02\x02\u02D7\u02DA" + + "\x03\x02\x02\x02\u02D8\u02D6\x03\x02\x02\x02\u02D8\u02D9\x03\x02\x02\x02" + + "\u02D9\x97\x03\x02\x02\x02\u02DA\u02D8\x03\x02\x02\x02\u02DB\u02DC\bM" + + "\x01\x02\u02DC\u02DD\x05\x96L\x02\u02DD\u02E3\x03\x02\x02\x02\u02DE\u02DF" + + "\f\x03\x02\x02\u02DF\u02E0\x07I\x02\x02\u02E0\u02E2\x05\x96L\x02\u02E1" + + "\u02DE\x03\x02\x02\x02\u02E2\u02E5\x03\x02\x02\x02\u02E3\u02E1\x03\x02" + + "\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\x99\x03\x02\x02\x02\u02E5\u02E3" + + "\x03\x02\x02\x02\u02E6\u02E7\bN\x01\x02\u02E7\u02E8\x05\x98M\x02\u02E8" + + "\u02EE\x03\x02\x02\x02\u02E9\u02EA\f\x03\x02\x02\u02EA\u02EB\x07H\x02" + + "\x02\u02EB\u02ED\x05\x98M\x02\u02EC\u02E9\x03\x02\x02\x02\u02ED\u02F0" + + "\x03\x02\x02\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02EF\x03\x02\x02\x02" + + "\u02EF\x9B\x03\x02\x02\x02\u02F0\u02EE\x03\x02\x02\x02\u02F1\u02F2\bO" + + "\x01\x02\u02F2\u02F3\x05\x9AN\x02\u02F3\u02F9\x03\x02\x02\x02\u02F4\u02F5" + + "\f\x03\x02\x02\u02F5\u02F6\x078\x02\x02\u02F6\u02F8\x05\x9AN\x02\u02F7" + + "\u02F4\x03\x02\x02\x02\u02F8\u02FB\x03\x02\x02\x02\u02F9\u02F7\x03\x02" + + "\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\x9D\x03\x02\x02\x02\u02FB\u02F9" + + "\x03\x02\x02\x02\u02FC\u02FD\bP\x01\x02\u02FD\u02FE\x05\x9CO\x02\u02FE" + + "\u0304\x03\x02\x02\x02\u02FF\u0300\f\x03\x02\x02\u0300\u0301\x079\x02" + + "\x02\u0301\u0303\x05\x9CO\x02\u0302\u02FF\x03\x02\x02\x02\u0303\u0306" + + "\x03\x02\x02\x02\u0304\u0302\x03\x02\x02\x02\u0304\u0305\x03\x02\x02\x02" + + "\u0305\x9F\x03\x02\x02\x02\u0306\u0304\x03\x02\x02\x02\u0307\u030F\x05" + + "\x9EP\x02\u0308\u0309\x05\x9EP\x02\u0309\u030A\x07'\x02\x02\u030A\u030B" + + "\x05\xA0Q\x02\u030B\u030C\x07(\x02\x02\u030C\u030D\x05\xA0Q\x02\u030D" + + "\u030F\x03\x02\x02\x02\u030E\u0307\x03\x02\x02\x02\u030E\u0308\x03\x02" + + "\x02\x02\u030F\xA1\x03\x02\x02\x02\u0310\u0316\x05\xA0Q\x02\u0311\u0312" + + "\x05l7\x02\u0312\u0313\x05\xA4S\x02\u0313\u0314\x05\xA2R\x02\u0314\u0316" + + "\x03\x02\x02\x02\u0315\u0310\x03\x02\x02\x02\u0315\u0311\x03\x02\x02\x02" + + "\u0316\xA3\x03\x02\x02\x02\u0317\u0318\t\x0F\x02\x02\u0318\xA5\x03\x02" + + "\x02\x02\u0319\u031E\x05\xA2R\x02\u031A\u031B\x07%\x02\x02\u031B\u031D" + + "\x05\xA2R\x02\u031C\u031A\x03\x02\x02\x02\u031D\u0320\x03\x02\x02\x02" + + "\u031E\u031C\x03\x02\x02\x02\u031E\u031F\x03\x02\x02\x02\u031F\xA7\x03" + + "\x02\x02\x02\u0320\u031E\x03\x02\x02\x02\u0321\u0325\x05\xAAV\x02\u0322" + + "\u0325\x05\xACW\x02\u0323\u0325\x05\xAEX\x02\u0324\u0321\x03\x02\x02\x02" + + "\u0324\u0322\x03\x02\x02\x02\u0324\u0323\x03\x02\x02\x02\u0325\xA9\x03" + + "\x02\x02\x02\u0326\u0327\x05\xB0Y\x02\u0327\xAB\x03\x02\x02\x02\u0328" + + "\u0329\x05\xB0Y\x02\u0329\u0332\x07C\x02\x02\u032A\u032F\x05\xA8U\x02" + + "\u032B\u032C\x07%\x02\x02\u032C\u032E\x05\xA8U\x02\u032D\u032B\x03\x02" + + "\x02\x02\u032E\u0331\x03\x02\x02\x02\u032F\u032D\x03\x02\x02\x02\u032F" + + "\u0330\x03\x02\x02\x02\u0330\u0333\x03\x02\x02\x02\u0331\u032F\x03\x02" + + "\x02\x02\u0332\u032A\x03\x02\x02\x02\u0332\u0333\x03\x02\x02\x02\u0333" + + "\u0334\x03\x02\x02\x02\u0334\u0335\x07E\x02\x02\u0335\xAD\x03\x02\x02" + + "\x02\u0336\u0337\x07!\x02\x02\u0337\u0338\x07)\x02\x02\u0338\u0339\x05" + + "\xB0Y\x02\u0339\u033A\x07*\x02\x02\u033A\xAF\x03\x02\x02\x02\u033B\u033C" + + "\t\x10\x02\x02\u033C\xB1\x03\x02\x02\x02N\xB3\xBA\xC1\xC6\xCE\xDA\xE6" + + "\xEC\xF3\u0100\u0107\u0111\u011D\u011F\u0127\u0130\u0136\u013B\u0146\u014B" + + "\u0156\u015F\u0169\u0176\u017B\u0181\u0185\u018B\u0191\u01A9\u01B7\u01BB" + + "\u01C3\u01D1\u01D9\u01E1\u01E5\u01EA\u01ED\u01F2\u01F5\u01FF\u0202\u0205" + + "\u020F\u0212\u0215\u0225\u022E\u0233\u0244\u0248\u024A\u0252\u0260\u0266" + + "\u026D\u0278\u0289\u0293\u029E\u02AA\u02B7\u02C2\u02CD\u02D8\u02E3\u02EE" + + "\u02F9\u0304\u030E\u0315\u031E\u0324\u032F\u0332"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", @@ -8987,6 +9085,83 @@ export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { } } +export class InstanceOfExpressionContext extends KipperParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_instanceOfExpression; + } + public copyFrom(ctx: InstanceOfExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnInstanceOfExpressionContext extends InstanceOfExpressionContext { + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); + } + constructor(ctx: InstanceOfExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterPassOnInstanceOfExpression) { + listener.enterPassOnInstanceOfExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitPassOnInstanceOfExpression) { + listener.exitPassOnInstanceOfExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitPassOnInstanceOfExpression) { + return visitor.visitPassOnInstanceOfExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ActualInstanceOfExpressionContext extends InstanceOfExpressionContext { + public instanceOfExpression(): InstanceOfExpressionContext { + return this.getRuleContext(0, InstanceOfExpressionContext); + } + public InstanceOf(): TerminalNode { + return this.getToken(KipperParser.InstanceOf, 0); + } + public typeSpecifierExpression(): TypeSpecifierExpressionContext { + return this.getRuleContext(0, TypeSpecifierExpressionContext); + } + constructor(ctx: InstanceOfExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterActualInstanceOfExpression) { + listener.enterActualInstanceOfExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitActualInstanceOfExpression) { + listener.exitActualInstanceOfExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitActualInstanceOfExpression) { + return visitor.visitActualInstanceOfExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -9000,8 +9175,8 @@ export class RelationalExpressionContext extends KipperParserRuleContext { } } export class PassOnRelationalExpressionContext extends RelationalExpressionContext { - public bitwiseShiftExpression(): BitwiseShiftExpressionContext { - return this.getRuleContext(0, BitwiseShiftExpressionContext); + public instanceOfExpression(): InstanceOfExpressionContext { + return this.getRuleContext(0, InstanceOfExpressionContext); } constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 4797a5272..738c24693 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -2,132 +2,135 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofExpressionContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnInstanceOfExpressionContext } from "./KipperParser"; +import { ActualInstanceOfExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { InstanceOfExpressionContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by @@ -498,6 +501,32 @@ export interface KipperParserListener extends ParseTreeListener { */ exitActualRelationalExpression?: (ctx: ActualRelationalExpressionContext) => void; + /** + * Enter a parse tree produced by the `passOnInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + enterPassOnInstanceOfExpression?: (ctx: PassOnInstanceOfExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + exitPassOnInstanceOfExpression?: (ctx: PassOnInstanceOfExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + enterActualInstanceOfExpression?: (ctx: ActualInstanceOfExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + exitActualInstanceOfExpression?: (ctx: ActualInstanceOfExpressionContext) => void; + /** * Enter a parse tree produced by the `passOnConditionalExpression` * labeled alternative in `KipperParser.conditionalExpression`. @@ -1357,6 +1386,17 @@ export interface KipperParserListener extends ParseTreeListener { */ exitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => void; + /** + * Enter a parse tree produced by `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + enterInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + */ + exitInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void; + /** * Enter a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index 6c7f4c2dd..e12ce75a9 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -2,132 +2,135 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. +import { KipperParserRuleContext, ParseRuleKindMapping, ASTKind } from ".."; +import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { - ActualAdditiveExpressionContext, - ActualAssignmentExpressionContext, - ActualBitwiseAndExpressionContext, - ActualBitwiseOrExpressionContext, - ActualBitwiseShiftExpressionContext, - ActualBitwiseXorExpressionContext, - ActualCastOrConvertExpressionContext, - ActualConditionalExpressionContext, - ActualEqualityExpressionContext, - ActualLogicalAndExpressionContext, - ActualLogicalOrExpressionContext, - ActualMultiplicativeExpressionContext, - ActualRelationalExpressionContext, - AdditiveExpressionContext, - ArgumentExpressionListContext, - ArrayPrimaryExpressionContext, - AssignmentExpressionContext, - AssignmentOperatorContext, - BitwiseAndExpressionContext, - BitwiseOrExpressionContext, - BitwiseShiftExpressionContext, - BitwiseShiftOperatorsContext, - BitwiseXorExpressionContext, - BlockItemContext, - BlockItemListContext, - BoolPrimaryExpressionContext, - BracketNotationContext, - BracketNotationMemberAccessExpressionContext, - CastOrConvertExpressionContext, - ClassConstructorDeclarationContext, - ClassDeclarationContext, - ClassMemberDeclarationContext, - ClassMethodDeclarationContext, - ClassPropertyDeclarationContext, - CompilationUnitContext, - CompoundStatementContext, - ComputedPrimaryExpressionContext, - ConditionalExpressionContext, - DeclarationContext, - DeclaratorContext, - DirectDeclaratorContext, - DotNotationContext, - DotNotationMemberAccessExpressionContext, - DoWhileLoopIterationStatementContext, - EqualityExpressionContext, - ExplicitCallFunctionCallExpressionContext, - ExpressionContext, - ExpressionStatementContext, - ExternalBlockItemContext, - ExternalItemContext, - ForLoopIterationStatementContext, - FStringDoubleQuoteAtomContext, - FStringPrimaryExpressionContext, - FStringSingleQuoteAtomContext, - FunctionCallExpressionContext, - FunctionDeclarationContext, - GenericTypeSpecifierExpressionContext, - IdentifierContext, - IdentifierOrStringPrimaryExpressionContext, - IdentifierPrimaryExpressionContext, - IdentifierTypeSpecifierExpressionContext, - IfStatementContext, - IncrementOrDecrementOperatorContext, - IncrementOrDecrementPostfixExpressionContext, - IncrementOrDecrementUnaryExpressionContext, - InitDeclaratorContext, - InitializerContext, - InterfaceDeclarationContext, - InterfaceMemberDeclarationContext, - InterfaceMethodDeclarationContext, - InterfacePropertyDeclarationContext, - IterationStatementContext, - JumpStatementContext, - LambdaPrimaryExpressionContext, - LogicalAndExpressionContext, - LogicalOrExpressionContext, - MultiplicativeExpressionContext, - NewInstantiationExpressionContext, - NumberPrimaryExpressionContext, - ObjectPrimaryExpressionContext, - ObjectPropertyContext, - OperatorModifiedUnaryExpressionContext, - ParameterDeclarationContext, - ParameterListContext, - PassOnAdditiveExpressionContext, - PassOnAssignmentExpressionContext, - PassOnBitwiseAndExpressionContext, - PassOnBitwiseOrExpressionContext, - PassOnBitwiseShiftExpressionContext, - PassOnBitwiseXorExpressionContext, - PassOnCastOrConvertExpressionContext, - PassOncomputedPrimaryExpressionContext, - PassOnConditionalExpressionContext, - PassOnEqualityExpressionContext, - PassOnLogicalAndExpressionContext, - PassOnLogicalOrExpressionContext, - PassOnMultiplicativeExpressionContext, - PassOnRelationalExpressionContext, - PostfixExpressionContext, - PrimaryExpressionContext, - RelationalExpressionContext, - ReturnStatementContext, - SelectionStatementContext, - SliceNotationContext, - SliceNotationMemberAccessExpressionContext, - StatementContext, - StorageTypeSpecifierContext, - StringPrimaryExpressionContext, - SwitchLabeledStatementContext, - SwitchStatementContext, - TangledPrimaryExpressionContext, - TranslationUnitContext, - TypeofExpressionContext, - TypeofTypeSpecifierExpressionContext, - TypeSpecifierExpressionContext, - TypeSpecifierIdentifierContext, - UnaryExpressionContext, - UnaryOperatorContext, - VariableDeclarationContext, - VoidOrNullOrUndefinedPrimaryExpressionContext, - WhileLoopIterationStatementContext, -} from "./KipperParser"; +import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; +import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; +import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; +import { ActualBitwiseAndExpressionContext } from "./KipperParser"; +import { PassOnLogicalAndExpressionContext } from "./KipperParser"; +import { ActualLogicalAndExpressionContext } from "./KipperParser"; +import { PassOnBitwiseXorExpressionContext } from "./KipperParser"; +import { ActualBitwiseXorExpressionContext } from "./KipperParser"; +import { ExternalBlockItemContext } from "./KipperParser"; +import { PassOncomputedPrimaryExpressionContext } from "./KipperParser"; +import { DotNotationMemberAccessExpressionContext } from "./KipperParser"; +import { BracketNotationMemberAccessExpressionContext } from "./KipperParser"; +import { SliceNotationMemberAccessExpressionContext } from "./KipperParser"; +import { FunctionCallExpressionContext } from "./KipperParser"; +import { ExplicitCallFunctionCallExpressionContext } from "./KipperParser"; +import { NewInstantiationExpressionContext } from "./KipperParser"; +import { PassOnAssignmentExpressionContext } from "./KipperParser"; +import { ActualAssignmentExpressionContext } from "./KipperParser"; +import { PassOnCastOrConvertExpressionContext } from "./KipperParser"; +import { ActualCastOrConvertExpressionContext } from "./KipperParser"; +import { PassOnBitwiseOrExpressionContext } from "./KipperParser"; +import { ActualBitwiseOrExpressionContext } from "./KipperParser"; +import { PassOnEqualityExpressionContext } from "./KipperParser"; +import { ActualEqualityExpressionContext } from "./KipperParser"; +import { PassOnAdditiveExpressionContext } from "./KipperParser"; +import { ActualAdditiveExpressionContext } from "./KipperParser"; +import { PassOnRelationalExpressionContext } from "./KipperParser"; +import { ActualRelationalExpressionContext } from "./KipperParser"; +import { PassOnInstanceOfExpressionContext } from "./KipperParser"; +import { ActualInstanceOfExpressionContext } from "./KipperParser"; +import { PassOnConditionalExpressionContext } from "./KipperParser"; +import { ActualConditionalExpressionContext } from "./KipperParser"; +import { PassOnMultiplicativeExpressionContext } from "./KipperParser"; +import { ActualMultiplicativeExpressionContext } from "./KipperParser"; +import { PassOnLogicalOrExpressionContext } from "./KipperParser"; +import { ActualLogicalOrExpressionContext } from "./KipperParser"; +import { CompilationUnitContext } from "./KipperParser"; +import { TranslationUnitContext } from "./KipperParser"; +import { ExternalItemContext } from "./KipperParser"; +import { BlockItemListContext } from "./KipperParser"; +import { BlockItemContext } from "./KipperParser"; +import { DeclarationContext } from "./KipperParser"; +import { VariableDeclarationContext } from "./KipperParser"; +import { StorageTypeSpecifierContext } from "./KipperParser"; +import { InitDeclaratorContext } from "./KipperParser"; +import { InitializerContext } from "./KipperParser"; +import { DeclaratorContext } from "./KipperParser"; +import { DirectDeclaratorContext } from "./KipperParser"; +import { FunctionDeclarationContext } from "./KipperParser"; +import { ParameterListContext } from "./KipperParser"; +import { ParameterDeclarationContext } from "./KipperParser"; +import { InterfaceDeclarationContext } from "./KipperParser"; +import { InterfaceMemberDeclarationContext } from "./KipperParser"; +import { InterfacePropertyDeclarationContext } from "./KipperParser"; +import { InterfaceMethodDeclarationContext } from "./KipperParser"; +import { ClassDeclarationContext } from "./KipperParser"; +import { ClassMemberDeclarationContext } from "./KipperParser"; +import { ClassPropertyDeclarationContext } from "./KipperParser"; +import { ClassMethodDeclarationContext } from "./KipperParser"; +import { ClassConstructorDeclarationContext } from "./KipperParser"; +import { StatementContext } from "./KipperParser"; +import { CompoundStatementContext } from "./KipperParser"; +import { ExpressionStatementContext } from "./KipperParser"; +import { SelectionStatementContext } from "./KipperParser"; +import { IfStatementContext } from "./KipperParser"; +import { SwitchStatementContext } from "./KipperParser"; +import { SwitchLabeledStatementContext } from "./KipperParser"; +import { IterationStatementContext } from "./KipperParser"; +import { ForLoopIterationStatementContext } from "./KipperParser"; +import { WhileLoopIterationStatementContext } from "./KipperParser"; +import { DoWhileLoopIterationStatementContext } from "./KipperParser"; +import { JumpStatementContext } from "./KipperParser"; +import { ReturnStatementContext } from "./KipperParser"; +import { PrimaryExpressionContext } from "./KipperParser"; +import { LambdaPrimaryExpressionContext } from "./KipperParser"; +import { TangledPrimaryExpressionContext } from "./KipperParser"; +import { BoolPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierPrimaryExpressionContext } from "./KipperParser"; +import { IdentifierContext } from "./KipperParser"; +import { IdentifierOrStringPrimaryExpressionContext } from "./KipperParser"; +import { StringPrimaryExpressionContext } from "./KipperParser"; +import { FStringPrimaryExpressionContext } from "./KipperParser"; +import { FStringSingleQuoteAtomContext } from "./KipperParser"; +import { FStringDoubleQuoteAtomContext } from "./KipperParser"; +import { NumberPrimaryExpressionContext } from "./KipperParser"; +import { ArrayPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPrimaryExpressionContext } from "./KipperParser"; +import { ObjectPropertyContext } from "./KipperParser"; +import { VoidOrNullOrUndefinedPrimaryExpressionContext } from "./KipperParser"; +import { ComputedPrimaryExpressionContext } from "./KipperParser"; +import { ArgumentExpressionListContext } from "./KipperParser"; +import { DotNotationContext } from "./KipperParser"; +import { BracketNotationContext } from "./KipperParser"; +import { SliceNotationContext } from "./KipperParser"; +import { PostfixExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementPostfixExpressionContext } from "./KipperParser"; +import { TypeofExpressionContext } from "./KipperParser"; +import { UnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementUnaryExpressionContext } from "./KipperParser"; +import { OperatorModifiedUnaryExpressionContext } from "./KipperParser"; +import { IncrementOrDecrementOperatorContext } from "./KipperParser"; +import { UnaryOperatorContext } from "./KipperParser"; +import { CastOrConvertExpressionContext } from "./KipperParser"; +import { MultiplicativeExpressionContext } from "./KipperParser"; +import { AdditiveExpressionContext } from "./KipperParser"; +import { BitwiseShiftExpressionContext } from "./KipperParser"; +import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { InstanceOfExpressionContext } from "./KipperParser"; +import { RelationalExpressionContext } from "./KipperParser"; +import { EqualityExpressionContext } from "./KipperParser"; +import { BitwiseAndExpressionContext } from "./KipperParser"; +import { BitwiseXorExpressionContext } from "./KipperParser"; +import { BitwiseOrExpressionContext } from "./KipperParser"; +import { LogicalAndExpressionContext } from "./KipperParser"; +import { LogicalOrExpressionContext } from "./KipperParser"; +import { ConditionalExpressionContext } from "./KipperParser"; +import { AssignmentExpressionContext } from "./KipperParser"; +import { AssignmentOperatorContext } from "./KipperParser"; +import { ExpressionContext } from "./KipperParser"; +import { TypeSpecifierExpressionContext } from "./KipperParser"; +import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; +import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; +import { TypeSpecifierIdentifierContext } from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced @@ -361,6 +364,22 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitActualRelationalExpression?: (ctx: ActualRelationalExpressionContext) => Result; + /** + * Visit a parse tree produced by the `passOnInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnInstanceOfExpression?: (ctx: PassOnInstanceOfExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualInstanceOfExpression` + * labeled alternative in `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualInstanceOfExpression?: (ctx: ActualInstanceOfExpressionContext) => Result; + /** * Visit a parse tree produced by the `passOnConditionalExpression` * labeled alternative in `KipperParser.conditionalExpression`. @@ -906,6 +925,13 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.instanceOfExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => Result; + /** * Visit a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree diff --git a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts index 205d6a35f..659b2a944 100644 --- a/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts +++ b/kipper/core/src/compiler/lexer-parser/parse-rule-kind-mapping.ts @@ -104,6 +104,7 @@ export const ParseRuleKindMapping = { RULE_genericTypeSpecifierExpression: KipperParser.RULE_genericTypeSpecifierExpression, RULE_typeofTypeSpecifierExpression: KipperParser.RULE_typeofTypeSpecifierExpression, RULE_typeSpecifierIdentifier: KipperParser.RULE_typeSpecifierIdentifier, + RULE_instanceofExpression: KipperParser.RULE_instanceOfExpression, // Labelled rules, which don't have a corresponding identifier number in KipperParser. RULE_memberAccessExpression: 1001, // -> See 'computedPrimaryExpression' RULE_functionCallExpression: 1002, // -> See 'computedPrimaryExpression' diff --git a/kipper/core/src/compiler/target-presets/semantic-analyser.ts b/kipper/core/src/compiler/target-presets/semantic-analyser.ts index 12f7fbd39..8291110b4 100644 --- a/kipper/core/src/compiler/target-presets/semantic-analyser.ts +++ b/kipper/core/src/compiler/target-presets/semantic-analyser.ts @@ -30,6 +30,7 @@ import type { IfStatement, IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, + InstanceofExpression, InterfaceDeclaration, InterfaceMethodDeclaration, InterfacePropertyDeclaration, @@ -342,4 +343,9 @@ export abstract class KipperTargetSemanticAnalyser extends KipperSemanticErrorHa * Performs translation-specific semantic analysis for {@link TypeofExpression} instances. */ public abstract typeofExpression?: TargetASTNodeSemanticAnalyser; + + /** + * Performs translation-specific semantic analysis for {@link InstanceofExpression} instances. + */ + public abstract instanceofExpression?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 4763d4794..944f7f5b2 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -60,6 +60,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; +import type { InstanceofExpression } from "../../ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -436,4 +437,9 @@ export abstract class KipperTargetCodeGenerator { * Translates a {@link TypeofExpression} into a specific language. */ public abstract typeofExpression: TargetASTNodeCodeGenerator; + + /** + * Translates a {@Link InstanceofExpression} into a specific language. + */ + public abstract instanceofExpression: TargetASTNodeCodeGenerator; } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 4ae1728a8..59fe02e2c 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -53,6 +53,7 @@ import type { StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, + TargetASTNodeCodeGenerator, TranslatedCodeLine, TranslatedCodeToken, TranslatedExpression, @@ -76,6 +77,7 @@ import { } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; +import type { InstanceofExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -1096,4 +1098,8 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [TargetJS.getBuiltInIdentifier("typeOf"), "(", ...operand, ")"]; }; + + instanceofExpression = async (node: InstanceofExpression): Promise => { + return ["Jo here i am"]; + }; } diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index 7cbe67a47..ee094ae1d 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -7,6 +7,7 @@ import type { ClassMethodDeclaration, Declaration, FunctionDeclaration, + InstanceofExpression, InterfaceDeclaration, InterfaceMethodDeclaration, InterfacePropertyDeclaration, @@ -322,4 +323,6 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys * Performs typescript-specific semantic analysis for {@link TypeofExpression} instances. */ typeofExpression = undefined; + + instanceofExpression = undefined; } diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 50eabed1c..442f00740 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1716,5 +1716,26 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); }); + + it("it should be able to use instanceof operator", async () => { + const fileContent = `class Test {}; var x : Test = new Test(); if(x instanceof Test) {print("works");};`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("3");\n', + "Invalid TypeScript code (Expected different output)", + ); + }); }); }); From c1dbc99a9b13d80e033435d21403149daa87e078 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:18:28 +0200 Subject: [PATCH 13/81] [#672] minor: fixed ast generator not entering matches --- kipper/core/KipperParser.g4 | 13 +- kipper/core/src/compiler/ast/ast-generator.ts | 4 +- .../lexer-parser/antlr/KipperParser.interp | 4 +- .../lexer-parser/antlr/KipperParser.ts | 1024 +++++++++-------- .../antlr/KipperParserListener.ts | 52 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 34 +- .../semantics/analyser/type-checker.ts | 5 +- test/kipper-files/matches.kip | 3 + 8 files changed, 643 insertions(+), 496 deletions(-) create mode 100644 test/kipper-files/matches.kip diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index be66d4a43..c88b8e13e 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -368,9 +368,14 @@ bitwiseShiftOperators : '<<' | '>>' | '>>>' ; +matchesExpression + : bitwiseShiftExpression # passOnMatchesExpression + | matchesExpression 'matches' bitwiseShiftExpression # actualMatchesExpression + ; + relationalExpression - : bitwiseShiftExpression # passOnRelationalExpression - | relationalExpression ('<'|'>'|'<='|'>=') bitwiseShiftExpression # actualRelationalExpression + : matchesExpression # passOnRelationalExpression + | relationalExpression ('<'|'>'|'<='|'>=') matchesExpression # actualRelationalExpression ; equalityExpression @@ -440,7 +445,3 @@ typeofTypeSpecifierExpression typeSpecifierIdentifier : (Identifier | 'null' | 'undefined' | 'void') ; - -matchesExpression - : assignmentExpression 'matches' typeSpecifierExpression - ; diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index c80453d41..525c4468d 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -786,12 +786,12 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi /** * Enter a parse tree produced by the KipperParser.matchesExpression */ - public enterMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleEnteringTreeNode; + public enterActualMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleEnteringTreeNode; /** * Exit a parse tree produced by the KipperParser.matchesExpression */ - public exitMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleExitingTreeNode; + public exitActualMatchesExpression: (ctx: MatchesExpressionContext) => void = this.handleExitingTreeNode; // NOTE: // We are ignoring the 'conditionalExpression' rule, and only going to handle the rule diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index 28be96ede..583658720 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -254,6 +254,7 @@ multiplicativeExpression additiveExpression bitwiseShiftExpression bitwiseShiftOperators +matchesExpression relationalExpression equalityExpression bitwiseAndExpression @@ -270,8 +271,7 @@ identifierTypeSpecifierExpression genericTypeSpecifierExpression typeofTypeSpecifierExpression typeSpecifierIdentifier -matchesExpression atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 91, 823, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 3, 2, 5, 2, 180, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 4, 3, 4, 3, 5, 6, 5, 192, 10, 5, 13, 5, 14, 5, 193, 3, 6, 3, 6, 3, 6, 5, 6, 199, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 207, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 219, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 231, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 237, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 242, 10, 15, 12, 15, 14, 15, 245, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 255, 10, 17, 12, 17, 14, 17, 258, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 264, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 274, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 286, 10, 21, 12, 21, 14, 21, 289, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 296, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 305, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 311, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 316, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 327, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 332, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 343, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 352, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 360, 10, 31, 12, 31, 14, 31, 363, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 375, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 380, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 5, 34, 390, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 396, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 402, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 426, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 440, 10, 39, 3, 40, 3, 40, 5, 40, 444, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 452, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 466, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 472, 10, 47, 12, 47, 14, 47, 475, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 480, 10, 47, 12, 47, 14, 47, 483, 11, 47, 3, 47, 5, 47, 486, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 491, 10, 48, 3, 48, 5, 48, 494, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 499, 10, 49, 3, 49, 5, 49, 502, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 510, 10, 51, 12, 51, 14, 51, 513, 11, 51, 5, 51, 515, 10, 51, 3, 51, 5, 51, 518, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 526, 10, 52, 12, 52, 14, 52, 529, 11, 52, 5, 52, 531, 10, 52, 3, 52, 5, 52, 534, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 550, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 559, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 564, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 3, 55, 3, 55, 7, 55, 585, 10, 55, 12, 55, 14, 55, 588, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 593, 10, 56, 12, 56, 14, 56, 596, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 609, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 615, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 622, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 633, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 650, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 658, 10, 69, 12, 69, 14, 69, 661, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 669, 10, 70, 12, 70, 14, 70, 672, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 681, 10, 71, 12, 71, 14, 71, 684, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 694, 10, 73, 12, 73, 14, 73, 697, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 705, 10, 74, 12, 74, 14, 74, 708, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 716, 10, 75, 12, 75, 14, 75, 719, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 727, 10, 76, 12, 76, 14, 76, 730, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 738, 10, 77, 12, 77, 14, 77, 741, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 749, 10, 78, 12, 78, 14, 78, 752, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 760, 10, 79, 12, 79, 14, 79, 763, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 772, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 779, 10, 81, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 7, 83, 786, 10, 83, 12, 83, 14, 83, 789, 11, 83, 3, 84, 3, 84, 3, 84, 5, 84, 794, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 7, 86, 803, 10, 86, 12, 86, 14, 86, 806, 11, 86, 5, 86, 808, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 2, 2, 13, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 90, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 81, 82, 4, 2, 80, 80, 83, 83, 3, 2, 34, 36, 4, 2, 49, 49, 51, 51, 6, 2, 48, 48, 50, 50, 58, 58, 74, 74, 3, 2, 52, 55, 4, 2, 48, 48, 50, 50, 3, 2, 75, 77, 3, 2, 67, 70, 3, 2, 65, 66, 3, 2, 59, 64, 4, 2, 34, 36, 79, 79, 2, 832, 2, 179, 3, 2, 2, 2, 4, 184, 3, 2, 2, 2, 6, 188, 3, 2, 2, 2, 8, 191, 3, 2, 2, 2, 10, 198, 3, 2, 2, 2, 12, 206, 3, 2, 2, 2, 14, 208, 3, 2, 2, 2, 16, 211, 3, 2, 2, 2, 18, 213, 3, 2, 2, 2, 20, 220, 3, 2, 2, 2, 22, 222, 3, 2, 2, 2, 24, 224, 3, 2, 2, 2, 26, 226, 3, 2, 2, 2, 28, 238, 3, 2, 2, 2, 30, 246, 3, 2, 2, 2, 32, 250, 3, 2, 2, 2, 34, 263, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 280, 3, 2, 2, 2, 42, 295, 3, 2, 2, 2, 44, 297, 3, 2, 2, 2, 46, 301, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 326, 3, 2, 2, 2, 52, 328, 3, 2, 2, 2, 54, 335, 3, 2, 2, 2, 56, 342, 3, 2, 2, 2, 58, 344, 3, 2, 2, 2, 60, 353, 3, 2, 2, 2, 62, 374, 3, 2, 2, 2, 64, 379, 3, 2, 2, 2, 66, 381, 3, 2, 2, 2, 68, 406, 3, 2, 2, 2, 70, 412, 3, 2, 2, 2, 72, 420, 3, 2, 2, 2, 74, 423, 3, 2, 2, 2, 76, 439, 3, 2, 2, 2, 78, 441, 3, 2, 2, 2, 80, 453, 3, 2, 2, 2, 82, 457, 3, 2, 2, 2, 84, 459, 3, 2, 2, 2, 86, 461, 3, 2, 2, 2, 88, 465, 3, 2, 2, 2, 90, 467, 3, 2, 2, 2, 92, 485, 3, 2, 2, 2, 94, 493, 3, 2, 2, 2, 96, 501, 3, 2, 2, 2, 98, 503, 3, 2, 2, 2, 100, 505, 3, 2, 2, 2, 102, 521, 3, 2, 2, 2, 104, 537, 3, 2, 2, 2, 106, 541, 3, 2, 2, 2, 108, 563, 3, 2, 2, 2, 110, 589, 3, 2, 2, 2, 112, 597, 3, 2, 2, 2, 114, 600, 3, 2, 2, 2, 116, 604, 3, 2, 2, 2, 118, 621, 3, 2, 2, 2, 120, 623, 3, 2, 2, 2, 122, 626, 3, 2, 2, 2, 124, 632, 3, 2, 2, 2, 126, 634, 3, 2, 2, 2, 128, 637, 3, 2, 2, 2, 130, 640, 3, 2, 2, 2, 132, 642, 3, 2, 2, 2, 134, 649, 3, 2, 2, 2, 136, 651, 3, 2, 2, 2, 138, 662, 3, 2, 2, 2, 140, 673, 3, 2, 2, 2, 142, 685, 3, 2, 2, 2, 144, 687, 3, 2, 2, 2, 146, 698, 3, 2, 2, 2, 148, 709, 3, 2, 2, 2, 150, 720, 3, 2, 2, 2, 152, 731, 3, 2, 2, 2, 154, 742, 3, 2, 2, 2, 156, 753, 3, 2, 2, 2, 158, 771, 3, 2, 2, 2, 160, 778, 3, 2, 2, 2, 162, 780, 3, 2, 2, 2, 164, 782, 3, 2, 2, 2, 166, 793, 3, 2, 2, 2, 168, 795, 3, 2, 2, 2, 170, 797, 3, 2, 2, 2, 172, 811, 3, 2, 2, 2, 174, 816, 3, 2, 2, 2, 176, 818, 3, 2, 2, 2, 178, 180, 5, 4, 3, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 182, 7, 2, 2, 3, 182, 3, 3, 2, 2, 2, 183, 185, 5, 6, 4, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 5, 3, 2, 2, 2, 188, 189, 5, 8, 5, 2, 189, 7, 3, 2, 2, 2, 190, 192, 5, 10, 6, 2, 191, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 9, 3, 2, 2, 2, 195, 199, 5, 50, 26, 2, 196, 199, 5, 12, 7, 2, 197, 199, 7, 38, 2, 2, 198, 195, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 11, 3, 2, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 38, 2, 2, 202, 207, 3, 2, 2, 2, 203, 207, 5, 26, 14, 2, 204, 207, 5, 32, 17, 2, 205, 207, 5, 40, 21, 2, 206, 200, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 13, 3, 2, 2, 2, 208, 209, 5, 16, 9, 2, 209, 210, 5, 18, 10, 2, 210, 15, 3, 2, 2, 2, 211, 212, 9, 2, 2, 2, 212, 17, 3, 2, 2, 2, 213, 214, 5, 22, 12, 2, 214, 215, 7, 40, 2, 2, 215, 218, 5, 166, 84, 2, 216, 217, 7, 59, 2, 2, 217, 219, 5, 20, 11, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 19, 3, 2, 2, 2, 220, 221, 5, 160, 81, 2, 221, 21, 3, 2, 2, 2, 222, 223, 5, 24, 13, 2, 223, 23, 3, 2, 2, 2, 224, 225, 7, 79, 2, 2, 225, 25, 3, 2, 2, 2, 226, 227, 7, 22, 2, 2, 227, 228, 5, 22, 12, 2, 228, 230, 7, 41, 2, 2, 229, 231, 5, 28, 15, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 7, 42, 2, 2, 233, 234, 7, 25, 2, 2, 234, 236, 5, 166, 84, 2, 235, 237, 5, 52, 27, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 27, 3, 2, 2, 2, 238, 243, 5, 30, 16, 2, 239, 240, 7, 37, 2, 2, 240, 242, 5, 30, 16, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 29, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 247, 5, 22, 12, 2, 247, 248, 7, 40, 2, 2, 248, 249, 5, 166, 84, 2, 249, 31, 3, 2, 2, 2, 250, 251, 7, 27, 2, 2, 251, 252, 5, 22, 12, 2, 252, 256, 7, 46, 2, 2, 253, 255, 5, 34, 18, 2, 254, 253, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 47, 2, 2, 260, 33, 3, 2, 2, 2, 261, 264, 5, 36, 19, 2, 262, 264, 5, 38, 20, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 35, 3, 2, 2, 2, 265, 266, 5, 22, 12, 2, 266, 267, 7, 40, 2, 2, 267, 268, 5, 166, 84, 2, 268, 269, 7, 38, 2, 2, 269, 37, 3, 2, 2, 2, 270, 271, 5, 22, 12, 2, 271, 273, 7, 41, 2, 2, 272, 274, 5, 28, 15, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 42, 2, 2, 276, 277, 7, 40, 2, 2, 277, 278, 5, 166, 84, 2, 278, 279, 7, 38, 2, 2, 279, 39, 3, 2, 2, 2, 280, 281, 7, 26, 2, 2, 281, 282, 5, 22, 12, 2, 282, 287, 7, 46, 2, 2, 283, 286, 5, 42, 22, 2, 284, 286, 7, 38, 2, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 289, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 290, 291, 7, 47, 2, 2, 291, 41, 3, 2, 2, 2, 292, 296, 5, 44, 23, 2, 293, 296, 5, 46, 24, 2, 294, 296, 5, 48, 25, 2, 295, 292, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 43, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 299, 7, 40, 2, 2, 299, 300, 5, 166, 84, 2, 300, 45, 3, 2, 2, 2, 301, 302, 5, 22, 12, 2, 302, 304, 7, 41, 2, 2, 303, 305, 5, 28, 15, 2, 304, 303, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 307, 7, 42, 2, 2, 307, 308, 7, 40, 2, 2, 308, 310, 5, 166, 84, 2, 309, 311, 5, 52, 27, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 47, 3, 2, 2, 2, 312, 313, 7, 28, 2, 2, 313, 315, 7, 41, 2, 2, 314, 316, 5, 28, 15, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 7, 42, 2, 2, 318, 319, 5, 52, 27, 2, 319, 49, 3, 2, 2, 2, 320, 327, 5, 54, 28, 2, 321, 327, 5, 56, 29, 2, 322, 327, 5, 64, 33, 2, 323, 327, 5, 72, 37, 2, 324, 327, 5, 74, 38, 2, 325, 327, 5, 52, 27, 2, 326, 320, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 326, 322, 3, 2, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 325, 3, 2, 2, 2, 327, 51, 3, 2, 2, 2, 328, 329, 6, 27, 2, 2, 329, 331, 7, 46, 2, 2, 330, 332, 5, 8, 5, 2, 331, 330, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 7, 47, 2, 2, 334, 53, 3, 2, 2, 2, 335, 336, 8, 28, 1, 2, 336, 337, 5, 164, 83, 2, 337, 338, 7, 38, 2, 2, 338, 339, 8, 28, 1, 2, 339, 55, 3, 2, 2, 2, 340, 343, 5, 58, 30, 2, 341, 343, 5, 60, 31, 2, 342, 340, 3, 2, 2, 2, 342, 341, 3, 2, 2, 2, 343, 57, 3, 2, 2, 2, 344, 345, 7, 18, 2, 2, 345, 346, 7, 41, 2, 2, 346, 347, 5, 164, 83, 2, 347, 348, 7, 42, 2, 2, 348, 351, 5, 50, 26, 2, 349, 350, 7, 19, 2, 2, 350, 352, 5, 50, 26, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 59, 3, 2, 2, 2, 353, 354, 7, 11, 2, 2, 354, 355, 7, 41, 2, 2, 355, 356, 5, 164, 83, 2, 356, 357, 7, 42, 2, 2, 357, 361, 7, 46, 2, 2, 358, 360, 5, 62, 32, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 61, 3, 2, 2, 2, 366, 367, 7, 12, 2, 2, 367, 368, 5, 164, 83, 2, 368, 369, 7, 40, 2, 2, 369, 370, 5, 50, 26, 2, 370, 375, 3, 2, 2, 2, 371, 372, 7, 13, 2, 2, 372, 373, 7, 40, 2, 2, 373, 375, 5, 50, 26, 2, 374, 366, 3, 2, 2, 2, 374, 371, 3, 2, 2, 2, 375, 63, 3, 2, 2, 2, 376, 380, 5, 66, 34, 2, 377, 380, 5, 68, 35, 2, 378, 380, 5, 70, 36, 2, 379, 376, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 378, 3, 2, 2, 2, 380, 65, 3, 2, 2, 2, 381, 382, 7, 20, 2, 2, 382, 389, 7, 41, 2, 2, 383, 386, 5, 14, 8, 2, 384, 386, 5, 164, 83, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 8, 34, 1, 2, 388, 390, 3, 2, 2, 2, 389, 385, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 395, 7, 38, 2, 2, 392, 393, 5, 164, 83, 2, 393, 394, 8, 34, 1, 2, 394, 396, 3, 2, 2, 2, 395, 392, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 401, 7, 38, 2, 2, 398, 399, 5, 164, 83, 2, 399, 400, 8, 34, 1, 2, 400, 402, 3, 2, 2, 2, 401, 398, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 7, 42, 2, 2, 404, 405, 5, 50, 26, 2, 405, 67, 3, 2, 2, 2, 406, 407, 7, 17, 2, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 164, 83, 2, 409, 410, 7, 42, 2, 2, 410, 411, 5, 50, 26, 2, 411, 69, 3, 2, 2, 2, 412, 413, 7, 16, 2, 2, 413, 414, 5, 50, 26, 2, 414, 415, 7, 17, 2, 2, 415, 416, 7, 41, 2, 2, 416, 417, 5, 164, 83, 2, 417, 418, 7, 42, 2, 2, 418, 419, 7, 38, 2, 2, 419, 71, 3, 2, 2, 2, 420, 421, 9, 3, 2, 2, 421, 422, 7, 38, 2, 2, 422, 73, 3, 2, 2, 2, 423, 425, 7, 23, 2, 2, 424, 426, 5, 164, 83, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 38, 2, 2, 428, 75, 3, 2, 2, 2, 429, 440, 5, 80, 41, 2, 430, 440, 5, 78, 40, 2, 431, 440, 5, 100, 51, 2, 432, 440, 5, 102, 52, 2, 433, 440, 5, 82, 42, 2, 434, 440, 5, 84, 43, 2, 435, 440, 5, 90, 46, 2, 436, 440, 5, 92, 47, 2, 437, 440, 5, 98, 50, 2, 438, 440, 5, 106, 54, 2, 439, 429, 3, 2, 2, 2, 439, 430, 3, 2, 2, 2, 439, 431, 3, 2, 2, 2, 439, 432, 3, 2, 2, 2, 439, 433, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 435, 3, 2, 2, 2, 439, 436, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 77, 3, 2, 2, 2, 441, 443, 7, 41, 2, 2, 442, 444, 5, 28, 15, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 7, 42, 2, 2, 446, 447, 7, 40, 2, 2, 447, 448, 5, 166, 84, 2, 448, 451, 7, 25, 2, 2, 449, 452, 5, 164, 83, 2, 450, 452, 5, 52, 27, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 79, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 455, 5, 164, 83, 2, 455, 456, 7, 42, 2, 2, 456, 81, 3, 2, 2, 2, 457, 458, 9, 4, 2, 2, 458, 83, 3, 2, 2, 2, 459, 460, 5, 86, 44, 2, 460, 85, 3, 2, 2, 2, 461, 462, 7, 79, 2, 2, 462, 87, 3, 2, 2, 2, 463, 466, 5, 86, 44, 2, 464, 466, 5, 90, 46, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 89, 3, 2, 2, 2, 467, 468, 9, 5, 2, 2, 468, 91, 3, 2, 2, 2, 469, 473, 7, 86, 2, 2, 470, 472, 5, 94, 48, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 486, 7, 88, 2, 2, 477, 481, 7, 87, 2, 2, 478, 480, 5, 96, 49, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 90, 2, 2, 485, 469, 3, 2, 2, 2, 485, 477, 3, 2, 2, 2, 486, 93, 3, 2, 2, 2, 487, 494, 7, 89, 2, 2, 488, 490, 7, 3, 2, 2, 489, 491, 5, 164, 83, 2, 490, 489, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 494, 7, 45, 2, 2, 493, 487, 3, 2, 2, 2, 493, 488, 3, 2, 2, 2, 494, 95, 3, 2, 2, 2, 495, 502, 7, 91, 2, 2, 496, 498, 7, 3, 2, 2, 497, 499, 5, 164, 83, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 7, 45, 2, 2, 501, 495, 3, 2, 2, 2, 501, 496, 3, 2, 2, 2, 502, 97, 3, 2, 2, 2, 503, 504, 9, 6, 2, 2, 504, 99, 3, 2, 2, 2, 505, 514, 7, 43, 2, 2, 506, 511, 5, 164, 83, 2, 507, 508, 7, 37, 2, 2, 508, 510, 5, 164, 83, 2, 509, 507, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 514, 506, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 518, 7, 37, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 7, 44, 2, 2, 520, 101, 3, 2, 2, 2, 521, 530, 7, 46, 2, 2, 522, 527, 5, 104, 53, 2, 523, 524, 7, 37, 2, 2, 524, 526, 5, 104, 53, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 534, 7, 37, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 47, 2, 2, 536, 103, 3, 2, 2, 2, 537, 538, 5, 88, 45, 2, 538, 539, 7, 40, 2, 2, 539, 540, 5, 164, 83, 2, 540, 105, 3, 2, 2, 2, 541, 542, 9, 7, 2, 2, 542, 107, 3, 2, 2, 2, 543, 544, 8, 55, 1, 2, 544, 564, 5, 76, 39, 2, 545, 546, 7, 24, 2, 2, 546, 547, 5, 108, 55, 2, 547, 549, 7, 41, 2, 2, 548, 550, 5, 110, 56, 2, 549, 548, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 7, 42, 2, 2, 552, 553, 8, 55, 1, 2, 553, 564, 3, 2, 2, 2, 554, 555, 7, 29, 2, 2, 555, 556, 5, 166, 84, 2, 556, 558, 7, 41, 2, 2, 557, 559, 5, 110, 56, 2, 558, 557, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 7, 42, 2, 2, 561, 562, 8, 55, 1, 2, 562, 564, 3, 2, 2, 2, 563, 543, 3, 2, 2, 2, 563, 545, 3, 2, 2, 2, 563, 554, 3, 2, 2, 2, 564, 586, 3, 2, 2, 2, 565, 566, 12, 8, 2, 2, 566, 567, 5, 112, 57, 2, 567, 568, 8, 55, 1, 2, 568, 585, 3, 2, 2, 2, 569, 570, 12, 7, 2, 2, 570, 571, 5, 114, 58, 2, 571, 572, 8, 55, 1, 2, 572, 585, 3, 2, 2, 2, 573, 574, 12, 6, 2, 2, 574, 575, 5, 116, 59, 2, 575, 576, 8, 55, 1, 2, 576, 585, 3, 2, 2, 2, 577, 578, 12, 5, 2, 2, 578, 580, 7, 41, 2, 2, 579, 581, 5, 110, 56, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 42, 2, 2, 583, 585, 8, 55, 1, 2, 584, 565, 3, 2, 2, 2, 584, 569, 3, 2, 2, 2, 584, 573, 3, 2, 2, 2, 584, 577, 3, 2, 2, 2, 585, 588, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 109, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 589, 594, 5, 160, 81, 2, 590, 591, 7, 37, 2, 2, 591, 593, 5, 160, 81, 2, 592, 590, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 111, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 598, 7, 78, 2, 2, 598, 599, 5, 86, 44, 2, 599, 113, 3, 2, 2, 2, 600, 601, 7, 43, 2, 2, 601, 602, 5, 164, 83, 2, 602, 603, 7, 44, 2, 2, 603, 115, 3, 2, 2, 2, 604, 608, 7, 43, 2, 2, 605, 606, 5, 164, 83, 2, 606, 607, 8, 59, 1, 2, 607, 609, 3, 2, 2, 2, 608, 605, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 614, 7, 40, 2, 2, 611, 612, 5, 164, 83, 2, 612, 613, 8, 59, 1, 2, 613, 615, 3, 2, 2, 2, 614, 611, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 7, 44, 2, 2, 617, 117, 3, 2, 2, 2, 618, 622, 5, 108, 55, 2, 619, 622, 5, 120, 61, 2, 620, 622, 5, 122, 62, 2, 621, 618, 3, 2, 2, 2, 621, 619, 3, 2, 2, 2, 621, 620, 3, 2, 2, 2, 622, 119, 3, 2, 2, 2, 623, 624, 5, 108, 55, 2, 624, 625, 5, 130, 66, 2, 625, 121, 3, 2, 2, 2, 626, 627, 7, 33, 2, 2, 627, 628, 5, 160, 81, 2, 628, 123, 3, 2, 2, 2, 629, 633, 5, 118, 60, 2, 630, 633, 5, 126, 64, 2, 631, 633, 5, 128, 65, 2, 632, 629, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 125, 3, 2, 2, 2, 634, 635, 5, 130, 66, 2, 635, 636, 5, 118, 60, 2, 636, 127, 3, 2, 2, 2, 637, 638, 5, 132, 67, 2, 638, 639, 5, 118, 60, 2, 639, 129, 3, 2, 2, 2, 640, 641, 9, 8, 2, 2, 641, 131, 3, 2, 2, 2, 642, 643, 9, 9, 2, 2, 643, 133, 3, 2, 2, 2, 644, 650, 5, 124, 63, 2, 645, 646, 5, 124, 63, 2, 646, 647, 7, 9, 2, 2, 647, 648, 5, 166, 84, 2, 648, 650, 3, 2, 2, 2, 649, 644, 3, 2, 2, 2, 649, 645, 3, 2, 2, 2, 650, 135, 3, 2, 2, 2, 651, 652, 8, 69, 1, 2, 652, 653, 5, 134, 68, 2, 653, 659, 3, 2, 2, 2, 654, 655, 12, 3, 2, 2, 655, 656, 9, 10, 2, 2, 656, 658, 5, 134, 68, 2, 657, 654, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 137, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 663, 8, 70, 1, 2, 663, 664, 5, 136, 69, 2, 664, 670, 3, 2, 2, 2, 665, 666, 12, 3, 2, 2, 666, 667, 9, 11, 2, 2, 667, 669, 5, 136, 69, 2, 668, 665, 3, 2, 2, 2, 669, 672, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 139, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 673, 674, 8, 71, 1, 2, 674, 675, 5, 138, 70, 2, 675, 682, 3, 2, 2, 2, 676, 677, 12, 3, 2, 2, 677, 678, 5, 142, 72, 2, 678, 679, 5, 148, 75, 2, 679, 681, 3, 2, 2, 2, 680, 676, 3, 2, 2, 2, 681, 684, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 141, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 685, 686, 9, 12, 2, 2, 686, 143, 3, 2, 2, 2, 687, 688, 8, 73, 1, 2, 688, 689, 5, 140, 71, 2, 689, 695, 3, 2, 2, 2, 690, 691, 12, 3, 2, 2, 691, 692, 9, 13, 2, 2, 692, 694, 5, 140, 71, 2, 693, 690, 3, 2, 2, 2, 694, 697, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 145, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 698, 699, 8, 74, 1, 2, 699, 700, 5, 144, 73, 2, 700, 706, 3, 2, 2, 2, 701, 702, 12, 3, 2, 2, 702, 703, 9, 14, 2, 2, 703, 705, 5, 144, 73, 2, 704, 701, 3, 2, 2, 2, 705, 708, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 147, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 709, 710, 8, 75, 1, 2, 710, 711, 5, 146, 74, 2, 711, 717, 3, 2, 2, 2, 712, 713, 12, 3, 2, 2, 713, 714, 7, 71, 2, 2, 714, 716, 5, 146, 74, 2, 715, 712, 3, 2, 2, 2, 716, 719, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 149, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 720, 721, 8, 76, 1, 2, 721, 722, 5, 148, 75, 2, 722, 728, 3, 2, 2, 2, 723, 724, 12, 3, 2, 2, 724, 725, 7, 73, 2, 2, 725, 727, 5, 148, 75, 2, 726, 723, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 151, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 8, 77, 1, 2, 732, 733, 5, 150, 76, 2, 733, 739, 3, 2, 2, 2, 734, 735, 12, 3, 2, 2, 735, 736, 7, 72, 2, 2, 736, 738, 5, 150, 76, 2, 737, 734, 3, 2, 2, 2, 738, 741, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 153, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 742, 743, 8, 78, 1, 2, 743, 744, 5, 152, 77, 2, 744, 750, 3, 2, 2, 2, 745, 746, 12, 3, 2, 2, 746, 747, 7, 56, 2, 2, 747, 749, 5, 152, 77, 2, 748, 745, 3, 2, 2, 2, 749, 752, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 155, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 753, 754, 8, 79, 1, 2, 754, 755, 5, 154, 78, 2, 755, 761, 3, 2, 2, 2, 756, 757, 12, 3, 2, 2, 757, 758, 7, 57, 2, 2, 758, 760, 5, 154, 78, 2, 759, 756, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 157, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 764, 772, 5, 156, 79, 2, 765, 766, 5, 156, 79, 2, 766, 767, 7, 39, 2, 2, 767, 768, 5, 158, 80, 2, 768, 769, 7, 40, 2, 2, 769, 770, 5, 158, 80, 2, 770, 772, 3, 2, 2, 2, 771, 764, 3, 2, 2, 2, 771, 765, 3, 2, 2, 2, 772, 159, 3, 2, 2, 2, 773, 779, 5, 158, 80, 2, 774, 775, 5, 108, 55, 2, 775, 776, 5, 162, 82, 2, 776, 777, 5, 160, 81, 2, 777, 779, 3, 2, 2, 2, 778, 773, 3, 2, 2, 2, 778, 774, 3, 2, 2, 2, 779, 161, 3, 2, 2, 2, 780, 781, 9, 15, 2, 2, 781, 163, 3, 2, 2, 2, 782, 787, 5, 160, 81, 2, 783, 784, 7, 37, 2, 2, 784, 786, 5, 160, 81, 2, 785, 783, 3, 2, 2, 2, 786, 789, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 165, 3, 2, 2, 2, 789, 787, 3, 2, 2, 2, 790, 794, 5, 168, 85, 2, 791, 794, 5, 170, 86, 2, 792, 794, 5, 172, 87, 2, 793, 790, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 793, 792, 3, 2, 2, 2, 794, 167, 3, 2, 2, 2, 795, 796, 5, 174, 88, 2, 796, 169, 3, 2, 2, 2, 797, 798, 5, 174, 88, 2, 798, 807, 7, 67, 2, 2, 799, 804, 5, 166, 84, 2, 800, 801, 7, 37, 2, 2, 801, 803, 5, 166, 84, 2, 802, 800, 3, 2, 2, 2, 803, 806, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 805, 3, 2, 2, 2, 805, 808, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 807, 799, 3, 2, 2, 2, 807, 808, 3, 2, 2, 2, 808, 809, 3, 2, 2, 2, 809, 810, 7, 69, 2, 2, 810, 171, 3, 2, 2, 2, 811, 812, 7, 33, 2, 2, 812, 813, 7, 41, 2, 2, 813, 814, 5, 174, 88, 2, 814, 815, 7, 42, 2, 2, 815, 173, 3, 2, 2, 2, 816, 817, 9, 16, 2, 2, 817, 175, 3, 2, 2, 2, 818, 819, 5, 160, 81, 2, 819, 820, 7, 32, 2, 2, 820, 821, 5, 166, 84, 2, 821, 177, 3, 2, 2, 2, 77, 179, 186, 193, 198, 206, 218, 230, 236, 243, 256, 263, 273, 285, 287, 295, 304, 310, 315, 326, 331, 342, 351, 361, 374, 379, 385, 389, 395, 401, 425, 439, 443, 451, 465, 473, 481, 485, 490, 493, 498, 501, 511, 514, 517, 527, 530, 533, 549, 558, 563, 580, 584, 586, 594, 608, 614, 621, 632, 649, 659, 670, 682, 695, 706, 717, 728, 739, 750, 761, 771, 778, 787, 793, 804, 807] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 91, 830, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 3, 2, 5, 2, 180, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 185, 10, 3, 13, 3, 14, 3, 186, 3, 4, 3, 4, 3, 5, 6, 5, 192, 10, 5, 13, 5, 14, 5, 193, 3, 6, 3, 6, 3, 6, 5, 6, 199, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 207, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 219, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 231, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 237, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 242, 10, 15, 12, 15, 14, 15, 245, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 255, 10, 17, 12, 17, 14, 17, 258, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 264, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 274, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 286, 10, 21, 12, 21, 14, 21, 289, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 296, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 305, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 311, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 316, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 327, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 332, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 343, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 352, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 360, 10, 31, 12, 31, 14, 31, 363, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 375, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 380, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 386, 10, 34, 3, 34, 3, 34, 5, 34, 390, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 396, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 402, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 426, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 440, 10, 39, 3, 40, 3, 40, 5, 40, 444, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 452, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 466, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 472, 10, 47, 12, 47, 14, 47, 475, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 480, 10, 47, 12, 47, 14, 47, 483, 11, 47, 3, 47, 5, 47, 486, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 491, 10, 48, 3, 48, 5, 48, 494, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 499, 10, 49, 3, 49, 5, 49, 502, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 510, 10, 51, 12, 51, 14, 51, 513, 11, 51, 5, 51, 515, 10, 51, 3, 51, 5, 51, 518, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 526, 10, 52, 12, 52, 14, 52, 529, 11, 52, 5, 52, 531, 10, 52, 3, 52, 5, 52, 534, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 550, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 559, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 564, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 581, 10, 55, 3, 55, 3, 55, 7, 55, 585, 10, 55, 12, 55, 14, 55, 588, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 593, 10, 56, 12, 56, 14, 56, 596, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 609, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 615, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 622, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 633, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 650, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 658, 10, 69, 12, 69, 14, 69, 661, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 669, 10, 70, 12, 70, 14, 70, 672, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 681, 10, 71, 12, 71, 14, 71, 684, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 694, 10, 73, 12, 73, 14, 73, 697, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 705, 10, 74, 12, 74, 14, 74, 708, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 716, 10, 75, 12, 75, 14, 75, 719, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 727, 10, 76, 12, 76, 14, 76, 730, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 738, 10, 77, 12, 77, 14, 77, 741, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 749, 10, 78, 12, 78, 14, 78, 752, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 760, 10, 79, 12, 79, 14, 79, 763, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 771, 10, 80, 12, 80, 14, 80, 774, 11, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 783, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 790, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 7, 84, 797, 10, 84, 12, 84, 14, 84, 800, 11, 84, 3, 85, 3, 85, 3, 85, 5, 85, 805, 10, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 7, 87, 814, 10, 87, 12, 87, 14, 87, 817, 11, 87, 5, 87, 819, 10, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 2, 2, 14, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 158, 90, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 2, 17, 3, 2, 7, 8, 3, 2, 14, 15, 3, 2, 30, 31, 3, 2, 81, 82, 4, 2, 80, 80, 83, 83, 3, 2, 34, 36, 4, 2, 49, 49, 51, 51, 6, 2, 48, 48, 50, 50, 58, 58, 74, 74, 3, 2, 52, 55, 4, 2, 48, 48, 50, 50, 3, 2, 75, 77, 3, 2, 67, 70, 3, 2, 65, 66, 3, 2, 59, 64, 4, 2, 34, 36, 79, 79, 2, 840, 2, 179, 3, 2, 2, 2, 4, 184, 3, 2, 2, 2, 6, 188, 3, 2, 2, 2, 8, 191, 3, 2, 2, 2, 10, 198, 3, 2, 2, 2, 12, 206, 3, 2, 2, 2, 14, 208, 3, 2, 2, 2, 16, 211, 3, 2, 2, 2, 18, 213, 3, 2, 2, 2, 20, 220, 3, 2, 2, 2, 22, 222, 3, 2, 2, 2, 24, 224, 3, 2, 2, 2, 26, 226, 3, 2, 2, 2, 28, 238, 3, 2, 2, 2, 30, 246, 3, 2, 2, 2, 32, 250, 3, 2, 2, 2, 34, 263, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 280, 3, 2, 2, 2, 42, 295, 3, 2, 2, 2, 44, 297, 3, 2, 2, 2, 46, 301, 3, 2, 2, 2, 48, 312, 3, 2, 2, 2, 50, 326, 3, 2, 2, 2, 52, 328, 3, 2, 2, 2, 54, 335, 3, 2, 2, 2, 56, 342, 3, 2, 2, 2, 58, 344, 3, 2, 2, 2, 60, 353, 3, 2, 2, 2, 62, 374, 3, 2, 2, 2, 64, 379, 3, 2, 2, 2, 66, 381, 3, 2, 2, 2, 68, 406, 3, 2, 2, 2, 70, 412, 3, 2, 2, 2, 72, 420, 3, 2, 2, 2, 74, 423, 3, 2, 2, 2, 76, 439, 3, 2, 2, 2, 78, 441, 3, 2, 2, 2, 80, 453, 3, 2, 2, 2, 82, 457, 3, 2, 2, 2, 84, 459, 3, 2, 2, 2, 86, 461, 3, 2, 2, 2, 88, 465, 3, 2, 2, 2, 90, 467, 3, 2, 2, 2, 92, 485, 3, 2, 2, 2, 94, 493, 3, 2, 2, 2, 96, 501, 3, 2, 2, 2, 98, 503, 3, 2, 2, 2, 100, 505, 3, 2, 2, 2, 102, 521, 3, 2, 2, 2, 104, 537, 3, 2, 2, 2, 106, 541, 3, 2, 2, 2, 108, 563, 3, 2, 2, 2, 110, 589, 3, 2, 2, 2, 112, 597, 3, 2, 2, 2, 114, 600, 3, 2, 2, 2, 116, 604, 3, 2, 2, 2, 118, 621, 3, 2, 2, 2, 120, 623, 3, 2, 2, 2, 122, 626, 3, 2, 2, 2, 124, 632, 3, 2, 2, 2, 126, 634, 3, 2, 2, 2, 128, 637, 3, 2, 2, 2, 130, 640, 3, 2, 2, 2, 132, 642, 3, 2, 2, 2, 134, 649, 3, 2, 2, 2, 136, 651, 3, 2, 2, 2, 138, 662, 3, 2, 2, 2, 140, 673, 3, 2, 2, 2, 142, 685, 3, 2, 2, 2, 144, 687, 3, 2, 2, 2, 146, 698, 3, 2, 2, 2, 148, 709, 3, 2, 2, 2, 150, 720, 3, 2, 2, 2, 152, 731, 3, 2, 2, 2, 154, 742, 3, 2, 2, 2, 156, 753, 3, 2, 2, 2, 158, 764, 3, 2, 2, 2, 160, 782, 3, 2, 2, 2, 162, 789, 3, 2, 2, 2, 164, 791, 3, 2, 2, 2, 166, 793, 3, 2, 2, 2, 168, 804, 3, 2, 2, 2, 170, 806, 3, 2, 2, 2, 172, 808, 3, 2, 2, 2, 174, 822, 3, 2, 2, 2, 176, 827, 3, 2, 2, 2, 178, 180, 5, 4, 3, 2, 179, 178, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 182, 7, 2, 2, 3, 182, 3, 3, 2, 2, 2, 183, 185, 5, 6, 4, 2, 184, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 5, 3, 2, 2, 2, 188, 189, 5, 8, 5, 2, 189, 7, 3, 2, 2, 2, 190, 192, 5, 10, 6, 2, 191, 190, 3, 2, 2, 2, 192, 193, 3, 2, 2, 2, 193, 191, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 9, 3, 2, 2, 2, 195, 199, 5, 50, 26, 2, 196, 199, 5, 12, 7, 2, 197, 199, 7, 38, 2, 2, 198, 195, 3, 2, 2, 2, 198, 196, 3, 2, 2, 2, 198, 197, 3, 2, 2, 2, 199, 11, 3, 2, 2, 2, 200, 201, 5, 14, 8, 2, 201, 202, 7, 38, 2, 2, 202, 207, 3, 2, 2, 2, 203, 207, 5, 26, 14, 2, 204, 207, 5, 32, 17, 2, 205, 207, 5, 40, 21, 2, 206, 200, 3, 2, 2, 2, 206, 203, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 13, 3, 2, 2, 2, 208, 209, 5, 16, 9, 2, 209, 210, 5, 18, 10, 2, 210, 15, 3, 2, 2, 2, 211, 212, 9, 2, 2, 2, 212, 17, 3, 2, 2, 2, 213, 214, 5, 22, 12, 2, 214, 215, 7, 40, 2, 2, 215, 218, 5, 168, 85, 2, 216, 217, 7, 59, 2, 2, 217, 219, 5, 20, 11, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 19, 3, 2, 2, 2, 220, 221, 5, 162, 82, 2, 221, 21, 3, 2, 2, 2, 222, 223, 5, 24, 13, 2, 223, 23, 3, 2, 2, 2, 224, 225, 7, 79, 2, 2, 225, 25, 3, 2, 2, 2, 226, 227, 7, 22, 2, 2, 227, 228, 5, 22, 12, 2, 228, 230, 7, 41, 2, 2, 229, 231, 5, 28, 15, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 7, 42, 2, 2, 233, 234, 7, 25, 2, 2, 234, 236, 5, 168, 85, 2, 235, 237, 5, 52, 27, 2, 236, 235, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 27, 3, 2, 2, 2, 238, 243, 5, 30, 16, 2, 239, 240, 7, 37, 2, 2, 240, 242, 5, 30, 16, 2, 241, 239, 3, 2, 2, 2, 242, 245, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 29, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 246, 247, 5, 22, 12, 2, 247, 248, 7, 40, 2, 2, 248, 249, 5, 168, 85, 2, 249, 31, 3, 2, 2, 2, 250, 251, 7, 27, 2, 2, 251, 252, 5, 22, 12, 2, 252, 256, 7, 46, 2, 2, 253, 255, 5, 34, 18, 2, 254, 253, 3, 2, 2, 2, 255, 258, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 259, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 259, 260, 7, 47, 2, 2, 260, 33, 3, 2, 2, 2, 261, 264, 5, 36, 19, 2, 262, 264, 5, 38, 20, 2, 263, 261, 3, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 35, 3, 2, 2, 2, 265, 266, 5, 22, 12, 2, 266, 267, 7, 40, 2, 2, 267, 268, 5, 168, 85, 2, 268, 269, 7, 38, 2, 2, 269, 37, 3, 2, 2, 2, 270, 271, 5, 22, 12, 2, 271, 273, 7, 41, 2, 2, 272, 274, 5, 28, 15, 2, 273, 272, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 7, 42, 2, 2, 276, 277, 7, 40, 2, 2, 277, 278, 5, 168, 85, 2, 278, 279, 7, 38, 2, 2, 279, 39, 3, 2, 2, 2, 280, 281, 7, 26, 2, 2, 281, 282, 5, 22, 12, 2, 282, 287, 7, 46, 2, 2, 283, 286, 5, 42, 22, 2, 284, 286, 7, 38, 2, 2, 285, 283, 3, 2, 2, 2, 285, 284, 3, 2, 2, 2, 286, 289, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 290, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 290, 291, 7, 47, 2, 2, 291, 41, 3, 2, 2, 2, 292, 296, 5, 44, 23, 2, 293, 296, 5, 46, 24, 2, 294, 296, 5, 48, 25, 2, 295, 292, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 43, 3, 2, 2, 2, 297, 298, 5, 22, 12, 2, 298, 299, 7, 40, 2, 2, 299, 300, 5, 168, 85, 2, 300, 45, 3, 2, 2, 2, 301, 302, 5, 22, 12, 2, 302, 304, 7, 41, 2, 2, 303, 305, 5, 28, 15, 2, 304, 303, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 307, 7, 42, 2, 2, 307, 308, 7, 40, 2, 2, 308, 310, 5, 168, 85, 2, 309, 311, 5, 52, 27, 2, 310, 309, 3, 2, 2, 2, 310, 311, 3, 2, 2, 2, 311, 47, 3, 2, 2, 2, 312, 313, 7, 28, 2, 2, 313, 315, 7, 41, 2, 2, 314, 316, 5, 28, 15, 2, 315, 314, 3, 2, 2, 2, 315, 316, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 318, 7, 42, 2, 2, 318, 319, 5, 52, 27, 2, 319, 49, 3, 2, 2, 2, 320, 327, 5, 54, 28, 2, 321, 327, 5, 56, 29, 2, 322, 327, 5, 64, 33, 2, 323, 327, 5, 72, 37, 2, 324, 327, 5, 74, 38, 2, 325, 327, 5, 52, 27, 2, 326, 320, 3, 2, 2, 2, 326, 321, 3, 2, 2, 2, 326, 322, 3, 2, 2, 2, 326, 323, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 326, 325, 3, 2, 2, 2, 327, 51, 3, 2, 2, 2, 328, 329, 6, 27, 2, 2, 329, 331, 7, 46, 2, 2, 330, 332, 5, 8, 5, 2, 331, 330, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 333, 3, 2, 2, 2, 333, 334, 7, 47, 2, 2, 334, 53, 3, 2, 2, 2, 335, 336, 8, 28, 1, 2, 336, 337, 5, 166, 84, 2, 337, 338, 7, 38, 2, 2, 338, 339, 8, 28, 1, 2, 339, 55, 3, 2, 2, 2, 340, 343, 5, 58, 30, 2, 341, 343, 5, 60, 31, 2, 342, 340, 3, 2, 2, 2, 342, 341, 3, 2, 2, 2, 343, 57, 3, 2, 2, 2, 344, 345, 7, 18, 2, 2, 345, 346, 7, 41, 2, 2, 346, 347, 5, 166, 84, 2, 347, 348, 7, 42, 2, 2, 348, 351, 5, 50, 26, 2, 349, 350, 7, 19, 2, 2, 350, 352, 5, 50, 26, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 59, 3, 2, 2, 2, 353, 354, 7, 11, 2, 2, 354, 355, 7, 41, 2, 2, 355, 356, 5, 166, 84, 2, 356, 357, 7, 42, 2, 2, 357, 361, 7, 46, 2, 2, 358, 360, 5, 62, 32, 2, 359, 358, 3, 2, 2, 2, 360, 363, 3, 2, 2, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 364, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 364, 365, 7, 47, 2, 2, 365, 61, 3, 2, 2, 2, 366, 367, 7, 12, 2, 2, 367, 368, 5, 166, 84, 2, 368, 369, 7, 40, 2, 2, 369, 370, 5, 50, 26, 2, 370, 375, 3, 2, 2, 2, 371, 372, 7, 13, 2, 2, 372, 373, 7, 40, 2, 2, 373, 375, 5, 50, 26, 2, 374, 366, 3, 2, 2, 2, 374, 371, 3, 2, 2, 2, 375, 63, 3, 2, 2, 2, 376, 380, 5, 66, 34, 2, 377, 380, 5, 68, 35, 2, 378, 380, 5, 70, 36, 2, 379, 376, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 378, 3, 2, 2, 2, 380, 65, 3, 2, 2, 2, 381, 382, 7, 20, 2, 2, 382, 389, 7, 41, 2, 2, 383, 386, 5, 14, 8, 2, 384, 386, 5, 166, 84, 2, 385, 383, 3, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 388, 8, 34, 1, 2, 388, 390, 3, 2, 2, 2, 389, 385, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 395, 7, 38, 2, 2, 392, 393, 5, 166, 84, 2, 393, 394, 8, 34, 1, 2, 394, 396, 3, 2, 2, 2, 395, 392, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 401, 7, 38, 2, 2, 398, 399, 5, 166, 84, 2, 399, 400, 8, 34, 1, 2, 400, 402, 3, 2, 2, 2, 401, 398, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 3, 2, 2, 2, 403, 404, 7, 42, 2, 2, 404, 405, 5, 50, 26, 2, 405, 67, 3, 2, 2, 2, 406, 407, 7, 17, 2, 2, 407, 408, 7, 41, 2, 2, 408, 409, 5, 166, 84, 2, 409, 410, 7, 42, 2, 2, 410, 411, 5, 50, 26, 2, 411, 69, 3, 2, 2, 2, 412, 413, 7, 16, 2, 2, 413, 414, 5, 50, 26, 2, 414, 415, 7, 17, 2, 2, 415, 416, 7, 41, 2, 2, 416, 417, 5, 166, 84, 2, 417, 418, 7, 42, 2, 2, 418, 419, 7, 38, 2, 2, 419, 71, 3, 2, 2, 2, 420, 421, 9, 3, 2, 2, 421, 422, 7, 38, 2, 2, 422, 73, 3, 2, 2, 2, 423, 425, 7, 23, 2, 2, 424, 426, 5, 166, 84, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 38, 2, 2, 428, 75, 3, 2, 2, 2, 429, 440, 5, 80, 41, 2, 430, 440, 5, 78, 40, 2, 431, 440, 5, 100, 51, 2, 432, 440, 5, 102, 52, 2, 433, 440, 5, 82, 42, 2, 434, 440, 5, 84, 43, 2, 435, 440, 5, 90, 46, 2, 436, 440, 5, 92, 47, 2, 437, 440, 5, 98, 50, 2, 438, 440, 5, 106, 54, 2, 439, 429, 3, 2, 2, 2, 439, 430, 3, 2, 2, 2, 439, 431, 3, 2, 2, 2, 439, 432, 3, 2, 2, 2, 439, 433, 3, 2, 2, 2, 439, 434, 3, 2, 2, 2, 439, 435, 3, 2, 2, 2, 439, 436, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 438, 3, 2, 2, 2, 440, 77, 3, 2, 2, 2, 441, 443, 7, 41, 2, 2, 442, 444, 5, 28, 15, 2, 443, 442, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 446, 7, 42, 2, 2, 446, 447, 7, 40, 2, 2, 447, 448, 5, 168, 85, 2, 448, 451, 7, 25, 2, 2, 449, 452, 5, 166, 84, 2, 450, 452, 5, 52, 27, 2, 451, 449, 3, 2, 2, 2, 451, 450, 3, 2, 2, 2, 452, 79, 3, 2, 2, 2, 453, 454, 7, 41, 2, 2, 454, 455, 5, 166, 84, 2, 455, 456, 7, 42, 2, 2, 456, 81, 3, 2, 2, 2, 457, 458, 9, 4, 2, 2, 458, 83, 3, 2, 2, 2, 459, 460, 5, 86, 44, 2, 460, 85, 3, 2, 2, 2, 461, 462, 7, 79, 2, 2, 462, 87, 3, 2, 2, 2, 463, 466, 5, 86, 44, 2, 464, 466, 5, 90, 46, 2, 465, 463, 3, 2, 2, 2, 465, 464, 3, 2, 2, 2, 466, 89, 3, 2, 2, 2, 467, 468, 9, 5, 2, 2, 468, 91, 3, 2, 2, 2, 469, 473, 7, 86, 2, 2, 470, 472, 5, 94, 48, 2, 471, 470, 3, 2, 2, 2, 472, 475, 3, 2, 2, 2, 473, 471, 3, 2, 2, 2, 473, 474, 3, 2, 2, 2, 474, 476, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 476, 486, 7, 88, 2, 2, 477, 481, 7, 87, 2, 2, 478, 480, 5, 96, 49, 2, 479, 478, 3, 2, 2, 2, 480, 483, 3, 2, 2, 2, 481, 479, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 484, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 484, 486, 7, 90, 2, 2, 485, 469, 3, 2, 2, 2, 485, 477, 3, 2, 2, 2, 486, 93, 3, 2, 2, 2, 487, 494, 7, 89, 2, 2, 488, 490, 7, 3, 2, 2, 489, 491, 5, 166, 84, 2, 490, 489, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 494, 7, 45, 2, 2, 493, 487, 3, 2, 2, 2, 493, 488, 3, 2, 2, 2, 494, 95, 3, 2, 2, 2, 495, 502, 7, 91, 2, 2, 496, 498, 7, 3, 2, 2, 497, 499, 5, 166, 84, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 7, 45, 2, 2, 501, 495, 3, 2, 2, 2, 501, 496, 3, 2, 2, 2, 502, 97, 3, 2, 2, 2, 503, 504, 9, 6, 2, 2, 504, 99, 3, 2, 2, 2, 505, 514, 7, 43, 2, 2, 506, 511, 5, 166, 84, 2, 507, 508, 7, 37, 2, 2, 508, 510, 5, 166, 84, 2, 509, 507, 3, 2, 2, 2, 510, 513, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 514, 506, 3, 2, 2, 2, 514, 515, 3, 2, 2, 2, 515, 517, 3, 2, 2, 2, 516, 518, 7, 37, 2, 2, 517, 516, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 7, 44, 2, 2, 520, 101, 3, 2, 2, 2, 521, 530, 7, 46, 2, 2, 522, 527, 5, 104, 53, 2, 523, 524, 7, 37, 2, 2, 524, 526, 5, 104, 53, 2, 525, 523, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 527, 528, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 530, 522, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 3, 2, 2, 2, 532, 534, 7, 37, 2, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 536, 7, 47, 2, 2, 536, 103, 3, 2, 2, 2, 537, 538, 5, 88, 45, 2, 538, 539, 7, 40, 2, 2, 539, 540, 5, 166, 84, 2, 540, 105, 3, 2, 2, 2, 541, 542, 9, 7, 2, 2, 542, 107, 3, 2, 2, 2, 543, 544, 8, 55, 1, 2, 544, 564, 5, 76, 39, 2, 545, 546, 7, 24, 2, 2, 546, 547, 5, 108, 55, 2, 547, 549, 7, 41, 2, 2, 548, 550, 5, 110, 56, 2, 549, 548, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 551, 3, 2, 2, 2, 551, 552, 7, 42, 2, 2, 552, 553, 8, 55, 1, 2, 553, 564, 3, 2, 2, 2, 554, 555, 7, 29, 2, 2, 555, 556, 5, 168, 85, 2, 556, 558, 7, 41, 2, 2, 557, 559, 5, 110, 56, 2, 558, 557, 3, 2, 2, 2, 558, 559, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 7, 42, 2, 2, 561, 562, 8, 55, 1, 2, 562, 564, 3, 2, 2, 2, 563, 543, 3, 2, 2, 2, 563, 545, 3, 2, 2, 2, 563, 554, 3, 2, 2, 2, 564, 586, 3, 2, 2, 2, 565, 566, 12, 8, 2, 2, 566, 567, 5, 112, 57, 2, 567, 568, 8, 55, 1, 2, 568, 585, 3, 2, 2, 2, 569, 570, 12, 7, 2, 2, 570, 571, 5, 114, 58, 2, 571, 572, 8, 55, 1, 2, 572, 585, 3, 2, 2, 2, 573, 574, 12, 6, 2, 2, 574, 575, 5, 116, 59, 2, 575, 576, 8, 55, 1, 2, 576, 585, 3, 2, 2, 2, 577, 578, 12, 5, 2, 2, 578, 580, 7, 41, 2, 2, 579, 581, 5, 110, 56, 2, 580, 579, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 42, 2, 2, 583, 585, 8, 55, 1, 2, 584, 565, 3, 2, 2, 2, 584, 569, 3, 2, 2, 2, 584, 573, 3, 2, 2, 2, 584, 577, 3, 2, 2, 2, 585, 588, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 109, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 589, 594, 5, 162, 82, 2, 590, 591, 7, 37, 2, 2, 591, 593, 5, 162, 82, 2, 592, 590, 3, 2, 2, 2, 593, 596, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 111, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 597, 598, 7, 78, 2, 2, 598, 599, 5, 86, 44, 2, 599, 113, 3, 2, 2, 2, 600, 601, 7, 43, 2, 2, 601, 602, 5, 166, 84, 2, 602, 603, 7, 44, 2, 2, 603, 115, 3, 2, 2, 2, 604, 608, 7, 43, 2, 2, 605, 606, 5, 166, 84, 2, 606, 607, 8, 59, 1, 2, 607, 609, 3, 2, 2, 2, 608, 605, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 614, 7, 40, 2, 2, 611, 612, 5, 166, 84, 2, 612, 613, 8, 59, 1, 2, 613, 615, 3, 2, 2, 2, 614, 611, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 7, 44, 2, 2, 617, 117, 3, 2, 2, 2, 618, 622, 5, 108, 55, 2, 619, 622, 5, 120, 61, 2, 620, 622, 5, 122, 62, 2, 621, 618, 3, 2, 2, 2, 621, 619, 3, 2, 2, 2, 621, 620, 3, 2, 2, 2, 622, 119, 3, 2, 2, 2, 623, 624, 5, 108, 55, 2, 624, 625, 5, 130, 66, 2, 625, 121, 3, 2, 2, 2, 626, 627, 7, 33, 2, 2, 627, 628, 5, 162, 82, 2, 628, 123, 3, 2, 2, 2, 629, 633, 5, 118, 60, 2, 630, 633, 5, 126, 64, 2, 631, 633, 5, 128, 65, 2, 632, 629, 3, 2, 2, 2, 632, 630, 3, 2, 2, 2, 632, 631, 3, 2, 2, 2, 633, 125, 3, 2, 2, 2, 634, 635, 5, 130, 66, 2, 635, 636, 5, 118, 60, 2, 636, 127, 3, 2, 2, 2, 637, 638, 5, 132, 67, 2, 638, 639, 5, 118, 60, 2, 639, 129, 3, 2, 2, 2, 640, 641, 9, 8, 2, 2, 641, 131, 3, 2, 2, 2, 642, 643, 9, 9, 2, 2, 643, 133, 3, 2, 2, 2, 644, 650, 5, 124, 63, 2, 645, 646, 5, 124, 63, 2, 646, 647, 7, 9, 2, 2, 647, 648, 5, 168, 85, 2, 648, 650, 3, 2, 2, 2, 649, 644, 3, 2, 2, 2, 649, 645, 3, 2, 2, 2, 650, 135, 3, 2, 2, 2, 651, 652, 8, 69, 1, 2, 652, 653, 5, 134, 68, 2, 653, 659, 3, 2, 2, 2, 654, 655, 12, 3, 2, 2, 655, 656, 9, 10, 2, 2, 656, 658, 5, 134, 68, 2, 657, 654, 3, 2, 2, 2, 658, 661, 3, 2, 2, 2, 659, 657, 3, 2, 2, 2, 659, 660, 3, 2, 2, 2, 660, 137, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 662, 663, 8, 70, 1, 2, 663, 664, 5, 136, 69, 2, 664, 670, 3, 2, 2, 2, 665, 666, 12, 3, 2, 2, 666, 667, 9, 11, 2, 2, 667, 669, 5, 136, 69, 2, 668, 665, 3, 2, 2, 2, 669, 672, 3, 2, 2, 2, 670, 668, 3, 2, 2, 2, 670, 671, 3, 2, 2, 2, 671, 139, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 673, 674, 8, 71, 1, 2, 674, 675, 5, 138, 70, 2, 675, 682, 3, 2, 2, 2, 676, 677, 12, 3, 2, 2, 677, 678, 5, 142, 72, 2, 678, 679, 5, 150, 76, 2, 679, 681, 3, 2, 2, 2, 680, 676, 3, 2, 2, 2, 681, 684, 3, 2, 2, 2, 682, 680, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 141, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 685, 686, 9, 12, 2, 2, 686, 143, 3, 2, 2, 2, 687, 688, 8, 73, 1, 2, 688, 689, 5, 140, 71, 2, 689, 695, 3, 2, 2, 2, 690, 691, 12, 3, 2, 2, 691, 692, 7, 32, 2, 2, 692, 694, 5, 140, 71, 2, 693, 690, 3, 2, 2, 2, 694, 697, 3, 2, 2, 2, 695, 693, 3, 2, 2, 2, 695, 696, 3, 2, 2, 2, 696, 145, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 698, 699, 8, 74, 1, 2, 699, 700, 5, 144, 73, 2, 700, 706, 3, 2, 2, 2, 701, 702, 12, 3, 2, 2, 702, 703, 9, 13, 2, 2, 703, 705, 5, 144, 73, 2, 704, 701, 3, 2, 2, 2, 705, 708, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 706, 707, 3, 2, 2, 2, 707, 147, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 709, 710, 8, 75, 1, 2, 710, 711, 5, 146, 74, 2, 711, 717, 3, 2, 2, 2, 712, 713, 12, 3, 2, 2, 713, 714, 9, 14, 2, 2, 714, 716, 5, 146, 74, 2, 715, 712, 3, 2, 2, 2, 716, 719, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 149, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 720, 721, 8, 76, 1, 2, 721, 722, 5, 148, 75, 2, 722, 728, 3, 2, 2, 2, 723, 724, 12, 3, 2, 2, 724, 725, 7, 71, 2, 2, 725, 727, 5, 148, 75, 2, 726, 723, 3, 2, 2, 2, 727, 730, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 151, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 731, 732, 8, 77, 1, 2, 732, 733, 5, 150, 76, 2, 733, 739, 3, 2, 2, 2, 734, 735, 12, 3, 2, 2, 735, 736, 7, 73, 2, 2, 736, 738, 5, 150, 76, 2, 737, 734, 3, 2, 2, 2, 738, 741, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 153, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 742, 743, 8, 78, 1, 2, 743, 744, 5, 152, 77, 2, 744, 750, 3, 2, 2, 2, 745, 746, 12, 3, 2, 2, 746, 747, 7, 72, 2, 2, 747, 749, 5, 152, 77, 2, 748, 745, 3, 2, 2, 2, 749, 752, 3, 2, 2, 2, 750, 748, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 155, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 753, 754, 8, 79, 1, 2, 754, 755, 5, 154, 78, 2, 755, 761, 3, 2, 2, 2, 756, 757, 12, 3, 2, 2, 757, 758, 7, 56, 2, 2, 758, 760, 5, 154, 78, 2, 759, 756, 3, 2, 2, 2, 760, 763, 3, 2, 2, 2, 761, 759, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 157, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 764, 765, 8, 80, 1, 2, 765, 766, 5, 156, 79, 2, 766, 772, 3, 2, 2, 2, 767, 768, 12, 3, 2, 2, 768, 769, 7, 57, 2, 2, 769, 771, 5, 156, 79, 2, 770, 767, 3, 2, 2, 2, 771, 774, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 772, 773, 3, 2, 2, 2, 773, 159, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 775, 783, 5, 158, 80, 2, 776, 777, 5, 158, 80, 2, 777, 778, 7, 39, 2, 2, 778, 779, 5, 160, 81, 2, 779, 780, 7, 40, 2, 2, 780, 781, 5, 160, 81, 2, 781, 783, 3, 2, 2, 2, 782, 775, 3, 2, 2, 2, 782, 776, 3, 2, 2, 2, 783, 161, 3, 2, 2, 2, 784, 790, 5, 160, 81, 2, 785, 786, 5, 108, 55, 2, 786, 787, 5, 164, 83, 2, 787, 788, 5, 162, 82, 2, 788, 790, 3, 2, 2, 2, 789, 784, 3, 2, 2, 2, 789, 785, 3, 2, 2, 2, 790, 163, 3, 2, 2, 2, 791, 792, 9, 15, 2, 2, 792, 165, 3, 2, 2, 2, 793, 798, 5, 162, 82, 2, 794, 795, 7, 37, 2, 2, 795, 797, 5, 162, 82, 2, 796, 794, 3, 2, 2, 2, 797, 800, 3, 2, 2, 2, 798, 796, 3, 2, 2, 2, 798, 799, 3, 2, 2, 2, 799, 167, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 801, 805, 5, 170, 86, 2, 802, 805, 5, 172, 87, 2, 803, 805, 5, 174, 88, 2, 804, 801, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 804, 803, 3, 2, 2, 2, 805, 169, 3, 2, 2, 2, 806, 807, 5, 176, 89, 2, 807, 171, 3, 2, 2, 2, 808, 809, 5, 176, 89, 2, 809, 818, 7, 67, 2, 2, 810, 815, 5, 168, 85, 2, 811, 812, 7, 37, 2, 2, 812, 814, 5, 168, 85, 2, 813, 811, 3, 2, 2, 2, 814, 817, 3, 2, 2, 2, 815, 813, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 819, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 818, 810, 3, 2, 2, 2, 818, 819, 3, 2, 2, 2, 819, 820, 3, 2, 2, 2, 820, 821, 7, 69, 2, 2, 821, 173, 3, 2, 2, 2, 822, 823, 7, 33, 2, 2, 823, 824, 7, 41, 2, 2, 824, 825, 5, 176, 89, 2, 825, 826, 7, 42, 2, 2, 826, 175, 3, 2, 2, 2, 827, 828, 9, 16, 2, 2, 828, 177, 3, 2, 2, 2, 78, 179, 186, 193, 198, 206, 218, 230, 236, 243, 256, 263, 273, 285, 287, 295, 304, 310, 315, 326, 331, 342, 351, 361, 374, 379, 385, 389, 395, 401, 425, 439, 443, 451, 465, 473, 481, 485, 490, 493, 498, 501, 511, 514, 517, 527, 530, 533, 549, 558, 563, 580, 584, 586, 594, 608, 614, 621, 632, 649, 659, 670, 682, 695, 706, 717, 728, 739, 750, 761, 772, 782, 789, 798, 804, 815, 818] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index f232e19de..f0af523f2 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -191,23 +191,23 @@ export class KipperParser extends KipperParserBase { public static readonly RULE_additiveExpression = 68; public static readonly RULE_bitwiseShiftExpression = 69; public static readonly RULE_bitwiseShiftOperators = 70; - public static readonly RULE_relationalExpression = 71; - public static readonly RULE_equalityExpression = 72; - public static readonly RULE_bitwiseAndExpression = 73; - public static readonly RULE_bitwiseXorExpression = 74; - public static readonly RULE_bitwiseOrExpression = 75; - public static readonly RULE_logicalAndExpression = 76; - public static readonly RULE_logicalOrExpression = 77; - public static readonly RULE_conditionalExpression = 78; - public static readonly RULE_assignmentExpression = 79; - public static readonly RULE_assignmentOperator = 80; - public static readonly RULE_expression = 81; - public static readonly RULE_typeSpecifierExpression = 82; - public static readonly RULE_identifierTypeSpecifierExpression = 83; - public static readonly RULE_genericTypeSpecifierExpression = 84; - public static readonly RULE_typeofTypeSpecifierExpression = 85; - public static readonly RULE_typeSpecifierIdentifier = 86; - public static readonly RULE_matchesExpression = 87; + public static readonly RULE_matchesExpression = 71; + public static readonly RULE_relationalExpression = 72; + public static readonly RULE_equalityExpression = 73; + public static readonly RULE_bitwiseAndExpression = 74; + public static readonly RULE_bitwiseXorExpression = 75; + public static readonly RULE_bitwiseOrExpression = 76; + public static readonly RULE_logicalAndExpression = 77; + public static readonly RULE_logicalOrExpression = 78; + public static readonly RULE_conditionalExpression = 79; + public static readonly RULE_assignmentExpression = 80; + public static readonly RULE_assignmentOperator = 81; + public static readonly RULE_expression = 82; + public static readonly RULE_typeSpecifierExpression = 83; + public static readonly RULE_identifierTypeSpecifierExpression = 84; + public static readonly RULE_genericTypeSpecifierExpression = 85; + public static readonly RULE_typeofTypeSpecifierExpression = 86; + public static readonly RULE_typeSpecifierIdentifier = 87; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "compilationUnit", @@ -281,6 +281,7 @@ export class KipperParser extends KipperParserBase { "additiveExpression", "bitwiseShiftExpression", "bitwiseShiftOperators", + "matchesExpression", "relationalExpression", "equalityExpression", "bitwiseAndExpression", @@ -297,7 +298,6 @@ export class KipperParser extends KipperParserBase { "genericTypeSpecifierExpression", "typeofTypeSpecifierExpression", "typeSpecifierIdentifier", - "matchesExpression", ]; private static readonly _LITERAL_NAMES: Array = [ @@ -4142,6 +4142,76 @@ export class KipperParser extends KipperParserBase { return _localctx; } + public matchesExpression(): MatchesExpressionContext; + public matchesExpression(_p: number): MatchesExpressionContext; + // @RuleVersion(0) + public matchesExpression(_p?: number): MatchesExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: MatchesExpressionContext = new MatchesExpressionContext(this._ctx, _parentState); + let _prevctx: MatchesExpressionContext = _localctx; + let _startState: number = 142; + this.enterRecursionRule(_localctx, 142, KipperParser.RULE_matchesExpression, _p); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + { + _localctx = new PassOnMatchesExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 686; + this.bitwiseShiftExpression(0); + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 693; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + { + _localctx = new ActualMatchesExpressionContext(new MatchesExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_matchesExpression); + this.state = 688; + if (!this.precpred(this._ctx, 1)) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 689; + this.match(KipperParser.Matches); + this.state = 690; + this.bitwiseShiftExpression(0); + } + } + } + this.state = 695; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + } + } + } catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + public relationalExpression(): RelationalExpressionContext; public relationalExpression(_p: number): RelationalExpressionContext; // @RuleVersion(0) @@ -4154,8 +4224,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: RelationalExpressionContext = new RelationalExpressionContext(this._ctx, _parentState); let _prevctx: RelationalExpressionContext = _localctx; - let _startState: number = 142; - this.enterRecursionRule(_localctx, 142, KipperParser.RULE_relationalExpression, _p); + let _startState: number = 144; + this.enterRecursionRule(_localctx, 144, KipperParser.RULE_relationalExpression, _p); let _la: number; try { let _alt: number; @@ -4166,13 +4236,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 686; - this.bitwiseShiftExpression(0); + this.state = 697; + this.matchesExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 693; + this.state = 704; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4185,11 +4255,11 @@ export class KipperParser extends KipperParserBase { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 688; + this.state = 699; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 689; + this.state = 700; _la = this._input.LA(1); if ( !( @@ -4211,14 +4281,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 690; - this.bitwiseShiftExpression(0); + this.state = 701; + this.matchesExpression(0); } } } - this.state = 695; + this.state = 706; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); } } } catch (re) { @@ -4247,8 +4317,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: EqualityExpressionContext = new EqualityExpressionContext(this._ctx, _parentState); let _prevctx: EqualityExpressionContext = _localctx; - let _startState: number = 144; - this.enterRecursionRule(_localctx, 144, KipperParser.RULE_equalityExpression, _p); + let _startState: number = 146; + this.enterRecursionRule(_localctx, 146, KipperParser.RULE_equalityExpression, _p); let _la: number; try { let _alt: number; @@ -4259,13 +4329,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 697; + this.state = 708; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 704; + this.state = 715; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4278,11 +4348,11 @@ export class KipperParser extends KipperParserBase { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 699; + this.state = 710; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 700; + this.state = 711; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -4294,14 +4364,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 701; + this.state = 712; this.relationalExpression(0); } } } - this.state = 706; + this.state = 717; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); } } } catch (re) { @@ -4330,8 +4400,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseAndExpressionContext = new BitwiseAndExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseAndExpressionContext = _localctx; - let _startState: number = 146; - this.enterRecursionRule(_localctx, 146, KipperParser.RULE_bitwiseAndExpression, _p); + let _startState: number = 148; + this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4341,13 +4411,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 708; + this.state = 719; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 715; + this.state = 726; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4360,20 +4430,20 @@ export class KipperParser extends KipperParserBase { new BitwiseAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 710; + this.state = 721; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 711; + this.state = 722; this.match(KipperParser.BitwiseAnd); - this.state = 712; + this.state = 723; this.equalityExpression(0); } } } - this.state = 717; + this.state = 728; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); } } } catch (re) { @@ -4402,8 +4472,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseXorExpressionContext = new BitwiseXorExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseXorExpressionContext = _localctx; - let _startState: number = 148; - this.enterRecursionRule(_localctx, 148, KipperParser.RULE_bitwiseXorExpression, _p); + let _startState: number = 150; + this.enterRecursionRule(_localctx, 150, KipperParser.RULE_bitwiseXorExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4413,13 +4483,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 719; + this.state = 730; this.bitwiseAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 726; + this.state = 737; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4432,20 +4502,20 @@ export class KipperParser extends KipperParserBase { new BitwiseXorExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 721; + this.state = 732; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 722; + this.state = 733; this.match(KipperParser.BitwiseXor); - this.state = 723; + this.state = 734; this.bitwiseAndExpression(0); } } } - this.state = 728; + this.state = 739; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); } } } catch (re) { @@ -4474,8 +4544,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: BitwiseOrExpressionContext = new BitwiseOrExpressionContext(this._ctx, _parentState); let _prevctx: BitwiseOrExpressionContext = _localctx; - let _startState: number = 150; - this.enterRecursionRule(_localctx, 150, KipperParser.RULE_bitwiseOrExpression, _p); + let _startState: number = 152; + this.enterRecursionRule(_localctx, 152, KipperParser.RULE_bitwiseOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4485,13 +4555,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 730; + this.state = 741; this.bitwiseXorExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 737; + this.state = 748; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4504,20 +4574,20 @@ export class KipperParser extends KipperParserBase { new BitwiseOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 732; + this.state = 743; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 733; + this.state = 744; this.match(KipperParser.BitwiseOr); - this.state = 734; + this.state = 745; this.bitwiseXorExpression(0); } } } - this.state = 739; + this.state = 750; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); } } } catch (re) { @@ -4546,8 +4616,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalAndExpressionContext = new LogicalAndExpressionContext(this._ctx, _parentState); let _prevctx: LogicalAndExpressionContext = _localctx; - let _startState: number = 152; - this.enterRecursionRule(_localctx, 152, KipperParser.RULE_logicalAndExpression, _p); + let _startState: number = 154; + this.enterRecursionRule(_localctx, 154, KipperParser.RULE_logicalAndExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4557,13 +4627,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 741; + this.state = 752; this.bitwiseOrExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 748; + this.state = 759; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4576,20 +4646,20 @@ export class KipperParser extends KipperParserBase { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 743; + this.state = 754; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 744; + this.state = 755; this.match(KipperParser.AndAnd); - this.state = 745; + this.state = 756; this.bitwiseOrExpression(0); } } } - this.state = 750; + this.state = 761; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); } } } catch (re) { @@ -4618,8 +4688,8 @@ export class KipperParser extends KipperParserBase { let _parentState: number = this.state; let _localctx: LogicalOrExpressionContext = new LogicalOrExpressionContext(this._ctx, _parentState); let _prevctx: LogicalOrExpressionContext = _localctx; - let _startState: number = 154; - this.enterRecursionRule(_localctx, 154, KipperParser.RULE_logicalOrExpression, _p); + let _startState: number = 156; + this.enterRecursionRule(_localctx, 156, KipperParser.RULE_logicalOrExpression, _p); try { let _alt: number; this.enterOuterAlt(_localctx, 1); @@ -4629,13 +4699,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 752; + this.state = 763; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 759; + this.state = 770; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4648,20 +4718,20 @@ export class KipperParser extends KipperParserBase { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 754; + this.state = 765; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 755; + this.state = 766; this.match(KipperParser.OrOr); - this.state = 756; + this.state = 767; this.logicalAndExpression(0); } } } - this.state = 761; + this.state = 772; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); } } } catch (re) { @@ -4680,16 +4750,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public conditionalExpression(): ConditionalExpressionContext { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 156, KipperParser.RULE_conditionalExpression); + this.enterRule(_localctx, 158, KipperParser.RULE_conditionalExpression); try { - this.state = 769; + this.state = 780; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 69, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 762; + this.state = 773; this.logicalOrExpression(0); } break; @@ -4698,15 +4768,15 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 763; + this.state = 774; this.logicalOrExpression(0); - this.state = 764; + this.state = 775; this.match(KipperParser.QuestionMark); - this.state = 765; + this.state = 776; this.conditionalExpression(); - this.state = 766; + this.state = 777; this.match(KipperParser.Colon); - this.state = 767; + this.state = 778; this.conditionalExpression(); } break; @@ -4727,16 +4797,16 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentExpression(): AssignmentExpressionContext { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 158, KipperParser.RULE_assignmentExpression); + this.enterRule(_localctx, 160, KipperParser.RULE_assignmentExpression); try { - this.state = 776; + this.state = 787; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 70, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 71, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 771; + this.state = 782; this.conditionalExpression(); } break; @@ -4745,11 +4815,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 772; + this.state = 783; this.computedPrimaryExpression(0); - this.state = 773; + this.state = 784; this.assignmentOperator(); - this.state = 774; + this.state = 785; this.assignmentExpression(); } break; @@ -4770,12 +4840,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public assignmentOperator(): AssignmentOperatorContext { let _localctx: AssignmentOperatorContext = new AssignmentOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 160, KipperParser.RULE_assignmentOperator); + this.enterRule(_localctx, 162, KipperParser.RULE_assignmentOperator); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 778; + this.state = 789; _la = this._input.LA(1); if ( !( @@ -4816,30 +4886,30 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public expression(): ExpressionContext { let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 162, KipperParser.RULE_expression); + this.enterRule(_localctx, 164, KipperParser.RULE_expression); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 780; + this.state = 791; this.assignmentExpression(); - this.state = 785; + this.state = 796; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 781; + this.state = 792; this.match(KipperParser.Comma); - this.state = 782; + this.state = 793; this.assignmentExpression(); } } } - this.state = 787; + this.state = 798; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); } } } catch (re) { @@ -4858,15 +4928,15 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierExpression(): TypeSpecifierExpressionContext { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 164, KipperParser.RULE_typeSpecifierExpression); + this.enterRule(_localctx, 166, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 791; + this.state = 802; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 73, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 788; + this.state = 799; this.identifierTypeSpecifierExpression(); } break; @@ -4874,7 +4944,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 789; + this.state = 800; this.genericTypeSpecifierExpression(); } break; @@ -4882,7 +4952,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 790; + this.state = 801; this.typeofTypeSpecifierExpression(); } break; @@ -4906,11 +4976,11 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 166, KipperParser.RULE_identifierTypeSpecifierExpression); + this.enterRule(_localctx, 168, KipperParser.RULE_identifierTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 793; + this.state = 804; this.typeSpecifierIdentifier(); } } catch (re) { @@ -4932,16 +5002,16 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 168, KipperParser.RULE_genericTypeSpecifierExpression); + this.enterRule(_localctx, 170, KipperParser.RULE_genericTypeSpecifierExpression); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 795; + this.state = 806; this.typeSpecifierIdentifier(); - this.state = 796; + this.state = 807; this.match(KipperParser.Less); - this.state = 805; + this.state = 816; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -4955,28 +5025,28 @@ export class KipperParser extends KipperParserBase { _la === KipperParser.Identifier ) { { - this.state = 797; + this.state = 808; this.typeSpecifierExpression(); - this.state = 802; + this.state = 813; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 798; + this.state = 809; this.match(KipperParser.Comma); - this.state = 799; + this.state = 810; this.typeSpecifierExpression(); } } - this.state = 804; + this.state = 815; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 807; + this.state = 818; this.match(KipperParser.Greater); } } catch (re) { @@ -4998,17 +5068,17 @@ export class KipperParser extends KipperParserBase { this._ctx, this.state, ); - this.enterRule(_localctx, 170, KipperParser.RULE_typeofTypeSpecifierExpression); + this.enterRule(_localctx, 172, KipperParser.RULE_typeofTypeSpecifierExpression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 809; + this.state = 820; this.match(KipperParser.Typeof); - this.state = 810; + this.state = 821; this.match(KipperParser.LeftParen); - this.state = 811; + this.state = 822; this.typeSpecifierIdentifier(); - this.state = 812; + this.state = 823; this.match(KipperParser.RightParen); } } catch (re) { @@ -5027,12 +5097,12 @@ export class KipperParser extends KipperParserBase { // @RuleVersion(0) public typeSpecifierIdentifier(): TypeSpecifierIdentifierContext { let _localctx: TypeSpecifierIdentifierContext = new TypeSpecifierIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 172, KipperParser.RULE_typeSpecifierIdentifier); + this.enterRule(_localctx, 174, KipperParser.RULE_typeSpecifierIdentifier); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 814; + this.state = 825; _la = this._input.LA(1); if ( !( @@ -5068,33 +5138,6 @@ export class KipperParser extends KipperParserBase { } return _localctx; } - // @RuleVersion(0) - public matchesExpression(): MatchesExpressionContext { - let _localctx: MatchesExpressionContext = new MatchesExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 174, KipperParser.RULE_matchesExpression); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 816; - this.assignmentExpression(); - this.state = 817; - this.match(KipperParser.Matches); - this.state = 818; - this.typeSpecifierExpression(); - } - } catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } finally { - this.exitRule(); - } - return _localctx; - } public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { switch (ruleIndex) { @@ -5114,24 +5157,27 @@ export class KipperParser extends KipperParserBase { return this.bitwiseShiftExpression_sempred(_localctx as BitwiseShiftExpressionContext, predIndex); case 71: - return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); + return this.matchesExpression_sempred(_localctx as MatchesExpressionContext, predIndex); case 72: - return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); + return this.relationalExpression_sempred(_localctx as RelationalExpressionContext, predIndex); case 73: - return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); + return this.equalityExpression_sempred(_localctx as EqualityExpressionContext, predIndex); case 74: - return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); + return this.bitwiseAndExpression_sempred(_localctx as BitwiseAndExpressionContext, predIndex); case 75: - return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); + return this.bitwiseXorExpression_sempred(_localctx as BitwiseXorExpressionContext, predIndex); case 76: - return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + return this.bitwiseOrExpression_sempred(_localctx as BitwiseOrExpressionContext, predIndex); case 77: + return this.logicalAndExpression_sempred(_localctx as LogicalAndExpressionContext, predIndex); + + case 78: return this.logicalOrExpression_sempred(_localctx as LogicalOrExpressionContext, predIndex); } return true; @@ -5180,59 +5226,66 @@ export class KipperParser extends KipperParserBase { } return true; } - private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { + private matchesExpression_sempred(_localctx: MatchesExpressionContext, predIndex: number): boolean { switch (predIndex) { case 8: return this.precpred(this._ctx, 1); } return true; } - private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { + private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { case 9: return this.precpred(this._ctx, 1); } return true; } - private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { + private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { case 10: return this.precpred(this._ctx, 1); } return true; } - private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { + private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { case 11: return this.precpred(this._ctx, 1); } return true; } - private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { + private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { case 12: return this.precpred(this._ctx, 1); } return true; } - private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { + private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { case 13: return this.precpred(this._ctx, 1); } return true; } - private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { + private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { case 14: return this.precpred(this._ctx, 1); } return true; } + private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 15: + return this.precpred(this._ctx, 1); + } + return true; + } private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03[\u0337\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03[\u033E\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -5299,212 +5352,212 @@ export class KipperParser extends KipperParserBase { "\nL\fL\x0EL\u02DA\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E2\nM\fM\x0E" + "M\u02E5\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02ED\nN\fN\x0EN\u02F0\v" + "N\x03O\x03O\x03O\x03O\x03O\x03O\x07O\u02F8\nO\fO\x0EO\u02FB\vO\x03P\x03" + - "P\x03P\x03P\x03P\x03P\x03P\x05P\u0304\nP\x03Q\x03Q\x03Q\x03Q\x03Q\x05" + - "Q\u030B\nQ\x03R\x03R\x03S\x03S\x03S\x07S\u0312\nS\fS\x0ES\u0315\vS\x03" + - "T\x03T\x03T\x05T\u031A\nT\x03U\x03U\x03V\x03V\x03V\x03V\x03V\x07V\u0323" + - "\nV\fV\x0EV\u0326\vV\x05V\u0328\nV\x03V\x03V\x03W\x03W\x03W\x03W\x03W" + - "\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x02\x02\rl\x88\x8A\x8C\x90\x92\x94" + - "\x96\x98\x9A\x9CZ\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10" + - '\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02' + - "$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02" + - "@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02" + - "\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02" + - "x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C" + - "\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E" + - "\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0" + - "\x02\x02\x11\x03\x02\x07\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02QR\x04" + - '\x02PPSS\x03\x02"$\x04\x021133\x06\x020022::JJ\x03\x0247\x04\x020022' + - '\x03\x02KM\x03\x02CF\x03\x02AB\x03\x02;@\x04\x02"$OO\x02\u0340\x02\xB3' + - "\x03\x02\x02\x02\x04\xB8\x03\x02\x02\x02\x06\xBC\x03\x02\x02\x02\b\xBF" + - "\x03\x02\x02\x02\n\xC6\x03\x02\x02\x02\f\xCE\x03\x02\x02\x02\x0E\xD0\x03" + - "\x02\x02\x02\x10\xD3\x03\x02\x02\x02\x12\xD5\x03\x02\x02\x02\x14\xDC\x03" + - "\x02\x02\x02\x16\xDE\x03\x02\x02\x02\x18\xE0\x03\x02\x02\x02\x1A\xE2\x03" + - "\x02\x02\x02\x1C\xEE\x03\x02\x02\x02\x1E\xF6\x03\x02\x02\x02 \xFA\x03" + - '\x02\x02\x02"\u0107\x03\x02\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03' + - "\x02\x02\x02(\u0118\x03\x02\x02\x02*\u0127\x03\x02\x02\x02,\u0129\x03" + - "\x02\x02\x02.\u012D\x03\x02\x02\x020\u0138\x03\x02\x02\x022\u0146\x03" + - "\x02\x02\x024\u0148\x03\x02\x02\x026\u014F\x03\x02\x02\x028\u0156\x03" + - "\x02\x02\x02:\u0158\x03\x02\x02\x02<\u0161\x03\x02\x02\x02>\u0176\x03" + - "\x02\x02\x02@\u017B\x03\x02\x02\x02B\u017D\x03\x02\x02\x02D\u0196\x03" + - "\x02\x02\x02F\u019C\x03\x02\x02\x02H\u01A4\x03\x02\x02\x02J\u01A7\x03" + - "\x02\x02\x02L\u01B7\x03\x02\x02\x02N\u01B9\x03\x02\x02\x02P\u01C5\x03" + - "\x02\x02\x02R\u01C9\x03\x02\x02\x02T\u01CB\x03\x02\x02\x02V\u01CD\x03" + - "\x02\x02\x02X\u01D1\x03\x02\x02\x02Z\u01D3\x03\x02\x02\x02\\\u01E5\x03" + - "\x02\x02\x02^\u01ED\x03\x02\x02\x02`\u01F5\x03\x02\x02\x02b\u01F7\x03" + - "\x02\x02\x02d\u01F9\x03\x02\x02\x02f\u0209\x03\x02\x02\x02h\u0219\x03" + - "\x02\x02\x02j\u021D\x03\x02\x02\x02l\u0233\x03\x02\x02\x02n\u024D\x03" + - "\x02\x02\x02p\u0255\x03\x02\x02\x02r\u0258\x03\x02\x02\x02t\u025C\x03" + - "\x02\x02\x02v\u026D\x03\x02\x02\x02x\u026F\x03\x02\x02\x02z\u0272\x03" + - "\x02\x02\x02|\u0278\x03\x02\x02\x02~\u027A\x03\x02\x02\x02\x80\u027D\x03" + - "\x02\x02\x02\x82\u0280\x03\x02\x02\x02\x84\u0282\x03\x02\x02\x02\x86\u0289" + - "\x03\x02\x02\x02\x88\u028B\x03\x02\x02\x02\x8A\u0296\x03\x02\x02\x02\x8C" + - "\u02A1\x03\x02\x02\x02\x8E\u02AD\x03\x02\x02\x02\x90\u02AF\x03\x02\x02" + - "\x02\x92\u02BA\x03\x02\x02\x02\x94\u02C5\x03\x02\x02\x02\x96\u02D0\x03" + - "\x02\x02\x02\x98\u02DB\x03\x02\x02\x02\x9A\u02E6\x03\x02\x02\x02\x9C\u02F1" + - "\x03\x02\x02\x02\x9E\u0303\x03\x02\x02\x02\xA0\u030A\x03\x02\x02\x02\xA2" + - "\u030C\x03\x02\x02\x02\xA4\u030E\x03\x02\x02\x02\xA6\u0319\x03\x02\x02" + - "\x02\xA8\u031B\x03\x02\x02\x02\xAA\u031D\x03\x02\x02\x02\xAC\u032B\x03" + - "\x02\x02\x02\xAE\u0330\x03\x02\x02\x02\xB0\u0332\x03\x02\x02\x02\xB2\xB4" + - "\x05\x04\x03\x02\xB3\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\xB5" + - "\x03\x02\x02\x02\xB5\xB6\x07\x02\x02\x03\xB6\x03\x03\x02\x02\x02\xB7\xB9" + - "\x05\x06\x04\x02\xB8\xB7\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xB8" + - "\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB\x05\x03\x02\x02\x02\xBC\xBD" + - "\x05\b\x05\x02\xBD\x07\x03\x02\x02\x02\xBE\xC0\x05\n\x06\x02\xBF\xBE\x03" + - "\x02\x02\x02\xC0\xC1\x03\x02\x02\x02\xC1\xBF\x03\x02\x02\x02\xC1\xC2\x03" + - "\x02\x02\x02\xC2\t\x03\x02\x02\x02\xC3\xC7\x052\x1A\x02\xC4\xC7\x05\f" + - "\x07\x02\xC5\xC7\x07&\x02\x02\xC6\xC3\x03\x02\x02\x02\xC6\xC4\x03\x02" + - "\x02\x02\xC6\xC5\x03\x02\x02\x02\xC7\v\x03\x02\x02\x02\xC8\xC9\x05\x0E" + - "\b\x02\xC9\xCA\x07&\x02\x02\xCA\xCF\x03\x02\x02\x02\xCB\xCF\x05\x1A\x0E" + - "\x02\xCC\xCF\x05 \x11\x02\xCD\xCF\x05(\x15\x02\xCE\xC8\x03\x02\x02\x02" + - "\xCE\xCB\x03\x02\x02\x02\xCE\xCC\x03\x02\x02\x02\xCE\xCD\x03\x02\x02\x02" + - "\xCF\r\x03\x02\x02\x02\xD0\xD1\x05\x10\t\x02\xD1\xD2\x05\x12\n\x02\xD2" + - "\x0F\x03\x02\x02\x02\xD3\xD4\t\x02\x02\x02\xD4\x11\x03\x02\x02\x02\xD5" + - "\xD6\x05\x16\f\x02\xD6\xD7\x07(\x02\x02\xD7\xDA\x05\xA6T\x02\xD8\xD9\x07" + - ";\x02\x02\xD9\xDB\x05\x14\v\x02\xDA\xD8\x03\x02\x02\x02\xDA\xDB\x03\x02" + - "\x02\x02\xDB\x13\x03\x02\x02\x02\xDC\xDD\x05\xA0Q\x02\xDD\x15\x03\x02" + - "\x02\x02\xDE\xDF\x05\x18\r\x02\xDF\x17\x03\x02\x02\x02\xE0\xE1\x07O\x02" + - "\x02\xE1\x19\x03\x02\x02\x02\xE2\xE3\x07\x16\x02\x02\xE3\xE4\x05\x16\f" + - "\x02\xE4\xE6\x07)\x02\x02\xE5\xE7\x05\x1C\x0F\x02\xE6\xE5\x03\x02\x02" + - "\x02\xE6\xE7\x03\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x07*\x02" + - "\x02\xE9\xEA\x07\x19\x02\x02\xEA\xEC\x05\xA6T\x02\xEB\xED\x054\x1B\x02" + - "\xEC\xEB\x03\x02\x02\x02\xEC\xED\x03\x02\x02\x02\xED\x1B\x03\x02\x02\x02" + - "\xEE\xF3\x05\x1E\x10\x02\xEF\xF0\x07%\x02\x02\xF0\xF2\x05\x1E\x10\x02" + - "\xF1\xEF\x03\x02\x02\x02\xF2\xF5\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02" + - "\xF3\xF4\x03\x02\x02\x02\xF4\x1D\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + - "\xF6\xF7\x05\x16\f\x02\xF7\xF8\x07(\x02\x02\xF8\xF9\x05\xA6T\x02\xF9\x1F" + - "\x03\x02\x02\x02\xFA\xFB\x07\x1B\x02\x02\xFB\xFC\x05\x16\f\x02\xFC\u0100" + - '\x07.\x02\x02\xFD\xFF\x05"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102' + - "\x03\x02\x02\x02\u0100\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02" + - "\u0101\u0103\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0103\u0104\x07" + - "/\x02\x02\u0104!\x03\x02\x02\x02\u0105\u0108\x05$\x13\x02\u0106\u0108" + - "\x05&\x14\x02\u0107\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02" + - "\u0108#\x03\x02\x02\x02\u0109\u010A\x05\x16\f\x02\u010A\u010B\x07(\x02" + - "\x02\u010B\u010C\x05\xA6T\x02\u010C\u010D\x07&\x02\x02\u010D%\x03\x02" + - "\x02\x02\u010E\u010F\x05\x16\f\x02\u010F\u0111\x07)\x02\x02\u0110\u0112" + - "\x05\x1C\x0F\x02\u0111\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02" + - "\u0112\u0113\x03\x02\x02\x02\u0113\u0114\x07*\x02\x02\u0114\u0115\x07" + - "(\x02\x02\u0115\u0116\x05\xA6T\x02\u0116\u0117\x07&\x02\x02\u0117'\x03" + - "\x02\x02\x02\u0118\u0119\x07\x1A\x02\x02\u0119\u011A\x05\x16\f\x02\u011A" + - "\u011F\x07.\x02\x02\u011B\u011E\x05*\x16\x02\u011C\u011E\x07&\x02\x02" + - "\u011D\u011B\x03\x02\x02\x02\u011D\u011C\x03\x02\x02\x02\u011E\u0121\x03" + - "\x02\x02\x02\u011F\u011D\x03\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120" + - "\u0122\x03\x02\x02\x02\u0121\u011F\x03\x02\x02\x02\u0122\u0123\x07/\x02" + - "\x02\u0123)\x03\x02\x02\x02\u0124\u0128\x05,\x17\x02\u0125\u0128\x05." + - "\x18\x02\u0126\u0128\x050\x19\x02\u0127\u0124\x03\x02\x02\x02\u0127\u0125" + - "\x03\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128+\x03\x02\x02\x02\u0129" + - "\u012A\x05\x16\f\x02\u012A\u012B\x07(\x02\x02\u012B\u012C\x05\xA6T\x02" + - "\u012C-\x03\x02\x02\x02\u012D\u012E\x05\x16\f\x02\u012E\u0130\x07)\x02" + - "\x02\u012F\u0131\x05\x1C\x0F\x02\u0130\u012F\x03\x02\x02\x02\u0130\u0131" + - "\x03\x02\x02\x02\u0131\u0132\x03\x02\x02\x02\u0132\u0133\x07*\x02\x02" + - "\u0133\u0134\x07(\x02\x02\u0134\u0136\x05\xA6T\x02\u0135\u0137\x054\x1B" + - "\x02\u0136\u0135\x03\x02\x02\x02\u0136\u0137\x03\x02\x02\x02\u0137/\x03" + - "\x02\x02\x02\u0138\u0139\x07\x1C\x02\x02\u0139\u013B\x07)\x02\x02\u013A" + - "\u013C\x05\x1C\x0F\x02\u013B\u013A\x03\x02\x02\x02\u013B\u013C\x03\x02" + - "\x02\x02\u013C\u013D\x03\x02\x02\x02\u013D\u013E\x07*\x02\x02\u013E\u013F" + - "\x054\x1B\x02\u013F1\x03\x02\x02\x02\u0140\u0147\x056\x1C\x02\u0141\u0147" + - "\x058\x1D\x02\u0142\u0147\x05@!\x02\u0143\u0147\x05H%\x02\u0144\u0147" + - "\x05J&\x02\u0145\u0147\x054\x1B\x02\u0146\u0140\x03\x02\x02\x02\u0146" + - "\u0141\x03\x02\x02\x02\u0146\u0142\x03\x02\x02\x02\u0146\u0143\x03\x02" + - "\x02\x02\u0146\u0144\x03\x02\x02\x02\u0146\u0145\x03\x02\x02\x02\u0147" + - "3\x03\x02\x02\x02\u0148\u0149\x06\x1B\x02\x02\u0149\u014B\x07.\x02\x02" + - "\u014A\u014C\x05\b\x05\x02\u014B\u014A\x03\x02\x02\x02\u014B\u014C\x03" + - "\x02\x02\x02\u014C\u014D\x03\x02\x02\x02\u014D\u014E\x07/\x02\x02\u014E" + - "5\x03\x02\x02\x02\u014F\u0150\b\x1C\x01\x02\u0150\u0151\x05\xA4S\x02\u0151" + - "\u0152\x07&\x02\x02\u0152\u0153\b\x1C\x01\x02\u01537\x03\x02\x02\x02\u0154" + - "\u0157\x05:\x1E\x02\u0155\u0157\x05<\x1F\x02\u0156\u0154\x03\x02\x02\x02" + - "\u0156\u0155\x03\x02\x02\x02\u01579\x03\x02\x02\x02\u0158\u0159\x07\x12" + - "\x02\x02\u0159\u015A\x07)\x02\x02\u015A\u015B\x05\xA4S\x02\u015B\u015C" + - "\x07*\x02\x02\u015C\u015F\x052\x1A\x02\u015D\u015E\x07\x13\x02\x02\u015E" + - "\u0160\x052\x1A\x02\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02" + - "\x02\u0160;\x03\x02\x02\x02\u0161\u0162\x07\v\x02\x02\u0162\u0163\x07" + - ")\x02\x02\u0163\u0164\x05\xA4S\x02\u0164\u0165\x07*\x02\x02\u0165\u0169" + - "\x07.\x02\x02\u0166\u0168\x05> \x02\u0167\u0166\x03\x02\x02\x02\u0168" + - "\u016B\x03\x02\x02\x02\u0169\u0167\x03\x02\x02\x02\u0169\u016A\x03\x02" + - "\x02\x02\u016A\u016C\x03\x02\x02\x02\u016B\u0169\x03\x02\x02\x02\u016C" + - "\u016D\x07/\x02\x02\u016D=\x03\x02\x02\x02\u016E\u016F\x07\f\x02\x02\u016F" + - "\u0170\x05\xA4S\x02\u0170\u0171\x07(\x02\x02\u0171\u0172\x052\x1A\x02" + - "\u0172\u0177\x03\x02\x02\x02\u0173\u0174\x07\r\x02\x02\u0174\u0175\x07" + - "(\x02\x02\u0175\u0177\x052\x1A\x02\u0176\u016E\x03\x02\x02\x02\u0176\u0173" + - '\x03\x02\x02\x02\u0177?\x03\x02\x02\x02\u0178\u017C\x05B"\x02\u0179\u017C' + - "\x05D#\x02\u017A\u017C\x05F$\x02\u017B\u0178\x03\x02\x02\x02\u017B\u0179" + - "\x03\x02\x02\x02\u017B\u017A\x03\x02\x02\x02\u017CA\x03\x02\x02\x02\u017D" + - "\u017E\x07\x14\x02\x02\u017E\u0185\x07)\x02\x02\u017F\u0182\x05\x0E\b" + - "\x02\u0180\u0182\x05\xA4S\x02\u0181\u017F\x03\x02\x02\x02\u0181\u0180" + - '\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\u0184\b"\x01\x02\u0184' + - "\u0186\x03\x02\x02\x02\u0185\u0181\x03\x02\x02\x02\u0185\u0186\x03\x02" + - "\x02\x02\u0186\u0187\x03\x02\x02\x02\u0187\u018B\x07&\x02\x02\u0188\u0189" + - '\x05\xA4S\x02\u0189\u018A\b"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B' + - "\u0188\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C\u018D\x03\x02" + - "\x02\x02\u018D\u0191\x07&\x02\x02\u018E\u018F\x05\xA4S\x02\u018F\u0190" + - '\b"\x01\x02\u0190\u0192\x03\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191' + - "\u0192\x03\x02\x02\x02\u0192\u0193\x03\x02\x02\x02\u0193\u0194\x07*\x02" + - "\x02\u0194\u0195\x052\x1A\x02\u0195C\x03\x02\x02\x02\u0196\u0197\x07\x11" + - "\x02\x02\u0197\u0198\x07)\x02\x02\u0198\u0199\x05\xA4S\x02\u0199\u019A" + - "\x07*\x02\x02\u019A\u019B\x052\x1A\x02\u019BE\x03\x02\x02\x02\u019C\u019D" + - "\x07\x10\x02\x02\u019D\u019E\x052\x1A\x02\u019E\u019F\x07\x11\x02\x02" + - "\u019F\u01A0\x07)\x02\x02\u01A0\u01A1\x05\xA4S\x02\u01A1\u01A2\x07*\x02" + - "\x02\u01A2\u01A3\x07&\x02\x02\u01A3G\x03\x02\x02\x02\u01A4\u01A5\t\x03" + - "\x02\x02\u01A5\u01A6\x07&\x02\x02\u01A6I\x03\x02\x02\x02\u01A7\u01A9\x07" + - "\x17\x02\x02\u01A8\u01AA\x05\xA4S\x02\u01A9\u01A8\x03\x02\x02\x02\u01A9" + - "\u01AA\x03\x02\x02\x02\u01AA\u01AB\x03\x02\x02\x02\u01AB\u01AC\x07&\x02" + - "\x02\u01ACK\x03\x02\x02\x02\u01AD\u01B8\x05P)\x02\u01AE\u01B8\x05N(\x02" + - "\u01AF\u01B8\x05d3\x02\u01B0\u01B8\x05f4\x02\u01B1\u01B8\x05R*\x02\u01B2" + - "\u01B8\x05T+\x02\u01B3\u01B8\x05Z.\x02\u01B4\u01B8\x05\\/\x02\u01B5\u01B8" + - "\x05b2\x02\u01B6\u01B8\x05j6\x02\u01B7\u01AD\x03\x02\x02\x02\u01B7\u01AE" + - "\x03\x02\x02\x02\u01B7\u01AF\x03\x02\x02\x02\u01B7\u01B0\x03\x02\x02\x02" + - "\u01B7\u01B1\x03\x02\x02\x02\u01B7\u01B2\x03\x02\x02\x02\u01B7\u01B3\x03" + - "\x02\x02\x02\u01B7\u01B4\x03\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7" + - "\u01B6\x03\x02\x02\x02\u01B8M\x03\x02\x02\x02\u01B9\u01BB\x07)\x02\x02" + - "\u01BA\u01BC\x05\x1C\x0F\x02\u01BB\u01BA\x03\x02\x02\x02\u01BB\u01BC\x03" + - "\x02\x02\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01BE\x07*\x02\x02\u01BE" + - "\u01BF\x07(\x02\x02\u01BF\u01C0\x05\xA6T\x02\u01C0\u01C3\x07\x19\x02\x02" + - "\u01C1\u01C4\x05\xA4S\x02\u01C2\u01C4\x054\x1B\x02\u01C3\u01C1\x03\x02" + - "\x02\x02\u01C3\u01C2\x03\x02\x02\x02\u01C4O\x03\x02\x02\x02\u01C5\u01C6" + - "\x07)\x02\x02\u01C6\u01C7\x05\xA4S\x02\u01C7\u01C8\x07*\x02\x02\u01C8" + - "Q\x03\x02\x02\x02\u01C9\u01CA\t\x04\x02\x02\u01CAS\x03\x02\x02\x02\u01CB" + - "\u01CC\x05V,\x02\u01CCU\x03\x02\x02\x02\u01CD\u01CE\x07O\x02\x02\u01CE" + - "W\x03\x02\x02\x02\u01CF\u01D2\x05V,\x02\u01D0\u01D2\x05Z.\x02\u01D1\u01CF" + - "\x03\x02\x02\x02\u01D1\u01D0\x03\x02\x02\x02\u01D2Y\x03\x02\x02\x02\u01D3" + - "\u01D4\t\x05\x02\x02\u01D4[\x03\x02\x02\x02\u01D5\u01D9\x07V\x02\x02\u01D6" + - "\u01D8\x05^0\x02\u01D7\u01D6\x03\x02\x02\x02\u01D8\u01DB\x03\x02\x02\x02" + - "\u01D9\u01D7\x03\x02\x02\x02\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01DC\x03" + - "\x02\x02\x02\u01DB\u01D9\x03\x02\x02\x02\u01DC\u01E6\x07X\x02\x02\u01DD" + - "\u01E1\x07W\x02\x02\u01DE\u01E0\x05`1\x02\u01DF\u01DE\x03\x02\x02\x02" + - "\u01E0\u01E3\x03\x02\x02\x02\u01E1\u01DF\x03\x02\x02\x02\u01E1\u01E2\x03" + - "\x02\x02\x02\u01E2\u01E4\x03\x02\x02\x02\u01E3\u01E1\x03\x02\x02\x02\u01E4" + - "\u01E6\x07Z\x02\x02\u01E5\u01D5\x03\x02\x02\x02\u01E5\u01DD\x03\x02\x02" + - "\x02\u01E6]\x03\x02\x02\x02\u01E7\u01EE\x07Y\x02\x02\u01E8\u01EA\x07\x03" + - "\x02\x02\u01E9\u01EB\x05\xA4S\x02\u01EA\u01E9\x03\x02\x02\x02\u01EA\u01EB" + - "\x03\x02\x02\x02\u01EB\u01EC\x03\x02\x02\x02\u01EC\u01EE\x07-\x02\x02" + - "\u01ED\u01E7\x03\x02\x02\x02\u01ED\u01E8\x03\x02\x02\x02\u01EE_\x03\x02" + - "\x02\x02\u01EF\u01F6\x07[\x02\x02\u01F0\u01F2\x07\x03\x02\x02\u01F1\u01F3" + - "\x05\xA4S\x02\u01F2\u01F1\x03\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02" + - "\u01F3\u01F4\x03\x02\x02\x02\u01F4\u01F6\x07-\x02\x02\u01F5\u01EF\x03" + - "\x02\x02\x02\u01F5\u01F0\x03\x02\x02\x02\u01F6a\x03\x02\x02\x02\u01F7" + - "\u01F8\t\x06\x02\x02\u01F8c\x03\x02\x02\x02\u01F9\u0202\x07+\x02\x02\u01FA" + - "\u01FF\x05\xA4S\x02\u01FB\u01FC\x07%\x02\x02\u01FC\u01FE\x05\xA4S\x02" + - "\u01FD\u01FB\x03\x02\x02\x02\u01FE\u0201\x03\x02\x02\x02\u01FF\u01FD\x03" + - "\x02\x02\x02\u01FF\u0200\x03\x02\x02\x02\u0200\u0203\x03\x02\x02\x02\u0201" + - "\u01FF\x03\x02\x02\x02\u0202\u01FA\x03\x02\x02\x02\u0202\u0203\x03\x02" + - "\x02\x02\u0203\u0205\x03\x02\x02\x02\u0204\u0206\x07%\x02\x02\u0205\u0204" + - "\x03\x02\x02\x02\u0205\u0206\x03\x02\x02\x02\u0206\u0207\x03\x02\x02\x02" + - "\u0207\u0208\x07,\x02\x02\u0208e\x03\x02\x02\x02\u0209\u0212\x07.\x02" + - "\x02\u020A\u020F\x05h5\x02\u020B\u020C\x07%\x02\x02\u020C\u020E\x05h5" + - "\x02\u020D\u020B\x03\x02"; + "P\x03P\x03P\x03P\x03P\x07P\u0303\nP\fP\x0EP\u0306\vP\x03Q\x03Q\x03Q\x03" + + "Q\x03Q\x03Q\x03Q\x05Q\u030F\nQ\x03R\x03R\x03R\x03R\x03R\x05R\u0316\nR" + + "\x03S\x03S\x03T\x03T\x03T\x07T\u031D\nT\fT\x0ET\u0320\vT\x03U\x03U\x03" + + "U\x05U\u0325\nU\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x07W\u032E\nW\fW\x0E" + + "W\u0331\vW\x05W\u0333\nW\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y" + + "\x03Y\x02\x02\x0El\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9C\x9EZ\x02\x02" + + "\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16" + + '\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02' + + ".\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02" + + "J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02" + + "f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80" + + "\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92" + + "\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4" + + "\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02\x02\x11\x03\x02\x07" + + '\b\x03\x02\x0E\x0F\x03\x02\x1E\x1F\x03\x02QR\x04\x02PPSS\x03\x02"$\x04' + + "\x021133\x06\x020022::JJ\x03\x0247\x04\x020022\x03\x02KM\x03\x02CF\x03" + + '\x02AB\x03\x02;@\x04\x02"$OO\x02\u0348\x02\xB3\x03\x02\x02\x02\x04\xB8' + + "\x03\x02\x02\x02\x06\xBC\x03\x02\x02\x02\b\xBF\x03\x02\x02\x02\n\xC6\x03" + + "\x02\x02\x02\f\xCE\x03\x02\x02\x02\x0E\xD0\x03\x02\x02\x02\x10\xD3\x03" + + "\x02\x02\x02\x12\xD5\x03\x02\x02\x02\x14\xDC\x03\x02\x02\x02\x16\xDE\x03" + + "\x02\x02\x02\x18\xE0\x03\x02\x02\x02\x1A\xE2\x03\x02\x02\x02\x1C\xEE\x03" + + '\x02\x02\x02\x1E\xF6\x03\x02\x02\x02 \xFA\x03\x02\x02\x02"\u0107\x03' + + "\x02\x02\x02$\u0109\x03\x02\x02\x02&\u010E\x03\x02\x02\x02(\u0118\x03" + + "\x02\x02\x02*\u0127\x03\x02\x02\x02,\u0129\x03\x02\x02\x02.\u012D\x03" + + "\x02\x02\x020\u0138\x03\x02\x02\x022\u0146\x03\x02\x02\x024\u0148\x03" + + "\x02\x02\x026\u014F\x03\x02\x02\x028\u0156\x03\x02\x02\x02:\u0158\x03" + + "\x02\x02\x02<\u0161\x03\x02\x02\x02>\u0176\x03\x02\x02\x02@\u017B\x03" + + "\x02\x02\x02B\u017D\x03\x02\x02\x02D\u0196\x03\x02\x02\x02F\u019C\x03" + + "\x02\x02\x02H\u01A4\x03\x02\x02\x02J\u01A7\x03\x02\x02\x02L\u01B7\x03" + + "\x02\x02\x02N\u01B9\x03\x02\x02\x02P\u01C5\x03\x02\x02\x02R\u01C9\x03" + + "\x02\x02\x02T\u01CB\x03\x02\x02\x02V\u01CD\x03\x02\x02\x02X\u01D1\x03" + + "\x02\x02\x02Z\u01D3\x03\x02\x02\x02\\\u01E5\x03\x02\x02\x02^\u01ED\x03" + + "\x02\x02\x02`\u01F5\x03\x02\x02\x02b\u01F7\x03\x02\x02\x02d\u01F9\x03" + + "\x02\x02\x02f\u0209\x03\x02\x02\x02h\u0219\x03\x02\x02\x02j\u021D\x03" + + "\x02\x02\x02l\u0233\x03\x02\x02\x02n\u024D\x03\x02\x02\x02p\u0255\x03" + + "\x02\x02\x02r\u0258\x03\x02\x02\x02t\u025C\x03\x02\x02\x02v\u026D\x03" + + "\x02\x02\x02x\u026F\x03\x02\x02\x02z\u0272\x03\x02\x02\x02|\u0278\x03" + + "\x02\x02\x02~\u027A\x03\x02\x02\x02\x80\u027D\x03\x02\x02\x02\x82\u0280" + + "\x03\x02\x02\x02\x84\u0282\x03\x02\x02\x02\x86\u0289\x03\x02\x02\x02\x88" + + "\u028B\x03\x02\x02\x02\x8A\u0296\x03\x02\x02\x02\x8C\u02A1\x03\x02\x02" + + "\x02\x8E\u02AD\x03\x02\x02\x02\x90\u02AF\x03\x02\x02\x02\x92\u02BA\x03" + + "\x02\x02\x02\x94\u02C5\x03\x02\x02\x02\x96\u02D0\x03\x02\x02\x02\x98\u02DB" + + "\x03\x02\x02\x02\x9A\u02E6\x03\x02\x02\x02\x9C\u02F1\x03\x02\x02\x02\x9E" + + "\u02FC\x03\x02\x02\x02\xA0\u030E\x03\x02\x02\x02\xA2\u0315\x03\x02\x02" + + "\x02\xA4\u0317\x03\x02\x02\x02\xA6\u0319\x03\x02\x02\x02\xA8\u0324\x03" + + "\x02\x02\x02\xAA\u0326\x03\x02\x02\x02\xAC\u0328\x03\x02\x02\x02\xAE\u0336" + + "\x03\x02\x02\x02\xB0\u033B\x03\x02\x02\x02\xB2\xB4\x05\x04\x03\x02\xB3" + + "\xB2\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4\xB5\x03\x02\x02\x02\xB5" + + "\xB6\x07\x02\x02\x03\xB6\x03\x03\x02\x02\x02\xB7\xB9\x05\x06\x04\x02\xB8" + + "\xB7\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xB8\x03\x02\x02\x02\xBA" + + "\xBB\x03\x02\x02\x02\xBB\x05\x03\x02\x02\x02\xBC\xBD\x05\b\x05\x02\xBD" + + "\x07\x03\x02\x02\x02\xBE\xC0\x05\n\x06\x02\xBF\xBE\x03\x02\x02\x02\xC0" + + "\xC1\x03\x02\x02\x02\xC1\xBF\x03\x02\x02\x02\xC1\xC2\x03\x02\x02\x02\xC2" + + "\t\x03\x02\x02\x02\xC3\xC7\x052\x1A\x02\xC4\xC7\x05\f\x07\x02\xC5\xC7" + + "\x07&\x02\x02\xC6\xC3\x03\x02\x02\x02\xC6\xC4\x03\x02\x02\x02\xC6\xC5" + + "\x03\x02\x02\x02\xC7\v\x03\x02\x02\x02\xC8\xC9\x05\x0E\b\x02\xC9\xCA\x07" + + "&\x02\x02\xCA\xCF\x03\x02\x02\x02\xCB\xCF\x05\x1A\x0E\x02\xCC\xCF\x05" + + " \x11\x02\xCD\xCF\x05(\x15\x02\xCE\xC8\x03\x02\x02\x02\xCE\xCB\x03\x02" + + "\x02\x02\xCE\xCC\x03\x02\x02\x02\xCE\xCD\x03\x02\x02\x02\xCF\r\x03\x02" + + "\x02\x02\xD0\xD1\x05\x10\t\x02\xD1\xD2\x05\x12\n\x02\xD2\x0F\x03\x02\x02" + + "\x02\xD3\xD4\t\x02\x02\x02\xD4\x11\x03\x02\x02\x02\xD5\xD6\x05\x16\f\x02" + + "\xD6\xD7\x07(\x02\x02\xD7\xDA\x05\xA8U\x02\xD8\xD9\x07;\x02\x02\xD9\xDB" + + "\x05\x14\v\x02\xDA\xD8\x03\x02\x02\x02\xDA\xDB\x03\x02\x02\x02\xDB\x13" + + "\x03\x02\x02\x02\xDC\xDD\x05\xA2R\x02\xDD\x15\x03\x02\x02\x02\xDE\xDF" + + "\x05\x18\r\x02\xDF\x17\x03\x02\x02\x02\xE0\xE1\x07O\x02\x02\xE1\x19\x03" + + "\x02\x02\x02\xE2\xE3\x07\x16\x02\x02\xE3\xE4\x05\x16\f\x02\xE4\xE6\x07" + + ")\x02\x02\xE5\xE7\x05\x1C\x0F\x02\xE6\xE5\x03\x02\x02\x02\xE6\xE7\x03" + + "\x02\x02\x02\xE7\xE8\x03\x02\x02\x02\xE8\xE9\x07*\x02\x02\xE9\xEA\x07" + + "\x19\x02\x02\xEA\xEC\x05\xA8U\x02\xEB\xED\x054\x1B\x02\xEC\xEB\x03\x02" + + "\x02\x02\xEC\xED\x03\x02\x02\x02\xED\x1B\x03\x02\x02\x02\xEE\xF3\x05\x1E" + + "\x10\x02\xEF\xF0\x07%\x02\x02\xF0\xF2\x05\x1E\x10\x02\xF1\xEF\x03\x02" + + "\x02\x02\xF2\xF5\x03\x02\x02\x02\xF3\xF1\x03\x02\x02\x02\xF3\xF4\x03\x02" + + "\x02\x02\xF4\x1D\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02\xF6\xF7\x05\x16" + + "\f\x02\xF7\xF8\x07(\x02\x02\xF8\xF9\x05\xA8U\x02\xF9\x1F\x03\x02\x02\x02" + + "\xFA\xFB\x07\x1B\x02\x02\xFB\xFC\x05\x16\f\x02\xFC\u0100\x07.\x02\x02" + + '\xFD\xFF\x05"\x12\x02\xFE\xFD\x03\x02\x02\x02\xFF\u0102\x03\x02\x02\x02' + + "\u0100\xFE\x03\x02\x02\x02\u0100\u0101\x03\x02\x02\x02\u0101\u0103\x03" + + "\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0103\u0104\x07/\x02\x02\u0104" + + "!\x03\x02\x02\x02\u0105\u0108\x05$\x13\x02\u0106\u0108\x05&\x14\x02\u0107" + + "\u0105\x03\x02\x02\x02\u0107\u0106\x03\x02\x02\x02\u0108#\x03\x02\x02" + + "\x02\u0109\u010A\x05\x16\f\x02\u010A\u010B\x07(\x02\x02\u010B\u010C\x05" + + "\xA8U\x02\u010C\u010D\x07&\x02\x02\u010D%\x03\x02\x02\x02\u010E\u010F" + + "\x05\x16\f\x02\u010F\u0111\x07)\x02\x02\u0110\u0112\x05\x1C\x0F\x02\u0111" + + "\u0110\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112\u0113\x03\x02" + + "\x02\x02\u0113\u0114\x07*\x02\x02\u0114\u0115\x07(\x02\x02\u0115\u0116" + + "\x05\xA8U\x02\u0116\u0117\x07&\x02\x02\u0117'\x03\x02\x02\x02\u0118\u0119" + + "\x07\x1A\x02\x02\u0119\u011A\x05\x16\f\x02\u011A\u011F\x07.\x02\x02\u011B" + + "\u011E\x05*\x16\x02\u011C\u011E\x07&\x02\x02\u011D\u011B\x03\x02\x02\x02" + + "\u011D\u011C\x03\x02\x02\x02\u011E\u0121\x03\x02\x02\x02\u011F\u011D\x03" + + "\x02\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02\x02\u0121" + + "\u011F\x03\x02\x02\x02\u0122\u0123\x07/\x02\x02\u0123)\x03\x02\x02\x02" + + "\u0124\u0128\x05,\x17\x02\u0125\u0128\x05.\x18\x02\u0126\u0128\x050\x19" + + "\x02\u0127\u0124\x03\x02\x02\x02\u0127\u0125\x03\x02\x02\x02\u0127\u0126" + + "\x03\x02\x02\x02\u0128+\x03\x02\x02\x02\u0129\u012A\x05\x16\f\x02\u012A" + + "\u012B\x07(\x02\x02\u012B\u012C\x05\xA8U\x02\u012C-\x03\x02\x02\x02\u012D" + + "\u012E\x05\x16\f\x02\u012E\u0130\x07)\x02\x02\u012F\u0131\x05\x1C\x0F" + + "\x02\u0130\u012F\x03\x02\x02\x02\u0130\u0131\x03\x02\x02\x02\u0131\u0132" + + "\x03\x02\x02\x02\u0132\u0133\x07*\x02\x02\u0133\u0134\x07(\x02\x02\u0134" + + "\u0136\x05\xA8U\x02\u0135\u0137\x054\x1B\x02\u0136\u0135\x03\x02\x02\x02" + + "\u0136\u0137\x03\x02\x02\x02\u0137/\x03\x02\x02\x02\u0138\u0139\x07\x1C" + + "\x02\x02\u0139\u013B\x07)\x02\x02\u013A\u013C\x05\x1C\x0F\x02\u013B\u013A" + + "\x03\x02\x02\x02\u013B\u013C\x03\x02\x02\x02\u013C\u013D\x03\x02\x02\x02" + + "\u013D\u013E\x07*\x02\x02\u013E\u013F\x054\x1B\x02\u013F1\x03\x02\x02" + + "\x02\u0140\u0147\x056\x1C\x02\u0141\u0147\x058\x1D\x02\u0142\u0147\x05" + + "@!\x02\u0143\u0147\x05H%\x02\u0144\u0147\x05J&\x02\u0145\u0147\x054\x1B" + + "\x02\u0146\u0140\x03\x02\x02\x02\u0146\u0141\x03\x02\x02\x02\u0146\u0142" + + "\x03\x02\x02\x02\u0146\u0143\x03\x02\x02\x02\u0146\u0144\x03\x02\x02\x02" + + "\u0146\u0145\x03\x02\x02\x02\u01473\x03\x02\x02\x02\u0148\u0149\x06\x1B" + + "\x02\x02\u0149\u014B\x07.\x02\x02\u014A\u014C\x05\b\x05\x02\u014B\u014A" + + "\x03\x02\x02\x02\u014B\u014C\x03\x02\x02\x02\u014C\u014D\x03\x02\x02\x02" + + "\u014D\u014E\x07/\x02\x02\u014E5\x03\x02\x02\x02\u014F\u0150\b\x1C\x01" + + "\x02\u0150\u0151\x05\xA6T\x02\u0151\u0152\x07&\x02\x02\u0152\u0153\b\x1C" + + "\x01\x02\u01537\x03\x02\x02\x02\u0154\u0157\x05:\x1E\x02\u0155\u0157\x05" + + "<\x1F\x02\u0156\u0154\x03\x02\x02\x02\u0156\u0155\x03\x02\x02\x02\u0157" + + "9\x03\x02\x02\x02\u0158\u0159\x07\x12\x02\x02\u0159\u015A\x07)\x02\x02" + + "\u015A\u015B\x05\xA6T\x02\u015B\u015C\x07*\x02\x02\u015C\u015F\x052\x1A" + + "\x02\u015D\u015E\x07\x13\x02\x02\u015E\u0160\x052\x1A\x02\u015F\u015D" + + "\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160;\x03\x02\x02\x02\u0161" + + "\u0162\x07\v\x02\x02\u0162\u0163\x07)\x02\x02\u0163\u0164\x05\xA6T\x02" + + "\u0164\u0165\x07*\x02\x02\u0165\u0169\x07.\x02\x02\u0166\u0168\x05> \x02" + + "\u0167\u0166\x03\x02\x02\x02\u0168\u016B\x03\x02\x02\x02\u0169\u0167\x03" + + "\x02\x02\x02\u0169\u016A\x03\x02\x02\x02\u016A\u016C\x03\x02\x02\x02\u016B" + + "\u0169\x03\x02\x02\x02\u016C\u016D\x07/\x02\x02\u016D=\x03\x02\x02\x02" + + "\u016E\u016F\x07\f\x02\x02\u016F\u0170\x05\xA6T\x02\u0170\u0171\x07(\x02" + + "\x02\u0171\u0172\x052\x1A\x02\u0172\u0177\x03\x02\x02\x02\u0173\u0174" + + "\x07\r\x02\x02\u0174\u0175\x07(\x02\x02\u0175\u0177\x052\x1A\x02\u0176" + + "\u016E\x03\x02\x02\x02\u0176\u0173\x03\x02\x02\x02\u0177?\x03\x02\x02" + + '\x02\u0178\u017C\x05B"\x02\u0179\u017C\x05D#\x02\u017A\u017C\x05F$\x02' + + "\u017B\u0178\x03\x02\x02\x02\u017B\u0179\x03\x02\x02\x02\u017B\u017A\x03" + + "\x02\x02\x02\u017CA\x03\x02\x02\x02\u017D\u017E\x07\x14\x02\x02\u017E" + + "\u0185\x07)\x02\x02\u017F\u0182\x05\x0E\b\x02\u0180\u0182\x05\xA6T\x02" + + "\u0181\u017F\x03\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182\u0183\x03" + + '\x02\x02\x02\u0183\u0184\b"\x01\x02\u0184\u0186\x03\x02\x02\x02\u0185' + + "\u0181\x03\x02\x02\x02\u0185\u0186\x03\x02\x02\x02\u0186\u0187\x03\x02" + + "\x02\x02\u0187\u018B\x07&\x02\x02\u0188\u0189\x05\xA6T\x02\u0189\u018A" + + '\b"\x01\x02\u018A\u018C\x03\x02\x02\x02\u018B\u0188\x03\x02\x02\x02\u018B' + + "\u018C\x03\x02\x02\x02\u018C\u018D\x03\x02\x02\x02\u018D\u0191\x07&\x02" + + '\x02\u018E\u018F\x05\xA6T\x02\u018F\u0190\b"\x01\x02\u0190\u0192\x03' + + "\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0191\u0192\x03\x02\x02\x02\u0192" + + "\u0193\x03\x02\x02\x02\u0193\u0194\x07*\x02\x02\u0194\u0195\x052\x1A\x02" + + "\u0195C\x03\x02\x02\x02\u0196\u0197\x07\x11\x02\x02\u0197\u0198\x07)\x02" + + "\x02\u0198\u0199\x05\xA6T\x02\u0199\u019A\x07*\x02\x02\u019A\u019B\x05" + + "2\x1A\x02\u019BE\x03\x02\x02\x02\u019C\u019D\x07\x10\x02\x02\u019D\u019E" + + "\x052\x1A\x02\u019E\u019F\x07\x11\x02\x02\u019F\u01A0\x07)\x02\x02\u01A0" + + "\u01A1\x05\xA6T\x02\u01A1\u01A2\x07*\x02\x02\u01A2\u01A3\x07&\x02\x02" + + "\u01A3G\x03\x02\x02\x02\u01A4\u01A5\t\x03\x02\x02\u01A5\u01A6\x07&\x02" + + "\x02\u01A6I\x03\x02\x02\x02\u01A7\u01A9\x07\x17\x02\x02\u01A8\u01AA\x05" + + "\xA6T\x02\u01A9\u01A8\x03\x02\x02\x02\u01A9\u01AA\x03\x02\x02\x02\u01AA" + + "\u01AB\x03\x02\x02\x02\u01AB\u01AC\x07&\x02\x02\u01ACK\x03\x02\x02\x02" + + "\u01AD\u01B8\x05P)\x02\u01AE\u01B8\x05N(\x02\u01AF\u01B8\x05d3\x02\u01B0" + + "\u01B8\x05f4\x02\u01B1\u01B8\x05R*\x02\u01B2\u01B8\x05T+\x02\u01B3\u01B8" + + "\x05Z.\x02\u01B4\u01B8\x05\\/\x02\u01B5\u01B8\x05b2\x02\u01B6\u01B8\x05" + + "j6\x02\u01B7\u01AD\x03\x02\x02\x02\u01B7\u01AE\x03\x02\x02\x02\u01B7\u01AF" + + "\x03\x02\x02\x02\u01B7\u01B0\x03\x02\x02\x02\u01B7\u01B1\x03\x02\x02\x02" + + "\u01B7\u01B2\x03\x02\x02\x02\u01B7\u01B3\x03\x02\x02\x02\u01B7\u01B4\x03" + + "\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7\u01B6\x03\x02\x02\x02\u01B8" + + "M\x03\x02\x02\x02\u01B9\u01BB\x07)\x02\x02\u01BA\u01BC\x05\x1C\x0F\x02" + + "\u01BB\u01BA\x03\x02\x02\x02\u01BB\u01BC\x03\x02\x02\x02\u01BC\u01BD\x03" + + "\x02\x02\x02\u01BD\u01BE\x07*\x02\x02\u01BE\u01BF\x07(\x02\x02\u01BF\u01C0" + + "\x05\xA8U\x02\u01C0\u01C3\x07\x19\x02\x02\u01C1\u01C4\x05\xA6T\x02\u01C2" + + "\u01C4\x054\x1B\x02\u01C3\u01C1\x03\x02\x02\x02\u01C3\u01C2\x03\x02\x02" + + "\x02\u01C4O\x03\x02\x02\x02\u01C5\u01C6\x07)\x02\x02\u01C6\u01C7\x05\xA6" + + "T\x02\u01C7\u01C8\x07*\x02\x02\u01C8Q\x03\x02\x02\x02\u01C9\u01CA\t\x04" + + "\x02\x02\u01CAS\x03\x02\x02\x02\u01CB\u01CC\x05V,\x02\u01CCU\x03\x02\x02" + + "\x02\u01CD\u01CE\x07O\x02\x02\u01CEW\x03\x02\x02\x02\u01CF\u01D2\x05V" + + ",\x02\u01D0\u01D2\x05Z.\x02\u01D1\u01CF\x03\x02\x02\x02\u01D1\u01D0\x03" + + "\x02\x02\x02\u01D2Y\x03\x02\x02\x02\u01D3\u01D4\t\x05\x02\x02\u01D4[\x03" + + "\x02\x02\x02\u01D5\u01D9\x07V\x02\x02\u01D6\u01D8\x05^0\x02\u01D7\u01D6" + + "\x03\x02\x02\x02\u01D8\u01DB\x03\x02\x02\x02\u01D9\u01D7\x03\x02\x02\x02" + + "\u01D9\u01DA\x03\x02\x02\x02\u01DA\u01DC\x03\x02\x02\x02\u01DB\u01D9\x03" + + "\x02\x02\x02\u01DC\u01E6\x07X\x02\x02\u01DD\u01E1\x07W\x02\x02\u01DE\u01E0" + + "\x05`1\x02\u01DF\u01DE\x03\x02\x02\x02\u01E0\u01E3\x03\x02\x02\x02\u01E1" + + "\u01DF\x03\x02\x02\x02\u01E1\u01E2\x03\x02\x02\x02\u01E2\u01E4\x03\x02" + + "\x02\x02\u01E3\u01E1\x03\x02\x02\x02\u01E4\u01E6\x07Z\x02\x02\u01E5\u01D5" + + "\x03\x02\x02\x02\u01E5\u01DD\x03\x02\x02\x02\u01E6]\x03\x02\x02\x02\u01E7" + + "\u01EE\x07Y\x02\x02\u01E8\u01EA\x07\x03\x02\x02\u01E9\u01EB\x05\xA6T\x02" + + "\u01EA\u01E9\x03\x02\x02\x02\u01EA\u01EB\x03\x02\x02\x02\u01EB\u01EC\x03" + + "\x02\x02\x02\u01EC\u01EE\x07-\x02\x02\u01ED\u01E7\x03\x02\x02\x02\u01ED" + + "\u01E8\x03\x02\x02\x02\u01EE_\x03\x02\x02\x02\u01EF\u01F6\x07[\x02\x02" + + "\u01F0\u01F2\x07\x03\x02\x02\u01F1\u01F3\x05\xA6T\x02\u01F2\u01F1\x03" + + "\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02\u01F3\u01F4\x03\x02\x02\x02\u01F4" + + "\u01F6\x07-\x02\x02\u01F5\u01EF\x03\x02\x02\x02\u01F5\u01F0\x03\x02\x02" + + "\x02\u01F6a\x03\x02\x02\x02\u01F7\u01F8\t\x06\x02\x02\u01F8c\x03\x02\x02" + + "\x02\u01F9\u0202\x07+\x02\x02\u01FA\u01FF\x05\xA6T\x02\u01FB\u01FC\x07" + + "%\x02\x02\u01FC\u01FE\x05\xA6T\x02\u01FD\u01FB\x03\x02\x02\x02\u01FE\u0201" + + "\x03\x02\x02\x02\u01FF\u01FD\x03\x02\x02\x02\u01FF\u0200\x03\x02\x02\x02" + + "\u0200\u0203\x03\x02\x02\x02\u0201\u01FF\x03\x02\x02\x02\u0202\u01FA\x03" + + "\x02\x02\x02\u0202\u0203\x03\x02\x02\x02\u0203\u0205\x03\x02\x02\x02\u0204" + + "\u0206\x07%\x02\x02\u0205\u0204\x03\x02\x02\x02\u0205\u0206\x03\x02\x02" + + "\x02\u0206\u0207\x03\x02\x02\x02\u0207\u0208\x07,\x02\x02\u0208e\x03\x02" + + "\x02\x02\u0209\u0212\x07.\x02\x02\u020A\u020F\x05h5"; private static readonly _serializedATNSegment1: string = + "\x02\u020B\u020C\x07%\x02\x02\u020C\u020E\x05h5\x02\u020D\u020B\x03\x02" + "\x02\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u020F" + "\u0210\x03\x02\x02\x02\u0210\u0213\x03\x02\x02\x02\u0211\u020F\x03\x02" + "\x02\x02\u0212\u020A\x03\x02\x02\x02\u0212\u0213\x03\x02\x02\x02\u0213" + "\u0215\x03\x02\x02\x02\u0214\u0216\x07%\x02\x02\u0215\u0214\x03\x02\x02" + "\x02\u0215\u0216\x03\x02\x02\x02\u0216\u0217\x03\x02\x02\x02\u0217\u0218" + "\x07/\x02\x02\u0218g\x03\x02\x02\x02\u0219\u021A\x05X-\x02\u021A\u021B" + - "\x07(\x02\x02\u021B\u021C\x05\xA4S\x02\u021Ci\x03\x02\x02\x02\u021D\u021E" + + "\x07(\x02\x02\u021B\u021C\x05\xA6T\x02\u021Ci\x03\x02\x02\x02\u021D\u021E" + "\t\x07\x02\x02\u021Ek\x03\x02\x02\x02\u021F\u0220\b7\x01\x02\u0220\u0234" + "\x05L'\x02\u0221\u0222\x07\x18\x02\x02\u0222\u0223\x05l7\x02\u0223\u0225" + "\x07)\x02\x02\u0224\u0226\x05n8\x02\u0225\u0224\x03\x02\x02\x02\u0225" + "\u0226\x03\x02\x02\x02\u0226\u0227\x03\x02\x02\x02\u0227\u0228\x07*\x02" + "\x02\u0228\u0229\b7\x01\x02\u0229\u0234\x03\x02\x02\x02\u022A\u022B\x07" + - "\x1D\x02\x02\u022B\u022C\x05\xA6T\x02\u022C\u022E\x07)\x02\x02\u022D\u022F" + + "\x1D\x02\x02\u022B\u022C\x05\xA8U\x02\u022C\u022E\x07)\x02\x02\u022D\u022F" + "\x05n8\x02\u022E\u022D\x03\x02\x02\x02\u022E\u022F\x03\x02\x02\x02\u022F" + "\u0230\x03\x02\x02\x02\u0230\u0231\x07*\x02\x02\u0231\u0232\b7\x01\x02" + "\u0232\u0234\x03\x02\x02\x02\u0233\u021F\x03\x02\x02\x02\u0233\u0221\x03" + @@ -5519,30 +5572,30 @@ export class KipperParser extends KipperParserBase { "\x02\u0248\u0235\x03\x02\x02\x02\u0248\u0239\x03\x02\x02\x02\u0248\u023D" + "\x03\x02\x02\x02\u0248\u0241\x03\x02\x02\x02\u0249\u024C\x03\x02\x02\x02" + "\u024A\u0248\x03\x02\x02\x02\u024A\u024B\x03\x02\x02\x02\u024Bm\x03\x02" + - "\x02\x02\u024C\u024A\x03\x02\x02\x02\u024D\u0252\x05\xA0Q\x02\u024E\u024F" + - "\x07%\x02\x02\u024F\u0251\x05\xA0Q\x02\u0250\u024E\x03\x02\x02\x02\u0251" + + "\x02\x02\u024C\u024A\x03\x02\x02\x02\u024D\u0252\x05\xA2R\x02\u024E\u024F" + + "\x07%\x02\x02\u024F\u0251\x05\xA2R\x02\u0250\u024E\x03\x02\x02\x02\u0251" + "\u0254\x03\x02\x02\x02\u0252\u0250\x03\x02\x02\x02\u0252\u0253\x03\x02" + "\x02\x02\u0253o\x03\x02\x02\x02\u0254\u0252\x03\x02\x02\x02\u0255\u0256" + "\x07N\x02\x02\u0256\u0257\x05V,\x02\u0257q\x03\x02\x02\x02\u0258\u0259" + - "\x07+\x02\x02\u0259\u025A\x05\xA4S\x02\u025A\u025B\x07,\x02\x02\u025B" + - "s\x03\x02\x02\x02\u025C\u0260\x07+\x02\x02\u025D\u025E\x05\xA4S\x02\u025E" + + "\x07+\x02\x02\u0259\u025A\x05\xA6T\x02\u025A\u025B\x07,\x02\x02\u025B" + + "s\x03\x02\x02\x02\u025C\u0260\x07+\x02\x02\u025D\u025E\x05\xA6T\x02\u025E" + "\u025F\b;\x01\x02\u025F\u0261\x03\x02\x02\x02\u0260\u025D\x03\x02\x02" + "\x02\u0260\u0261\x03\x02\x02\x02\u0261\u0262\x03\x02\x02\x02\u0262\u0266" + - "\x07(\x02\x02\u0263\u0264\x05\xA4S\x02\u0264\u0265\b;\x01\x02\u0265\u0267" + + "\x07(\x02\x02\u0263\u0264\x05\xA6T\x02\u0264\u0265\b;\x01\x02\u0265\u0267" + "\x03\x02\x02\x02\u0266\u0263\x03\x02\x02\x02\u0266\u0267\x03\x02\x02\x02" + "\u0267\u0268\x03\x02\x02\x02\u0268\u0269\x07,\x02\x02\u0269u\x03\x02\x02" + "\x02\u026A\u026E\x05l7\x02\u026B\u026E\x05x=\x02\u026C\u026E\x05z>\x02" + "\u026D\u026A\x03\x02\x02\x02\u026D\u026B\x03\x02\x02\x02\u026D\u026C\x03" + "\x02\x02\x02\u026Ew\x03\x02\x02\x02\u026F\u0270\x05l7\x02\u0270\u0271" + "\x05\x82B\x02\u0271y\x03\x02\x02\x02\u0272\u0273\x07!\x02\x02\u0273\u0274" + - "\x05\xA0Q\x02\u0274{\x03\x02\x02\x02\u0275\u0279\x05v<\x02\u0276\u0279" + + "\x05\xA2R\x02\u0274{\x03\x02\x02\x02\u0275\u0279\x05v<\x02\u0276\u0279" + "\x05~@\x02\u0277\u0279\x05\x80A\x02\u0278\u0275\x03\x02\x02\x02\u0278" + "\u0276\x03\x02\x02\x02\u0278\u0277\x03\x02\x02\x02\u0279}\x03\x02\x02" + "\x02\u027A\u027B\x05\x82B\x02\u027B\u027C\x05v<\x02\u027C\x7F\x03\x02" + "\x02\x02\u027D\u027E\x05\x84C\x02\u027E\u027F\x05v<\x02\u027F\x81\x03" + "\x02\x02\x02\u0280\u0281\t\b\x02\x02\u0281\x83\x03\x02\x02\x02\u0282\u0283" + "\t\t\x02\x02\u0283\x85\x03\x02\x02\x02\u0284\u028A\x05|?\x02\u0285\u0286" + - "\x05|?\x02\u0286\u0287\x07\t\x02\x02\u0287\u0288\x05\xA6T\x02\u0288\u028A" + + "\x05|?\x02\u0286\u0287\x07\t\x02\x02\u0287\u0288\x05\xA8U\x02\u0288\u028A" + "\x03\x02\x02\x02\u0289\u0284\x03\x02\x02\x02\u0289\u0285\x03\x02\x02\x02" + "\u028A\x87\x03\x02\x02\x02\u028B\u028C\bE\x01\x02\u028C\u028D\x05\x86" + "D\x02\u028D\u0293\x03\x02\x02\x02\u028E\u028F\f\x03\x02\x02\u028F\u0290" + @@ -5555,72 +5608,75 @@ export class KipperParser extends KipperParserBase { "\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\x8B\x03\x02\x02\x02\u02A0" + "\u029E\x03\x02\x02\x02\u02A1\u02A2\bG\x01\x02\u02A2\u02A3\x05\x8AF\x02" + "\u02A3\u02AA\x03\x02\x02\x02\u02A4\u02A5\f\x03\x02\x02\u02A5\u02A6\x05" + - "\x8EH\x02\u02A6\u02A7\x05\x94K\x02\u02A7\u02A9\x03\x02\x02\x02\u02A8\u02A4" + + "\x8EH\x02\u02A6\u02A7\x05\x96L\x02\u02A7\u02A9\x03\x02\x02\x02\u02A8\u02A4" + "\x03\x02\x02\x02\u02A9\u02AC\x03\x02\x02\x02\u02AA\u02A8\x03\x02\x02\x02" + "\u02AA\u02AB\x03\x02\x02\x02\u02AB\x8D\x03\x02\x02\x02\u02AC\u02AA\x03" + "\x02\x02\x02\u02AD\u02AE\t\f\x02\x02\u02AE\x8F\x03\x02\x02\x02\u02AF\u02B0" + "\bI\x01\x02\u02B0\u02B1\x05\x8CG\x02\u02B1\u02B7\x03\x02\x02\x02\u02B2" + - "\u02B3\f\x03\x02\x02\u02B3\u02B4\t\r\x02\x02\u02B4\u02B6\x05\x8CG\x02" + + "\u02B3\f\x03\x02\x02\u02B3\u02B4\x07 \x02\x02\u02B4\u02B6\x05\x8CG\x02" + "\u02B5\u02B2\x03\x02\x02\x02\u02B6\u02B9\x03\x02\x02\x02\u02B7\u02B5\x03" + "\x02\x02\x02\u02B7\u02B8\x03\x02\x02\x02\u02B8\x91\x03\x02\x02\x02\u02B9" + "\u02B7\x03\x02\x02\x02\u02BA\u02BB\bJ\x01\x02\u02BB\u02BC\x05\x90I\x02" + - "\u02BC\u02C2\x03\x02\x02\x02\u02BD\u02BE\f\x03\x02\x02\u02BE\u02BF\t\x0E" + + "\u02BC\u02C2\x03\x02\x02\x02\u02BD\u02BE\f\x03\x02\x02\u02BE\u02BF\t\r" + "\x02\x02\u02BF\u02C1\x05\x90I\x02\u02C0\u02BD\x03\x02\x02\x02\u02C1\u02C4" + "\x03\x02\x02\x02\u02C2\u02C0\x03\x02\x02\x02\u02C2\u02C3\x03\x02\x02\x02" + "\u02C3\x93\x03\x02\x02\x02\u02C4\u02C2\x03\x02\x02\x02\u02C5\u02C6\bK" + "\x01\x02\u02C6\u02C7\x05\x92J\x02\u02C7\u02CD\x03\x02\x02\x02\u02C8\u02C9" + - "\f\x03\x02\x02\u02C9\u02CA\x07G\x02\x02\u02CA\u02CC\x05\x92J\x02\u02CB" + + "\f\x03\x02\x02\u02C9\u02CA\t\x0E\x02\x02\u02CA\u02CC\x05\x92J\x02\u02CB" + "\u02C8\x03\x02\x02\x02\u02CC\u02CF\x03\x02\x02\x02\u02CD\u02CB\x03\x02" + "\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\x95\x03\x02\x02\x02\u02CF\u02CD" + "\x03\x02\x02\x02\u02D0\u02D1\bL\x01\x02\u02D1\u02D2\x05\x94K\x02\u02D2" + - "\u02D8\x03\x02\x02\x02\u02D3\u02D4\f\x03\x02\x02\u02D4\u02D5\x07I\x02" + + "\u02D8\x03\x02\x02\x02\u02D3\u02D4\f\x03\x02\x02\u02D4\u02D5\x07G\x02" + "\x02\u02D5\u02D7\x05\x94K\x02\u02D6\u02D3\x03\x02\x02\x02\u02D7\u02DA" + "\x03\x02\x02\x02\u02D8\u02D6\x03\x02\x02\x02\u02D8\u02D9\x03\x02\x02\x02" + "\u02D9\x97\x03\x02\x02\x02\u02DA\u02D8\x03\x02\x02\x02\u02DB\u02DC\bM" + "\x01\x02\u02DC\u02DD\x05\x96L\x02\u02DD\u02E3\x03\x02\x02\x02\u02DE\u02DF" + - "\f\x03\x02\x02\u02DF\u02E0\x07H\x02\x02\u02E0\u02E2\x05\x96L\x02\u02E1" + + "\f\x03\x02\x02\u02DF\u02E0\x07I\x02\x02\u02E0\u02E2\x05\x96L\x02\u02E1" + "\u02DE\x03\x02\x02\x02\u02E2\u02E5\x03\x02\x02\x02\u02E3\u02E1\x03\x02" + "\x02\x02\u02E3\u02E4\x03\x02\x02\x02\u02E4\x99\x03\x02\x02\x02\u02E5\u02E3" + "\x03\x02\x02\x02\u02E6\u02E7\bN\x01\x02\u02E7\u02E8\x05\x98M\x02\u02E8" + - "\u02EE\x03\x02\x02\x02\u02E9\u02EA\f\x03\x02\x02\u02EA\u02EB\x078\x02" + + "\u02EE\x03\x02\x02\x02\u02E9\u02EA\f\x03\x02\x02\u02EA\u02EB\x07H\x02" + "\x02\u02EB\u02ED\x05\x98M\x02\u02EC\u02E9\x03\x02\x02\x02\u02ED\u02F0" + "\x03\x02\x02\x02\u02EE\u02EC\x03\x02\x02\x02\u02EE\u02EF\x03\x02\x02\x02" + "\u02EF\x9B\x03\x02\x02\x02\u02F0\u02EE\x03\x02\x02\x02\u02F1\u02F2\bO" + "\x01\x02\u02F2\u02F3\x05\x9AN\x02\u02F3\u02F9\x03\x02\x02\x02\u02F4\u02F5" + - "\f\x03\x02\x02\u02F5\u02F6\x079\x02\x02\u02F6\u02F8\x05\x9AN\x02\u02F7" + + "\f\x03\x02\x02\u02F5\u02F6\x078\x02\x02\u02F6\u02F8\x05\x9AN\x02\u02F7" + "\u02F4\x03\x02\x02\x02\u02F8\u02FB\x03\x02\x02\x02\u02F9\u02F7\x03\x02" + "\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\x9D\x03\x02\x02\x02\u02FB\u02F9" + - "\x03\x02\x02\x02\u02FC\u0304\x05\x9CO\x02\u02FD\u02FE\x05\x9CO\x02\u02FE" + - "\u02FF\x07'\x02\x02\u02FF\u0300\x05\x9EP\x02\u0300\u0301\x07(\x02\x02" + - "\u0301\u0302\x05\x9EP\x02\u0302\u0304\x03\x02\x02\x02\u0303\u02FC\x03" + - "\x02\x02\x02\u0303\u02FD\x03\x02\x02\x02\u0304\x9F\x03\x02\x02\x02\u0305" + - "\u030B\x05\x9EP\x02\u0306\u0307\x05l7\x02\u0307\u0308\x05\xA2R\x02\u0308" + - "\u0309\x05\xA0Q\x02\u0309\u030B\x03\x02\x02\x02\u030A\u0305\x03\x02\x02" + - "\x02\u030A\u0306\x03\x02\x02\x02\u030B\xA1\x03\x02\x02\x02\u030C\u030D" + - "\t\x0F\x02\x02\u030D\xA3\x03\x02\x02\x02\u030E\u0313\x05\xA0Q\x02\u030F" + - "\u0310\x07%\x02\x02\u0310\u0312\x05\xA0Q\x02\u0311\u030F\x03\x02\x02\x02" + - "\u0312\u0315\x03\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0313\u0314\x03" + - "\x02\x02\x02\u0314\xA5\x03\x02\x02\x02\u0315\u0313\x03\x02\x02\x02\u0316" + - "\u031A\x05\xA8U\x02\u0317\u031A\x05\xAAV\x02\u0318\u031A\x05\xACW\x02" + - "\u0319\u0316\x03\x02\x02\x02\u0319\u0317\x03\x02\x02\x02\u0319\u0318\x03" + - "\x02\x02\x02\u031A\xA7\x03\x02\x02\x02\u031B\u031C\x05\xAEX\x02\u031C" + - "\xA9\x03\x02\x02\x02\u031D\u031E\x05\xAEX\x02\u031E\u0327\x07C\x02\x02" + - "\u031F\u0324\x05\xA6T\x02\u0320\u0321\x07%\x02\x02\u0321\u0323\x05\xA6" + - "T\x02\u0322\u0320\x03\x02\x02\x02\u0323\u0326\x03\x02\x02\x02\u0324\u0322" + - "\x03\x02\x02\x02\u0324\u0325\x03\x02\x02\x02\u0325\u0328\x03\x02\x02\x02" + - "\u0326\u0324\x03\x02\x02\x02\u0327\u031F\x03\x02\x02\x02\u0327\u0328\x03" + - "\x02\x02\x02\u0328\u0329\x03\x02\x02\x02\u0329\u032A\x07E\x02\x02\u032A" + - "\xAB\x03\x02\x02\x02\u032B\u032C\x07!\x02\x02\u032C\u032D\x07)\x02\x02" + - "\u032D\u032E\x05\xAEX\x02\u032E\u032F\x07*\x02\x02\u032F\xAD\x03\x02\x02" + - "\x02\u0330\u0331\t\x10\x02\x02\u0331\xAF\x03\x02\x02\x02\u0332\u0333\x05" + - "\xA0Q\x02\u0333\u0334\x07 \x02\x02\u0334\u0335\x05\xA6T\x02\u0335\xB1" + - "\x03\x02\x02\x02M\xB3\xBA\xC1\xC6\xCE\xDA\xE6\xEC\xF3\u0100\u0107\u0111" + - "\u011D\u011F\u0127\u0130\u0136\u013B\u0146\u014B\u0156\u015F\u0169\u0176" + - "\u017B\u0181\u0185\u018B\u0191\u01A9\u01B7\u01BB\u01C3\u01D1\u01D9\u01E1" + - "\u01E5\u01EA\u01ED\u01F2\u01F5\u01FF\u0202\u0205\u020F\u0212\u0215\u0225" + - "\u022E\u0233\u0244\u0248\u024A\u0252\u0260\u0266\u026D\u0278\u0289\u0293" + - "\u029E\u02AA\u02B7\u02C2\u02CD\u02D8\u02E3\u02EE\u02F9\u0303\u030A\u0313" + - "\u0319\u0324\u0327"; + "\x03\x02\x02\x02\u02FC\u02FD\bP\x01\x02\u02FD\u02FE\x05\x9CO\x02\u02FE" + + "\u0304\x03\x02\x02\x02\u02FF\u0300\f\x03\x02\x02\u0300\u0301\x079\x02" + + "\x02\u0301\u0303\x05\x9CO\x02\u0302\u02FF\x03\x02\x02\x02\u0303\u0306" + + "\x03\x02\x02\x02\u0304\u0302\x03\x02\x02\x02\u0304\u0305\x03\x02\x02\x02" + + "\u0305\x9F\x03\x02\x02\x02\u0306\u0304\x03\x02\x02\x02\u0307\u030F\x05" + + "\x9EP\x02\u0308\u0309\x05\x9EP\x02\u0309\u030A\x07'\x02\x02\u030A\u030B" + + "\x05\xA0Q\x02\u030B\u030C\x07(\x02\x02\u030C\u030D\x05\xA0Q\x02\u030D" + + "\u030F\x03\x02\x02\x02\u030E\u0307\x03\x02\x02\x02\u030E\u0308\x03\x02" + + "\x02\x02\u030F\xA1\x03\x02\x02\x02\u0310\u0316\x05\xA0Q\x02\u0311\u0312" + + "\x05l7\x02\u0312\u0313\x05\xA4S\x02\u0313\u0314\x05\xA2R\x02\u0314\u0316" + + "\x03\x02\x02\x02\u0315\u0310\x03\x02\x02\x02\u0315\u0311\x03\x02\x02\x02" + + "\u0316\xA3\x03\x02\x02\x02\u0317\u0318\t\x0F\x02\x02\u0318\xA5\x03\x02" + + "\x02\x02\u0319\u031E\x05\xA2R\x02\u031A\u031B\x07%\x02\x02\u031B\u031D" + + "\x05\xA2R\x02\u031C\u031A\x03\x02\x02\x02\u031D\u0320\x03\x02\x02\x02" + + "\u031E\u031C\x03\x02\x02\x02\u031E\u031F\x03\x02\x02\x02\u031F\xA7\x03" + + "\x02\x02\x02\u0320\u031E\x03\x02\x02\x02\u0321\u0325\x05\xAAV\x02\u0322" + + "\u0325\x05\xACW\x02\u0323\u0325\x05\xAEX\x02\u0324\u0321\x03\x02\x02\x02" + + "\u0324\u0322\x03\x02\x02\x02\u0324\u0323\x03\x02\x02\x02\u0325\xA9\x03" + + "\x02\x02\x02\u0326\u0327\x05\xB0Y\x02\u0327\xAB\x03\x02\x02\x02\u0328" + + "\u0329\x05\xB0Y\x02\u0329\u0332\x07C\x02\x02\u032A\u032F\x05\xA8U\x02" + + "\u032B\u032C\x07%\x02\x02\u032C\u032E\x05\xA8U\x02\u032D\u032B\x03\x02" + + "\x02\x02\u032E\u0331\x03\x02\x02\x02\u032F\u032D\x03\x02\x02\x02\u032F" + + "\u0330\x03\x02\x02\x02\u0330\u0333\x03\x02\x02\x02\u0331\u032F\x03\x02" + + "\x02\x02\u0332\u032A\x03\x02\x02\x02\u0332\u0333\x03\x02\x02\x02\u0333" + + "\u0334\x03\x02\x02\x02\u0334\u0335\x07E\x02\x02\u0335\xAD\x03\x02\x02" + + "\x02\u0336\u0337\x07!\x02\x02\u0337\u0338\x07)\x02\x02\u0338\u0339\x05" + + "\xB0Y\x02\u0339\u033A\x07*\x02\x02\u033A\xAF\x03\x02\x02\x02\u033B\u033C" + + "\t\x10\x02\x02\u033C\xB1\x03\x02\x02\x02N\xB3\xBA\xC1\xC6\xCE\xDA\xE6" + + "\xEC\xF3\u0100\u0107\u0111\u011D\u011F\u0127\u0130\u0136\u013B\u0146\u014B" + + "\u0156\u015F\u0169\u0176\u017B\u0181\u0185\u018B\u0191\u01A9\u01B7\u01BB" + + "\u01C3\u01D1\u01D9\u01E1\u01E5\u01EA\u01ED\u01F2\u01F5\u01FF\u0202\u0205" + + "\u020F\u0212\u0215\u0225\u022E\u0233\u0244\u0248\u024A\u0252\u0260\u0266" + + "\u026D\u0278\u0289\u0293\u029E\u02AA\u02B7\u02C2\u02CD\u02D8\u02E3\u02EE" + + "\u02F9\u0304\u030E\u0315\u031E\u0324\u032F\u0332"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", @@ -9027,6 +9083,83 @@ export class BitwiseShiftOperatorsContext extends KipperParserRuleContext { } } +export class MatchesExpressionContext extends KipperParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { + return KipperParser.RULE_matchesExpression; + } + public copyFrom(ctx: MatchesExpressionContext): void { + super.copyFrom(ctx); + } +} +export class PassOnMatchesExpressionContext extends MatchesExpressionContext { + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); + } + constructor(ctx: MatchesExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterPassOnMatchesExpression) { + listener.enterPassOnMatchesExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitPassOnMatchesExpression) { + listener.exitPassOnMatchesExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitPassOnMatchesExpression) { + return visitor.visitPassOnMatchesExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ActualMatchesExpressionContext extends MatchesExpressionContext { + public matchesExpression(): MatchesExpressionContext { + return this.getRuleContext(0, MatchesExpressionContext); + } + public Matches(): TerminalNode { + return this.getToken(KipperParser.Matches, 0); + } + public bitwiseShiftExpression(): BitwiseShiftExpressionContext { + return this.getRuleContext(0, BitwiseShiftExpressionContext); + } + constructor(ctx: MatchesExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: KipperParserListener): void { + if (listener.enterActualMatchesExpression) { + listener.enterActualMatchesExpression(this); + } + } + // @Override + public exitRule(listener: KipperParserListener): void { + if (listener.exitActualMatchesExpression) { + listener.exitActualMatchesExpression(this); + } + } + // @Override + public accept(visitor: KipperParserVisitor): Result { + if (visitor.visitActualMatchesExpression) { + return visitor.visitActualMatchesExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + export class RelationalExpressionContext extends KipperParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); @@ -9040,8 +9173,8 @@ export class RelationalExpressionContext extends KipperParserRuleContext { } } export class PassOnRelationalExpressionContext extends RelationalExpressionContext { - public bitwiseShiftExpression(): BitwiseShiftExpressionContext { - return this.getRuleContext(0, BitwiseShiftExpressionContext); + public matchesExpression(): MatchesExpressionContext { + return this.getRuleContext(0, MatchesExpressionContext); } constructor(ctx: RelationalExpressionContext) { super(ctx.parent, ctx.invokingState); @@ -9072,8 +9205,8 @@ export class ActualRelationalExpressionContext extends RelationalExpressionConte public relationalExpression(): RelationalExpressionContext { return this.getRuleContext(0, RelationalExpressionContext); } - public bitwiseShiftExpression(): BitwiseShiftExpressionContext { - return this.getRuleContext(0, BitwiseShiftExpressionContext); + public matchesExpression(): MatchesExpressionContext { + return this.getRuleContext(0, MatchesExpressionContext); } public Less(): TerminalNode | undefined { return this.tryGetToken(KipperParser.Less, 0); @@ -10049,42 +10182,3 @@ export class TypeSpecifierIdentifierContext extends KipperParserRuleContext { } } } - -export class MatchesExpressionContext extends KipperParserRuleContext { - public assignmentExpression(): AssignmentExpressionContext { - return this.getRuleContext(0, AssignmentExpressionContext); - } - public Matches(): TerminalNode { - return this.getToken(KipperParser.Matches, 0); - } - public typeSpecifierExpression(): TypeSpecifierExpressionContext { - return this.getRuleContext(0, TypeSpecifierExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { - return KipperParser.RULE_matchesExpression; - } - // @Override - public enterRule(listener: KipperParserListener): void { - if (listener.enterMatchesExpression) { - listener.enterMatchesExpression(this); - } - } - // @Override - public exitRule(listener: KipperParserListener): void { - if (listener.exitMatchesExpression) { - listener.exitMatchesExpression(this); - } - } - // @Override - public accept(visitor: KipperParserVisitor): Result { - if (visitor.visitMatchesExpression) { - return visitor.visitMatchesExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index f6ed2c06c..1aaf44c2e 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -7,6 +7,8 @@ import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { PassOnMatchesExpressionContext } from "./KipperParser"; +import { ActualMatchesExpressionContext } from "./KipperParser"; import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; @@ -112,6 +114,7 @@ import { MultiplicativeExpressionContext } from "./KipperParser"; import { AdditiveExpressionContext } from "./KipperParser"; import { BitwiseShiftExpressionContext } from "./KipperParser"; import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { MatchesExpressionContext } from "./KipperParser"; import { RelationalExpressionContext } from "./KipperParser"; import { EqualityExpressionContext } from "./KipperParser"; import { BitwiseAndExpressionContext } from "./KipperParser"; @@ -128,13 +131,38 @@ import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; -import { MatchesExpressionContext } from "./KipperParser"; /** * This interface defines a complete listener for a parse tree produced by * `KipperParser`. */ export interface KipperParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `passOnMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + enterPassOnMatchesExpression?: (ctx: PassOnMatchesExpressionContext) => void; + /** + * Exit a parse tree produced by the `passOnMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + exitPassOnMatchesExpression?: (ctx: PassOnMatchesExpressionContext) => void; + + /** + * Enter a parse tree produced by the `actualMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + enterActualMatchesExpression?: (ctx: ActualMatchesExpressionContext) => void; + /** + * Exit a parse tree produced by the `actualMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + exitActualMatchesExpression?: (ctx: ActualMatchesExpressionContext) => void; + /** * Enter a parse tree produced by the `passOnBitwiseShiftExpression` * labeled alternative in `KipperParser.bitwiseShiftExpression`. @@ -1358,6 +1386,17 @@ export interface KipperParserListener extends ParseTreeListener { */ exitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => void; + /** + * Enter a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + enterMatchesExpression?: (ctx: MatchesExpressionContext) => void; + /** + * Exit a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + */ + exitMatchesExpression?: (ctx: MatchesExpressionContext) => void; + /** * Enter a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree @@ -1533,15 +1572,4 @@ export interface KipperParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => void; - - /** - * Enter a parse tree produced by `KipperParser.matchesExpression`. - * @param ctx the parse tree - */ - enterMatchesExpression?: (ctx: MatchesExpressionContext) => void; - /** - * Exit a parse tree produced by `KipperParser.matchesExpression`. - * @param ctx the parse tree - */ - exitMatchesExpression?: (ctx: MatchesExpressionContext) => void; } diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index 1f7d92879..a1a6c32fb 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -7,6 +7,8 @@ import KipperParserBase from "./base/KipperParserBase"; import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { PassOnMatchesExpressionContext } from "./KipperParser"; +import { ActualMatchesExpressionContext } from "./KipperParser"; import { PassOnBitwiseShiftExpressionContext } from "./KipperParser"; import { ActualBitwiseShiftExpressionContext } from "./KipperParser"; import { PassOnBitwiseAndExpressionContext } from "./KipperParser"; @@ -112,6 +114,7 @@ import { MultiplicativeExpressionContext } from "./KipperParser"; import { AdditiveExpressionContext } from "./KipperParser"; import { BitwiseShiftExpressionContext } from "./KipperParser"; import { BitwiseShiftOperatorsContext } from "./KipperParser"; +import { MatchesExpressionContext } from "./KipperParser"; import { RelationalExpressionContext } from "./KipperParser"; import { EqualityExpressionContext } from "./KipperParser"; import { BitwiseAndExpressionContext } from "./KipperParser"; @@ -128,7 +131,6 @@ import { IdentifierTypeSpecifierExpressionContext } from "./KipperParser"; import { GenericTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeofTypeSpecifierExpressionContext } from "./KipperParser"; import { TypeSpecifierIdentifierContext } from "./KipperParser"; -import { MatchesExpressionContext } from "./KipperParser"; /** * This interface defines a complete generic visitor for a parse tree produced @@ -138,6 +140,22 @@ import { MatchesExpressionContext } from "./KipperParser"; * operations with no return type. */ export interface KipperParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `passOnMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPassOnMatchesExpression?: (ctx: PassOnMatchesExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `actualMatchesExpression` + * labeled alternative in `KipperParser.matchesExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitActualMatchesExpression?: (ctx: ActualMatchesExpressionContext) => Result; + /** * Visit a parse tree produced by the `passOnBitwiseShiftExpression` * labeled alternative in `KipperParser.bitwiseShiftExpression`. @@ -907,6 +925,13 @@ export interface KipperParserVisitor extends ParseTreeVisitor { */ visitBitwiseShiftOperators?: (ctx: BitwiseShiftOperatorsContext) => Result; + /** + * Visit a parse tree produced by `KipperParser.matchesExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchesExpression?: (ctx: MatchesExpressionContext) => Result; + /** * Visit a parse tree produced by `KipperParser.relationalExpression`. * @param ctx the parse tree @@ -1018,11 +1043,4 @@ export interface KipperParserVisitor extends ParseTreeVisitor { * @return the visitor result */ visitTypeSpecifierIdentifier?: (ctx: TypeSpecifierIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `KipperParser.matchesExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMatchesExpression?: (ctx: MatchesExpressionContext) => Result; } diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 413d42907..7abe134fc 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -828,5 +828,8 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { } } - validMatchesExpression(expression: Expression, pattern: IdentifierTypeSpecifierExpression) {} + validMatchesExpression(expression: Expression, pattern: IdentifierTypeSpecifierExpression) { + const expressionType = expression.getTypeSemanticData().evaluatedType; + const patternType = pattern.getTypeSemanticData().storedType; + } } diff --git a/test/kipper-files/matches.kip b/test/kipper-files/matches.kip new file mode 100644 index 000000000..9ea83739f --- /dev/null +++ b/test/kipper-files/matches.kip @@ -0,0 +1,3 @@ +var x: str = "test"; + +var res: bool = x matches str; From 552e6eb8571aa239eac310bd9350e3a4b50b3250 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:28:08 +0200 Subject: [PATCH 14/81] [#672] minor: added index.ts --- kipper/core/src/compiler/ast/nodes/expressions/index.ts | 1 + .../ast/nodes/expressions/matches-expression/index.ts | 3 +++ .../expressions/matches-expression/matches-expression.ts | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts index eacdcd8e1..5c0a2aebc 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -21,3 +21,4 @@ export * from "./function-call-expression/"; export * from "./member-access-expression/"; export * from "./bitwise-expression/"; export * from "./new-instantiation-expression/"; +export * from "./matches-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts new file mode 100644 index 000000000..cce56dac6 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts @@ -0,0 +1,3 @@ +export * from './matches-expression'; +export * from './matches-expression-semantics'; +export * from './matches-expression-type-semantics'; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts index 977be15f8..aaf059cd5 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -95,8 +95,8 @@ export class MatchesExpression extends Expression< * the children has already failed and as such no parent node should run type checking. */ public async primarySemanticAnalysis(): Promise { - const value = this.children[0] as Expression; - const pattern = this.children[1] as IdentifierTypeSpecifierExpression; + const value: Expression = this.children[0]; + const pattern = this.children[1]; if (!value || !pattern) { throw new UnableToDetermineSemanticDataError(); From 0343b52a1f1f8751e5327fa44dfd8d95bf369fae Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:46:28 +0200 Subject: [PATCH 15/81] [#672] minor: fixed evaluated type error --- .../ast/nodes/expressions/matches-expression/index.ts | 6 +++--- .../expressions/matches-expression/matches-expression.ts | 5 +++++ test/kipper-files/matches.kip | 4 +--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts index cce56dac6..22c675858 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/index.ts @@ -1,3 +1,3 @@ -export * from './matches-expression'; -export * from './matches-expression-semantics'; -export * from './matches-expression-type-semantics'; +export * from "./matches-expression"; +export * from "./matches-expression-semantics"; +export * from "./matches-expression-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts index aaf059cd5..253cd5d93 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -16,6 +16,7 @@ import type { MatchesExpressionSemantics } from "./matches-expression-semantics" import type { MatchesExpressionTypeSemantics } from "./matches-expression-type-semantics"; import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import { BuiltInType, BuiltInTypes } from "../../../../semantics"; /** * Matches expression, which checks if a value matches a pattern. @@ -122,6 +123,10 @@ export class MatchesExpression extends Expression< const matchType = semanticData.pattern.getTypeSemanticData().storedType; this.programCtx.typeCheck(this).validMatchesExpression(semanticData.expression, semanticData.pattern); + + this.typeSemantics = { + evaluatedType: BuiltInTypes.bool, + }; } /** diff --git a/test/kipper-files/matches.kip b/test/kipper-files/matches.kip index 9ea83739f..e55878aa6 100644 --- a/test/kipper-files/matches.kip +++ b/test/kipper-files/matches.kip @@ -1,3 +1 @@ -var x: str = "test"; - -var res: bool = x matches str; +var res: bool = "test" matches str; From 1bc4919f81c02497ac6b4da0aac095f0ffa57519 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:27:16 +0200 Subject: [PATCH 16/81] [#672] minor: refactored example to use interface --- .../matches-expression/matches-expression.ts | 4 +- .../semantics/analyser/type-checker.ts | 2 +- kipper/target-js/src/code-generator.ts | 58 ++++++++++++++++++- test/kipper-files/matches.kip | 9 ++- 4 files changed, 66 insertions(+), 7 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts index 253cd5d93..3b62301f7 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -16,7 +16,7 @@ import type { MatchesExpressionSemantics } from "./matches-expression-semantics" import type { MatchesExpressionTypeSemantics } from "./matches-expression-type-semantics"; import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; -import { BuiltInType, BuiltInTypes } from "../../../../semantics"; +import { BuiltInTypes } from "../../../../semantics"; /** * Matches expression, which checks if a value matches a pattern. @@ -120,8 +120,6 @@ export class MatchesExpression extends Expression< public async primarySemanticTypeChecking(): Promise { const semanticData = this.getSemanticData(); - const matchType = semanticData.pattern.getTypeSemanticData().storedType; - this.programCtx.typeCheck(this).validMatchesExpression(semanticData.expression, semanticData.pattern); this.typeSemantics = { diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 7abe134fc..e187edec7 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -830,6 +830,6 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { validMatchesExpression(expression: Expression, pattern: IdentifierTypeSpecifierExpression) { const expressionType = expression.getTypeSemanticData().evaluatedType; - const patternType = pattern.getTypeSemanticData().storedType; + const patternType = pattern.getSemanticData().rawType; } } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index ea751754a..2ce5fd946 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -29,7 +29,7 @@ import type { FunctionDeclaration, GenericTypeSpecifierExpression, IdentifierPrimaryExpression, - IdentifierTypeSpecifierExpression, + IdentifierTypeSpecifierExpression, IdentifierTypeSpecifierExpressionSemantics, IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, InterfaceDeclaration, @@ -61,6 +61,7 @@ import type { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "@kipper/core"; +import { UndefinedConstantError } from "@kipper/core"; import { AssignmentExpression, BuiltInTypes, @@ -184,6 +185,45 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " }" + " }" + " }," + + " matches: (value, pattern) => {" + + " const valueType = __kipper.typeOf(value);" + + " const patternType = __kipper.typeOf(pattern);" + + " if (valueType === patternType) {" + + " return true;" + + " }" + + " if (valueType === __kipper.builtIn.str && patternType === __kipper.builtIn.str) {" + + " return 'yes';" + + " }" + + " if (!valueType.isCompatibleWith(patternType)) { return false; }" + + " if (patternType.fields && Array.isArray(patternType.fields)) {" + + " for (const field of patternType.fields) {" + + " const { name, type } = field;" + + " if (!(name in value)) { return false; }" + + " const fieldValue = value[name];" + + " const fieldValueType = __kipper.typeOf(fieldValue);" + + " if (!fieldValueType.isCompatibleWith(type)) { return false; }" + + " if (type instanceof __kipper.Type || type instanceof __kipper.KipperGenericType) {" + + " if (!__kipper.match(fieldValue, type)) { return false; }" + + " }" + + " }" + + " }" + + " if (patternType.methods && Array.isArray(patternType.methods)) {" + + " for (const method of patternType.methods) {" + + " const { name, returnType, parameters } = method;" + + " if (!(name in value) || typeof value[name] !== 'function') { return false; }" + + " const methodValue = value[name];" + + " const methodValueType = __kipper.typeOf(methodValue);" + + " if (!methodValueType.isCompatibleWith(returnType)) { return false; }" + + " if (parameters && Array.isArray(parameters)) {" + + " for (let i = 0; i < parameters.length; i++) {" + + " const paramType = parameters[i];" + + " if (!methodValueType.genericArgs.T[i].isCompatibleWith(paramType)) { return false; }" + + " }" + + " }" + + " }" + + " }" + + " return true;" + + " }," + inlinedRequirements + " };" + "};", @@ -1102,6 +1142,20 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { * Translates a {@link MatchesExpression} into the JavaScript language. */ matchesExpression = async (node: MatchesExpression): Promise => { - return []; + const semanticData = node.getSemanticData(); + + // Get the patterns name + const pattern = semanticData.pattern.getSemanticData(); + + const expression = semanticData.expression.getSemanticData(); + + return [ + TargetJS.getBuiltInIdentifier("matches"), + "(", + ...expression.identifier, + ", ", + TargetJS.getBuiltInIdentifier(pattern.identifier), + ")" + ]; }; } diff --git a/test/kipper-files/matches.kip b/test/kipper-files/matches.kip index e55878aa6..01956d191 100644 --- a/test/kipper-files/matches.kip +++ b/test/kipper-files/matches.kip @@ -1 +1,8 @@ -var res: bool = "test" matches str; +interface X { + y: str; + z: num; +} + +var x: X = {y: "hello", z: 5}; +var res: bool = x matches X; +print(res); From e2d9dcb7223e92b6385b2b149ab947beeb042b74 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Fri, 6 Sep 2024 15:39:21 +0200 Subject: [PATCH 17/81] [#672] minor: fixed nested interface runtime type generation --- kipper/target-js/src/code-generator.ts | 33 ++++++++++++++------------ test/kipper-files/matches.kip | 17 +++++++++++-- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 2ce5fd946..51ed0bebf 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -2,7 +2,7 @@ * The JavaScript target-specific code generator for translating Kipper code into JavaScript. * @since 0.10.0 */ -import type { +import { AdditiveExpression, ArrayPrimaryExpression, BitwiseAndExpression, @@ -11,7 +11,7 @@ import type { BitwiseOrExpression, BitwiseShiftExpression, BitwiseXorExpression, - BoolPrimaryExpression, + BoolPrimaryExpression, BuiltInType, BuiltInTypeType, CastOrConvertExpression, ClassConstructorDeclaration, ClassDeclaration, @@ -29,7 +29,7 @@ import type { FunctionDeclaration, GenericTypeSpecifierExpression, IdentifierPrimaryExpression, - IdentifierTypeSpecifierExpression, IdentifierTypeSpecifierExpressionSemantics, + IdentifierTypeSpecifierExpression, IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, InterfaceDeclaration, @@ -55,13 +55,12 @@ import type { TangledPrimaryExpression, TranslatedCodeLine, TranslatedCodeToken, - TranslatedExpression, + TranslatedExpression, TypeError, TypeofExpression, TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "@kipper/core"; -import { UndefinedConstantError } from "@kipper/core"; import { AssignmentExpression, BuiltInTypes, @@ -188,12 +187,6 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " matches: (value, pattern) => {" + " const valueType = __kipper.typeOf(value);" + " const patternType = __kipper.typeOf(pattern);" + - " if (valueType === patternType) {" + - " return true;" + - " }" + - " if (valueType === __kipper.builtIn.str && patternType === __kipper.builtIn.str) {" + - " return 'yes';" + - " }" + " if (!valueType.isCompatibleWith(patternType)) { return false; }" + " if (patternType.fields && Array.isArray(patternType.fields)) {" + " for (const field of patternType.fields) {" + @@ -259,9 +252,19 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { if (member instanceof InterfacePropertyDeclaration) { const property = member.getSemanticData(); const type = member.getTypeSemanticData(); - const runtimeType = TargetJS.getRuntimeType(type.valueType); - propertiesWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", ${runtimeType}),`; + + console.log(property.type.identifier); + console.log(type.valueType instanceof BuiltInType); + + if (type.valueType instanceof BuiltInType) { + const runtimeType = TargetJS.getRuntimeType(type.valueType); + propertiesWithTypes += + `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", ${runtimeType}),`; + } + else{ + propertiesWithTypes += + `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", __intf_${type.valueType}),`; + } } if (member instanceof InterfaceMethodDeclaration) { const method = member.getSemanticData(); @@ -1154,7 +1157,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { "(", ...expression.identifier, ", ", - TargetJS.getBuiltInIdentifier(pattern.identifier), + `__intf_${pattern.identifier}`, ")" ]; }; diff --git a/test/kipper-files/matches.kip b/test/kipper-files/matches.kip index 01956d191..ce9aadd78 100644 --- a/test/kipper-files/matches.kip +++ b/test/kipper-files/matches.kip @@ -1,8 +1,21 @@ +interface Y { + v: bool; + t(): num; +} + interface X { - y: str; + y: Y; z: num; } -var x: X = {y: "hello", z: 5}; +var x: X = { + y: { + v: true, + t: (): num -> { + return 0; + } + }, + z: 5 +}; var res: bool = x matches X; print(res); From a2270fecf0002d53596ef41049da1e7da33357c4 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:22:46 +0200 Subject: [PATCH 18/81] [#672] minor: fixed function runtime type generation --- kipper/target-js/src/code-generator.ts | 40 ++++++++++++++------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 51ed0bebf..48ceb0e37 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -2,7 +2,7 @@ * The JavaScript target-specific code generator for translating Kipper code into JavaScript. * @since 0.10.0 */ -import { +import type { AdditiveExpression, ArrayPrimaryExpression, BitwiseAndExpression, @@ -11,7 +11,7 @@ import { BitwiseOrExpression, BitwiseShiftExpression, BitwiseXorExpression, - BoolPrimaryExpression, BuiltInType, BuiltInTypeType, + BoolPrimaryExpression, CastOrConvertExpression, ClassConstructorDeclaration, ClassDeclaration, @@ -55,12 +55,13 @@ import { TangledPrimaryExpression, TranslatedCodeLine, TranslatedCodeToken, - TranslatedExpression, TypeError, + TranslatedExpression, TypeofExpression, TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "@kipper/core"; +import { BuiltInType, BuiltInTypeType, TypeError } from "@kipper/core"; import { AssignmentExpression, BuiltInTypes, @@ -77,6 +78,7 @@ import { import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; import type { MatchesExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/matches-expression/matches-expression"; +import * as console from "node:console"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -253,32 +255,32 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { const property = member.getSemanticData(); const type = member.getTypeSemanticData(); - console.log(property.type.identifier); - console.log(type.valueType instanceof BuiltInType); - if (type.valueType instanceof BuiltInType) { const runtimeType = TargetJS.getRuntimeType(type.valueType); propertiesWithTypes += `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", ${runtimeType}),`; - } - else{ + } else { propertiesWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", __intf_${type.valueType}),`; + `new ${TargetJS.getBuiltInIdentifier("Property")}` + + `("${property.identifier}", __intf_${type.valueType}),`; } } + if (member instanceof InterfaceMethodDeclaration) { const method = member.getSemanticData(); - const returnType = member.getTypeSemanticData(); - const params = method.parameters.map((param) => { - return param.getTypeSemanticData().valueType; - }); - const runtimeReturnType = TargetJS.getRuntimeType(returnType.valueType); - const runtimeParams = params.map((paramType) => { - return `__intf_${TargetJS.getRuntimeType(paramType)}`; + const methodName = method.identifier; + const returnType = method.returnType.getTypeSemanticData().storedType; + const runtimeReturnType = TargetJS.getRuntimeType(returnType); + + const parametersArray = method.parameters.map((param) => { + const type = param.getTypeSemanticData().storedType; + const name = param.getSemanticData().identifier; + return `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${name}", ${TargetJS.getRuntimeType(type)})`; }); + const parameters = parametersArray.length > 0 ? `[${parametersArray.join(", ")}]` : "[]"; + functionsWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Method")}` + - `("${method.identifier}", ${runtimeReturnType}, [${runtimeParams.join(",")}]),`; + `new ${TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${parameters})`; } } @@ -1158,7 +1160,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { ...expression.identifier, ", ", `__intf_${pattern.identifier}`, - ")" + ")", ]; }; } From 7c6329bc85286041bd0fb79dd6161e2884b647a6 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:52:57 +0200 Subject: [PATCH 19/81] [#672] minor: added better matches function --- kipper/target-js/src/code-generator.ts | 73 ++++++++++++++------------ 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 48ceb0e37..f76b9aa07 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -186,39 +186,46 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " }" + " }" + " }," + - " matches: (value, pattern) => {" + - " const valueType = __kipper.typeOf(value);" + - " const patternType = __kipper.typeOf(pattern);" + - " if (!valueType.isCompatibleWith(patternType)) { return false; }" + - " if (patternType.fields && Array.isArray(patternType.fields)) {" + - " for (const field of patternType.fields) {" + - " const { name, type } = field;" + - " if (!(name in value)) { return false; }" + - " const fieldValue = value[name];" + - " const fieldValueType = __kipper.typeOf(fieldValue);" + - " if (!fieldValueType.isCompatibleWith(type)) { return false; }" + - " if (type instanceof __kipper.Type || type instanceof __kipper.KipperGenericType) {" + - " if (!__kipper.match(fieldValue, type)) { return false; }" + - " }" + - " }" + - " }" + - " if (patternType.methods && Array.isArray(patternType.methods)) {" + - " for (const method of patternType.methods) {" + - " const { name, returnType, parameters } = method;" + - " if (!(name in value) || typeof value[name] !== 'function') { return false; }" + - " const methodValue = value[name];" + - " const methodValueType = __kipper.typeOf(methodValue);" + - " if (!methodValueType.isCompatibleWith(returnType)) { return false; }" + - " if (parameters && Array.isArray(parameters)) {" + - " for (let i = 0; i < parameters.length; i++) {" + - " const paramType = parameters[i];" + - " if (!methodValueType.genericArgs.T[i].isCompatibleWith(paramType)) { return false; }" + - " }" + - " }" + - " }" + - " }" + - " return true;" + - " }," + + "matches: (value, pattern) => {" + + " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " if (pattern.fields && Array.isArray(pattern.fields)) {" + + " for (const field of pattern.fields) {" + + " const fieldName = field.name;" + + " const fieldType = field.type;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + + " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + + " return false;" + + " }" + + " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + + " if (!__kipper.matches(fieldValue, fieldType)) {" + + " return false;" + + " }" + + " }" + + " }" + + " }" + + " if (pattern.methods && Array.isArray(pattern.methods)) {" + + " for (const field of pattern.methods) {" + + " const fieldName = field.name;" + + " const fieldReturnType = field.returnType;" + + " const parameters = field.parameters;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " if (!isSameType) {" + + " return false;" + + " }" + + " }" + + " }" + + " return true;" + + " }," + inlinedRequirements + " };" + "};", From dc16eec7b6e1b2e354192331b9997713736f2913 Mon Sep 17 00:00:00 2001 From: rat Date: Sat, 7 Sep 2024 15:50:53 +0200 Subject: [PATCH 20/81] fix (#686): Fixed invalid instanceof ast-generator function name. --- kipper/core/src/compiler/ast/ast-generator.ts | 20 +++++++++---------- .../compiler/ast/mapping/ast-node-mapper.ts | 2 +- .../relational-expression/index.ts | 1 - .../compiler/ast/nodes/expressions/index.ts | 1 + .../instanceof-expression/index.ts | 0 .../instanceof-expression-semantics.ts | 2 +- .../instanceof-expression-type-semantics.ts | 4 ++-- .../instanceof-expression.ts | 10 +++++----- .../translation/code-generator.ts | 2 +- kipper/target-js/src/code-generator.ts | 3 +-- 10 files changed, 22 insertions(+), 23 deletions(-) rename kipper/core/src/compiler/ast/nodes/expressions/{comparative-expression/relational-expression => }/instanceof-expression/index.ts (100%) rename kipper/core/src/compiler/ast/nodes/expressions/{comparative-expression/relational-expression => }/instanceof-expression/instanceof-expression-semantics.ts (51%) rename kipper/core/src/compiler/ast/nodes/expressions/{comparative-expression/relational-expression => }/instanceof-expression/instanceof-expression-type-semantics.ts (71%) rename kipper/core/src/compiler/ast/nodes/expressions/{comparative-expression/relational-expression => }/instanceof-expression/instanceof-expression.ts (89%) diff --git a/kipper/core/src/compiler/ast/ast-generator.ts b/kipper/core/src/compiler/ast/ast-generator.ts index 7da81f087..7fb6e6780 100644 --- a/kipper/core/src/compiler/ast/ast-generator.ts +++ b/kipper/core/src/compiler/ast/ast-generator.ts @@ -265,16 +265,6 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi // Expression section // ------------------------------------------------------------------------------------------------------------------- - /** - * Enter a parse tree produced by `KipperParser.instanceOfExpression`. - */ - public enterInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void = this.handleEnteringTreeNode; - - /** - * Exit a parse tree produced by `KipperParser.instanceOfExpression`. - */ - public exitInstanceOfExpression?: (ctx: InstanceOfExpressionContext) => void = this.handleExitingTreeNode; - /** * Enter a parse tree produced by `KipperParser.identifierPrimaryExpression`. * @param ctx The parse tree (instance of {@link KipperParserRuleContext}). @@ -623,6 +613,16 @@ export class KipperFileASTGenerator implements KipperParserListener, ParseTreeLi */ public exitActualAdditiveExpression: (ctx: ActualAdditiveExpressionContext) => void = this.handleExitingTreeNode; + /** + * Enter a parse tree produced by `KipperParser.instanceOfExpression`. + */ + public enterActualInstanceOfExpression: (ctx: InstanceOfExpressionContext) => void = this.handleEnteringTreeNode; + + /** + * Exit a parse tree produced by `KipperParser.instanceOfExpression`. + */ + public exitActualInstanceOfExpression: (ctx: InstanceOfExpressionContext) => void = this.handleExitingTreeNode; + // NOTE: // We are ignoring the 'relationalExpression' rule, and only going to handle the rule // 'actualRelationalExpression', which implements a more precise 'relationalExpression' rule. diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index c7facac15..af686c3a5 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -127,7 +127,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; -import { InstanceofExpression } from "../nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; +import { InstanceofExpression } from "../nodes/expressions/instanceof-expression/instanceof-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts index a102c36f1..15d259d3d 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/index.ts @@ -5,4 +5,3 @@ export * from "./relational-expression"; export * from "./relational-expression-semantics"; export * from "./relational-expression-type-semantics"; -export * from "./instanceof-expression"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/index.ts index eacdcd8e1..031fd7521 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/index.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/index.ts @@ -21,3 +21,4 @@ export * from "./function-call-expression/"; export * from "./member-access-expression/"; export * from "./bitwise-expression/"; export * from "./new-instantiation-expression/"; +export * from "./instanceof-expression/"; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/index.ts similarity index 100% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/index.ts rename to kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/index.ts diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts similarity index 51% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts index 401031b37..151b48afe 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts @@ -1,3 +1,3 @@ -import type { ExpressionSemantics } from "../../../expression-semantics"; +import type { ExpressionSemantics } from "../expression-semantics"; export interface InstanceofExpressionSemantics extends ExpressionSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts similarity index 71% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts rename to kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts index 1952232a2..f2a40b20e 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts @@ -1,5 +1,5 @@ -import type { ExpressionTypeSemantics } from "../../../expression-type-semantics"; -import type { CustomType } from "../../../../../../semantics"; +import type { ExpressionTypeSemantics } from "../expression-type-semantics"; +import type { CustomType } from "../../../../semantics"; export interface InstanceofExpressionTypeSemantics extends ExpressionTypeSemantics { /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts similarity index 89% rename from kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts rename to kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts index fdf76ad91..ffb0af723 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts @@ -1,10 +1,10 @@ -import type { TargetASTNodeSemanticAnalyser } from "../../../../../../target-presets"; -import { Expression } from "../../../expression"; +import type { TargetASTNodeSemanticAnalyser } from "../../../../target-presets"; +import { Expression } from "../expression"; import type { InstanceofExpressionSemantics } from "./instanceof-expression-semantics"; import type { InstanceofExpressionTypeSemantics } from "./instanceof-expression-type-semantics"; -import type { InstanceOfExpressionContext } from "../../../../../../lexer-parser"; -import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../lexer-parser"; -import type { CompilableASTNode } from "../../../../../compilable-ast-node"; +import type { InstanceOfExpressionContext } from "../../../../lexer-parser"; +import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; +import type { CompilableASTNode } from "../../../compilable-ast-node"; export class InstanceofExpression extends Expression { /** diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 944f7f5b2..760d68fb3 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -60,7 +60,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import type { InstanceofExpression } from "../../ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; +import type { InstanceofExpression } from "../../ast/nodes/expressions/instanceof-expression/instanceof-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 59fe02e2c..77f71b736 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -53,7 +53,6 @@ import type { StringPrimaryExpression, SwitchStatement, TangledPrimaryExpression, - TargetASTNodeCodeGenerator, TranslatedCodeLine, TranslatedCodeToken, TranslatedExpression, @@ -61,6 +60,7 @@ import type { TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, + InstanceofExpression, } from "@kipper/core"; import { AssignmentExpression, @@ -77,7 +77,6 @@ import { } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { TargetJS, version } from "./index"; -import type { InstanceofExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/comparative-expression/relational-expression/instanceof-expression/instanceof-expression"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); From 41c09ff126a29e58c62d523fddde9ca6e6adf80f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 18:28:01 +0200 Subject: [PATCH 21/81] other: Added additional compile and run scripts --- .run/kipper compile (js).run.xml | 5 +++++ .run/kipper compile (ts).run.xml | 5 +++++ .run/kipper compile.run.xml | 5 ----- .run/kipper run (js).run.xml | 5 +++++ .run/kipper run (ts).run.xml | 5 +++++ .run/kipper run.run.xml | 5 ----- 6 files changed, 20 insertions(+), 10 deletions(-) create mode 100644 .run/kipper compile (js).run.xml create mode 100644 .run/kipper compile (ts).run.xml delete mode 100644 .run/kipper compile.run.xml create mode 100644 .run/kipper run (js).run.xml create mode 100644 .run/kipper run (ts).run.xml delete mode 100644 .run/kipper run.run.xml diff --git a/.run/kipper compile (js).run.xml b/.run/kipper compile (js).run.xml new file mode 100644 index 000000000..78a6773dc --- /dev/null +++ b/.run/kipper compile (js).run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.run/kipper compile (ts).run.xml b/.run/kipper compile (ts).run.xml new file mode 100644 index 000000000..6182a4ba6 --- /dev/null +++ b/.run/kipper compile (ts).run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.run/kipper compile.run.xml b/.run/kipper compile.run.xml deleted file mode 100644 index 3ffd8fe5f..000000000 --- a/.run/kipper compile.run.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.run/kipper run (js).run.xml b/.run/kipper run (js).run.xml new file mode 100644 index 000000000..f0ca8ab98 --- /dev/null +++ b/.run/kipper run (js).run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.run/kipper run (ts).run.xml b/.run/kipper run (ts).run.xml new file mode 100644 index 000000000..0ea513a5d --- /dev/null +++ b/.run/kipper run (ts).run.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/.run/kipper run.run.xml b/.run/kipper run.run.xml deleted file mode 100644 index 1c8bd0784..000000000 --- a/.run/kipper run.run.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From 8dd28a6486d158d178db339b6ad57619c9f015a7 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 19:59:20 +0200 Subject: [PATCH 22/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 5 +++ .../new-instantiation-expression.ts | 36 ++++++++++--------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4daa1897b..beb765c23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ To use development versions of Kipper download the - `semantics/runtime-internals`, which contains the runtime internal functions. - `semantics/types`, which contains the runtime types. - New classes: + - `NewInstantiationExpression`, which represents an AST new instantiation expression. - `TypeofExpression`, which represents an AST typeof expression that returns the runtime type of an object. - `TypeofTypeSpecifierExpression`, which represents an AST typeof type specifier that lets one define a type by using an object as reference - `BuiltInTypeObject`, which is the base class for the compilers representation of runtime objects @@ -109,6 +110,10 @@ To use development versions of Kipper download the - `CompilableType`, which represents a type that can be compiled. - `BuiltInReference`, which replaces the now removed type `Reference` in the `KipperProgramContext` for reference tracking of built-in types. + - `NewInstantiationExpressionSemantics`, which represents the semantics of a new instantiation expression. + - `NewInstantiationExpressionTypeSemantics`, which represents the type semantics of a new instantiation expression. + - `TypeofExpressionSemantics`, which represents the semantics of a typeof expression. + - `TypeofExpressionTypeSemantics`, which represents the type semantics of a typeof expression. - New functions: - `KipperTypeChecker.validArrayExpression`, which ensures that an array expression is valid. - `generateInterfaceRuntimeTypeChecks` which generates runtime type checks for an interface. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts index 86d9ee243..b72ce7b4e 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/new-instantiation-expression/new-instantiation-expression.ts @@ -8,19 +8,21 @@ import type { CompilableASTNode } from "../../../compilable-ast-node"; import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +/** + * New instantiation expressions, which are used to create a new instance of a class. + * @since 0.12.0 + */ export class NewInstantiationExpression extends Expression< NewInstantiationExpressionSemantics, NewInstantiationExpressionTypeSemantics > { /** * The static kind for this AST Node. - * @since 0.11.0 */ public static readonly kind = ParseRuleKindMapping.RULE_newInstantiationExpression; /** * The static rule name for this AST Node. - * @since 0.11.0 */ public static readonly ruleName = KindParseRuleMapping[this.kind]; @@ -34,9 +36,24 @@ export class NewInstantiationExpression extends Expression< public get kind(): ASTExpressionKind { return NewInstantiationExpression.kind; } + public get ruleName(): ASTExpressionRuleName { return NewInstantiationExpression.ruleName; } + + public async primarySemanticTypeChecking?(): Promise { + const typeSepcifier = this.semanticData!.class.getTypeSemanticData().storedType; + + this.typeSemantics = { + evaluatedType: typeSepcifier, + }; + } + + constructor(antlrRuleCtx: NewInstantiationExpressionContext, parent: CompilableASTNode) { + super(antlrRuleCtx, parent); + this._antlrRuleCtx = antlrRuleCtx; + } + public async primarySemanticAnalysis?(): Promise { const children = this.children; @@ -53,20 +70,7 @@ export class NewInstantiationExpression extends Expression< }; } - public async primarySemanticTypeChecking?(): Promise { - const typeSepcifier = this.semanticData!.class.getTypeSemanticData().storedType; - - this.typeSemantics = { - evaluatedType: typeSepcifier, - }; - } - - constructor(antlrRuleCtx: NewInstantiationExpressionContext, parent: CompilableASTNode) { - super(antlrRuleCtx, parent); - this._antlrRuleCtx = antlrRuleCtx; - } - public checkForWarnings = undefined; public targetCodeGenerator = this.codeGenerator.newInstantiationExpression; - targetSemanticAnalysis = this.semanticAnalyser.newInstantiationExpression; + public targetSemanticAnalysis = this.semanticAnalyser.newInstantiationExpression; } From 0e4467384d15f4ce00f9533e6deadb0ab2e762f9 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:07:23 +0200 Subject: [PATCH 23/81] release: Bumped Kipper project version to 0.12.0-alpha.2 --- CITATION.cff | 4 ++-- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 13352f3af..e13dda0fb 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -13,7 +13,7 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.1 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.2 description: The GitHub release URL of tag 0.12.0-alpha.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' @@ -31,6 +31,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/LICENSE' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/LICENSE' version: 0.12.0-alpha.0 date-released: '2024-07-01' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 7088c6b71..d1b786ba7 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 402415fa1..4656e33f6 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 5d04c8186..558017688 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index c4867a806..91b429ee6 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 336ef6ca5..b69d864c2 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 004db3b08..b723fa1ae 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.1"; +export const version = "0.12.0-alpha.2"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 638f1372ca05361c1227b339e1613d8e7a1f2c30 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:08:31 +0200 Subject: [PATCH 24/81] Release 0.12.0-alpha.2 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 77017132e..196804b29 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.1 linux-x64 node-v18.18.2 +@kipper/cli/0.12.0-alpha.2 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.1/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 84758d5a3..d9e63342c 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 3d28486cc..0c97144d3 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 568ebed9c..87a1b8247 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 7304ef8a0..1614b729c 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 0973653f7..8d4894fdb 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 8fc7b3c3a..947949e90 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 43bbecf53..e3dc56050 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.1", + "version": "0.12.0-alpha.2", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 0b7bd5d3c553caa14b60c125abb3d5def0008a0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 18:38:57 +0000 Subject: [PATCH 25/81] chore(deps): update dependency @types/node to v20.16.5 --- kipper/cli/package.json | 2 +- kipper/cli/pnpm-lock.yaml | 69 +++++++++++++++++---------------- kipper/core/package.json | 2 +- kipper/core/pnpm-lock.yaml | 14 +++---- kipper/target-js/package.json | 2 +- kipper/target-js/pnpm-lock.yaml | 14 +++++-- kipper/target-ts/package.json | 2 +- kipper/target-ts/pnpm-lock.yaml | 14 +++++-- kipper/web/package.json | 2 +- kipper/web/pnpm-lock.yaml | 14 +++++-- package.json | 2 +- pnpm-lock.yaml | 37 +++++++++++------- 12 files changed, 101 insertions(+), 73 deletions(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index d9e63342c..41312bdd8 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -25,7 +25,7 @@ "inquirer": "7.3.3" }, "devDependencies": { - "@types/node": "20.14.9", + "@types/node": "20.16.5", "@types/sinon": "17.0.3", "@types/inquirer": "7.3.3", "@sinonjs/fake-timers": "11.2.2", diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index ca326edc6..931c7b295 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -34,7 +34,7 @@ dependencies: version: 3.3.1 '@oclif/plugin-warn-if-update-available': specifier: 2.0.37 - version: 2.0.37(@types/node@20.14.9)(typescript@5.1.3) + version: 2.0.37(@types/node@20.16.5)(typescript@5.1.3) chalk: specifier: 4.1.2 version: 4.1.2 @@ -43,7 +43,7 @@ dependencies: version: 7.3.3 ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@20.14.9)(typescript@5.1.3) + version: 10.9.2(@types/node@20.16.5)(typescript@5.1.3) tslib: specifier: ~2.6.2 version: 2.6.2 @@ -57,7 +57,7 @@ devDependencies: version: 1.26.2 '@oclif/test': specifier: 2.5.6 - version: 2.5.6(@types/node@20.14.9)(typescript@5.1.3) + version: 2.5.6(@types/node@20.16.5)(typescript@5.1.3) '@sinonjs/fake-timers': specifier: 11.2.2 version: 11.2.2 @@ -65,8 +65,8 @@ devDependencies: specifier: 7.3.3 version: 7.3.3 '@types/node': - specifier: 20.14.9 - version: 20.14.9 + specifier: 20.16.5 + version: 20.16.5 '@types/sinon': specifier: 17.0.3 version: 17.0.3 @@ -78,7 +78,7 @@ devDependencies: version: 3.0.2 oclif: specifier: 3.4.6 - version: 3.4.6(@types/node@20.14.9)(typescript@5.1.3) + version: 3.4.6(@types/node@20.16.5)(typescript@5.1.3) os-tmpdir: specifier: 2.0.0 version: 2.0.0 @@ -502,7 +502,7 @@ packages: wrap-ansi: 7.0.0 dev: true - /@oclif/core@2.16.0(@types/node@20.14.9)(typescript@5.1.3): + /@oclif/core@2.16.0(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-dL6atBH0zCZl1A1IXCKJgLPrM/wR7K+Wi401E/IvqsK8m2iCHW+0TEOGrans/cuN3oTW+uxIyJFHJ8Im0k4qBw==} engines: {node: '>=14.0.0'} dependencies: @@ -529,7 +529,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.2.0 - ts-node: 10.9.2(@types/node@20.14.9)(typescript@5.1.3) + ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.1.3) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -611,11 +611,11 @@ packages: - supports-color dev: false - /@oclif/plugin-help@5.2.20(@types/node@20.14.9)(typescript@5.1.3): + /@oclif/plugin-help@5.2.20(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.16.0(@types/node@20.14.9)(typescript@5.1.3) + '@oclif/core': 2.16.0(@types/node@20.16.5)(typescript@5.1.3) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -623,11 +623,11 @@ packages: - typescript dev: true - /@oclif/plugin-not-found@2.4.3(@types/node@20.14.9)(typescript@5.1.3): + /@oclif/plugin-not-found@2.4.3(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.16.0(@types/node@20.14.9)(typescript@5.1.3) + '@oclif/core': 2.16.0(@types/node@20.16.5)(typescript@5.1.3) chalk: 4.1.2 fast-levenshtein: 3.0.0 transitivePeerDependencies: @@ -637,11 +637,11 @@ packages: - typescript dev: true - /@oclif/plugin-warn-if-update-available@2.0.37(@types/node@20.14.9)(typescript@5.1.3): + /@oclif/plugin-warn-if-update-available@2.0.37(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-rfDNvplwgiwV+QSV4JU96ypmWgNJ6Hk5FEAEAKzqF0v0J8AHwZGpwwYO/MCZSkbc7bfYpkqLx/sxjpMO6j6PmQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.16.0(@types/node@20.14.9)(typescript@5.1.3) + '@oclif/core': 2.16.0(@types/node@20.16.5)(typescript@5.1.3) chalk: 4.1.2 debug: 4.3.5(supports-color@8.1.1) fs-extra: 9.1.0 @@ -660,11 +660,11 @@ packages: engines: {node: '>=12.0.0'} dev: true - /@oclif/test@2.5.6(@types/node@20.14.9)(typescript@5.1.3): + /@oclif/test@2.5.6(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-AcusFApdU6/akXaofhBDrY4IM9uYzlOD9bYCCM0NwUXOv1m6320hSp2DT/wkj9H1gsvKbJXZHqgtXsNGZTWLFg==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.16.0(@types/node@20.14.9)(typescript@5.1.3) + '@oclif/core': 2.16.0(@types/node@20.16.5)(typescript@5.1.3) fancy-test: 2.0.42 transitivePeerDependencies: - '@swc/core' @@ -885,7 +885,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.14.9 + '@types/node': 20.16.5 '@types/responselike': 1.0.3 dev: true @@ -896,7 +896,7 @@ packages: /@types/cli-progress@3.11.0: resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.16.5 /@types/expect@1.20.4: resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} @@ -916,7 +916,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.16.5 dev: true /@types/lodash@4.17.6: @@ -931,10 +931,10 @@ packages: resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} dev: true - /@types/node@20.14.9: - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -943,7 +943,7 @@ packages: /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.16.5 dev: true /@types/sinon@17.0.3: @@ -959,14 +959,14 @@ packages: /@types/through@0.0.33: resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} dependencies: - '@types/node': 20.14.9 + '@types/node': 20.16.5 dev: true /@types/vinyl@2.0.12: resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.14.9 + '@types/node': 20.16.5 dev: true /abbrev@1.1.1: @@ -1818,7 +1818,7 @@ packages: dependencies: '@types/chai': 4.3.16 '@types/lodash': 4.17.6 - '@types/node': 20.14.9 + '@types/node': 20.16.5 '@types/sinon': 17.0.3 lodash: 4.17.21 mock-stdin: 1.0.0 @@ -3266,14 +3266,14 @@ packages: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - /oclif@3.4.6(@types/node@20.14.9)(typescript@5.1.3): + /oclif@3.4.6(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-YyGMDil2JpfC9OcB76Gtcd5LqwwOeAgb8S7mVHf/6Qecjqor8QbbvcSwZvB1e1TqjlD1JUhDPqBiFeVe/WOdWg==} engines: {node: '>=12.0.0'} dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-help': 5.2.20(@types/node@20.14.9)(typescript@5.1.3) - '@oclif/plugin-not-found': 2.4.3(@types/node@20.14.9)(typescript@5.1.3) - '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@20.14.9)(typescript@5.1.3) + '@oclif/plugin-help': 5.2.20(@types/node@20.16.5)(typescript@5.1.3) + '@oclif/plugin-not-found': 2.4.3(@types/node@20.16.5)(typescript@5.1.3) + '@oclif/plugin-warn-if-update-available': 2.0.37(@types/node@20.16.5)(typescript@5.1.3) aws-sdk: 2.1648.0 concurrently: 7.6.0 debug: 4.3.5(supports-color@8.1.1) @@ -4299,8 +4299,9 @@ packages: resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} dev: true - /ts-node@10.9.2(@types/node@20.14.9)(typescript@5.1.3): + /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -4317,7 +4318,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.14.9 + '@types/node': 20.16.5 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -4380,8 +4381,8 @@ packages: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} /unique-filename@1.1.1: resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} diff --git a/kipper/core/package.json b/kipper/core/package.json index 87a1b8247..7f0478e3d 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -8,7 +8,7 @@ "tslib": "~2.6.2" }, "devDependencies": { - "@types/node": "20.14.9", + "@types/node": "20.16.5", "typescript": "5.1.3", "prettier": "3.3.3", "size-limit": "11.1.4", diff --git a/kipper/core/pnpm-lock.yaml b/kipper/core/pnpm-lock.yaml index 5b76e2ef3..c57637acc 100644 --- a/kipper/core/pnpm-lock.yaml +++ b/kipper/core/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: devDependencies: '@types/node': - specifier: 20.14.9 - version: 20.14.9 + specifier: 20.16.5 + version: 20.16.5 antlr4ts-cli: specifier: ^0.5.0-alpha.4 version: 0.5.0-alpha.4 @@ -57,10 +57,10 @@ packages: engines: {node: '>=18'} dev: true - /@types/node@20.14.9: - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 dev: true /antlr4ts-cli@0.5.0-alpha.4: @@ -299,8 +299,8 @@ packages: engines: {node: '>=14.17'} dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} dev: true /unicorn-magic@0.1.0: diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 1614b729c..10961954e 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -8,7 +8,7 @@ "tslib": "~2.6.2" }, "devDependencies": { - "@types/node": "18.16.16", + "@types/node": "20.16.5", "typescript": "5.1.3", "prettier": "3.3.3" }, diff --git a/kipper/target-js/pnpm-lock.yaml b/kipper/target-js/pnpm-lock.yaml index 988078785..ff12758ea 100644 --- a/kipper/target-js/pnpm-lock.yaml +++ b/kipper/target-js/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: devDependencies: '@types/node': - specifier: 18.16.16 - version: 18.16.16 + specifier: 20.16.5 + version: 20.16.5 prettier: specifier: 3.3.3 version: 3.3.3 @@ -25,8 +25,10 @@ devDependencies: packages: - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 dev: true /prettier@3.3.3: @@ -42,3 +44,7 @@ packages: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true + + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 8d4894fdb..8d2c6481e 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -9,7 +9,7 @@ "tslib": "~2.6.2" }, "devDependencies": { - "@types/node": "18.16.16", + "@types/node": "20.16.5", "typescript": "5.1.3", "prettier": "3.3.3" }, diff --git a/kipper/target-ts/pnpm-lock.yaml b/kipper/target-ts/pnpm-lock.yaml index a140032c6..50bddf86d 100644 --- a/kipper/target-ts/pnpm-lock.yaml +++ b/kipper/target-ts/pnpm-lock.yaml @@ -17,8 +17,8 @@ dependencies: devDependencies: '@types/node': - specifier: 18.16.16 - version: 18.16.16 + specifier: 20.16.5 + version: 20.16.5 prettier: specifier: 3.3.3 version: 3.3.3 @@ -28,8 +28,10 @@ devDependencies: packages: - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 dev: true /prettier@3.3.3: @@ -45,3 +47,7 @@ packages: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true + + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true diff --git a/kipper/web/package.json b/kipper/web/package.json index 947949e90..a02822967 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -7,7 +7,7 @@ "@kipper/target-js": "workspace:~", "@kipper/target-ts": "workspace:~", "@kipper/core": "workspace:~", - "@types/node": "18.16.16", + "@types/node": "20.16.5", "typescript": "5.1.3", "prettier": "3.3.3", "browserify": "17.0.0", diff --git a/kipper/web/pnpm-lock.yaml b/kipper/web/pnpm-lock.yaml index c85e80731..2a30cd8f3 100644 --- a/kipper/web/pnpm-lock.yaml +++ b/kipper/web/pnpm-lock.yaml @@ -15,8 +15,8 @@ devDependencies: specifier: workspace:~ version: link:../target-ts '@types/node': - specifier: 18.16.16 - version: 18.16.16 + specifier: 20.16.5 + version: 20.16.5 browserify: specifier: 17.0.0 version: 17.0.0 @@ -32,8 +32,10 @@ devDependencies: packages: - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 dev: true /JSONStream@1.3.5: @@ -1207,6 +1209,10 @@ packages: xtend: 4.0.2 dev: true + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true + /url@0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} dependencies: diff --git a/package.json b/package.json index e3dc56050..6303af5b0 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@oclif/test": "2.5.6", "@types/chai": "4.3.0", "@types/mocha": "10.0.7", - "@types/node": "18.16.16", + "@types/node": "20.16.5", "@types/semver": "7.5.7", "@typescript-eslint/eslint-plugin": "7.16.0", "ansi-regex": "6.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ab144053..7df3c9584 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,7 +30,7 @@ devDependencies: version: 1.0.2(nyc@17.0.0) '@oclif/test': specifier: 2.5.6 - version: 2.5.6(@types/node@18.16.16)(typescript@5.1.3) + version: 2.5.6(@types/node@20.16.5)(typescript@5.1.3) '@types/chai': specifier: 4.3.0 version: 4.3.0 @@ -38,8 +38,8 @@ devDependencies: specifier: 10.0.7 version: 10.0.7 '@types/node': - specifier: 18.16.16 - version: 18.16.16 + specifier: 20.16.5 + version: 20.16.5 '@types/semver': specifier: 7.5.7 version: 7.5.7 @@ -96,7 +96,7 @@ devDependencies: version: 10.0.0(mocha@10.6.0) ts-node: specifier: 10.9.2 - version: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) + version: 10.9.2(@types/node@20.16.5)(typescript@5.1.3) tsify: specifier: 5.0.4 version: 5.0.4(browserify@17.0.0)(typescript@5.1.3) @@ -466,7 +466,7 @@ packages: fastq: 1.17.1 dev: true - /@oclif/core@2.15.0(@types/node@18.16.16)(typescript@5.1.3): + /@oclif/core@2.15.0(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} engines: {node: '>=14.0.0'} dependencies: @@ -493,7 +493,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.1.3) + ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.1.3) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -505,11 +505,11 @@ packages: - typescript dev: true - /@oclif/test@2.5.6(@types/node@18.16.16)(typescript@5.1.3): + /@oclif/test@2.5.6(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-AcusFApdU6/akXaofhBDrY4IM9uYzlOD9bYCCM0NwUXOv1m6320hSp2DT/wkj9H1gsvKbJXZHqgtXsNGZTWLFg==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.15.0(@types/node@18.16.16)(typescript@5.1.3) + '@oclif/core': 2.15.0(@types/node@20.16.5)(typescript@5.1.3) fancy-test: 2.0.42 transitivePeerDependencies: - '@swc/core' @@ -542,7 +542,7 @@ packages: /@types/cli-progress@3.11.5: resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} dependencies: - '@types/node': 18.16.16 + '@types/node': 20.16.5 dev: true /@types/json5@0.0.29: @@ -559,8 +559,10 @@ packages: resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} dev: true - /@types/node@18.16.16: - resolution: {integrity: sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 dev: true /@types/semver@7.5.7: @@ -1709,7 +1711,7 @@ packages: dependencies: '@types/chai': 4.3.0 '@types/lodash': 4.14.202 - '@types/node': 18.16.16 + '@types/node': 20.16.5 '@types/sinon': 17.0.3 lodash: 4.17.21 mock-stdin: 1.0.0 @@ -3427,6 +3429,7 @@ packages: /ts-mocha@10.0.0(mocha@10.6.0): resolution: {integrity: sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==} engines: {node: '>= 6.X.X'} + hasBin: true peerDependencies: mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X dependencies: @@ -3436,8 +3439,9 @@ packages: tsconfig-paths: 3.15.0 dev: true - /ts-node@10.9.2(@types/node@18.16.16)(typescript@5.1.3): + /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.1.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true peerDependencies: '@swc/core': '>=1.2.50' '@swc/wasm': '>=1.2.50' @@ -3454,7 +3458,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.16.16 + '@types/node': 20.16.5 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -3585,8 +3589,13 @@ packages: xtend: 4.0.2 dev: true + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: From 33b6eccce9c24e68c7a3a990d8ef0a052676193a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:44:58 +0200 Subject: [PATCH 26/81] other: Updated DEVELOPMENT.md --- DEVELOPMENT.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 48bcdf84e..0f7d93c07 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -179,6 +179,7 @@ which can be included and used inside a browser without any dependencies. - `identifiers.description` - `license-url` - `version` + - `date-released` These changes must be committed yourself with a commit message preferably similar to this: From 85b418fb145b8d193a2e97bcfc970af30428b1e1 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:45:09 +0200 Subject: [PATCH 27/81] release: Bumped Kipper project version to 0.12.0-alpha.3 --- CITATION.cff | 18 +++++++++++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index e13dda0fb..be944b20a 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -7,13 +7,21 @@ type: software authors: - given-names: Luna family-names: Klatzer - email: luna.klatzer@gmail.com + email: edu@lklatzer.com affiliation: HTL Leonding orcid: 'https://orcid.org/0009-0001-5332-8988' + - given-names: Lorenz + family-names: Holzbauer + email: l.holzbauer@students.htl-leonding.ac.at + affiliation: HTL Leonding + - given-names: Fabian + family-names: Baitura + email: f.baitura@students.htl-leonding.ac.at + affiliation: HTL Leonding identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.2 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.3 description: The GitHub release URL of tag 0.12.0-alpha.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' @@ -31,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/LICENSE' -version: 0.12.0-alpha.0 -date-released: '2024-07-01' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/LICENSE' +version: 0.12.0-alpha.3 +date-released: '2024-09-07' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index d1b786ba7..1ade43608 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 4656e33f6..e3f6f2883 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 558017688..b2f4da622 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 91b429ee6..f0554a592 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index b69d864c2..dddfcbecf 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index b723fa1ae..1e01d7ac1 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.2"; +export const version = "0.12.0-alpha.3"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 6ea124b0983f07ea80efcb1b2a4dd3441767a370 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:47:08 +0200 Subject: [PATCH 28/81] other: Updated cli/README.md --- kipper/cli/README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 196804b29..396f9be48 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper From fba1e5a037d5f6bbdf0890efeb6341f70c20da85 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sat, 7 Sep 2024 20:47:58 +0200 Subject: [PATCH 29/81] Release 0.12.0-alpha.3 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 396f9be48..7aec992f7 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.2 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0-alpha.3 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.2/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index d9e63342c..99f5b62bc 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 0c97144d3..77dbbbde7 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 87a1b8247..71b7ad1df 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 1614b729c..91d9da98e 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 8d4894fdb..5114af7f9 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 947949e90..d6dee688f 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index e3dc56050..d2e741757 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.2", + "version": "0.12.0-alpha.3", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 4a6d6da4c3120c027fa03d09b7fdac8a101ce85d Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 13:26:46 +0200 Subject: [PATCH 30/81] other: Prettified code-generator.ts --- kipper/target-js/src/code-generator.ts | 80 +++++++++++++------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index f76b9aa07..73530bc7e 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -186,46 +186,46 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " }" + " }" + " }," + - "matches: (value, pattern) => {" + - " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + - " if (pattern.fields && Array.isArray(pattern.fields)) {" + - " for (const field of pattern.fields) {" + - " const fieldName = field.name;" + - " const fieldType = field.type;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + - " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + - " return false;" + - " }" + - " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + - " if (!__kipper.matches(fieldValue, fieldType)) {" + - " return false;" + - " }" + - " }" + - " }" + - " }" + - " if (pattern.methods && Array.isArray(pattern.methods)) {" + - " for (const field of pattern.methods) {" + - " const fieldName = field.name;" + - " const fieldReturnType = field.returnType;" + - " const parameters = field.parameters;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " const isSameType = fieldReturnType === fieldValue.__kipType.genericArgs.R;" + - " if (!isSameType) {" + - " return false;" + - " }" + - " }" + - " }" + - " return true;" + - " }," + + "matches: (value, pattern) => {" + + " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " if (pattern.fields && Array.isArray(pattern.fields)) {" + + " for (const field of pattern.fields) {" + + " const fieldName = field.name;" + + " const fieldType = field.type;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + + " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + + " return false;" + + " }" + + " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + + " if (!__kipper.matches(fieldValue, fieldType)) {" + + " return false;" + + " }" + + " }" + + " }" + + " }" + + " if (pattern.methods && Array.isArray(pattern.methods)) {" + + " for (const field of pattern.methods) {" + + " const fieldName = field.name;" + + " const fieldReturnType = field.returnType;" + + " const parameters = field.parameters;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " if (!isSameType) {" + + " return false;" + + " }" + + " }" + + " }" + + " return true;" + + " }," + inlinedRequirements + " };" + "};", From f9c285436cfb667dca3f9033a9d72709e8c06519 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 13:27:16 +0200 Subject: [PATCH 31/81] other: Added kipper.sh execution shell for ease of access --- kipper.sh | 2 ++ 1 file changed, 2 insertions(+) create mode 100755 kipper.sh diff --git a/kipper.sh b/kipper.sh new file mode 100755 index 000000000..30126adc9 --- /dev/null +++ b/kipper.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +./kipper/cli/bin/run From 8ebf934b6311d23c2dbd3c535c92ec6c3c57b09a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 14:35:14 +0200 Subject: [PATCH 32/81] major (#672): Added proper func typing to interface methods, class methods and class constructors --- kipper/cli/README.md | 21 ++++++++++------ kipper/core/KipperParser.g4 | 1 - .../function-declaration-semantics.ts | 5 ---- .../function-declaration.ts | 1 - ...class-constructor-declaration-semantics.ts | 2 +- ...-constructor-declaration-type-semantics.ts | 5 ++-- .../class-constructor-declaration.ts | 8 ++++-- .../class-method-declaration-semantics.ts | 4 +-- ...class-method-declaration-type-semantics.ts | 4 +-- .../class-method-declaration.ts | 12 ++++----- .../interface-method-declaration-semantics.ts | 6 ++--- ...rface-method-declaration-type-semantics.ts | 5 ++-- .../interface-method-declaration.ts | 25 +++++++++---------- .../semantics/analyser/type-checker.ts | 5 +--- kipper/target-js/src/code-generator.ts | 10 ++++---- kipper/target-ts/src/code-generator.ts | 11 +++++--- 16 files changed, 63 insertions(+), 62 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 7aec992f7..bb1002f95 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index c88b8e13e..ff47e536b 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -101,7 +101,6 @@ interfaceMethodDeclaration : declarator '(' parameterList? ')' ':' typeSpecifierExpression SemiColon ; - classDeclaration : 'class' declarator '{' (classMemberDeclaration | SemiColon)* '}' ; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts index 9c49bc525..02e0fac1b 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-semantics.ts @@ -16,11 +16,6 @@ export interface FunctionDeclarationSemantics extends DeclarationSemantics { * @since 0.5.0 */ identifier: string; - /** - * The {@link KipperType return type} of the function. - * @since 0.5.0 - */ - returnType: RawType; /** * The type specifier expression for the return type. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index 242d57d41..dba8f75e5 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -187,7 +187,6 @@ export class FunctionDeclaration isDefined: parseTreeChildren.find((val) => val instanceof CompoundStatementContext) !== undefined, identifier: identifier, returnTypeSpecifier: retTypeSpecifier, - returnType: returnType, params: params, functionBody: body, // Will always syntactically be a compound statement }; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts index 97d0d753a..dad394131 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-semantics.ts @@ -19,7 +19,7 @@ export interface ClassConstructorDeclarationSemantics extends ClassMemberDeclara * The return type of this method. * @since 0.12.0 */ - parameters: Array; + params: Array; /** * The body of the function. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts index 36ef7cdfe..7c1248610 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts @@ -1,4 +1,5 @@ -import type { ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc} from "../../../../../../../semantics"; +import { ProcessedType } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** @@ -10,5 +11,5 @@ export interface ClassConstructorDeclarationTypeSemantics extends ClassMemberDec * The processed type of this member property. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts index ac89b9090..88ca27bff 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts @@ -3,6 +3,7 @@ * @since 0.12.0 */ import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; +import { BuiltInTypeFunc } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassConstructorDeclarationContext } from "../../../../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -147,7 +148,7 @@ export class ClassConstructorDeclaration this.semanticData = { identifier: KipperConstructorInternalIdentifierLiteral, - parameters: params, + params: params, functionBody: functionBody, }; this.scopeDeclaration = this.scope.addConstructor(this); @@ -162,8 +163,11 @@ export class ClassConstructorDeclaration * @since 0.12.0 */ public async primarySemanticTypeChecking(): Promise { + const semanticData = this.getSemanticData(); + const paramTypes = semanticData.params.map((param) => param.getTypeSemanticData().valueType); + this.typeSemantics = { - valueType: BuiltInTypes.Func, + valueType: new BuiltInTypeFunc(paramTypes, BuiltInTypes.void), }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts index 000d86222..6c7cd985a 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts @@ -17,12 +17,12 @@ export interface ClassMethodDeclarationSemantics extends ClassMemberDeclarationS * The return type of this method. * @since 0.12.0 */ - parameters: Array; + params: Array; /** * The return type of this method. * @since 0.12.0 */ - returnType: IdentifierTypeSpecifierExpression; + returnTypeSpecifier: IdentifierTypeSpecifierExpression; /** * The body of the function. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts index 23e572357..b0a79935a 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts @@ -1,4 +1,4 @@ -import type { ProcessedType } from "../../../../../../../semantics"; +import { BuiltInTypeFunc, ProcessedType } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** @@ -10,5 +10,5 @@ export interface ClassMethodDeclarationTypeSemantics extends ClassMemberDeclarat * The processed type of this member property. This always of type {@link BuiltInTypeFunc}. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts index 8ca03a419..3ca239774 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts @@ -3,6 +3,7 @@ * @since 0.12.0 */ import type { ScopeFunctionDeclaration } from "../../../../../../../semantics"; +import { BuiltInTypeFunc } from "../../../../../../../semantics"; import { BuiltInTypes, FunctionScope } from "../../../../../../../semantics"; import type { ClassMethodDeclarationContext } from "../../../../../../../lexer-parser"; import { DeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -163,8 +164,8 @@ export class ClassMethodDeclaration this.semanticData = { identifier: identifier, - returnType: retTypeSpecifier, - parameters: params, + returnTypeSpecifier: retTypeSpecifier, + params: params, functionBody: functionBody, }; this.scopeDeclaration = this.scope.addFunction(this); @@ -180,12 +181,11 @@ export class ClassMethodDeclaration */ public async primarySemanticTypeChecking(): Promise { const semanticData = this.getSemanticData(); + const paramTypes = semanticData.params.map((param) => param.getTypeSemanticData().valueType); + const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; - // Get the type that will be returned using the return type specifier - const returnType = semanticData.returnType.getTypeSemanticData().storedType; this.typeSemantics = { - returnType: returnType, - valueType: BuiltInTypes.Func, + valueType: new BuiltInTypeFunc(paramTypes, returnType), }; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-semantics.ts index 16fdddcd7..e7110a958 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-semantics.ts @@ -12,16 +12,14 @@ export interface InterfaceMethodDeclarationSemantics extends TypeDeclarationSema * @since 0.12.0 */ identifier: string; - /** * The return type of this method. * @since 0.12.0 */ - parameters: Array; - + params: Array; /** * The return type of this method. * @since 0.12.0 */ - returnType: IdentifierTypeSpecifierExpression; + returnTypeSpecifier: IdentifierTypeSpecifierExpression; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts index 458b114da..9d47ee971 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts @@ -1,5 +1,6 @@ import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; -import type { ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc} from "../../../../../../../semantics"; +import { ProcessedType } from "../../../../../../../semantics"; /** * @@ -10,5 +11,5 @@ export interface InterfaceMethodDeclarationTypeSemantics extends TypeDeclaration * The processed type of this member property. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts index 5566006f9..9b9ef7629 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts @@ -3,6 +3,7 @@ * @since 0.12.0 */ import type { ScopeTypeDeclaration } from "../../../../../../../semantics"; +import { BuiltInTypeFunc } from "../../../../../../../semantics"; import { BuiltInTypes } from "../../../../../../../semantics"; import type { InterfaceMethodDeclarationContext } from "../../../../../../../lexer-parser"; import { DeclaratorContext, KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../../../lexer-parser"; @@ -111,15 +112,15 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< */ public async primarySemanticAnalysis(): Promise { const parseTreeChildren = this.getAntlrRuleChildren(); - let declaratorCtx = ( + const declaratorCtx = ( parseTreeChildren.find((val) => val instanceof DeclaratorContext) ); - let retTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; - let params: Array = []; + const params: Array = []; + let returnTypeSpecifier: IdentifierTypeSpecifierExpression | undefined; // Create shallow copy of the children - let children = [...this.children]; + const children = [...this.children]; // Evaluate the primary semantic data for the function while (children.length > 0) { @@ -129,23 +130,22 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< params.push(child); } else { // Once the return type has been reached, stop, as the last two items should be the return type and func body - retTypeSpecifier = child; + returnTypeSpecifier = child; break; } } // Ensure that the children are fully present and not undefined // Also make sure the scope has the required argument field for the function (is of type 'FunctionScope') - if (!declaratorCtx || !retTypeSpecifier) { + if (!declaratorCtx || !returnTypeSpecifier) { throw new UnableToDetermineSemanticDataError(); } - const identifier = this.tokenStream.getText(declaratorCtx.sourceInterval); this.semanticData = { identifier: identifier, - returnType: retTypeSpecifier, - parameters: params, + returnTypeSpecifier: returnTypeSpecifier, + params: params, }; } @@ -159,12 +159,11 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< */ public async primarySemanticTypeChecking(): Promise { const semanticData = this.getSemanticData(); + const paramTypes = semanticData.params.map((param) => param.getTypeSemanticData().valueType); + const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; - // Get the type that will be returned using the return type specifier - const returnType = semanticData.returnType.getTypeSemanticData().storedType; this.typeSemantics = { - returnType: returnType, - valueType: BuiltInTypes.Func, + valueType: new BuiltInTypeFunc(paramTypes, returnType), }; } diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index e187edec7..461389dff 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -543,11 +543,8 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { // If the return statement has no return value, then the value is automatically 'void' const statementValueType = semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? BuiltInTypes.void; - - // TODO! DON'T DO THIS. THIS IS PUTTING TYPE CHECKING OF A PARENT INTO A CHILD - // TODO! REALLY WE NEED TO REMOVE THIS SOON const functionReturnType = this.getCheckedType( - semanticData.function.getSemanticData().returnType, + semanticData.function.getSemanticData().returnTypeSpecifier.getSemanticData().rawType, semanticData.function.scope, ); diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 73530bc7e..6ef97bc75 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -279,15 +279,15 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { const returnType = method.returnType.getTypeSemanticData().storedType; const runtimeReturnType = TargetJS.getRuntimeType(returnType); - const parametersArray = method.parameters.map((param) => { + const paramsArray = method.params.map((param) => { const type = param.getTypeSemanticData().storedType; const name = param.getSemanticData().identifier; return `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${name}", ${TargetJS.getRuntimeType(type)})`; }); - const parameters = parametersArray.length > 0 ? `[${parametersArray.join(", ")}]` : "[]"; + const params = paramsArray.length > 0 ? `[${paramsArray.join(", ")}]` : "[]"; functionsWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${parameters})`; + `new ${TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${params})`; } } @@ -633,7 +633,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { classMethodDeclaration = async (node: ClassMethodDeclaration): Promise> => { const semanticData = node.getSemanticData(); const identifier = semanticData.identifier; - const params = semanticData.parameters; + const params = semanticData.params; const body = semanticData.functionBody; const concatParams = async () => { @@ -653,7 +653,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { */ classConstructorDeclaration = async (node: ClassConstructorDeclaration): Promise> => { const semanticData = node.getSemanticData(); - const params = semanticData.parameters; + const params = semanticData.params; const body = semanticData.functionBody; let processedParams = ( diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 58714567b..7577bd452 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -88,7 +88,7 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator node: InterfaceMethodDeclaration, ): Promise> => { const semanticData = node.getSemanticData(); - const params = semanticData.parameters; + const params = semanticData.params; const returnTypeIdentifier = TargetTS.getTypeScriptType(semanticData.returnType.getTypeSemanticData().storedType); const paramsCode: TranslatedCodeLine[] = await Promise.all( @@ -197,11 +197,14 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator override classMethodDeclaration = async (node: ClassMethodDeclaration): Promise> => { const semanticData = node.getSemanticData(); + const typeData = node.getTypeSemanticData(); const identifier = semanticData.identifier; - const params = semanticData.parameters; + const params = semanticData.params; const body = semanticData.functionBody; - const evaluatedType = TargetTS.getTypeScriptType(semanticData.returnType.getTypeSemanticData().storedType); - const returnType = evaluatedType; + + // Get the required function signature + const type = typeData.valueType; + const returnType = TargetTS.getTypeScriptType(type.returnType); const translatedParams = ( await Promise.all( From b34bf39d0306ff08a54dc20d1454d7e984086b3c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 20:44:41 +0200 Subject: [PATCH 33/81] minor (#672): Implemented proper method interface compatibility --- .../semantics/types/base/processed-type.ts | 13 +- kipper/core/src/tools/functions/indent.ts | 11 +- kipper/target-js/src/code-generator.ts | 302 +++++++----------- kipper/target-js/src/index.ts | 1 + kipper/target-js/src/runtime-types.ts | 73 +++++ kipper/target-js/src/target.ts | 6 + kipper/target-ts/src/code-generator.ts | 4 +- 7 files changed, 217 insertions(+), 193 deletions(-) create mode 100644 kipper/target-js/src/runtime-types.ts diff --git a/kipper/core/src/compiler/semantics/types/base/processed-type.ts b/kipper/core/src/compiler/semantics/types/base/processed-type.ts index e421c5b2b..69e5f3dfd 100644 --- a/kipper/core/src/compiler/semantics/types/base/processed-type.ts +++ b/kipper/core/src/compiler/semantics/types/base/processed-type.ts @@ -93,12 +93,13 @@ export abstract class ProcessedType extends Type { public toString(): string { let type = this.identifier; if (this.isGeneric) { - type += - "<" + - (>(this)).genericTypeArguments - ?.map((arg) => arg.type.toString()) - .join(", ") + - ">"; + const genericArgs = (>(this)).genericTypeArguments + ?.map((arg) => Array.isArray(arg.type) + ? arg.type.map(type => type.toString()).join(", ") + : arg.type.toString() + ) + .join(", "); + type += `<${genericArgs}>`; } return type; } diff --git a/kipper/core/src/tools/functions/indent.ts b/kipper/core/src/tools/functions/indent.ts index 1544b084d..96bb62cd1 100644 --- a/kipper/core/src/tools/functions/indent.ts +++ b/kipper/core/src/tools/functions/indent.ts @@ -1,13 +1,18 @@ /** * Adds a left indentation to the message with the specified amount of spaces. * @param msg The message to indent. - * @param prefix The prefix to add to the message. + * @param firstLinePrefix The prefix to add to the message on the first line. * @param spaces The amount of spaces to indent the message with. * @since 0.11.0 */ -export function addLeftIndent(msg: string, prefix: string = "", spaces: number = 2): string { +export function addLeftIndent(msg: string, firstLinePrefix: string = "", spaces: number = 2): string { return msg .split("\n") - .map((line: string): string => `${" ".repeat(spaces)}${prefix}${line}`) + .map((line, index) => + (index === 0 + ? " ".repeat(spaces) + firstLinePrefix + : " ".repeat(spaces + firstLinePrefix.length) + ) + line + ) .join("\n"); } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 6ef97bc75..cb340763b 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -40,6 +40,7 @@ import type { LogicalExpression, LogicalExpressionSemantics, LogicalOrExpression, + MatchesExpression, MemberAccessExpression, MultiplicativeExpression, NewInstantiationExpression, @@ -60,25 +61,23 @@ import type { TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, -} from "@kipper/core"; -import { BuiltInType, BuiltInTypeType, TypeError } from "@kipper/core"; + InterfaceMethodDeclaration, + InterfacePropertyDeclaration} from "@kipper/core"; import { AssignmentExpression, + BuiltInType, BuiltInTypes, CompoundStatement, Expression, getConversionFunctionIdentifier, IfStatement, - InterfaceMethodDeclaration, - InterfacePropertyDeclaration, KipperTargetCodeGenerator, ScopeDeclaration, - VariableDeclaration, + VariableDeclaration } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; -import { TargetJS, version } from "./index"; -import type { MatchesExpression } from "@kipper/core/lib/compiler/ast/nodes/expressions/matches-expression/matches-expression"; -import * as console from "node:console"; +import { KipperJavaScriptTarget, TargetJS, version } from "./index"; +import { RuntimeTypesGenerator } from "./runtime-types"; function removeBrackets(lines: Array) { return lines.slice(1, lines.length - 1); @@ -105,130 +104,127 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [ [`/* Generated from '${programCtx.fileName}' by the Kipper Compiler v${version} */`], // Always enable strict mode when using Kipper - ['"use strict"', ";"], + ["\"use strict\"", ";"], // Determine the global scope in the JS execution environment ["// @ts-ignore"], [ - 'var __globalScope = typeof __globalScope !== "undefined" ? __globalScope : typeof' + - ' globalThis !== "undefined" ?' + - " globalThis : typeof" + - ' window !== "undefined" ?' + - ' window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}', + "var __globalScope = typeof __globalScope !== \"undefined\" ? __globalScope : typeof" + + " globalThis !== \"undefined\" ?" + + " globalThis : typeof" + + " window !== \"undefined\" ?" + + " window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {}", ";", ], // __createKipper function ["// @ts-ignore"], [ "var __createKipper = () => {" + - " if (__globalScope.__kipper || __kipper) { return undefined; }" + - " class KipperError extends Error { constructor(msg) { super(msg); this.name='KipError'; }};" + - " class KipperType {" + - " constructor(name, fields, methods, baseType = null) " + - " { this.name = name; this.fields = fields; this.methods = methods; this.baseType = baseType; }" + - " isCompatibleWith(obj) { return this.name === obj.name; }" + - " };" + - " class KipperGenericType extends KipperType {" + - " constructor(name, fields, methods, genericArgs, baseType = null) " + - " { super(name, fields, methods, baseType); this.genericArgs = genericArgs; }" + - " isCompatibleWith(obj) { return this.name === obj.name; }" + - " changeGenericTypeArguments(genericArgs) { return new KipperGenericType(this.name, this.fields, this.methods, genericArgs, this.baseType) }" + - " };" + - " const __type_any = new KipperType('any', undefined, undefined);" + - " const __type_null = new KipperType('null', undefined, undefined);" + - " const __type_undefined = new KipperType('undefined', undefined, undefined);" + - " const __type_str = new KipperType('str', undefined, undefined);" + - " const __type_num = new KipperType('num', undefined, undefined);" + - " const __type_bool = new KipperType('bool', undefined, undefined);" + - " const __type_obj = new KipperType('obj', [], []);" + - " const __type_Array = new KipperGenericType('Array', undefined, undefined, {T: __type_any});" + - " const __type_Func = new KipperGenericType('Func', undefined, undefined, {T: [], R: __type_any});" + - " return {" + - " KipperError: KipperError," + - " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + - " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + - " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + - " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + - " Type: KipperType," + - " builtIn: {" + - " any: __type_any," + - " null: __type_null," + - " undefined: __type_undefined," + - " str: __type_str," + - " num: __type_num," + - " bool: __type_bool," + - " obj: __type_obj," + - " Array: __type_Array," + - " Func: __type_Func," + - " }," + - " assignTypeMeta: (value, typeMeta) => Object.assign(value, { __kipType: typeMeta })," + - " typeOf: (value) => {" + - " const prim = typeof value;" + - " switch (prim) {" + - " case 'undefined': return __kipper.builtIn.undefined;" + - " case 'string': return __kipper.builtIn.str;" + - " case 'number': return __kipper.builtIn.num;" + - " case 'boolean': return __kipper.builtIn.bool;" + - " case 'function': {" + - " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Func;" + - " }" + - " case 'symbol':" + - " case 'bigint':" + - " case 'object': {" + - " if (value === null) return __kipper.builtIn.null;" + - " if (Array.isArray(value)) {" + - " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Array;" + - " }" + - " const prot = Object.getPrototypeOf(value);" + - " if (prot && prot.constructor !== Object) {" + - " return prot.constructor;" + - " }" + - " return __kipper.builtIn.obj;" + - " }" + - " }" + - " }," + - "matches: (value, pattern) => {" + - " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + - " if (pattern.fields && Array.isArray(pattern.fields)) {" + - " for (const field of pattern.fields) {" + - " const fieldName = field.name;" + - " const fieldType = field.type;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + - " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + - " return false;" + - " }" + - " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + - " if (!__kipper.matches(fieldValue, fieldType)) {" + - " return false;" + - " }" + - " }" + - " }" + - " }" + - " if (pattern.methods && Array.isArray(pattern.methods)) {" + - " for (const field of pattern.methods) {" + - " const fieldName = field.name;" + - " const fieldReturnType = field.returnType;" + - " const parameters = field.parameters;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " const isSameType = fieldReturnType === fieldValue.__kipType.genericArgs.R;" + - " if (!isSameType) {" + - " return false;" + - " }" + - " }" + - " }" + - " return true;" + - " }," + - inlinedRequirements + - " };" + - "};", + " if (__globalScope.__kipper || __kipper) { return undefined; }" + + " class KipperError extends Error { constructor(msg) { super(msg); this.name='KipError'; }};" + + " class KipperType {" + + " constructor(name, fields, methods, baseType = null) " + + " { this.name = name; this.fields = fields; this.methods = methods; this.baseType = baseType; }" + + " isCompatibleWith(obj) { return this.name === obj.name; }" + + " };" + + " class KipperGenericType extends KipperType {" + + " constructor(name, fields, methods, genericArgs, baseType = null) " + + " { super(name, fields, methods, baseType); this.genericArgs = genericArgs; }" + + " isCompatibleWith(obj) { return this.name === obj.name; }" + + " changeGenericTypeArguments(genericArgs) { return new KipperGenericType(this.name, this.fields, this.methods, genericArgs, this.baseType) }" + + " };" + + " const __type_any = new KipperType('any', undefined, undefined);" + + " const __type_null = new KipperType('null', undefined, undefined);" + + " const __type_undefined = new KipperType('undefined', undefined, undefined);" + + " const __type_str = new KipperType('str', undefined, undefined);" + + " const __type_num = new KipperType('num', undefined, undefined);" + + " const __type_bool = new KipperType('bool', undefined, undefined);" + + " const __type_obj = new KipperType('obj', [], []);" + + " const __type_Array = new KipperGenericType('Array', undefined, undefined, {T: __type_any});" + + " const __type_Func = new KipperGenericType('Func', undefined, undefined, {T: [], R: __type_any});" + + " return {" + + " KipperError: KipperError," + + " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + + " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + + " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + + " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + + " Type: KipperType," + + " builtIn: {" + + " any: __type_any," + + " null: __type_null," + + " undefined: __type_undefined," + + " str: __type_str," + + " num: __type_num," + + " bool: __type_bool," + + " obj: __type_obj," + + " Array: __type_Array," + + " Func: __type_Func," + + " }," + + " assignTypeMeta: (value, typeMeta) => Object.assign(value, { __kipType: typeMeta })," + + " typeOf: (value) => {" + + " const prim = typeof value;" + + " switch (prim) {" + + " case 'undefined': return __kipper.builtIn.undefined;" + + " case 'string': return __kipper.builtIn.str;" + + " case 'number': return __kipper.builtIn.num;" + + " case 'boolean': return __kipper.builtIn.bool;" + + " case 'function': {" + + " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Func;" + + " }" + + " case 'symbol':" + + " case 'bigint':" + + " case 'object': {" + + " if (value === null) return __kipper.builtIn.null;" + + " if (Array.isArray(value)) {" + + " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Array;" + + " }" + + " const prot = Object.getPrototypeOf(value);" + + " if (prot && prot.constructor !== Object) {" + + " return prot.constructor;" + + " }" + + " return __kipper.builtIn.obj;" + + " }" + + " }" + + " }," + + "matches: (value, pattern) => {" + + " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " if (pattern.fields && Array.isArray(pattern.fields)) {" + + " for (const field of pattern.fields) {" + + " const fieldName = field.name;" + + " const fieldType = field.type;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + + " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + + " return false;" + + " }" + + " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + + " if (!__kipper.matches(fieldValue, fieldType)) {" + + " return false;" + + " }" + + " }" + + " }" + + " }" + + " if (pattern.methods && Array.isArray(pattern.methods)) {" + + " for (const field of pattern.methods) {" + + " const fieldName = field.name;" + + " const fieldReturnType = field.returnType;" + + " const parameters = field.parameters;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " return fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " }" + + " }" + + " return true;" + + " }," + + inlinedRequirements + + " };" + + "};", ], // global __kipper variable ["var __kipper = __globalScope.__kipper = (__globalScope.__kipper || __createKipper());"], @@ -247,64 +243,6 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return []; }; - protected generateInterfaceRuntimeTypeChecks = async ( - node: InterfaceDeclaration, - ): Promise> => { - const semanticData = node.getSemanticData(); - const interfaceName = semanticData.identifier; - const interfaceMembers = semanticData.members; - const identifier = "__intf_" + interfaceName; - - let propertiesWithTypes = ""; - let functionsWithTypes = ""; - for (let member of interfaceMembers) { - if (member instanceof InterfacePropertyDeclaration) { - const property = member.getSemanticData(); - const type = member.getTypeSemanticData(); - - if (type.valueType instanceof BuiltInType) { - const runtimeType = TargetJS.getRuntimeType(type.valueType); - propertiesWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${property.identifier}", ${runtimeType}),`; - } else { - propertiesWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Property")}` + - `("${property.identifier}", __intf_${type.valueType}),`; - } - } - - if (member instanceof InterfaceMethodDeclaration) { - const method = member.getSemanticData(); - const methodName = method.identifier; - const returnType = method.returnType.getTypeSemanticData().storedType; - const runtimeReturnType = TargetJS.getRuntimeType(returnType); - - const paramsArray = method.params.map((param) => { - const type = param.getTypeSemanticData().storedType; - const name = param.getSemanticData().identifier; - return `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${name}", ${TargetJS.getRuntimeType(type)})`; - }); - const params = paramsArray.length > 0 ? `[${paramsArray.join(", ")}]` : "[]"; - - functionsWithTypes += - `new ${TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${params})`; - } - } - - return [ - [ - "const ", - identifier, - ` = new ${TargetJS.internalObjectIdentifier}.Type("` + interfaceName + '"', - ", [", - propertiesWithTypes, - "], [", - functionsWithTypes, - "])", - ], - ]; - }; - /** * Translates a {@link CompoundStatement} into the JavaScript language. */ @@ -564,7 +502,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { * Translates a {@link AssignmentExpression} into the JavaScript language. */ interfaceDeclaration = async (node: InterfaceDeclaration): Promise> => { - const runtimeInterfaceType = await this.generateInterfaceRuntimeTypeChecks(node); + const runtimeInterfaceType = await RuntimeTypesGenerator.generateInterfaceRuntimeType(node); return [...runtimeInterfaceType]; }; diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index dddfcbecf..4e3a3d671 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -8,6 +8,7 @@ export * from "./target"; export * from "./semantic-analyser"; export * from "./code-generator"; export * from "./built-in-generator"; +export * from "./runtime-types"; export * from "./tools"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/runtime-types.ts b/kipper/target-js/src/runtime-types.ts new file mode 100644 index 000000000..ee74d508a --- /dev/null +++ b/kipper/target-js/src/runtime-types.ts @@ -0,0 +1,73 @@ +import type { InterfaceDeclaration, TranslatedCodeLine } from "@kipper/core"; +import { BuiltInType, InterfaceMethodDeclaration, InterfacePropertyDeclaration } from "@kipper/core"; +import { KipperJavaScriptTarget, TargetJS } from "./index"; + +/** + * The runtime types generator for the JavaScript target. + * @since 0.12.0 + */ +export class RuntimeTypesGenerator { + /** + * Generates the runtime type structure for an interface declaration. + * @param node The node to translate. + * @since 0.12.0 + */ + public static async generateInterfaceRuntimeType(node: InterfaceDeclaration): Promise> { + const semanticData = node.getSemanticData(); + const interfaceName = semanticData.identifier; + const interfaceMembers = semanticData.members; + const identifier = `${KipperJavaScriptTarget.internalInterfacePrefix}_${interfaceName}`; + + const propertiesWithTypes: Array = []; + const functionsWithTypes: Array = []; + for (let member of interfaceMembers) { + if (member instanceof InterfacePropertyDeclaration) { + const property = member.getSemanticData(); + const type = member.getTypeSemanticData(); + + if (type.valueType instanceof BuiltInType) { + const runtimeType = TargetJS.getRuntimeType(type.valueType); + propertiesWithTypes.push( + `new ${TargetJS.getBuiltInIdentifier("Property")}("${property.identifier}", ${runtimeType}),`, + ); + } else { + propertiesWithTypes.push( + `new ${TargetJS.getBuiltInIdentifier("Property")}("${property.identifier}",` + + ` ${KipperJavaScriptTarget.internalInterfacePrefix}_${type.valueType}),`, + ); + } + } + + if (member instanceof InterfaceMethodDeclaration) { + const method = member.getSemanticData(); + const methodName = method.identifier; + const returnType = method.returnTypeSpecifier.getTypeSemanticData().storedType; + const runtimeReturnType = TargetJS.getRuntimeType(returnType); + + const paramsArray = method.params.map((param) => { + const type = param.getTypeSemanticData().valueType; + const name = param.getSemanticData().identifier; + return `new ${TargetJS.getBuiltInIdentifier("Property")}` + `("${name}", ${TargetJS.getRuntimeType(type)})`; + }); + const params = paramsArray.length > 0 ? `[${paramsArray.join(", ")}]` : "[]"; + + functionsWithTypes.push( + `new ${TargetJS.getBuiltInIdentifier("Method")}` + `("${methodName}", ${runtimeReturnType}, ${params})`, + ); + } + } + + return [ + [ + "const ", + identifier, + ` = new ${TargetJS.internalObjectIdentifier}.Type("` + interfaceName + "\"", + ", [", + ...propertiesWithTypes, + "], [", + ...functionsWithTypes, + "])", + ], + ]; + } +} diff --git a/kipper/target-js/src/target.ts b/kipper/target-js/src/target.ts index f5cae5bd4..973f5828c 100644 --- a/kipper/target-js/src/target.ts +++ b/kipper/target-js/src/target.ts @@ -21,6 +21,12 @@ export class KipperJavaScriptTarget extends KipperCompileTarget { */ static readonly internalObjectIdentifier = "__kipper"; + /** + * The internal prefix for interfaces in the JavaScript target. + * @since 0.12.0 + */ + static readonly internalInterfacePrefix = "__intf"; + /** * All reserved identifiers in JavaScript (and TypeScript for good measure) that may not be overwritten. * @since 0.10.0 diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 7577bd452..dce47e9f1 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -17,7 +17,7 @@ import type { } from "@kipper/core"; import { CompoundStatement, Expression, type LambdaPrimaryExpression } from "@kipper/core"; import { createTSFunctionSignature, getTSFunctionSignature } from "./tools"; -import { indentLines, JavaScriptTargetCodeGenerator, TargetJS } from "@kipper/target-js"; +import { indentLines, JavaScriptTargetCodeGenerator, RuntimeTypesGenerator, TargetJS } from "@kipper/target-js"; import { TargetTS } from "./target"; /** @@ -75,7 +75,7 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator }), ); - const runtimeInterfaceType = await this.generateInterfaceRuntimeTypeChecks(node); + const runtimeInterfaceType = await RuntimeTypesGenerator.generateInterfaceRuntimeType(node); return [ ["interface", " ", interfaceName, " ", "{"], ...memberDeclarations.flat().map((line) => [" ", ...line]), From 553ff46922b92f9c15a2e8d31172ebc357aecc61 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 20:44:48 +0200 Subject: [PATCH 34/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index beb765c23..cab9291dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -116,7 +116,7 @@ To use development versions of Kipper download the - `TypeofExpressionTypeSemantics`, which represents the type semantics of a typeof expression. - New functions: - `KipperTypeChecker.validArrayExpression`, which ensures that an array expression is valid. - - `generateInterfaceRuntimeTypeChecks` which generates runtime type checks for an interface. + - `JavaScriptTargetCodeGenerator.generateInterfaceRuntimeType` which generates runtime type for an interface. - `getRuntimeType`, which gets the corresponding runtime representation of a built-in type. - New properties: - `BuiltInFunction.funcType`, which returns a function type for the built-in function. From dd3403175abca6ef979f12297e69035a43b2b041 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 8 Sep 2024 21:34:37 +0200 Subject: [PATCH 35/81] other: Prettified code --- ...-constructor-declaration-type-semantics.ts | 2 +- ...class-method-declaration-type-semantics.ts | 3 +- ...rface-method-declaration-type-semantics.ts | 2 +- .../semantics/types/base/processed-type.ts | 5 +- kipper/core/src/tools/functions/indent.ts | 8 +- kipper/target-js/src/code-generator.ts | 229 +++++++++--------- kipper/target-js/src/runtime-types.ts | 4 +- 7 files changed, 126 insertions(+), 127 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts index 7c1248610..48cff858e 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts @@ -1,4 +1,4 @@ -import type { BuiltInTypeFunc} from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; import { ProcessedType } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts index b0a79935a..2129243a2 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts @@ -1,4 +1,5 @@ -import { BuiltInTypeFunc, ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; +import { ProcessedType } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts index 9d47ee971..bedf3236f 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts @@ -1,5 +1,5 @@ import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; -import type { BuiltInTypeFunc} from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; import { ProcessedType } from "../../../../../../../semantics"; /** diff --git a/kipper/core/src/compiler/semantics/types/base/processed-type.ts b/kipper/core/src/compiler/semantics/types/base/processed-type.ts index 69e5f3dfd..b4a1212b7 100644 --- a/kipper/core/src/compiler/semantics/types/base/processed-type.ts +++ b/kipper/core/src/compiler/semantics/types/base/processed-type.ts @@ -94,9 +94,8 @@ export abstract class ProcessedType extends Type { let type = this.identifier; if (this.isGeneric) { const genericArgs = (>(this)).genericTypeArguments - ?.map((arg) => Array.isArray(arg.type) - ? arg.type.map(type => type.toString()).join(", ") - : arg.type.toString() + ?.map((arg) => + Array.isArray(arg.type) ? arg.type.map((type) => type.toString()).join(", ") : arg.type.toString(), ) .join(", "); type += `<${genericArgs}>`; diff --git a/kipper/core/src/tools/functions/indent.ts b/kipper/core/src/tools/functions/indent.ts index 96bb62cd1..417d55af9 100644 --- a/kipper/core/src/tools/functions/indent.ts +++ b/kipper/core/src/tools/functions/indent.ts @@ -8,11 +8,9 @@ export function addLeftIndent(msg: string, firstLinePrefix: string = "", spaces: number = 2): string { return msg .split("\n") - .map((line, index) => - (index === 0 - ? " ".repeat(spaces) + firstLinePrefix - : " ".repeat(spaces + firstLinePrefix.length) - ) + line + .map( + (line, index) => + (index === 0 ? " ".repeat(spaces) + firstLinePrefix : " ".repeat(spaces + firstLinePrefix.length)) + line, ) .join("\n"); } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index cb340763b..f09fb54ec 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -62,7 +62,8 @@ import type { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, InterfaceMethodDeclaration, - InterfacePropertyDeclaration} from "@kipper/core"; + InterfacePropertyDeclaration, +} from "@kipper/core"; import { AssignmentExpression, BuiltInType, @@ -73,7 +74,7 @@ import { IfStatement, KipperTargetCodeGenerator, ScopeDeclaration, - VariableDeclaration + VariableDeclaration, } from "@kipper/core"; import { createJSFunctionSignature, getJSFunctionSignature, indentLines, removeBraces } from "./tools"; import { KipperJavaScriptTarget, TargetJS, version } from "./index"; @@ -104,127 +105,127 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [ [`/* Generated from '${programCtx.fileName}' by the Kipper Compiler v${version} */`], // Always enable strict mode when using Kipper - ["\"use strict\"", ";"], + ['"use strict"', ";"], // Determine the global scope in the JS execution environment ["// @ts-ignore"], [ - "var __globalScope = typeof __globalScope !== \"undefined\" ? __globalScope : typeof" + - " globalThis !== \"undefined\" ?" + - " globalThis : typeof" + - " window !== \"undefined\" ?" + - " window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {}", + 'var __globalScope = typeof __globalScope !== "undefined" ? __globalScope : typeof' + + ' globalThis !== "undefined" ?' + + " globalThis : typeof" + + ' window !== "undefined" ?' + + ' window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}', ";", ], // __createKipper function ["// @ts-ignore"], [ "var __createKipper = () => {" + - " if (__globalScope.__kipper || __kipper) { return undefined; }" + - " class KipperError extends Error { constructor(msg) { super(msg); this.name='KipError'; }};" + - " class KipperType {" + - " constructor(name, fields, methods, baseType = null) " + - " { this.name = name; this.fields = fields; this.methods = methods; this.baseType = baseType; }" + - " isCompatibleWith(obj) { return this.name === obj.name; }" + - " };" + - " class KipperGenericType extends KipperType {" + - " constructor(name, fields, methods, genericArgs, baseType = null) " + - " { super(name, fields, methods, baseType); this.genericArgs = genericArgs; }" + - " isCompatibleWith(obj) { return this.name === obj.name; }" + - " changeGenericTypeArguments(genericArgs) { return new KipperGenericType(this.name, this.fields, this.methods, genericArgs, this.baseType) }" + - " };" + - " const __type_any = new KipperType('any', undefined, undefined);" + - " const __type_null = new KipperType('null', undefined, undefined);" + - " const __type_undefined = new KipperType('undefined', undefined, undefined);" + - " const __type_str = new KipperType('str', undefined, undefined);" + - " const __type_num = new KipperType('num', undefined, undefined);" + - " const __type_bool = new KipperType('bool', undefined, undefined);" + - " const __type_obj = new KipperType('obj', [], []);" + - " const __type_Array = new KipperGenericType('Array', undefined, undefined, {T: __type_any});" + - " const __type_Func = new KipperGenericType('Func', undefined, undefined, {T: [], R: __type_any});" + - " return {" + - " KipperError: KipperError," + - " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + - " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + - " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + - " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + - " Type: KipperType," + - " builtIn: {" + - " any: __type_any," + - " null: __type_null," + - " undefined: __type_undefined," + - " str: __type_str," + - " num: __type_num," + - " bool: __type_bool," + - " obj: __type_obj," + - " Array: __type_Array," + - " Func: __type_Func," + - " }," + - " assignTypeMeta: (value, typeMeta) => Object.assign(value, { __kipType: typeMeta })," + - " typeOf: (value) => {" + - " const prim = typeof value;" + - " switch (prim) {" + - " case 'undefined': return __kipper.builtIn.undefined;" + - " case 'string': return __kipper.builtIn.str;" + - " case 'number': return __kipper.builtIn.num;" + - " case 'boolean': return __kipper.builtIn.bool;" + - " case 'function': {" + - " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Func;" + - " }" + - " case 'symbol':" + - " case 'bigint':" + - " case 'object': {" + - " if (value === null) return __kipper.builtIn.null;" + - " if (Array.isArray(value)) {" + - " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Array;" + - " }" + - " const prot = Object.getPrototypeOf(value);" + - " if (prot && prot.constructor !== Object) {" + - " return prot.constructor;" + - " }" + - " return __kipper.builtIn.obj;" + - " }" + - " }" + - " }," + - "matches: (value, pattern) => {" + - " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + - " if (pattern.fields && Array.isArray(pattern.fields)) {" + - " for (const field of pattern.fields) {" + - " const fieldName = field.name;" + - " const fieldType = field.type;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + - " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + - " return false;" + - " }" + - " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + - " if (!__kipper.matches(fieldValue, fieldType)) {" + - " return false;" + - " }" + - " }" + - " }" + - " }" + - " if (pattern.methods && Array.isArray(pattern.methods)) {" + - " for (const field of pattern.methods) {" + - " const fieldName = field.name;" + - " const fieldReturnType = field.returnType;" + - " const parameters = field.parameters;" + - " const nameIsInType = fieldName in value;" + - " if (!nameIsInType) {" + - " return false;" + - " }" + - " const fieldValue = value[fieldName];" + - " return fieldReturnType === fieldValue.__kipType.genericArgs.R;" + - " }" + - " }" + - " return true;" + - " }," + - inlinedRequirements + - " };" + - "};", + " if (__globalScope.__kipper || __kipper) { return undefined; }" + + " class KipperError extends Error { constructor(msg) { super(msg); this.name='KipError'; }};" + + " class KipperType {" + + " constructor(name, fields, methods, baseType = null) " + + " { this.name = name; this.fields = fields; this.methods = methods; this.baseType = baseType; }" + + " isCompatibleWith(obj) { return this.name === obj.name; }" + + " };" + + " class KipperGenericType extends KipperType {" + + " constructor(name, fields, methods, genericArgs, baseType = null) " + + " { super(name, fields, methods, baseType); this.genericArgs = genericArgs; }" + + " isCompatibleWith(obj) { return this.name === obj.name; }" + + " changeGenericTypeArguments(genericArgs) { return new KipperGenericType(this.name, this.fields, this.methods, genericArgs, this.baseType) }" + + " };" + + " const __type_any = new KipperType('any', undefined, undefined);" + + " const __type_null = new KipperType('null', undefined, undefined);" + + " const __type_undefined = new KipperType('undefined', undefined, undefined);" + + " const __type_str = new KipperType('str', undefined, undefined);" + + " const __type_num = new KipperType('num', undefined, undefined);" + + " const __type_bool = new KipperType('bool', undefined, undefined);" + + " const __type_obj = new KipperType('obj', [], []);" + + " const __type_Array = new KipperGenericType('Array', undefined, undefined, {T: __type_any});" + + " const __type_Func = new KipperGenericType('Func', undefined, undefined, {T: [], R: __type_any});" + + " return {" + + " KipperError: KipperError," + + " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + + " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + + " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + + " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + + " Type: KipperType," + + " builtIn: {" + + " any: __type_any," + + " null: __type_null," + + " undefined: __type_undefined," + + " str: __type_str," + + " num: __type_num," + + " bool: __type_bool," + + " obj: __type_obj," + + " Array: __type_Array," + + " Func: __type_Func," + + " }," + + " assignTypeMeta: (value, typeMeta) => Object.assign(value, { __kipType: typeMeta })," + + " typeOf: (value) => {" + + " const prim = typeof value;" + + " switch (prim) {" + + " case 'undefined': return __kipper.builtIn.undefined;" + + " case 'string': return __kipper.builtIn.str;" + + " case 'number': return __kipper.builtIn.num;" + + " case 'boolean': return __kipper.builtIn.bool;" + + " case 'function': {" + + " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Func;" + + " }" + + " case 'symbol':" + + " case 'bigint':" + + " case 'object': {" + + " if (value === null) return __kipper.builtIn.null;" + + " if (Array.isArray(value)) {" + + " return '__kipType' in value ? value.__kipType : __kipper.builtIn.Array;" + + " }" + + " const prot = Object.getPrototypeOf(value);" + + " if (prot && prot.constructor !== Object) {" + + " return prot.constructor;" + + " }" + + " return __kipper.builtIn.obj;" + + " }" + + " }" + + " }," + + "matches: (value, pattern) => {" + + " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " if (pattern.fields && Array.isArray(pattern.fields)) {" + + " for (const field of pattern.fields) {" + + " const fieldName = field.name;" + + " const fieldType = field.type;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + + " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + + " return false;" + + " }" + + " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + + " if (!__kipper.matches(fieldValue, fieldType)) {" + + " return false;" + + " }" + + " }" + + " }" + + " }" + + " if (pattern.methods && Array.isArray(pattern.methods)) {" + + " for (const field of pattern.methods) {" + + " const fieldName = field.name;" + + " const fieldReturnType = field.returnType;" + + " const parameters = field.parameters;" + + " const nameIsInType = fieldName in value;" + + " if (!nameIsInType) {" + + " return false;" + + " }" + + " const fieldValue = value[fieldName];" + + " return fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " }" + + " }" + + " return true;" + + " }," + + inlinedRequirements + + " };" + + "};", ], // global __kipper variable ["var __kipper = __globalScope.__kipper = (__globalScope.__kipper || __createKipper());"], diff --git a/kipper/target-js/src/runtime-types.ts b/kipper/target-js/src/runtime-types.ts index ee74d508a..369b7047c 100644 --- a/kipper/target-js/src/runtime-types.ts +++ b/kipper/target-js/src/runtime-types.ts @@ -33,7 +33,7 @@ export class RuntimeTypesGenerator { } else { propertiesWithTypes.push( `new ${TargetJS.getBuiltInIdentifier("Property")}("${property.identifier}",` + - ` ${KipperJavaScriptTarget.internalInterfacePrefix}_${type.valueType}),`, + ` ${KipperJavaScriptTarget.internalInterfacePrefix}_${type.valueType}),`, ); } } @@ -61,7 +61,7 @@ export class RuntimeTypesGenerator { [ "const ", identifier, - ` = new ${TargetJS.internalObjectIdentifier}.Type("` + interfaceName + "\"", + ` = new ${TargetJS.internalObjectIdentifier}.Type("` + interfaceName + '"', ", [", ...propertiesWithTypes, "], [", From a8503f24564fc4ca29514cae5f4ff2285bd20149 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 9 Sep 2024 13:57:38 +0200 Subject: [PATCH 36/81] major (#686): Implemented semantic analysis and type checks for instanceof --- .../instanceof-expression-semantics.ts | 20 ++++++++++++- .../instanceof-expression-type-semantics.ts | 15 +++++----- .../instanceof-expression.ts | 28 +++++++++++++++---- .../semantics/analyser/type-checker.ts | 21 ++++++++++---- kipper/core/src/errors.ts | 10 +++++++ 5 files changed, 75 insertions(+), 19 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts index 151b48afe..9b9ba4aa8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts @@ -1,3 +1,21 @@ import type { ExpressionSemantics } from "../expression-semantics"; +import {CustomType, RawType} from "../../../../semantics"; +import {Expression} from "../expression"; +import type {IdentifierTypeSpecifierExpression} from "../type-specifier-expression"; -export interface InstanceofExpressionSemantics extends ExpressionSemantics {} +/** + * The semantics for an instanceof expression. + * @since 0.12.0 + */ +export interface InstanceofExpressionSemantics extends ExpressionSemantics { + /** + * The type that the left-hand side of the instanceof expression is being checked against. + * @since 0.12.0 + */ + operand: Expression; + /** + * The type that the right-hand side of the instanceof expression is being checked against. + * @since 0.12.0 + */ + classTypeSpecifier: IdentifierTypeSpecifierExpression; +} diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts index f2a40b20e..dd33e661b 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts @@ -1,16 +1,15 @@ import type { ExpressionTypeSemantics } from "../expression-type-semantics"; import type { CustomType } from "../../../../semantics"; +import {Expression} from "../expression"; +/** + * The type semantics for an instanceof expression. + * @since 0.12.0 + */ export interface InstanceofExpressionTypeSemantics extends ExpressionTypeSemantics { - /** - * The type that the left-hand side of the instanceof expression is being checked against. - * @since 0.1.0 - */ - toBeChecked: CustomType; - /** * The type that the right-hand side of the instanceof expression is being checked against. + * @since 0.12.0 */ - - toBeCheckedAgainst: CustomType; + classType: CustomType; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts index ffb0af723..ec6556d5c 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts @@ -1,12 +1,14 @@ -import type { TargetASTNodeSemanticAnalyser } from "../../../../target-presets"; import { Expression } from "../expression"; import type { InstanceofExpressionSemantics } from "./instanceof-expression-semantics"; import type { InstanceofExpressionTypeSemantics } from "./instanceof-expression-type-semantics"; import type { InstanceOfExpressionContext } from "../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; import type { CompilableASTNode } from "../../../compilable-ast-node"; +import {UnableToDetermineSemanticDataError} from "../../../../../errors"; +import type {IdentifierTypeSpecifierExpression} from "../type-specifier-expression"; +import {BuiltInTypes, CustomType} from "../../../../semantics"; -export class InstanceofExpression extends Expression { +export class InstanceofExpression extends Expression { /** * The static kind for this AST Node. * @since 0.12.0 @@ -55,12 +57,28 @@ export class InstanceofExpression extends Expression { - console.log("InstanceofExpression primarySemanticAnalysis"); - throw new Error("Method not implemented."); + const children = this.children; + if (!children || children.length < 2) { + throw new UnableToDetermineSemanticDataError(); + } + + const operand = children[0]; + const classTypeSpecifier = children[1]; + this.semanticData = { + operand: operand, + classTypeSpecifier: classTypeSpecifier, + }; } public async primarySemanticTypeChecking(): Promise { - throw new Error("Method not implemented."); + const semanticData = this.getSemanticData(); + const classType = semanticData.classTypeSpecifier.getTypeSemanticData().storedType; + + this.programCtx.typeCheck(this).validInstanceofClassType(classType); + this.typeSemantics = { + classType: classType, + evaluatedType: BuiltInTypes.bool, + }; } public targetCodeGenerator = this.codeGenerator.instanceofExpression; diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 260b8eea5..22307a3e4 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -45,7 +45,7 @@ import { kipperPlusOperator, kipperSupportedConversions, } from "../../const"; -import type { TypeError } from "../../../errors"; +import {InvalidInstanceOfTypeError, TypeError} from "../../../errors"; import { ArithmeticOperationTypeError, BitwiseOperationTypeError, @@ -68,8 +68,8 @@ import { ValueNotIndexableTypeError, ValueTypeNotIndexableWithGivenAccessor, } from "../../../errors"; -import type { BuiltInTypeArray, CustomType, GenericType, GenericTypeArguments, ProcessedType, RawType } from "../types"; -import { BuiltInTypeFunc, BuiltInTypeObj, UndefinedType } from "../types"; +import type { BuiltInTypeArray, GenericType, GenericTypeArguments, ProcessedType, RawType } from "../types"; +import { CustomType, BuiltInTypeFunc, BuiltInTypeObj, UndefinedType } from "../types"; /** * Kipper Type Checker, which asserts that type logic and cohesion is valid and throws errors in case that an @@ -786,7 +786,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { * @throws {KipperNotImplementedError} When the branch types are mismatching, as union types are not implemented yet. * @since 0.11.0 */ - validConditionalExpression(trueBranch: Expression, falseBranch: Expression) { + public validConditionalExpression(trueBranch: Expression, falseBranch: Expression) { const trueBranchType = trueBranch.getTypeSemanticData().evaluatedType; const falseBranchType = falseBranch.getTypeSemanticData().evaluatedType; @@ -811,7 +811,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { * @param param The array primary expression to check. * @since 0.12.0 */ - validArrayExpression(param: ArrayPrimaryExpression) { + public validArrayExpression(param: ArrayPrimaryExpression) { const children = param.getSemanticData().value; if (children.length > 0) { const expectedType = children[0].getTypeSemanticData().evaluatedType; @@ -826,4 +826,15 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { } } } + + /** + * Checks whether the passed object expression is valid. + * @param type The object primary expression to check. + * @since 0.12.0 + */ + public validInstanceofClassType(type: ProcessedType) { + if (!(type instanceof CustomType) || type.kind !== "class") { + throw this.notImplementedError(new InvalidInstanceOfTypeError(type.toString())); + } + } } diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 4f3ff6451..bb34561ce 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -840,6 +840,16 @@ export class PropertyDoesNotExistError extends TypeError { } } +/** + * Error that is thrown whenever a type is used for an instanceof expression that is not a class. + * @since 0.12.0 + */ +export class InvalidInstanceOfTypeError extends TypeError { + constructor(type: string) { + super(`Type '${type}' can not be used with 'instanceof' operator. Expects a class.`); + } +} + /** * Error that is thrown whenever a constant declaration is not defined. * @since 0.8.3 From 7f8ca1aa65e13483eb2436673e705da9092a95ee Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 9 Sep 2024 15:22:46 +0200 Subject: [PATCH 37/81] other: Optimised imports and prettified code --- kipper/cli/README.md | 21 +- .../compiler/ast/mapping/ast-node-mapper.ts | 6 +- .../instanceof-expression-semantics.ts | 5 +- .../instanceof-expression-type-semantics.ts | 1 - .../instanceof-expression.ts | 21 +- .../lexer-parser/antlr/KipperLexer.ts | 3 - .../lexer-parser/antlr/KipperParser.ts | 7 +- .../antlr/KipperParserListener.ts | 252 +++++++++--------- .../lexer-parser/antlr/KipperParserVisitor.ts | 252 +++++++++--------- .../semantics/analyser/type-checker.ts | 5 +- .../target-presets/semantic-analyser.ts | 6 +- .../translation/code-generator.ts | 6 +- kipper/target-js/src/code-generator.ts | 20 +- kipper/target-js/src/semantic-analyser.ts | 4 +- 14 files changed, 312 insertions(+), 297 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 7aec992f7..bb1002f95 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts index af686c3a5..052b92e47 100644 --- a/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts +++ b/kipper/core/src/compiler/ast/mapping/ast-node-mapper.ts @@ -127,7 +127,7 @@ import { VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, } from "../nodes"; -import { InstanceofExpression } from "../nodes/expressions/instanceof-expression/instanceof-expression"; +import { InstanceOfExpression } from "../nodes/expressions/instanceof-expression/instanceof-expression"; /** * Mapper class which maps kind ids or rule names to their corresponding AST classes. @@ -194,7 +194,7 @@ export class ASTNodeMapper { [ParseRuleKindMapping.RULE_bitwiseShiftExpression]: BitwiseShiftExpression, [ParseRuleKindMapping.RULE_lambdaPrimaryExpression]: LambdaPrimaryExpression, [ParseRuleKindMapping.RULE_typeofExpression]: TypeofExpression, - [ParseRuleKindMapping.RULE_instanceofExpression]: InstanceofExpression, + [ParseRuleKindMapping.RULE_instanceofExpression]: InstanceOfExpression, } satisfies Record>; /** @@ -355,7 +355,7 @@ export class ASTNodeMapper { RULE_lambdaPrimaryExpression: LambdaPrimaryExpression, RULE_typeofExpression: TypeofExpression, RULE_newInstantiationExpression: NewInstantiationExpression, - RULE_instanceofExpression: InstanceofExpression, + RULE_instanceofExpression: InstanceOfExpression, } satisfies Record>; /** diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts index 9b9ba4aa8..b29697dd7 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-semantics.ts @@ -1,7 +1,6 @@ import type { ExpressionSemantics } from "../expression-semantics"; -import {CustomType, RawType} from "../../../../semantics"; -import {Expression} from "../expression"; -import type {IdentifierTypeSpecifierExpression} from "../type-specifier-expression"; +import type { Expression } from "../expression"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; /** * The semantics for an instanceof expression. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts index dd33e661b..aadcdbcd8 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression-type-semantics.ts @@ -1,6 +1,5 @@ import type { ExpressionTypeSemantics } from "../expression-type-semantics"; import type { CustomType } from "../../../../semantics"; -import {Expression} from "../expression"; /** * The type semantics for an instanceof expression. diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts index ec6556d5c..b676c3e9c 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts @@ -4,11 +4,16 @@ import type { InstanceofExpressionTypeSemantics } from "./instanceof-expression- import type { InstanceOfExpressionContext } from "../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; import type { CompilableASTNode } from "../../../compilable-ast-node"; -import {UnableToDetermineSemanticDataError} from "../../../../../errors"; -import type {IdentifierTypeSpecifierExpression} from "../type-specifier-expression"; -import {BuiltInTypes, CustomType} from "../../../../semantics"; +import { UnableToDetermineSemanticDataError } from "../../../../../errors"; +import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expression"; +import type { CustomType } from "../../../../semantics"; +import { BuiltInTypes } from "../../../../semantics"; -export class InstanceofExpression extends Expression { +export class InstanceOfExpression extends Expression< + InstanceofExpressionSemantics, + InstanceofExpressionTypeSemantics, + Expression +> { /** * The static kind for this AST Node. * @since 0.12.0 @@ -41,7 +46,7 @@ export class InstanceofExpression extends Expression { @@ -81,8 +86,8 @@ export class InstanceofExpression extends Expression; /** - * Performs translation-specific semantic analysis for {@link InstanceofExpression} instances. + * Performs translation-specific semantic analysis for {@link InstanceOfExpression} instances. */ - public abstract instanceofExpression?: TargetASTNodeSemanticAnalyser; + public abstract instanceOfExpression?: TargetASTNodeSemanticAnalyser; } diff --git a/kipper/core/src/compiler/target-presets/translation/code-generator.ts b/kipper/core/src/compiler/target-presets/translation/code-generator.ts index 760d68fb3..13c7cfe8e 100644 --- a/kipper/core/src/compiler/target-presets/translation/code-generator.ts +++ b/kipper/core/src/compiler/target-presets/translation/code-generator.ts @@ -60,7 +60,7 @@ import type { } from "../../ast"; import type { TranslatedCodeLine, TranslatedExpression } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; -import type { InstanceofExpression } from "../../ast/nodes/expressions/instanceof-expression/instanceof-expression"; +import type { InstanceOfExpression } from "../../ast/nodes/expressions/instanceof-expression/instanceof-expression"; /** * Represents a function that translates a Kipper {@link CompilableASTNode token} code into a @@ -439,7 +439,7 @@ export abstract class KipperTargetCodeGenerator { public abstract typeofExpression: TargetASTNodeCodeGenerator; /** - * Translates a {@Link InstanceofExpression} into a specific language. + * Translates a {@Link InstanceOfExpression} into a specific language. */ - public abstract instanceofExpression: TargetASTNodeCodeGenerator; + public abstract instanceOfExpression: TargetASTNodeCodeGenerator; } diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 77f71b736..1256a8b2a 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -60,7 +60,7 @@ import type { TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - InstanceofExpression, + InstanceOfExpression, } from "@kipper/core"; import { AssignmentExpression, @@ -1098,7 +1098,21 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { return [TargetJS.getBuiltInIdentifier("typeOf"), "(", ...operand, ")"]; }; - instanceofExpression = async (node: InstanceofExpression): Promise => { - return ["Jo here i am"]; + /** + * Translates a {@link InstanceOfExpression} into the JavaScript language. + */ + instanceOfExpression = async (node: InstanceOfExpression): Promise => { + const semanticData = node.getSemanticData(); + const typeData = node.getTypeSemanticData(); + const operand = await semanticData.operand.translateCtxAndChildren(); + const classType = TargetJS.getRuntimeType(typeData.classType); + + return [ + ...operand, + " ", + "instanceof", + " ", + classType, + ]; }; } diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index ee094ae1d..e363efcc2 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -7,7 +7,7 @@ import type { ClassMethodDeclaration, Declaration, FunctionDeclaration, - InstanceofExpression, + InstanceOfExpression, InterfaceDeclaration, InterfaceMethodDeclaration, InterfacePropertyDeclaration, @@ -324,5 +324,5 @@ export class JavaScriptTargetSemanticAnalyser extends KipperTargetSemanticAnalys */ typeofExpression = undefined; - instanceofExpression = undefined; + instanceOfExpression = undefined; } From 8d2f412ed340e4645bceb5780de148cea92cf90f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 9 Sep 2024 15:22:56 +0200 Subject: [PATCH 38/81] other: Updated invalid tests --- test/module/core/core-functionality.test.ts | 37 +++++++++++++------ .../reserved-identifier-overwrite.ts | 4 +- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 442f00740..c0c0ca451 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1633,7 +1633,8 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); + + const written = instance.write(); assert.include( written, "class Test {\n" + @@ -1656,7 +1657,8 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); + + const written = instance.write(); assert.include( written, `interface Test {\n` + @@ -1669,6 +1671,9 @@ describe("Core functionality", () => { "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "3", "Expected different output"), jsCode); }); it("it should be able to instantiate a class with new", async () => { @@ -1677,7 +1682,8 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); + + const written = instance.write(); assert.include( written, "class Test {\n" + @@ -1691,6 +1697,9 @@ describe("Core functionality", () => { "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "3", "Expected different output"), jsCode); }); it("it should be able to instantiate a class with new and two properties", async () => { @@ -1699,7 +1708,8 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); + + const written = instance.write(); assert.include( written, "class Test {\n" + @@ -1715,6 +1725,9 @@ describe("Core functionality", () => { "__kipper.print(x.x);", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "hello", "Expected different output"), jsCode); }); it("it should be able to use instanceof operator", async () => { @@ -1723,19 +1736,21 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - let written = instance.write(); + + const written = instance.write(); assert.include( written, "class Test {\n" + - " a: string;\n" + - " constructor(b: string)\n" + - " {\n" + - " a = b;\n" + - " }\n" + "}\n" + - 'let x: Test = new Test("3");\n', + 'let x: Test = new Test();\n' + + "if (x instanceof Test) {\n" + + ' __kipper.print("works");\n' + + "}", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "works", "Expected different output"), jsCode); }); }); }); diff --git a/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts b/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts index f255d1650..8c9eb08d5 100644 --- a/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts +++ b/test/module/core/errors/semantic-errors/reserved-identifier-overwrite.ts @@ -8,8 +8,8 @@ describe("ReservedIdentifierOverwriteError", () => { try { await new KipperCompiler().compile("var instanceof: str;", defaultConfig); } catch (e) { - assert.equal((e).constructor.name, "ReservedIdentifierOverwriteError", "Expected different error"); - assert((e).name === "IdentifierError", "Expected different error"); + assert.equal((e).constructor.name, "LexerOrParserSyntaxError", "Expected different error"); + assert((e).name === "SyntaxError", "Expected different error"); ensureTracebackDataExists(e); return; } From 511451b03a72ac63694e865c8deaf6c15b541ce6 Mon Sep 17 00:00:00 2001 From: Lorenz Holzbauer <73286868+lorenzholzbauer@users.noreply.github.com> Date: Mon, 9 Sep 2024 16:13:33 +0200 Subject: [PATCH 39/81] [#672] minor: fixed interface functions and finished match expression --- kipper/target-js/src/code-generator.ts | 17 ++++++++++++++++- kipper/target-ts/src/code-generator.ts | 4 +++- test/kipper-files/matches.kip | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index f09fb54ec..5a08c477d 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -147,6 +147,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + + " MethodParameter: class MethodParameter { constructor(name, type) { this.name = name; this.type = type; } }," + " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + " Type: KipperType," + " builtIn: {" + @@ -218,7 +219,21 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " return false;" + " }" + " const fieldValue = value[fieldName];" + - " return fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " const isSameType = fieldReturnType === fieldValue.__kipType.genericArgs.R;" + + " if (!isSameType) {" + + " return false;" + + " }" + + " const methodParameters = fieldValue.__kipType.genericArgs.T;" + + " if (parameters.length !== methodParameters.length) {" + + " return false;" + + " }" + + " let count = 0;" + + " for (let param of parameters) {" + + " if (param.type.name !== methodParameters[count].name) {" + + " return false;" + + " }" + + " count++;" + + " }" + " }" + " }" + " return true;" + diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index dce47e9f1..a6b4694dc 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -89,7 +89,9 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator ): Promise> => { const semanticData = node.getSemanticData(); const params = semanticData.params; - const returnTypeIdentifier = TargetTS.getTypeScriptType(semanticData.returnType.getTypeSemanticData().storedType); + const returnTypeIdentifier = TargetTS.getTypeScriptType( + semanticData.returnTypeSpecifier.getTypeSemanticData().storedType, + ); const paramsCode: TranslatedCodeLine[] = await Promise.all( params.map(async (param) => { diff --git a/test/kipper-files/matches.kip b/test/kipper-files/matches.kip index ce9aadd78..65f6e6e2a 100644 --- a/test/kipper-files/matches.kip +++ b/test/kipper-files/matches.kip @@ -1,6 +1,6 @@ interface Y { v: bool; - t(): num; + t(gr: str): num; } interface X { @@ -11,7 +11,7 @@ interface X { var x: X = { y: { v: true, - t: (): num -> { + t: (gr: str): num -> { return 0; } }, From 630ed6fe38a11e862c4aab4ba2657f8e49835899 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 11 Sep 2024 14:27:55 +0200 Subject: [PATCH 40/81] minor: Added additional children semantic check to parameter-declaration --- .../parameter-declaration/parameter-declaration.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts index a9675c5d9..e0998f837 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts @@ -12,6 +12,7 @@ import { Declaration } from "../declaration"; import type { ParameterDeclarationContext } from "../../../../lexer-parser"; import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../lexer-parser"; import { getParseTreeSource } from "../../../../../tools"; +import {UnableToDetermineSemanticDataError} from "../../../../../errors"; /** * Function declaration class, which represents the definition of a parameter inside a {@link FunctionDeclaration}. @@ -124,12 +125,15 @@ export class ParameterDeclaration extends Declaration< */ public async primarySemanticAnalysis(): Promise { const parseTreeChildren = this.getAntlrRuleChildren(); + if (!parseTreeChildren || !this.children || this.children.length < 1) { + throw new UnableToDetermineSemanticDataError(); + } - // The type specifier of the parameter + const identifier = getParseTreeSource(this.tokenStream, parseTreeChildren[0]) const typeSpecifier = this.children[0]; this.semanticData = { - identifier: getParseTreeSource(this.tokenStream, parseTreeChildren[0]), + identifier: identifier, valueTypeSpecifier: typeSpecifier, valueType: typeSpecifier.getSemanticData().rawType, func: this.parent, From cf6acbb43672c2608e4a60d516a6863a29eb1464 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 11 Sep 2024 14:28:08 +0200 Subject: [PATCH 41/81] other: Updated core-functionality.test.ts --- test/module/core/core-functionality.test.ts | 108 ++++++++++---------- 1 file changed, 56 insertions(+), 52 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 50eabed1c..ce1509a97 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -4,6 +4,7 @@ import { assert } from "chai"; import * as ts from "typescript"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import { jsConfig } from "./errors"; +import {ScriptTarget} from "typescript"; /** * Tests the 'print' function of Kipper. @@ -156,7 +157,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "4", "Expected different output"), jsCode); }); }); @@ -326,7 +327,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); // Overwrite built-in to access output const prevLog = console.log; assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); @@ -353,7 +354,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput(() => assert(false, "Expected no output"), jsCode); }); @@ -371,7 +372,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput(() => assert(false, "Expected no output"), jsCode); }); @@ -389,7 +390,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput(() => assert(false, "Expected no output"), jsCode); }); }); @@ -409,7 +410,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -427,7 +428,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -445,7 +446,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -463,7 +464,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput(() => assert(false, "Expected no output"), jsCode); }); }); @@ -485,7 +486,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -503,7 +504,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -521,7 +522,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -539,7 +540,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -557,7 +558,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -575,7 +576,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); }); @@ -684,7 +685,7 @@ describe("Core functionality", () => { const code = instance.write(); assert.include(code, "while (x <= 5) {\n x += 1;\n}", "Invalid TypeScript code (Expected different output)"); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "6", "Expected different output"), jsCode); }); @@ -698,7 +699,7 @@ describe("Core functionality", () => { const code = instance.write(); assert.include(code, "while (x <= 10) \n x += 1;", "Invalid TypeScript code (Expected different output)"); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "11", "Expected different output"), jsCode); }); @@ -716,7 +717,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "10", "Expected different output"), jsCode); }); @@ -734,7 +735,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); }); @@ -753,7 +754,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); }); }); @@ -773,7 +774,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "9", "Expected different output"), jsCode); }); @@ -791,7 +792,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "9", "Expected different output"), jsCode); }); @@ -809,7 +810,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "9", "Expected different output"), jsCode); }); @@ -828,7 +829,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "4", "Expected different output"), jsCode); }); @@ -847,7 +848,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "9", "Expected different output"), jsCode); }); }); @@ -864,7 +865,7 @@ describe("Core functionality", () => { const code = instance.write(); assert.include(code, "do {\n x += 1;\n} while (x <= 5)", "Invalid TypeScript code (Expected different output)"); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "6", "Expected different output"), jsCode); }); @@ -878,7 +879,7 @@ describe("Core functionality", () => { const code = instance.write(); assert.include(code, "do \n x += 1;\nwhile (x <= 10)", "Invalid TypeScript code (Expected different output)"); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "11", "Expected different output"), jsCode); }); @@ -896,7 +897,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "10", "Expected different output"), jsCode); }); @@ -914,7 +915,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); }); @@ -933,7 +934,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "5", "Expected different output"), jsCode); }); }); @@ -955,7 +956,7 @@ describe("Core functionality", () => { "Expected different TypeScript code", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "2", "Expected different output"), jsCode); }); }); @@ -975,7 +976,7 @@ describe("Core functionality", () => { "Expected different TypeScript code", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "2", "Expected different output"), jsCode); }); @@ -992,7 +993,7 @@ describe("Core functionality", () => { "Expected different TypeScript code", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "234", "Expected different output"), jsCode); }); @@ -1009,7 +1010,7 @@ describe("Core functionality", () => { "Expected different TypeScript code", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "12", "Expected different output"), jsCode); }); @@ -1026,7 +1027,7 @@ describe("Core functionality", () => { "Expected different TypeScript code", ); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "1234", "Expected different output"), jsCode); }); }); @@ -1110,7 +1111,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1130,7 +1131,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1150,7 +1151,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1178,7 +1179,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1198,7 +1199,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1218,7 +1219,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1246,7 +1247,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1266,7 +1267,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1286,7 +1287,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1308,7 +1309,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1328,7 +1329,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1348,7 +1349,7 @@ describe("Core functionality", () => { assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); assert(instance.programCtx?.stream.stringContent === fileContent, "Expected matching streams"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput( (msg: any) => assert.equal( @@ -1399,7 +1400,7 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "2", "Expected different output"), jsCode); }); @@ -1410,7 +1411,7 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); - const jsCode = ts.transpile(instance.write()); + const jsCode = ts.transpile(instance.write(), {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "2", "Expected different output"), jsCode); }); }); @@ -1507,7 +1508,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "Works", "Expected different output"), jsCode); }); @@ -1525,7 +1526,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "5", "Expected different result"), jsCode); }); @@ -1543,7 +1544,7 @@ describe("Core functionality", () => { "Invalid TypeScript code (Expected different output)", ); - const jsCode = ts.transpile(code); + const jsCode = ts.transpile(code, {target: ScriptTarget.ES2015}); testPrintOutput((message: any) => assert.equal(message, "6", "Expected different result"), jsCode); }); }); @@ -1715,6 +1716,9 @@ describe("Core functionality", () => { "__kipper.print(x.x);", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written, {target: ScriptTarget.ES2015}); + testPrintOutput((message: any) => assert.equal(message, "hello", "Expected different output"), jsCode); }); }); }); From a04f757d1e29bc9c2370360ae17341686dccc0d5 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 15 Sep 2024 22:57:11 +0200 Subject: [PATCH 42/81] major (#697): Implemented "this"-keyword and preliminary type checking system This is a major overhaul of many internal structures and fixes a lot of bugs which couldn't previously be fixed --- kipper/cli/README.md | 21 ++-- .../src/compiler/ast/analysable-ast-node.ts | 67 ++++++++++++- .../function-declaration.ts | 11 +-- .../parameter-declaration.ts | 11 +-- .../class-declaration/class-declaration.ts | 55 +++++++---- ...-constructor-declaration-type-semantics.ts | 6 +- .../class-constructor-declaration.ts | 9 +- ...class-member-declaration-type-semantics.ts | 11 +-- .../class-method-declaration-semantics.ts | 8 +- ...class-method-declaration-type-semantics.ts | 6 +- .../class-method-declaration.ts | 14 +-- ...ass-property-declaration-type-semantics.ts | 9 +- .../class-property-declaration.ts | 9 +- .../interface-declaration.ts | 11 +-- ...rface-member-declaration-type-semantics.ts | 4 +- ...rface-method-declaration-type-semantics.ts | 12 +-- .../interface-method-declaration.ts | 9 +- ...ace-property-declaration-type-semantics.ts | 11 +-- .../interface-property-declaration.ts | 9 +- ...ype-declaration-property-type-semantics.ts | 16 +++ .../type-declaration-type-semantics.ts | 4 +- .../variable-declaration.ts | 21 ++-- .../lambda-primary-expression.ts | 13 ++- .../generic-type-specifier-expression.ts | 10 +- .../identifier-type-specifier-expression.ts | 10 +- .../typeof-type-specifier-expression.ts | 11 ++- .../src/compiler/ast/nodes/root-ast-node.ts | 10 ++ .../return-statement-semantics.ts | 6 +- kipper/core/src/compiler/const.ts | 7 ++ .../lexer-parser/antlr/KipperLexer.ts | 8 +- .../lexer-parser/antlr/KipperParser.ts | 17 ++-- .../antlr/KipperParserListener.ts | 4 +- .../lexer-parser/antlr/KipperParserVisitor.ts | 4 +- kipper/core/src/compiler/program-ctx.ts | 26 ++--- .../semantics/analyser/semantic-checker.ts | 43 ++++++-- .../semantics/analyser/type-checker.ts | 16 ++- .../semantics/symbol-table/base/user-scope.ts | 25 +++++ .../semantics/symbol-table/class-scope.ts | 31 +++--- .../entry/class-scope-this-declaration.ts | 97 +++++++++++++++++++ .../symbol-table/entry/scope-declaration.ts | 1 - .../entry/scope-type-declaration.ts | 22 ++--- .../semantics/symbol-table/function-scope.ts | 4 +- .../semantics/symbol-table/global-scope.ts | 21 ++-- .../semantics/symbol-table/local-scope.ts | 16 ++- .../semantics/symbol-table/universe-scope.ts | 22 ++++- .../compiler/semantics/types/custom-type.ts | 49 +++++++++- kipper/core/src/errors.ts | 21 ++++ kipper/target-ts/src/code-generator.ts | 3 +- 48 files changed, 576 insertions(+), 255 deletions(-) create mode 100644 kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-property-type-semantics.ts create mode 100644 kipper/core/src/compiler/semantics/symbol-table/base/user-scope.ts create mode 100644 kipper/core/src/compiler/semantics/symbol-table/entry/class-scope-this-declaration.ts diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 7aec992f7..bb1002f95 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/src/compiler/ast/analysable-ast-node.ts b/kipper/core/src/compiler/ast/analysable-ast-node.ts index af25342f8..fac01476b 100644 --- a/kipper/core/src/compiler/ast/analysable-ast-node.ts +++ b/kipper/core/src/compiler/ast/analysable-ast-node.ts @@ -228,6 +228,39 @@ export abstract class AnalysableASTNode< } } + /** + * Performs preliminary type checking on this AST node and all {@link this.children children nodes}. This uses the + * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. + * + * This preliminarily sets the {@link this.typeSemantics type semantics} of this node and allows the use of + * {@link this.getTypeSemanticData} in any child that may need the data, without getting any error. + * + * This is a special step in the type checking process, where the type semantics are evaluated before the actual type + * checking is done. This is useful for cases where children need parent data to be already evaluated, like for + * example inside a class when the class type is needed for checking the "this" keyword. + * + * We will call this "Ahead of time" type evaluation, as it is done before the actual proper type checking of the + * node, preceding any other type checking in the entire tree. + * @since 0.12.0 + */ + public async preliminaryTypeChecking(): Promise { + // Start with the evaluation of the children + await this.preliminaryTypeCheckingChildren(); + + // If the semantic analysis until now has evaluated data, do the target semantic analysis of this node (if defined) + // Per default, we will say the nodes themselves handle all errors, so we don't need to do anything here + if (this.semanticData && this.primaryPreliminaryTypeChecking !== undefined) { + try { + await this.primaryPreliminaryTypeChecking(); + } catch (e) { + if (e instanceof MissingRequiredSemanticDataError) { + this._skippedSemanticTypeChecking = true; + } + throw e; // Pass on the error to the parent + } + } + } + /** * Performs type checking on this AST node and all {@link this.children children nodes}. This uses the * {@link this.semanticData semantic data} that was evaluated during {@link this.semanticAnalysis semantic analysis}. @@ -242,12 +275,16 @@ export abstract class AnalysableASTNode< // Note! Expressions do this differently and abort immediately all processing if one of the children failed. // Additionally, this will also not check for 'this.hasFailed', as we still want to run type checking if possible // even with a logic error in the code (so we only check for the semantic data) - if (this.semanticData && this.primarySemanticTypeChecking !== undefined) { + if ( + this.semanticData && + this.primarySemanticTypeChecking !== undefined && + (!this.primaryPreliminaryTypeChecking || this.typeSemantics !== undefined) + ) { try { await this.primarySemanticTypeChecking(); } catch (e) { if (e instanceof MissingRequiredSemanticDataError) { - this._skippedSemanticAnalysis = true; + this._skippedSemanticTypeChecking = true; } throw e; // Pass on the error to the parent } @@ -322,6 +359,21 @@ export abstract class AnalysableASTNode< } } + /** + * Runs {@link preliminaryTypeChecking} of all children nodes. + * @since 0.12.0 + * @protected + */ + protected async preliminaryTypeCheckingChildren(): Promise { + for (const child of this.children) { + try { + await child.preliminaryTypeChecking(); + } catch (e) { + this.handleSemanticError(e); + } + } + } + /** * Runs {@link semanticTypeChecking} of all children nodes. * @since 0.10.0 @@ -362,6 +414,17 @@ export abstract class AnalysableASTNode< */ protected abstract primarySemanticAnalysis?(): Promise; + /** + * Preliminary type checks the code inside this AST node. + * + * This is a special step in the type checking process, where the type semantics are evaluated before the actual type + * checking is done. This is useful for cases where children need parent data to be already evaluated, like for + * example inside a class when the class type is needed for checking the "this" keyword. + * @protected + * @since 0.12.0 + */ + protected primaryPreliminaryTypeChecking?(): Promise; + /** * Type checks the code inside this AST node. * diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index 242d57d41..de5a484fd 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -197,14 +197,12 @@ export class FunctionDeclaration } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); const paramTypes = semanticData.params.map((param) => param.getTypeSemanticData().valueType); const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; @@ -216,6 +214,7 @@ export class FunctionDeclaration // Ensure that all code paths return a value this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts index a9675c5d9..36f6ca0f5 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/parameter-declaration/parameter-declaration.ts @@ -145,14 +145,12 @@ export class ParameterDeclaration extends Declaration< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.7.0 + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the value type specifier @@ -161,6 +159,7 @@ export class ParameterDeclaration extends Declaration< valueType: valueType, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts index f1148da68..bc72e8c80 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-declaration.ts @@ -14,6 +14,7 @@ import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { ClassScope } from "../../../../../semantics/symbol-table/class-scope"; import { TypeDeclaration } from "../type-declaration"; import type { ClassConstructorDeclaration, ClassMemberDeclaration } from "./class-member-declaration"; +import { ClassScopeThisDeclaration } from "../../../../../semantics/symbol-table/entry/class-scope-this-declaration"; /** * Represents a class declaration in the Kipper language, which may contain methods and fields. @@ -24,31 +25,24 @@ export class ClassDeclaration implements ScopeNode { /** - /** - * The static kind for this AST Node. + * The static kind for this AST Node. * @since 0.11.0 */ public static readonly kind = ParseRuleKindMapping.RULE_classDeclaration; + /** * The static rule name for this AST Node. * @since 0.11.0 */ public static readonly ruleName = KindParseRuleMapping[this.kind]; - /** - * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. - * - * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. - * @since 0.11.0 - */ - public checkForWarnings = undefined; // TODO! - readonly targetSemanticAnalysis = this.semanticAnalyser.classDeclaration; - readonly targetCodeGenerator = this.codeGenerator.classDeclaration; + /** * The private field '_antlrRuleCtx' that actually stores the variable data, * which is returned inside the {@link this.antlrRuleCtx}. * @private */ protected override readonly _antlrRuleCtx: ClassDeclarationContext; + /** * The private field '_innerScope' that actually stores the variable data, * which is returned inside the {@link this.innerScope}. @@ -56,10 +50,18 @@ export class ClassDeclaration */ private readonly _innerScope: ClassScope; + /** + * The 'this' keyword declaration for this class. + * @private + * @since 0.12.0 + */ + private readonly _thisAliasDeclaration: ClassScopeThisDeclaration; + constructor(antlrRuleCtx: ClassDeclarationContext, parent: CompilableNodeParent) { super(antlrRuleCtx, parent); this._antlrRuleCtx = antlrRuleCtx; this._innerScope = new ClassScope(this); + this._thisAliasDeclaration = new ClassScopeThisDeclaration(this); } /** @@ -82,6 +84,15 @@ export class ClassDeclaration this._scopeDeclaration = declaration; } + /** + * Gets the "this" keyword which is simply a reference to the class declaration itself, like it were referenced + * in the class itself. + * @since 0.12.0 + */ + public get thisAliasDeclaration(): ClassScopeThisDeclaration { + return this._thisAliasDeclaration; + } + /** * Returns the kind of this AST node. This represents the specific type of the {@link antlrRuleCtx} that this AST * node wraps. @@ -154,16 +165,26 @@ export class ClassDeclaration } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.11.0 + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { this.typeSemantics = { valueType: CustomType.fromClassDeclaration(this), }; } + public readonly primarySemanticTypeChecking: undefined; + + /** + * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. + * + * This will log all warnings using {@link programCtx.logger} and store them in {@link KipperProgramContext.warnings}. + * @since 0.11.0 + */ + public checkForWarnings = undefined; // TODO! + + readonly targetSemanticAnalysis = this.semanticAnalyser.classDeclaration; + readonly targetCodeGenerator = this.codeGenerator.classDeclaration; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts index 36ef7cdfe..8555df4b0 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration-type-semantics.ts @@ -1,4 +1,4 @@ -import type { ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** @@ -7,8 +7,8 @@ import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declar */ export interface ClassConstructorDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { /** - * The processed type of this member property. + * The processed type of this member property. This is always {@link BuiltInTypeFunc a function}. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts index ac89b9090..7b613a290 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-constructor-declaration/class-constructor-declaration.ts @@ -154,18 +154,17 @@ export class ClassConstructorDeclaration } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { this.typeSemantics = { valueType: BuiltInTypes.Func, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts index 54256d038..aa88ad97c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-member-declaration-type-semantics.ts @@ -1,14 +1,7 @@ -import type { DeclarationTypeSemantics } from "../../../declaration-type-semantics"; -import type { ProcessedType } from "../../../../../../semantics"; +import type { TypeDeclarationPropertyTypeSemantics } from "../../type-declaration-property-type-semantics"; /** * Type semantics for a {@link InterfaceMemberDeclaration}. * @since 0.12.0 */ -export interface ClassMemberDeclarationTypeSemantics extends DeclarationTypeSemantics { - /** - * The processed type of this member property. - * @since 0.12.0 - */ - valueType: ProcessedType; -} +export interface ClassMemberDeclarationTypeSemantics extends TypeDeclarationPropertyTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts index 000d86222..631fde3b4 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-semantics.ts @@ -2,6 +2,7 @@ import type { IdentifierTypeSpecifierExpression } from "../../../../../expressio import type { ParameterDeclaration } from "../../../../parameter-declaration"; import type { CompoundStatement } from "../../../../../statements"; import type { ClassMemberDeclarationSemantics } from "../class-member-declaration-semantics"; +import type { RawType } from "../../../../../../../semantics"; /** * Semantics for AST Node {@link InterfacePropertyDeclaration}. @@ -22,7 +23,12 @@ export interface ClassMethodDeclarationSemantics extends ClassMemberDeclarationS * The return type of this method. * @since 0.12.0 */ - returnType: IdentifierTypeSpecifierExpression; + returnType: RawType; + /** + * The type specifier expression for the return type. + * @since 0.11.0 + */ + returnTypeSpecifier: IdentifierTypeSpecifierExpression; /** * The body of the function. * @since 0.10.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts index 23e572357..ae2f01709 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration-type-semantics.ts @@ -1,4 +1,4 @@ -import type { ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** @@ -7,8 +7,8 @@ import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declar */ export interface ClassMethodDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { /** - * The processed type of this member property. This always of type {@link BuiltInTypeFunc}. + * The processed type of this member property. This is always {@link BuiltInTypeFunc a function}. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts index 8ca03a419..ea267815f 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-method-declaration/class-method-declaration.ts @@ -163,7 +163,8 @@ export class ClassMethodDeclaration this.semanticData = { identifier: identifier, - returnType: retTypeSpecifier, + returnTypeSpecifier: retTypeSpecifier, + returnType: retTypeSpecifier.getSemanticData().rawType, parameters: params, functionBody: functionBody, }; @@ -171,23 +172,22 @@ export class ClassMethodDeclaration } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the return type specifier - const returnType = semanticData.returnType.getTypeSemanticData().storedType; + const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; this.typeSemantics = { returnType: returnType, valueType: BuiltInTypes.Func, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts index 7d5ea452c..77e52f0ee 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration-type-semantics.ts @@ -1,14 +1,7 @@ -import type { ProcessedType } from "../../../../../../../semantics"; import type { ClassMemberDeclarationTypeSemantics } from "../class-member-declaration-type-semantics"; /** * Type semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface ClassPropertyDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics { - /** - * The processed type of this member property. - * @since 0.12.0 - */ - valueType: ProcessedType; -} +export interface ClassPropertyDeclarationTypeSemantics extends ClassMemberDeclarationTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts index 7181c6b7d..ddd0e6948 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/class-declaration/class-member-declaration/class-property-declaration/class-property-declaration.ts @@ -128,14 +128,12 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the value type specifier @@ -145,6 +143,7 @@ export class ClassPropertyDeclaration extends ClassMemberDeclaration< valueType: valueType, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts index 3423eaf06..11172e00d 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-declaration.ts @@ -124,18 +124,17 @@ export class InterfaceDeclaration extends TypeDeclaration< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.11.0 + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { this.typeSemantics = { valueType: CustomType.fromInterfaceDeclaration(this), }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-member-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-member-declaration-type-semantics.ts index 3199a1a39..6424ae370 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-member-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-member-declaration-type-semantics.ts @@ -1,7 +1,7 @@ -import type { TypeDeclarationTypeSemantics } from "../../type-declaration-type-semantics"; +import type { TypeDeclarationPropertyTypeSemantics } from "../../type-declaration-property-type-semantics"; /** * Type semantics for a {@link InterfaceMemberDeclaration}. * @since 0.12.0 */ -export interface InterfaceMemberDeclarationTypeSemantics extends TypeDeclarationTypeSemantics {} +export interface InterfaceMemberDeclarationTypeSemantics extends TypeDeclarationPropertyTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts index 458b114da..855c69976 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration-type-semantics.ts @@ -1,14 +1,14 @@ -import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; -import type { ProcessedType } from "../../../../../../../semantics"; +import type { BuiltInTypeFunc } from "../../../../../../../semantics"; +import type { TypeDeclarationPropertyTypeSemantics } from "../../../type-declaration-property-type-semantics"; /** - * + * Type semantics for AST Node {@link InterfaceMethodDeclaration}. * @since 0.12.0 */ -export interface InterfaceMethodDeclarationTypeSemantics extends TypeDeclarationTypeSemantics { +export interface InterfaceMethodDeclarationTypeSemantics extends TypeDeclarationPropertyTypeSemantics { /** - * The processed type of this member property. + * The processed type of this member property. This is always {@link BuiltInTypeFunc a function}. * @since 0.12.0 */ - valueType: ProcessedType; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts index 5566006f9..c4570e99c 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-method-declaration/interface-method-declaration.ts @@ -150,14 +150,12 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the return type specifier @@ -167,6 +165,7 @@ export class InterfaceMethodDeclaration extends InterfaceMemberDeclaration< valueType: BuiltInTypes.Func, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts index fbd8390cb..5c4ff6749 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration-type-semantics.ts @@ -1,14 +1,7 @@ -import type { TypeDeclarationTypeSemantics } from "../../../type-declaration-type-semantics"; -import type { ProcessedType } from "../../../../../../../semantics"; +import type { TypeDeclarationPropertyTypeSemantics } from "../../../type-declaration-property-type-semantics"; /** * Type semantics for AST Node {@link InterfacePropertyDeclaration}. * @since 0.12.0 */ -export interface InterfacePropertyDeclarationTypeSemantics extends TypeDeclarationTypeSemantics { - /** - * The processed type of this member property. - * @since 0.12.0 - */ - valueType: ProcessedType; -} +export interface InterfacePropertyDeclarationTypeSemantics extends TypeDeclarationPropertyTypeSemantics {} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts index b96def35e..3df65bacc 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/interface-declaration/interface-member-declaration/interface-property-declaration/interface-property-declaration.ts @@ -124,14 +124,12 @@ export class InterfacePropertyDeclaration extends InterfaceMemberDeclaration< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the value type specifier @@ -141,6 +139,7 @@ export class InterfacePropertyDeclaration extends InterfaceMemberDeclaration< valueType: valueType, }; } + public readonly primarySemanticTypeChecking: undefined; /** * Semantically analyses the code inside this AST node and checks for possible warnings or problematic code. diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-property-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-property-type-semantics.ts new file mode 100644 index 000000000..aef381732 --- /dev/null +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-property-type-semantics.ts @@ -0,0 +1,16 @@ +import type { ProcessedType } from "../../../../semantics"; +import type { DeclarationTypeSemantics } from "../declaration-type-semantics"; + +/** + * Type semantics for a property declaration inside a {@link TypeDeclaration}. + * + * This is a simple helper interface for the properties inside classes and interfaces. + * @since 0.12.0 + */ +export interface TypeDeclarationPropertyTypeSemantics extends DeclarationTypeSemantics { + /** + * The processed type of the type declaration. + * @since 0.12.0 + */ + valueType: ProcessedType; +} diff --git a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts index 1de8964d0..312e2f25f 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/type-declaration/type-declaration-type-semantics.ts @@ -1,11 +1,11 @@ -import type { TypeData } from "../../../ast-node"; import type { ProcessedType } from "../../../../semantics"; +import type { DeclarationTypeSemantics } from "../declaration-type-semantics"; /** * Type semantics for a {@link TypeDeclaration}. * @since 0.11.0 */ -export interface TypeDeclarationTypeSemantics extends TypeData { +export interface TypeDeclarationTypeSemantics extends DeclarationTypeSemantics { /** * The processed type of the type declaration. * @since 0.11.0 diff --git a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts index 4b64923e0..c8c8a8291 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/variable-declaration/variable-declaration.ts @@ -185,14 +185,12 @@ export class VariableDeclaration extends Declaration { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Get the type that will be returned using the value type specifier @@ -201,6 +199,17 @@ export class VariableDeclaration extends Declaration { + const semanticData = this.getSemanticData(); // If the variable is defined, check whether the assignment is valid if (semanticData.value) { diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts index 2485126a4..f8ada7510 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts @@ -12,8 +12,8 @@ import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { ScopeNode } from "../../../../scope-node"; import type { Statement } from "../../../statements"; -import { CompoundStatement } from "../../../statements"; import type { IdentifierTypeSpecifierExpression } from "../../type-specifier-expression"; +import { CompoundStatement } from "../../../statements"; import { ParameterDeclaration } from "../../../declarations"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { BuiltInTypeFunc, LambdaScope } from "../../../../../semantics"; @@ -143,14 +143,12 @@ export class LambdaPrimaryExpression } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. + * Preliminary registers the class declaration type to allow for internal self-referential type checking. * - * This will not run in case that {@link this.hasFailed} is true, as that indicates that the type checking of - * the children has already failed and as such no parent node should run type checking. - * @since 0.11.0 + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); const paramTypes = semanticData.params.map((param) => param.getTypeSemanticData().valueType); const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; @@ -166,6 +164,7 @@ export class LambdaPrimaryExpression this.programCtx.typeCheck(this).validReturnCodePathsInFunctionBody(this); } } + public readonly primarySemanticTypeChecking: undefined; public checkForWarnings = undefined; diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts index 5bb287e03..aa70eaf33 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/generic-type-specifier-expression/generic-type-specifier-expression.ts @@ -101,11 +101,12 @@ export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 + * Preliminary registers the class declaration type to allow for internal self-referential type checking. + * + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); const valueType = this.programCtx.typeCheck(this).getCheckedType(semanticData.rawType, this.scope); const providedArguments = semanticData.genericArguments.map((arg) => arg.getTypeSemanticData().storedType); @@ -179,6 +180,7 @@ export class GenericTypeSpecifierExpression extends TypeSpecifierExpression< storedType: (>valueType).changeGenericTypeArguments(newGenericArguments), }; } + public readonly primarySemanticTypeChecking: undefined; public checkForWarnings = undefined; // TODO! diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts index 4216c98c8..410f79ac1 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/identifier-type-specifier-expression/identifier-type-specifier-expression.ts @@ -97,11 +97,12 @@ export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< } /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 + * Preliminary registers the class declaration type to allow for internal self-referential type checking. + * + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); // Create a checked type instance (this function handles error recovery and invalid types) @@ -112,6 +113,7 @@ export class IdentifierTypeSpecifierExpression extends TypeSpecifierExpression< storedType: valueType, }; } + public readonly primarySemanticTypeChecking: undefined; public checkForWarnings = undefined; // TODO! diff --git a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts index 6721147f3..39bfa4707 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/type-specifier-expression/typeof-type-specifier-expression/typeof-type-specifier-expression.ts @@ -96,13 +96,13 @@ export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< }, }; } - /** - * Performs type checking for this AST Node. This will log all warnings using {@link programCtx.logger} - * and throw errors if encountered. - * @since 0.8.0 + * Preliminary registers the class declaration type to allow for internal self-referential type checking. + * + * This is part of the "Ahead of time" type evaluation, which is done before the main type checking. + * @since 0.12.0 */ - public async primarySemanticTypeChecking(): Promise { + public async primaryPreliminaryTypeChecking(): Promise { const semanticData = this.getSemanticData(); const valueReference = semanticData.ref; @@ -111,6 +111,7 @@ export class TypeofTypeSpecifierExpression extends TypeSpecifierExpression< storedType: valueReference.refTarget.type, }; } + public readonly primarySemanticTypeChecking: undefined; public checkForWarnings = undefined; // TODO! diff --git a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts index d3fef873f..fd6fa47a5 100644 --- a/kipper/core/src/compiler/ast/nodes/root-ast-node.ts +++ b/kipper/core/src/compiler/ast/nodes/root-ast-node.ts @@ -190,6 +190,16 @@ export class RootASTNode extends ParserASTNode imp } } + // Perform preliminary semantic analysis in case any specific type evaluation is required prematurely (ahead of + // time type evaluation) + for (let child of this.children) { + try { + await child.preliminaryTypeChecking(); + } catch (e) { + await this.handleSemanticError(e); + } + } + // Perform type-checking based on the existing AST nodes and evaluated semantics for (let child of this.children) { try { diff --git a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts index ed04641ad..ede39c977 100644 --- a/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/statements/return-statement/return-statement-semantics.ts @@ -3,8 +3,8 @@ * @since 0.10.0 */ import type { SemanticData } from "../../../ast-node"; -import type { Expression, LambdaPrimaryExpression } from "../../expressions"; -import type { FunctionDeclaration } from "../../declarations"; +import type { Expression } from "../../expressions"; +import type { KipperCallable } from "../../../../const"; /** * Semantics for AST Node {@link ReturnStatement}. @@ -20,5 +20,5 @@ export interface ReturnStatementSemantics extends SemanticData { * The function that this return statement is in. * @since 0.10.0 */ - function: FunctionDeclaration | LambdaPrimaryExpression; + function: KipperCallable; } diff --git a/kipper/core/src/compiler/const.ts b/kipper/core/src/compiler/const.ts index 508ba8c54..d2217349f 100644 --- a/kipper/core/src/compiler/const.ts +++ b/kipper/core/src/compiler/const.ts @@ -3,6 +3,7 @@ * @since 0.3.0 */ import type { ScopeDeclaration } from "./semantics"; +import type { ClassMethodDeclaration, FunctionDeclaration, LambdaPrimaryExpression } from "./ast"; /** * If this variable is true, then this environment is assumed to be inside a browser and special browser support should @@ -647,6 +648,12 @@ export type KipperReferenceable = ScopeDeclaration; */ export type JmpStatementType = "continue" | "break"; +/** + * Represents all possible callable ast nodes inside Kipper. + * @since 0.12.0 + */ +export type KipperCallable = FunctionDeclaration | LambdaPrimaryExpression | ClassMethodDeclaration; + /** * Represents the internal identifier for a Kipper constructor. * @since 0.12.0 diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts index fcc1aef27..5056d2cef 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperLexer.ts @@ -2,12 +2,12 @@ import KipperLexerBase from "./base/KipperLexerBase"; -import { ATN } from "antlr4ts/atn/ATN"; +import type { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { CharStream } from "antlr4ts/CharStream"; +import type { CharStream } from "antlr4ts/CharStream"; import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { RuleContext } from "antlr4ts/RuleContext"; -import { Vocabulary } from "antlr4ts/Vocabulary"; +import type { RuleContext } from "antlr4ts/RuleContext"; +import type { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index b436a610f..c5dbd7db7 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -2,28 +2,29 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ASTKind, KipperParserRuleContext, ParseRuleKindMapping } from ".."; +import type { ASTKind } from ".."; +import { KipperParserRuleContext, ParseRuleKindMapping } from ".."; import KipperParserBase from "./base/KipperParserBase"; import { ATN } from "antlr4ts/atn/ATN"; import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import type { ParserRuleContext } from "antlr4ts/ParserRuleContext"; import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; import { RecognitionException } from "antlr4ts/RecognitionException"; -import { RuleContext } from "antlr4ts/RuleContext"; +import type { RuleContext } from "antlr4ts/RuleContext"; //import { RuleVersion } from "antlr4ts/RuleVersion"; -import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import type { TerminalNode } from "antlr4ts/tree/TerminalNode"; import { Token } from "antlr4ts/Token"; -import { TokenStream } from "antlr4ts/TokenStream"; -import { Vocabulary } from "antlr4ts/Vocabulary"; +import type { TokenStream } from "antlr4ts/TokenStream"; +import type { Vocabulary } from "antlr4ts/Vocabulary"; import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; -import { KipperParserListener } from "./KipperParserListener"; -import { KipperParserVisitor } from "./KipperParserVisitor"; +import type { KipperParserListener } from "./KipperParserListener"; +import type { KipperParserVisitor } from "./KipperParserVisitor"; export class KipperParser extends KipperParserBase { public static readonly FStringExpStart = 1; diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts index 4797a5272..2fb12c068 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserListener.ts @@ -3,9 +3,9 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import type { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { +import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualBitwiseAndExpressionContext, diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts index 6c7f4c2dd..ccccacb40 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParserVisitor.ts @@ -3,9 +3,9 @@ // Import the required class for the ctx super class, as well as the 'ASTKind' type defining all possible syntax // kind values. -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import type { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { +import type { ActualAdditiveExpressionContext, ActualAssignmentExpressionContext, ActualBitwiseAndExpressionContext, diff --git a/kipper/core/src/compiler/program-ctx.ts b/kipper/core/src/compiler/program-ctx.ts index 9540773df..e66ef2cb6 100644 --- a/kipper/core/src/compiler/program-ctx.ts +++ b/kipper/core/src/compiler/program-ctx.ts @@ -30,7 +30,6 @@ import type { } from "./semantics"; import { BuiltInFunctions, - BuiltInTypes, BuiltInVariables, KipperSemanticChecker, KipperTypeChecker, @@ -212,7 +211,9 @@ export class KipperProgramContext { this._internalReferences = []; this._warnings = []; this._errors = []; - this._initUniversalReferencables(compileConfig); + + this.logger.debug("Setting up built-ins in global scope."); + this._initUniversalReferenceables(compileConfig); } // @ts-ignore @@ -484,19 +485,6 @@ export class KipperProgramContext { return listener.rootNode; } - /** - * Sets up the built-ins for this program. This function should be called before the semantic analysis is run. - * - * TODO! For now this only registers the built-in types in the global scope so they can be use, but in the future - * this should also generate the built-in functions and variables. - * @since 0.11.0 - */ - public async setUpBuiltInsInGlobalScope(): Promise { - for (const [_, type] of Object.entries(BuiltInTypes)) { - this._universeScope.addType(type); - } - } - /** * Runs the semantic analysis for this {@link KipperProgramContext program}. This function will log debugging messages * and warnings using the {@link this.logger logger of this instance} and throw errors in case any logical issues are @@ -599,8 +587,6 @@ export class KipperProgramContext { this._rootASTNode = await this.generateAbstractSyntaxTree(); // Running the semantic analysis for the AST - this.logger.debug("Setting up built-ins in global scope."); - await this.setUpBuiltInsInGlobalScope(); this.logger.info(`Analysing semantics.`); await this.semanticAnalysis(); @@ -796,7 +782,7 @@ export class KipperProgramContext { } /** - * Initialises the universal referencables for the program context, by registering all built-in functions and + * Initialises the universal Referenceables for the program context, by registering all built-in functions and * variables as well as adding all the extension functions and variables. * * This will initialise {@link this._universeScope}. @@ -804,7 +790,7 @@ export class KipperProgramContext { * @private * @since 0.11.0 */ - private _initUniversalReferencables(compileConfig: EvaluatedCompileConfig) { + private _initUniversalReferenceables(compileConfig: EvaluatedCompileConfig) { // Register all built-in functions const globalFunctions = [...Object.values(BuiltInFunctions), ...compileConfig.extendBuiltInFunctions]; this.registerBuiltInFunctions(globalFunctions); @@ -821,9 +807,11 @@ export class KipperProgramContext { this._universeScope.init(); for (const extFunction of compileConfig.extendBuiltInFunctions) { + this.logger.debug(`Adding extended built-in function '${extFunction.identifier}'.`); this._universeScope.addFunction(extFunction); } for (const extVariable of compileConfig.extendBuiltInVariables) { + this.logger.debug(`Adding extended built-in variable '${extVariable.identifier}'.`); this._universeScope.addVariable(extVariable); } } diff --git a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts index d4be4d634..5f849a68d 100644 --- a/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/semantic-checker.ts @@ -3,16 +3,20 @@ * invalid use of tokens is detected. * @since 0.7.0 */ -import type { KipperReferenceable } from "../../const"; +import type { KipperCallable, KipperReferenceable } from "../../const"; import type { KipperProgramContext } from "../../program-ctx"; import type { CompilableNodeChild, CompilableNodeParent, + Declaration, JumpStatement, ReturnStatement, VariableDeclaration, } from "../../ast"; import { + ClassMemberDeclaration, + ClassMethodDeclaration, + ClassPropertyDeclaration, CompoundStatement, Expression, FunctionDeclaration, @@ -28,6 +32,7 @@ import { BuiltInOrInternalGeneratorFunctionNotFoundError, BuiltInOverwriteError, IdentifierAlreadyUsedByFunctionError, + IdentifierAlreadyUsedByMemberError, IdentifierAlreadyUsedByParameterError, IdentifierAlreadyUsedByVariableError, InvalidAssignmentError, @@ -88,6 +93,7 @@ export class KipperSemanticChecker extends KipperSemanticsAsserter { /** * Recursively ensures that the identifier does not overwrite any declarations in this scope or parent scopes. + * @param declaration The declaration to check. * @param identifier The identifier to search for in this scope and its parent scopes. * @param scopeCtx The context instance of the scope. * @throws {IdentifierAlreadyUsedByVariableError} If the identifier is already used by a variable. @@ -96,20 +102,35 @@ export class KipperSemanticChecker extends KipperSemanticsAsserter { * @throws {BuiltInOverwriteError} If the identifier is already in use by a built-in function. * @since 0.10.0 */ - public identifierNotUsed(identifier: string, scopeCtx: Scope): void { + public identifierNotUsed(declaration: Declaration, identifier: string, scopeCtx: Scope): void { // Ensure beforehand that also no built-in has the same identifier this.builtInNotDefined(identifier); const ref = scopeCtx.getEntryRecursively(identifier); if (ref) { if (ref instanceof ScopeVariableDeclaration) { - throw this.assertError(new IdentifierAlreadyUsedByVariableError(identifier)); + if (ref.node instanceof ClassPropertyDeclaration) { + if (declaration instanceof ClassMemberDeclaration) { + throw this.assertError(new IdentifierAlreadyUsedByMemberError(identifier, "class")); + } + // If the declaration is a class property and the reference is a class property, throw an error + // Otherwise we are dealing with a variable shadowing a class property, which is allowed, as the user already + // needs to use "this" to access the class property + } else { + throw this.assertError(new IdentifierAlreadyUsedByVariableError(identifier)); + } } else if (ref instanceof ScopeFunctionDeclaration) { - throw this.assertError(new IdentifierAlreadyUsedByFunctionError(identifier)); + if (ref.node instanceof ClassMethodDeclaration) { + if (declaration instanceof ClassMemberDeclaration) { + throw this.assertError(new IdentifierAlreadyUsedByMemberError(identifier, "class")); + } + // If the declaration is a class property and the reference is a class property, throw an error + // Otherwise we are dealing with a variable shadowing a class method, which is allowed, as the user already + // needs to use "this" to access the class method + } else { + throw this.assertError(new IdentifierAlreadyUsedByFunctionError(identifier)); + } } else { - // Currently, all other possible possibilities are narrowed to only being a parameter - // This is due to the fact that no other classes inheriting from abstract class ScopeDeclaration are - // implemented yet. throw this.assertError(new IdentifierAlreadyUsedByParameterError(identifier)); } } @@ -207,12 +228,16 @@ export class KipperSemanticChecker extends KipperSemanticsAsserter { * @returns The parent function if found. * @since 0.10.0 */ - public getReturnStatementParent(retStatement: ReturnStatement): FunctionDeclaration | LambdaPrimaryExpression { + public getReturnStatementParent(retStatement: ReturnStatement): KipperCallable { // Move up the parent chain and continue as long as there are parents and the current parent is not a function // declaration. This is to ensure a return statement is always used inside a function. let currentParent: CompilableNodeParent | undefined = retStatement.parent; while ( - !(currentParent instanceof FunctionDeclaration || currentParent instanceof LambdaPrimaryExpression) && + !( + currentParent instanceof FunctionDeclaration || + currentParent instanceof LambdaPrimaryExpression || + currentParent instanceof ClassMethodDeclaration + ) && currentParent ) { currentParent = currentParent.parent; diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 260b8eea5..7415c71df 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -143,10 +143,9 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { } // Assuming obj.fields is a Map or an iterable collection of [key, value] pairs - for (const [fieldIdentifier, type] of obj.fields) { - if (fieldIdentifier === identifier) { - return type; - } + const fieldType = obj.getProperty(identifier); + if (fieldType) { + return fieldType; } // If no matching field was found, throw an error @@ -543,12 +542,8 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { // If the return statement has no return value, then the value is automatically 'void' const statementValueType = semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? BuiltInTypes.void; - // TODO! DON'T DO THIS. THIS IS PUTTING TYPE CHECKING OF A PARENT INTO A CHILD - // TODO! REALLY WE NEED TO REMOVE THIS SOON - const functionReturnType = this.getCheckedType( - semanticData.function.getSemanticData().returnType, - semanticData.function.scope, - ); + // As the function type is evaluated preliminary, we can safely assume that the type is valid and use it + const functionReturnType = semanticData.function.getTypeSemanticData().type.returnType; // If either one of the types is undefined, skip type checking (the types are invalid anyway) if (statementValueType === undefined || functionReturnType === undefined) { @@ -652,6 +647,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { /** * Checks whether the members of the passed {@link objLike} can be accessed. (As well if there are members) * @param objLike The object-like expression to check. + * @param accessType The type of accessor that is used to access the members. * @throws {TypeError} If the object expression is not an object. * @since 0.10.0 */ diff --git a/kipper/core/src/compiler/semantics/symbol-table/base/user-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/base/user-scope.ts new file mode 100644 index 000000000..621a33a24 --- /dev/null +++ b/kipper/core/src/compiler/semantics/symbol-table/base/user-scope.ts @@ -0,0 +1,25 @@ +import { Scope } from "./scope"; +import type { CompilableASTNode, Declaration, RootASTNode, ScopeNode } from "../../../ast"; + +/** + * Represents any scope that the user can access and write to in a Kipper program. + * + * This in practise means any scope except the universe scope. + * @since 0.12.0 + */ +export abstract class UserScope extends Scope { + protected constructor(public readonly ctx: (ScopeNode & CompilableASTNode) | RootASTNode) { + super(); + } + + /** + * Ensures that the given declaration is not already used in the current scope. + * @param identifier The identifier to check. + * @param declaration The declaration to check. + * @private + * @since 0.12.0 + */ + protected ensureNotUsed(identifier: string, declaration: Declaration): void { + this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(declaration, identifier, this); + } +} diff --git a/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts index 4f9c97b5c..281f3b84e 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/class-scope.ts @@ -13,16 +13,17 @@ import type { LocalScope } from "./local-scope"; import type { GlobalScope } from "./global-scope"; import type { ScopeTypeDeclaration } from "./entry"; import { type ScopeDeclaration, ScopeFunctionDeclaration, ScopeVariableDeclaration } from "./entry"; -import { Scope } from "./base"; import { KipperNotImplementedError } from "../../../errors"; +import { UserScope } from "./base/user-scope"; +import type { ClassScopeThisDeclaration } from "./entry/class-scope-this-declaration"; /** * A function-specific scope that is bound to a {@link FunctionDeclaration} and not the global namespace. * @since 0.11.0 */ -export class ClassScope extends Scope { - constructor(public ctx: ClassDeclaration) { - super(); +export class ClassScope extends UserScope { + constructor(public readonly ctx: ClassDeclaration) { + super(ctx); } /** @@ -36,9 +37,7 @@ export class ClassScope extends Scope { public addConstructor(declaration: ClassConstructorDeclaration): ScopeFunctionDeclaration { const identifier = declaration.getSemanticData().identifier; - - // Ensuring that the declaration does not overwrite other declarations - this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + this.ensureNotUsed(identifier, declaration); const scopeDeclaration = ScopeFunctionDeclaration.fromClassConstructorDeclaration(declaration); this.entries.set(identifier, scopeDeclaration); @@ -47,9 +46,7 @@ export class ClassScope extends Scope { public override addFunction(declaration: ClassMethodDeclaration): ScopeFunctionDeclaration { const identifier = declaration.getSemanticData().identifier; - - // Ensuring that the declaration does not overwrite other declarations - this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + this.ensureNotUsed(identifier, declaration); const scopeDeclaration = ScopeFunctionDeclaration.fromClassMethodDeclaration(declaration); this.entries.set(identifier, scopeDeclaration); @@ -58,9 +55,7 @@ export class ClassScope extends Scope { public addVariable(declaration: ClassPropertyDeclaration): ScopeVariableDeclaration { const identifier = declaration.getSemanticData().identifier; - - // Ensuring that the declaration does not overwrite other declarations - this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + this.ensureNotUsed(identifier, declaration); const scopeDeclaration = ScopeVariableDeclaration.fromClassPropertyDeclaration(declaration); this._entries.set(identifier, scopeDeclaration); @@ -73,8 +68,16 @@ export class ClassScope extends Scope { .notImplementedError(new KipperNotImplementedError("Local types have not been implemented yet.")); } + /** + * Gets the "this" keyword which is simply a reference to the class. + * @since 0.12.0 + */ + public getThis(): ClassScopeThisDeclaration { + return this.ctx.thisAliasDeclaration; + } + public getEntry(identifier: string): ScopeDeclaration | undefined { - return this.entries.get(identifier); + return identifier === "this" ? this.getThis() : this.entries.get(identifier); } public getEntryRecursively(identifier: string): ScopeDeclaration | undefined { diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/class-scope-this-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/class-scope-this-declaration.ts new file mode 100644 index 000000000..970c91c3e --- /dev/null +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/class-scope-this-declaration.ts @@ -0,0 +1,97 @@ +import type { ClassDeclaration, TypeDeclaration } from "../../../ast"; +import type { ProcessedType } from "../../types"; +import { ScopeDeclaration } from "./scope-declaration"; + +/** + * A scope declaration for the "this" keyword inside a class. This is almost identical to a {@link ScopeTypeDeclaration} + * for a class, but it is specifically initialised prematurely to allow for references to "this" inside the class. + * @since 0.12.0 + */ +export class ClassScopeThisDeclaration extends ScopeDeclaration { + public constructor(public readonly _declaration: ClassDeclaration) { + super(); + } + + /** + * The identifier of this declaration. This is always "this" as we are referring to the "this" keyword inside a class. + * @since 0.12.0 + */ + public get identifier(): string { + return "this"; + } + + /** + * Returns whether this type declaration is a built-in type. + * + * As this is an auto-initialised declaration custom to every class, it will never be a built-in type. + * @since 0.12.0 + */ + public override get isBuiltIn(): boolean { + return false; + } + + /** + * Returns the built-in structure of this declaration, if this declaration is based on one. + * + * As this is an auto-initialised declaration custom to every class, it will never be based on a built-in type. + * @since 0.12.0 + */ + public override get builtInStructure(): undefined { + return undefined; + } + + /** + * Returns the {@link InterfaceDeclaration} or {@link ClassDeclaration AST node} this scope type declaration bases on. + */ + public get node(): TypeDeclaration | undefined { + return this._declaration; + } + + /** + * The type of this type. + * + * This is always the custom type of the class declaration. + * @since 0.12.0 + */ + public get type(): ProcessedType { + return this._declaration.getTypeSemanticData().valueType; + } + + /** + * Returns whether the declaration is defined. + * + * As this is auto-initialized, it will always be defined. + * @since 0.12.0 + */ + public get isDefined(): true { + return true; + } + + /** + * Returns the scope associated with this {@link ScopeDeclaration}. + * @since 0.12.0 + */ + public get scope() { + return this._declaration.scope; + } + + /** + * Returns whether the declaration has a value. + * + * As this is auto-initialized, it will always have a value. + * @since 0.12.0 + */ + public get hasValue(): true { + return true; + } + + /** + * Returns whether the declaration has a callable value (function). + * + * A class is not callable, so this will always be false. + * @since 0.12.0 + */ + public get isCallable(): false { + return false; + } +} diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-declaration.ts index 173737f97..3b4635df7 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-declaration.ts @@ -17,7 +17,6 @@ import type { BuiltInFunction, BuiltInVariable } from "../../runtime-built-ins"; */ export abstract class ScopeDeclaration { public abstract get node(): Declaration | undefined; - public abstract get identifier(): string; /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts index 0b4124713..e79098887 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-type-declaration.ts @@ -13,10 +13,10 @@ import { BuiltInTypes } from "../universe-scope"; * @since 0.11.0 */ export class ScopeTypeDeclaration extends ScopeDeclaration { - private constructor( - private readonly _declaration?: TypeDeclaration, - private readonly _builtInType?: BuiltInType, - private readonly _universeScope?: UniverseScope, + protected constructor( + protected readonly _declaration?: TypeDeclaration, + protected readonly _builtInType?: BuiltInType, + protected readonly _universeScope?: UniverseScope, ) { super(); } @@ -32,12 +32,12 @@ export class ScopeTypeDeclaration extends ScopeDeclaration { /** * Creates a new scope type declaration from a built-in type. - * @param identifier The identifier of the built-in type. + * @param builtInType The built-in type. * @param universeScope The universe scope this type is associated with. * @since 0.11.0 */ - public static fromBuiltInType(type: BuiltInType, universeScope: UniverseScope): ScopeTypeDeclaration { - return new ScopeTypeDeclaration(undefined, type, universeScope); + public static fromBuiltInType(builtInType: BuiltInType, universeScope: UniverseScope): ScopeTypeDeclaration { + return new ScopeTypeDeclaration(undefined, builtInType, universeScope); } /** @@ -97,13 +97,13 @@ export class ScopeTypeDeclaration extends ScopeDeclaration { } /** - * Returns whether the declaration has a value. + * Returns whether the declaration is defined. * - * As this is a type, it will always be false. + * As this is a type, it will always be true; * @since 0.11.0 */ - public get isDefined(): false { - return false; + public get isDefined(): true { + return true; } /** diff --git a/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts index 7ba6775dd..3eeeda6fb 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/function-scope.ts @@ -46,9 +46,7 @@ export class FunctionScope extends LocalScope { */ public addArgument(declaration: ParameterDeclaration): ScopeParameterDeclaration { const identifier = declaration.getSemanticData().identifier; - - // Ensuring that the declaration does not overwrite other declarations - this.ctx.programCtx.semanticCheck(declaration).identifierNotUsed(identifier, this); + this.ensureNotUsed(identifier, declaration); const scopeDeclaration = ScopeParameterDeclaration.fromParameterDeclaration(declaration); this.arguments.set(scopeDeclaration.identifier, scopeDeclaration); diff --git a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts index 630e46c9b..0ebe87645 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/global-scope.ts @@ -6,20 +6,20 @@ import type { ScopeDeclaration } from "./entry"; import { ScopeFunctionDeclaration, ScopeTypeDeclaration, ScopeVariableDeclaration } from "./entry"; import type { FunctionDeclaration, RootASTNode, TypeDeclaration, VariableDeclaration } from "../../ast"; -import { Scope } from "./base/scope"; import type { UniverseScope } from "./universe-scope"; +import { UserScope } from "./base/user-scope"; /** * The global scope of a {@link KipperProgramContext}, which contains the global variables and functions of a * Kipper program. * @since 0.8.0 */ -export class GlobalScope extends Scope { +export class GlobalScope extends UserScope { constructor( public readonly ctx: RootASTNode, public readonly universe: UniverseScope, ) { - super(); + super(ctx); } /** @@ -30,9 +30,7 @@ export class GlobalScope extends Scope { - constructor(public ctx: ScopeNode & CompilableASTNode) { - super(); +export class LocalScope extends UserScope { + constructor(public readonly ctx: ScopeNode & CompilableASTNode) { + super(ctx); } /** @@ -43,9 +43,7 @@ export class LocalScope extends Scope { } } + /** + * Ensures that the given declaration is not already used in the current scope. + * @param identifier The identifier to check. + * @private + * @since 0.12.0 + */ + protected ensureNotUsed(identifier: string): void { + if (this.entries.has(identifier)) { + throw new DuplicateUniverseKeyError(identifier); + } + } + /** * Adds a built-in variable to the universal scope. * @param declaration The built-in variable to add. @@ -100,6 +113,7 @@ export class UniverseScope extends Scope { * @since 0.11.0 */ public addVariable(declaration: BuiltInVariable): ScopeVariableDeclaration { + this.ensureNotUsed(declaration.identifier); const scopeDeclaration = ScopeVariableDeclaration.fromBuiltInVariable(declaration, this); this.entries.set(scopeDeclaration.identifier, scopeDeclaration); return scopeDeclaration; @@ -112,6 +126,7 @@ export class UniverseScope extends Scope { * @since 0.11.0 */ public addFunction(declaration: BuiltInFunction): ScopeFunctionDeclaration { + this.ensureNotUsed(declaration.identifier); const scopeDeclaration = ScopeFunctionDeclaration.fromBuiltInFunction(declaration, this); this.entries.set(scopeDeclaration.identifier, scopeDeclaration); return scopeDeclaration; @@ -119,12 +134,13 @@ export class UniverseScope extends Scope { /** * Adds a built-in type to the universal scope. - * @param declarationOrIdentifier The built-in type to add. + * @param declaration The built-in type to add. * @returns The scope declaration of the added type. * @since 0.11.0 */ - public addType(declarationOrIdentifier: BuiltInType): ScopeTypeDeclaration { - const scopeDeclaration = ScopeTypeDeclaration.fromBuiltInType(declarationOrIdentifier, this); + public addType(declaration: BuiltInType): ScopeTypeDeclaration { + this.ensureNotUsed(declaration.identifier); + const scopeDeclaration = ScopeTypeDeclaration.fromBuiltInType(declaration, this); this.entries.set(scopeDeclaration.identifier, scopeDeclaration); return scopeDeclaration; } diff --git a/kipper/core/src/compiler/semantics/types/custom-type.ts b/kipper/core/src/compiler/semantics/types/custom-type.ts index 131542afa..be2de30a9 100644 --- a/kipper/core/src/compiler/semantics/types/custom-type.ts +++ b/kipper/core/src/compiler/semantics/types/custom-type.ts @@ -34,17 +34,43 @@ export type CustomTypeFields = Map; * @since 0.12.0 */ export class CustomType extends ProcessedType { + private readonly _fields: CustomTypeFields; + private readonly _clsStaticFields?: CustomTypeFields; + /** * The kind of this type. This is simply used to differentiate between classes and interfaces. * @since 0.12.0 */ public readonly kind: CustomTypeKind; - private readonly _fields: CustomTypeFields; - protected constructor(identifier: string, kind: CustomTypeKind, fields: CustomTypeFields) { + /** + * The type that this type extends. This is only applicable to classes. + * @since 0.12.0 + */ + public readonly clsExtends?: CustomType; + + /** + * The types that this type implements. This is only applicable to classes. + * @since 0.12.0 + */ + public readonly clsImplements?: CustomType[]; + + /** + * The interface that this type extends. This is only applicable to interfaces. + * @since 0.12.0 + */ + public readonly intfExtends?: CustomType; + + protected constructor( + identifier: string, + kind: CustomTypeKind, + fields: CustomTypeFields, + staticFields?: CustomTypeFields, + ) { super(identifier); - this._fields = fields; this.kind = kind; + this._fields = fields; + this._clsStaticFields = staticFields; } /** @@ -66,6 +92,14 @@ export class CustomType extends ProcessedType { return this._fields; } + /** + * The static fields of this type. This is only applicable to classes. + * @since 0.12.0 + */ + public get clsStaticFields(): CustomTypeFields | undefined { + return this._clsStaticFields; + } + /** * Creates a custom type from a class declaration. * @@ -162,4 +196,13 @@ export class CustomType extends ProcessedType { throw new AssignmentTypeError(type.identifier, this.identifier); } } + + /** + * Returns the field type for the passed identifier. May return undefined if the field does not exist. + * @param identifier The identifier of the field to get. + * @since 0.12.0 + */ + getProperty(identifier: string): CustomTypeField | undefined { + return this.fields.get(identifier); + } } diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 4f3ff6451..f2ef34fcc 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -329,6 +329,17 @@ export class GenericCanOnlyHaveOneSpreadError extends KipperInternalError { } } +/** + * Error that is thrown whenever a variable, type or function is registered in the universe scope where the identifier + * is already in use. + * @since 0.12.0 + */ +export class DuplicateUniverseKeyError extends KipperInternalError { + constructor(key: string) { + super(`Duplicate key '${key}' in universe scope.`); + } +} + /** * An error that is raised whenever a feature is used that has not been implemented yet. * @since 0.6.0 @@ -541,6 +552,16 @@ export class IdentifierAlreadyUsedByFunctionError extends IdentifierError { } } +/** + * Error that is thrown when a new identifier is registered, but the used identifier is already in use by + * another member. + */ +export class IdentifierAlreadyUsedByMemberError extends IdentifierError { + constructor(identifier: string, kind: "interface" | "class") { + super(`Redeclaration of ${kind} member '${identifier}'.`); + } +} + /** * Error that is thrown when a new identifier is registered, but the used identifier is already in use by * a parameter declaration. diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 58714567b..5105d2120 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -200,8 +200,7 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator const identifier = semanticData.identifier; const params = semanticData.parameters; const body = semanticData.functionBody; - const evaluatedType = TargetTS.getTypeScriptType(semanticData.returnType.getTypeSemanticData().storedType); - const returnType = evaluatedType; + const returnType = TargetTS.getTypeScriptType(semanticData.returnTypeSpecifier.getTypeSemanticData().storedType); const translatedParams = ( await Promise.all( From 5484038c4c61ec3639534b2d979e33585bdfc560 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 15 Sep 2024 22:57:27 +0200 Subject: [PATCH 43/81] other: Updated tests according to last commit a04f757d1e29bc9c2370360ae17341686dccc0d5 --- test/module/core/core-functionality.test.ts | 77 ++++++++------------- 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 50eabed1c..aede715dc 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1418,63 +1418,44 @@ describe("Core functionality", () => { describe("Lambdas", () => { describe("js", () => { it("parses simple lambda expression without syntax errors", async () => { - const code = `var add: Func = (x: num, y: num): num -> x + y;`; - try { - const result = await compiler.compile(code, jsConfig); - - // Evaluate the compiled code - let stringResult = result.result!.map((x) => x.join("")).join("\n"); - stringResult = stringResult.concat("\nadd(1, 2);"); - const res = eval(stringResult); - assert.equal(res, 3, "Lambda expression evaluated correctly"); - } catch (e) { - assert.fail("Failed to analyze lambda expression semantically"); - } + const code = `var add: Func = (x: num, y: num): num -> x + y; print(add(1, 2));`; + const result = await compiler.compile(code, jsConfig); + const stringResult = result.write(); + + testPrintOutput((message: any) => assert.equal(message, "3", "Expected different output"), stringResult); }); it("correctly identifies semantic data for a lambda with compound statement", async () => { - const code = `var greet: Func = (name: str): str -> { return "Hello, " + name; };`; - try { - const result = await compiler.compile(code, jsConfig); - - // Evaluate the compiled code - let stringResult = result.result!.map((x) => x.join("")).join("\n"); - stringResult = stringResult.concat("\ngreet('John');"); - const res = eval(stringResult); - assert.equal(res, "Hello, John", "Lambda expression evaluated correctly"); - } catch (e) { - assert.fail("Failed to analyze lambda expression semantically"); - } + const code = `var greet: Func = (name: str): str -> { return "Hello, " + name; }; print(greet('John'));`; + const result = await compiler.compile(code, jsConfig); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, John", "Expected different output"), + stringResult, + ); }); it("correctly identifies semantic data for a lambda with single statement", async () => { - const code = `var greet: Func = (name: str): str -> "Hello, " + name;`; - try { - const result = await compiler.compile(code, jsConfig); - - // Evaluate the compiled code - let stringResult = result.result!.map((x) => x.join("")).join("\n"); - stringResult = stringResult.concat("\ngreet('John');"); - const res = eval(stringResult); - assert.equal(res, "Hello, John", "Lambda expression evaluated correctly"); - } catch (e) { - assert.fail("Failed to analyze lambda expression semantically"); - } + const code = `var greet: Func = (name: str): str -> "Hello, " + name; print(greet('John'));`; + const result = await compiler.compile(code, jsConfig); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, John", "Expected different output"), + stringResult, + ); }); it("correctly identifies semantic data for a lambda with no parameters", async () => { - const code = `var greet: Func = (): str -> "Hello, World!";`; - try { - const result = await compiler.compile(code, jsConfig); - - // Evaluate the compiled code - let stringResult = result.result!.map((x) => x.join("")).join("\n"); - stringResult = stringResult.concat("\ngreet();"); - const res = eval(stringResult); - assert.equal(res, "Hello, World!", "Lambda expression evaluated correctly"); - } catch (e) { - assert.fail("Failed to analyze lambda expression semantically"); - } + const code = `var greet: Func = (): str -> "Hello, World!"; print(greet());`; + const result = await compiler.compile(code, jsConfig); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, World!", "Expected different output"), + stringResult, + ); }); }); From 906809482575721ce1cf6fec8b77056a5d499156 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 15 Sep 2024 22:57:34 +0200 Subject: [PATCH 44/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 52 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index beb765c23..18677ea70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,11 +18,6 @@ To use development versions of Kipper download the ### Added -- Semantic checking and code generation for the `new` keyword expression to be able to create new instances of - classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) -- Support for the typeof operator, which returns the runtime type of a value. - ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) -- Support for Nix Flakes and direnv, which allows for a more reproducible and consistent development environment. - Support for dot notation for accessing properties of objects. ([#67](https://github.com/Kipper-Lang/Kipper/issues/67)) - Support for classes, class methods, class properties and class constructors. ([#665](https://github.com/Kipper-Lang/Kipper/issues/665)) @@ -30,10 +25,12 @@ To use development versions of Kipper download the ([#526](https://github.com/Kipper-Lang/Kipper/issues/526)) - Support for calling lambdas and functions stored in variables or expressions. ([#674](https://github.com/Kipper-Lang/Kipper/issues/674)) -- Implemented internal representation for custom types such as objects, interfaces and classes. This change means that - the entire core type system has been reworked and adjusted to also support custom types as well as complex types - (objects, arrays etc.). This does not inherently add functionality but serves as the stepping stone for the - implementation of all custom types in the future. ([#524](https://github.com/Kipper-Lang/Kipper/issues/524)) +- Semantic checking and code generation for the `new` keyword expression to be able to create new instances of + classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) +- Support for the `this` keyword inside a class method to access the current instance of the class. + ([#697](https://github.com/Kipper-Lang/Kipper/issues/697)) +- Support for the typeof operator, which returns the runtime type of a value. + ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) - Implemented the generic `Array` type and single-type array initializers. ([#499](https://github.com/Kipper-Lang/Kipper/issues/499)) - Support for index-based array assignments. ([#669](https://github.com/Kipper-Lang/Kipper/issues/669)) @@ -43,8 +40,15 @@ To use development versions of Kipper download the parameter inside a generic type specifier. - Implemented constant `NaN`, which represents the `NaN` value in JavaScript (Not a Number). ([#671](https://github.com/Kipper-Lang/Kipper/issues/671)) +- Support for Nix Flakes and direnv, which allows for a more reproducible and consistent development environment. - Support for internal type unions in built-in and internal functions. ([#496](https://github.com/Kipper-Lang/Kipper/issues/496)) +- Implemented internal representation for custom types such as objects, interfaces and classes. This change means that + the entire core type system has been reworked and adjusted to also support custom types as well as complex types + (objects, arrays etc.). This does not inherently add functionality but serves as the stepping stone for the + implementation of all custom types in the future. ([#524](https://github.com/Kipper-Lang/Kipper/issues/524)) +- Implemented internal preliminary type checking and "ahead of time" type evaluation to allow for self-referential + types and type checking of recursive types. - New module: - `semantics/runtime-built-ins`, which contains runtime built-in functions, variables and types. - `semantics/runtime-internals`, which contains the runtime internal functions. @@ -75,7 +79,9 @@ To use development versions of Kipper download the - `BuiltInTypeFunc`, which represents the `Func` type. - `BuiltInTypeObj`, which represents the `obj` type. - `ScopeTypeDeclaration`, which represents a scope type declaration. - - `CustomType`, which is a class extending from `ProcessedType` and implementing the functionality for a custom type such as a interface or class. + - `CustomType`, which is a class extending from `ProcessedType` and implementing the functionality for a custom type such as an interface or class. + - `UserScope`, which represents a user scope i.e. any scope except the universe scope. + - `ClassScopeThisDeclaration`, which represents the `this` declaration of a class. - New errors: - `TypeCanNotBeUsedForTypeCheckingError`, which is thrown when a type is used for type checking, but is not a valid type. This is an error indicating an invalid logic that should be fixed. @@ -93,6 +99,8 @@ To use development versions of Kipper download the - `ValueTypeNotIndexableWithGivenAccessor`, which is thrown when a value type is not indexable with the given accessor. - `PropertyDoesNotExistError`, which is thrown when a property does not exist on a type. + - `DuplicateUniverseKeyError`, which is thrown when a key is duplicated in the universe scope. + - `IdentifierAlreadyUsedByMemberError`, which is thrown when an identifier is already used by another property. - New interfaces and types: - `InterfaceDeclarationSemantics`, which represents the semantics of an interface declaration. - `InterfaceDeclarationTypeSemantics`, which represents the type semantics of an interface declaration. @@ -114,10 +122,16 @@ To use development versions of Kipper download the - `NewInstantiationExpressionTypeSemantics`, which represents the type semantics of a new instantiation expression. - `TypeofExpressionSemantics`, which represents the semantics of a typeof expression. - `TypeofExpressionTypeSemantics`, which represents the type semantics of a typeof expression. + - `KipperCallable`, which is an alias for `FunctionDeclaration`, `LambdaPrimaryExpression` and + `ClassMethodDeclaration`. + - `TypeDeclarationPropertyTypeSemantics`, which represents the type semantics of a type declaration property. - New functions: - - `KipperTypeChecker.validArrayExpression`, which ensures that an array expression is valid. - - `generateInterfaceRuntimeTypeChecks` which generates runtime type checks for an interface. - - `getRuntimeType`, which gets the corresponding runtime representation of a built-in type. + - `KipperTypeChecker.validArrayExpression()`, which ensures that an array expression is valid. + - `ClassDeclaration.getThis()`, which returns the `this` type of the class. + - `ClassScope.getThis()`, which returns the `this` type of the class. This is a simple alias for the method in the + `ClassDeclaration` class. + - `generateInterfaceRuntimeTypeChecks()` which generates runtime type checks for an interface. + - `getRuntimeType()`, which gets the corresponding runtime representation of a built-in type. - New properties: - `BuiltInFunction.funcType`, which returns a function type for the built-in function. - `FunctionDeclarationTypeSemantics.type`, which returns the type of the function declaration i.e. the function type. @@ -125,6 +139,17 @@ To use development versions of Kipper download the function type. - `FunctionCallExpressionTypeSemantics.funcOrExp`, which returns the function or expression that is called. This always stores some sort of value that extends `BuiltInTypeFunc`. + - `CustomType.clsExtends`, which returns the class that the custom type extends. This is only applicable for classes. + - `CustomType.clsImplements`, which returns the interfaces that the custom type implements. This is only applicable + for classes. + - `CustomType.intfExtends`, which returns the interfaces that the custom type extends. This is only applicable for + interfaces. + - `CustomType._clsStaticFields`, which returns the static fields of the custom type. This is only applicable for + classes. + - `ASTNode.preliminaryTypeSemantics`, which runs the preliminary type semantics of the node as well as the preliminary + type semantics of all its children. This is a recursive function. + - `ASTNode.primaryPreliminaryTypeSemantics`, which returns the primary preliminary type semantics of the node. May be + undefined if there is no primary preliminary type semantics for the given node. - New runtime error `KipperError`, which serves as the base for `TypeError` and `IndexError`. ### Changed @@ -143,6 +168,7 @@ To use development versions of Kipper download the - Class `UncheckedType` to `RawType`. - Class `CheckedType` to `ProcessedType`. - Class `UndefinedCustomType` to `UndefinedType`. + - Method `KipperProgramContext._initUniversalReferencables()` to `_initUniversalReferenceables()`. ### Fixed From eb66dd23e2830691fbcb725bee680a7943410c5f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Sun, 15 Sep 2024 23:06:45 +0200 Subject: [PATCH 45/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18677ea70..08fefe456 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -176,13 +176,20 @@ To use development versions of Kipper download the now enables proper type checking for function references. - CLI command `run` not properly reporting internal or unexpected errors, as they were already prettified in the internally called up command `compile`. +- Previously invalid parent type checking and evaluation performed in `ReturnStatement`. This was now made absolute by + the introduction of the preliminary type checking and "ahead of time" type evaluation, as that now allows for + self-referential types and type checking of recursive types i.e. the return statement now knows the type of its + function even though it is not yet fully processed. +- Duplicate universe entry registration in the `KipperProgramContext` for built-in types, functions and variables. ### Deprecated ### Removed - Type `Reference` as it is no longer needed and has been replaced by `KipperReferenceable`. -- `FunctionCallExpressionTypeSemantics.func`, which is now has been replaced by `funcOrExp`. +- Function `FunctionCallExpressionTypeSemantics.func`, which is now has been replaced by `funcOrExp`. +- Function `KipperProgramContext.setUpBuiltInsInGlobalScope()`, which is no longer needed as the universe scope now + handles all built-in types, functions and variables. From 70d572213794abbcee55cd3659d2551592522a84 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 00:58:37 +0200 Subject: [PATCH 46/81] other: Added tests for "this" and fixed some invalid tests --- test/module/core/core-functionality.test.ts | 234 +++++++++++++------- 1 file changed, 159 insertions(+), 75 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index aede715dc..b89e78536 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -658,7 +658,7 @@ describe("Core functionality", () => { // Test for multiple conditional expressions it("Multiple conditional expressions", async () => { - const fileContent = "const x: num = true ? 5 : false ? 10 : 15;"; + const fileContent = "const x: num = true ? 5: false ? 10: 15;"; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); @@ -1416,50 +1416,58 @@ describe("Core functionality", () => { }); describe("Lambdas", () => { - describe("js", () => { - it("parses simple lambda expression without syntax errors", async () => { - const code = `var add: Func = (x: num, y: num): num -> x + y; print(add(1, 2));`; - const result = await compiler.compile(code, jsConfig); - const stringResult = result.write(); + it("parses simple lambda expression without syntax errors", async () => { + const code = `var add: Func = (x: num, y: num): num -> x + y; print(add(1, 2));`; + const result = await compiler.compile(code, jsConfig); - testPrintOutput((message: any) => assert.equal(message, "3", "Expected different output"), stringResult); - }); + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); - it("correctly identifies semantic data for a lambda with compound statement", async () => { - const code = `var greet: Func = (name: str): str -> { return "Hello, " + name; }; print(greet('John'));`; - const result = await compiler.compile(code, jsConfig); - const stringResult = result.write(); + testPrintOutput((message: any) => assert.equal(message, "3", "Expected different output"), stringResult); + }); - testPrintOutput( - (message: any) => assert.equal(message, "Hello, John", "Expected different output"), - stringResult, - ); - }); + it("correctly identifies semantic data for a lambda with compound statement", async () => { + const code = `var greet: Func = (name: str): str -> { return "Hello, " + name; }; print(greet('John'));`; + const result = await compiler.compile(code, jsConfig); - it("correctly identifies semantic data for a lambda with single statement", async () => { - const code = `var greet: Func = (name: str): str -> "Hello, " + name; print(greet('John'));`; - const result = await compiler.compile(code, jsConfig); - const stringResult = result.write(); + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); - testPrintOutput( - (message: any) => assert.equal(message, "Hello, John", "Expected different output"), - stringResult, - ); - }); + testPrintOutput( + (message: any) => assert.equal(message, "Hello, John", "Expected different output"), + stringResult, + ); + }); - it("correctly identifies semantic data for a lambda with no parameters", async () => { - const code = `var greet: Func = (): str -> "Hello, World!"; print(greet());`; - const result = await compiler.compile(code, jsConfig); - const stringResult = result.write(); + it("correctly identifies semantic data for a lambda with single statement", async () => { + const code = `var greet: Func = (name: str): str -> "Hello, " + name; print(greet('John'));`; + const result = await compiler.compile(code, jsConfig); - testPrintOutput( - (message: any) => assert.equal(message, "Hello, World!", "Expected different output"), - stringResult, - ); - }); + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, John", "Expected different output"), + stringResult, + ); }); - describe("ts", () => {}); + it("correctly identifies semantic data for a lambda with no parameters", async () => { + const code = `var greet: Func = (): str -> "Hello, World!"; print(greet());`; + const result = await compiler.compile(code, jsConfig); + + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, World!", "Expected different output"), + stringResult, + ); + }); }); describe("Functions", () => { @@ -1529,6 +1537,66 @@ describe("Core functionality", () => { }); }); + describe("Object literals", () => { + it("should be able to create an object literal", async () => { + const fileContent = "{ x: 1, y: '2' };"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include(written, "{\n x: 1,\n y: '2',\n};", "Invalid TypeScript code (Expected different output)"); + }); + + it("should create an object with different types of properties", async () => { + const fileContent = "{ numProp: 1, strProp: '2', boolProp: true };"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); + const written = instance.write(); + assert.include(written, "{\n numProp: 1,\n strProp: '2',\n boolProp: true,\n};", "Invalid TypeScript code (Expected different output)"); + }); + + it("should create an object with nested objects", async () => { + const fileContent = "{ outerProp: { innerProp: 1 } };"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); + const written = instance.write(); + assert.include(written, "{\n outerProp: {\n innerProp: 1,\n},\n};", "Invalid TypeScript code (Expected different output)"); + }); + + it("should create an object with array properties", async () => { + const fileContent = "{ arrProp: [1, 2, 3] };"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); + const written = instance.write(); + assert.include( + written, + "{\n arrProp: __kipper.assignTypeMeta([1, 2, 3],", + "Invalid TypeScript code (Expected different output)", + ); + }); + + it("should create an object with method properties", async () => { + const fileContent = "{ methodProp: (): num -> 1 };"; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); + const written = instance.write(); + assert.include( + written, + "{\n methodProp: __kipper.assignTypeMeta((): number => 1,", + "Invalid TypeScript code (Expected different output)", + ); + }); + }); + describe("Interfaces", async () => { it("Can initialize empty interface", async () => { const fileContent = "interface Test { }"; @@ -1540,23 +1608,29 @@ describe("Core functionality", () => { assert.include(written, "interface Test {\n}", "Invalid TypeScript code (Expected different output)"); }); - /* TODO Implement runtime code generation for functions in interfaces (Fabos task I guess) - it("can initialize interface with members", async () => { - const fileContent = "interface Test {\n x: num;\n y: str;\n greet(name: str): str;}"; + it("should be able to to create object with interface blueprint", async () => { + const fileContent = `interface Test {a: str;}; var x: Test = {a: "3"}; print(x.a);`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); - assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); let written = instance.write(); assert.include( written, - "interface Test {\n x: number;\n y: string;\n greet(name: string): string;\n}", + `interface Test {\n` + + ` a: string;\n` + + `}\n` + + `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); }); - it("should can initialize with mixed members", async () => { - const fileContent = "interface Test {\n x: num;\n isTrue(f: bool): str;\n y: str;\n greet(name: str) : str;}"; + it("can initialize interface with members", async () => { + const fileContent = "interface Test {\n x: num;\n y: str;\n greet(name: str): str;}"; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); @@ -1564,22 +1638,24 @@ describe("Core functionality", () => { let written = instance.write(); assert.include( written, - "interface Test {\n x: number;\n isTrue(f: boolean): string;\n y: string;\n greet(name: string): string;\n}", + "interface Test {\n x: number;\n y: string;\n greet(name: string): string;\n}", "Invalid TypeScript code (Expected different output)", ); }); - */ - }); - describe("Object literals", () => { - it("should be able to create an Object literal", async () => { - const fileContent = "{ x: 1, y: '2' };"; + it("should can initialize with mixed members", async () => { + const fileContent = "interface Test {\n x: num;\n isTrue(f: bool): str;\n y: str;\n greet(name: str): str;}"; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); let written = instance.write(); - assert.include(written, "{\n x: 1,\n y: '2',\n};", "Invalid TypeScript code (Expected different output)"); + assert.include( + written, + "interface Test {\n x: number;\n isTrue(f: boolean): string;\n y: string;\n greet(name: string):" + + " string;\n}", + "Invalid TypeScript code (Expected different output)", + ); }); }); @@ -1631,8 +1707,8 @@ describe("Core functionality", () => { ); }); - it("should be able to to create object with interface blueprint", async () => { - const fileContent = `interface Test {a: str;}; var x : Test = {a: "3"}; print(x.a);`; + it("should be able to instantiate a class with new", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {this.a = b;}}; var x: Test = new Test("3"); print(x.a);`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); @@ -1640,20 +1716,21 @@ describe("Core functionality", () => { let written = instance.write(); assert.include( written, - `interface Test {\n` + - ` a: string;\n` + - `}\n` + - `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " this.a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("3");\n' + "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); }); - it("it should be able to instantiate a class with new", async () => { - const fileContent = `class Test {a: str; constructor (b: str) {a = b;}}; var x : Test = new Test("3"); print(x.a);`; + it("should be able to instantiate a class with new and two properties", async () => { + const fileContent = `class Test {x: str; y: num; constructor (a: str, b: num) {this.x = a; this.y = b;}}; var x: Test = new Test("hello", 42); print(x.x);`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); @@ -1662,20 +1739,22 @@ describe("Core functionality", () => { assert.include( written, "class Test {\n" + - " a: string;\n" + - " constructor(b: string)\n" + + " x: string;\n" + + " y: number;\n" + + " constructor(a: string, b: number)\n" + " {\n" + - " a = b;\n" + + " this.x = a;\n" + + " this.y = b;\n" + " }\n" + "}\n" + - 'let x: Test = new Test("3");\n' + - "__kipper.print(x.a);", + 'let x: Test = new Test("hello", 42);\n' + + "__kipper.print(x.x);", "Invalid TypeScript code (Expected different output)", ); }); - it("it should be able to instantiate a class with new and two properties", async () => { - const fileContent = `class Test {x: str; y: num; constructor (a: str, b: num) {x = a; y = b;}}; var x : Test = new Test("hello", 42); print(x.x);`; + it("should be able to access 'this' inside a class method", async () => { + const fileContent = `class Test {x: str; constructor (a: str) {this.x = a;} greet(): void {print(this.x);}}; var x: Test = new Test("hello"); x.greet();`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); assert.isDefined(instance.programCtx); @@ -1685,17 +1764,22 @@ describe("Core functionality", () => { written, "class Test {\n" + " x: string;\n" + - " y: number;\n" + - " constructor(a: string, b: number)\n" + + " greet(): void\n" + + " {\n" + + " __kipper.print(this.x);\n" + + " }\n" + + " constructor(a: string)\n" + " {\n" + - " x = a;\n" + - " y = b;\n" + + " this.x = a;\n" + " }\n" + "}\n" + - 'let x: Test = new Test("hello", 42);\n' + - "__kipper.print(x.x);", + 'let x: Test = new Test("hello");\n' + + "x.greet();", "Invalid TypeScript code (Expected different output)", ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "hello", "Expected different output"), jsCode); }); }); }); From a7dceb9536f3d1fe884c49125970cb76e9f14742 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 01:13:13 +0200 Subject: [PATCH 47/81] release: Bumped Kipper project version to 0.12.0-alpha.4 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index be944b20a..e57ddd2c6 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.3 - description: The GitHub release URL of tag 0.12.0-alpha.0 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.4 + description: The GitHub release URL of tag 0.12.0-alpha.4 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/LICENSE' -version: 0.12.0-alpha.3 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/LICENSE' +version: 0.12.0-alpha.4 date-released: '2024-09-07' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 1ade43608..3b8535948 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index e3f6f2883..05bb97554 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index b2f4da622..1085b1ed4 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index f0554a592..79e0ecaf6 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index dddfcbecf..599ce8c66 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 1e01d7ac1..2cd3525bd 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.3"; +export const version = "0.12.0-alpha.4"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 281e572e93593fb47dc6b45f78db9de6a4ea1673 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 01:16:21 +0200 Subject: [PATCH 48/81] other: Prettified code and CHANGELOG.md --- CHANGELOG.md | 22 ++++++++-------- test/module/core/core-functionality.test.ts | 28 +++++++++++++-------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08fefe456..cafb71427 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,11 +26,11 @@ To use development versions of Kipper download the - Support for calling lambdas and functions stored in variables or expressions. ([#674](https://github.com/Kipper-Lang/Kipper/issues/674)) - Semantic checking and code generation for the `new` keyword expression to be able to create new instances of - classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) + classes. ([#679](https://github.com/Kipper-Lang/Kipper/issues/679)) - Support for the `this` keyword inside a class method to access the current instance of the class. - ([#697](https://github.com/Kipper-Lang/Kipper/issues/697)) + ([#697](https://github.com/Kipper-Lang/Kipper/issues/697)) - Support for the typeof operator, which returns the runtime type of a value. - ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) + ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) - Implemented the generic `Array` type and single-type array initializers. ([#499](https://github.com/Kipper-Lang/Kipper/issues/499)) - Support for index-based array assignments. ([#669](https://github.com/Kipper-Lang/Kipper/issues/669)) @@ -44,11 +44,11 @@ To use development versions of Kipper download the - Support for internal type unions in built-in and internal functions. ([#496](https://github.com/Kipper-Lang/Kipper/issues/496)) - Implemented internal representation for custom types such as objects, interfaces and classes. This change means that - the entire core type system has been reworked and adjusted to also support custom types as well as complex types - (objects, arrays etc.). This does not inherently add functionality but serves as the stepping stone for the - implementation of all custom types in the future. ([#524](https://github.com/Kipper-Lang/Kipper/issues/524)) + the entire core type system has been reworked and adjusted to also support custom types as well as complex types + (objects, arrays etc.). This does not inherently add functionality but serves as the stepping stone for the + implementation of all custom types in the future. ([#524](https://github.com/Kipper-Lang/Kipper/issues/524)) - Implemented internal preliminary type checking and "ahead of time" type evaluation to allow for self-referential - types and type checking of recursive types. + types and type checking of recursive types. - New module: - `semantics/runtime-built-ins`, which contains runtime built-in functions, variables and types. - `semantics/runtime-internals`, which contains the runtime internal functions. @@ -177,9 +177,9 @@ To use development versions of Kipper download the - CLI command `run` not properly reporting internal or unexpected errors, as they were already prettified in the internally called up command `compile`. - Previously invalid parent type checking and evaluation performed in `ReturnStatement`. This was now made absolute by - the introduction of the preliminary type checking and "ahead of time" type evaluation, as that now allows for - self-referential types and type checking of recursive types i.e. the return statement now knows the type of its - function even though it is not yet fully processed. + the introduction of the preliminary type checking and "ahead of time" type evaluation, as that now allows for + self-referential types and type checking of recursive types i.e. the return statement now knows the type of its + function even though it is not yet fully processed. - Duplicate universe entry registration in the `KipperProgramContext` for built-in types, functions and variables. ### Deprecated @@ -189,7 +189,7 @@ To use development versions of Kipper download the - Type `Reference` as it is no longer needed and has been replaced by `KipperReferenceable`. - Function `FunctionCallExpressionTypeSemantics.func`, which is now has been replaced by `funcOrExp`. - Function `KipperProgramContext.setUpBuiltInsInGlobalScope()`, which is no longer needed as the universe scope now - handles all built-in types, functions and variables. + handles all built-in types, functions and variables. diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index b89e78536..3d7cdf9d6 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1555,7 +1555,11 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); const written = instance.write(); - assert.include(written, "{\n numProp: 1,\n strProp: '2',\n boolProp: true,\n};", "Invalid TypeScript code (Expected different output)"); + assert.include( + written, + "{\n numProp: 1,\n strProp: '2',\n boolProp: true,\n};", + "Invalid TypeScript code (Expected different output)", + ); }); it("should create an object with nested objects", async () => { @@ -1565,7 +1569,11 @@ describe("Core functionality", () => { assert.isDefined(instance.programCtx); assert.deepEqual(instance.programCtx?.errors, [], "Expected no compilation errors"); const written = instance.write(); - assert.include(written, "{\n outerProp: {\n innerProp: 1,\n},\n};", "Invalid TypeScript code (Expected different output)"); + assert.include( + written, + "{\n outerProp: {\n innerProp: 1,\n},\n};", + "Invalid TypeScript code (Expected different output)", + ); }); it("should create an object with array properties", async () => { @@ -1618,13 +1626,13 @@ describe("Core functionality", () => { assert.include( written, `interface Test {\n` + - ` a: string;\n` + - `}\n` + - `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + - "let x: Test = {\n" + - ' a: "3",\n' + - "};\n" + - "__kipper.print(x.a);", + ` a: string;\n` + + `}\n` + + `const __intf_Test = new __kipper.Type("Test", [new __kipper.Property("a", __kipper.builtIn.str),], [])\n` + + "let x: Test = {\n" + + ' a: "3",\n' + + "};\n" + + "__kipper.print(x.a);", "Invalid TypeScript code (Expected different output)", ); }); @@ -1653,7 +1661,7 @@ describe("Core functionality", () => { assert.include( written, "interface Test {\n x: number;\n isTrue(f: boolean): string;\n y: string;\n greet(name: string):" + - " string;\n}", + " string;\n}", "Invalid TypeScript code (Expected different output)", ); }); From e15e819cce088c1525cf679dbe4a8ab646c716e2 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 01:17:11 +0200 Subject: [PATCH 49/81] Release 0.12.0-alpha.4 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index bb1002f95..33c20bb76 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.3 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0-alpha.4 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.3/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 99f5b62bc..20db3fa4d 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 77dbbbde7..d33db2ca1 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 71b7ad1df..ba8721ff0 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 91d9da98e..bce2ec221 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 5114af7f9..416e739b9 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index d6dee688f..d4112299d 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index d2e741757..bf7ed63d8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.3", + "version": "0.12.0-alpha.4", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 27dba2515ec6b976196748d0b31b90e0fd314590 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 15:39:43 +0200 Subject: [PATCH 50/81] fix: Fixed critical bug in method return statements crashing the compiler --- kipper/cli/README.md | 21 ++++++++++++------- .../function-declaration-type-semantics.ts | 2 +- .../function-declaration.ts | 2 +- ...ambda-primary-expression-type-semantics.ts | 2 +- .../lambda-primary-expression.ts | 2 +- .../semantics/analyser/type-checker.ts | 4 ++-- .../entry/scope-function-declaration.ts | 2 +- kipper/target-ts/src/code-generator.ts | 2 +- kipper/target-ts/src/tools.ts | 2 +- 9 files changed, 22 insertions(+), 17 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 33c20bb76..6fb33aa82 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts index 1db684fb0..d57566f94 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration-type-semantics.ts @@ -14,5 +14,5 @@ export interface FunctionDeclarationTypeSemantics extends DeclarationTypeSemanti * The type of the declaration. This is always some variation of {@link BuiltInTypeFunc i.e. `Func`}. * @since 0.12.0 */ - type: BuiltInTypeFunc; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts index de5a484fd..6f1fccd3b 100644 --- a/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts +++ b/kipper/core/src/compiler/ast/nodes/declarations/function-declaration/function-declaration.ts @@ -208,7 +208,7 @@ export class FunctionDeclaration const returnType = semanticData.returnTypeSpecifier.getTypeSemanticData().storedType; this.typeSemantics = { - type: new BuiltInTypeFunc(paramTypes, returnType), + valueType: new BuiltInTypeFunc(paramTypes, returnType), }; // Ensure that all code paths return a value diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression-type-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression-type-semantics.ts index 6df2688d4..37f804600 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression-type-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression-type-semantics.ts @@ -19,5 +19,5 @@ export interface LambdaPrimaryExpressionTypeSemantics extends ExpressionTypeSema * The type of the declaration. This is always some variation of {@link BuiltInTypeFunc i.e. `Func`}. * @since 0.12.0 */ - type: BuiltInTypeFunc; + valueType: BuiltInTypeFunc; } diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts index f8ada7510..81d619339 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts @@ -156,7 +156,7 @@ export class LambdaPrimaryExpression const funcType = new BuiltInTypeFunc(paramTypes, returnType); this.typeSemantics = { evaluatedType: funcType, - type: funcType, + valueType: funcType, }; // Ensure that all code paths return a value diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 7415c71df..2c1d4f3ab 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -543,7 +543,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { const statementValueType = semanticData.returnValue?.getTypeSemanticData().evaluatedType ?? BuiltInTypes.void; // As the function type is evaluated preliminary, we can safely assume that the type is valid and use it - const functionReturnType = semanticData.function.getTypeSemanticData().type.returnType; + const functionReturnType = semanticData.function.getTypeSemanticData().valueType.returnType; // If either one of the types is undefined, skip type checking (the types are invalid anyway) if (statementValueType === undefined || functionReturnType === undefined) { @@ -570,7 +570,7 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { public validReturnCodePathsInFunctionBody(func: FunctionDeclaration | LambdaPrimaryExpression): void { const semanticData = func.getSemanticData(); const typeData = func.getTypeSemanticData(); - const returnType = typeData.type.returnType; + const returnType = typeData.valueType.returnType; // If the return type is undefined, skip type checking (the type is invalid anyway) if (returnType === undefined) { diff --git a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts index bf71535ae..deb6d2098 100644 --- a/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts +++ b/kipper/core/src/compiler/semantics/symbol-table/entry/scope-function-declaration.ts @@ -126,7 +126,7 @@ export class ScopeFunctionDeclaration extends ScopeDeclaration { * @since 0.10.0 */ public get type(): BuiltInTypeFunc { - return this.typeData?.type ?? this._builtInFunction!!.funcType; + return this.typeData?.valueType ?? this._builtInFunction!!.funcType; } /** diff --git a/kipper/target-ts/src/code-generator.ts b/kipper/target-ts/src/code-generator.ts index 5105d2120..1a22820ca 100644 --- a/kipper/target-ts/src/code-generator.ts +++ b/kipper/target-ts/src/code-generator.ts @@ -129,7 +129,7 @@ export class TypeScriptTargetCodeGenerator extends JavaScriptTargetCodeGenerator const typeData = node.getTypeSemanticData(); const params = semanticData.params; const body = semanticData.functionBody; - const returnTypeSpecifier = TargetTS.getTypeScriptType(typeData.type.returnType); + const returnTypeSpecifier = TargetTS.getTypeScriptType(typeData.valueType.returnType); const funcType = node.getTypeSemanticData().evaluatedType; // Generate the function signature diff --git a/kipper/target-ts/src/tools.ts b/kipper/target-ts/src/tools.ts index d0594ef1f..fab1703d0 100644 --- a/kipper/target-ts/src/tools.ts +++ b/kipper/target-ts/src/tools.ts @@ -34,7 +34,7 @@ export function getTSFunctionSignature(funcSpec: InternalFunction | BuiltInFunct type: param.getTypeSemanticData().valueType, }; }), - returnType: typeData.type.returnType, + returnType: typeData.valueType.returnType, }; } else { return { From f1715452bc8f2a14eea09d22981a5689bdf2f84a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 15:40:13 +0200 Subject: [PATCH 51/81] other: Added additional method return statement test --- test/module/core/core-functionality.test.ts | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 3d7cdf9d6..7eb0b1296 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1789,5 +1789,31 @@ describe("Core functionality", () => { const jsCode = ts.transpile(written); testPrintOutput((message: any) => assert.equal(message, "hello", "Expected different output"), jsCode); }); + + it("should be able to return a value inside a class method", async () => { + const fileContent = `class Test {x: str; constructor (a: str) {this.x = a;} greet(): str {return this.x;}}; var x: Test = new Test("hello"); print(x.greet());`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + let written = instance.write(); + assert.include( + written, + "class Test {\n" + + " x: string;\n" + + " greet(): string\n" + + " {\n" + + " return this.x;\n" + + " }\n" + + " constructor(a: string)\n" + + " {\n" + + " this.x = a;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("hello");\n' + + "__kipper.print(x.greet());", + "Invalid TypeScript code (Expected different output)", + ); + }); }); }); From aea013895d346ce8505acd8266bab1182dd2201a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 15:47:45 +0200 Subject: [PATCH 52/81] release: Bumped Kipper project version to 0.12.0-alpha.5 --- CITATION.cff | 10 +++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index e57ddd2c6..f53af7b2f 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.4 - description: The GitHub release URL of tag 0.12.0-alpha.4 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.5 + description: The GitHub release URL of tag 0.12.0-alpha.5 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/LICENSE' -version: 0.12.0-alpha.4 -date-released: '2024-09-07' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/LICENSE' +version: 0.12.0-alpha.5 +date-released: '2024-09-16' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 3b8535948..60877adbd 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 05bb97554..d455d3bdf 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 1085b1ed4..d01d5d886 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 79e0ecaf6..60f97ee53 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 599ce8c66..80a534cb2 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 2cd3525bd..abaa73eb1 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.4"; +export const version = "0.12.0-alpha.5"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 0cb1f13f007a7824be9de670d09168688499bbd0 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 15:48:47 +0200 Subject: [PATCH 53/81] Release 0.12.0-alpha.5 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 6fb33aa82..8659c9fe2 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.4 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0-alpha.5 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.4/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 20db3fa4d..df8a49e07 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index d33db2ca1..9a751b69d 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index ba8721ff0..c02c423d5 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index bce2ec221..32c9642ba 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 416e739b9..2efeaeed1 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index d4112299d..0ef716e6e 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index bf7ed63d8..f3800fb09 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.4", + "version": "0.12.0-alpha.5", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From c3306caac9adae12e2c4d7098c5dd66afaa4c101 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:21:55 +0000 Subject: [PATCH 54/81] chore(deps): update dependency semver to v7.6.3 --- kipper/cli/package.json | 2 +- kipper/cli/pnpm-lock.yaml | 58 +++++++++++++++++++----------------- kipper/config/package.json | 4 +-- kipper/config/pnpm-lock.yaml | 30 ++++++------------- package.json | 4 +-- pnpm-lock.yaml | 37 ++++++++--------------- 6 files changed, 57 insertions(+), 78 deletions(-) diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 8c36a870d..4fcbc3583 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -39,7 +39,7 @@ "typescript": "5.1.3", "@oclif/core": "1.26.2", "oclif": "3.4.6", - "semver": "7.6.2", + "semver": "7.6.3", "prettier": "3.3.3" }, "overrides": { diff --git a/kipper/cli/pnpm-lock.yaml b/kipper/cli/pnpm-lock.yaml index 931c7b295..88280807b 100644 --- a/kipper/cli/pnpm-lock.yaml +++ b/kipper/cli/pnpm-lock.yaml @@ -92,8 +92,8 @@ devDependencies: specifier: 5.0.7 version: 5.0.7 semver: - specifier: 7.6.2 - version: 7.6.2 + specifier: 7.6.3 + version: 7.6.3 typescript: specifier: 5.1.3 version: 5.1.3 @@ -219,7 +219,7 @@ packages: read-package-json-fast: 2.0.3 readdir-scoped-modules: 1.1.0 rimraf: 3.0.2 - semver: 7.6.2 + semver: 7.6.3 ssri: 8.0.1 treeverse: 1.0.4 walk-up-path: 1.0.0 @@ -232,7 +232,7 @@ packages: resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.2 + semver: 7.6.3 dev: true /@npmcli/fs@2.1.2: @@ -240,14 +240,14 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: '@gar/promisify': 1.1.3 - semver: 7.6.2 + semver: 7.6.3 dev: true /@npmcli/fs@3.1.1: resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true /@npmcli/git@2.1.0: @@ -259,7 +259,7 @@ packages: npm-pick-manifest: 6.1.1 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.2 + semver: 7.6.3 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -275,7 +275,7 @@ packages: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.2 + semver: 7.6.3 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -314,7 +314,7 @@ packages: cacache: 15.3.0 json-parse-even-better-errors: 2.3.1 pacote: 12.0.3 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - bluebird - supports-color @@ -405,7 +405,7 @@ packages: '@oclif/help': 1.0.5 '@oclif/parser': 3.8.17 debug: 4.3.5(supports-color@8.1.1) - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: false @@ -421,7 +421,7 @@ packages: '@oclif/help': 1.0.5 '@oclif/parser': 3.8.17 debug: 4.3.5(supports-color@8.1.1) - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: false @@ -492,7 +492,7 @@ packages: natural-orderby: 2.0.3 object-treeify: 1.1.33 password-prompt: 1.1.2 - semver: 7.6.2 + semver: 7.6.3 string-width: 4.2.3 strip-ansi: 6.0.1 supports-color: 8.1.1 @@ -647,7 +647,7 @@ packages: fs-extra: 9.1.0 http-call: 5.3.0 lodash: 4.17.21 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -3012,7 +3012,7 @@ packages: nopt: 5.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.2 + semver: 7.6.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -3032,7 +3032,7 @@ packages: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.6.2 + semver: 7.6.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -3076,7 +3076,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.14.0 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 dev: true @@ -3086,7 +3086,7 @@ packages: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.14.0 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 dev: true @@ -3117,14 +3117,14 @@ packages: resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} engines: {node: '>=10'} dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true /npm-install-checks@6.3.0: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.6.2 + semver: 7.6.3 dev: true /npm-normalize-package-bin@1.0.1: @@ -3147,7 +3147,7 @@ packages: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-name: 5.0.1 dev: true @@ -3156,7 +3156,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-name: 3.0.0 dev: true @@ -3183,7 +3183,7 @@ packages: npm-install-checks: 4.0.0 npm-normalize-package-bin: 1.0.1 npm-package-arg: 8.1.5 - semver: 7.6.2 + semver: 7.6.3 dev: true /npm-pick-manifest@8.0.2: @@ -3193,7 +3193,7 @@ packages: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.6.2 + semver: 7.6.3 dev: true /npm-registry-fetch@12.0.2: @@ -3283,7 +3283,7 @@ packages: got: 11.8.6 lodash: 4.17.21 normalize-package-data: 3.0.3 - semver: 7.6.2 + semver: 7.6.3 tslib: 2.6.2 yeoman-environment: 3.19.3 yeoman-generator: 5.10.0(yeoman-environment@3.19.3) @@ -3885,10 +3885,12 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} + hasBin: true /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -4727,7 +4729,7 @@ packages: preferred-pm: 3.1.3 pretty-bytes: 5.6.0 readable-stream: 4.5.2 - semver: 7.6.2 + semver: 7.6.3 slash: 3.0.0 strip-ansi: 6.0.1 text-table: 0.2.0 @@ -4758,7 +4760,7 @@ packages: pacote: 15.2.0 read-pkg-up: 7.0.1 run-async: 2.4.1 - semver: 7.6.2 + semver: 7.6.3 shelljs: 0.8.5 sort-keys: 4.2.0 text-table: 0.2.0 diff --git a/kipper/config/package.json b/kipper/config/package.json index 9a751b69d..522a66c0c 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -6,13 +6,13 @@ "dependencies": { "is-plain-object": "5.0.0", "deepmerge": "4.3.1", - "semver": "7.6.0", + "semver": "7.6.3", "tslib": "~2.6.2", "@kipper/target-ts": "workspace:~", "@kipper/target-js": "workspace:~" }, "devDependencies": { - "@types/semver": "7.5.7", + "@types/semver": "7.5.8", "@kipper/core": "workspace:~", "typescript": "5.1.3" }, diff --git a/kipper/config/pnpm-lock.yaml b/kipper/config/pnpm-lock.yaml index ed0bd85f9..0fbed651d 100644 --- a/kipper/config/pnpm-lock.yaml +++ b/kipper/config/pnpm-lock.yaml @@ -18,8 +18,8 @@ dependencies: specifier: 5.0.0 version: 5.0.0 semver: - specifier: 7.6.0 - version: 7.6.0 + specifier: 7.6.3 + version: 7.6.3 tslib: specifier: ~2.6.2 version: 2.6.2 @@ -29,16 +29,16 @@ devDependencies: specifier: workspace:~ version: link:../core '@types/semver': - specifier: 7.5.7 - version: 7.5.7 + specifier: 7.5.8 + version: 7.5.8 typescript: specifier: 5.1.3 version: 5.1.3 packages: - /@types/semver@7.5.7: - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /deepmerge@4.3.1: @@ -51,18 +51,10 @@ packages: engines: {node: '>=0.10.0'} dev: false - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 + hasBin: true dev: false /tslib@2.6.2: @@ -73,7 +65,3 @@ packages: resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} engines: {node: '>=14.17'} dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false diff --git a/package.json b/package.json index 59f7b1c68..f220d1bcc 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@types/chai": "4.3.0", "@types/mocha": "10.0.7", "@types/node": "20.16.5", - "@types/semver": "7.5.7", + "@types/semver": "7.5.8", "@typescript-eslint/eslint-plugin": "7.16.0", "ansi-regex": "6.0.1", "antlr4ts": "0.5.0-alpha.4", @@ -32,7 +32,7 @@ "nyc": "17.0.0", "prettier": "3.3.3", "run-script-os": "1.1.6", - "semver": "7.6.0", + "semver": "7.6.3", "source-map-support": "0.5.21", "ts-mocha": "10.0.0", "ts-node": "10.9.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7df3c9584..558a8d500 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,8 +41,8 @@ devDependencies: specifier: 20.16.5 version: 20.16.5 '@types/semver': - specifier: 7.5.7 - version: 7.5.7 + specifier: 7.5.8 + version: 7.5.8 '@typescript-eslint/eslint-plugin': specifier: 7.16.0 version: 7.16.0(@typescript-eslint/parser@7.16.0)(eslint@8.57.0)(typescript@5.1.3) @@ -86,8 +86,8 @@ devDependencies: specifier: 1.1.6 version: 1.1.6 semver: - specifier: 7.6.0 - version: 7.6.0 + specifier: 7.6.3 + version: 7.6.3 source-map-support: specifier: 0.5.21 version: 0.5.21 @@ -565,8 +565,8 @@ packages: undici-types: 6.19.8 dev: true - /@types/semver@7.5.7: - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/sinon@17.0.3: @@ -675,7 +675,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.0 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: @@ -2269,7 +2269,7 @@ packages: '@babel/parser': 7.24.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true @@ -2456,13 +2456,6 @@ packages: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -2474,7 +2467,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.6.0 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -3098,13 +3091,13 @@ packages: /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true dev: true - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 + hasBin: true dev: true /serialize-javascript@6.0.2: @@ -3752,10 +3745,6 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} From d5f78d15915914c31891208a18ff3e012aa21774 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:41:05 +0200 Subject: [PATCH 55/81] other: Added comment to instanceof-expression.ts --- .../instanceof-expression/instanceof-expression.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts index b676c3e9c..56f1a48c9 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/instanceof-expression/instanceof-expression.ts @@ -9,6 +9,10 @@ import type { IdentifierTypeSpecifierExpression } from "../type-specifier-expres import type { CustomType } from "../../../../semantics"; import { BuiltInTypes } from "../../../../semantics"; +/** + * Represents an instanceof expression in the AST. + * @since 0.12.0 + */ export class InstanceOfExpression extends Expression< InstanceofExpressionSemantics, InstanceofExpressionTypeSemantics, @@ -43,7 +47,7 @@ export class InstanceOfExpression extends Expression< * * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example * {@link ParseRuleKindMapping.RULE_expression}. - * @since 0.10.0 + * @since 0.12.0 */ public override get kind() { return InstanceOfExpression.kind; @@ -55,7 +59,7 @@ export class InstanceOfExpression extends Expression< * * This may be compared using the {@link ParseRuleKindMapping rule fields}, for example * {@link ParseRuleKindMapping.RULE_expression}. - * @since 0.11.0 + * @since 0.12.0 */ public override get ruleName() { return InstanceOfExpression.ruleName; From 15f45cfbae72fcb4bf5aea90d6848dd1f239cf8a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:41:23 +0200 Subject: [PATCH 56/81] other: Added proper instanceof tests --- test/module/core/core-functionality.test.ts | 114 +++++++++++++++----- 1 file changed, 90 insertions(+), 24 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 351f2b3be..d5ec649a0 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -960,7 +960,7 @@ describe("Core functionality", () => { }); }); - describe("Slice notation ", () => { + describe("Slice notation", () => { describe("str", () => { it("Simple slice with both start and end", async () => { const fileContent = 'var x: str = "1234"[1:2]; print(x);'; @@ -1667,6 +1667,95 @@ describe("Core functionality", () => { }); }); + describe("Instanceof", () => { + it("should return true when object is instance of class", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {this.a = b;}}; var x: Test = new Test("3"); print(x instanceof Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " this.a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = new Test("3");\n' + + "__kipper.print(x instanceof Test);", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + + describe("should return false when object is not instance of class", () => { + it("object literal instanceof class", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {this.a = b;}}; var x: obj = {a: "3"}; print(x instanceof Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " this.a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test = {a: "3"};\n' + + "__kipper.print(x instanceof Test);", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "false", "Expected different output"), jsCode); + }); + + it("different class instanceof class", async () => { + const fileContent = `class Test {a: str; constructor (b: str) {this.a = b;}}; class Test2 {a: str; constructor (b: str) {this.a = b;}}; var x: Test2 = new Test2("3"); print(x instanceof Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + assert.include( + written, + "class Test {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " this.a = b;\n" + + " }\n" + + "}\n" + + "class Test2 {\n" + + " a: string;\n" + + " constructor(b: string)\n" + + " {\n" + + " this.a = b;\n" + + " }\n" + + "}\n" + + 'let x: Test2 = new Test2("3");\n' + + "__kipper.print(x instanceof Test);", + "Invalid TypeScript code (Expected different output)", + ); + + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "false", "Expected different output"), jsCode); + }); + }); + }); + describe("Class", () => { it("should be able to create an empty class", async () => { const fileContent = "class Test { }"; @@ -1770,29 +1859,6 @@ describe("Core functionality", () => { testPrintOutput((message: any) => assert.equal(message, "hello", "Expected different output"), jsCode); }); - it("it should be able to use instanceof operator", async () => { - const fileContent = `class Test {}; var x : Test = new Test(); if(x instanceof Test) {print("works");};`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - - const written = instance.write(); - assert.include( - written, - "class Test {\n" + - "}\n" + - "let x: Test = new Test();\n" + - "if (x instanceof Test) {\n" + - ' __kipper.print("works");\n' + - "}", - "Invalid TypeScript code (Expected different output)", - ); - - const jsCode = ts.transpile(written); - testPrintOutput((message: any) => assert.equal(message, "works", "Expected different output"), jsCode); - }); - it("should be able to access 'this' inside a class method", async () => { const fileContent = `class Test {x: str; constructor (a: str) {this.x = a;} greet(): void {print(this.x);}}; var x: Test = new Test("hello"); x.greet();`; const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); From 2ae0de1daf552429e9d20ef057359d6ac9fcba1f Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:46:49 +0200 Subject: [PATCH 57/81] minor: Added support for `obj` type translation to TypeScript --- kipper/target-ts/src/target.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kipper/target-ts/src/target.ts b/kipper/target-ts/src/target.ts index 5e5292e06..493e73665 100644 --- a/kipper/target-ts/src/target.ts +++ b/kipper/target-ts/src/target.ts @@ -87,6 +87,9 @@ export class KipperTypeScriptTarget extends KipperCompileTarget { ); return `Array<${memberType}>`; } + case BuiltInTypes.obj.identifier: { + return "object"; + } case BuiltInTypes.any.identifier: { return "any"; } From b59bad3262b9b34f7ea1c7e655a293cd56059685 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:47:49 +0200 Subject: [PATCH 58/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cafb71427..c7c0b8711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,8 @@ To use development versions of Kipper download the ([#697](https://github.com/Kipper-Lang/Kipper/issues/697)) - Support for the typeof operator, which returns the runtime type of a value. ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) +- Implemented `instanceof` operator expression, which checks if an object is an instance of a class. + ([#686](https://github.com/Kipper-Lang/Kipper/issues/686)) - Implemented the generic `Array` type and single-type array initializers. ([#499](https://github.com/Kipper-Lang/Kipper/issues/499)) - Support for index-based array assignments. ([#669](https://github.com/Kipper-Lang/Kipper/issues/669)) @@ -43,6 +45,7 @@ To use development versions of Kipper download the - Support for Nix Flakes and direnv, which allows for a more reproducible and consistent development environment. - Support for internal type unions in built-in and internal functions. ([#496](https://github.com/Kipper-Lang/Kipper/issues/496)) +- Support for the `obj` type translation to TypeScript. - Implemented internal representation for custom types such as objects, interfaces and classes. This change means that the entire core type system has been reworked and adjusted to also support custom types as well as complex types (objects, arrays etc.). This does not inherently add functionality but serves as the stepping stone for the @@ -82,6 +85,7 @@ To use development versions of Kipper download the - `CustomType`, which is a class extending from `ProcessedType` and implementing the functionality for a custom type such as an interface or class. - `UserScope`, which represents a user scope i.e. any scope except the universe scope. - `ClassScopeThisDeclaration`, which represents the `this` declaration of a class. + - `InstanceOfExpression`, which represents the `instanceof` operator expression. - New errors: - `TypeCanNotBeUsedForTypeCheckingError`, which is thrown when a type is used for type checking, but is not a valid type. This is an error indicating an invalid logic that should be fixed. @@ -125,6 +129,8 @@ To use development versions of Kipper download the - `KipperCallable`, which is an alias for `FunctionDeclaration`, `LambdaPrimaryExpression` and `ClassMethodDeclaration`. - `TypeDeclarationPropertyTypeSemantics`, which represents the type semantics of a type declaration property. + - `InstanceOfExpressionSemantics`, which represents the semantics of an instanceof expression. + - `InstanceOfExpressionTypeSemantics`, which represents the type semantics of an instanceof expression. - New functions: - `KipperTypeChecker.validArrayExpression()`, which ensures that an array expression is valid. - `ClassDeclaration.getThis()`, which returns the `this` type of the class. From edb6cc50e41696bd65136a2590ca521c8c2c1543 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:54:30 +0200 Subject: [PATCH 59/81] other: Fixed failing tests --- test/module/core/core-functionality.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index d5ec649a0..76684cbd5 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1712,7 +1712,7 @@ describe("Core functionality", () => { " this.a = b;\n" + " }\n" + "}\n" + - 'let x: Test = {a: "3"};\n' + + 'let x: object = {\n a: "3",\n};\n' + "__kipper.print(x instanceof Test);", "Invalid TypeScript code (Expected different output)", ); From a4f3b5f1fc4778d73d34df2f00f15a703eb0d3ed Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 16:54:41 +0200 Subject: [PATCH 60/81] other: Fixed ESLint errors --- kipper/target-js/src/semantic-analyser.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/kipper/target-js/src/semantic-analyser.ts b/kipper/target-js/src/semantic-analyser.ts index e363efcc2..235467c90 100644 --- a/kipper/target-js/src/semantic-analyser.ts +++ b/kipper/target-js/src/semantic-analyser.ts @@ -7,7 +7,6 @@ import type { ClassMethodDeclaration, Declaration, FunctionDeclaration, - InstanceOfExpression, InterfaceDeclaration, InterfaceMethodDeclaration, InterfacePropertyDeclaration, From 4beeef0251ed367744cfca31848871362fa56380 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 17:05:44 +0200 Subject: [PATCH 61/81] other: Added `InvalidInstanceOfTypeError` tests --- .../type-errors/invalid-instanceof-type.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/module/core/errors/type-errors/invalid-instanceof-type.ts diff --git a/test/module/core/errors/type-errors/invalid-instanceof-type.ts b/test/module/core/errors/type-errors/invalid-instanceof-type.ts new file mode 100644 index 000000000..1ec1e017f --- /dev/null +++ b/test/module/core/errors/type-errors/invalid-instanceof-type.ts @@ -0,0 +1,44 @@ +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; +import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; +import { assert } from "chai"; + +describe("InvalidInstanceOfTypeError", () => { + describe("Error", () => { + it("Using primitive type", async () => { + try { + await new KipperCompiler().compile("var x: obj = {}; x instanceof str;", defaultConfig); + } catch (e) { + assert.equal((e).constructor.name, "InvalidInstanceOfTypeError", "Expected different error"); + assert((e).name === "TypeError", "Expected different error"); + ensureTracebackDataExists(e); + return; + } + assert.fail("Expected 'InvalidInstanceOfTypeError'"); + }); + + it("Using interface type", async () => { + try { + await new KipperCompiler().compile("var x: obj = {}; interface A {}; x instanceof A;", defaultConfig); + } catch (e) { + assert.equal((e).constructor.name, "InvalidInstanceOfTypeError", "Expected different error"); + assert((e).name === "TypeError", "Expected different error"); + ensureTracebackDataExists(e); + return; + } + assert.fail("Expected 'InvalidInstanceOfTypeError'"); + }); + }); + + it("NoError", async () => { + let result: KipperCompileResult | undefined = undefined; + try { + result = await new KipperCompiler().compile("class A {}; var x: obj = {}; x instanceof A;", defaultConfig); + } catch (e) { + assert.fail(`Expected no '${(e).name}'`); + } + assert.isDefined(result, "Expected defined compilation result"); + assert.isDefined(result?.programCtx, "Expected programCtx to be defined"); + assert.isFalse(result?.programCtx?.hasFailed, "Expected no errors"); + }); +}); From ac9dd30b69cf668188372feeb7066bedc18d12ad Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 17:12:15 +0200 Subject: [PATCH 62/81] other: Prettified code --- .../lambda-primary-expression.ts | 2 +- kipper/target-js/src/code-generator.ts | 2 +- test/module/core/ast-node.test.ts | 6 +++--- test/module/core/compiler.test.ts | 2 +- .../errors/semantic-errors/builtin-overwrite.ts | 4 +--- .../core/errors/semantic-errors/invalid-global.ts | 4 +--- .../errors/type-errors/invalid-instanceof-type.ts | 2 +- test/module/core/global-scope.test.ts | 3 +-- test/module/core/parse-stream.test.ts | 2 +- test/module/core/program-ctx.test.ts | 13 ++++++++++--- test/module/core/universe-scope.test.ts | 4 +--- test/module/core/warnings/useless-statement.ts | 2 +- 12 files changed, 23 insertions(+), 23 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts index 81d619339..2c3f35189 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/primary-expression/lambda-primary-expression/lambda-primary-expression.ts @@ -12,8 +12,8 @@ import { KindParseRuleMapping, ParseRuleKindMapping } from "../../../../../lexer import type { CompilableASTNode } from "../../../../compilable-ast-node"; import type { ScopeNode } from "../../../../scope-node"; import type { Statement } from "../../../statements"; -import type { IdentifierTypeSpecifierExpression } from "../../type-specifier-expression"; import { CompoundStatement } from "../../../statements"; +import type { IdentifierTypeSpecifierExpression } from "../../type-specifier-expression"; import { ParameterDeclaration } from "../../../declarations"; import { UnableToDetermineSemanticDataError } from "../../../../../../errors"; import { BuiltInTypeFunc, LambdaScope } from "../../../../../semantics"; diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 939e9681e..05b9dcc9f 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -32,6 +32,7 @@ import type { IdentifierTypeSpecifierExpression, IncrementOrDecrementPostfixExpression, IncrementOrDecrementUnaryExpression, + InstanceOfExpression, InterfaceDeclaration, JumpStatement, KipperProgramContext, @@ -60,7 +61,6 @@ import type { TypeofTypeSpecifierExpression, VoidOrNullOrUndefinedPrimaryExpression, WhileLoopIterationStatement, - InstanceOfExpression, } from "@kipper/core"; import { AssignmentExpression, diff --git a/test/module/core/ast-node.test.ts b/test/module/core/ast-node.test.ts index 1fd46e0a7..e1ece4e85 100644 --- a/test/module/core/ast-node.test.ts +++ b/test/module/core/ast-node.test.ts @@ -1,14 +1,14 @@ import { assert } from "chai"; import { promises as fs } from "fs"; import * as path from "path"; -import type { KipperParserRuleContext } from "@kipper/core"; import type { + CompilableNodeParent, + KipperParserRuleContext, KipperProgramContext, LexerParserData, - TargetASTNodeSemanticAnalyser, TargetASTNodeCodeGenerator, + TargetASTNodeSemanticAnalyser, TranslatedCodeLine, - CompilableNodeParent, } from "@kipper/core"; import { CompilableASTNode, KipperCompiler, KipperFileStream, RootASTNode } from "@kipper/core"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; diff --git a/test/module/core/compiler.test.ts b/test/module/core/compiler.test.ts index 2697c61aa..84a7da7d4 100644 --- a/test/module/core/compiler.test.ts +++ b/test/module/core/compiler.test.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import type { KipperCompileResult } from "@kipper/core"; -import { KipperCompiler, KipperError, KipperLogger, KipperFileStream, KipperSyntaxError, LogLevel } from "@kipper/core"; +import { KipperCompiler, KipperError, KipperFileStream, KipperLogger, KipperSyntaxError, LogLevel } from "@kipper/core"; import { promises as fs } from "fs"; import * as ts from "typescript"; import * as path from "path"; diff --git a/test/module/core/errors/semantic-errors/builtin-overwrite.ts b/test/module/core/errors/semantic-errors/builtin-overwrite.ts index f3a3fe2c5..7e82d84ed 100644 --- a/test/module/core/errors/semantic-errors/builtin-overwrite.ts +++ b/test/module/core/errors/semantic-errors/builtin-overwrite.ts @@ -1,7 +1,5 @@ import type { CompileConfig, KipperError } from "@kipper/core"; -import { BuiltInFunction } from "@kipper/core"; -import { BuiltInTypes } from "@kipper/core"; -import { KipperCompiler } from "@kipper/core"; +import { BuiltInFunction, BuiltInTypes, KipperCompiler } from "@kipper/core"; import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/semantic-errors/invalid-global.ts b/test/module/core/errors/semantic-errors/invalid-global.ts index 4245dc010..305453009 100644 --- a/test/module/core/errors/semantic-errors/invalid-global.ts +++ b/test/module/core/errors/semantic-errors/invalid-global.ts @@ -1,7 +1,5 @@ import type { KipperError, KipperProgramContext, LexerParserData } from "@kipper/core"; -import { BuiltInFunction } from "@kipper/core"; -import { BuiltInTypes } from "@kipper/core"; -import { KipperCompiler, KipperFileStream } from "@kipper/core"; +import { BuiltInFunction, BuiltInTypes, KipperCompiler, KipperFileStream } from "@kipper/core"; import { defaultConfig } from "../index"; import { assert } from "chai"; diff --git a/test/module/core/errors/type-errors/invalid-instanceof-type.ts b/test/module/core/errors/type-errors/invalid-instanceof-type.ts index 1ec1e017f..7e9ead05a 100644 --- a/test/module/core/errors/type-errors/invalid-instanceof-type.ts +++ b/test/module/core/errors/type-errors/invalid-instanceof-type.ts @@ -1,6 +1,6 @@ import type { KipperCompileResult, KipperError } from "@kipper/core"; import { KipperCompiler } from "@kipper/core"; -import { defaultConfig, defaultTarget, ensureTracebackDataExists } from "../index"; +import { defaultConfig, ensureTracebackDataExists } from "../index"; import { assert } from "chai"; describe("InvalidInstanceOfTypeError", () => { diff --git a/test/module/core/global-scope.test.ts b/test/module/core/global-scope.test.ts index 087b0d49c..41e8a2d33 100644 --- a/test/module/core/global-scope.test.ts +++ b/test/module/core/global-scope.test.ts @@ -1,6 +1,5 @@ import type { ScopeFunctionDeclaration } from "@kipper/core"; -import { BuiltInTypes } from "@kipper/core"; -import { KipperCompiler, ScopeVariableDeclaration } from "@kipper/core"; +import { BuiltInTypes, KipperCompiler, ScopeVariableDeclaration } from "@kipper/core"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import { assert } from "chai"; diff --git a/test/module/core/parse-stream.test.ts b/test/module/core/parse-stream.test.ts index 626e916a5..ba5073ed9 100644 --- a/test/module/core/parse-stream.test.ts +++ b/test/module/core/parse-stream.test.ts @@ -1,7 +1,7 @@ import { assert } from "chai"; import { promises as fs } from "fs"; import * as path from "path"; -import { KipperFileStream, KipperConfigError } from "@kipper/core"; +import { KipperConfigError, KipperFileStream } from "@kipper/core"; import { CharStreams } from "antlr4ts"; const fileLocation: string = path.resolve(`${__dirname}/../../kipper-files/main.kip`); diff --git a/test/module/core/program-ctx.test.ts b/test/module/core/program-ctx.test.ts index af247d509..93d75a6d9 100644 --- a/test/module/core/program-ctx.test.ts +++ b/test/module/core/program-ctx.test.ts @@ -1,7 +1,14 @@ import { assert } from "chai"; -import { BuiltInFunction } from "@kipper/core"; -import { BuiltInFunctions, BuiltInTypes, BuiltInVariables } from "@kipper/core"; -import { EvaluatedCompileConfig, InvalidGlobalError, KipperCompiler, KipperFileStream } from "@kipper/core"; +import { + BuiltInFunction, + BuiltInFunctions, + BuiltInTypes, + BuiltInVariables, + EvaluatedCompileConfig, + InvalidGlobalError, + KipperCompiler, + KipperFileStream, +} from "@kipper/core"; import { promises as fs } from "fs"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import * as path from "path"; diff --git a/test/module/core/universe-scope.test.ts b/test/module/core/universe-scope.test.ts index ab1120b6e..24a6561d0 100644 --- a/test/module/core/universe-scope.test.ts +++ b/test/module/core/universe-scope.test.ts @@ -1,6 +1,4 @@ -import { BuiltInFunctions, BuiltInVariables } from "@kipper/core"; -import { BuiltInTypes } from "@kipper/core"; -import { KipperCompiler } from "@kipper/core"; +import { BuiltInFunctions, BuiltInTypes, BuiltInVariables, KipperCompiler } from "@kipper/core"; import { KipperTypeScriptTarget } from "@kipper/target-ts"; import { assert } from "chai"; diff --git a/test/module/core/warnings/useless-statement.ts b/test/module/core/warnings/useless-statement.ts index 974a56ef8..51f5097dc 100644 --- a/test/module/core/warnings/useless-statement.ts +++ b/test/module/core/warnings/useless-statement.ts @@ -1,5 +1,5 @@ import { KipperCompiler } from "@kipper/core"; -import { defaultConfig, ensureWarningWasReported, ensureTracebackDataExists } from "."; +import { defaultConfig, ensureTracebackDataExists, ensureWarningWasReported } from "."; import { assert } from "chai"; describe("UselessExpressionStatementWarning", () => { From 3d1a9509a61d498bd3dbcbfc2c8c223ff168c522 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Mon, 16 Sep 2024 19:05:10 +0200 Subject: [PATCH 63/81] other: Added matches expression tests --- test/module/core/core-functionality.test.ts | 86 +++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 6644a0bf2..9a7f4d6a2 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1668,6 +1668,92 @@ describe("Core functionality", () => { }); }); + describe("Matches", () => { + it("should return true for an empty interface with an empty object", async () => { + const fileContent = `interface Test { }; var x: obj = { }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + + it("should return true for an empty interface with an object with properties", async () => { + const fileContent = `interface Test { }; var x: obj = { a: 1, b: '2' }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + + it("should return false for an interface with properties with an object with less properties", async () => { + const fileContent = `interface Test { a: num; b: str; }; var x: obj = { a: 1 }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "false", "Expected different output"), jsCode); + }); + + it("should return true for an interface with properties with an object with more properties", async () => { + const fileContent = `interface Test { a: num; b: str; }; var x: obj = { a: 1, b: '2', c: true }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + + it("should return false for an interface with properties with an object with different properties", async () => { + const fileContent = `interface Test { a: num; b: str; }; var x: obj = { a: 1, c: '2' }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "false", "Expected different output"), jsCode); + }); + + it("should support generics such as arrays and lambda", async () => { + const fileContent = `interface Test { a: Array; b: Func; }; var x: obj = { a: [1, 2, 3], b: (x: num): num -> x + 1 }; print(x matches Test);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + + it("should support nested interfaces", async () => { + const fileContent = `interface Test { a: num; b: str; }; interface Test2 { c: Test; }; var x: obj = { c: { a: 1, b: '2' } }; print(x matches Test2);`; + const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + + assert.isDefined(instance.programCtx); + assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + + const written = instance.write(); + const jsCode = ts.transpile(written); + testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + }); + }); + describe("Instanceof", () => { it("should return true when object is instance of class", async () => { const fileContent = `class Test {a: str; constructor (b: str) {this.a = b;}}; var x: Test = new Test("3"); print(x instanceof Test);`; From 62e24a5dcb7e3c520452b48a1c914e12e46e7568 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 19:32:59 +0200 Subject: [PATCH 64/81] minor (#672): Implemented matches expression type checking --- .../matches-expression-semantics.ts | 1 - .../matches-expression/matches-expression.ts | 4 ++-- .../compiler/semantics/analyser/type-checker.ts | 16 ++++++++++------ kipper/core/src/errors.ts | 10 ++++++++++ kipper/target-js/src/code-generator.ts | 12 +++++------- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts index 02da59abe..04354bc70 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression-semantics.ts @@ -13,7 +13,6 @@ export interface MatchesExpressionSemantics extends ExpressionSemantics { * @since 0.12.0 */ pattern: IdentifierTypeSpecifierExpression; - /** * The expression to match against the interface. * @since 0.12.0 diff --git a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts index f69f55e34..2022217b5 100644 --- a/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts +++ b/kipper/core/src/compiler/ast/nodes/expressions/matches-expression/matches-expression.ts @@ -119,8 +119,8 @@ export class MatchesExpression extends Expression< */ public async primarySemanticTypeChecking(): Promise { const semanticData = this.getSemanticData(); - - this.programCtx.typeCheck(this).validMatchesExpression(semanticData.expression, semanticData.pattern); + const patternType = semanticData.pattern.getTypeSemanticData().storedType; + this.programCtx.typeCheck(this).validMatchesInterfaceType(patternType); this.typeSemantics = { evaluatedType: BuiltInTypes.bool, }; diff --git a/kipper/core/src/compiler/semantics/analyser/type-checker.ts b/kipper/core/src/compiler/semantics/analyser/type-checker.ts index 18e000ab1..404b38ec2 100644 --- a/kipper/core/src/compiler/semantics/analyser/type-checker.ts +++ b/kipper/core/src/compiler/semantics/analyser/type-checker.ts @@ -47,6 +47,7 @@ import { kipperSupportedConversions, } from "../../const"; import type { TypeError } from "../../../errors"; +import { InvalidMatchesTypeError } from "../../../errors"; import { ArithmeticOperationTypeError, BitwiseOperationTypeError, @@ -831,18 +832,21 @@ export class KipperTypeChecker extends KipperSemanticsAsserter { * @since 0.12.0 */ public validInstanceofClassType(type: ProcessedType) { + // Ensure that the type is a class type if (!(type instanceof CustomType) || type.kind !== "class") { throw this.notImplementedError(new InvalidInstanceOfTypeError(type.toString())); } } /** - * Checks whetehr the - * @param expression - * @param pattern + * Checks whether the passed expression can be checked against the given interface pattern. + * @param patternType The pattern to check against. + * @since 0.12.0 */ - public validMatchesExpression(expression: Expression, pattern: IdentifierTypeSpecifierExpression) { - const expressionType = expression.getTypeSemanticData().evaluatedType; - const patternType = pattern.getSemanticData().rawType; + public validMatchesInterfaceType(patternType: ProcessedType) { + // Ensure that the pattern is an interface type + if (!(patternType instanceof CustomType) || patternType.kind !== "interface") { + throw this.notImplementedError(new InvalidMatchesTypeError(patternType.toString())); + } } } diff --git a/kipper/core/src/errors.ts b/kipper/core/src/errors.ts index 51031ee28..f828c9241 100644 --- a/kipper/core/src/errors.ts +++ b/kipper/core/src/errors.ts @@ -871,6 +871,16 @@ export class InvalidInstanceOfTypeError extends TypeError { } } +/** + * Error that is thrown whenever a type is used for a matches expression that is not an interface. + * @since 0.12.0 + */ +export class InvalidMatchesTypeError extends TypeError { + constructor(type: string) { + super(`Type '${type}' can not be used with 'matches' operator. Expects an interface.`); + } +} + /** * Error that is thrown whenever a constant declaration is not defined. * @since 0.8.3 diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 46fa12be6..6d3f99d92 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -1110,18 +1110,16 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { */ matchesExpression = async (node: MatchesExpression): Promise => { const semanticData = node.getSemanticData(); - - // Get the patterns name - const pattern = semanticData.pattern.getSemanticData(); - - const expression = semanticData.expression.getSemanticData(); + const pattern = semanticData.pattern.getTypeSemanticData(); + const translatedExpression = await semanticData.expression.translateCtxAndChildren(); return [ TargetJS.getBuiltInIdentifier("matches"), "(", - ...expression.identifier, + ...translatedExpression, ", ", - `__intf_${pattern.identifier}`, + // Always only accepts a Kipper interface + `${TargetJS.internalInterfacePrefix}_${pattern.storedType.identifier}`, ")", ]; }; From 5d5d1f6ac5fce676753d5b31781a96c7c021ad10 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 19:33:10 +0200 Subject: [PATCH 65/81] other: Added tests for `InvalidMatchesTypeError` --- .../type-errors/invalid-matches-type.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/module/core/errors/type-errors/invalid-matches-type.ts diff --git a/test/module/core/errors/type-errors/invalid-matches-type.ts b/test/module/core/errors/type-errors/invalid-matches-type.ts new file mode 100644 index 000000000..2cae00fb9 --- /dev/null +++ b/test/module/core/errors/type-errors/invalid-matches-type.ts @@ -0,0 +1,44 @@ +import type { KipperCompileResult, KipperError } from "@kipper/core"; +import { KipperCompiler } from "@kipper/core"; +import { defaultConfig, ensureTracebackDataExists } from "../index"; +import { assert } from "chai"; + +describe("InvalidMatchesTypeError", () => { + describe("Error", () => { + it("Using primitive type", async () => { + try { + await new KipperCompiler().compile("var x: obj = {}; x matches str;", defaultConfig); + } catch (e) { + assert.equal((e).constructor.name, "InvalidMatchesTypeError", "Expected different error"); + assert((e).name === "TypeError", "Expected different error"); + ensureTracebackDataExists(e); + return; + } + assert.fail("Expected 'InvalidMatchesTypeError'"); + }); + + it("Using class type", async () => { + try { + await new KipperCompiler().compile("var x: obj = {}; class A {}; x matches A;", defaultConfig); + } catch (e) { + assert.equal((e).constructor.name, "InvalidMatchesTypeError", "Expected different error"); + assert((e).name === "TypeError", "Expected different error"); + ensureTracebackDataExists(e); + return; + } + assert.fail("Expected 'InvalidMatchesTypeError'"); + }); + }); + + it("NoError", async () => { + let result: KipperCompileResult | undefined = undefined; + try { + result = await new KipperCompiler().compile("interface A {}; var x: obj = {}; x matches A;", defaultConfig); + } catch (e) { + assert.fail(`Expected no '${(e).name}'`); + } + assert.isDefined(result, "Expected defined compilation result"); + assert.isDefined(result?.programCtx, "Expected programCtx to be defined"); + assert.isFalse(result?.programCtx?.hasFailed, "Expected no errors"); + }); +}); From 6f9079d9bd1ede4b253ceaea52f0d6dcb7569ee4 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 19:33:16 +0200 Subject: [PATCH 66/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 017b39f7b..fbfc3d8b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,8 @@ To use development versions of Kipper download the ([#663](https://github.com/Kipper-Lang/Kipper/issues/663)) - Implemented `instanceof` operator expression, which checks if an object is an instance of a class. ([#686](https://github.com/Kipper-Lang/Kipper/issues/686)) +- Implemented `matches` operator expression, which checks if an object matches an interface. + ([#672](https://github.com/Kipper-Lang/Kipper/issues/672)) - Implemented the generic `Array` type and single-type array initializers. ([#499](https://github.com/Kipper-Lang/Kipper/issues/499)) - Support for index-based array assignments. ([#669](https://github.com/Kipper-Lang/Kipper/issues/669)) @@ -86,6 +88,7 @@ To use development versions of Kipper download the - `UserScope`, which represents a user scope i.e. any scope except the universe scope. - `ClassScopeThisDeclaration`, which represents the `this` declaration of a class. - `InstanceOfExpression`, which represents the `instanceof` operator expression. + - `MatchesExpression`, which represents the `matches` operator expression. - New errors: - `TypeCanNotBeUsedForTypeCheckingError`, which is thrown when a type is used for type checking, but is not a valid type. This is an error indicating an invalid logic that should be fixed. @@ -105,6 +108,8 @@ To use development versions of Kipper download the - `PropertyDoesNotExistError`, which is thrown when a property does not exist on a type. - `DuplicateUniverseKeyError`, which is thrown when a key is duplicated in the universe scope. - `IdentifierAlreadyUsedByMemberError`, which is thrown when an identifier is already used by another property. + - `InvalidInstanceOfTypeError`, which is thrown when the `instanceof` operator is used with a type other than a class. + - `InvalidMatchesTypeError`, which is thrown when the `matches` operator is used with a type other than an interface. - New interfaces and types: - `InterfaceDeclarationSemantics`, which represents the semantics of an interface declaration. - `InterfaceDeclarationTypeSemantics`, which represents the type semantics of an interface declaration. @@ -131,8 +136,13 @@ To use development versions of Kipper download the - `TypeDeclarationPropertyTypeSemantics`, which represents the type semantics of a type declaration property. - `InstanceOfExpressionSemantics`, which represents the semantics of an instanceof expression. - `InstanceOfExpressionTypeSemantics`, which represents the type semantics of an instanceof expression. + - `MatchesExpressionSemantics`, which represents the semantics of a matches expression. + - `MatchesExpressionTypeSemantics`, which represents the type semantics of a matches expression. - New functions: - `KipperTypeChecker.validArrayExpression()`, which ensures that an array expression is valid. + - `KipperTypeChecker.validInstanceofClassType()`, which ensures that an `instanceof` expression is valid for a class. + - `KipperTypeChecker.validMatchesInterfaceType()`, which ensures that a `matches` expression is valid for an + interface. - `ClassDeclaration.getThis()`, which returns the `this` type of the class. - `ClassScope.getThis()`, which returns the `this` type of the class. This is a simple alias for the method in the `ClassDeclaration` class. From 3287db61e2f85479683812aa9cb7ac2ecbe7559c Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 20:45:44 +0200 Subject: [PATCH 67/81] minor: Added `KipperNotImplementedError` for `Array` and `Func` type in `matches` --- kipper/target-js/src/code-generator.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kipper/target-js/src/code-generator.ts b/kipper/target-js/src/code-generator.ts index 6d3f99d92..deeff2d25 100644 --- a/kipper/target-js/src/code-generator.ts +++ b/kipper/target-js/src/code-generator.ts @@ -123,6 +123,9 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { "var __createKipper = () => {" + " if (__globalScope.__kipper || __kipper) { return undefined; }" + " class KipperError extends Error { constructor(msg) { super(msg); this.name='KipError'; }};" + + " class KipperNotImplementedError extends KipperError { " + + " constructor(msg) { super(msg); this.name = 'KipNotImplementedError'; } " + + " }" + " class KipperType {" + " constructor(name, fields, methods, baseType = null) " + " { this.name = name; this.fields = fields; this.methods = methods; this.baseType = baseType; }" + @@ -147,6 +150,7 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " KipperError: KipperError," + " TypeError: (class KipperTypeError extends KipperError { constructor(msg) { super(msg); this.name = 'KipTypeError'; } })," + " IndexError: (class KipperIndexError extends KipperError { constructor(msg) { super(msg); this.name = 'KipIndexError'; } })," + + " NotImplementedError: KipperNotImplementedError," + " Property: class KipperProperty { constructor(name, type) { this.name = name; this.type = type; } }," + " MethodParameter: class MethodParameter { constructor(name, type) { this.name = name; this.type = type; } }," + " Method: class KipperMethod { constructor(name, returnType, parameters) { this.name = name; this.returnType = returnType; this.parameters = parameters; } }," + @@ -189,7 +193,8 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " }" + " }," + " matches: (value, pattern) => {" + - " const registeredRuntimeTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " const primTypes = [ 'str', 'num', 'bool', 'null', 'undefined' ];" + + " const genTypes = [ 'Array', 'Func' ];" + " if (pattern.fields && Array.isArray(pattern.fields)) {" + " for (const field of pattern.fields) {" + " const fieldName = field.name;" + @@ -200,10 +205,13 @@ export class JavaScriptTargetCodeGenerator extends KipperTargetCodeGenerator { " }" + " const fieldValue = value[fieldName];" + " const isSameType = __kipper.typeOf(fieldValue) === field.type;" + - " if (registeredRuntimeTypes.includes(field.type.name) && !isSameType) {" + + " if (primTypes.includes(field.type.name) && !isSameType) {" + " return false;" + " }" + - " if (!registeredRuntimeTypes.includes(fieldType.name)) {" + + " if (genTypes.includes(fieldType.name)) {" + + " throw new KipperNotImplementedError(\"Matches does not yet support the 'Array' and 'Func' types\");" + + " }" + + " if (!primTypes.includes(fieldType.name)) {" + " if (!__kipper.matches(fieldValue, fieldType)) {" + " return false;" + " }" + From 786516c7afdee57050143e5c00926cf24105cf48 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 20:50:23 +0200 Subject: [PATCH 68/81] other: Disabled `matches` expression test for array and lambda types --- test/module/core/core-functionality.test.ts | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index 9a7f4d6a2..ea554eff6 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1729,17 +1729,17 @@ describe("Core functionality", () => { testPrintOutput((message: any) => assert.equal(message, "false", "Expected different output"), jsCode); }); - it("should support generics such as arrays and lambda", async () => { - const fileContent = `interface Test { a: Array; b: Func; }; var x: obj = { a: [1, 2, 3], b: (x: num): num -> x + 1 }; print(x matches Test);`; - const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); - - assert.isDefined(instance.programCtx); - assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); - - const written = instance.write(); - const jsCode = ts.transpile(written); - testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); - }); + // it("should support generics such as arrays and lambda", async () => { + // const fileContent = `interface Test { a: Array; b: Func; }; var x: obj = { a: [1, 2, 3], b: (x: num): num -> x + 1 }; print(x matches Test);`; + // const instance: KipperCompileResult = await compiler.compile(fileContent, { target: defaultTarget }); + // + // assert.isDefined(instance.programCtx); + // assert.equal(instance.programCtx!!.errors.length, 0, "Expected no compilation errors"); + // + // const written = instance.write(); + // const jsCode = ts.transpile(written); + // testPrintOutput((message: any) => assert.equal(message, "true", "Expected different output"), jsCode); + // }); it("should support nested interfaces", async () => { const fileContent = `interface Test { a: num; b: str; }; interface Test2 { c: Test; }; var x: obj = { c: { a: 1, b: '2' } }; print(x matches Test2);`; From 7214c74b3358e5b8ecb5031f481b9c444cd97db1 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 21:09:08 +0200 Subject: [PATCH 69/81] release: Bumped Kipper project version to 0.12.0-alpha.6 --- CHANGELOG.md | 2 +- CITATION.cff | 10 +++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fbfc3d8b2..6b6e809e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,7 @@ To use development versions of Kipper download the - Implemented `instanceof` operator expression, which checks if an object is an instance of a class. ([#686](https://github.com/Kipper-Lang/Kipper/issues/686)) - Implemented `matches` operator expression, which checks if an object matches an interface. - ([#672](https://github.com/Kipper-Lang/Kipper/issues/672)) + ([#672](https://github.com/Kipper-Lang/Kipper/issues/672)) - Implemented the generic `Array` type and single-type array initializers. ([#499](https://github.com/Kipper-Lang/Kipper/issues/499)) - Support for index-based array assignments. ([#669](https://github.com/Kipper-Lang/Kipper/issues/669)) diff --git a/CITATION.cff b/CITATION.cff index f53af7b2f..e189cb40c 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.5 - description: The GitHub release URL of tag 0.12.0-alpha.5 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.6 + description: The GitHub release URL of tag 0.12.0-alpha.6 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/LICENSE' -version: 0.12.0-alpha.5 -date-released: '2024-09-16' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/LICENSE' +version: 0.12.0-alpha.6 +date-released: '2024-09-17' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 60877adbd..6ab81eabd 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index d455d3bdf..34cc000e6 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index d01d5d886..49a3af9e4 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 60f97ee53..49d343e86 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 979501b04..ffae0578f 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -14,7 +14,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index abaa73eb1..00d199038 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.5"; +export const version = "0.12.0-alpha.6"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From 6fc08ab12fc2233e5cf92c2e8c58953b00c2b905 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Tue, 17 Sep 2024 21:11:27 +0200 Subject: [PATCH 70/81] Release 0.12.0-alpha.6 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 9ca50d482..98b1a5272 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.5 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0-alpha.6 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.5/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index 4fcbc3583..c25acf53d 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 522a66c0c..80d4d9ede 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 898802670..3c6ce98e4 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 5a328220d..9ccca71e7 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index f550d5a72..673b92a03 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index d04f9d138..d9dfc8efd 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index f220d1bcc..33df58688 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.5", + "version": "0.12.0-alpha.6", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From e83ce20152345cd20672458ecac3b909f374c2ff Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 13:59:08 +0200 Subject: [PATCH 71/81] fix: Fixed lambda compound body syntax error caused by invalid parser rule --- kipper/cli/README.md | 21 +- kipper/core/KipperParser.g4 | 5 +- .../lexer-parser/antlr/KipperParser.interp | 2 +- .../lexer-parser/antlr/KipperParser.ts | 1579 +++++++++-------- .../antlr/base/KipperParserBase.ts | 26 +- 5 files changed, 849 insertions(+), 784 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 98b1a5272..c38a49776 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/core/KipperParser.g4 b/kipper/core/KipperParser.g4 index abcc2d877..12d28754e 100644 --- a/kipper/core/KipperParser.g4 +++ b/kipper/core/KipperParser.g4 @@ -136,7 +136,8 @@ statement ; compoundStatement - : {this.notInsideExpressionStatement()}? '{' blockItemList? '}' + : {this.notInsideExpressionStatement()}? '{' blockItemList? '}' + | {this.insideLambda()}? '{' {this.exitLambda()} blockItemList? {this.enterLambda()} '}' ; expressionStatement @@ -207,7 +208,7 @@ primaryExpression // Primary expressions, which build up the rest of the more co ; lambdaPrimaryExpression - : '(' parameterList? ')' ':' typeSpecifierExpression '->' (expression | compoundStatement) + : {this.enterLambda()} '(' parameterList? ')' ':' typeSpecifierExpression '->' (expression | compoundStatement) {this.exitLambda()} ; tangledPrimaryExpression diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp index 20484b538..0a5f11d24 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.interp @@ -277,4 +277,4 @@ typeSpecifierIdentifier atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 92, 843, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 3, 2, 5, 2, 182, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 187, 10, 3, 13, 3, 14, 3, 188, 3, 4, 3, 4, 3, 5, 6, 5, 194, 10, 5, 13, 5, 14, 5, 195, 3, 6, 3, 6, 3, 6, 5, 6, 201, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 209, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 221, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 233, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 239, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 244, 10, 15, 12, 15, 14, 15, 247, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 257, 10, 17, 12, 17, 14, 17, 260, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 266, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 276, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 288, 10, 21, 12, 21, 14, 21, 291, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 298, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 307, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 313, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 318, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 329, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 334, 10, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 345, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 354, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 362, 10, 31, 12, 31, 14, 31, 365, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 377, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 382, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 388, 10, 34, 3, 34, 3, 34, 5, 34, 392, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 398, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 404, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 428, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 442, 10, 39, 3, 40, 3, 40, 5, 40, 446, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 454, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 468, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 474, 10, 47, 12, 47, 14, 47, 477, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 482, 10, 47, 12, 47, 14, 47, 485, 11, 47, 3, 47, 5, 47, 488, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 493, 10, 48, 3, 48, 5, 48, 496, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 501, 10, 49, 3, 49, 5, 49, 504, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 512, 10, 51, 12, 51, 14, 51, 515, 11, 51, 5, 51, 517, 10, 51, 3, 51, 5, 51, 520, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 528, 10, 52, 12, 52, 14, 52, 531, 11, 52, 5, 52, 533, 10, 52, 3, 52, 5, 52, 536, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 552, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 561, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 566, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 583, 10, 55, 3, 55, 3, 55, 7, 55, 587, 10, 55, 12, 55, 14, 55, 590, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 595, 10, 56, 12, 56, 14, 56, 598, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 611, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 617, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 624, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 635, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 652, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 660, 10, 69, 12, 69, 14, 69, 663, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 671, 10, 70, 12, 70, 14, 70, 674, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 683, 10, 71, 12, 71, 14, 71, 686, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 696, 10, 73, 12, 73, 14, 73, 699, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 707, 10, 74, 12, 74, 14, 74, 710, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 718, 10, 75, 12, 75, 14, 75, 721, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 729, 10, 76, 12, 76, 14, 76, 732, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 740, 10, 77, 12, 77, 14, 77, 743, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 751, 10, 78, 12, 78, 14, 78, 754, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 762, 10, 79, 12, 79, 14, 79, 765, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 773, 10, 80, 12, 80, 14, 80, 776, 11, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 784, 10, 81, 12, 81, 14, 81, 787, 11, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 796, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 803, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 7, 85, 810, 10, 85, 12, 85, 14, 85, 813, 11, 85, 3, 86, 3, 86, 3, 86, 5, 86, 818, 10, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 827, 10, 88, 12, 88, 14, 88, 830, 11, 88, 5, 88, 832, 10, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 2, 2, 15, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 158, 160, 91, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 2, 17, 3, 2, 8, 9, 3, 2, 15, 16, 3, 2, 31, 32, 3, 2, 82, 83, 4, 2, 81, 81, 84, 84, 3, 2, 35, 37, 4, 2, 50, 50, 52, 52, 6, 2, 49, 49, 51, 51, 59, 59, 75, 75, 3, 2, 53, 56, 4, 2, 49, 49, 51, 51, 3, 2, 76, 78, 3, 2, 68, 71, 3, 2, 66, 67, 3, 2, 60, 65, 4, 2, 35, 37, 80, 80, 2, 853, 2, 181, 3, 2, 2, 2, 4, 186, 3, 2, 2, 2, 6, 190, 3, 2, 2, 2, 8, 193, 3, 2, 2, 2, 10, 200, 3, 2, 2, 2, 12, 208, 3, 2, 2, 2, 14, 210, 3, 2, 2, 2, 16, 213, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 222, 3, 2, 2, 2, 22, 224, 3, 2, 2, 2, 24, 226, 3, 2, 2, 2, 26, 228, 3, 2, 2, 2, 28, 240, 3, 2, 2, 2, 30, 248, 3, 2, 2, 2, 32, 252, 3, 2, 2, 2, 34, 265, 3, 2, 2, 2, 36, 267, 3, 2, 2, 2, 38, 272, 3, 2, 2, 2, 40, 282, 3, 2, 2, 2, 42, 297, 3, 2, 2, 2, 44, 299, 3, 2, 2, 2, 46, 303, 3, 2, 2, 2, 48, 314, 3, 2, 2, 2, 50, 328, 3, 2, 2, 2, 52, 330, 3, 2, 2, 2, 54, 337, 3, 2, 2, 2, 56, 344, 3, 2, 2, 2, 58, 346, 3, 2, 2, 2, 60, 355, 3, 2, 2, 2, 62, 376, 3, 2, 2, 2, 64, 381, 3, 2, 2, 2, 66, 383, 3, 2, 2, 2, 68, 408, 3, 2, 2, 2, 70, 414, 3, 2, 2, 2, 72, 422, 3, 2, 2, 2, 74, 425, 3, 2, 2, 2, 76, 441, 3, 2, 2, 2, 78, 443, 3, 2, 2, 2, 80, 455, 3, 2, 2, 2, 82, 459, 3, 2, 2, 2, 84, 461, 3, 2, 2, 2, 86, 463, 3, 2, 2, 2, 88, 467, 3, 2, 2, 2, 90, 469, 3, 2, 2, 2, 92, 487, 3, 2, 2, 2, 94, 495, 3, 2, 2, 2, 96, 503, 3, 2, 2, 2, 98, 505, 3, 2, 2, 2, 100, 507, 3, 2, 2, 2, 102, 523, 3, 2, 2, 2, 104, 539, 3, 2, 2, 2, 106, 543, 3, 2, 2, 2, 108, 565, 3, 2, 2, 2, 110, 591, 3, 2, 2, 2, 112, 599, 3, 2, 2, 2, 114, 602, 3, 2, 2, 2, 116, 606, 3, 2, 2, 2, 118, 623, 3, 2, 2, 2, 120, 625, 3, 2, 2, 2, 122, 628, 3, 2, 2, 2, 124, 634, 3, 2, 2, 2, 126, 636, 3, 2, 2, 2, 128, 639, 3, 2, 2, 2, 130, 642, 3, 2, 2, 2, 132, 644, 3, 2, 2, 2, 134, 651, 3, 2, 2, 2, 136, 653, 3, 2, 2, 2, 138, 664, 3, 2, 2, 2, 140, 675, 3, 2, 2, 2, 142, 687, 3, 2, 2, 2, 144, 689, 3, 2, 2, 2, 146, 700, 3, 2, 2, 2, 148, 711, 3, 2, 2, 2, 150, 722, 3, 2, 2, 2, 152, 733, 3, 2, 2, 2, 154, 744, 3, 2, 2, 2, 156, 755, 3, 2, 2, 2, 158, 766, 3, 2, 2, 2, 160, 777, 3, 2, 2, 2, 162, 795, 3, 2, 2, 2, 164, 802, 3, 2, 2, 2, 166, 804, 3, 2, 2, 2, 168, 806, 3, 2, 2, 2, 170, 817, 3, 2, 2, 2, 172, 819, 3, 2, 2, 2, 174, 821, 3, 2, 2, 2, 176, 835, 3, 2, 2, 2, 178, 840, 3, 2, 2, 2, 180, 182, 5, 4, 3, 2, 181, 180, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 7, 2, 2, 3, 184, 3, 3, 2, 2, 2, 185, 187, 5, 6, 4, 2, 186, 185, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 5, 3, 2, 2, 2, 190, 191, 5, 8, 5, 2, 191, 7, 3, 2, 2, 2, 192, 194, 5, 10, 6, 2, 193, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 9, 3, 2, 2, 2, 197, 201, 5, 50, 26, 2, 198, 201, 5, 12, 7, 2, 199, 201, 7, 39, 2, 2, 200, 197, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 199, 3, 2, 2, 2, 201, 11, 3, 2, 2, 2, 202, 203, 5, 14, 8, 2, 203, 204, 7, 39, 2, 2, 204, 209, 3, 2, 2, 2, 205, 209, 5, 26, 14, 2, 206, 209, 5, 32, 17, 2, 207, 209, 5, 40, 21, 2, 208, 202, 3, 2, 2, 2, 208, 205, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 207, 3, 2, 2, 2, 209, 13, 3, 2, 2, 2, 210, 211, 5, 16, 9, 2, 211, 212, 5, 18, 10, 2, 212, 15, 3, 2, 2, 2, 213, 214, 9, 2, 2, 2, 214, 17, 3, 2, 2, 2, 215, 216, 5, 22, 12, 2, 216, 217, 7, 41, 2, 2, 217, 220, 5, 170, 86, 2, 218, 219, 7, 60, 2, 2, 219, 221, 5, 20, 11, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 19, 3, 2, 2, 2, 222, 223, 5, 164, 83, 2, 223, 21, 3, 2, 2, 2, 224, 225, 5, 24, 13, 2, 225, 23, 3, 2, 2, 2, 226, 227, 7, 80, 2, 2, 227, 25, 3, 2, 2, 2, 228, 229, 7, 23, 2, 2, 229, 230, 5, 22, 12, 2, 230, 232, 7, 42, 2, 2, 231, 233, 5, 28, 15, 2, 232, 231, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 235, 7, 43, 2, 2, 235, 236, 7, 26, 2, 2, 236, 238, 5, 170, 86, 2, 237, 239, 5, 52, 27, 2, 238, 237, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 27, 3, 2, 2, 2, 240, 245, 5, 30, 16, 2, 241, 242, 7, 38, 2, 2, 242, 244, 5, 30, 16, 2, 243, 241, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 29, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 5, 22, 12, 2, 249, 250, 7, 41, 2, 2, 250, 251, 5, 170, 86, 2, 251, 31, 3, 2, 2, 2, 252, 253, 7, 28, 2, 2, 253, 254, 5, 22, 12, 2, 254, 258, 7, 47, 2, 2, 255, 257, 5, 34, 18, 2, 256, 255, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 261, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 7, 48, 2, 2, 262, 33, 3, 2, 2, 2, 263, 266, 5, 36, 19, 2, 264, 266, 5, 38, 20, 2, 265, 263, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 35, 3, 2, 2, 2, 267, 268, 5, 22, 12, 2, 268, 269, 7, 41, 2, 2, 269, 270, 5, 170, 86, 2, 270, 271, 7, 39, 2, 2, 271, 37, 3, 2, 2, 2, 272, 273, 5, 22, 12, 2, 273, 275, 7, 42, 2, 2, 274, 276, 5, 28, 15, 2, 275, 274, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 7, 43, 2, 2, 278, 279, 7, 41, 2, 2, 279, 280, 5, 170, 86, 2, 280, 281, 7, 39, 2, 2, 281, 39, 3, 2, 2, 2, 282, 283, 7, 27, 2, 2, 283, 284, 5, 22, 12, 2, 284, 289, 7, 47, 2, 2, 285, 288, 5, 42, 22, 2, 286, 288, 7, 39, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 292, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 293, 7, 48, 2, 2, 293, 41, 3, 2, 2, 2, 294, 298, 5, 44, 23, 2, 295, 298, 5, 46, 24, 2, 296, 298, 5, 48, 25, 2, 297, 294, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 296, 3, 2, 2, 2, 298, 43, 3, 2, 2, 2, 299, 300, 5, 22, 12, 2, 300, 301, 7, 41, 2, 2, 301, 302, 5, 170, 86, 2, 302, 45, 3, 2, 2, 2, 303, 304, 5, 22, 12, 2, 304, 306, 7, 42, 2, 2, 305, 307, 5, 28, 15, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 309, 7, 43, 2, 2, 309, 310, 7, 41, 2, 2, 310, 312, 5, 170, 86, 2, 311, 313, 5, 52, 27, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 47, 3, 2, 2, 2, 314, 315, 7, 29, 2, 2, 315, 317, 7, 42, 2, 2, 316, 318, 5, 28, 15, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 7, 43, 2, 2, 320, 321, 5, 52, 27, 2, 321, 49, 3, 2, 2, 2, 322, 329, 5, 54, 28, 2, 323, 329, 5, 56, 29, 2, 324, 329, 5, 64, 33, 2, 325, 329, 5, 72, 37, 2, 326, 329, 5, 74, 38, 2, 327, 329, 5, 52, 27, 2, 328, 322, 3, 2, 2, 2, 328, 323, 3, 2, 2, 2, 328, 324, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 327, 3, 2, 2, 2, 329, 51, 3, 2, 2, 2, 330, 331, 6, 27, 2, 2, 331, 333, 7, 47, 2, 2, 332, 334, 5, 8, 5, 2, 333, 332, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 336, 7, 48, 2, 2, 336, 53, 3, 2, 2, 2, 337, 338, 8, 28, 1, 2, 338, 339, 5, 168, 85, 2, 339, 340, 7, 39, 2, 2, 340, 341, 8, 28, 1, 2, 341, 55, 3, 2, 2, 2, 342, 345, 5, 58, 30, 2, 343, 345, 5, 60, 31, 2, 344, 342, 3, 2, 2, 2, 344, 343, 3, 2, 2, 2, 345, 57, 3, 2, 2, 2, 346, 347, 7, 19, 2, 2, 347, 348, 7, 42, 2, 2, 348, 349, 5, 168, 85, 2, 349, 350, 7, 43, 2, 2, 350, 353, 5, 50, 26, 2, 351, 352, 7, 20, 2, 2, 352, 354, 5, 50, 26, 2, 353, 351, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 59, 3, 2, 2, 2, 355, 356, 7, 12, 2, 2, 356, 357, 7, 42, 2, 2, 357, 358, 5, 168, 85, 2, 358, 359, 7, 43, 2, 2, 359, 363, 7, 47, 2, 2, 360, 362, 5, 62, 32, 2, 361, 360, 3, 2, 2, 2, 362, 365, 3, 2, 2, 2, 363, 361, 3, 2, 2, 2, 363, 364, 3, 2, 2, 2, 364, 366, 3, 2, 2, 2, 365, 363, 3, 2, 2, 2, 366, 367, 7, 48, 2, 2, 367, 61, 3, 2, 2, 2, 368, 369, 7, 13, 2, 2, 369, 370, 5, 168, 85, 2, 370, 371, 7, 41, 2, 2, 371, 372, 5, 50, 26, 2, 372, 377, 3, 2, 2, 2, 373, 374, 7, 14, 2, 2, 374, 375, 7, 41, 2, 2, 375, 377, 5, 50, 26, 2, 376, 368, 3, 2, 2, 2, 376, 373, 3, 2, 2, 2, 377, 63, 3, 2, 2, 2, 378, 382, 5, 66, 34, 2, 379, 382, 5, 68, 35, 2, 380, 382, 5, 70, 36, 2, 381, 378, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 381, 380, 3, 2, 2, 2, 382, 65, 3, 2, 2, 2, 383, 384, 7, 21, 2, 2, 384, 391, 7, 42, 2, 2, 385, 388, 5, 14, 8, 2, 386, 388, 5, 168, 85, 2, 387, 385, 3, 2, 2, 2, 387, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 390, 8, 34, 1, 2, 390, 392, 3, 2, 2, 2, 391, 387, 3, 2, 2, 2, 391, 392, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 397, 7, 39, 2, 2, 394, 395, 5, 168, 85, 2, 395, 396, 8, 34, 1, 2, 396, 398, 3, 2, 2, 2, 397, 394, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 403, 7, 39, 2, 2, 400, 401, 5, 168, 85, 2, 401, 402, 8, 34, 1, 2, 402, 404, 3, 2, 2, 2, 403, 400, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 406, 7, 43, 2, 2, 406, 407, 5, 50, 26, 2, 407, 67, 3, 2, 2, 2, 408, 409, 7, 18, 2, 2, 409, 410, 7, 42, 2, 2, 410, 411, 5, 168, 85, 2, 411, 412, 7, 43, 2, 2, 412, 413, 5, 50, 26, 2, 413, 69, 3, 2, 2, 2, 414, 415, 7, 17, 2, 2, 415, 416, 5, 50, 26, 2, 416, 417, 7, 18, 2, 2, 417, 418, 7, 42, 2, 2, 418, 419, 5, 168, 85, 2, 419, 420, 7, 43, 2, 2, 420, 421, 7, 39, 2, 2, 421, 71, 3, 2, 2, 2, 422, 423, 9, 3, 2, 2, 423, 424, 7, 39, 2, 2, 424, 73, 3, 2, 2, 2, 425, 427, 7, 24, 2, 2, 426, 428, 5, 168, 85, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 430, 7, 39, 2, 2, 430, 75, 3, 2, 2, 2, 431, 442, 5, 80, 41, 2, 432, 442, 5, 78, 40, 2, 433, 442, 5, 100, 51, 2, 434, 442, 5, 102, 52, 2, 435, 442, 5, 82, 42, 2, 436, 442, 5, 84, 43, 2, 437, 442, 5, 90, 46, 2, 438, 442, 5, 92, 47, 2, 439, 442, 5, 98, 50, 2, 440, 442, 5, 106, 54, 2, 441, 431, 3, 2, 2, 2, 441, 432, 3, 2, 2, 2, 441, 433, 3, 2, 2, 2, 441, 434, 3, 2, 2, 2, 441, 435, 3, 2, 2, 2, 441, 436, 3, 2, 2, 2, 441, 437, 3, 2, 2, 2, 441, 438, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 441, 440, 3, 2, 2, 2, 442, 77, 3, 2, 2, 2, 443, 445, 7, 42, 2, 2, 444, 446, 5, 28, 15, 2, 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 7, 43, 2, 2, 448, 449, 7, 41, 2, 2, 449, 450, 5, 170, 86, 2, 450, 453, 7, 26, 2, 2, 451, 454, 5, 168, 85, 2, 452, 454, 5, 52, 27, 2, 453, 451, 3, 2, 2, 2, 453, 452, 3, 2, 2, 2, 454, 79, 3, 2, 2, 2, 455, 456, 7, 42, 2, 2, 456, 457, 5, 168, 85, 2, 457, 458, 7, 43, 2, 2, 458, 81, 3, 2, 2, 2, 459, 460, 9, 4, 2, 2, 460, 83, 3, 2, 2, 2, 461, 462, 5, 86, 44, 2, 462, 85, 3, 2, 2, 2, 463, 464, 7, 80, 2, 2, 464, 87, 3, 2, 2, 2, 465, 468, 5, 86, 44, 2, 466, 468, 5, 90, 46, 2, 467, 465, 3, 2, 2, 2, 467, 466, 3, 2, 2, 2, 468, 89, 3, 2, 2, 2, 469, 470, 9, 5, 2, 2, 470, 91, 3, 2, 2, 2, 471, 475, 7, 87, 2, 2, 472, 474, 5, 94, 48, 2, 473, 472, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 488, 7, 89, 2, 2, 479, 483, 7, 88, 2, 2, 480, 482, 5, 96, 49, 2, 481, 480, 3, 2, 2, 2, 482, 485, 3, 2, 2, 2, 483, 481, 3, 2, 2, 2, 483, 484, 3, 2, 2, 2, 484, 486, 3, 2, 2, 2, 485, 483, 3, 2, 2, 2, 486, 488, 7, 91, 2, 2, 487, 471, 3, 2, 2, 2, 487, 479, 3, 2, 2, 2, 488, 93, 3, 2, 2, 2, 489, 496, 7, 90, 2, 2, 490, 492, 7, 3, 2, 2, 491, 493, 5, 168, 85, 2, 492, 491, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 496, 7, 46, 2, 2, 495, 489, 3, 2, 2, 2, 495, 490, 3, 2, 2, 2, 496, 95, 3, 2, 2, 2, 497, 504, 7, 92, 2, 2, 498, 500, 7, 3, 2, 2, 499, 501, 5, 168, 85, 2, 500, 499, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 504, 7, 46, 2, 2, 503, 497, 3, 2, 2, 2, 503, 498, 3, 2, 2, 2, 504, 97, 3, 2, 2, 2, 505, 506, 9, 6, 2, 2, 506, 99, 3, 2, 2, 2, 507, 516, 7, 44, 2, 2, 508, 513, 5, 168, 85, 2, 509, 510, 7, 38, 2, 2, 510, 512, 5, 168, 85, 2, 511, 509, 3, 2, 2, 2, 512, 515, 3, 2, 2, 2, 513, 511, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 517, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 516, 508, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 519, 3, 2, 2, 2, 518, 520, 7, 38, 2, 2, 519, 518, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 3, 2, 2, 2, 521, 522, 7, 45, 2, 2, 522, 101, 3, 2, 2, 2, 523, 532, 7, 47, 2, 2, 524, 529, 5, 104, 53, 2, 525, 526, 7, 38, 2, 2, 526, 528, 5, 104, 53, 2, 527, 525, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 533, 3, 2, 2, 2, 531, 529, 3, 2, 2, 2, 532, 524, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 535, 3, 2, 2, 2, 534, 536, 7, 38, 2, 2, 535, 534, 3, 2, 2, 2, 535, 536, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 538, 7, 48, 2, 2, 538, 103, 3, 2, 2, 2, 539, 540, 5, 88, 45, 2, 540, 541, 7, 41, 2, 2, 541, 542, 5, 168, 85, 2, 542, 105, 3, 2, 2, 2, 543, 544, 9, 7, 2, 2, 544, 107, 3, 2, 2, 2, 545, 546, 8, 55, 1, 2, 546, 566, 5, 76, 39, 2, 547, 548, 7, 25, 2, 2, 548, 549, 5, 108, 55, 2, 549, 551, 7, 42, 2, 2, 550, 552, 5, 110, 56, 2, 551, 550, 3, 2, 2, 2, 551, 552, 3, 2, 2, 2, 552, 553, 3, 2, 2, 2, 553, 554, 7, 43, 2, 2, 554, 555, 8, 55, 1, 2, 555, 566, 3, 2, 2, 2, 556, 557, 7, 30, 2, 2, 557, 558, 5, 170, 86, 2, 558, 560, 7, 42, 2, 2, 559, 561, 5, 110, 56, 2, 560, 559, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 563, 7, 43, 2, 2, 563, 564, 8, 55, 1, 2, 564, 566, 3, 2, 2, 2, 565, 545, 3, 2, 2, 2, 565, 547, 3, 2, 2, 2, 565, 556, 3, 2, 2, 2, 566, 588, 3, 2, 2, 2, 567, 568, 12, 8, 2, 2, 568, 569, 5, 112, 57, 2, 569, 570, 8, 55, 1, 2, 570, 587, 3, 2, 2, 2, 571, 572, 12, 7, 2, 2, 572, 573, 5, 114, 58, 2, 573, 574, 8, 55, 1, 2, 574, 587, 3, 2, 2, 2, 575, 576, 12, 6, 2, 2, 576, 577, 5, 116, 59, 2, 577, 578, 8, 55, 1, 2, 578, 587, 3, 2, 2, 2, 579, 580, 12, 5, 2, 2, 580, 582, 7, 42, 2, 2, 581, 583, 5, 110, 56, 2, 582, 581, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 7, 43, 2, 2, 585, 587, 8, 55, 1, 2, 586, 567, 3, 2, 2, 2, 586, 571, 3, 2, 2, 2, 586, 575, 3, 2, 2, 2, 586, 579, 3, 2, 2, 2, 587, 590, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 588, 589, 3, 2, 2, 2, 589, 109, 3, 2, 2, 2, 590, 588, 3, 2, 2, 2, 591, 596, 5, 164, 83, 2, 592, 593, 7, 38, 2, 2, 593, 595, 5, 164, 83, 2, 594, 592, 3, 2, 2, 2, 595, 598, 3, 2, 2, 2, 596, 594, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 111, 3, 2, 2, 2, 598, 596, 3, 2, 2, 2, 599, 600, 7, 79, 2, 2, 600, 601, 5, 86, 44, 2, 601, 113, 3, 2, 2, 2, 602, 603, 7, 44, 2, 2, 603, 604, 5, 168, 85, 2, 604, 605, 7, 45, 2, 2, 605, 115, 3, 2, 2, 2, 606, 610, 7, 44, 2, 2, 607, 608, 5, 168, 85, 2, 608, 609, 8, 59, 1, 2, 609, 611, 3, 2, 2, 2, 610, 607, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 612, 3, 2, 2, 2, 612, 616, 7, 41, 2, 2, 613, 614, 5, 168, 85, 2, 614, 615, 8, 59, 1, 2, 615, 617, 3, 2, 2, 2, 616, 613, 3, 2, 2, 2, 616, 617, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 619, 7, 45, 2, 2, 619, 117, 3, 2, 2, 2, 620, 624, 5, 108, 55, 2, 621, 624, 5, 120, 61, 2, 622, 624, 5, 122, 62, 2, 623, 620, 3, 2, 2, 2, 623, 621, 3, 2, 2, 2, 623, 622, 3, 2, 2, 2, 624, 119, 3, 2, 2, 2, 625, 626, 5, 108, 55, 2, 626, 627, 5, 130, 66, 2, 627, 121, 3, 2, 2, 2, 628, 629, 7, 34, 2, 2, 629, 630, 5, 164, 83, 2, 630, 123, 3, 2, 2, 2, 631, 635, 5, 118, 60, 2, 632, 635, 5, 126, 64, 2, 633, 635, 5, 128, 65, 2, 634, 631, 3, 2, 2, 2, 634, 632, 3, 2, 2, 2, 634, 633, 3, 2, 2, 2, 635, 125, 3, 2, 2, 2, 636, 637, 5, 130, 66, 2, 637, 638, 5, 118, 60, 2, 638, 127, 3, 2, 2, 2, 639, 640, 5, 132, 67, 2, 640, 641, 5, 118, 60, 2, 641, 129, 3, 2, 2, 2, 642, 643, 9, 8, 2, 2, 643, 131, 3, 2, 2, 2, 644, 645, 9, 9, 2, 2, 645, 133, 3, 2, 2, 2, 646, 652, 5, 124, 63, 2, 647, 648, 5, 124, 63, 2, 648, 649, 7, 10, 2, 2, 649, 650, 5, 170, 86, 2, 650, 652, 3, 2, 2, 2, 651, 646, 3, 2, 2, 2, 651, 647, 3, 2, 2, 2, 652, 135, 3, 2, 2, 2, 653, 654, 8, 69, 1, 2, 654, 655, 5, 134, 68, 2, 655, 661, 3, 2, 2, 2, 656, 657, 12, 3, 2, 2, 657, 658, 9, 10, 2, 2, 658, 660, 5, 134, 68, 2, 659, 656, 3, 2, 2, 2, 660, 663, 3, 2, 2, 2, 661, 659, 3, 2, 2, 2, 661, 662, 3, 2, 2, 2, 662, 137, 3, 2, 2, 2, 663, 661, 3, 2, 2, 2, 664, 665, 8, 70, 1, 2, 665, 666, 5, 136, 69, 2, 666, 672, 3, 2, 2, 2, 667, 668, 12, 3, 2, 2, 668, 669, 9, 11, 2, 2, 669, 671, 5, 136, 69, 2, 670, 667, 3, 2, 2, 2, 671, 674, 3, 2, 2, 2, 672, 670, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 139, 3, 2, 2, 2, 674, 672, 3, 2, 2, 2, 675, 676, 8, 71, 1, 2, 676, 677, 5, 138, 70, 2, 677, 684, 3, 2, 2, 2, 678, 679, 12, 3, 2, 2, 679, 680, 5, 142, 72, 2, 680, 681, 5, 152, 77, 2, 681, 683, 3, 2, 2, 2, 682, 678, 3, 2, 2, 2, 683, 686, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 141, 3, 2, 2, 2, 686, 684, 3, 2, 2, 2, 687, 688, 9, 12, 2, 2, 688, 143, 3, 2, 2, 2, 689, 690, 8, 73, 1, 2, 690, 691, 5, 140, 71, 2, 691, 697, 3, 2, 2, 2, 692, 693, 12, 3, 2, 2, 693, 694, 7, 7, 2, 2, 694, 696, 5, 170, 86, 2, 695, 692, 3, 2, 2, 2, 696, 699, 3, 2, 2, 2, 697, 695, 3, 2, 2, 2, 697, 698, 3, 2, 2, 2, 698, 145, 3, 2, 2, 2, 699, 697, 3, 2, 2, 2, 700, 701, 8, 74, 1, 2, 701, 702, 5, 144, 73, 2, 702, 708, 3, 2, 2, 2, 703, 704, 12, 3, 2, 2, 704, 705, 7, 33, 2, 2, 705, 707, 5, 170, 86, 2, 706, 703, 3, 2, 2, 2, 707, 710, 3, 2, 2, 2, 708, 706, 3, 2, 2, 2, 708, 709, 3, 2, 2, 2, 709, 147, 3, 2, 2, 2, 710, 708, 3, 2, 2, 2, 711, 712, 8, 75, 1, 2, 712, 713, 5, 146, 74, 2, 713, 719, 3, 2, 2, 2, 714, 715, 12, 3, 2, 2, 715, 716, 9, 13, 2, 2, 716, 718, 5, 148, 75, 4, 717, 714, 3, 2, 2, 2, 718, 721, 3, 2, 2, 2, 719, 717, 3, 2, 2, 2, 719, 720, 3, 2, 2, 2, 720, 149, 3, 2, 2, 2, 721, 719, 3, 2, 2, 2, 722, 723, 8, 76, 1, 2, 723, 724, 5, 148, 75, 2, 724, 730, 3, 2, 2, 2, 725, 726, 12, 3, 2, 2, 726, 727, 9, 14, 2, 2, 727, 729, 5, 148, 75, 2, 728, 725, 3, 2, 2, 2, 729, 732, 3, 2, 2, 2, 730, 728, 3, 2, 2, 2, 730, 731, 3, 2, 2, 2, 731, 151, 3, 2, 2, 2, 732, 730, 3, 2, 2, 2, 733, 734, 8, 77, 1, 2, 734, 735, 5, 150, 76, 2, 735, 741, 3, 2, 2, 2, 736, 737, 12, 3, 2, 2, 737, 738, 7, 72, 2, 2, 738, 740, 5, 150, 76, 2, 739, 736, 3, 2, 2, 2, 740, 743, 3, 2, 2, 2, 741, 739, 3, 2, 2, 2, 741, 742, 3, 2, 2, 2, 742, 153, 3, 2, 2, 2, 743, 741, 3, 2, 2, 2, 744, 745, 8, 78, 1, 2, 745, 746, 5, 152, 77, 2, 746, 752, 3, 2, 2, 2, 747, 748, 12, 3, 2, 2, 748, 749, 7, 74, 2, 2, 749, 751, 5, 152, 77, 2, 750, 747, 3, 2, 2, 2, 751, 754, 3, 2, 2, 2, 752, 750, 3, 2, 2, 2, 752, 753, 3, 2, 2, 2, 753, 155, 3, 2, 2, 2, 754, 752, 3, 2, 2, 2, 755, 756, 8, 79, 1, 2, 756, 757, 5, 154, 78, 2, 757, 763, 3, 2, 2, 2, 758, 759, 12, 3, 2, 2, 759, 760, 7, 73, 2, 2, 760, 762, 5, 154, 78, 2, 761, 758, 3, 2, 2, 2, 762, 765, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 157, 3, 2, 2, 2, 765, 763, 3, 2, 2, 2, 766, 767, 8, 80, 1, 2, 767, 768, 5, 156, 79, 2, 768, 774, 3, 2, 2, 2, 769, 770, 12, 3, 2, 2, 770, 771, 7, 57, 2, 2, 771, 773, 5, 156, 79, 2, 772, 769, 3, 2, 2, 2, 773, 776, 3, 2, 2, 2, 774, 772, 3, 2, 2, 2, 774, 775, 3, 2, 2, 2, 775, 159, 3, 2, 2, 2, 776, 774, 3, 2, 2, 2, 777, 778, 8, 81, 1, 2, 778, 779, 5, 158, 80, 2, 779, 785, 3, 2, 2, 2, 780, 781, 12, 3, 2, 2, 781, 782, 7, 58, 2, 2, 782, 784, 5, 158, 80, 2, 783, 780, 3, 2, 2, 2, 784, 787, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 161, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 788, 796, 5, 160, 81, 2, 789, 790, 5, 160, 81, 2, 790, 791, 7, 40, 2, 2, 791, 792, 5, 162, 82, 2, 792, 793, 7, 41, 2, 2, 793, 794, 5, 162, 82, 2, 794, 796, 3, 2, 2, 2, 795, 788, 3, 2, 2, 2, 795, 789, 3, 2, 2, 2, 796, 163, 3, 2, 2, 2, 797, 803, 5, 162, 82, 2, 798, 799, 5, 108, 55, 2, 799, 800, 5, 166, 84, 2, 800, 801, 5, 164, 83, 2, 801, 803, 3, 2, 2, 2, 802, 797, 3, 2, 2, 2, 802, 798, 3, 2, 2, 2, 803, 165, 3, 2, 2, 2, 804, 805, 9, 15, 2, 2, 805, 167, 3, 2, 2, 2, 806, 811, 5, 164, 83, 2, 807, 808, 7, 38, 2, 2, 808, 810, 5, 164, 83, 2, 809, 807, 3, 2, 2, 2, 810, 813, 3, 2, 2, 2, 811, 809, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 169, 3, 2, 2, 2, 813, 811, 3, 2, 2, 2, 814, 818, 5, 172, 87, 2, 815, 818, 5, 174, 88, 2, 816, 818, 5, 176, 89, 2, 817, 814, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 817, 816, 3, 2, 2, 2, 818, 171, 3, 2, 2, 2, 819, 820, 5, 178, 90, 2, 820, 173, 3, 2, 2, 2, 821, 822, 5, 178, 90, 2, 822, 831, 7, 68, 2, 2, 823, 828, 5, 170, 86, 2, 824, 825, 7, 38, 2, 2, 825, 827, 5, 170, 86, 2, 826, 824, 3, 2, 2, 2, 827, 830, 3, 2, 2, 2, 828, 826, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 832, 3, 2, 2, 2, 830, 828, 3, 2, 2, 2, 831, 823, 3, 2, 2, 2, 831, 832, 3, 2, 2, 2, 832, 833, 3, 2, 2, 2, 833, 834, 7, 70, 2, 2, 834, 175, 3, 2, 2, 2, 835, 836, 7, 34, 2, 2, 836, 837, 7, 42, 2, 2, 837, 838, 5, 178, 90, 2, 838, 839, 7, 43, 2, 2, 839, 177, 3, 2, 2, 2, 840, 841, 9, 16, 2, 2, 841, 179, 3, 2, 2, 2, 79, 181, 188, 195, 200, 208, 220, 232, 238, 245, 258, 265, 275, 287, 289, 297, 306, 312, 317, 328, 333, 344, 353, 363, 376, 381, 387, 391, 397, 403, 427, 441, 445, 453, 467, 475, 483, 487, 492, 495, 500, 503, 513, 516, 519, 529, 532, 535, 551, 560, 565, 582, 586, 588, 596, 610, 616, 623, 634, 651, 661, 672, 684, 697, 708, 719, 730, 741, 752, 763, 774, 785, 795, 802, 811, 817, 828, 831] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 92, 855, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 3, 2, 5, 2, 182, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 187, 10, 3, 13, 3, 14, 3, 188, 3, 4, 3, 4, 3, 5, 6, 5, 194, 10, 5, 13, 5, 14, 5, 195, 3, 6, 3, 6, 3, 6, 5, 6, 201, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 209, 10, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 221, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 233, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 239, 10, 14, 3, 15, 3, 15, 3, 15, 7, 15, 244, 10, 15, 12, 15, 14, 15, 247, 11, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 257, 10, 17, 12, 17, 14, 17, 260, 11, 17, 3, 17, 3, 17, 3, 18, 3, 18, 5, 18, 266, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 276, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 288, 10, 21, 12, 21, 14, 21, 291, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 5, 22, 298, 10, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 5, 24, 307, 10, 24, 3, 24, 3, 24, 3, 24, 3, 24, 5, 24, 313, 10, 24, 3, 25, 3, 25, 3, 25, 5, 25, 318, 10, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 329, 10, 26, 3, 27, 3, 27, 3, 27, 5, 27, 334, 10, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 341, 10, 27, 3, 27, 3, 27, 5, 27, 345, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 5, 29, 354, 10, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 363, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 371, 10, 31, 12, 31, 14, 31, 374, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 386, 10, 32, 3, 33, 3, 33, 3, 33, 5, 33, 391, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 397, 10, 34, 3, 34, 3, 34, 5, 34, 401, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 407, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 413, 10, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 5, 38, 437, 10, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 451, 10, 39, 3, 40, 3, 40, 3, 40, 5, 40, 456, 10, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 464, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 480, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 486, 10, 47, 12, 47, 14, 47, 489, 11, 47, 3, 47, 3, 47, 3, 47, 7, 47, 494, 10, 47, 12, 47, 14, 47, 497, 11, 47, 3, 47, 5, 47, 500, 10, 47, 3, 48, 3, 48, 3, 48, 5, 48, 505, 10, 48, 3, 48, 5, 48, 508, 10, 48, 3, 49, 3, 49, 3, 49, 5, 49, 513, 10, 49, 3, 49, 5, 49, 516, 10, 49, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 524, 10, 51, 12, 51, 14, 51, 527, 11, 51, 5, 51, 529, 10, 51, 3, 51, 5, 51, 532, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 540, 10, 52, 12, 52, 14, 52, 543, 11, 52, 5, 52, 545, 10, 52, 3, 52, 5, 52, 548, 10, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 564, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 573, 10, 55, 3, 55, 3, 55, 3, 55, 5, 55, 578, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 595, 10, 55, 3, 55, 3, 55, 7, 55, 599, 10, 55, 12, 55, 14, 55, 602, 11, 55, 3, 56, 3, 56, 3, 56, 7, 56, 607, 10, 56, 12, 56, 14, 56, 610, 11, 56, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 623, 10, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 629, 10, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 5, 60, 636, 10, 60, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 5, 63, 647, 10, 63, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 5, 68, 664, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 672, 10, 69, 12, 69, 14, 69, 675, 11, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 7, 70, 683, 10, 70, 12, 70, 14, 70, 686, 11, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 695, 10, 71, 12, 71, 14, 71, 698, 11, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 708, 10, 73, 12, 73, 14, 73, 711, 11, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 7, 74, 719, 10, 74, 12, 74, 14, 74, 722, 11, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 730, 10, 75, 12, 75, 14, 75, 733, 11, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 741, 10, 76, 12, 76, 14, 76, 744, 11, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 752, 10, 77, 12, 77, 14, 77, 755, 11, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 7, 78, 763, 10, 78, 12, 78, 14, 78, 766, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 774, 10, 79, 12, 79, 14, 79, 777, 11, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 7, 80, 785, 10, 80, 12, 80, 14, 80, 788, 11, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 796, 10, 81, 12, 81, 14, 81, 799, 11, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 808, 10, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 815, 10, 83, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 7, 85, 822, 10, 85, 12, 85, 14, 85, 825, 11, 85, 3, 86, 3, 86, 3, 86, 5, 86, 830, 10, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 7, 88, 839, 10, 88, 12, 88, 14, 88, 842, 11, 88, 5, 88, 844, 10, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 2, 2, 15, 108, 136, 138, 140, 144, 146, 148, 150, 152, 154, 156, 158, 160, 91, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 2, 17, 3, 2, 8, 9, 3, 2, 15, 16, 3, 2, 31, 32, 3, 2, 82, 83, 4, 2, 81, 81, 84, 84, 3, 2, 35, 37, 4, 2, 50, 50, 52, 52, 6, 2, 49, 49, 51, 51, 59, 59, 75, 75, 3, 2, 53, 56, 4, 2, 49, 49, 51, 51, 3, 2, 76, 78, 3, 2, 68, 71, 3, 2, 66, 67, 3, 2, 60, 65, 4, 2, 35, 37, 80, 80, 2, 867, 2, 181, 3, 2, 2, 2, 4, 186, 3, 2, 2, 2, 6, 190, 3, 2, 2, 2, 8, 193, 3, 2, 2, 2, 10, 200, 3, 2, 2, 2, 12, 208, 3, 2, 2, 2, 14, 210, 3, 2, 2, 2, 16, 213, 3, 2, 2, 2, 18, 215, 3, 2, 2, 2, 20, 222, 3, 2, 2, 2, 22, 224, 3, 2, 2, 2, 24, 226, 3, 2, 2, 2, 26, 228, 3, 2, 2, 2, 28, 240, 3, 2, 2, 2, 30, 248, 3, 2, 2, 2, 32, 252, 3, 2, 2, 2, 34, 265, 3, 2, 2, 2, 36, 267, 3, 2, 2, 2, 38, 272, 3, 2, 2, 2, 40, 282, 3, 2, 2, 2, 42, 297, 3, 2, 2, 2, 44, 299, 3, 2, 2, 2, 46, 303, 3, 2, 2, 2, 48, 314, 3, 2, 2, 2, 50, 328, 3, 2, 2, 2, 52, 344, 3, 2, 2, 2, 54, 346, 3, 2, 2, 2, 56, 353, 3, 2, 2, 2, 58, 355, 3, 2, 2, 2, 60, 364, 3, 2, 2, 2, 62, 385, 3, 2, 2, 2, 64, 390, 3, 2, 2, 2, 66, 392, 3, 2, 2, 2, 68, 417, 3, 2, 2, 2, 70, 423, 3, 2, 2, 2, 72, 431, 3, 2, 2, 2, 74, 434, 3, 2, 2, 2, 76, 450, 3, 2, 2, 2, 78, 452, 3, 2, 2, 2, 80, 467, 3, 2, 2, 2, 82, 471, 3, 2, 2, 2, 84, 473, 3, 2, 2, 2, 86, 475, 3, 2, 2, 2, 88, 479, 3, 2, 2, 2, 90, 481, 3, 2, 2, 2, 92, 499, 3, 2, 2, 2, 94, 507, 3, 2, 2, 2, 96, 515, 3, 2, 2, 2, 98, 517, 3, 2, 2, 2, 100, 519, 3, 2, 2, 2, 102, 535, 3, 2, 2, 2, 104, 551, 3, 2, 2, 2, 106, 555, 3, 2, 2, 2, 108, 577, 3, 2, 2, 2, 110, 603, 3, 2, 2, 2, 112, 611, 3, 2, 2, 2, 114, 614, 3, 2, 2, 2, 116, 618, 3, 2, 2, 2, 118, 635, 3, 2, 2, 2, 120, 637, 3, 2, 2, 2, 122, 640, 3, 2, 2, 2, 124, 646, 3, 2, 2, 2, 126, 648, 3, 2, 2, 2, 128, 651, 3, 2, 2, 2, 130, 654, 3, 2, 2, 2, 132, 656, 3, 2, 2, 2, 134, 663, 3, 2, 2, 2, 136, 665, 3, 2, 2, 2, 138, 676, 3, 2, 2, 2, 140, 687, 3, 2, 2, 2, 142, 699, 3, 2, 2, 2, 144, 701, 3, 2, 2, 2, 146, 712, 3, 2, 2, 2, 148, 723, 3, 2, 2, 2, 150, 734, 3, 2, 2, 2, 152, 745, 3, 2, 2, 2, 154, 756, 3, 2, 2, 2, 156, 767, 3, 2, 2, 2, 158, 778, 3, 2, 2, 2, 160, 789, 3, 2, 2, 2, 162, 807, 3, 2, 2, 2, 164, 814, 3, 2, 2, 2, 166, 816, 3, 2, 2, 2, 168, 818, 3, 2, 2, 2, 170, 829, 3, 2, 2, 2, 172, 831, 3, 2, 2, 2, 174, 833, 3, 2, 2, 2, 176, 847, 3, 2, 2, 2, 178, 852, 3, 2, 2, 2, 180, 182, 5, 4, 3, 2, 181, 180, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 7, 2, 2, 3, 184, 3, 3, 2, 2, 2, 185, 187, 5, 6, 4, 2, 186, 185, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 186, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 5, 3, 2, 2, 2, 190, 191, 5, 8, 5, 2, 191, 7, 3, 2, 2, 2, 192, 194, 5, 10, 6, 2, 193, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 9, 3, 2, 2, 2, 197, 201, 5, 50, 26, 2, 198, 201, 5, 12, 7, 2, 199, 201, 7, 39, 2, 2, 200, 197, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 199, 3, 2, 2, 2, 201, 11, 3, 2, 2, 2, 202, 203, 5, 14, 8, 2, 203, 204, 7, 39, 2, 2, 204, 209, 3, 2, 2, 2, 205, 209, 5, 26, 14, 2, 206, 209, 5, 32, 17, 2, 207, 209, 5, 40, 21, 2, 208, 202, 3, 2, 2, 2, 208, 205, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 207, 3, 2, 2, 2, 209, 13, 3, 2, 2, 2, 210, 211, 5, 16, 9, 2, 211, 212, 5, 18, 10, 2, 212, 15, 3, 2, 2, 2, 213, 214, 9, 2, 2, 2, 214, 17, 3, 2, 2, 2, 215, 216, 5, 22, 12, 2, 216, 217, 7, 41, 2, 2, 217, 220, 5, 170, 86, 2, 218, 219, 7, 60, 2, 2, 219, 221, 5, 20, 11, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 19, 3, 2, 2, 2, 222, 223, 5, 164, 83, 2, 223, 21, 3, 2, 2, 2, 224, 225, 5, 24, 13, 2, 225, 23, 3, 2, 2, 2, 226, 227, 7, 80, 2, 2, 227, 25, 3, 2, 2, 2, 228, 229, 7, 23, 2, 2, 229, 230, 5, 22, 12, 2, 230, 232, 7, 42, 2, 2, 231, 233, 5, 28, 15, 2, 232, 231, 3, 2, 2, 2, 232, 233, 3, 2, 2, 2, 233, 234, 3, 2, 2, 2, 234, 235, 7, 43, 2, 2, 235, 236, 7, 26, 2, 2, 236, 238, 5, 170, 86, 2, 237, 239, 5, 52, 27, 2, 238, 237, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 27, 3, 2, 2, 2, 240, 245, 5, 30, 16, 2, 241, 242, 7, 38, 2, 2, 242, 244, 5, 30, 16, 2, 243, 241, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 29, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 5, 22, 12, 2, 249, 250, 7, 41, 2, 2, 250, 251, 5, 170, 86, 2, 251, 31, 3, 2, 2, 2, 252, 253, 7, 28, 2, 2, 253, 254, 5, 22, 12, 2, 254, 258, 7, 47, 2, 2, 255, 257, 5, 34, 18, 2, 256, 255, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 261, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 7, 48, 2, 2, 262, 33, 3, 2, 2, 2, 263, 266, 5, 36, 19, 2, 264, 266, 5, 38, 20, 2, 265, 263, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 35, 3, 2, 2, 2, 267, 268, 5, 22, 12, 2, 268, 269, 7, 41, 2, 2, 269, 270, 5, 170, 86, 2, 270, 271, 7, 39, 2, 2, 271, 37, 3, 2, 2, 2, 272, 273, 5, 22, 12, 2, 273, 275, 7, 42, 2, 2, 274, 276, 5, 28, 15, 2, 275, 274, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 7, 43, 2, 2, 278, 279, 7, 41, 2, 2, 279, 280, 5, 170, 86, 2, 280, 281, 7, 39, 2, 2, 281, 39, 3, 2, 2, 2, 282, 283, 7, 27, 2, 2, 283, 284, 5, 22, 12, 2, 284, 289, 7, 47, 2, 2, 285, 288, 5, 42, 22, 2, 286, 288, 7, 39, 2, 2, 287, 285, 3, 2, 2, 2, 287, 286, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 292, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 293, 7, 48, 2, 2, 293, 41, 3, 2, 2, 2, 294, 298, 5, 44, 23, 2, 295, 298, 5, 46, 24, 2, 296, 298, 5, 48, 25, 2, 297, 294, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 296, 3, 2, 2, 2, 298, 43, 3, 2, 2, 2, 299, 300, 5, 22, 12, 2, 300, 301, 7, 41, 2, 2, 301, 302, 5, 170, 86, 2, 302, 45, 3, 2, 2, 2, 303, 304, 5, 22, 12, 2, 304, 306, 7, 42, 2, 2, 305, 307, 5, 28, 15, 2, 306, 305, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 309, 7, 43, 2, 2, 309, 310, 7, 41, 2, 2, 310, 312, 5, 170, 86, 2, 311, 313, 5, 52, 27, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 47, 3, 2, 2, 2, 314, 315, 7, 29, 2, 2, 315, 317, 7, 42, 2, 2, 316, 318, 5, 28, 15, 2, 317, 316, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 319, 3, 2, 2, 2, 319, 320, 7, 43, 2, 2, 320, 321, 5, 52, 27, 2, 321, 49, 3, 2, 2, 2, 322, 329, 5, 54, 28, 2, 323, 329, 5, 56, 29, 2, 324, 329, 5, 64, 33, 2, 325, 329, 5, 72, 37, 2, 326, 329, 5, 74, 38, 2, 327, 329, 5, 52, 27, 2, 328, 322, 3, 2, 2, 2, 328, 323, 3, 2, 2, 2, 328, 324, 3, 2, 2, 2, 328, 325, 3, 2, 2, 2, 328, 326, 3, 2, 2, 2, 328, 327, 3, 2, 2, 2, 329, 51, 3, 2, 2, 2, 330, 331, 6, 27, 2, 2, 331, 333, 7, 47, 2, 2, 332, 334, 5, 8, 5, 2, 333, 332, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 335, 3, 2, 2, 2, 335, 345, 7, 48, 2, 2, 336, 337, 6, 27, 3, 2, 337, 338, 7, 47, 2, 2, 338, 340, 8, 27, 1, 2, 339, 341, 5, 8, 5, 2, 340, 339, 3, 2, 2, 2, 340, 341, 3, 2, 2, 2, 341, 342, 3, 2, 2, 2, 342, 343, 8, 27, 1, 2, 343, 345, 7, 48, 2, 2, 344, 330, 3, 2, 2, 2, 344, 336, 3, 2, 2, 2, 345, 53, 3, 2, 2, 2, 346, 347, 8, 28, 1, 2, 347, 348, 5, 168, 85, 2, 348, 349, 7, 39, 2, 2, 349, 350, 8, 28, 1, 2, 350, 55, 3, 2, 2, 2, 351, 354, 5, 58, 30, 2, 352, 354, 5, 60, 31, 2, 353, 351, 3, 2, 2, 2, 353, 352, 3, 2, 2, 2, 354, 57, 3, 2, 2, 2, 355, 356, 7, 19, 2, 2, 356, 357, 7, 42, 2, 2, 357, 358, 5, 168, 85, 2, 358, 359, 7, 43, 2, 2, 359, 362, 5, 50, 26, 2, 360, 361, 7, 20, 2, 2, 361, 363, 5, 50, 26, 2, 362, 360, 3, 2, 2, 2, 362, 363, 3, 2, 2, 2, 363, 59, 3, 2, 2, 2, 364, 365, 7, 12, 2, 2, 365, 366, 7, 42, 2, 2, 366, 367, 5, 168, 85, 2, 367, 368, 7, 43, 2, 2, 368, 372, 7, 47, 2, 2, 369, 371, 5, 62, 32, 2, 370, 369, 3, 2, 2, 2, 371, 374, 3, 2, 2, 2, 372, 370, 3, 2, 2, 2, 372, 373, 3, 2, 2, 2, 373, 375, 3, 2, 2, 2, 374, 372, 3, 2, 2, 2, 375, 376, 7, 48, 2, 2, 376, 61, 3, 2, 2, 2, 377, 378, 7, 13, 2, 2, 378, 379, 5, 168, 85, 2, 379, 380, 7, 41, 2, 2, 380, 381, 5, 50, 26, 2, 381, 386, 3, 2, 2, 2, 382, 383, 7, 14, 2, 2, 383, 384, 7, 41, 2, 2, 384, 386, 5, 50, 26, 2, 385, 377, 3, 2, 2, 2, 385, 382, 3, 2, 2, 2, 386, 63, 3, 2, 2, 2, 387, 391, 5, 66, 34, 2, 388, 391, 5, 68, 35, 2, 389, 391, 5, 70, 36, 2, 390, 387, 3, 2, 2, 2, 390, 388, 3, 2, 2, 2, 390, 389, 3, 2, 2, 2, 391, 65, 3, 2, 2, 2, 392, 393, 7, 21, 2, 2, 393, 400, 7, 42, 2, 2, 394, 397, 5, 14, 8, 2, 395, 397, 5, 168, 85, 2, 396, 394, 3, 2, 2, 2, 396, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 399, 8, 34, 1, 2, 399, 401, 3, 2, 2, 2, 400, 396, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 406, 7, 39, 2, 2, 403, 404, 5, 168, 85, 2, 404, 405, 8, 34, 1, 2, 405, 407, 3, 2, 2, 2, 406, 403, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 412, 7, 39, 2, 2, 409, 410, 5, 168, 85, 2, 410, 411, 8, 34, 1, 2, 411, 413, 3, 2, 2, 2, 412, 409, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 414, 3, 2, 2, 2, 414, 415, 7, 43, 2, 2, 415, 416, 5, 50, 26, 2, 416, 67, 3, 2, 2, 2, 417, 418, 7, 18, 2, 2, 418, 419, 7, 42, 2, 2, 419, 420, 5, 168, 85, 2, 420, 421, 7, 43, 2, 2, 421, 422, 5, 50, 26, 2, 422, 69, 3, 2, 2, 2, 423, 424, 7, 17, 2, 2, 424, 425, 5, 50, 26, 2, 425, 426, 7, 18, 2, 2, 426, 427, 7, 42, 2, 2, 427, 428, 5, 168, 85, 2, 428, 429, 7, 43, 2, 2, 429, 430, 7, 39, 2, 2, 430, 71, 3, 2, 2, 2, 431, 432, 9, 3, 2, 2, 432, 433, 7, 39, 2, 2, 433, 73, 3, 2, 2, 2, 434, 436, 7, 24, 2, 2, 435, 437, 5, 168, 85, 2, 436, 435, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 7, 39, 2, 2, 439, 75, 3, 2, 2, 2, 440, 451, 5, 80, 41, 2, 441, 451, 5, 78, 40, 2, 442, 451, 5, 100, 51, 2, 443, 451, 5, 102, 52, 2, 444, 451, 5, 82, 42, 2, 445, 451, 5, 84, 43, 2, 446, 451, 5, 90, 46, 2, 447, 451, 5, 92, 47, 2, 448, 451, 5, 98, 50, 2, 449, 451, 5, 106, 54, 2, 450, 440, 3, 2, 2, 2, 450, 441, 3, 2, 2, 2, 450, 442, 3, 2, 2, 2, 450, 443, 3, 2, 2, 2, 450, 444, 3, 2, 2, 2, 450, 445, 3, 2, 2, 2, 450, 446, 3, 2, 2, 2, 450, 447, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 450, 449, 3, 2, 2, 2, 451, 77, 3, 2, 2, 2, 452, 453, 8, 40, 1, 2, 453, 455, 7, 42, 2, 2, 454, 456, 5, 28, 15, 2, 455, 454, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 458, 7, 43, 2, 2, 458, 459, 7, 41, 2, 2, 459, 460, 5, 170, 86, 2, 460, 463, 7, 26, 2, 2, 461, 464, 5, 168, 85, 2, 462, 464, 5, 52, 27, 2, 463, 461, 3, 2, 2, 2, 463, 462, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 466, 8, 40, 1, 2, 466, 79, 3, 2, 2, 2, 467, 468, 7, 42, 2, 2, 468, 469, 5, 168, 85, 2, 469, 470, 7, 43, 2, 2, 470, 81, 3, 2, 2, 2, 471, 472, 9, 4, 2, 2, 472, 83, 3, 2, 2, 2, 473, 474, 5, 86, 44, 2, 474, 85, 3, 2, 2, 2, 475, 476, 7, 80, 2, 2, 476, 87, 3, 2, 2, 2, 477, 480, 5, 86, 44, 2, 478, 480, 5, 90, 46, 2, 479, 477, 3, 2, 2, 2, 479, 478, 3, 2, 2, 2, 480, 89, 3, 2, 2, 2, 481, 482, 9, 5, 2, 2, 482, 91, 3, 2, 2, 2, 483, 487, 7, 87, 2, 2, 484, 486, 5, 94, 48, 2, 485, 484, 3, 2, 2, 2, 486, 489, 3, 2, 2, 2, 487, 485, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 490, 3, 2, 2, 2, 489, 487, 3, 2, 2, 2, 490, 500, 7, 89, 2, 2, 491, 495, 7, 88, 2, 2, 492, 494, 5, 96, 49, 2, 493, 492, 3, 2, 2, 2, 494, 497, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 498, 3, 2, 2, 2, 497, 495, 3, 2, 2, 2, 498, 500, 7, 91, 2, 2, 499, 483, 3, 2, 2, 2, 499, 491, 3, 2, 2, 2, 500, 93, 3, 2, 2, 2, 501, 508, 7, 90, 2, 2, 502, 504, 7, 3, 2, 2, 503, 505, 5, 168, 85, 2, 504, 503, 3, 2, 2, 2, 504, 505, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 508, 7, 46, 2, 2, 507, 501, 3, 2, 2, 2, 507, 502, 3, 2, 2, 2, 508, 95, 3, 2, 2, 2, 509, 516, 7, 92, 2, 2, 510, 512, 7, 3, 2, 2, 511, 513, 5, 168, 85, 2, 512, 511, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 516, 7, 46, 2, 2, 515, 509, 3, 2, 2, 2, 515, 510, 3, 2, 2, 2, 516, 97, 3, 2, 2, 2, 517, 518, 9, 6, 2, 2, 518, 99, 3, 2, 2, 2, 519, 528, 7, 44, 2, 2, 520, 525, 5, 168, 85, 2, 521, 522, 7, 38, 2, 2, 522, 524, 5, 168, 85, 2, 523, 521, 3, 2, 2, 2, 524, 527, 3, 2, 2, 2, 525, 523, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 529, 3, 2, 2, 2, 527, 525, 3, 2, 2, 2, 528, 520, 3, 2, 2, 2, 528, 529, 3, 2, 2, 2, 529, 531, 3, 2, 2, 2, 530, 532, 7, 38, 2, 2, 531, 530, 3, 2, 2, 2, 531, 532, 3, 2, 2, 2, 532, 533, 3, 2, 2, 2, 533, 534, 7, 45, 2, 2, 534, 101, 3, 2, 2, 2, 535, 544, 7, 47, 2, 2, 536, 541, 5, 104, 53, 2, 537, 538, 7, 38, 2, 2, 538, 540, 5, 104, 53, 2, 539, 537, 3, 2, 2, 2, 540, 543, 3, 2, 2, 2, 541, 539, 3, 2, 2, 2, 541, 542, 3, 2, 2, 2, 542, 545, 3, 2, 2, 2, 543, 541, 3, 2, 2, 2, 544, 536, 3, 2, 2, 2, 544, 545, 3, 2, 2, 2, 545, 547, 3, 2, 2, 2, 546, 548, 7, 38, 2, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 3, 2, 2, 2, 549, 550, 7, 48, 2, 2, 550, 103, 3, 2, 2, 2, 551, 552, 5, 88, 45, 2, 552, 553, 7, 41, 2, 2, 553, 554, 5, 168, 85, 2, 554, 105, 3, 2, 2, 2, 555, 556, 9, 7, 2, 2, 556, 107, 3, 2, 2, 2, 557, 558, 8, 55, 1, 2, 558, 578, 5, 76, 39, 2, 559, 560, 7, 25, 2, 2, 560, 561, 5, 108, 55, 2, 561, 563, 7, 42, 2, 2, 562, 564, 5, 110, 56, 2, 563, 562, 3, 2, 2, 2, 563, 564, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 566, 7, 43, 2, 2, 566, 567, 8, 55, 1, 2, 567, 578, 3, 2, 2, 2, 568, 569, 7, 30, 2, 2, 569, 570, 5, 170, 86, 2, 570, 572, 7, 42, 2, 2, 571, 573, 5, 110, 56, 2, 572, 571, 3, 2, 2, 2, 572, 573, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 7, 43, 2, 2, 575, 576, 8, 55, 1, 2, 576, 578, 3, 2, 2, 2, 577, 557, 3, 2, 2, 2, 577, 559, 3, 2, 2, 2, 577, 568, 3, 2, 2, 2, 578, 600, 3, 2, 2, 2, 579, 580, 12, 8, 2, 2, 580, 581, 5, 112, 57, 2, 581, 582, 8, 55, 1, 2, 582, 599, 3, 2, 2, 2, 583, 584, 12, 7, 2, 2, 584, 585, 5, 114, 58, 2, 585, 586, 8, 55, 1, 2, 586, 599, 3, 2, 2, 2, 587, 588, 12, 6, 2, 2, 588, 589, 5, 116, 59, 2, 589, 590, 8, 55, 1, 2, 590, 599, 3, 2, 2, 2, 591, 592, 12, 5, 2, 2, 592, 594, 7, 42, 2, 2, 593, 595, 5, 110, 56, 2, 594, 593, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 7, 43, 2, 2, 597, 599, 8, 55, 1, 2, 598, 579, 3, 2, 2, 2, 598, 583, 3, 2, 2, 2, 598, 587, 3, 2, 2, 2, 598, 591, 3, 2, 2, 2, 599, 602, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 109, 3, 2, 2, 2, 602, 600, 3, 2, 2, 2, 603, 608, 5, 164, 83, 2, 604, 605, 7, 38, 2, 2, 605, 607, 5, 164, 83, 2, 606, 604, 3, 2, 2, 2, 607, 610, 3, 2, 2, 2, 608, 606, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 111, 3, 2, 2, 2, 610, 608, 3, 2, 2, 2, 611, 612, 7, 79, 2, 2, 612, 613, 5, 86, 44, 2, 613, 113, 3, 2, 2, 2, 614, 615, 7, 44, 2, 2, 615, 616, 5, 168, 85, 2, 616, 617, 7, 45, 2, 2, 617, 115, 3, 2, 2, 2, 618, 622, 7, 44, 2, 2, 619, 620, 5, 168, 85, 2, 620, 621, 8, 59, 1, 2, 621, 623, 3, 2, 2, 2, 622, 619, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 628, 7, 41, 2, 2, 625, 626, 5, 168, 85, 2, 626, 627, 8, 59, 1, 2, 627, 629, 3, 2, 2, 2, 628, 625, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 631, 7, 45, 2, 2, 631, 117, 3, 2, 2, 2, 632, 636, 5, 108, 55, 2, 633, 636, 5, 120, 61, 2, 634, 636, 5, 122, 62, 2, 635, 632, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 635, 634, 3, 2, 2, 2, 636, 119, 3, 2, 2, 2, 637, 638, 5, 108, 55, 2, 638, 639, 5, 130, 66, 2, 639, 121, 3, 2, 2, 2, 640, 641, 7, 34, 2, 2, 641, 642, 5, 164, 83, 2, 642, 123, 3, 2, 2, 2, 643, 647, 5, 118, 60, 2, 644, 647, 5, 126, 64, 2, 645, 647, 5, 128, 65, 2, 646, 643, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 646, 645, 3, 2, 2, 2, 647, 125, 3, 2, 2, 2, 648, 649, 5, 130, 66, 2, 649, 650, 5, 118, 60, 2, 650, 127, 3, 2, 2, 2, 651, 652, 5, 132, 67, 2, 652, 653, 5, 118, 60, 2, 653, 129, 3, 2, 2, 2, 654, 655, 9, 8, 2, 2, 655, 131, 3, 2, 2, 2, 656, 657, 9, 9, 2, 2, 657, 133, 3, 2, 2, 2, 658, 664, 5, 124, 63, 2, 659, 660, 5, 124, 63, 2, 660, 661, 7, 10, 2, 2, 661, 662, 5, 170, 86, 2, 662, 664, 3, 2, 2, 2, 663, 658, 3, 2, 2, 2, 663, 659, 3, 2, 2, 2, 664, 135, 3, 2, 2, 2, 665, 666, 8, 69, 1, 2, 666, 667, 5, 134, 68, 2, 667, 673, 3, 2, 2, 2, 668, 669, 12, 3, 2, 2, 669, 670, 9, 10, 2, 2, 670, 672, 5, 134, 68, 2, 671, 668, 3, 2, 2, 2, 672, 675, 3, 2, 2, 2, 673, 671, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 137, 3, 2, 2, 2, 675, 673, 3, 2, 2, 2, 676, 677, 8, 70, 1, 2, 677, 678, 5, 136, 69, 2, 678, 684, 3, 2, 2, 2, 679, 680, 12, 3, 2, 2, 680, 681, 9, 11, 2, 2, 681, 683, 5, 136, 69, 2, 682, 679, 3, 2, 2, 2, 683, 686, 3, 2, 2, 2, 684, 682, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 139, 3, 2, 2, 2, 686, 684, 3, 2, 2, 2, 687, 688, 8, 71, 1, 2, 688, 689, 5, 138, 70, 2, 689, 696, 3, 2, 2, 2, 690, 691, 12, 3, 2, 2, 691, 692, 5, 142, 72, 2, 692, 693, 5, 152, 77, 2, 693, 695, 3, 2, 2, 2, 694, 690, 3, 2, 2, 2, 695, 698, 3, 2, 2, 2, 696, 694, 3, 2, 2, 2, 696, 697, 3, 2, 2, 2, 697, 141, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 699, 700, 9, 12, 2, 2, 700, 143, 3, 2, 2, 2, 701, 702, 8, 73, 1, 2, 702, 703, 5, 140, 71, 2, 703, 709, 3, 2, 2, 2, 704, 705, 12, 3, 2, 2, 705, 706, 7, 7, 2, 2, 706, 708, 5, 170, 86, 2, 707, 704, 3, 2, 2, 2, 708, 711, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 145, 3, 2, 2, 2, 711, 709, 3, 2, 2, 2, 712, 713, 8, 74, 1, 2, 713, 714, 5, 144, 73, 2, 714, 720, 3, 2, 2, 2, 715, 716, 12, 3, 2, 2, 716, 717, 7, 33, 2, 2, 717, 719, 5, 170, 86, 2, 718, 715, 3, 2, 2, 2, 719, 722, 3, 2, 2, 2, 720, 718, 3, 2, 2, 2, 720, 721, 3, 2, 2, 2, 721, 147, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 723, 724, 8, 75, 1, 2, 724, 725, 5, 146, 74, 2, 725, 731, 3, 2, 2, 2, 726, 727, 12, 3, 2, 2, 727, 728, 9, 13, 2, 2, 728, 730, 5, 148, 75, 4, 729, 726, 3, 2, 2, 2, 730, 733, 3, 2, 2, 2, 731, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 149, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 734, 735, 8, 76, 1, 2, 735, 736, 5, 148, 75, 2, 736, 742, 3, 2, 2, 2, 737, 738, 12, 3, 2, 2, 738, 739, 9, 14, 2, 2, 739, 741, 5, 148, 75, 2, 740, 737, 3, 2, 2, 2, 741, 744, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 742, 743, 3, 2, 2, 2, 743, 151, 3, 2, 2, 2, 744, 742, 3, 2, 2, 2, 745, 746, 8, 77, 1, 2, 746, 747, 5, 150, 76, 2, 747, 753, 3, 2, 2, 2, 748, 749, 12, 3, 2, 2, 749, 750, 7, 72, 2, 2, 750, 752, 5, 150, 76, 2, 751, 748, 3, 2, 2, 2, 752, 755, 3, 2, 2, 2, 753, 751, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 153, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 756, 757, 8, 78, 1, 2, 757, 758, 5, 152, 77, 2, 758, 764, 3, 2, 2, 2, 759, 760, 12, 3, 2, 2, 760, 761, 7, 74, 2, 2, 761, 763, 5, 152, 77, 2, 762, 759, 3, 2, 2, 2, 763, 766, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 155, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 767, 768, 8, 79, 1, 2, 768, 769, 5, 154, 78, 2, 769, 775, 3, 2, 2, 2, 770, 771, 12, 3, 2, 2, 771, 772, 7, 73, 2, 2, 772, 774, 5, 154, 78, 2, 773, 770, 3, 2, 2, 2, 774, 777, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 157, 3, 2, 2, 2, 777, 775, 3, 2, 2, 2, 778, 779, 8, 80, 1, 2, 779, 780, 5, 156, 79, 2, 780, 786, 3, 2, 2, 2, 781, 782, 12, 3, 2, 2, 782, 783, 7, 57, 2, 2, 783, 785, 5, 156, 79, 2, 784, 781, 3, 2, 2, 2, 785, 788, 3, 2, 2, 2, 786, 784, 3, 2, 2, 2, 786, 787, 3, 2, 2, 2, 787, 159, 3, 2, 2, 2, 788, 786, 3, 2, 2, 2, 789, 790, 8, 81, 1, 2, 790, 791, 5, 158, 80, 2, 791, 797, 3, 2, 2, 2, 792, 793, 12, 3, 2, 2, 793, 794, 7, 58, 2, 2, 794, 796, 5, 158, 80, 2, 795, 792, 3, 2, 2, 2, 796, 799, 3, 2, 2, 2, 797, 795, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 161, 3, 2, 2, 2, 799, 797, 3, 2, 2, 2, 800, 808, 5, 160, 81, 2, 801, 802, 5, 160, 81, 2, 802, 803, 7, 40, 2, 2, 803, 804, 5, 162, 82, 2, 804, 805, 7, 41, 2, 2, 805, 806, 5, 162, 82, 2, 806, 808, 3, 2, 2, 2, 807, 800, 3, 2, 2, 2, 807, 801, 3, 2, 2, 2, 808, 163, 3, 2, 2, 2, 809, 815, 5, 162, 82, 2, 810, 811, 5, 108, 55, 2, 811, 812, 5, 166, 84, 2, 812, 813, 5, 164, 83, 2, 813, 815, 3, 2, 2, 2, 814, 809, 3, 2, 2, 2, 814, 810, 3, 2, 2, 2, 815, 165, 3, 2, 2, 2, 816, 817, 9, 15, 2, 2, 817, 167, 3, 2, 2, 2, 818, 823, 5, 164, 83, 2, 819, 820, 7, 38, 2, 2, 820, 822, 5, 164, 83, 2, 821, 819, 3, 2, 2, 2, 822, 825, 3, 2, 2, 2, 823, 821, 3, 2, 2, 2, 823, 824, 3, 2, 2, 2, 824, 169, 3, 2, 2, 2, 825, 823, 3, 2, 2, 2, 826, 830, 5, 172, 87, 2, 827, 830, 5, 174, 88, 2, 828, 830, 5, 176, 89, 2, 829, 826, 3, 2, 2, 2, 829, 827, 3, 2, 2, 2, 829, 828, 3, 2, 2, 2, 830, 171, 3, 2, 2, 2, 831, 832, 5, 178, 90, 2, 832, 173, 3, 2, 2, 2, 833, 834, 5, 178, 90, 2, 834, 843, 7, 68, 2, 2, 835, 840, 5, 170, 86, 2, 836, 837, 7, 38, 2, 2, 837, 839, 5, 170, 86, 2, 838, 836, 3, 2, 2, 2, 839, 842, 3, 2, 2, 2, 840, 838, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 844, 3, 2, 2, 2, 842, 840, 3, 2, 2, 2, 843, 835, 3, 2, 2, 2, 843, 844, 3, 2, 2, 2, 844, 845, 3, 2, 2, 2, 845, 846, 7, 70, 2, 2, 846, 175, 3, 2, 2, 2, 847, 848, 7, 34, 2, 2, 848, 849, 7, 42, 2, 2, 849, 850, 5, 178, 90, 2, 850, 851, 7, 43, 2, 2, 851, 177, 3, 2, 2, 2, 852, 853, 9, 16, 2, 2, 853, 179, 3, 2, 2, 2, 81, 181, 188, 195, 200, 208, 220, 232, 238, 245, 258, 265, 275, 287, 289, 297, 306, 312, 317, 328, 333, 340, 344, 353, 362, 372, 385, 390, 396, 400, 406, 412, 436, 450, 455, 463, 479, 487, 495, 499, 504, 507, 512, 515, 525, 528, 531, 541, 544, 547, 563, 572, 577, 594, 598, 600, 608, 622, 628, 635, 646, 663, 673, 684, 696, 709, 720, 731, 742, 753, 764, 775, 786, 797, 807, 814, 823, 829, 840, 843] \ No newline at end of file diff --git a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts index aa8ae471e..17c6e8944 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/KipperParser.ts @@ -1492,26 +1492,58 @@ export class KipperParser extends KipperParserBase { let _localctx: CompoundStatementContext = new CompoundStatementContext(this._ctx, this.state); this.enterRule(_localctx, 50, KipperParser.RULE_compoundStatement); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 328; - if (!this.notInsideExpressionStatement()) { - throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); - } - this.state = 329; - this.match(KipperParser.LeftBrace); - this.state = 331; - this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { - case 1: - { - this.state = 330; - this.blockItemList(); + this.state = 342; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 328; + if (!this.notInsideExpressionStatement()) { + throw this.createFailedPredicateException("this.notInsideExpressionStatement()"); } - break; - } - this.state = 333; - this.match(KipperParser.RightBrace); + this.state = 329; + this.match(KipperParser.LeftBrace); + this.state = 331; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 19, this._ctx)) { + case 1: + { + this.state = 330; + this.blockItemList(); + } + break; + } + this.state = 333; + this.match(KipperParser.RightBrace); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 334; + if (!this.insideLambda()) { + throw this.createFailedPredicateException("this.insideLambda()"); + } + this.state = 335; + this.match(KipperParser.LeftBrace); + this.exitLambda(); + this.state = 338; + this._errHandler.sync(this); + switch (this.interpreter.adaptivePredict(this._input, 20, this._ctx)) { + case 1: + { + this.state = 337; + this.blockItemList(); + } + break; + } + this.enterLambda(); + this.state = 341; + this.match(KipperParser.RightBrace); + } + break; } } catch (re) { if (re instanceof RecognitionException) { @@ -1534,9 +1566,9 @@ export class KipperParser extends KipperParserBase { this.enterOuterAlt(_localctx, 1); { this.enterExpressionStatement(); - this.state = 336; + this.state = 345; this.expression(); - this.state = 337; + this.state = 346; this.match(KipperParser.SemiColon); this.exitExpressionStatement(); } @@ -1558,20 +1590,20 @@ export class KipperParser extends KipperParserBase { let _localctx: SelectionStatementContext = new SelectionStatementContext(this._ctx, this.state); this.enterRule(_localctx, 54, KipperParser.RULE_selectionStatement); try { - this.state = 342; + this.state = 351; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.If: this.enterOuterAlt(_localctx, 1); { - this.state = 340; + this.state = 349; this.ifStatement(); } break; case KipperParser.Switch: this.enterOuterAlt(_localctx, 2); { - this.state = 341; + this.state = 350; this.switchStatement(); } break; @@ -1598,24 +1630,24 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 344; + this.state = 353; this.match(KipperParser.If); - this.state = 345; + this.state = 354; this.match(KipperParser.LeftParen); - this.state = 346; + this.state = 355; this.expression(); - this.state = 347; + this.state = 356; this.match(KipperParser.RightParen); - this.state = 348; + this.state = 357; this.statement(); - this.state = 351; + this.state = 360; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 21, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 23, this._ctx)) { case 1: { - this.state = 349; + this.state = 358; this.match(KipperParser.Else); - this.state = 350; + this.state = 359; this.statement(); } break; @@ -1642,31 +1674,31 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 353; + this.state = 362; this.match(KipperParser.Switch); - this.state = 354; + this.state = 363; this.match(KipperParser.LeftParen); - this.state = 355; + this.state = 364; this.expression(); - this.state = 356; + this.state = 365; this.match(KipperParser.RightParen); - this.state = 357; + this.state = 366; this.match(KipperParser.LeftBrace); - this.state = 361; + this.state = 370; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Case || _la === KipperParser.Default) { { { - this.state = 358; + this.state = 367; this.switchLabeledStatement(); } } - this.state = 363; + this.state = 372; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 364; + this.state = 373; this.match(KipperParser.RightBrace); } } catch (re) { @@ -1687,30 +1719,30 @@ export class KipperParser extends KipperParserBase { let _localctx: SwitchLabeledStatementContext = new SwitchLabeledStatementContext(this._ctx, this.state); this.enterRule(_localctx, 60, KipperParser.RULE_switchLabeledStatement); try { - this.state = 374; + this.state = 383; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Case: this.enterOuterAlt(_localctx, 1); { - this.state = 366; + this.state = 375; this.match(KipperParser.Case); - this.state = 367; + this.state = 376; this.expression(); - this.state = 368; + this.state = 377; this.match(KipperParser.Colon); - this.state = 369; + this.state = 378; this.statement(); } break; case KipperParser.Default: this.enterOuterAlt(_localctx, 2); { - this.state = 371; + this.state = 380; this.match(KipperParser.Default); - this.state = 372; + this.state = 381; this.match(KipperParser.Colon); - this.state = 373; + this.state = 382; this.statement(); } break; @@ -1735,27 +1767,27 @@ export class KipperParser extends KipperParserBase { let _localctx: IterationStatementContext = new IterationStatementContext(this._ctx, this.state); this.enterRule(_localctx, 62, KipperParser.RULE_iterationStatement); try { - this.state = 379; + this.state = 388; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.For: this.enterOuterAlt(_localctx, 1); { - this.state = 376; + this.state = 385; this.forLoopIterationStatement(); } break; case KipperParser.While: this.enterOuterAlt(_localctx, 2); { - this.state = 377; + this.state = 386; this.whileLoopIterationStatement(); } break; case KipperParser.Do: this.enterOuterAlt(_localctx, 3); { - this.state = 378; + this.state = 387; this.doWhileLoopIterationStatement(); } break; @@ -1783,11 +1815,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 381; + this.state = 390; this.match(KipperParser.For); - this.state = 382; + this.state = 391; this.match(KipperParser.LeftParen); - this.state = 389; + this.state = 398; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1828,13 +1860,13 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 385; + this.state = 394; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Const: case KipperParser.Var: { - this.state = 383; + this.state = 392; this.variableDeclaration(); } break; @@ -1863,7 +1895,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringSingleQuoteStart: case KipperParser.FStringDoubleQuoteStart: { - this.state = 384; + this.state = 393; this.expression(); } break; @@ -1874,9 +1906,9 @@ export class KipperParser extends KipperParserBase { } } - this.state = 391; + this.state = 400; this.match(KipperParser.SemiColon); - this.state = 395; + this.state = 404; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1912,15 +1944,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 392; + this.state = 401; this.expression(); _localctx._forCondition = true; } } - this.state = 397; + this.state = 406; this.match(KipperParser.SemiColon); - this.state = 401; + this.state = 410; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -1956,15 +1988,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 398; + this.state = 407; this.expression(); _localctx._forIterationExp = true; } } - this.state = 403; + this.state = 412; this.match(KipperParser.RightParen); - this.state = 404; + this.state = 413; this.statement(); } } catch (re) { @@ -1987,15 +2019,15 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 406; + this.state = 415; this.match(KipperParser.While); - this.state = 407; + this.state = 416; this.match(KipperParser.LeftParen); - this.state = 408; + this.state = 417; this.expression(); - this.state = 409; + this.state = 418; this.match(KipperParser.RightParen); - this.state = 410; + this.state = 419; this.statement(); } } catch (re) { @@ -2021,19 +2053,19 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 412; + this.state = 421; this.match(KipperParser.Do); - this.state = 413; + this.state = 422; this.statement(); - this.state = 414; + this.state = 423; this.match(KipperParser.While); - this.state = 415; + this.state = 424; this.match(KipperParser.LeftParen); - this.state = 416; + this.state = 425; this.expression(); - this.state = 417; + this.state = 426; this.match(KipperParser.RightParen); - this.state = 418; + this.state = 427; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2057,7 +2089,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 420; + this.state = 429; _la = this._input.LA(1); if (!(_la === KipperParser.Break || _la === KipperParser.Continue)) { this._errHandler.recoverInline(this); @@ -2069,7 +2101,7 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 421; + this.state = 430; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2093,9 +2125,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 423; + this.state = 432; this.match(KipperParser.Return); - this.state = 425; + this.state = 434; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2131,12 +2163,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 424; + this.state = 433; this.expression(); } } - this.state = 427; + this.state = 436; this.match(KipperParser.SemiColon); } } catch (re) { @@ -2157,13 +2189,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 74, KipperParser.RULE_primaryExpression); try { - this.state = 439; + this.state = 448; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 30, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 429; + this.state = 438; this.tangledPrimaryExpression(); } break; @@ -2171,7 +2203,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 430; + this.state = 439; this.lambdaPrimaryExpression(); } break; @@ -2179,7 +2211,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 431; + this.state = 440; this.arrayPrimaryExpression(); } break; @@ -2187,7 +2219,7 @@ export class KipperParser extends KipperParserBase { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 432; + this.state = 441; this.objectPrimaryExpression(); } break; @@ -2195,7 +2227,7 @@ export class KipperParser extends KipperParserBase { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 433; + this.state = 442; this.boolPrimaryExpression(); } break; @@ -2203,7 +2235,7 @@ export class KipperParser extends KipperParserBase { case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 434; + this.state = 443; this.identifierPrimaryExpression(); } break; @@ -2211,7 +2243,7 @@ export class KipperParser extends KipperParserBase { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 435; + this.state = 444; this.stringPrimaryExpression(); } break; @@ -2219,7 +2251,7 @@ export class KipperParser extends KipperParserBase { case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 436; + this.state = 445; this.fStringPrimaryExpression(); } break; @@ -2227,7 +2259,7 @@ export class KipperParser extends KipperParserBase { case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 437; + this.state = 446; this.numberPrimaryExpression(); } break; @@ -2235,7 +2267,7 @@ export class KipperParser extends KipperParserBase { case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 438; + this.state = 447; this.voidOrNullOrUndefinedPrimaryExpression(); } break; @@ -2261,43 +2293,45 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 441; + this.enterLambda(); + this.state = 451; this.match(KipperParser.LeftParen); - this.state = 443; + this.state = 453; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Identifier) { { - this.state = 442; + this.state = 452; this.parameterList(); } } - this.state = 445; + this.state = 455; this.match(KipperParser.RightParen); - this.state = 446; + this.state = 456; this.match(KipperParser.Colon); - this.state = 447; + this.state = 457; this.typeSpecifierExpression(); - this.state = 448; + this.state = 458; this.match(KipperParser.RetIndicator); - this.state = 451; + this.state = 461; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 32, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 34, this._ctx)) { case 1: { - this.state = 449; + this.state = 459; this.expression(); } break; case 2: { - this.state = 450; + this.state = 460; this.compoundStatement(); } break; } + this.exitLambda(); } } catch (re) { if (re instanceof RecognitionException) { @@ -2319,11 +2353,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 453; + this.state = 465; this.match(KipperParser.LeftParen); - this.state = 454; + this.state = 466; this.expression(); - this.state = 455; + this.state = 467; this.match(KipperParser.RightParen); } } catch (re) { @@ -2347,7 +2381,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 457; + this.state = 469; _la = this._input.LA(1); if (!(_la === KipperParser.True || _la === KipperParser.False)) { this._errHandler.recoverInline(this); @@ -2380,7 +2414,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 459; + this.state = 471; this.identifier(); } } catch (re) { @@ -2403,7 +2437,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 461; + this.state = 473; this.match(KipperParser.Identifier); } } catch (re) { @@ -2427,13 +2461,13 @@ export class KipperParser extends KipperParserBase { ); this.enterRule(_localctx, 86, KipperParser.RULE_identifierOrStringPrimaryExpression); try { - this.state = 465; + this.state = 477; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.Identifier: this.enterOuterAlt(_localctx, 1); { - this.state = 463; + this.state = 475; this.identifier(); } break; @@ -2441,7 +2475,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.DoubleQuoteStringLiteral: this.enterOuterAlt(_localctx, 2); { - this.state = 464; + this.state = 476; this.stringPrimaryExpression(); } break; @@ -2469,7 +2503,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 467; + this.state = 479; _la = this._input.LA(1); if (!(_la === KipperParser.SingleQuoteStringLiteral || _la === KipperParser.DoubleQuoteStringLiteral)) { this._errHandler.recoverInline(this); @@ -2501,52 +2535,52 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 90, KipperParser.RULE_fStringPrimaryExpression); let _la: number; try { - this.state = 485; + this.state = 497; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 469; + this.state = 481; this.match(KipperParser.FStringSingleQuoteStart); - this.state = 473; + this.state = 485; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringSingleQuoteAtom) { { { - this.state = 470; + this.state = 482; this.fStringSingleQuoteAtom(); } } - this.state = 475; + this.state = 487; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 476; + this.state = 488; this.match(KipperParser.FStringSingleQuoteEnd); } break; case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 2); { - this.state = 477; + this.state = 489; this.match(KipperParser.FStringDoubleQuoteStart); - this.state = 481; + this.state = 493; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.FStringExpStart || _la === KipperParser.FStringDoubleQuoteAtom) { { { - this.state = 478; + this.state = 490; this.fStringDoubleQuoteAtom(); } } - this.state = 483; + this.state = 495; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 484; + this.state = 496; this.match(KipperParser.FStringDoubleQuoteEnd); } break; @@ -2572,22 +2606,22 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 92, KipperParser.RULE_fStringSingleQuoteAtom); let _la: number; try { - this.state = 493; + this.state = 505; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringSingleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 487; + this.state = 499; this.match(KipperParser.FStringSingleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 488; + this.state = 500; this.match(KipperParser.FStringExpStart); - this.state = 490; + this.state = 502; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2623,12 +2657,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 489; + this.state = 501; this.expression(); } } - this.state = 492; + this.state = 504; this.match(KipperParser.FStringExpEnd); } break; @@ -2654,22 +2688,22 @@ export class KipperParser extends KipperParserBase { this.enterRule(_localctx, 94, KipperParser.RULE_fStringDoubleQuoteAtom); let _la: number; try { - this.state = 501; + this.state = 513; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.FStringDoubleQuoteAtom: this.enterOuterAlt(_localctx, 1); { - this.state = 495; + this.state = 507; this.match(KipperParser.FStringDoubleQuoteAtom); } break; case KipperParser.FStringExpStart: this.enterOuterAlt(_localctx, 2); { - this.state = 496; + this.state = 508; this.match(KipperParser.FStringExpStart); - this.state = 498; + this.state = 510; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2705,12 +2739,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 497; + this.state = 509; this.expression(); } } - this.state = 500; + this.state = 512; this.match(KipperParser.FStringExpEnd); } break; @@ -2738,7 +2772,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 503; + this.state = 515; _la = this._input.LA(1); if (!(_la === KipperParser.IntegerConstant || _la === KipperParser.FloatingConstant)) { this._errHandler.recoverInline(this); @@ -2773,9 +2807,9 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 505; + this.state = 517; this.match(KipperParser.LeftBracket); - this.state = 514; + this.state = 526; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2811,40 +2845,40 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 506; + this.state = 518; this.expression(); - this.state = 511; + this.state = 523; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 507; + this.state = 519; this.match(KipperParser.Comma); - this.state = 508; + this.state = 520; this.expression(); } } } - this.state = 513; + this.state = 525; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 41, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 43, this._ctx); } } } - this.state = 517; + this.state = 529; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 516; + this.state = 528; this.match(KipperParser.Comma); } } - this.state = 519; + this.state = 531; this.match(KipperParser.RightBracket); } } catch (re) { @@ -2869,9 +2903,9 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 521; + this.state = 533; this.match(KipperParser.LeftBrace); - this.state = 530; + this.state = 542; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -2883,40 +2917,40 @@ export class KipperParser extends KipperParserBase { 0 ) { { - this.state = 522; + this.state = 534; this.objectProperty(); - this.state = 527; + this.state = 539; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 523; + this.state = 535; this.match(KipperParser.Comma); - this.state = 524; + this.state = 536; this.objectProperty(); } } } - this.state = 529; + this.state = 541; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 44, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 46, this._ctx); } } } - this.state = 533; + this.state = 545; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === KipperParser.Comma) { { - this.state = 532; + this.state = 544; this.match(KipperParser.Comma); } } - this.state = 535; + this.state = 547; this.match(KipperParser.RightBrace); } } catch (re) { @@ -2939,11 +2973,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 537; + this.state = 549; this.identifierOrStringPrimaryExpression(); - this.state = 538; + this.state = 550; this.match(KipperParser.Colon); - this.state = 539; + this.state = 551; this.expression(); } } catch (re) { @@ -2970,7 +3004,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 541; + this.state = 553; _la = this._input.LA(1); if ( !( @@ -3025,7 +3059,7 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 563; + this.state = 575; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.True: @@ -3048,7 +3082,7 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 544; + this.state = 556; this.primaryExpression(); } break; @@ -3057,13 +3091,13 @@ export class KipperParser extends KipperParserBase { _localctx = new ExplicitCallFunctionCallExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 545; + this.state = 557; this.match(KipperParser.CallFunc); - this.state = 546; + this.state = 558; this.computedPrimaryExpression(0); - this.state = 547; + this.state = 559; this.match(KipperParser.LeftParen); - this.state = 549; + this.state = 561; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3099,12 +3133,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 548; + this.state = 560; this.argumentExpressionList(); } } - this.state = 551; + this.state = 563; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3114,13 +3148,13 @@ export class KipperParser extends KipperParserBase { _localctx = new NewInstantiationExpressionContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; - this.state = 554; + this.state = 566; this.match(KipperParser.New); - this.state = 555; + this.state = 567; this.typeSpecifierExpression(); - this.state = 556; + this.state = 568; this.match(KipperParser.LeftParen); - this.state = 558; + this.state = 570; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3156,12 +3190,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 557; + this.state = 569; this.argumentExpressionList(); } } - this.state = 560; + this.state = 572; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_newInstantiationExpression; } @@ -3170,9 +3204,9 @@ export class KipperParser extends KipperParserBase { throw new NoViableAltException(this); } this._ctx._stop = this._input.tryLT(-1); - this.state = 586; + this.state = 598; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 54, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3180,20 +3214,20 @@ export class KipperParser extends KipperParserBase { } _prevctx = _localctx; { - this.state = 584; + this.state = 596; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 51, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 53, this._ctx)) { case 1: { _localctx = new DotNotationMemberAccessExpressionContext( new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 565; + this.state = 577; if (!this.precpred(this._ctx, 6)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 566; + this.state = 578; this.dotNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3205,11 +3239,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 569; + this.state = 581; if (!this.precpred(this._ctx, 5)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 570; + this.state = 582; this.bracketNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3221,11 +3255,11 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 573; + this.state = 585; if (!this.precpred(this._ctx, 4)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 574; + this.state = 586; this.sliceNotation(); _localctx._labelASTKind = ParseRuleKindMapping.RULE_memberAccessExpression; } @@ -3237,13 +3271,13 @@ export class KipperParser extends KipperParserBase { new ComputedPrimaryExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_computedPrimaryExpression); - this.state = 577; + this.state = 589; if (!this.precpred(this._ctx, 3)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 578; + this.state = 590; this.match(KipperParser.LeftParen); - this.state = 580; + this.state = 592; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3279,12 +3313,12 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 579; + this.state = 591; this.argumentExpressionList(); } } - this.state = 582; + this.state = 594; this.match(KipperParser.RightParen); _localctx._labelASTKind = ParseRuleKindMapping.RULE_functionCallExpression; } @@ -3292,9 +3326,9 @@ export class KipperParser extends KipperParserBase { } } } - this.state = 588; + this.state = 600; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 52, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 54, this._ctx); } } } catch (re) { @@ -3318,21 +3352,21 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 589; + this.state = 601; this.assignmentExpression(); - this.state = 594; + this.state = 606; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 590; + this.state = 602; this.match(KipperParser.Comma); - this.state = 591; + this.state = 603; this.assignmentExpression(); } } - this.state = 596; + this.state = 608; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -3357,9 +3391,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 597; + this.state = 609; this.match(KipperParser.Dot); - this.state = 598; + this.state = 610; this.identifier(); } } catch (re) { @@ -3382,11 +3416,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 600; + this.state = 612; this.match(KipperParser.LeftBracket); - this.state = 601; + this.state = 613; this.expression(); - this.state = 602; + this.state = 614; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3410,9 +3444,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 604; + this.state = 616; this.match(KipperParser.LeftBracket); - this.state = 608; + this.state = 620; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3448,15 +3482,15 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 605; + this.state = 617; this.expression(); _localctx.sliceStart = true; } } - this.state = 610; + this.state = 622; this.match(KipperParser.Colon); - this.state = 614; + this.state = 626; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -3492,13 +3526,13 @@ export class KipperParser extends KipperParserBase { 0) ) { { - this.state = 611; + this.state = 623; this.expression(); _localctx.sliceEnd = true; } } - this.state = 616; + this.state = 628; this.match(KipperParser.RightBracket); } } catch (re) { @@ -3519,13 +3553,13 @@ export class KipperParser extends KipperParserBase { let _localctx: PostfixExpressionContext = new PostfixExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 116, KipperParser.RULE_postfixExpression); try { - this.state = 621; + this.state = 633; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 56, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 618; + this.state = 630; this.computedPrimaryExpression(0); } break; @@ -3533,7 +3567,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 619; + this.state = 631; this.incrementOrDecrementPostfixExpression(); } break; @@ -3541,7 +3575,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 620; + this.state = 632; this.typeofExpression(); } break; @@ -3569,9 +3603,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 623; + this.state = 635; this.computedPrimaryExpression(0); - this.state = 624; + this.state = 636; this.incrementOrDecrementOperator(); } } catch (re) { @@ -3594,9 +3628,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 626; + this.state = 638; this.match(KipperParser.Typeof); - this.state = 627; + this.state = 639; this.assignmentExpression(); } } catch (re) { @@ -3617,7 +3651,7 @@ export class KipperParser extends KipperParserBase { let _localctx: UnaryExpressionContext = new UnaryExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 122, KipperParser.RULE_unaryExpression); try { - this.state = 632; + this.state = 644; this._errHandler.sync(this); switch (this._input.LA(1)) { case KipperParser.CallFunc: @@ -3640,7 +3674,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.FStringDoubleQuoteStart: this.enterOuterAlt(_localctx, 1); { - this.state = 629; + this.state = 641; this.postfixExpression(); } break; @@ -3648,7 +3682,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.MinusMinus: this.enterOuterAlt(_localctx, 2); { - this.state = 630; + this.state = 642; this.incrementOrDecrementUnaryExpression(); } break; @@ -3658,7 +3692,7 @@ export class KipperParser extends KipperParserBase { case KipperParser.BitwiseNot: this.enterOuterAlt(_localctx, 3); { - this.state = 631; + this.state = 643; this.operatorModifiedUnaryExpression(); } break; @@ -3688,9 +3722,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 634; + this.state = 646; this.incrementOrDecrementOperator(); - this.state = 635; + this.state = 647; this.postfixExpression(); } } catch (re) { @@ -3716,9 +3750,9 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 637; + this.state = 649; this.unaryOperator(); - this.state = 638; + this.state = 650; this.postfixExpression(); } } catch (re) { @@ -3742,7 +3776,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 640; + this.state = 652; _la = this._input.LA(1); if (!(_la === KipperParser.PlusPlus || _la === KipperParser.MinusMinus)) { this._errHandler.recoverInline(this); @@ -3776,7 +3810,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 642; + this.state = 654; _la = this._input.LA(1); if ( !( @@ -3817,14 +3851,14 @@ export class KipperParser extends KipperParserBase { let _localctx: CastOrConvertExpressionContext = new CastOrConvertExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 132, KipperParser.RULE_castOrConvertExpression); try { - this.state = 649; + this.state = 661; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 58, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 60, this._ctx)) { case 1: _localctx = new PassOnCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 644; + this.state = 656; this.unaryExpression(); } break; @@ -3833,11 +3867,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualCastOrConvertExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 645; + this.state = 657; this.unaryExpression(); - this.state = 646; + this.state = 658; this.match(KipperParser.As); - this.state = 647; + this.state = 659; this.typeSpecifierExpression(); } break; @@ -3880,13 +3914,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 652; + this.state = 664; this.castOrConvertExpression(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 659; + this.state = 671; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3899,11 +3933,11 @@ export class KipperParser extends KipperParserBase { new MultiplicativeExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_multiplicativeExpression); - this.state = 654; + this.state = 666; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 655; + this.state = 667; _la = this._input.LA(1); if ( !( @@ -3925,14 +3959,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 656; + this.state = 668; this.castOrConvertExpression(); } } } - this.state = 661; + this.state = 673; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 59, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); } } } catch (re) { @@ -3973,13 +4007,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 663; + this.state = 675; this.multiplicativeExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 670; + this.state = 682; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -3992,11 +4026,11 @@ export class KipperParser extends KipperParserBase { new AdditiveExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_additiveExpression); - this.state = 665; + this.state = 677; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 666; + this.state = 678; _la = this._input.LA(1); if (!(_la === KipperParser.Plus || _la === KipperParser.Minus)) { this._errHandler.recoverInline(this); @@ -4008,14 +4042,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 667; + this.state = 679; this.multiplicativeExpression(0); } } } - this.state = 672; + this.state = 684; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 60, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); } } } catch (re) { @@ -4055,13 +4089,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 674; + this.state = 686; this.additiveExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 682; + this.state = 694; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4074,20 +4108,20 @@ export class KipperParser extends KipperParserBase { new BitwiseShiftExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseShiftExpression); - this.state = 676; + this.state = 688; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 677; + this.state = 689; this.bitwiseShiftOperators(); - this.state = 678; + this.state = 690; this.bitwiseAndExpression(0); } } } - this.state = 684; + this.state = 696; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 61, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); } } } catch (re) { @@ -4111,7 +4145,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 685; + this.state = 697; _la = this._input.LA(1); if ( !( @@ -4170,13 +4204,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 688; + this.state = 700; this.bitwiseShiftExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 695; + this.state = 707; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4189,20 +4223,20 @@ export class KipperParser extends KipperParserBase { new InstanceOfExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_instanceOfExpression); - this.state = 690; + this.state = 702; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 691; + this.state = 703; this.match(KipperParser.InstanceOf); - this.state = 692; + this.state = 704; this.typeSpecifierExpression(); } } } - this.state = 697; + this.state = 709; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 62, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); } } } catch (re) { @@ -4242,13 +4276,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 699; + this.state = 711; this.instanceOfExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 706; + this.state = 718; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4259,20 +4293,20 @@ export class KipperParser extends KipperParserBase { { _localctx = new ActualMatchesExpressionContext(new MatchesExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_matchesExpression); - this.state = 701; + this.state = 713; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 702; + this.state = 714; this.match(KipperParser.Matches); - this.state = 703; + this.state = 715; this.typeSpecifierExpression(); } } } - this.state = 708; + this.state = 720; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 63, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); } } } catch (re) { @@ -4313,13 +4347,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 710; + this.state = 722; this.matchesExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 717; + this.state = 729; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4332,11 +4366,11 @@ export class KipperParser extends KipperParserBase { new RelationalExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_relationalExpression); - this.state = 712; + this.state = 724; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 713; + this.state = 725; _la = this._input.LA(1); if ( !( @@ -4358,14 +4392,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 714; + this.state = 726; this.relationalExpression(2); } } } - this.state = 719; + this.state = 731; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 64, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); } } } catch (re) { @@ -4406,13 +4440,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 721; + this.state = 733; this.relationalExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 728; + this.state = 740; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4425,11 +4459,11 @@ export class KipperParser extends KipperParserBase { new EqualityExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_equalityExpression); - this.state = 723; + this.state = 735; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 724; + this.state = 736; _la = this._input.LA(1); if (!(_la === KipperParser.Equal || _la === KipperParser.NotEqual)) { this._errHandler.recoverInline(this); @@ -4441,14 +4475,14 @@ export class KipperParser extends KipperParserBase { this._errHandler.reportMatch(this); this.consume(); } - this.state = 725; + this.state = 737; this.relationalExpression(0); } } } - this.state = 730; + this.state = 742; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 65, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); } } } catch (re) { @@ -4488,13 +4522,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 732; + this.state = 744; this.equalityExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 739; + this.state = 751; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4507,20 +4541,20 @@ export class KipperParser extends KipperParserBase { new BitwiseAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseAndExpression); - this.state = 734; + this.state = 746; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 735; + this.state = 747; this.match(KipperParser.BitwiseAnd); - this.state = 736; + this.state = 748; this.equalityExpression(0); } } } - this.state = 741; + this.state = 753; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 66, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); } } } catch (re) { @@ -4560,13 +4594,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 743; + this.state = 755; this.bitwiseAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 750; + this.state = 762; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4579,20 +4613,20 @@ export class KipperParser extends KipperParserBase { new BitwiseXorExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseXorExpression); - this.state = 745; + this.state = 757; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 746; + this.state = 758; this.match(KipperParser.BitwiseXor); - this.state = 747; + this.state = 759; this.bitwiseAndExpression(0); } } } - this.state = 752; + this.state = 764; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 67, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); } } } catch (re) { @@ -4632,13 +4666,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 754; + this.state = 766; this.bitwiseXorExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 761; + this.state = 773; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4651,20 +4685,20 @@ export class KipperParser extends KipperParserBase { new BitwiseOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_bitwiseOrExpression); - this.state = 756; + this.state = 768; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 757; + this.state = 769; this.match(KipperParser.BitwiseOr); - this.state = 758; + this.state = 770; this.bitwiseXorExpression(0); } } } - this.state = 763; + this.state = 775; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 68, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); } } } catch (re) { @@ -4704,13 +4738,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 765; + this.state = 777; this.bitwiseOrExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 772; + this.state = 784; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4723,20 +4757,20 @@ export class KipperParser extends KipperParserBase { new LogicalAndExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalAndExpression); - this.state = 767; + this.state = 779; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 768; + this.state = 780; this.match(KipperParser.AndAnd); - this.state = 769; + this.state = 781; this.bitwiseOrExpression(0); } } } - this.state = 774; + this.state = 786; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 69, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 71, this._ctx); } } } catch (re) { @@ -4776,13 +4810,13 @@ export class KipperParser extends KipperParserBase { this._ctx = _localctx; _prevctx = _localctx; - this.state = 776; + this.state = 788; this.logicalAndExpression(0); } this._ctx._stop = this._input.tryLT(-1); - this.state = 783; + this.state = 795; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -4795,20 +4829,20 @@ export class KipperParser extends KipperParserBase { new LogicalOrExpressionContext(_parentctx, _parentState), ); this.pushNewRecursionContext(_localctx, _startState, KipperParser.RULE_logicalOrExpression); - this.state = 778; + this.state = 790; if (!this.precpred(this._ctx, 1)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 779; + this.state = 791; this.match(KipperParser.OrOr); - this.state = 780; + this.state = 792; this.logicalAndExpression(0); } } } - this.state = 785; + this.state = 797; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 70, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 72, this._ctx); } } } catch (re) { @@ -4829,14 +4863,14 @@ export class KipperParser extends KipperParserBase { let _localctx: ConditionalExpressionContext = new ConditionalExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 160, KipperParser.RULE_conditionalExpression); try { - this.state = 793; + this.state = 805; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 71, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 73, this._ctx)) { case 1: _localctx = new PassOnConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 786; + this.state = 798; this.logicalOrExpression(0); } break; @@ -4845,15 +4879,15 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualConditionalExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 787; + this.state = 799; this.logicalOrExpression(0); - this.state = 788; + this.state = 800; this.match(KipperParser.QuestionMark); - this.state = 789; + this.state = 801; this.conditionalExpression(); - this.state = 790; + this.state = 802; this.match(KipperParser.Colon); - this.state = 791; + this.state = 803; this.conditionalExpression(); } break; @@ -4876,14 +4910,14 @@ export class KipperParser extends KipperParserBase { let _localctx: AssignmentExpressionContext = new AssignmentExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 162, KipperParser.RULE_assignmentExpression); try { - this.state = 800; + this.state = 812; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 72, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 74, this._ctx)) { case 1: _localctx = new PassOnAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 795; + this.state = 807; this.conditionalExpression(); } break; @@ -4892,11 +4926,11 @@ export class KipperParser extends KipperParserBase { _localctx = new ActualAssignmentExpressionContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 796; + this.state = 808; this.computedPrimaryExpression(0); - this.state = 797; + this.state = 809; this.assignmentOperator(); - this.state = 798; + this.state = 810; this.assignmentExpression(); } break; @@ -4922,7 +4956,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 802; + this.state = 814; _la = this._input.LA(1); if ( !( @@ -4968,25 +5002,25 @@ export class KipperParser extends KipperParserBase { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 804; + this.state = 816; this.assignmentExpression(); - this.state = 809; + this.state = 821; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 73, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 75, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 805; + this.state = 817; this.match(KipperParser.Comma); - this.state = 806; + this.state = 818; this.assignmentExpression(); } } } - this.state = 811; + this.state = 823; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 73, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 75, this._ctx); } } } catch (re) { @@ -5007,13 +5041,13 @@ export class KipperParser extends KipperParserBase { let _localctx: TypeSpecifierExpressionContext = new TypeSpecifierExpressionContext(this._ctx, this.state); this.enterRule(_localctx, 168, KipperParser.RULE_typeSpecifierExpression); try { - this.state = 815; + this.state = 827; this._errHandler.sync(this); - switch (this.interpreter.adaptivePredict(this._input, 74, this._ctx)) { + switch (this.interpreter.adaptivePredict(this._input, 76, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 812; + this.state = 824; this.identifierTypeSpecifierExpression(); } break; @@ -5021,7 +5055,7 @@ export class KipperParser extends KipperParserBase { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 813; + this.state = 825; this.genericTypeSpecifierExpression(); } break; @@ -5029,7 +5063,7 @@ export class KipperParser extends KipperParserBase { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 814; + this.state = 826; this.typeofTypeSpecifierExpression(); } break; @@ -5057,7 +5091,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 817; + this.state = 829; this.typeSpecifierIdentifier(); } } catch (re) { @@ -5084,11 +5118,11 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 819; + this.state = 831; this.typeSpecifierIdentifier(); - this.state = 820; + this.state = 832; this.match(KipperParser.Less); - this.state = 829; + this.state = 841; this._errHandler.sync(this); _la = this._input.LA(1); if ( @@ -5102,28 +5136,28 @@ export class KipperParser extends KipperParserBase { _la === KipperParser.Identifier ) { { - this.state = 821; + this.state = 833; this.typeSpecifierExpression(); - this.state = 826; + this.state = 838; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === KipperParser.Comma) { { { - this.state = 822; + this.state = 834; this.match(KipperParser.Comma); - this.state = 823; + this.state = 835; this.typeSpecifierExpression(); } } - this.state = 828; + this.state = 840; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 831; + this.state = 843; this.match(KipperParser.Greater); } } catch (re) { @@ -5149,13 +5183,13 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 833; + this.state = 845; this.match(KipperParser.Typeof); - this.state = 834; + this.state = 846; this.match(KipperParser.LeftParen); - this.state = 835; + this.state = 847; this.typeSpecifierIdentifier(); - this.state = 836; + this.state = 848; this.match(KipperParser.RightParen); } } catch (re) { @@ -5179,7 +5213,7 @@ export class KipperParser extends KipperParserBase { try { this.enterOuterAlt(_localctx, 1); { - this.state = 838; + this.state = 850; _la = this._input.LA(1); if ( !( @@ -5266,105 +5300,108 @@ export class KipperParser extends KipperParserBase { switch (predIndex) { case 0: return this.notInsideExpressionStatement(); + + case 1: + return this.insideLambda(); } return true; } private computedPrimaryExpression_sempred(_localctx: ComputedPrimaryExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 1: + case 2: return this.precpred(this._ctx, 6); - case 2: + case 3: return this.precpred(this._ctx, 5); - case 3: + case 4: return this.precpred(this._ctx, 4); - case 4: + case 5: return this.precpred(this._ctx, 3); } return true; } private multiplicativeExpression_sempred(_localctx: MultiplicativeExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 5: + case 6: return this.precpred(this._ctx, 1); } return true; } private additiveExpression_sempred(_localctx: AdditiveExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 6: + case 7: return this.precpred(this._ctx, 1); } return true; } private bitwiseShiftExpression_sempred(_localctx: BitwiseShiftExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 7: + case 8: return this.precpred(this._ctx, 1); } return true; } private instanceOfExpression_sempred(_localctx: InstanceOfExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 8: + case 9: return this.precpred(this._ctx, 1); } return true; } private matchesExpression_sempred(_localctx: MatchesExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 9: + case 10: return this.precpred(this._ctx, 1); } return true; } private relationalExpression_sempred(_localctx: RelationalExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 10: + case 11: return this.precpred(this._ctx, 1); } return true; } private equalityExpression_sempred(_localctx: EqualityExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 11: + case 12: return this.precpred(this._ctx, 1); } return true; } private bitwiseAndExpression_sempred(_localctx: BitwiseAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 12: + case 13: return this.precpred(this._ctx, 1); } return true; } private bitwiseXorExpression_sempred(_localctx: BitwiseXorExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 13: + case 14: return this.precpred(this._ctx, 1); } return true; } private bitwiseOrExpression_sempred(_localctx: BitwiseOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 14: + case 15: return this.precpred(this._ctx, 1); } return true; } private logicalAndExpression_sempred(_localctx: LogicalAndExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 15: + case 16: return this.precpred(this._ctx, 1); } return true; } private logicalOrExpression_sempred(_localctx: LogicalOrExpressionContext, predIndex: number): boolean { switch (predIndex) { - case 16: + case 17: return this.precpred(this._ctx, 1); } return true; @@ -5372,7 +5409,7 @@ export class KipperParser extends KipperParserBase { private static readonly _serializedATNSegments: number = 2; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\\\u034B\x04\x02" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\\\u0357\x04\x02" + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + @@ -5403,374 +5440,382 @@ export class KipperParser extends KipperParserBase { "\x18\x03\x18\x03\x18\x03\x18\x05\x18\u0139\n\x18\x03\x19\x03\x19\x03\x19" + "\x05\x19\u013E\n\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03" + "\x1A\x03\x1A\x03\x1A\x05\x1A\u0149\n\x1A\x03\x1B\x03\x1B\x03\x1B\x05\x1B" + - "\u014E\n\x1B\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + - "\x1D\x03\x1D\x05\x1D\u0159\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + - "\x03\x1E\x03\x1E\x05\x1E\u0162\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03" + - "\x1F\x03\x1F\x07\x1F\u016A\n\x1F\f\x1F\x0E\x1F\u016D\v\x1F\x03\x1F\x03" + - "\x1F\x03 \x03 \x03 \x03 \x03 \x03 \x03 \x03 \x05 \u0179\n \x03!\x03!\x03" + - '!\x05!\u017E\n!\x03"\x03"\x03"\x03"\x05"\u0184\n"\x03"\x03"\x05' + - '"\u0188\n"\x03"\x03"\x03"\x03"\x05"\u018E\n"\x03"\x03"\x03"' + - '\x03"\x05"\u0194\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03#\x03#\x03' + - "#\x03$\x03$\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03&\x03&\x05" + - "&\u01AC\n&\x03&\x03&\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03'\x03" + - "'\x03'\x05'\u01BA\n'\x03(\x03(\x05(\u01BE\n(\x03(\x03(\x03(\x03(\x03" + - "(\x03(\x05(\u01C6\n(\x03)\x03)\x03)\x03)\x03*\x03*\x03+\x03+\x03,\x03" + - ",\x03-\x03-\x05-\u01D4\n-\x03.\x03.\x03/\x03/\x07/\u01DA\n/\f/\x0E/\u01DD" + - "\v/\x03/\x03/\x03/\x07/\u01E2\n/\f/\x0E/\u01E5\v/\x03/\x05/\u01E8\n/\x03" + - "0\x030\x030\x050\u01ED\n0\x030\x050\u01F0\n0\x031\x031\x031\x051\u01F5" + - "\n1\x031\x051\u01F8\n1\x032\x032\x033\x033\x033\x033\x073\u0200\n3\f3" + - "\x0E3\u0203\v3\x053\u0205\n3\x033\x053\u0208\n3\x033\x033\x034\x034\x03" + - "4\x034\x074\u0210\n4\f4\x0E4\u0213\v4\x054\u0215\n4\x034\x054\u0218\n" + - "4\x034\x034\x035\x035\x035\x035\x036\x036\x037\x037\x037\x037\x037\x03" + - "7\x057\u0228\n7\x037\x037\x037\x037\x037\x037\x037\x057\u0231\n7\x037" + - "\x037\x037\x057\u0236\n7\x037\x037\x037\x037\x037\x037\x037\x037\x037" + - "\x037\x037\x037\x037\x037\x037\x057\u0247\n7\x037\x037\x077\u024B\n7\f" + - "7\x0E7\u024E\v7\x038\x038\x038\x078\u0253\n8\f8\x0E8\u0256\v8\x039\x03" + - "9\x039\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x05;\u0263\n;\x03;\x03" + - ";\x03;\x03;\x05;\u0269\n;\x03;\x03;\x03<\x03<\x03<\x05<\u0270\n<\x03=" + - "\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?\x05?\u027B\n?\x03@\x03@\x03@" + - "\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03D\x03D\x03D\x03D\x03D\x05D\u028C" + - "\nD\x03E\x03E\x03E\x03E\x03E\x03E\x07E\u0294\nE\fE\x0EE\u0297\vE\x03F" + - "\x03F\x03F\x03F\x03F\x03F\x07F\u029F\nF\fF\x0EF\u02A2\vF\x03G\x03G\x03" + - "G\x03G\x03G\x03G\x03G\x07G\u02AB\nG\fG\x0EG\u02AE\vG\x03H\x03H\x03I\x03" + - "I\x03I\x03I\x03I\x03I\x07I\u02B8\nI\fI\x0EI\u02BB\vI\x03J\x03J\x03J\x03" + - "J\x03J\x03J\x07J\u02C3\nJ\fJ\x0EJ\u02C6\vJ\x03K\x03K\x03K\x03K\x03K\x03" + - "K\x07K\u02CE\nK\fK\x0EK\u02D1\vK\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02D9" + - "\nL\fL\x0EL\u02DC\vL\x03M\x03M\x03M\x03M\x03M\x03M\x07M\u02E4\nM\fM\x0E" + - "M\u02E7\vM\x03N\x03N\x03N\x03N\x03N\x03N\x07N\u02EF\nN\fN\x0EN\u02F2\v" + - "N\x03O\x03O\x03O\x03O\x03O\x03O\x07O\u02FA\nO\fO\x0EO\u02FD\vO\x03P\x03" + - "P\x03P\x03P\x03P\x03P\x07P\u0305\nP\fP\x0EP\u0308\vP\x03Q\x03Q\x03Q\x03" + - "Q\x03Q\x03Q\x07Q\u0310\nQ\fQ\x0EQ\u0313\vQ\x03R\x03R\x03R\x03R\x03R\x03" + - "R\x03R\x05R\u031C\nR\x03S\x03S\x03S\x03S\x03S\x05S\u0323\nS\x03T\x03T" + - "\x03U\x03U\x03U\x07U\u032A\nU\fU\x0EU\u032D\vU\x03V\x03V\x03V\x05V\u0332" + - "\nV\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x07X\u033B\nX\fX\x0EX\u033E\vX" + - "\x05X\u0340\nX\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x02\x02" + - "\x0Fl\x88\x8A\x8C\x90\x92\x94\x96\x98\x9A\x9C\x9E\xA0[\x02\x02\x04\x02" + - "\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18" + - '\x02\x1A\x02\x1C\x02\x1E\x02 \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x02' + - "0\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02" + - "L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02" + - "h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82" + - "\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94" + - "\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6" + - "\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02\xB2\x02\x02\x11\x03\x02\b" + - "\t\x03\x02\x0F\x10\x03\x02\x1F \x03\x02RS\x04\x02QQTT\x03\x02#%\x04\x02" + - "2244\x06\x021133;;KK\x03\x0258\x04\x021133\x03\x02LN\x03\x02DG\x03\x02" + - "BC\x03\x02\u0178\x03\x02\x02\x02@\u017D\x03\x02" + - "\x02\x02B\u017F\x03\x02\x02\x02D\u0198\x03\x02\x02\x02F\u019E\x03\x02" + - "\x02\x02H\u01A6\x03\x02\x02\x02J\u01A9\x03\x02\x02\x02L\u01B9\x03\x02" + - "\x02\x02N\u01BB\x03\x02\x02\x02P\u01C7\x03\x02\x02\x02R\u01CB\x03\x02" + - "\x02\x02T\u01CD\x03\x02\x02\x02V\u01CF\x03\x02\x02\x02X\u01D3\x03\x02" + - "\x02\x02Z\u01D5\x03\x02\x02\x02\\\u01E7\x03\x02\x02\x02^\u01EF\x03\x02" + - "\x02\x02`\u01F7\x03\x02\x02\x02b\u01F9\x03\x02\x02\x02d\u01FB\x03\x02" + - "\x02\x02f\u020B\x03\x02\x02\x02h\u021B\x03\x02\x02\x02j\u021F\x03\x02" + - "\x02\x02l\u0235\x03\x02\x02\x02n\u024F\x03\x02\x02\x02p\u0257\x03\x02" + - "\x02\x02r\u025A\x03\x02\x02\x02t\u025E\x03\x02\x02\x02v\u026F\x03\x02" + - "\x02\x02x\u0271\x03\x02\x02\x02z\u0274\x03\x02\x02\x02|\u027A\x03\x02" + - "\x02\x02~\u027C\x03\x02\x02\x02\x80\u027F\x03\x02\x02\x02\x82\u0282\x03" + - "\x02\x02\x02\x84\u0284\x03\x02\x02\x02\x86\u028B\x03\x02\x02\x02\x88\u028D" + - "\x03\x02\x02\x02\x8A\u0298\x03\x02\x02\x02\x8C\u02A3\x03\x02\x02\x02\x8E" + - "\u02AF\x03\x02\x02\x02\x90\u02B1\x03\x02\x02\x02\x92\u02BC\x03\x02\x02" + - "\x02\x94\u02C7\x03\x02\x02\x02\x96\u02D2\x03\x02\x02\x02\x98\u02DD\x03" + - "\x02\x02\x02\x9A\u02E8\x03\x02\x02\x02\x9C\u02F3\x03\x02\x02\x02\x9E\u02FE" + - "\x03\x02\x02\x02\xA0\u0309\x03\x02\x02\x02\xA2\u031B\x03\x02\x02\x02\xA4" + - "\u0322\x03\x02\x02\x02\xA6\u0324\x03\x02\x02\x02\xA8\u0326\x03\x02\x02" + - "\x02\xAA\u0331\x03\x02\x02\x02\xAC\u0333\x03\x02\x02\x02\xAE\u0335\x03" + - "\x02\x02\x02\xB0\u0343\x03\x02\x02\x02\xB2\u0348\x03\x02\x02\x02\xB4\xB6" + - "\x05\x04\x03\x02\xB5\xB4\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6\xB7" + - "\x03\x02\x02\x02\xB7\xB8\x07\x02\x02\x03\xB8\x03\x03\x02\x02\x02\xB9\xBB" + - "\x05\x06\x04\x02\xBA\xB9\x03\x02\x02\x02\xBB\xBC\x03\x02\x02\x02\xBC\xBA" + - "\x03\x02\x02\x02\xBC\xBD\x03\x02\x02\x02\xBD\x05\x03\x02\x02\x02\xBE\xBF" + - "\x05\b\x05\x02\xBF\x07\x03\x02\x02\x02\xC0\xC2\x05\n\x06\x02\xC1\xC0\x03" + - "\x02\x02\x02\xC2\xC3\x03\x02\x02\x02\xC3\xC1\x03\x02\x02\x02\xC3\xC4\x03" + - "\x02\x02\x02\xC4\t\x03\x02\x02\x02\xC5\xC9\x052\x1A\x02\xC6\xC9\x05\f" + - "\x07\x02\xC7\xC9\x07'\x02\x02\xC8\xC5\x03\x02\x02\x02\xC8\xC6\x03\x02" + - "\x02\x02\xC8\xC7\x03\x02\x02\x02\xC9\v\x03\x02\x02\x02\xCA\xCB\x05\x0E" + - "\b\x02\xCB\xCC\x07'\x02\x02\xCC\xD1\x03\x02\x02\x02\xCD\xD1\x05\x1A\x0E" + - "\x02\xCE\xD1\x05 \x11\x02\xCF\xD1\x05(\x15\x02\xD0\xCA\x03\x02\x02\x02" + - "\xD0\xCD\x03\x02\x02\x02\xD0\xCE\x03\x02\x02\x02\xD0\xCF\x03\x02\x02\x02" + - "\xD1\r\x03\x02\x02\x02\xD2\xD3\x05\x10\t\x02\xD3\xD4\x05\x12\n\x02\xD4" + - "\x0F\x03\x02\x02\x02\xD5\xD6\t\x02\x02\x02\xD6\x11\x03\x02\x02\x02\xD7" + - "\xD8\x05\x16\f\x02\xD8\xD9\x07)\x02\x02\xD9\xDC\x05\xAAV\x02\xDA\xDB\x07" + - "<\x02\x02\xDB\xDD\x05\x14\v\x02\xDC\xDA\x03\x02\x02\x02\xDC\xDD\x03\x02" + - "\x02\x02\xDD\x13\x03\x02\x02\x02\xDE\xDF\x05\xA4S\x02\xDF\x15\x03\x02" + - "\x02\x02\xE0\xE1\x05\x18\r\x02\xE1\x17\x03\x02\x02\x02\xE2\xE3\x07P\x02" + - "\x02\xE3\x19\x03\x02\x02\x02\xE4\xE5\x07\x17\x02\x02\xE5\xE6\x05\x16\f" + - "\x02\xE6\xE8\x07*\x02\x02\xE7\xE9\x05\x1C\x0F\x02\xE8\xE7\x03\x02\x02" + - "\x02\xE8\xE9\x03\x02\x02\x02\xE9\xEA\x03\x02\x02\x02\xEA\xEB\x07+\x02" + - "\x02\xEB\xEC\x07\x1A\x02\x02\xEC\xEE\x05\xAAV\x02\xED\xEF\x054\x1B\x02" + - "\xEE\xED\x03\x02\x02\x02\xEE\xEF\x03\x02\x02\x02\xEF\x1B\x03\x02\x02\x02" + - "\xF0\xF5\x05\x1E\x10\x02\xF1\xF2\x07&\x02\x02\xF2\xF4\x05\x1E\x10\x02" + - "\xF3\xF1\x03\x02\x02\x02\xF4\xF7\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02" + - "\xF5\xF6\x03\x02\x02\x02\xF6\x1D\x03\x02\x02\x02\xF7\xF5\x03\x02\x02\x02" + - "\xF8\xF9\x05\x16\f\x02\xF9\xFA\x07)\x02\x02\xFA\xFB\x05\xAAV\x02\xFB\x1F" + - "\x03\x02\x02\x02\xFC\xFD\x07\x1C\x02\x02\xFD\xFE\x05\x16\f\x02\xFE\u0102" + - '\x07/\x02\x02\xFF\u0101\x05"\x12\x02\u0100\xFF\x03\x02\x02\x02\u0101' + - "\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102\u0103\x03\x02" + - "\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104\u0102\x03\x02\x02\x02\u0105" + - "\u0106\x070\x02\x02\u0106!\x03\x02\x02\x02\u0107\u010A\x05$\x13\x02\u0108" + - "\u010A\x05&\x14\x02\u0109\u0107\x03\x02\x02\x02\u0109\u0108\x03\x02\x02" + - "\x02\u010A#\x03\x02\x02\x02\u010B\u010C\x05\x16\f\x02\u010C\u010D\x07" + - ")\x02\x02\u010D\u010E\x05\xAAV\x02\u010E\u010F\x07'\x02\x02\u010F%\x03" + - "\x02\x02\x02\u0110\u0111\x05\x16\f\x02\u0111\u0113\x07*\x02\x02\u0112" + - "\u0114\x05\x1C\x0F\x02\u0113\u0112\x03\x02\x02\x02\u0113\u0114\x03\x02" + - "\x02\x02\u0114\u0115\x03\x02\x02\x02\u0115\u0116\x07+\x02\x02\u0116\u0117" + - "\x07)\x02\x02\u0117\u0118\x05\xAAV\x02\u0118\u0119\x07'\x02\x02\u0119" + - "'\x03\x02\x02\x02\u011A\u011B\x07\x1B\x02\x02\u011B\u011C\x05\x16\f\x02" + - "\u011C\u0121\x07/\x02\x02\u011D\u0120\x05*\x16\x02\u011E\u0120\x07'\x02" + - "\x02\u011F\u011D\x03\x02\x02\x02\u011F\u011E\x03\x02\x02\x02\u0120\u0123" + - "\x03\x02\x02\x02\u0121\u011F\x03\x02\x02\x02\u0121\u0122\x03\x02\x02\x02" + - "\u0122\u0124\x03\x02\x02\x02\u0123\u0121\x03\x02\x02\x02\u0124\u0125\x07" + - "0\x02\x02\u0125)\x03\x02\x02\x02\u0126\u012A\x05,\x17\x02\u0127\u012A" + - "\x05.\x18\x02\u0128\u012A\x050\x19\x02\u0129\u0126\x03\x02\x02\x02\u0129" + - "\u0127\x03\x02\x02\x02\u0129\u0128\x03\x02\x02\x02\u012A+\x03\x02\x02" + - "\x02\u012B\u012C\x05\x16\f\x02\u012C\u012D\x07)\x02\x02\u012D\u012E\x05" + - "\xAAV\x02\u012E-\x03\x02\x02\x02\u012F\u0130\x05\x16\f\x02\u0130\u0132" + - "\x07*\x02\x02\u0131\u0133\x05\x1C\x0F\x02\u0132\u0131\x03\x02\x02\x02" + - "\u0132\u0133\x03\x02\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0135\x07" + - "+\x02\x02\u0135\u0136\x07)\x02\x02\u0136\u0138\x05\xAAV\x02\u0137\u0139" + - "\x054\x1B\x02\u0138\u0137\x03\x02\x02\x02\u0138\u0139\x03\x02\x02\x02" + - "\u0139/\x03\x02\x02\x02\u013A\u013B\x07\x1D\x02\x02\u013B\u013D\x07*\x02" + - "\x02\u013C\u013E\x05\x1C\x0F\x02\u013D\u013C\x03\x02\x02\x02\u013D\u013E" + - "\x03\x02\x02\x02\u013E\u013F\x03\x02\x02\x02\u013F\u0140\x07+\x02\x02" + - "\u0140\u0141\x054\x1B\x02\u01411\x03\x02\x02\x02\u0142\u0149\x056\x1C" + - "\x02\u0143\u0149\x058\x1D\x02\u0144\u0149\x05@!\x02\u0145\u0149\x05H%" + - "\x02\u0146\u0149\x05J&\x02\u0147\u0149\x054\x1B\x02\u0148\u0142\x03\x02" + - "\x02\x02\u0148\u0143\x03\x02\x02\x02\u0148\u0144\x03\x02\x02\x02\u0148" + - "\u0145\x03\x02\x02\x02\u0148\u0146\x03\x02\x02\x02\u0148\u0147\x03\x02" + - "\x02\x02\u01493\x03\x02\x02\x02\u014A\u014B\x06\x1B\x02\x02\u014B\u014D" + - "\x07/\x02\x02\u014C\u014E\x05\b\x05\x02\u014D\u014C\x03\x02\x02\x02\u014D" + - "\u014E\x03\x02\x02\x02\u014E\u014F\x03\x02\x02\x02\u014F\u0150\x070\x02" + - "\x02\u01505\x03\x02\x02\x02\u0151\u0152\b\x1C\x01\x02\u0152\u0153\x05" + - "\xA8U\x02\u0153\u0154\x07'\x02\x02\u0154\u0155\b\x1C\x01\x02\u01557\x03" + - "\x02\x02\x02\u0156\u0159\x05:\x1E\x02\u0157\u0159\x05<\x1F\x02\u0158\u0156" + - "\x03\x02\x02\x02\u0158\u0157\x03\x02\x02\x02\u01599\x03\x02\x02\x02\u015A" + - "\u015B\x07\x13\x02\x02\u015B\u015C\x07*\x02\x02\u015C\u015D\x05\xA8U\x02" + - "\u015D\u015E\x07+\x02\x02\u015E\u0161\x052\x1A\x02\u015F\u0160\x07\x14" + - "\x02\x02\u0160\u0162\x052\x1A\x02\u0161\u015F\x03\x02\x02\x02\u0161\u0162" + - "\x03\x02\x02\x02\u0162;\x03\x02\x02\x02\u0163\u0164\x07\f\x02\x02\u0164" + - "\u0165\x07*\x02\x02\u0165\u0166\x05\xA8U\x02\u0166\u0167\x07+\x02\x02" + - "\u0167\u016B\x07/\x02\x02\u0168\u016A\x05> \x02\u0169\u0168\x03\x02\x02" + - "\x02\u016A\u016D\x03\x02\x02\x02\u016B\u0169\x03\x02\x02\x02\u016B\u016C" + - "\x03\x02\x02\x02\u016C\u016E\x03\x02\x02\x02\u016D\u016B\x03\x02\x02\x02" + - "\u016E\u016F\x070\x02\x02\u016F=\x03\x02\x02\x02\u0170\u0171\x07\r\x02" + - "\x02\u0171\u0172\x05\xA8U\x02\u0172\u0173\x07)\x02\x02\u0173\u0174\x05" + - "2\x1A\x02\u0174\u0179\x03\x02\x02\x02\u0175\u0176\x07\x0E\x02\x02\u0176" + - "\u0177\x07)\x02\x02\u0177\u0179\x052\x1A\x02\u0178\u0170\x03\x02\x02\x02" + - '\u0178\u0175\x03\x02\x02\x02\u0179?\x03\x02\x02\x02\u017A\u017E\x05B"' + - "\x02\u017B\u017E\x05D#\x02\u017C\u017E\x05F$\x02\u017D\u017A\x03\x02\x02" + - "\x02\u017D\u017B\x03\x02\x02\x02\u017D\u017C\x03\x02\x02\x02\u017EA\x03" + - "\x02\x02\x02\u017F\u0180\x07\x15\x02\x02\u0180\u0187\x07*\x02\x02\u0181" + - "\u0184\x05\x0E\b\x02\u0182\u0184\x05\xA8U\x02\u0183\u0181\x03\x02\x02" + - "\x02\u0183\u0182\x03\x02\x02\x02\u0184\u0185\x03\x02\x02\x02\u0185\u0186" + - '\b"\x01\x02\u0186\u0188\x03\x02\x02\x02\u0187\u0183\x03\x02\x02\x02\u0187' + - "\u0188\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02\u0189\u018D\x07'\x02" + - '\x02\u018A\u018B\x05\xA8U\x02\u018B\u018C\b"\x01\x02\u018C\u018E\x03' + - "\x02\x02\x02\u018D\u018A\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + - "\u018F\x03\x02\x02\x02\u018F\u0193\x07'\x02\x02\u0190\u0191\x05\xA8U" + - '\x02\u0191\u0192\b"\x01\x02\u0192\u0194\x03\x02\x02\x02\u0193\u0190\x03' + - "\x02\x02\x02\u0193\u0194\x03\x02\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195" + - "\u0196\x07+\x02\x02\u0196\u0197\x052\x1A\x02\u0197C\x03\x02\x02\x02\u0198" + - "\u0199\x07\x12\x02\x02\u0199\u019A\x07*\x02\x02\u019A\u019B\x05\xA8U\x02" + - "\u019B\u019C\x07+\x02\x02\u019C\u019D\x052\x1A\x02\u019DE\x03\x02\x02" + - "\x02\u019E\u019F\x07\x11\x02\x02\u019F\u01A0\x052\x1A\x02\u01A0\u01A1" + - "\x07\x12\x02\x02\u01A1\u01A2\x07*\x02\x02\u01A2\u01A3\x05\xA8U\x02\u01A3" + - "\u01A4\x07+\x02\x02\u01A4\u01A5\x07'\x02\x02\u01A5G\x03\x02\x02\x02\u01A6" + - "\u01A7\t\x03\x02\x02\u01A7\u01A8\x07'\x02\x02\u01A8I\x03\x02\x02\x02" + - "\u01A9\u01AB\x07\x18\x02\x02\u01AA\u01AC\x05\xA8U\x02\u01AB\u01AA\x03" + - "\x02\x02\x02\u01AB\u01AC\x03\x02\x02\x02\u01AC\u01AD\x03\x02\x02\x02\u01AD" + - "\u01AE\x07'\x02\x02\u01AEK\x03\x02\x02\x02\u01AF\u01BA\x05P)\x02\u01B0" + - "\u01BA\x05N(\x02\u01B1\u01BA\x05d3\x02\u01B2\u01BA\x05f4\x02\u01B3\u01BA" + - "\x05R*\x02\u01B4\u01BA\x05T+\x02\u01B5\u01BA\x05Z.\x02\u01B6\u01BA\x05" + - "\\/\x02\u01B7\u01BA\x05b2\x02\u01B8\u01BA\x05j6\x02\u01B9\u01AF\x03\x02" + - "\x02\x02\u01B9\u01B0\x03\x02\x02\x02\u01B9\u01B1\x03\x02\x02\x02\u01B9" + - "\u01B2\x03\x02\x02\x02\u01B9\u01B3\x03\x02\x02\x02\u01B9\u01B4\x03\x02" + - "\x02\x02\u01B9\u01B5\x03\x02\x02\x02\u01B9\u01B6\x03\x02\x02\x02\u01B9" + - "\u01B7\x03\x02\x02\x02\u01B9\u01B8\x03\x02\x02\x02\u01BAM\x03\x02\x02" + - "\x02\u01BB\u01BD\x07*\x02\x02\u01BC\u01BE\x05\x1C\x0F\x02\u01BD\u01BC" + - "\x03\x02\x02\x02\u01BD\u01BE\x03\x02\x02\x02\u01BE\u01BF\x03\x02\x02\x02" + - "\u01BF\u01C0\x07+\x02\x02\u01C0\u01C1\x07)\x02\x02\u01C1\u01C2\x05\xAA" + - "V\x02\u01C2\u01C5\x07\x1A\x02\x02\u01C3\u01C6\x05\xA8U\x02\u01C4\u01C6" + - "\x054\x1B\x02\u01C5\u01C3\x03\x02\x02\x02\u01C5\u01C4\x03\x02\x02\x02" + - "\u01C6O\x03\x02\x02\x02\u01C7\u01C8\x07*\x02\x02\u01C8\u01C9\x05\xA8U" + - "\x02\u01C9\u01CA\x07+\x02\x02\u01CAQ\x03\x02\x02\x02\u01CB\u01CC\t\x04" + - "\x02\x02\u01CCS\x03\x02\x02\x02\u01CD\u01CE\x05V,\x02\u01CEU\x03\x02\x02" + - "\x02\u01CF\u01D0\x07P\x02\x02\u01D0W\x03\x02\x02\x02\u01D1\u01D4\x05V" + - ",\x02\u01D2\u01D4\x05Z.\x02\u01D3\u01D1\x03\x02\x02\x02\u01D3\u01D2\x03" + - "\x02\x02\x02\u01D4Y\x03\x02\x02\x02\u01D5\u01D6\t\x05\x02\x02\u01D6[\x03" + - "\x02\x02\x02\u01D7\u01DB\x07W\x02\x02\u01D8\u01DA\x05^0\x02\u01D9\u01D8" + - "\x03\x02\x02\x02\u01DA\u01DD\x03\x02\x02\x02\u01DB\u01D9\x03\x02\x02\x02" + - "\u01DB\u01DC\x03\x02\x02\x02\u01DC\u01DE\x03\x02\x02\x02\u01DD\u01DB\x03" + - "\x02\x02\x02\u01DE\u01E8\x07Y\x02\x02\u01DF\u01E3\x07X\x02\x02\u01E0\u01E2" + - "\x05`1\x02\u01E1\u01E0\x03\x02\x02\x02\u01E2\u01E5\x03\x02\x02\x02\u01E3" + - "\u01E1\x03\x02\x02\x02\u01E3\u01E4\x03\x02\x02\x02\u01E4\u01E6\x03\x02" + - "\x02\x02\u01E5\u01E3\x03\x02\x02\x02\u01E6\u01E8\x07[\x02\x02\u01E7\u01D7" + - "\x03\x02\x02\x02\u01E7\u01DF\x03\x02\x02\x02\u01E8]\x03\x02\x02\x02\u01E9" + - "\u01F0\x07Z\x02\x02\u01EA\u01EC\x07\x03\x02\x02\u01EB\u01ED\x05\xA8U\x02" + - "\u01EC\u01EB\x03\x02\x02\x02\u01EC\u01ED\x03\x02\x02\x02\u01ED\u01EE\x03" + - "\x02\x02\x02\u01EE\u01F0\x07.\x02\x02\u01EF\u01E9\x03\x02\x02\x02\u01EF" + - "\u01EA\x03\x02\x02\x02\u01F0_\x03\x02\x02\x02\u01F1\u01F8\x07\\\x02\x02" + - "\u01F2\u01F4\x07\x03\x02\x02\u01F3\u01F5\x05\xA8U\x02\u01F4\u01F3\x03" + - "\x02\x02\x02\u01F4\u01F5\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6" + - "\u01F8\x07.\x02\x02\u01F7\u01F1\x03\x02\x02\x02\u01F7\u01F2\x03\x02\x02" + - "\x02\u01F8a\x03\x02\x02\x02\u01F9\u01FA\t\x06\x02\x02\u01FAc\x03\x02\x02" + - "\x02\u01FB\u0204\x07,\x02\x02\u01FC\u0201\x05\xA8U\x02\u01FD\u01FE\x07" + - "&\x02\x02\u01FE\u0200\x05\xA8U\x02\u01FF\u01FD\x03\x02\x02\x02\u0200\u0203" + - "\x03\x02\x02\x02\u0201\u01FF\x03\x02\x02\x02\u0201\u0202\x03\x02\x02\x02" + - "\u0202\u0205\x03\x02\x02\x02\u0203\u0201\x03\x02\x02\x02\u0204\u01FC\x03" + - "\x02\x02\x02\u0204\u0205\x03\x02\x02\x02\u0205\u0207\x03\x02\x02\x02\u0206" + - "\u0208\x07&\x02\x02\u0207\u0206\x03\x02"; + "\u014E\n\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x05\x1B\u0155\n\x1B" + + "\x03\x1B\x03\x1B\x05\x1B\u0159\n\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1D\x03\x1D\x05\x1D\u0162\n\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1E" + + "\x03\x1E\x03\x1E\x03\x1E\x05\x1E\u016B\n\x1E\x03\x1F\x03\x1F\x03\x1F\x03" + + "\x1F\x03\x1F\x03\x1F\x07\x1F\u0173\n\x1F\f\x1F\x0E\x1F\u0176\v\x1F\x03" + + "\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 \x03 \x03 \x03 \x05 \u0182\n \x03" + + '!\x03!\x03!\x05!\u0187\n!\x03"\x03"\x03"\x03"\x05"\u018D\n"\x03' + + '"\x03"\x05"\u0191\n"\x03"\x03"\x03"\x03"\x05"\u0197\n"\x03"' + + '\x03"\x03"\x03"\x05"\u019D\n"\x03"\x03"\x03"\x03#\x03#\x03#\x03' + + "#\x03#\x03#\x03$\x03$\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03" + + "&\x03&\x05&\u01B5\n&\x03&\x03&\x03'\x03'\x03'\x03'\x03'\x03'\x03" + + "'\x03'\x03'\x03'\x05'\u01C3\n'\x03(\x03(\x03(\x05(\u01C8\n(\x03" + + "(\x03(\x03(\x03(\x03(\x03(\x05(\u01D0\n(\x03(\x03(\x03)\x03)\x03)\x03" + + ")\x03*\x03*\x03+\x03+\x03,\x03,\x03-\x03-\x05-\u01E0\n-\x03.\x03.\x03" + + "/\x03/\x07/\u01E6\n/\f/\x0E/\u01E9\v/\x03/\x03/\x03/\x07/\u01EE\n/\f/" + + "\x0E/\u01F1\v/\x03/\x05/\u01F4\n/\x030\x030\x030\x050\u01F9\n0\x030\x05" + + "0\u01FC\n0\x031\x031\x031\x051\u0201\n1\x031\x051\u0204\n1\x032\x032\x03" + + "3\x033\x033\x033\x073\u020C\n3\f3\x0E3\u020F\v3\x053\u0211\n3\x033\x05" + + "3\u0214\n3\x033\x033\x034\x034\x034\x034\x074\u021C\n4\f4\x0E4\u021F\v" + + "4\x054\u0221\n4\x034\x054\u0224\n4\x034\x034\x035\x035\x035\x035\x036" + + "\x036\x037\x037\x037\x037\x037\x037\x057\u0234\n7\x037\x037\x037\x037" + + "\x037\x037\x037\x057\u023D\n7\x037\x037\x037\x057\u0242\n7\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0253" + + "\n7\x037\x037\x077\u0257\n7\f7\x0E7\u025A\v7\x038\x038\x038\x078\u025F" + + "\n8\f8\x0E8\u0262\v8\x039\x039\x039\x03:\x03:\x03:\x03:\x03;\x03;\x03" + + ";\x03;\x05;\u026F\n;\x03;\x03;\x03;\x03;\x05;\u0275\n;\x03;\x03;\x03<" + + "\x03<\x03<\x05<\u027C\n<\x03=\x03=\x03=\x03>\x03>\x03>\x03?\x03?\x03?" + + "\x05?\u0287\n?\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03C\x03C\x03D" + + "\x03D\x03D\x03D\x03D\x05D\u0298\nD\x03E\x03E\x03E\x03E\x03E\x03E\x07E" + + "\u02A0\nE\fE\x0EE\u02A3\vE\x03F\x03F\x03F\x03F\x03F\x03F\x07F\u02AB\n" + + "F\fF\x0EF\u02AE\vF\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x07G\u02B7\nG\f" + + "G\x0EG\u02BA\vG\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03I\x07I\u02C4\nI" + + "\fI\x0EI\u02C7\vI\x03J\x03J\x03J\x03J\x03J\x03J\x07J\u02CF\nJ\fJ\x0EJ" + + "\u02D2\vJ\x03K\x03K\x03K\x03K\x03K\x03K\x07K\u02DA\nK\fK\x0EK\u02DD\v" + + "K\x03L\x03L\x03L\x03L\x03L\x03L\x07L\u02E5\nL\fL\x0EL\u02E8\vL\x03M\x03" + + "M\x03M\x03M\x03M\x03M\x07M\u02F0\nM\fM\x0EM\u02F3\vM\x03N\x03N\x03N\x03" + + "N\x03N\x03N\x07N\u02FB\nN\fN\x0EN\u02FE\vN\x03O\x03O\x03O\x03O\x03O\x03" + + "O\x07O\u0306\nO\fO\x0EO\u0309\vO\x03P\x03P\x03P\x03P\x03P\x03P\x07P\u0311" + + "\nP\fP\x0EP\u0314\vP\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x07Q\u031C\nQ\fQ\x0E" + + "Q\u031F\vQ\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x05R\u0328\nR\x03S\x03S" + + "\x03S\x03S\x03S\x05S\u032F\nS\x03T\x03T\x03U\x03U\x03U\x07U\u0336\nU\f" + + "U\x0EU\u0339\vU\x03V\x03V\x03V\x05V\u033E\nV\x03W\x03W\x03X\x03X\x03X" + + "\x03X\x03X\x07X\u0347\nX\fX\x0EX\u034A\vX\x05X\u034C\nX\x03X\x03X\x03" + + "Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x02\x02\x0Fl\x88\x8A\x8C\x90\x92" + + "\x94\x96\x98\x9A\x9C\x9E\xA0[\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02" + + "\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02" + + ' \x02"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02' + + "<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02" + + "X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02" + + "t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02" + + "\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02" + + "\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02" + + "\xAE\x02\xB0\x02\xB2\x02\x02\x11\x03\x02\b\t\x03\x02\x0F\x10\x03\x02\x1F" + + " \x03\x02RS\x04\x02QQTT\x03\x02#%\x04\x022244\x06\x021133;;KK\x03\x02" + + "58\x04\x021133\x03\x02LN\x03\x02DG\x03\x02BC\x03\x02\u0181\x03\x02\x02\x02@\u0186\x03\x02\x02\x02B\u0188\x03\x02\x02\x02" + + "D\u01A1\x03\x02\x02\x02F\u01A7\x03\x02\x02\x02H\u01AF\x03\x02\x02\x02" + + "J\u01B2\x03\x02\x02\x02L\u01C2\x03\x02\x02\x02N\u01C4\x03\x02\x02\x02" + + "P\u01D3\x03\x02\x02\x02R\u01D7\x03\x02\x02\x02T\u01D9\x03\x02\x02\x02" + + "V\u01DB\x03\x02\x02\x02X\u01DF\x03\x02\x02\x02Z\u01E1\x03\x02\x02\x02" + + "\\\u01F3\x03\x02\x02\x02^\u01FB\x03\x02\x02\x02`\u0203\x03\x02\x02\x02" + + "b\u0205\x03\x02\x02\x02d\u0207\x03\x02\x02\x02f\u0217\x03\x02\x02\x02" + + "h\u0227\x03\x02\x02\x02j\u022B\x03\x02\x02\x02l\u0241\x03\x02\x02\x02" + + "n\u025B\x03\x02\x02\x02p\u0263\x03\x02\x02\x02r\u0266\x03\x02\x02\x02" + + "t\u026A\x03\x02\x02\x02v\u027B\x03\x02\x02\x02x\u027D\x03\x02\x02\x02" + + "z\u0280\x03\x02\x02\x02|\u0286\x03\x02\x02\x02~\u0288\x03\x02\x02\x02" + + "\x80\u028B\x03\x02\x02\x02\x82\u028E\x03\x02\x02\x02\x84\u0290\x03\x02" + + "\x02\x02\x86\u0297\x03\x02\x02\x02\x88\u0299\x03\x02\x02\x02\x8A\u02A4" + + "\x03\x02\x02\x02\x8C\u02AF\x03\x02\x02\x02\x8E\u02BB\x03\x02\x02\x02\x90" + + "\u02BD\x03\x02\x02\x02\x92\u02C8\x03\x02\x02\x02\x94\u02D3\x03\x02\x02" + + "\x02\x96\u02DE\x03\x02\x02\x02\x98\u02E9\x03\x02\x02\x02\x9A\u02F4\x03" + + "\x02\x02\x02\x9C\u02FF\x03\x02\x02\x02\x9E\u030A\x03\x02\x02\x02\xA0\u0315" + + "\x03\x02\x02\x02\xA2\u0327\x03\x02\x02\x02\xA4\u032E\x03\x02\x02\x02\xA6" + + "\u0330\x03\x02\x02\x02\xA8\u0332\x03\x02\x02\x02\xAA\u033D\x03\x02\x02" + + "\x02\xAC\u033F\x03\x02\x02\x02\xAE\u0341\x03\x02\x02\x02\xB0\u034F\x03" + + "\x02\x02\x02\xB2\u0354\x03\x02\x02\x02\xB4\xB6\x05\x04\x03\x02\xB5\xB4" + + "\x03\x02\x02\x02\xB5\xB6\x03\x02\x02\x02\xB6\xB7\x03\x02\x02\x02\xB7\xB8" + + "\x07\x02\x02\x03\xB8\x03\x03\x02\x02\x02\xB9\xBB\x05\x06\x04\x02\xBA\xB9" + + "\x03\x02\x02\x02\xBB\xBC\x03\x02\x02\x02\xBC\xBA\x03\x02\x02\x02\xBC\xBD" + + "\x03\x02\x02\x02\xBD\x05\x03\x02\x02\x02\xBE\xBF\x05\b\x05\x02\xBF\x07" + + "\x03\x02\x02\x02\xC0\xC2\x05\n\x06\x02\xC1\xC0\x03\x02\x02\x02\xC2\xC3" + + "\x03\x02\x02\x02\xC3\xC1\x03\x02\x02\x02\xC3\xC4\x03\x02\x02\x02\xC4\t" + + "\x03\x02\x02\x02\xC5\xC9\x052\x1A\x02\xC6\xC9\x05\f\x07\x02\xC7\xC9\x07" + + "'\x02\x02\xC8\xC5\x03\x02\x02\x02\xC8\xC6\x03\x02\x02\x02\xC8\xC7\x03" + + "\x02\x02\x02\xC9\v\x03\x02\x02\x02\xCA\xCB\x05\x0E\b\x02\xCB\xCC\x07'" + + "\x02\x02\xCC\xD1\x03\x02\x02\x02\xCD\xD1\x05\x1A\x0E\x02\xCE\xD1\x05 " + + "\x11\x02\xCF\xD1\x05(\x15\x02\xD0\xCA\x03\x02\x02\x02\xD0\xCD\x03\x02" + + "\x02\x02\xD0\xCE\x03\x02\x02\x02\xD0\xCF\x03\x02\x02\x02\xD1\r\x03\x02" + + "\x02\x02\xD2\xD3\x05\x10\t\x02\xD3\xD4\x05\x12\n\x02\xD4\x0F\x03\x02\x02" + + "\x02\xD5\xD6\t\x02\x02\x02\xD6\x11\x03\x02\x02\x02\xD7\xD8\x05\x16\f\x02" + + "\xD8\xD9\x07)\x02\x02\xD9\xDC\x05\xAAV\x02\xDA\xDB\x07<\x02\x02\xDB\xDD" + + "\x05\x14\v\x02\xDC\xDA\x03\x02\x02\x02\xDC\xDD\x03\x02\x02\x02\xDD\x13" + + "\x03\x02\x02\x02\xDE\xDF\x05\xA4S\x02\xDF\x15\x03\x02\x02\x02\xE0\xE1" + + "\x05\x18\r\x02\xE1\x17\x03\x02\x02\x02\xE2\xE3\x07P\x02\x02\xE3\x19\x03" + + "\x02\x02\x02\xE4\xE5\x07\x17\x02\x02\xE5\xE6\x05\x16\f\x02\xE6\xE8\x07" + + "*\x02\x02\xE7\xE9\x05\x1C\x0F\x02\xE8\xE7\x03\x02\x02\x02\xE8\xE9\x03" + + "\x02\x02\x02\xE9\xEA\x03\x02\x02\x02\xEA\xEB\x07+\x02\x02\xEB\xEC\x07" + + "\x1A\x02\x02\xEC\xEE\x05\xAAV\x02\xED\xEF\x054\x1B\x02\xEE\xED\x03\x02" + + "\x02\x02\xEE\xEF\x03\x02\x02\x02\xEF\x1B\x03\x02\x02\x02\xF0\xF5\x05\x1E" + + "\x10\x02\xF1\xF2\x07&\x02\x02\xF2\xF4\x05\x1E\x10\x02\xF3\xF1\x03\x02" + + "\x02\x02\xF4\xF7\x03\x02\x02\x02\xF5\xF3\x03\x02\x02\x02\xF5\xF6\x03\x02" + + "\x02\x02\xF6\x1D\x03\x02\x02\x02\xF7\xF5\x03\x02\x02\x02\xF8\xF9\x05\x16" + + "\f\x02\xF9\xFA\x07)\x02\x02\xFA\xFB\x05\xAAV\x02\xFB\x1F\x03\x02\x02\x02" + + "\xFC\xFD\x07\x1C\x02\x02\xFD\xFE\x05\x16\f\x02\xFE\u0102\x07/\x02\x02" + + '\xFF\u0101\x05"\x12\x02\u0100\xFF\x03\x02\x02\x02\u0101\u0104\x03\x02' + + "\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102\u0103\x03\x02\x02\x02\u0103" + + "\u0105\x03\x02\x02\x02\u0104\u0102\x03\x02\x02\x02\u0105\u0106\x070\x02" + + "\x02\u0106!\x03\x02\x02\x02\u0107\u010A\x05$\x13\x02\u0108\u010A\x05&" + + "\x14\x02\u0109\u0107\x03\x02\x02\x02\u0109\u0108\x03\x02\x02\x02\u010A" + + "#\x03\x02\x02\x02\u010B\u010C\x05\x16\f\x02\u010C\u010D\x07)\x02\x02\u010D" + + "\u010E\x05\xAAV\x02\u010E\u010F\x07'\x02\x02\u010F%\x03\x02\x02\x02\u0110" + + "\u0111\x05\x16\f\x02\u0111\u0113\x07*\x02\x02\u0112\u0114\x05\x1C\x0F" + + "\x02\u0113\u0112\x03\x02\x02\x02\u0113\u0114\x03\x02\x02\x02\u0114\u0115" + + "\x03\x02\x02\x02\u0115\u0116\x07+\x02\x02\u0116\u0117\x07)\x02\x02\u0117" + + "\u0118\x05\xAAV\x02\u0118\u0119\x07'\x02\x02\u0119'\x03\x02\x02\x02" + + "\u011A\u011B\x07\x1B\x02\x02\u011B\u011C\x05\x16\f\x02\u011C\u0121\x07" + + "/\x02\x02\u011D\u0120\x05*\x16\x02\u011E\u0120\x07'\x02\x02\u011F\u011D" + + "\x03\x02\x02\x02\u011F\u011E\x03\x02\x02\x02\u0120\u0123\x03\x02\x02\x02" + + "\u0121\u011F\x03\x02\x02\x02\u0121\u0122\x03\x02\x02\x02\u0122\u0124\x03" + + "\x02\x02\x02\u0123\u0121\x03\x02\x02\x02\u0124\u0125\x070\x02\x02\u0125" + + ")\x03\x02\x02\x02\u0126\u012A\x05,\x17\x02\u0127\u012A\x05.\x18\x02\u0128" + + "\u012A\x050\x19\x02\u0129\u0126\x03\x02\x02\x02\u0129\u0127\x03\x02\x02" + + "\x02\u0129\u0128\x03\x02\x02\x02\u012A+\x03\x02\x02\x02\u012B\u012C\x05" + + "\x16\f\x02\u012C\u012D\x07)\x02\x02\u012D\u012E\x05\xAAV\x02\u012E-\x03" + + "\x02\x02\x02\u012F\u0130\x05\x16\f\x02\u0130\u0132\x07*\x02\x02\u0131" + + "\u0133\x05\x1C\x0F\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133\x03\x02" + + "\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0135\x07+\x02\x02\u0135\u0136" + + "\x07)\x02\x02\u0136\u0138\x05\xAAV\x02\u0137\u0139\x054\x1B\x02\u0138" + + "\u0137\x03\x02\x02\x02\u0138\u0139\x03\x02\x02\x02\u0139/\x03\x02\x02" + + "\x02\u013A\u013B\x07\x1D\x02\x02\u013B\u013D\x07*\x02\x02\u013C\u013E" + + "\x05\x1C\x0F\x02\u013D\u013C\x03\x02\x02\x02\u013D\u013E\x03\x02\x02\x02" + + "\u013E\u013F\x03\x02\x02\x02\u013F\u0140\x07+\x02\x02\u0140\u0141\x05" + + "4\x1B\x02\u01411\x03\x02\x02\x02\u0142\u0149\x056\x1C\x02\u0143\u0149" + + "\x058\x1D\x02\u0144\u0149\x05@!\x02\u0145\u0149\x05H%\x02\u0146\u0149" + + "\x05J&\x02\u0147\u0149\x054\x1B\x02\u0148\u0142\x03\x02\x02\x02\u0148" + + "\u0143\x03\x02\x02\x02\u0148\u0144\x03\x02\x02\x02\u0148\u0145\x03\x02" + + "\x02\x02\u0148\u0146\x03\x02\x02\x02\u0148\u0147\x03\x02\x02\x02\u0149" + + "3\x03\x02\x02\x02\u014A\u014B\x06\x1B\x02\x02\u014B\u014D\x07/\x02\x02" + + "\u014C\u014E\x05\b\x05\x02\u014D\u014C\x03\x02\x02\x02\u014D\u014E\x03" + + "\x02\x02\x02\u014E\u014F\x03\x02\x02\x02\u014F\u0159\x070\x02\x02\u0150" + + "\u0151\x06\x1B\x03\x02\u0151\u0152\x07/\x02\x02\u0152\u0154\b\x1B\x01" + + "\x02\u0153\u0155\x05\b\x05\x02\u0154\u0153\x03\x02\x02\x02\u0154\u0155" + + "\x03\x02\x02\x02\u0155\u0156\x03\x02\x02\x02\u0156\u0157\b\x1B\x01\x02" + + "\u0157\u0159\x070\x02\x02\u0158\u014A\x03\x02\x02\x02\u0158\u0150\x03" + + "\x02\x02\x02\u01595\x03\x02\x02\x02\u015A\u015B\b\x1C\x01\x02\u015B\u015C" + + "\x05\xA8U\x02\u015C\u015D\x07'\x02\x02\u015D\u015E\b\x1C\x01\x02\u015E" + + "7\x03\x02\x02\x02\u015F\u0162\x05:\x1E\x02\u0160\u0162\x05<\x1F\x02\u0161" + + "\u015F\x03\x02\x02\x02\u0161\u0160\x03\x02\x02\x02\u01629\x03\x02\x02" + + "\x02\u0163\u0164\x07\x13\x02\x02\u0164\u0165\x07*\x02\x02\u0165\u0166" + + "\x05\xA8U\x02\u0166\u0167\x07+\x02\x02\u0167\u016A\x052\x1A\x02\u0168" + + "\u0169\x07\x14\x02\x02\u0169\u016B\x052\x1A\x02\u016A\u0168\x03\x02\x02" + + "\x02\u016A\u016B\x03\x02\x02\x02\u016B;\x03\x02\x02\x02\u016C\u016D\x07" + + "\f\x02\x02\u016D\u016E\x07*\x02\x02\u016E\u016F\x05\xA8U\x02\u016F\u0170" + + "\x07+\x02\x02\u0170\u0174\x07/\x02\x02\u0171\u0173\x05> \x02\u0172\u0171" + + "\x03\x02\x02\x02\u0173\u0176\x03\x02\x02\x02\u0174\u0172\x03\x02\x02\x02" + + "\u0174\u0175\x03\x02\x02\x02\u0175\u0177\x03\x02\x02\x02\u0176\u0174\x03" + + "\x02\x02\x02\u0177\u0178\x070\x02\x02\u0178=\x03\x02\x02\x02\u0179\u017A" + + "\x07\r\x02\x02\u017A\u017B\x05\xA8U\x02\u017B\u017C\x07)\x02\x02\u017C" + + "\u017D\x052\x1A\x02\u017D\u0182\x03\x02\x02\x02\u017E\u017F\x07\x0E\x02" + + "\x02\u017F\u0180\x07)\x02\x02\u0180\u0182\x052\x1A\x02\u0181\u0179\x03" + + "\x02\x02\x02\u0181\u017E\x03\x02\x02\x02\u0182?\x03\x02\x02\x02\u0183" + + '\u0187\x05B"\x02\u0184\u0187\x05D#\x02\u0185\u0187\x05F$\x02\u0186\u0183' + + "\x03\x02\x02\x02\u0186\u0184\x03\x02\x02\x02\u0186\u0185\x03\x02\x02\x02" + + "\u0187A\x03\x02\x02\x02\u0188\u0189\x07\x15\x02\x02\u0189\u0190\x07*\x02" + + "\x02\u018A\u018D\x05\x0E\b\x02\u018B\u018D\x05\xA8U\x02\u018C\u018A\x03" + + "\x02\x02\x02\u018C\u018B\x03\x02\x02\x02\u018D\u018E\x03\x02\x02\x02\u018E" + + '\u018F\b"\x01\x02\u018F\u0191\x03\x02\x02\x02\u0190\u018C\x03\x02\x02' + + "\x02\u0190\u0191\x03\x02\x02\x02\u0191\u0192\x03\x02\x02\x02\u0192\u0196" + + "\x07'\x02\x02\u0193\u0194\x05\xA8U\x02\u0194\u0195\b\"\x01\x02\u0195" + + "\u0197\x03\x02\x02\x02\u0196\u0193\x03\x02\x02\x02\u0196\u0197\x03\x02" + + "\x02\x02\u0197\u0198\x03\x02\x02\x02\u0198\u019C\x07'\x02\x02\u0199\u019A" + + '\x05\xA8U\x02\u019A\u019B\b"\x01\x02\u019B\u019D\x03\x02\x02\x02\u019C' + + "\u0199\x03\x02\x02\x02\u019C\u019D\x03\x02\x02\x02\u019D\u019E\x03\x02" + + "\x02\x02\u019E\u019F\x07+\x02\x02\u019F\u01A0\x052\x1A\x02\u01A0C\x03" + + "\x02\x02\x02\u01A1\u01A2\x07\x12\x02\x02\u01A2\u01A3\x07*\x02\x02\u01A3" + + "\u01A4\x05\xA8U\x02\u01A4\u01A5\x07+\x02\x02\u01A5\u01A6\x052\x1A\x02" + + "\u01A6E\x03\x02\x02\x02\u01A7\u01A8\x07\x11\x02\x02\u01A8\u01A9\x052\x1A" + + "\x02\u01A9\u01AA\x07\x12\x02\x02\u01AA\u01AB\x07*\x02\x02\u01AB\u01AC" + + "\x05\xA8U\x02\u01AC\u01AD\x07+\x02\x02\u01AD\u01AE\x07'\x02\x02\u01AE" + + "G\x03\x02\x02\x02\u01AF\u01B0\t\x03\x02\x02\u01B0\u01B1\x07'\x02\x02" + + "\u01B1I\x03\x02\x02\x02\u01B2\u01B4\x07\x18\x02\x02\u01B3\u01B5\x05\xA8" + + "U\x02\u01B4\u01B3\x03\x02\x02\x02\u01B4\u01B5\x03\x02\x02\x02\u01B5\u01B6" + + "\x03\x02\x02\x02\u01B6\u01B7\x07'\x02\x02\u01B7K\x03\x02\x02\x02\u01B8" + + "\u01C3\x05P)\x02\u01B9\u01C3\x05N(\x02\u01BA\u01C3\x05d3\x02\u01BB\u01C3" + + "\x05f4\x02\u01BC\u01C3\x05R*\x02\u01BD\u01C3\x05T+\x02\u01BE\u01C3\x05" + + "Z.\x02\u01BF\u01C3\x05\\/\x02\u01C0\u01C3\x05b2\x02\u01C1\u01C3\x05j6" + + "\x02\u01C2\u01B8\x03\x02\x02\x02\u01C2\u01B9\x03\x02\x02\x02\u01C2\u01BA" + + "\x03\x02\x02\x02\u01C2\u01BB\x03\x02\x02\x02\u01C2\u01BC\x03\x02\x02\x02" + + "\u01C2\u01BD\x03\x02\x02\x02\u01C2\u01BE\x03\x02\x02\x02\u01C2\u01BF\x03" + + "\x02\x02\x02\u01C2\u01C0\x03\x02\x02\x02\u01C2\u01C1\x03\x02\x02\x02\u01C3" + + "M\x03\x02\x02\x02\u01C4\u01C5\b(\x01\x02\u01C5\u01C7\x07*\x02\x02\u01C6" + + "\u01C8\x05\x1C\x0F\x02\u01C7\u01C6\x03\x02\x02\x02\u01C7\u01C8\x03\x02" + + "\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x07+\x02\x02\u01CA\u01CB" + + "\x07)\x02\x02\u01CB\u01CC\x05\xAAV\x02\u01CC\u01CF\x07\x1A\x02\x02\u01CD" + + "\u01D0\x05\xA8U\x02\u01CE\u01D0\x054\x1B\x02\u01CF\u01CD\x03\x02\x02\x02" + + "\u01CF\u01CE\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02\u01D1\u01D2\b" + + "(\x01\x02\u01D2O\x03\x02\x02\x02\u01D3\u01D4\x07*\x02\x02\u01D4\u01D5" + + "\x05\xA8U\x02\u01D5\u01D6\x07+\x02\x02\u01D6Q\x03\x02\x02\x02\u01D7\u01D8" + + "\t\x04\x02\x02\u01D8S\x03\x02\x02\x02\u01D9\u01DA\x05V,\x02\u01DAU\x03" + + "\x02\x02\x02\u01DB\u01DC\x07P\x02\x02\u01DCW\x03\x02\x02\x02\u01DD\u01E0" + + "\x05V,\x02\u01DE\u01E0\x05Z.\x02\u01DF\u01DD\x03\x02\x02\x02\u01DF\u01DE" + + "\x03\x02\x02\x02\u01E0Y\x03\x02\x02\x02\u01E1\u01E2\t\x05\x02\x02\u01E2" + + "[\x03\x02\x02\x02\u01E3\u01E7\x07W\x02\x02\u01E4\u01E6\x05^0\x02\u01E5" + + "\u01E4\x03\x02\x02\x02\u01E6\u01E9\x03\x02\x02\x02\u01E7\u01E5\x03\x02" + + "\x02\x02\u01E7\u01E8\x03\x02\x02\x02\u01E8\u01EA\x03\x02\x02\x02\u01E9" + + "\u01E7\x03\x02\x02\x02\u01EA\u01F4\x07Y\x02\x02\u01EB\u01EF\x07X\x02\x02" + + "\u01EC\u01EE\x05`1\x02\u01ED\u01EC\x03\x02\x02\x02\u01EE\u01F1\x03\x02" + + "\x02\x02\u01EF\u01ED\x03\x02\x02\x02\u01EF\u01F0\x03\x02\x02\x02\u01F0" + + "\u01F2\x03\x02\x02\x02\u01F1\u01EF\x03\x02\x02\x02\u01F2\u01F4\x07[\x02" + + "\x02\u01F3\u01E3\x03\x02\x02\x02\u01F3\u01EB\x03\x02\x02\x02\u01F4]\x03" + + "\x02\x02\x02\u01F5\u01FC\x07Z\x02\x02\u01F6\u01F8\x07\x03\x02\x02\u01F7" + + "\u01F9\x05\xA8U\x02\u01F8\u01F7\x03\x02\x02\x02\u01F8\u01F9\x03\x02\x02" + + "\x02\u01F9\u01FA\x03\x02\x02\x02\u01FA\u01FC\x07.\x02\x02\u01FB\u01F5" + + "\x03\x02\x02\x02\u01FB\u01F6\x03\x02\x02\x02\u01FC_\x03\x02\x02\x02\u01FD" + + "\u0204\x07\\\x02\x02\u01FE\u0200\x07\x03\x02\x02\u01FF\u0201\x05\xA8U" + + "\x02\u0200\u01FF\x03\x02\x02\x02\u0200\u0201\x03\x02\x02\x02\u0201\u0202" + + "\x03\x02\x02\x02\u0202\u0204\x07.\x02\x02\u0203\u01FD\x03\x02\x02\x02" + + "\u0203\u01FE"; private static readonly _serializedATNSegment1: string = - "\x02\x02\u0207\u0208\x03\x02\x02\x02\u0208\u0209\x03\x02\x02\x02\u0209" + - "\u020A\x07-\x02\x02\u020Ae\x03\x02\x02\x02\u020B\u0214\x07/\x02\x02\u020C" + - "\u0211\x05h5\x02\u020D\u020E\x07&\x02\x02\u020E\u0210\x05h5\x02\u020F" + - "\u020D\x03\x02\x02\x02\u0210\u0213\x03\x02\x02\x02\u0211\u020F\x03\x02" + - "\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212\u0215\x03\x02\x02\x02\u0213" + - "\u0211\x03\x02\x02\x02\u0214\u020C\x03\x02\x02\x02\u0214\u0215\x03\x02" + - "\x02\x02\u0215\u0217\x03\x02\x02\x02\u0216\u0218\x07&\x02\x02\u0217\u0216" + - "\x03\x02\x02\x02\u0217\u0218\x03\x02\x02\x02\u0218\u0219\x03\x02\x02\x02" + - "\u0219\u021A\x070\x02\x02\u021Ag\x03\x02\x02\x02\u021B\u021C\x05X-\x02" + - "\u021C\u021D\x07)\x02\x02\u021D\u021E\x05\xA8U\x02\u021Ei\x03\x02\x02" + - "\x02\u021F\u0220\t\x07\x02\x02\u0220k\x03\x02\x02\x02\u0221\u0222\b7\x01" + - "\x02\u0222\u0236\x05L'\x02\u0223\u0224\x07\x19\x02\x02\u0224\u0225\x05" + - "l7\x02\u0225\u0227\x07*\x02\x02\u0226\u0228\x05n8\x02\u0227\u0226\x03" + - "\x02\x02\x02\u0227\u0228\x03\x02\x02\x02\u0228\u0229\x03\x02\x02\x02\u0229" + - "\u022A\x07+\x02\x02\u022A\u022B\b7\x01\x02\u022B\u0236\x03\x02\x02\x02" + - "\u022C\u022D\x07\x1E\x02\x02\u022D\u022E\x05\xAAV\x02\u022E\u0230\x07" + - "*\x02\x02\u022F\u0231\x05n8\x02\u0230\u022F\x03\x02\x02\x02\u0230\u0231" + - "\x03\x02\x02\x02\u0231\u0232\x03\x02\x02\x02\u0232\u0233\x07+\x02\x02" + - "\u0233\u0234\b7\x01\x02\u0234\u0236\x03\x02\x02\x02\u0235\u0221\x03\x02" + - "\x02\x02\u0235\u0223\x03\x02\x02\x02\u0235\u022C\x03\x02\x02\x02\u0236" + - "\u024C\x03\x02\x02\x02\u0237\u0238\f\b\x02\x02\u0238\u0239\x05p9\x02\u0239" + - "\u023A\b7\x01\x02\u023A\u024B\x03\x02\x02\x02\u023B\u023C\f\x07\x02\x02" + - "\u023C\u023D\x05r:\x02\u023D\u023E\b7\x01\x02\u023E\u024B\x03\x02\x02" + - "\x02\u023F\u0240\f\x06\x02\x02\u0240\u0241\x05t;\x02\u0241\u0242\b7\x01" + - "\x02\u0242\u024B\x03\x02\x02\x02\u0243\u0244\f\x05\x02\x02\u0244\u0246" + - "\x07*\x02\x02\u0245\u0247\x05n8\x02\u0246\u0245\x03\x02\x02\x02\u0246" + - "\u0247\x03\x02\x02\x02\u0247\u0248\x03\x02\x02\x02\u0248\u0249\x07+\x02" + - "\x02\u0249\u024B\b7\x01\x02\u024A\u0237\x03\x02\x02\x02\u024A\u023B\x03" + - "\x02\x02\x02\u024A\u023F\x03\x02\x02\x02\u024A\u0243\x03\x02\x02\x02\u024B" + - "\u024E\x03\x02\x02\x02\u024C\u024A\x03\x02\x02\x02\u024C\u024D\x03\x02" + - "\x02\x02\u024Dm\x03\x02\x02\x02\u024E\u024C\x03\x02\x02\x02\u024F\u0254" + - "\x05\xA4S\x02\u0250\u0251\x07&\x02\x02\u0251\u0253\x05\xA4S\x02\u0252" + - "\u0250\x03\x02\x02\x02\u0253\u0256\x03\x02\x02\x02\u0254\u0252\x03\x02" + - "\x02\x02\u0254\u0255\x03\x02\x02\x02\u0255o\x03\x02\x02\x02\u0256\u0254" + - "\x03\x02\x02\x02\u0257\u0258\x07O\x02\x02\u0258\u0259\x05V,\x02\u0259" + - "q\x03\x02\x02\x02\u025A\u025B\x07,\x02\x02\u025B\u025C\x05\xA8U\x02\u025C" + - "\u025D\x07-\x02\x02\u025Ds\x03\x02\x02\x02\u025E\u0262\x07,\x02\x02\u025F" + - "\u0260\x05\xA8U\x02\u0260\u0261\b;\x01\x02\u0261\u0263\x03\x02\x02\x02" + - "\u0262\u025F\x03\x02\x02\x02\u0262\u0263\x03\x02\x02\x02\u0263\u0264\x03" + - "\x02\x02\x02\u0264\u0268\x07)\x02\x02\u0265\u0266\x05\xA8U\x02\u0266\u0267" + - "\b;\x01\x02\u0267\u0269\x03\x02\x02\x02\u0268\u0265\x03\x02\x02\x02\u0268" + - "\u0269\x03\x02\x02\x02\u0269\u026A\x03\x02\x02\x02\u026A\u026B\x07-\x02" + - "\x02\u026Bu\x03\x02\x02\x02\u026C\u0270\x05l7\x02\u026D\u0270\x05x=\x02" + - "\u026E\u0270\x05z>\x02\u026F\u026C\x03\x02\x02\x02\u026F\u026D\x03\x02" + - "\x02\x02\u026F\u026E\x03\x02\x02\x02\u0270w\x03\x02\x02\x02\u0271\u0272" + - "\x05l7\x02\u0272\u0273\x05\x82B\x02\u0273y\x03\x02\x02\x02\u0274\u0275" + - '\x07"\x02\x02\u0275\u0276\x05\xA4S\x02\u0276{\x03\x02\x02\x02\u0277\u027B' + - "\x05v<\x02\u0278\u027B\x05~@\x02\u0279\u027B\x05\x80A\x02\u027A\u0277" + - "\x03\x02\x02\x02\u027A\u0278\x03\x02\x02\x02\u027A\u0279\x03\x02\x02\x02" + - "\u027B}\x03\x02\x02\x02\u027C\u027D\x05\x82B\x02\u027D\u027E\x05v<\x02" + - "\u027E\x7F\x03\x02\x02\x02\u027F\u0280\x05\x84C\x02\u0280\u0281\x05v<" + - "\x02\u0281\x81\x03\x02\x02\x02\u0282\u0283\t\b\x02\x02\u0283\x83\x03\x02" + - "\x02\x02\u0284\u0285\t\t\x02\x02\u0285\x85\x03\x02\x02\x02\u0286\u028C" + - "\x05|?\x02\u0287\u0288\x05|?\x02\u0288\u0289\x07\n\x02\x02\u0289\u028A" + - "\x05\xAAV\x02\u028A\u028C\x03\x02\x02\x02\u028B\u0286\x03\x02\x02\x02" + - "\u028B\u0287\x03\x02\x02\x02\u028C\x87\x03\x02\x02\x02\u028D\u028E\bE" + - "\x01\x02\u028E\u028F\x05\x86D\x02\u028F\u0295\x03\x02\x02\x02\u0290\u0291" + - "\f\x03\x02\x02\u0291\u0292\t\n\x02\x02\u0292\u0294\x05\x86D\x02\u0293" + - "\u0290\x03\x02\x02\x02\u0294\u0297\x03\x02\x02\x02\u0295\u0293\x03\x02" + - "\x02\x02\u0295\u0296\x03\x02\x02\x02\u0296\x89\x03\x02\x02\x02\u0297\u0295" + - "\x03\x02\x02\x02\u0298\u0299\bF\x01\x02\u0299\u029A\x05\x88E\x02\u029A" + - "\u02A0\x03\x02\x02\x02\u029B\u029C\f\x03\x02\x02\u029C\u029D\t\v\x02\x02" + - "\u029D\u029F\x05\x88E\x02\u029E\u029B\x03\x02\x02\x02\u029F\u02A2\x03" + - "\x02\x02\x02\u02A0\u029E\x03\x02\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1" + - "\x8B\x03\x02\x02\x02\u02A2\u02A0\x03\x02\x02\x02\u02A3\u02A4\bG\x01\x02" + - "\u02A4\u02A5\x05\x8AF\x02\u02A5\u02AC\x03\x02\x02\x02\u02A6\u02A7\f\x03" + - "\x02\x02\u02A7\u02A8\x05\x8EH\x02\u02A8\u02A9\x05\x98M\x02\u02A9\u02AB" + - "\x03\x02\x02\x02\u02AA\u02A6\x03\x02\x02\x02\u02AB\u02AE\x03\x02\x02\x02" + - "\u02AC\u02AA\x03\x02\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\x8D\x03" + - "\x02\x02\x02\u02AE\u02AC\x03\x02\x02\x02\u02AF\u02B0\t\f\x02\x02\u02B0" + - "\x8F\x03\x02\x02\x02\u02B1\u02B2\bI\x01\x02\u02B2\u02B3\x05\x8CG\x02\u02B3" + - "\u02B9\x03\x02\x02\x02\u02B4\u02B5\f\x03\x02\x02\u02B5\u02B6\x07\x07\x02" + - "\x02\u02B6\u02B8\x05\xAAV\x02\u02B7\u02B4\x03\x02\x02\x02\u02B8\u02BB" + - "\x03\x02\x02\x02\u02B9\u02B7\x03\x02\x02\x02\u02B9\u02BA\x03\x02\x02\x02" + - "\u02BA\x91\x03\x02\x02\x02\u02BB\u02B9\x03\x02\x02\x02\u02BC\u02BD\bJ" + - "\x01\x02\u02BD\u02BE\x05\x90I\x02\u02BE\u02C4\x03\x02\x02\x02\u02BF\u02C0" + - "\f\x03\x02\x02\u02C0\u02C1\x07!\x02\x02\u02C1\u02C3\x05\xAAV\x02\u02C2" + - "\u02BF\x03\x02\x02\x02\u02C3\u02C6\x03\x02\x02\x02\u02C4\u02C2\x03\x02" + - "\x02\x02\u02C4\u02C5\x03\x02\x02\x02\u02C5\x93\x03\x02\x02\x02\u02C6\u02C4" + - "\x03\x02\x02\x02\u02C7\u02C8\bK\x01\x02\u02C8\u02C9\x05\x92J\x02\u02C9" + - "\u02CF\x03\x02\x02\x02\u02CA\u02CB\f\x03\x02\x02\u02CB\u02CC\t\r\x02\x02" + - "\u02CC\u02CE\x05\x94K\x04\u02CD\u02CA\x03\x02\x02\x02\u02CE\u02D1\x03" + - "\x02\x02\x02\u02CF\u02CD\x03\x02\x02\x02\u02CF\u02D0\x03\x02\x02\x02\u02D0" + - "\x95\x03\x02\x02\x02\u02D1\u02CF\x03\x02\x02\x02\u02D2\u02D3\bL\x01\x02" + - "\u02D3\u02D4\x05\x94K\x02\u02D4\u02DA\x03\x02\x02\x02\u02D5\u02D6\f\x03" + - "\x02\x02\u02D6\u02D7\t\x0E\x02\x02\u02D7\u02D9\x05\x94K\x02\u02D8\u02D5" + - "\x03\x02\x02\x02\u02D9\u02DC\x03\x02\x02\x02\u02DA\u02D8\x03\x02\x02\x02" + - "\u02DA\u02DB\x03\x02\x02\x02\u02DB\x97\x03\x02\x02\x02\u02DC\u02DA\x03" + - "\x02\x02\x02\u02DD\u02DE\bM\x01\x02\u02DE\u02DF\x05\x96L\x02\u02DF\u02E5" + - "\x03\x02\x02\x02\u02E0\u02E1\f\x03\x02\x02\u02E1\u02E2\x07H\x02\x02\u02E2" + - "\u02E4\x05\x96L\x02\u02E3\u02E0\x03\x02\x02\x02\u02E4\u02E7\x03\x02\x02" + - "\x02\u02E5\u02E3\x03\x02\x02\x02\u02E5\u02E6\x03\x02\x02\x02\u02E6\x99" + - "\x03\x02\x02\x02\u02E7\u02E5\x03\x02\x02\x02\u02E8\u02E9\bN\x01\x02\u02E9" + - "\u02EA\x05\x98M\x02\u02EA\u02F0\x03\x02\x02\x02\u02EB\u02EC\f\x03\x02" + - "\x02\u02EC\u02ED\x07J\x02\x02\u02ED\u02EF\x05\x98M\x02\u02EE\u02EB\x03" + - "\x02\x02\x02\u02EF\u02F2\x03\x02\x02\x02\u02F0\u02EE\x03\x02\x02\x02\u02F0" + - "\u02F1\x03\x02\x02\x02\u02F1\x9B\x03\x02\x02\x02\u02F2\u02F0\x03\x02\x02" + - "\x02\u02F3\u02F4\bO\x01\x02\u02F4\u02F5\x05\x9AN\x02\u02F5\u02FB\x03\x02" + - "\x02\x02\u02F6\u02F7\f\x03\x02\x02\u02F7\u02F8\x07I\x02\x02\u02F8\u02FA" + - "\x05\x9AN\x02\u02F9\u02F6\x03\x02\x02\x02\u02FA\u02FD\x03\x02\x02\x02" + - "\u02FB\u02F9\x03\x02\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FC\x9D\x03" + - "\x02\x02\x02\u02FD\u02FB\x03\x02\x02\x02\u02FE\u02FF\bP\x01\x02\u02FF" + - "\u0300\x05\x9CO\x02\u0300\u0306\x03\x02\x02\x02\u0301\u0302\f\x03\x02" + - "\x02\u0302\u0303\x079\x02\x02\u0303\u0305\x05\x9CO\x02\u0304\u0301\x03" + - "\x02\x02\x02\u0305\u0308\x03\x02\x02\x02\u0306\u0304\x03\x02\x02\x02\u0306" + - "\u0307\x03\x02\x02\x02\u0307\x9F\x03\x02\x02\x02\u0308\u0306\x03\x02\x02" + - "\x02\u0309\u030A\bQ\x01\x02\u030A\u030B\x05\x9EP\x02\u030B\u0311\x03\x02" + - "\x02\x02\u030C\u030D\f\x03\x02\x02\u030D\u030E\x07:\x02\x02\u030E\u0310" + - "\x05\x9EP\x02\u030F\u030C\x03\x02\x02\x02\u0310\u0313\x03\x02\x02\x02" + - "\u0311\u030F\x03\x02\x02\x02\u0311\u0312\x03\x02\x02\x02\u0312\xA1\x03" + - "\x02\x02\x02\u0313\u0311\x03\x02\x02\x02\u0314\u031C\x05\xA0Q\x02\u0315" + - "\u0316\x05\xA0Q\x02\u0316\u0317\x07(\x02\x02\u0317\u0318\x05\xA2R\x02" + - "\u0318\u0319\x07)\x02\x02\u0319\u031A\x05\xA2R\x02\u031A\u031C\x03\x02" + - "\x02\x02\u031B\u0314\x03\x02\x02\x02\u031B\u0315\x03\x02\x02\x02\u031C" + - "\xA3\x03\x02\x02\x02\u031D\u0323\x05\xA2R\x02\u031E\u031F\x05l7\x02\u031F" + - "\u0320\x05\xA6T\x02\u0320\u0321\x05\xA4S\x02\u0321\u0323\x03\x02\x02\x02" + - "\u0322\u031D\x03\x02\x02\x02\u0322\u031E\x03\x02\x02\x02\u0323\xA5\x03" + - "\x02\x02\x02\u0324\u0325\t\x0F\x02\x02\u0325\xA7\x03\x02\x02\x02\u0326" + - "\u032B\x05\xA4S\x02\u0327\u0328\x07&\x02\x02\u0328\u032A\x05\xA4S\x02" + - "\u0329\u0327\x03\x02\x02\x02\u032A\u032D\x03\x02\x02\x02\u032B\u0329\x03" + - "\x02\x02\x02\u032B\u032C\x03\x02\x02\x02\u032C\xA9\x03\x02\x02\x02\u032D" + - "\u032B\x03\x02\x02\x02\u032E\u0332\x05\xACW\x02\u032F\u0332\x05\xAEX\x02" + - "\u0330\u0332\x05\xB0Y\x02\u0331\u032E\x03\x02\x02\x02\u0331\u032F\x03" + - "\x02\x02\x02\u0331\u0330\x03\x02\x02\x02\u0332\xAB\x03\x02\x02\x02\u0333" + - "\u0334\x05\xB2Z\x02\u0334\xAD\x03\x02\x02\x02\u0335\u0336\x05\xB2Z\x02" + - "\u0336\u033F\x07D\x02\x02\u0337\u033C\x05\xAAV\x02\u0338\u0339\x07&\x02" + - "\x02\u0339\u033B\x05\xAAV\x02\u033A\u0338\x03\x02\x02\x02\u033B\u033E" + - "\x03\x02\x02\x02\u033C\u033A\x03\x02\x02\x02\u033C\u033D\x03\x02\x02\x02" + - "\u033D\u0340\x03\x02\x02\x02\u033E\u033C\x03\x02\x02\x02\u033F\u0337\x03" + - "\x02\x02\x02\u033F\u0340\x03\x02\x02\x02\u0340\u0341\x03\x02\x02\x02\u0341" + - '\u0342\x07F\x02\x02\u0342\xAF\x03\x02\x02\x02\u0343\u0344\x07"\x02\x02' + - "\u0344\u0345\x07*\x02\x02\u0345\u0346\x05\xB2Z\x02\u0346\u0347\x07+\x02" + - "\x02\u0347\xB1\x03\x02\x02\x02\u0348\u0349\t\x10\x02\x02\u0349\xB3\x03" + - "\x02\x02\x02O\xB5\xBC\xC3\xC8\xD0\xDC\xE8\xEE\xF5\u0102\u0109\u0113\u011F" + - "\u0121\u0129\u0132\u0138\u013D\u0148\u014D\u0158\u0161\u016B\u0178\u017D" + - "\u0183\u0187\u018D\u0193\u01AB\u01B9\u01BD\u01C5\u01D3\u01DB\u01E3\u01E7" + - "\u01EC\u01EF\u01F4\u01F7\u0201\u0204\u0207\u0211\u0214\u0217\u0227\u0230" + - "\u0235\u0246\u024A\u024C\u0254\u0262\u0268\u026F\u027A\u028B\u0295\u02A0" + - "\u02AC\u02B9\u02C4\u02CF\u02DA\u02E5\u02F0\u02FB\u0306\u0311\u031B\u0322" + - "\u032B\u0331\u033C\u033F"; + "\x03\x02\x02\x02\u0204a\x03\x02\x02\x02\u0205\u0206\t\x06\x02\x02\u0206" + + "c\x03\x02\x02\x02\u0207\u0210\x07,\x02\x02\u0208\u020D\x05\xA8U\x02\u0209" + + "\u020A\x07&\x02\x02\u020A\u020C\x05\xA8U\x02\u020B\u0209\x03\x02\x02\x02" + + "\u020C\u020F\x03\x02\x02\x02\u020D\u020B\x03\x02\x02\x02\u020D\u020E\x03" + + "\x02\x02\x02\u020E\u0211\x03\x02\x02\x02\u020F\u020D\x03\x02\x02\x02\u0210" + + "\u0208\x03\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0213\x03\x02" + + "\x02\x02\u0212\u0214\x07&\x02\x02\u0213\u0212\x03\x02\x02\x02\u0213\u0214" + + "\x03\x02\x02\x02\u0214\u0215\x03\x02\x02\x02\u0215\u0216\x07-\x02\x02" + + "\u0216e\x03\x02\x02\x02\u0217\u0220\x07/\x02\x02\u0218\u021D\x05h5\x02" + + "\u0219\u021A\x07&\x02\x02\u021A\u021C\x05h5\x02\u021B\u0219\x03\x02\x02" + + "\x02\u021C\u021F\x03\x02\x02\x02\u021D\u021B\x03\x02\x02\x02\u021D\u021E" + + "\x03\x02\x02\x02\u021E\u0221\x03\x02\x02\x02\u021F\u021D\x03\x02\x02\x02" + + "\u0220\u0218\x03\x02\x02\x02\u0220\u0221\x03\x02\x02\x02\u0221\u0223\x03" + + "\x02\x02\x02\u0222\u0224\x07&\x02\x02\u0223\u0222\x03\x02\x02\x02\u0223" + + "\u0224\x03\x02\x02\x02\u0224\u0225\x03\x02\x02\x02\u0225\u0226\x070\x02" + + "\x02\u0226g\x03\x02\x02\x02\u0227\u0228\x05X-\x02\u0228\u0229\x07)\x02" + + "\x02\u0229\u022A\x05\xA8U\x02\u022Ai\x03\x02\x02\x02\u022B\u022C\t\x07" + + "\x02\x02\u022Ck\x03\x02\x02\x02\u022D\u022E\b7\x01\x02\u022E\u0242\x05" + + "L'\x02\u022F\u0230\x07\x19\x02\x02\u0230\u0231\x05l7\x02\u0231\u0233" + + "\x07*\x02\x02\u0232\u0234\x05n8\x02\u0233\u0232\x03\x02\x02\x02\u0233" + + "\u0234\x03\x02\x02\x02\u0234\u0235\x03\x02\x02\x02\u0235\u0236\x07+\x02" + + "\x02\u0236\u0237\b7\x01\x02\u0237\u0242\x03\x02\x02\x02\u0238\u0239\x07" + + "\x1E\x02\x02\u0239\u023A\x05\xAAV\x02\u023A\u023C\x07*\x02\x02\u023B\u023D" + + "\x05n8\x02\u023C\u023B\x03\x02\x02\x02\u023C\u023D\x03\x02\x02\x02\u023D" + + "\u023E\x03\x02\x02\x02\u023E\u023F\x07+\x02\x02\u023F\u0240\b7\x01\x02" + + "\u0240\u0242\x03\x02\x02\x02\u0241\u022D\x03\x02\x02\x02\u0241\u022F\x03" + + "\x02\x02\x02\u0241\u0238\x03\x02\x02\x02\u0242\u0258\x03\x02\x02\x02\u0243" + + "\u0244\f\b\x02\x02\u0244\u0245\x05p9\x02\u0245\u0246\b7\x01\x02\u0246" + + "\u0257\x03\x02\x02\x02\u0247\u0248\f\x07\x02\x02\u0248\u0249\x05r:\x02" + + "\u0249\u024A\b7\x01\x02\u024A\u0257\x03\x02\x02\x02\u024B\u024C\f\x06" + + "\x02\x02\u024C\u024D\x05t;\x02\u024D\u024E\b7\x01\x02\u024E\u0257\x03" + + "\x02\x02\x02\u024F\u0250\f\x05\x02\x02\u0250\u0252\x07*\x02\x02\u0251" + + "\u0253\x05n8\x02\u0252\u0251\x03\x02\x02\x02\u0252\u0253\x03\x02\x02\x02" + + "\u0253\u0254\x03\x02\x02\x02\u0254\u0255\x07+\x02\x02\u0255\u0257\b7\x01" + + "\x02\u0256\u0243\x03\x02\x02\x02\u0256\u0247\x03\x02\x02\x02\u0256\u024B" + + "\x03\x02\x02\x02\u0256\u024F\x03\x02\x02\x02\u0257\u025A\x03\x02\x02\x02" + + "\u0258\u0256\x03\x02\x02\x02\u0258\u0259\x03\x02\x02\x02\u0259m\x03\x02" + + "\x02\x02\u025A\u0258\x03\x02\x02\x02\u025B\u0260\x05\xA4S\x02\u025C\u025D" + + "\x07&\x02\x02\u025D\u025F\x05\xA4S\x02\u025E\u025C\x03\x02\x02\x02\u025F" + + "\u0262\x03\x02\x02\x02\u0260\u025E\x03\x02\x02\x02\u0260\u0261\x03\x02" + + "\x02\x02\u0261o\x03\x02\x02\x02\u0262\u0260\x03\x02\x02\x02\u0263\u0264" + + "\x07O\x02\x02\u0264\u0265\x05V,\x02\u0265q\x03\x02\x02\x02\u0266\u0267" + + "\x07,\x02\x02\u0267\u0268\x05\xA8U\x02\u0268\u0269\x07-\x02\x02\u0269" + + "s\x03\x02\x02\x02\u026A\u026E\x07,\x02\x02\u026B\u026C\x05\xA8U\x02\u026C" + + "\u026D\b;\x01\x02\u026D\u026F\x03\x02\x02\x02\u026E\u026B\x03\x02\x02" + + "\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\x03\x02\x02\x02\u0270\u0274" + + "\x07)\x02\x02\u0271\u0272\x05\xA8U\x02\u0272\u0273\b;\x01\x02\u0273\u0275" + + "\x03\x02\x02\x02\u0274\u0271\x03\x02\x02\x02\u0274\u0275\x03\x02\x02\x02" + + "\u0275\u0276\x03\x02\x02\x02\u0276\u0277\x07-\x02\x02\u0277u\x03\x02\x02" + + "\x02\u0278\u027C\x05l7\x02\u0279\u027C\x05x=\x02\u027A\u027C\x05z>\x02" + + "\u027B\u0278\x03\x02\x02\x02\u027B\u0279\x03\x02\x02\x02\u027B\u027A\x03" + + "\x02\x02\x02\u027Cw\x03\x02\x02\x02\u027D\u027E\x05l7\x02\u027E\u027F" + + '\x05\x82B\x02\u027Fy\x03\x02\x02\x02\u0280\u0281\x07"\x02\x02\u0281\u0282' + + "\x05\xA4S\x02\u0282{\x03\x02\x02\x02\u0283\u0287\x05v<\x02\u0284\u0287" + + "\x05~@\x02\u0285\u0287\x05\x80A\x02\u0286\u0283\x03\x02\x02\x02\u0286" + + "\u0284\x03\x02\x02\x02\u0286\u0285\x03\x02\x02\x02\u0287}\x03\x02\x02" + + "\x02\u0288\u0289\x05\x82B\x02\u0289\u028A\x05v<\x02\u028A\x7F\x03\x02" + + "\x02\x02\u028B\u028C\x05\x84C\x02\u028C\u028D\x05v<\x02\u028D\x81\x03" + + "\x02\x02\x02\u028E\u028F\t\b\x02\x02\u028F\x83\x03\x02\x02\x02\u0290\u0291" + + "\t\t\x02\x02\u0291\x85\x03\x02\x02\x02\u0292\u0298\x05|?\x02\u0293\u0294" + + "\x05|?\x02\u0294\u0295\x07\n\x02\x02\u0295\u0296\x05\xAAV\x02\u0296\u0298" + + "\x03\x02\x02\x02\u0297\u0292\x03\x02\x02\x02\u0297\u0293\x03\x02\x02\x02" + + "\u0298\x87\x03\x02\x02\x02\u0299\u029A\bE\x01\x02\u029A\u029B\x05\x86" + + "D\x02\u029B\u02A1\x03\x02\x02\x02\u029C\u029D\f\x03\x02\x02\u029D\u029E" + + "\t\n\x02\x02\u029E\u02A0\x05\x86D\x02\u029F\u029C\x03\x02\x02\x02\u02A0" + + "\u02A3\x03\x02\x02\x02\u02A1\u029F\x03\x02\x02\x02\u02A1\u02A2\x03\x02" + + "\x02\x02\u02A2\x89\x03\x02\x02\x02\u02A3\u02A1\x03\x02\x02\x02\u02A4\u02A5" + + "\bF\x01\x02\u02A5\u02A6\x05\x88E\x02\u02A6\u02AC\x03\x02\x02\x02\u02A7" + + "\u02A8\f\x03\x02\x02\u02A8\u02A9\t\v\x02\x02\u02A9\u02AB\x05\x88E\x02" + + "\u02AA\u02A7\x03\x02\x02\x02\u02AB\u02AE\x03\x02\x02\x02\u02AC\u02AA\x03" + + "\x02\x02\x02\u02AC\u02AD\x03\x02\x02\x02\u02AD\x8B\x03\x02\x02\x02\u02AE" + + "\u02AC\x03\x02\x02\x02\u02AF\u02B0\bG\x01\x02\u02B0\u02B1\x05\x8AF\x02" + + "\u02B1\u02B8\x03\x02\x02\x02\u02B2\u02B3\f\x03\x02\x02\u02B3\u02B4\x05" + + "\x8EH\x02\u02B4\u02B5\x05\x98M\x02\u02B5\u02B7\x03\x02\x02\x02\u02B6\u02B2" + + "\x03\x02\x02\x02\u02B7\u02BA\x03\x02\x02\x02\u02B8\u02B6\x03\x02\x02\x02" + + "\u02B8\u02B9\x03\x02\x02\x02\u02B9\x8D\x03\x02\x02\x02\u02BA\u02B8\x03" + + "\x02\x02\x02\u02BB\u02BC\t\f\x02\x02\u02BC\x8F\x03\x02\x02\x02\u02BD\u02BE" + + "\bI\x01\x02\u02BE\u02BF\x05\x8CG\x02\u02BF\u02C5\x03\x02\x02\x02\u02C0" + + "\u02C1\f\x03\x02\x02\u02C1\u02C2\x07\x07\x02\x02\u02C2\u02C4\x05\xAAV" + + "\x02\u02C3\u02C0\x03\x02\x02\x02\u02C4\u02C7\x03\x02\x02\x02\u02C5\u02C3" + + "\x03\x02\x02\x02\u02C5\u02C6\x03\x02\x02\x02\u02C6\x91\x03\x02\x02\x02" + + "\u02C7\u02C5\x03\x02\x02\x02\u02C8\u02C9\bJ\x01\x02\u02C9\u02CA\x05\x90" + + "I\x02\u02CA\u02D0\x03\x02\x02\x02\u02CB\u02CC\f\x03\x02\x02\u02CC\u02CD" + + "\x07!\x02\x02\u02CD\u02CF\x05\xAAV\x02\u02CE\u02CB\x03\x02\x02\x02\u02CF" + + "\u02D2\x03\x02\x02\x02\u02D0\u02CE\x03\x02\x02\x02\u02D0\u02D1\x03\x02" + + "\x02\x02\u02D1\x93\x03\x02\x02\x02\u02D2\u02D0\x03\x02\x02\x02\u02D3\u02D4" + + "\bK\x01\x02\u02D4\u02D5\x05\x92J\x02\u02D5\u02DB\x03\x02\x02\x02\u02D6" + + "\u02D7\f\x03\x02\x02\u02D7\u02D8\t\r\x02\x02\u02D8\u02DA\x05\x94K\x04" + + "\u02D9\u02D6\x03\x02\x02\x02\u02DA\u02DD\x03\x02\x02\x02\u02DB\u02D9\x03" + + "\x02\x02\x02\u02DB\u02DC\x03\x02\x02\x02\u02DC\x95\x03\x02\x02\x02\u02DD" + + "\u02DB\x03\x02\x02\x02\u02DE\u02DF\bL\x01\x02\u02DF\u02E0\x05\x94K\x02" + + "\u02E0\u02E6\x03\x02\x02\x02\u02E1\u02E2\f\x03\x02\x02\u02E2\u02E3\t\x0E" + + "\x02\x02\u02E3\u02E5\x05\x94K\x02\u02E4\u02E1\x03\x02\x02\x02\u02E5\u02E8" + + "\x03\x02\x02\x02\u02E6\u02E4\x03\x02\x02\x02\u02E6\u02E7\x03\x02\x02\x02" + + "\u02E7\x97\x03\x02\x02\x02\u02E8\u02E6\x03\x02\x02\x02\u02E9\u02EA\bM" + + "\x01\x02\u02EA\u02EB\x05\x96L\x02\u02EB\u02F1\x03\x02\x02\x02\u02EC\u02ED" + + "\f\x03\x02\x02\u02ED\u02EE\x07H\x02\x02\u02EE\u02F0\x05\x96L\x02\u02EF" + + "\u02EC\x03\x02\x02\x02\u02F0\u02F3\x03\x02\x02\x02\u02F1\u02EF\x03\x02" + + "\x02\x02\u02F1\u02F2\x03\x02\x02\x02\u02F2\x99\x03\x02\x02\x02\u02F3\u02F1" + + "\x03\x02\x02\x02\u02F4\u02F5\bN\x01\x02\u02F5\u02F6\x05\x98M\x02\u02F6" + + "\u02FC\x03\x02\x02\x02\u02F7\u02F8\f\x03\x02\x02\u02F8\u02F9\x07J\x02" + + "\x02\u02F9\u02FB\x05\x98M\x02\u02FA\u02F7\x03\x02\x02\x02\u02FB\u02FE" + + "\x03\x02\x02\x02\u02FC\u02FA\x03\x02\x02\x02\u02FC\u02FD\x03\x02\x02\x02" + + "\u02FD\x9B\x03\x02\x02\x02\u02FE\u02FC\x03\x02\x02\x02\u02FF\u0300\bO" + + "\x01\x02\u0300\u0301\x05\x9AN\x02\u0301\u0307\x03\x02\x02\x02\u0302\u0303" + + "\f\x03\x02\x02\u0303\u0304\x07I\x02\x02\u0304\u0306\x05\x9AN\x02\u0305" + + "\u0302\x03\x02\x02\x02\u0306\u0309\x03\x02\x02\x02\u0307\u0305\x03\x02" + + "\x02\x02\u0307\u0308\x03\x02\x02\x02\u0308\x9D\x03\x02\x02\x02\u0309\u0307" + + "\x03\x02\x02\x02\u030A\u030B\bP\x01\x02\u030B\u030C\x05\x9CO\x02\u030C" + + "\u0312\x03\x02\x02\x02\u030D\u030E\f\x03\x02\x02\u030E\u030F\x079\x02" + + "\x02\u030F\u0311\x05\x9CO\x02\u0310\u030D\x03\x02\x02\x02\u0311\u0314" + + "\x03\x02\x02\x02\u0312\u0310\x03\x02\x02\x02\u0312\u0313\x03\x02\x02\x02" + + "\u0313\x9F\x03\x02\x02\x02\u0314\u0312\x03\x02\x02\x02\u0315\u0316\bQ" + + "\x01\x02\u0316\u0317\x05\x9EP\x02\u0317\u031D\x03\x02\x02\x02\u0318\u0319" + + "\f\x03\x02\x02\u0319\u031A\x07:\x02\x02\u031A\u031C\x05\x9EP\x02\u031B" + + "\u0318\x03\x02\x02\x02\u031C\u031F\x03\x02\x02\x02\u031D\u031B\x03\x02" + + "\x02\x02\u031D\u031E\x03\x02\x02\x02\u031E\xA1\x03\x02\x02\x02\u031F\u031D" + + "\x03\x02\x02\x02\u0320\u0328\x05\xA0Q\x02\u0321\u0322\x05\xA0Q\x02\u0322" + + "\u0323\x07(\x02\x02\u0323\u0324\x05\xA2R\x02\u0324\u0325\x07)\x02\x02" + + "\u0325\u0326\x05\xA2R\x02\u0326\u0328\x03\x02\x02\x02\u0327\u0320\x03" + + "\x02\x02\x02\u0327\u0321\x03\x02\x02\x02\u0328\xA3\x03\x02\x02\x02\u0329" + + "\u032F\x05\xA2R\x02\u032A\u032B\x05l7\x02\u032B\u032C\x05\xA6T\x02\u032C" + + "\u032D\x05\xA4S\x02\u032D\u032F\x03\x02\x02\x02\u032E\u0329\x03\x02\x02" + + "\x02\u032E\u032A\x03\x02\x02\x02\u032F\xA5\x03\x02\x02\x02\u0330\u0331" + + "\t\x0F\x02\x02\u0331\xA7\x03\x02\x02\x02\u0332\u0337\x05\xA4S\x02\u0333" + + "\u0334\x07&\x02\x02\u0334\u0336\x05\xA4S\x02\u0335\u0333\x03\x02\x02\x02" + + "\u0336\u0339\x03\x02\x02\x02\u0337\u0335\x03\x02\x02\x02\u0337\u0338\x03" + + "\x02\x02\x02\u0338\xA9\x03\x02\x02\x02\u0339\u0337\x03\x02\x02\x02\u033A" + + "\u033E\x05\xACW\x02\u033B\u033E\x05\xAEX\x02\u033C\u033E\x05\xB0Y\x02" + + "\u033D\u033A\x03\x02\x02\x02\u033D\u033B\x03\x02\x02\x02\u033D\u033C\x03" + + "\x02\x02\x02\u033E\xAB\x03\x02\x02\x02\u033F\u0340\x05\xB2Z\x02\u0340" + + "\xAD\x03\x02\x02\x02\u0341\u0342\x05\xB2Z\x02\u0342\u034B\x07D\x02\x02" + + "\u0343\u0348\x05\xAAV\x02\u0344\u0345\x07&\x02\x02\u0345\u0347\x05\xAA" + + "V\x02\u0346\u0344\x03\x02\x02\x02\u0347\u034A\x03\x02\x02\x02\u0348\u0346" + + "\x03\x02\x02\x02\u0348\u0349\x03\x02\x02\x02\u0349\u034C\x03\x02\x02\x02" + + "\u034A\u0348\x03\x02\x02\x02\u034B\u0343\x03\x02\x02\x02\u034B\u034C\x03" + + "\x02\x02\x02\u034C\u034D\x03\x02\x02\x02\u034D\u034E\x07F\x02\x02\u034E" + + '\xAF\x03\x02\x02\x02\u034F\u0350\x07"\x02\x02\u0350\u0351\x07*\x02\x02' + + "\u0351\u0352\x05\xB2Z\x02\u0352\u0353\x07+\x02\x02\u0353\xB1\x03\x02\x02" + + "\x02\u0354\u0355\t\x10\x02\x02\u0355\xB3\x03\x02\x02\x02Q\xB5\xBC\xC3" + + "\xC8\xD0\xDC\xE8\xEE\xF5\u0102\u0109\u0113\u011F\u0121\u0129\u0132\u0138" + + "\u013D\u0148\u014D\u0154\u0158\u0161\u016A\u0174\u0181\u0186\u018C\u0190" + + "\u0196\u019C\u01B4\u01C2\u01C7\u01CF\u01DF\u01E7\u01EF\u01F3\u01F8\u01FB" + + "\u0200\u0203\u020D\u0210\u0213\u021D\u0220\u0223\u0233\u023C\u0241\u0252" + + "\u0256\u0258\u0260\u026E\u0274\u027B\u0286\u0297\u02A1\u02AC\u02B8\u02C5" + + "\u02D0\u02DB\u02E6\u02F1\u02FC\u0307\u0312\u031D\u0327\u032E\u0337\u033D" + + "\u0348\u034B"; public static readonly _serializedATN: string = Utils.join( [KipperParser._serializedATNSegment0, KipperParser._serializedATNSegment1], "", diff --git a/kipper/core/src/compiler/lexer-parser/antlr/base/KipperParserBase.ts b/kipper/core/src/compiler/lexer-parser/antlr/base/KipperParserBase.ts index 7266d66c4..5cc0d1b1c 100644 --- a/kipper/core/src/compiler/lexer-parser/antlr/base/KipperParserBase.ts +++ b/kipper/core/src/compiler/lexer-parser/antlr/base/KipperParserBase.ts @@ -2,26 +2,40 @@ import { Parser } from "antlr4ts/Parser"; import type { TokenStream } from "antlr4ts/TokenStream"; export default abstract class KipperParserBase extends Parser { - private insideExpression: boolean; + private _insideExpression: boolean; + private _insideLambda: boolean; protected constructor(input: TokenStream) { super(input); - this.insideExpression = false; + this._insideExpression = false; + this._insideLambda = false; } protected insideExpressionStatement(): boolean { - return this.insideExpression; + return this._insideExpression; } protected notInsideExpressionStatement(): boolean { - return !this.insideExpression; + return !this._insideExpression; + } + + protected insideLambda(): boolean { + return this._insideExpression && this._insideLambda; } protected enterExpressionStatement(): void { - this.insideExpression = true; + this._insideExpression = true; } protected exitExpressionStatement(): void { - this.insideExpression = false; + this._insideExpression = false; + } + + protected enterLambda(): void { + this._insideLambda = true; + } + + protected exitLambda(): void { + this._insideLambda = false; } } From a1ab7c05f0f15767267499a431f2c3bfa2e1f4c9 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 13:59:31 +0200 Subject: [PATCH 72/81] other: Added test for nested expressions with a lambda with a compound body --- test/module/core/core-functionality.test.ts | 30 +++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index ea554eff6..d7e0d02e1 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1469,6 +1469,36 @@ describe("Core functionality", () => { stringResult, ); }); + + describe("can use a lambda as a direct value in a function", () => { + it("using a lambda with an expression body", async () => { + const code = `var greet: Func = (): str -> "Hello, World!"; print(greet());`; + const result = await compiler.compile(code, jsConfig); + + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, World!", "Expected different output"), + stringResult, + ); + }); + + it("using a lambda with a compound statement body", async () => { + const code = `var greet: Func = (): str -> { return "Hello, World!"; }; print(greet());`; + const result = await compiler.compile(code, jsConfig); + + assert.isDefined(result.programCtx); + assert.deepEqual(result.programCtx?.errors, [], "Expected no compilation errors"); + const stringResult = result.write(); + + testPrintOutput( + (message: any) => assert.equal(message, "Hello, World!", "Expected different output"), + stringResult, + ); + }); + }) }); describe("Functions", () => { From 17c2ff65ea69321e86e05ba48a09142719fe4fc1 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 14:03:14 +0200 Subject: [PATCH 73/81] other: Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b6e809e2..e42740763 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -197,6 +197,7 @@ To use development versions of Kipper download the self-referential types and type checking of recursive types i.e. the return statement now knows the type of its function even though it is not yet fully processed. - Duplicate universe entry registration in the `KipperProgramContext` for built-in types, functions and variables. +- Bug where lambda compound bodies would cause a syntax error, despite being a valid lambda body. ### Deprecated From 267645ce77c3ed80330f048d6494b39a179de381 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 14:05:43 +0200 Subject: [PATCH 74/81] release: Bumped Kipper project version to 0.12.0-beta.0 --- CITATION.cff | 10 +++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index e189cb40c..91cf80a2e 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.6 - description: The GitHub release URL of tag 0.12.0-alpha.6 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-beta.0 + description: The GitHub release URL of tag 0.12.0-beta.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/LICENSE' -version: 0.12.0-alpha.6 -date-released: '2024-09-17' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/LICENSE' +version: 0.12.0-beta.0 +date-released: '2024-09-18' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 6ab81eabd..130781bc7 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 34cc000e6..fe48680b8 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 49a3af9e4..83e238d9b 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 49d343e86..021434150 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index ffae0578f..9f3168c9c 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -14,7 +14,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 00d199038..e4915b63f 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From a670a727f7a4a1336c6fe757ce6e9cf03a136bcd Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 14:05:43 +0200 Subject: [PATCH 75/81] other: Added missing comma in core-functionality.test.ts --- CITATION.cff | 10 +++++----- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- test/module/core/core-functionality.test.ts | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index e189cb40c..91cf80a2e 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-alpha.6 - description: The GitHub release URL of tag 0.12.0-alpha.6 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-beta.0 + description: The GitHub release URL of tag 0.12.0-beta.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/LICENSE' -version: 0.12.0-alpha.6 -date-released: '2024-09-17' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/LICENSE' +version: 0.12.0-beta.0 +date-released: '2024-09-18' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 6ab81eabd..130781bc7 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index 34cc000e6..fe48680b8 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 49a3af9e4..83e238d9b 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 49d343e86..021434150 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index ffae0578f..9f3168c9c 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -14,7 +14,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 00d199038..e4915b63f 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-alpha.6"; +export const version = "0.12.0-beta.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/test/module/core/core-functionality.test.ts b/test/module/core/core-functionality.test.ts index d7e0d02e1..b52576473 100644 --- a/test/module/core/core-functionality.test.ts +++ b/test/module/core/core-functionality.test.ts @@ -1498,7 +1498,7 @@ describe("Core functionality", () => { stringResult, ); }); - }) + }); }); describe("Functions", () => { From 3bcb2ff205f9e389211c412b863989c1d4bb8b51 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 14:10:45 +0200 Subject: [PATCH 76/81] Release 0.12.0-beta.0 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index c38a49776..267d0e294 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-alpha.6 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0-beta.0 linux-x64 node-v18.20.4 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-alpha.6/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index c25acf53d..d143d8de8 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index 80d4d9ede..e576cd1df 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 3c6ce98e4..688f9a4a3 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 9ccca71e7..796750bbc 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 673b92a03..897614bde 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index d9dfc8efd..c3dc826fb 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index 33df58688..ad3458ba1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-alpha.6", + "version": "0.12.0-beta.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 69d507873014a01d54c46722fa4b0a0087e48fe6 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 14:41:54 +0200 Subject: [PATCH 77/81] release: Bumped Kipper project version to 0.12.0-rc.0 --- CITATION.cff | 8 ++++---- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 91cf80a2e..a822344f1 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-beta.0 - description: The GitHub release URL of tag 0.12.0-beta.0 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-rc.0 + description: The GitHub release URL of tag 0.12.0-rc.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/LICENSE' -version: 0.12.0-beta.0 +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/LICENSE' +version: 0.12.0-rc.0 date-released: '2024-09-18' diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 130781bc7..2da1e7aae 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index fe48680b8..b7cadd39d 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 83e238d9b..8aa7bafdf 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 021434150..529e2e9de 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 9f3168c9c..6683bab84 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -14,7 +14,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index e4915b63f..6198dad31 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-beta.0"; +export const version = "0.12.0-rc.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From b146a37be66d51a57e009c8d279249aafbdfcdf8 Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 18 Sep 2024 19:43:27 +0200 Subject: [PATCH 78/81] Release 0.12.0-rc.0 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 92088d206..0884aee38 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-beta.0 linux-x64 node-v18.20.4 +@kipper/cli/0.12.0-rc.0 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-beta.0/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index d143d8de8..c26be4ab1 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index e576cd1df..ab3470b39 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 688f9a4a3..7ba9153b5 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 796750bbc..5d6f10011 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 897614bde..2f0be2c60 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index c3dc826fb..31a560374 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index ad3458ba1..ac65afc4a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-beta.0", + "version": "0.12.0-rc.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 02562ee69ec7041c46e4df16fbd85c0b3abcf8da Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 25 Sep 2024 22:02:56 +0200 Subject: [PATCH 79/81] release: Bumped Kipper project version to 0.12.0 --- CHANGELOG.md | 21 ++++++++++++++++----- CITATION.cff | 10 +++++----- kipper/cli/README.md | 21 +++++++++++++-------- kipper/cli/src/index.ts | 2 +- kipper/config/src/index.ts | 2 +- kipper/core/src/index.ts | 2 +- kipper/index.ts | 2 +- kipper/target-js/src/index.ts | 2 +- kipper/target-ts/src/index.ts | 2 +- 9 files changed, 40 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e42740763..5714d2e93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,20 @@ To use development versions of Kipper download the ### Added +### Changed + +### Fixed + +### Deprecated + +### Removed + + + +## [0.12.0] - 2024-09-25 + +### Added + - Support for dot notation for accessing properties of objects. ([#67](https://github.com/Kipper-Lang/Kipper/issues/67)) - Support for classes, class methods, class properties and class constructors. ([#665](https://github.com/Kipper-Lang/Kipper/issues/665)) @@ -199,8 +213,6 @@ To use development versions of Kipper download the - Duplicate universe entry registration in the `KipperProgramContext` for built-in types, functions and variables. - Bug where lambda compound bodies would cause a syntax error, despite being a valid lambda body. -### Deprecated - ### Removed - Type `Reference` as it is no longer needed and has been replaced by `KipperReferenceable`. @@ -208,8 +220,6 @@ To use development versions of Kipper download the - Function `KipperProgramContext.setUpBuiltInsInGlobalScope()`, which is no longer needed as the universe scope now handles all built-in types, functions and variables. - - ## [0.11.0] - 2024-07-10 ### Added @@ -1596,7 +1606,8 @@ To use development versions of Kipper download the - Updated file structure to separate `commands` (for `oclif`) and `compiler` (for the compiler source-code) -[unreleased]: https://github.com/Kipper-Lang/Kipper/compare/v0.11.0...HEAD +[unreleased]: https://github.com/Kipper-Lang/Kipper/compare/v0.12.0...HEAD +[0.12.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.4...v0.11.0 [0.10.4]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.3...v0.10.4 [0.10.3]: https://github.com/Kipper-Lang/Kipper/compare/v0.10.2...v0.10.3 diff --git a/CITATION.cff b/CITATION.cff index a822344f1..43bd1b3d4 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -21,8 +21,8 @@ authors: identifiers: - type: url value: >- - https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0-rc.0 - description: The GitHub release URL of tag 0.12.0-rc.0 + https://github.com/Kipper-Lang/Kipper/releases/tag/v0.12.0 + description: The GitHub release URL of tag 0.12.0 repository-code: 'https://github.com/Kipper-Lang/Kipper/' url: 'https://kipper-lang.org' abstract: >- @@ -39,6 +39,6 @@ keywords: - oop-programming - type-safety license: GPL-3.0-or-later -license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/LICENSE' -version: 0.12.0-rc.0 -date-released: '2024-09-18' +license-url: 'https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/LICENSE' +version: 0.12.0 +date-released: '2024-09-25' diff --git a/kipper/cli/README.md b/kipper/cli/README.md index 0884aee38..ca004a8bc 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper diff --git a/kipper/cli/src/index.ts b/kipper/cli/src/index.ts index 2da1e7aae..ffe9d5a1b 100644 --- a/kipper/cli/src/index.ts +++ b/kipper/cli/src/index.ts @@ -13,7 +13,7 @@ export * from "./output/compile"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/cli"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/config/src/index.ts b/kipper/config/src/index.ts index b7cadd39d..db2348bdc 100644 --- a/kipper/config/src/index.ts +++ b/kipper/config/src/index.ts @@ -12,7 +12,7 @@ export * from "./evaluated-kipper-config-file"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/config"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/core/src/index.ts b/kipper/core/src/index.ts index 8aa7bafdf..c4b7e150e 100644 --- a/kipper/core/src/index.ts +++ b/kipper/core/src/index.ts @@ -17,7 +17,7 @@ export * as utils from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/core"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/index.ts b/kipper/index.ts index 529e2e9de..40352fe10 100644 --- a/kipper/index.ts +++ b/kipper/index.ts @@ -13,7 +13,7 @@ export * from "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars export const name = "kipper"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-js/src/index.ts b/kipper/target-js/src/index.ts index 6683bab84..fce744b2d 100644 --- a/kipper/target-js/src/index.ts +++ b/kipper/target-js/src/index.ts @@ -14,7 +14,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-js"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars diff --git a/kipper/target-ts/src/index.ts b/kipper/target-ts/src/index.ts index 6198dad31..284f32921 100644 --- a/kipper/target-ts/src/index.ts +++ b/kipper/target-ts/src/index.ts @@ -13,7 +13,7 @@ export * from "./tools"; // eslint-disable-next-line no-unused-vars export const name = "@kipper/target-ts"; // eslint-disable-next-line no-unused-vars -export const version = "0.12.0-rc.0"; +export const version = "0.12.0"; // eslint-disable-next-line no-unused-vars export const author = "Luna Klatzer"; // eslint-disable-next-line no-unused-vars From cbf3abc99df71b69086628e5c47e8b866aa7f97a Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Wed, 25 Sep 2024 22:04:58 +0200 Subject: [PATCH 80/81] Release 0.12.0 --- kipper/cli/README.md | 33 ++++++++++++++------------------- kipper/cli/package.json | 2 +- kipper/config/package.json | 2 +- kipper/core/package.json | 2 +- kipper/target-js/package.json | 2 +- kipper/target-ts/package.json | 2 +- kipper/web/package.json | 2 +- package.json | 2 +- 8 files changed, 21 insertions(+), 26 deletions(-) diff --git a/kipper/cli/README.md b/kipper/cli/README.md index ca004a8bc..c9068e98a 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,10 +22,9 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) - -- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -- [Usage](#usage) -- [Commands](#commands) +* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +* [Usage](#usage) +* [Commands](#commands) ## General Information @@ -40,30 +39,27 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage - ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND running command... $ kipper (--version) -@kipper/cli/0.12.0-rc.0 linux-x64 node-v20.15.0 +@kipper/cli/0.12.0 linux-x64 node-v20.15.0 $ kipper --help [COMMAND] USAGE $ kipper COMMAND ... ``` - # Commands - -- [`kipper compile [FILE]`](#kipper-compile-file) -- [`kipper help [COMMAND]`](#kipper-help-command) -- [`kipper new [LOCATION]`](#kipper-new-location) -- [`kipper run [FILE]`](#kipper-run-file) -- [`kipper version`](#kipper-version) +* [`kipper compile [FILE]`](#kipper-compile-file) +* [`kipper help [COMMAND]`](#kipper-help-command) +* [`kipper new [LOCATION]`](#kipper-new-location) +* [`kipper run [FILE]`](#kipper-run-file) +* [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -115,7 +111,7 @@ EXAMPLES kipper compile -t ts ./path/to/file.kip -o build/ -e utf16le --warnings --log-timestamp ``` -_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/compile.ts)_ +_See code: [src/commands/compile.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/compile.ts)_ ## `kipper help [COMMAND]` @@ -132,7 +128,7 @@ OPTIONS --all see all commands in CLI ``` -_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/help.ts)_ +_See code: [src/commands/help.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/help.ts)_ ## `kipper new [LOCATION]` @@ -149,7 +145,7 @@ OPTIONS -d, --default Use the default settings for the new project. Skips the setup wizard. ``` -_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/new.ts)_ +_See code: [src/commands/new.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/new.ts)_ ## `kipper run [FILE]` @@ -194,7 +190,7 @@ EXAMPLES kipper run -t ts -o build/ -e utf8 -s "print('Hello, World!');" --warnings --log-timestamp ``` -_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/run.ts)_ +_See code: [src/commands/run.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/run.ts)_ ## `kipper version` @@ -205,8 +201,7 @@ USAGE $ kipper version ``` -_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0-rc.0/kipper/cli/src/commands/version.ts)_ - +_See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/version.ts)_ ## Contributing to Kipper diff --git a/kipper/cli/package.json b/kipper/cli/package.json index c26be4ab1..5376c7d49 100644 --- a/kipper/cli/package.json +++ b/kipper/cli/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/cli", "description": "The Kipper Command Line Interface (CLI).", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "bin": { "kipper": "./bin/run", diff --git a/kipper/config/package.json b/kipper/config/package.json index ab3470b39..f9dc4f863 100644 --- a/kipper/config/package.json +++ b/kipper/config/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/config", "description": "The config file support package adding support for kip-config.json/kipper-config.json 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "is-plain-object": "5.0.0", diff --git a/kipper/core/package.json b/kipper/core/package.json index 7ba9153b5..1218da21c 100644 --- a/kipper/core/package.json +++ b/kipper/core/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/core", "description": "The core implementation of the Kipper compiler 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "antlr4ts": "^0.5.0-alpha.4", diff --git a/kipper/target-js/package.json b/kipper/target-js/package.json index 5d6f10011..a3c533095 100644 --- a/kipper/target-js/package.json +++ b/kipper/target-js/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-js", "description": "The JavaScript target for the Kipper compiler 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/core": "workspace:~", diff --git a/kipper/target-ts/package.json b/kipper/target-ts/package.json index 2f0be2c60..a1cfefba4 100644 --- a/kipper/target-ts/package.json +++ b/kipper/target-ts/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/target-ts", "description": "The TypeScript target for the Kipper compiler 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/target-js": "workspace:~", diff --git a/kipper/web/package.json b/kipper/web/package.json index 31a560374..8fb4a9184 100644 --- a/kipper/web/package.json +++ b/kipper/web/package.json @@ -1,7 +1,7 @@ { "name": "@kipper/web", "description": "The standalone web-module for the Kipper compiler 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "devDependencies": { "@kipper/target-js": "workspace:~", diff --git a/package.json b/package.json index ac65afc4a..6741d1145 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kipper", "description": "The Kipper programming language and compiler 🦊", - "version": "0.12.0-rc.0", + "version": "0.12.0", "author": "Luna-Klatzer @Luna-Klatzer", "dependencies": { "@kipper/cli": "workspace:~", From 393c994ade765f9bfe117e386d8ba9d477bd257b Mon Sep 17 00:00:00 2001 From: Luna-Klatzer Date: Fri, 27 Sep 2024 11:37:54 +0200 Subject: [PATCH 81/81] fix: Fixed tag character bug in CITATION.cff --- .editorconfig | 4 ++++ CITATION.cff | 8 ++++---- kipper/cli/README.md | 21 +++++++++++++-------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.editorconfig b/.editorconfig index 67d639448..2355b967a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -18,3 +18,7 @@ indent_size = 4 [CHANGELOG.md] indent_size = 2 max_line_length = 120 + +[CITATION.cff] +indent_style = space +ident_size = 2 diff --git a/CITATION.cff b/CITATION.cff index 43bd1b3d4..3b1930b13 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -11,12 +11,12 @@ authors: affiliation: HTL Leonding orcid: 'https://orcid.org/0009-0001-5332-8988' - given-names: Lorenz - family-names: Holzbauer - email: l.holzbauer@students.htl-leonding.ac.at + family-names: Holzbauer + email: l.holzbauer@students.htl-leonding.ac.at affiliation: HTL Leonding - given-names: Fabian - family-names: Baitura - email: f.baitura@students.htl-leonding.ac.at + family-names: Baitura + email: f.baitura@students.htl-leonding.ac.at affiliation: HTL Leonding identifiers: - type: url diff --git a/kipper/cli/README.md b/kipper/cli/README.md index c9068e98a..0e114949a 100644 --- a/kipper/cli/README.md +++ b/kipper/cli/README.md @@ -22,9 +22,10 @@ and the [Kipper website](https://kipper-lang.org)._ [![DOI](https://zenodo.org/badge/411260595.svg)](https://zenodo.org/badge/latestdoi/411260595) -* [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) -* [Usage](#usage) -* [Commands](#commands) + +- [Kipper CLI - `@kipper/cli` 🦊✨](#kipper-cli---kippercli-) +- [Usage](#usage) +- [Commands](#commands) ## General Information @@ -39,6 +40,7 @@ and the [Kipper website](https://kipper-lang.org)._ # Usage + ```sh-session $ npm install -g @kipper/cli $ kipper COMMAND @@ -50,16 +52,18 @@ USAGE $ kipper COMMAND ... ``` + # Commands -* [`kipper compile [FILE]`](#kipper-compile-file) -* [`kipper help [COMMAND]`](#kipper-help-command) -* [`kipper new [LOCATION]`](#kipper-new-location) -* [`kipper run [FILE]`](#kipper-run-file) -* [`kipper version`](#kipper-version) + +- [`kipper compile [FILE]`](#kipper-compile-file) +- [`kipper help [COMMAND]`](#kipper-help-command) +- [`kipper new [LOCATION]`](#kipper-new-location) +- [`kipper run [FILE]`](#kipper-run-file) +- [`kipper version`](#kipper-version) ## `kipper compile [FILE]` @@ -202,6 +206,7 @@ USAGE ``` _See code: [src/commands/version.ts](https://github.com/Kipper-Lang/Kipper/blob/v0.12.0/kipper/cli/src/commands/version.ts)_ + ## Contributing to Kipper