diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs index 6b1de2883e..448b8f4ca6 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs @@ -183,9 +183,9 @@ public override SqlObject VisitSelect_item([NotNull] sqlParser.Select_itemContex SqlScalarExpression sqlScalarExpression = (SqlScalarExpression)this.Visit(context.scalar_expression()); SqlIdentifier alias; - if (context.IDENTIFIER() != null) + if (context.identifier() != null) { - alias = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + alias = SqlIdentifier.Create(context.identifier().GetText()); } else { @@ -233,9 +233,9 @@ public override SqlObject VisitAliasedCollectionExpression([NotNull] sqlParser.A SqlCollection sqlCollection = (SqlCollection)this.Visit(context.collection()); SqlIdentifier alias; - if (context.IDENTIFIER() != null) + if (context.identifier() != null) { - alias = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + alias = SqlIdentifier.Create(context.identifier().GetText()); } else { @@ -250,7 +250,7 @@ public override SqlObject VisitArrayIteratorCollectionExpression([NotNull] sqlPa Contract.Requires(context != null); SqlCollection sqlCollection = (SqlCollection)this.Visit(context.collection()); - SqlIdentifier identifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier identifier = SqlIdentifier.Create(context.identifier().GetText()); return SqlArrayIteratorCollectionExpression.Create(identifier, sqlCollection); } @@ -269,7 +269,7 @@ public override SqlObject VisitInputPathCollection([NotNull] sqlParser.InputPath { Contract.Requires(context != null); - SqlIdentifier identifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier identifier = SqlIdentifier.Create(context.identifier().GetText()); SqlPathExpression pathExpression; if (context.path_expression() != null) { @@ -302,7 +302,7 @@ public override SqlObject VisitIdentifierPathExpression([NotNull] sqlParser.Iden Contract.Requires(context != null); SqlPathExpression pathExpression = (SqlPathExpression)this.Visit(context.path_expression()); - SqlIdentifier identifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier identifier = SqlIdentifier.Create(context.identifier().GetText()); return SqlIdentifierPathExpression.Create(parentPath: pathExpression, value: identifier); } @@ -458,6 +458,15 @@ public override SqlObject VisitLimit_count([NotNull] sqlParser.Limit_countContex #endregion #region ScalarExpressions + public override SqlObject VisitAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context) + { + Contract.Requires(context != null); + // K_ALL '(' sql_query ')' + Contract.Requires(context.ChildCount == 4); + + SqlQuery subquery = (SqlQuery)this.Visit(context.children[2]); + return SqlAllScalarExpression.Create(subquery); + } public override SqlObject VisitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { Contract.Requires(context != null); @@ -562,10 +571,34 @@ public override SqlObject VisitExistsScalarExpression([NotNull] sqlParser.Exists public override SqlObject VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { Contract.Requires(context != null); - // (K_UDF '.')? IDENTIFIER '(' scalar_expression_list? ')' + // function_call_scalar_expression + + return this.Visit(context.function_call_scalar_expression()); + } + + public override SqlObject VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) + { + Contract.Requires(context != null); + // : (K_UDF '.')? identifier '(' scalar_expression_list ? ')' + // | K_LEFT '(' scalar_expression_list ? ')' + // | K_RIGHT '(' scalar_expression_list ? ')' bool udf = context.K_UDF() != null; - SqlIdentifier identifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier identifier; + + if (context.identifier() != null) + { + identifier = SqlIdentifier.Create(context.identifier().GetText()); + } + else if (context.K_LEFT() != null) + { + identifier = SqlIdentifier.Create(context.K_LEFT().GetText()); + } + else + { + identifier = SqlIdentifier.Create(context.K_RIGHT().GetText()); + } + List arguments = new List(); if (context.scalar_expression_list() != null) { @@ -719,20 +752,20 @@ public override SqlObject VisitParameterRefScalarExpression([NotNull] sqlParser. public override SqlObject VisitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { Contract.Requires(context != null); - // IDENTIFIER + // identifier return SqlPropertyRefScalarExpression.Create( member: null, - SqlIdentifier.Create(context.IDENTIFIER().GetText())); + SqlIdentifier.Create(context.identifier().GetText())); } public override SqlObject VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { Contract.Requires(context != null); - // primary_expression '.' IDENTIFIER + // primary_expression '.' identifier SqlScalarExpression memberExpression = (SqlScalarExpression)this.Visit(context.primary_expression()); - SqlIdentifier indentifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier indentifier = SqlIdentifier.Create(context.identifier().GetText()); return SqlPropertyRefScalarExpression.Create(memberExpression, indentifier); } diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs index ed0eb42e76..24a4a0694a 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs @@ -526,101 +526,125 @@ internal interface IsqlListener : IParseTreeListener { /// The parse tree. void ExitUnary_operator([NotNull] sqlParser.Unary_operatorContext context); /// - /// Enter a parse tree produced by the SubqueryScalarExpression + /// Enter a parse tree produced by the AllScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); + void EnterAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context); /// - /// Exit a parse tree produced by the SubqueryScalarExpression + /// Exit a parse tree produced by the AllScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); + void ExitAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context); /// - /// Enter a parse tree produced by the PropertyRefScalarExpressionBase + /// Enter a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); + void EnterLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); /// - /// Exit a parse tree produced by the PropertyRefScalarExpressionBase + /// Exit a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); + void ExitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); /// - /// Enter a parse tree produced by the FunctionCallScalarExpression + /// Enter a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); + void EnterObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); /// - /// Exit a parse tree produced by the FunctionCallScalarExpression + /// Exit a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); + void ExitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); /// - /// Enter a parse tree produced by the LiteralScalarExpression + /// Enter a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); + void EnterArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); /// - /// Exit a parse tree produced by the LiteralScalarExpression + /// Exit a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); + void ExitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); /// - /// Enter a parse tree produced by the ObjectCreateScalarExpression + /// Enter a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); + void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); /// - /// Exit a parse tree produced by the ObjectCreateScalarExpression + /// Exit a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); + void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); /// - /// Enter a parse tree produced by the ParenthesizedScalarExperession + /// Enter a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + void EnterSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); /// - /// Exit a parse tree produced by the ParenthesizedScalarExperession + /// Exit a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + void ExitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); /// - /// Enter a parse tree produced by the ParameterRefScalarExpression + /// Enter a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// /// The parse tree. - void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); + void EnterPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); /// - /// Exit a parse tree produced by the ParameterRefScalarExpression + /// Exit a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// /// The parse tree. - void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); + void ExitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); /// - /// Enter a parse tree produced by the ArrayCreateScalarExpression + /// Enter a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); + void EnterFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); /// - /// Exit a parse tree produced by the ArrayCreateScalarExpression + /// Exit a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); + void ExitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); + /// + /// Enter a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// + /// The parse tree. + void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + /// + /// Exit a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// + /// The parse tree. + void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + /// + /// Enter a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); + /// + /// Exit a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); /// /// Enter a parse tree produced by the ExistsScalarExpression /// labeled alternative in . @@ -646,29 +670,27 @@ internal interface IsqlListener : IParseTreeListener { /// The parse tree. void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); /// - /// Enter a parse tree produced by the MemberIndexerScalarExpression + /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// /// The parse tree. - void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); /// - /// Exit a parse tree produced by the MemberIndexerScalarExpression + /// Exit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// /// The parse tree. - void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); /// - /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Enter a parse tree produced by . /// /// The parse tree. - void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); + void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context); /// - /// Exit a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Exit a parse tree produced by . /// /// The parse tree. - void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); + void ExitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context); /// /// Enter a parse tree produced by . /// @@ -700,6 +722,16 @@ internal interface IsqlListener : IParseTreeListener { /// The parse tree. void ExitObject_property([NotNull] sqlParser.Object_propertyContext context); /// + /// Enter a parse tree produced by . + /// + /// The parse tree. + void EnterIdentifier([NotNull] sqlParser.IdentifierContext context); + /// + /// Exit a parse tree produced by . + /// + /// The parse tree. + void ExitIdentifier([NotNull] sqlParser.IdentifierContext context); + /// /// Enter a parse tree produced by . /// /// The parse tree. diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs index 2e96892783..e22a9d4218 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs @@ -326,61 +326,75 @@ internal interface IsqlVisitor : IParseTreeVisitor { /// The visitor result. Result VisitUnary_operator([NotNull] sqlParser.Unary_operatorContext context); /// - /// Visit a parse tree produced by the SubqueryScalarExpression + /// Visit a parse tree produced by the AllScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); + Result VisitAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context); /// - /// Visit a parse tree produced by the PropertyRefScalarExpressionBase + /// Visit a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); + Result VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); /// - /// Visit a parse tree produced by the FunctionCallScalarExpression + /// Visit a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); + Result VisitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); /// - /// Visit a parse tree produced by the LiteralScalarExpression + /// Visit a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context); + Result VisitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); /// - /// Visit a parse tree produced by the ObjectCreateScalarExpression + /// Visit a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context); + Result VisitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); /// - /// Visit a parse tree produced by the ParenthesizedScalarExperession + /// Visit a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + Result VisitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context); /// - /// Visit a parse tree produced by the ParameterRefScalarExpression + /// Visit a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); + Result VisitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context); /// - /// Visit a parse tree produced by the ArrayCreateScalarExpression + /// Visit a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context); + Result VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context); + /// + /// Visit a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); + /// + /// Visit a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); /// /// Visit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . @@ -396,19 +410,18 @@ internal interface IsqlVisitor : IParseTreeVisitor { /// The visitor result. Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); /// - /// Visit a parse tree produced by the MemberIndexerScalarExpression + /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); /// - /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Visit a parse tree produced by . /// /// The parse tree. /// The visitor result. - Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); + Result VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context); /// /// Visit a parse tree produced by . /// @@ -428,6 +441,12 @@ internal interface IsqlVisitor : IParseTreeVisitor { /// The visitor result. Result VisitObject_property([NotNull] sqlParser.Object_propertyContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitIdentifier([NotNull] sqlParser.IdentifierContext context); + /// /// Visit a parse tree produced by . /// /// The parse tree. diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 index ef9361f67b..42ac229557 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 @@ -1,8 +1,8 @@ grammar sql; program - : sql_query EOF - ; + : sql_query EOF + ; sql_query : select_clause from_clause? where_clause? group_by_clause? order_by_clause? offset_limit_clause? ; @@ -12,14 +12,14 @@ sql_query : select_clause from_clause? where_clause? group_by_clause? order_by_c select_clause : K_SELECT K_DISTINCT? top_spec? selection ; top_spec : K_TOP (NUMERIC_LITERAL | PARAMETER); selection - : select_star_spec - | select_value_spec - | select_list_spec - ; + : select_star_spec + | select_value_spec + | select_list_spec + ; select_star_spec : '*' ; select_value_spec : K_VALUE scalar_expression ; select_list_spec : select_item ( ',' select_item )* ; -select_item : scalar_expression (K_AS IDENTIFIER)? ; +select_item : scalar_expression (K_AS identifier)? ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ @@ -27,20 +27,20 @@ select_item : scalar_expression (K_AS IDENTIFIER)? ; /*--------------------------------------------------------------------------------*/ from_clause : K_FROM collection_expression ; collection_expression - : collection (K_AS? IDENTIFIER)? #AliasedCollectionExpression - | IDENTIFIER K_IN collection #ArrayIteratorCollectionExpression - | collection_expression K_JOIN collection_expression #JoinCollectionExpression - ; + : collection (K_AS? identifier)? #AliasedCollectionExpression + | identifier K_IN collection #ArrayIteratorCollectionExpression + | collection_expression K_JOIN collection_expression #JoinCollectionExpression + ; collection - : IDENTIFIER path_expression? #InputPathCollection - | '(' sql_query ')' #SubqueryCollection - ; + : identifier path_expression? #InputPathCollection + | '(' sql_query ')' #SubqueryCollection + ; path_expression - : path_expression'.'IDENTIFIER #IdentifierPathExpression - | path_expression'[' NUMERIC_LITERAL ']' #NumberPathExpression - | path_expression'[' STRING_LITERAL ']' #StringPathExpression - | /*epsilon*/ #EpsilonPathExpression - ; + : path_expression'.'identifier #IdentifierPathExpression + | path_expression'[' NUMERIC_LITERAL ']' #NumberPathExpression + | path_expression'[' STRING_LITERAL ']' #StringPathExpression + | /*epsilon*/ #EpsilonPathExpression + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ @@ -62,9 +62,9 @@ order_by_clause : K_ORDER K_BY order_by_items ; order_by_items : order_by_item (',' order_by_item)* ; order_by_item : scalar_expression sort_order? ; sort_order - : K_ASC - | K_DESC - ; + : K_ASC + | K_DESC + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ @@ -79,66 +79,66 @@ limit_count : NUMERIC_LITERAL | PARAMETER; /* SCALAR EXPRESSIONs */ /*--------------------------------------------------------------------------------*/ scalar_expression - : scalar_expression '?' scalar_expression ':' scalar_expression #ConditionalScalarExpression - | scalar_expression '??' scalar_expression #CoalesceScalarExpression - | logical_scalar_expression #LogicalScalarExpression - | binary_scalar_expression K_NOT? K_BETWEEN binary_scalar_expression K_AND binary_scalar_expression #BetweenScalarExpression - ; + : scalar_expression '?' scalar_expression ':' scalar_expression #ConditionalScalarExpression + | scalar_expression '??' scalar_expression #CoalesceScalarExpression + | logical_scalar_expression #LogicalScalarExpression + | binary_scalar_expression K_NOT? K_BETWEEN binary_scalar_expression K_AND binary_scalar_expression #BetweenScalarExpression + ; logical_scalar_expression - : binary_scalar_expression - | in_scalar_expression - | like_scalar_expression - | logical_scalar_expression K_AND logical_scalar_expression - | logical_scalar_expression K_OR logical_scalar_expression - ; + : binary_scalar_expression + | in_scalar_expression + | like_scalar_expression + | logical_scalar_expression K_AND logical_scalar_expression + | logical_scalar_expression K_OR logical_scalar_expression + ; in_scalar_expression - : binary_scalar_expression K_NOT? K_IN '(' scalar_expression_list ')' - ; + : binary_scalar_expression K_NOT? K_IN '(' scalar_expression_list ')' + ; like_scalar_expression - : binary_scalar_expression K_NOT? K_LIKE binary_scalar_expression escape_expression? - ; + : binary_scalar_expression K_NOT? K_LIKE binary_scalar_expression escape_expression? + ; escape_expression - : K_ESCAPE STRING_LITERAL - ; + : K_ESCAPE STRING_LITERAL + ; binary_scalar_expression - : unary_scalar_expression - | binary_scalar_expression multiplicative_operator binary_scalar_expression - | binary_scalar_expression additive_operator binary_scalar_expression - | binary_scalar_expression relational_operator binary_scalar_expression - | binary_scalar_expression equality_operator binary_scalar_expression - | binary_scalar_expression bitwise_and_operator binary_scalar_expression - | binary_scalar_expression bitwise_exclusive_or_operator binary_scalar_expression - | binary_scalar_expression bitwise_inclusive_or_operator binary_scalar_expression - | binary_scalar_expression string_concat_operator binary_scalar_expression - ; + : unary_scalar_expression + | binary_scalar_expression multiplicative_operator binary_scalar_expression + | binary_scalar_expression additive_operator binary_scalar_expression + | binary_scalar_expression relational_operator binary_scalar_expression + | binary_scalar_expression equality_operator binary_scalar_expression + | binary_scalar_expression bitwise_and_operator binary_scalar_expression + | binary_scalar_expression bitwise_exclusive_or_operator binary_scalar_expression + | binary_scalar_expression bitwise_inclusive_or_operator binary_scalar_expression + | binary_scalar_expression string_concat_operator binary_scalar_expression + ; multiplicative_operator - : '*' - | '/' - | '%' - ; + : '*' + | '/' + | '%' + ; additive_operator - : '+' - | '-' - ; + : '+' + | '-' + ; relational_operator - : '<' - | '>' - | '>=' - | '<=' - ; + : '<' + | '>' + | '>=' + | '<=' + ; equality_operator - : '=' - | '!=' - ; + : '=' + | '!=' + ; bitwise_and_operator : '&' ; @@ -149,42 +149,55 @@ bitwise_inclusive_or_operator : '|'; string_concat_operator : '||'; unary_scalar_expression - : primary_expression - | unary_operator unary_scalar_expression - ; + : primary_expression + | unary_operator unary_scalar_expression + ; unary_operator - : '-' - | '+' - | '~' - | K_NOT - ; + : '-' + | '+' + | '~' + | K_NOT + ; primary_expression - : IDENTIFIER #PropertyRefScalarExpressionBase - | PARAMETER #ParameterRefScalarExpression - | literal #LiteralScalarExpression - | '[' scalar_expression_list? ']' #ArrayCreateScalarExpression - | '{' object_property_list? '}' #ObjectCreateScalarExpression - | (K_UDF '.')? IDENTIFIER '(' scalar_expression_list? ')' #FunctionCallScalarExpression - | '(' scalar_expression ')' #ParenthesizedScalarExperession - | '(' sql_query ')' #SubqueryScalarExpression - | primary_expression '.' IDENTIFIER #PropertyRefScalarExpressionRecursive - | primary_expression '[' scalar_expression ']' #MemberIndexerScalarExpression - | K_EXISTS '(' sql_query ')' #ExistsScalarExpression - | K_ARRAY '(' sql_query ')' #ArrayScalarExpression - ; + : identifier #PropertyRefScalarExpressionBase + | PARAMETER #ParameterRefScalarExpression + | literal #LiteralScalarExpression + | '[' scalar_expression_list? ']' #ArrayCreateScalarExpression + | '{' object_property_list? '}' #ObjectCreateScalarExpression + | '(' scalar_expression ')' #ParenthesizedScalarExperession + | '(' sql_query ')' #SubqueryScalarExpression + | primary_expression '.' identifier #PropertyRefScalarExpressionRecursive + | primary_expression '[' scalar_expression ']' #MemberIndexerScalarExpression + | K_EXISTS '(' sql_query ')' #ExistsScalarExpression + | K_ARRAY '(' sql_query ')' #ArrayScalarExpression + | K_ALL '(' sql_query ')' #AllScalarExpression + | function_call_scalar_expression #FunctionCallScalarExpression + ; + +function_call_scalar_expression + : (K_UDF '.')? identifier '(' scalar_expression_list? ')' + | K_LEFT '(' scalar_expression_list? ')' + | K_RIGHT '(' scalar_expression_list? ')' + ; scalar_expression_list : scalar_expression (',' scalar_expression)*; object_property_list : object_property (',' object_property)* ; object_property : STRING_LITERAL ':' scalar_expression ; + +identifier + : LEX_IDENTIFIER + | K_ALL + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ /* KEYWORDS */ /*--------------------------------------------------------------------------------*/ +K_ALL : A L L; K_AND : A N D; K_ARRAY : A R R A Y; K_AS : A S; @@ -200,6 +213,7 @@ K_FROM : F R O M; K_GROUP : G R O U P; K_IN : I N ; K_JOIN : J O I N; +K_LEFT : L E F T; K_LIKE : L I K E; K_LIMIT : L I M I T; K_NOT : N O T; @@ -207,6 +221,7 @@ K_NULL : 'null'; K_OFFSET : O F F S E T; K_OR : O R; K_ORDER : O R D E R; +K_RIGHT : R I G H T; K_SELECT : S E L E C T; K_TOP : T O P; K_TRUE : 'true'; @@ -224,27 +239,27 @@ WS /* LITERALS */ /*--------------------------------------------------------------------------------*/ literal - : STRING_LITERAL - | NUMERIC_LITERAL - | K_TRUE - | K_FALSE - | K_NULL - | K_UNDEFINED - ; + : STRING_LITERAL + | NUMERIC_LITERAL + | K_TRUE + | K_FALSE + | K_NULL + | K_UNDEFINED + ; NUMERIC_LITERAL - : ( '+' | '-' )? DIGIT+ ( '.' DIGIT* )? ( E [-+]? DIGIT+ )? - | ( '+' | '-' )? '.' DIGIT+ ( E [-+]? DIGIT+ )? - ; + : ( '+' | '-' )? DIGIT+ ( '.' DIGIT* )? ( E [-+]? DIGIT+ )? + | ( '+' | '-' )? '.' DIGIT+ ( E [-+]? DIGIT+ )? + ; STRING_LITERAL - : '"' (ESC | SAFECODEPOINTWITHDOUBLEQUOTATION)* '"' - | '\'' (ESC | SAFECODEPOINTWITHSINGLEQUOTATION)* '\'' - ; + : '"' (ESC | SAFECODEPOINTWITHDOUBLEQUOTATION)* '"' + | '\'' (ESC | SAFECODEPOINTWITHSINGLEQUOTATION)* '\'' + ; fragment ESC - : '\\' (["\\/bfnrt] | UNICODE) - ; + : '\\' (["\\/bfnrt] | UNICODE) + ; fragment UNICODE : 'u' HEX HEX HEX HEX @@ -255,21 +270,21 @@ fragment HEX ; fragment SAFECODEPOINTWITHSINGLEQUOTATION - : ~ ['\\\u0000-\u001F] - ; + : ~ ['\\\u0000-\u001F] + ; fragment SAFECODEPOINTWITHDOUBLEQUOTATION - : ~ ["\\\u0000-\u001F] - ; + : ~ ["\\\u0000-\u001F] + ; -IDENTIFIER - : - | [a-zA-Z_]([a-zA-Z_]|DIGIT)* - ; +LEX_IDENTIFIER + : + | [a-zA-Z_]([a-zA-Z_]|DIGIT)* + ; PARAMETER - : '@'IDENTIFIER - ; + : '@'LEX_IDENTIFIER + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs index 5a52445735..18003391b1 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs @@ -624,117 +624,145 @@ public virtual void EnterUnary_operator([NotNull] sqlParser.Unary_operatorContex /// The parse tree. public virtual void ExitUnary_operator([NotNull] sqlParser.Unary_operatorContext context) { } /// - /// Enter a parse tree produced by the SubqueryScalarExpression + /// Enter a parse tree produced by the AllScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { } + public virtual void EnterAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the SubqueryScalarExpression + /// Exit a parse tree produced by the AllScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { } + public virtual void ExitAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the PropertyRefScalarExpressionBase + /// Enter a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { } + public virtual void EnterLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the PropertyRefScalarExpressionBase + /// Exit a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { } + public virtual void ExitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the FunctionCallScalarExpression + /// Enter a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { } + public virtual void EnterObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the FunctionCallScalarExpression + /// Exit a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { } + public virtual void ExitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the LiteralScalarExpression + /// Enter a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { } + public virtual void EnterArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the LiteralScalarExpression + /// Exit a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { } + public virtual void ExitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the ObjectCreateScalarExpression + /// Enter a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { } + public virtual void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the ObjectCreateScalarExpression + /// Exit a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { } + public virtual void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the ParenthesizedScalarExperession + /// Enter a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } + public virtual void EnterSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the ParenthesizedScalarExperession + /// Exit a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } + public virtual void ExitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the ParameterRefScalarExpression + /// Enter a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } + public virtual void EnterPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { } /// - /// Exit a parse tree produced by the ParameterRefScalarExpression + /// Exit a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } + public virtual void ExitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { } /// - /// Enter a parse tree produced by the ArrayCreateScalarExpression + /// Enter a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { } + public virtual void EnterFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the ArrayCreateScalarExpression + /// Exit a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { } + public virtual void ExitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { } + /// + /// Enter a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } + /// + /// Exit a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } + /// + /// Enter a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } + /// + /// Exit a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } /// /// Enter a parse tree produced by the ExistsScalarExpression /// labeled alternative in . @@ -764,33 +792,31 @@ public virtual void EnterArrayScalarExpression([NotNull] sqlParser.ArrayScalarEx /// The parse tree. public virtual void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the MemberIndexerScalarExpression + /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } + public virtual void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { } /// - /// Exit a parse tree produced by the MemberIndexerScalarExpression + /// Exit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } + public virtual void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { } /// - /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Enter a parse tree produced by . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { } + public virtual void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { } /// - /// Exit a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Exit a parse tree produced by . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { } + public virtual void ExitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { } /// /// Enter a parse tree produced by . /// The default implementation does nothing. @@ -828,6 +854,18 @@ public virtual void EnterObject_property([NotNull] sqlParser.Object_propertyCont /// The parse tree. public virtual void ExitObject_property([NotNull] sqlParser.Object_propertyContext context) { } /// + /// Enter a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterIdentifier([NotNull] sqlParser.IdentifierContext context) { } + /// + /// Exit a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void ExitIdentifier([NotNull] sqlParser.IdentifierContext context) { } + /// /// Enter a parse tree produced by . /// The default implementation does nothing. /// diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs index 287851e115..bb3b86379d 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs @@ -516,7 +516,7 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// The visitor result. public virtual Result VisitUnary_operator([NotNull] sqlParser.Unary_operatorContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the SubqueryScalarExpression + /// Visit a parse tree produced by the AllScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -525,9 +525,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitAllScalarExpression([NotNull] sqlParser.AllScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the PropertyRefScalarExpressionBase + /// Visit a parse tree produced by the LiteralScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -536,9 +536,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { return VisitChildren(context); } + public virtual Result VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the FunctionCallScalarExpression + /// Visit a parse tree produced by the ObjectCreateScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -547,9 +547,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the LiteralScalarExpression + /// Visit a parse tree produced by the ArrayCreateScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -558,9 +558,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the ObjectCreateScalarExpression + /// Visit a parse tree produced by the MemberIndexerScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -569,9 +569,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the ParenthesizedScalarExperession + /// Visit a parse tree produced by the SubqueryScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -580,9 +580,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { return VisitChildren(context); } + public virtual Result VisitSubqueryScalarExpression([NotNull] sqlParser.SubqueryScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the ParameterRefScalarExpression + /// Visit a parse tree produced by the PropertyRefScalarExpressionBase /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -591,9 +591,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitPropertyRefScalarExpressionBase([NotNull] sqlParser.PropertyRefScalarExpressionBaseContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the ArrayCreateScalarExpression + /// Visit a parse tree produced by the FunctionCallScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -602,7 +602,29 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitArrayCreateScalarExpression([NotNull] sqlParser.ArrayCreateScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParenthesizedScalarExperession + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ParameterRefScalarExpression + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { return VisitChildren(context); } /// /// Visit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . @@ -626,7 +648,7 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// The visitor result. public virtual Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the MemberIndexerScalarExpression + /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -635,10 +657,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive - /// labeled alternative in . + /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling /// on . @@ -646,7 +667,7 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { return VisitChildren(context); } + public virtual Result VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { return VisitChildren(context); } /// /// Visit a parse tree produced by . /// @@ -678,6 +699,16 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// The visitor result. public virtual Result VisitObject_property([NotNull] sqlParser.Object_propertyContext context) { return VisitChildren(context); } /// + /// Visit a parse tree produced by . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitIdentifier([NotNull] sqlParser.IdentifierContext context) { return VisitChildren(context); } + /// /// Visit a parse tree produced by . /// /// The default implementation returns the result of calling diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs index 23f23fbed2..1d5b7262bd 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs @@ -35,12 +35,13 @@ public const int T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, - T__24=25, T__25=26, T__26=27, K_AND=28, K_ARRAY=29, K_AS=30, K_ASC=31, - K_BETWEEN=32, K_BY=33, K_DESC=34, K_DISTINCT=35, K_ESCAPE=36, K_EXISTS=37, - K_FALSE=38, K_FROM=39, K_GROUP=40, K_IN=41, K_JOIN=42, K_LIKE=43, K_LIMIT=44, - K_NOT=45, K_NULL=46, K_OFFSET=47, K_OR=48, K_ORDER=49, K_SELECT=50, K_TOP=51, - K_TRUE=52, K_UDF=53, K_UNDEFINED=54, K_VALUE=55, K_WHERE=56, WS=57, NUMERIC_LITERAL=58, - STRING_LITERAL=59, IDENTIFIER=60, PARAMETER=61; + T__24=25, T__25=26, T__26=27, K_ALL=28, K_AND=29, K_ARRAY=30, K_AS=31, + K_ASC=32, K_BETWEEN=33, K_BY=34, K_DESC=35, K_DISTINCT=36, K_ESCAPE=37, + K_EXISTS=38, K_FALSE=39, K_FROM=40, K_GROUP=41, K_IN=42, K_JOIN=43, K_LEFT=44, + K_LIKE=45, K_LIMIT=46, K_NOT=47, K_NULL=48, K_OFFSET=49, K_OR=50, K_ORDER=51, + K_RIGHT=52, K_SELECT=53, K_TOP=54, K_TRUE=55, K_UDF=56, K_UNDEFINED=57, + K_VALUE=58, K_WHERE=59, WS=60, NUMERIC_LITERAL=61, STRING_LITERAL=62, + LEX_IDENTIFIER=63, PARAMETER=64; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -53,15 +54,15 @@ public const int "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", - "T__25", "T__26", "K_AND", "K_ARRAY", "K_AS", "K_ASC", "K_BETWEEN", "K_BY", - "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", "K_FROM", "K_GROUP", - "K_IN", "K_JOIN", "K_LIKE", "K_LIMIT", "K_NOT", "K_NULL", "K_OFFSET", - "K_OR", "K_ORDER", "K_SELECT", "K_TOP", "K_TRUE", "K_UDF", "K_UNDEFINED", - "K_VALUE", "K_WHERE", "WS", "NUMERIC_LITERAL", "STRING_LITERAL", "ESC", - "UNICODE", "HEX", "SAFECODEPOINTWITHSINGLEQUOTATION", "SAFECODEPOINTWITHDOUBLEQUOTATION", - "IDENTIFIER", "PARAMETER", "DIGIT", "A", "B", "C", "D", "E", "F", "G", - "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", - "V", "W", "X", "Y", "Z" + "T__25", "T__26", "K_ALL", "K_AND", "K_ARRAY", "K_AS", "K_ASC", "K_BETWEEN", + "K_BY", "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", "K_FROM", + "K_GROUP", "K_IN", "K_JOIN", "K_LEFT", "K_LIKE", "K_LIMIT", "K_NOT", "K_NULL", + "K_OFFSET", "K_OR", "K_ORDER", "K_RIGHT", "K_SELECT", "K_TOP", "K_TRUE", + "K_UDF", "K_UNDEFINED", "K_VALUE", "K_WHERE", "WS", "NUMERIC_LITERAL", + "STRING_LITERAL", "ESC", "UNICODE", "HEX", "SAFECODEPOINTWITHSINGLEQUOTATION", + "SAFECODEPOINTWITHDOUBLEQUOTATION", "LEX_IDENTIFIER", "PARAMETER", "DIGIT", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", + "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; @@ -78,19 +79,19 @@ public sqlLexer(ICharStream input, TextWriter output, TextWriter errorOutput) null, "'*'", "','", "'('", "')'", "'.'", "'['", "']'", "'?'", "':'", "'??'", "'/'", "'%'", "'+'", "'-'", "'<'", "'>'", "'>='", "'<='", "'='", "'!='", "'&'", "'^'", "'|'", "'||'", "'~'", "'{'", "'}'", null, null, null, null, - null, null, null, null, null, null, "'false'", null, null, null, null, - null, null, null, "'null'", null, null, null, null, null, "'true'", "'udf'", - "'undefined'" + null, null, null, null, null, null, null, "'false'", null, null, null, + null, null, null, null, null, "'null'", null, null, null, null, null, + null, "'true'", "'udf'", "'undefined'" }; private static readonly string[] _SymbolicNames = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, "K_AND", "K_ARRAY", "K_AS", "K_ASC", "K_BETWEEN", - "K_BY", "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", "K_FROM", - "K_GROUP", "K_IN", "K_JOIN", "K_LIKE", "K_LIMIT", "K_NOT", "K_NULL", "K_OFFSET", - "K_OR", "K_ORDER", "K_SELECT", "K_TOP", "K_TRUE", "K_UDF", "K_UNDEFINED", - "K_VALUE", "K_WHERE", "WS", "NUMERIC_LITERAL", "STRING_LITERAL", "IDENTIFIER", - "PARAMETER" + null, null, null, null, "K_ALL", "K_AND", "K_ARRAY", "K_AS", "K_ASC", + "K_BETWEEN", "K_BY", "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", + "K_FROM", "K_GROUP", "K_IN", "K_JOIN", "K_LEFT", "K_LIKE", "K_LIMIT", + "K_NOT", "K_NULL", "K_OFFSET", "K_OR", "K_ORDER", "K_RIGHT", "K_SELECT", + "K_TOP", "K_TRUE", "K_UDF", "K_UNDEFINED", "K_VALUE", "K_WHERE", "WS", + "NUMERIC_LITERAL", "STRING_LITERAL", "LEX_IDENTIFIER", "PARAMETER" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -121,7 +122,7 @@ static sqlLexer() { } private static char[] _serializedATN = { '\x3', '\x608B', '\xA72A', '\x8133', '\xB9ED', '\x417C', '\x3BE7', '\x7786', - '\x5964', '\x2', '?', '\x239', '\b', '\x1', '\x4', '\x2', '\t', '\x2', + '\x5964', '\x2', '\x42', '\x24E', '\b', '\x1', '\x4', '\x2', '\t', '\x2', '\x4', '\x3', '\t', '\x3', '\x4', '\x4', '\t', '\x4', '\x4', '\x5', '\t', '\x5', '\x4', '\x6', '\t', '\x6', '\x4', '\a', '\t', '\a', '\x4', '\b', '\t', '\b', '\x4', '\t', '\t', '\t', '\x4', '\n', '\t', '\n', '\x4', '\v', @@ -154,6 +155,7 @@ static sqlLexer() { '\t', 'U', '\x4', 'V', '\t', 'V', '\x4', 'W', '\t', 'W', '\x4', 'X', '\t', 'X', '\x4', 'Y', '\t', 'Y', '\x4', 'Z', '\t', 'Z', '\x4', '[', '\t', '[', '\x4', '\\', '\t', '\\', '\x4', ']', '\t', ']', '\x4', '^', '\t', '^', + '\x4', '_', '\t', '_', '\x4', '`', '\t', '`', '\x4', '\x61', '\t', '\x61', '\x3', '\x2', '\x3', '\x2', '\x3', '\x3', '\x3', '\x3', '\x3', '\x4', '\x3', '\x4', '\x3', '\x5', '\x3', '\x5', '\x3', '\x6', '\x3', '\x6', '\x3', '\a', '\x3', '\a', '\x3', '\b', '\x3', '\b', '\x3', '\t', '\x3', @@ -167,56 +169,58 @@ static sqlLexer() { '\x19', '\x3', '\x19', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1B', '\x3', '\x1B', '\x3', '\x1C', '\x3', '\x1C', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1E', '\x3', '\x1E', '\x3', '\x1E', '\x3', - '\x1E', '\x3', '\x1E', '\x3', '\x1E', '\x3', '\x1F', '\x3', '\x1F', '\x3', - '\x1F', '\x3', ' ', '\x3', ' ', '\x3', ' ', '\x3', ' ', '\x3', '!', '\x3', - '!', '\x3', '!', '\x3', '!', '\x3', '!', '\x3', '!', '\x3', '!', '\x3', - '!', '\x3', '\"', '\x3', '\"', '\x3', '\"', '\x3', '#', '\x3', '#', '\x3', + '\x1E', '\x3', '\x1F', '\x3', '\x1F', '\x3', '\x1F', '\x3', '\x1F', '\x3', + '\x1F', '\x3', '\x1F', '\x3', ' ', '\x3', ' ', '\x3', ' ', '\x3', '!', + '\x3', '!', '\x3', '!', '\x3', '!', '\x3', '\"', '\x3', '\"', '\x3', '\"', + '\x3', '\"', '\x3', '\"', '\x3', '\"', '\x3', '\"', '\x3', '\"', '\x3', '#', '\x3', '#', '\x3', '#', '\x3', '$', '\x3', '$', '\x3', '$', '\x3', - '$', '\x3', '$', '\x3', '$', '\x3', '$', '\x3', '$', '\x3', '$', '\x3', - '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', - '%', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', - '&', '\x3', '&', '\x3', '\'', '\x3', '\'', '\x3', '\'', '\x3', '\'', '\x3', - '\'', '\x3', '\'', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', - '(', '\x3', ')', '\x3', ')', '\x3', ')', '\x3', ')', '\x3', ')', '\x3', - ')', '\x3', '*', '\x3', '*', '\x3', '*', '\x3', '+', '\x3', '+', '\x3', - '+', '\x3', '+', '\x3', '+', '\x3', ',', '\x3', ',', '\x3', ',', '\x3', - ',', '\x3', ',', '\x3', '-', '\x3', '-', '\x3', '-', '\x3', '-', '\x3', - '-', '\x3', '-', '\x3', '.', '\x3', '.', '\x3', '.', '\x3', '.', '\x3', - '/', '\x3', '/', '\x3', '/', '\x3', '/', '\x3', '/', '\x3', '\x30', '\x3', - '\x30', '\x3', '\x30', '\x3', '\x30', '\x3', '\x30', '\x3', '\x30', '\x3', - '\x30', '\x3', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x32', '\x3', - '\x32', '\x3', '\x32', '\x3', '\x32', '\x3', '\x32', '\x3', '\x32', '\x3', - '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', - '\x33', '\x3', '\x33', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', - '\x34', '\x3', '\x35', '\x3', '\x35', '\x3', '\x35', '\x3', '\x35', '\x3', - '\x35', '\x3', '\x36', '\x3', '\x36', '\x3', '\x36', '\x3', '\x36', '\x3', - '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', - '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', '\x37', '\x3', - '\x38', '\x3', '\x38', '\x3', '\x38', '\x3', '\x38', '\x3', '\x38', '\x3', - '\x38', '\x3', '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', - '\x39', '\x3', '\x39', '\x3', ':', '\x6', ':', '\x199', '\n', ':', '\r', - ':', '\xE', ':', '\x19A', '\x3', ':', '\x3', ':', '\x3', ';', '\x5', ';', - '\x1A0', '\n', ';', '\x3', ';', '\x6', ';', '\x1A3', '\n', ';', '\r', - ';', '\xE', ';', '\x1A4', '\x3', ';', '\x3', ';', '\a', ';', '\x1A9', - '\n', ';', '\f', ';', '\xE', ';', '\x1AC', '\v', ';', '\x5', ';', '\x1AE', - '\n', ';', '\x3', ';', '\x3', ';', '\x5', ';', '\x1B2', '\n', ';', '\x3', - ';', '\x6', ';', '\x1B5', '\n', ';', '\r', ';', '\xE', ';', '\x1B6', '\x5', - ';', '\x1B9', '\n', ';', '\x3', ';', '\x5', ';', '\x1BC', '\n', ';', '\x3', - ';', '\x3', ';', '\x6', ';', '\x1C0', '\n', ';', '\r', ';', '\xE', ';', - '\x1C1', '\x3', ';', '\x3', ';', '\x5', ';', '\x1C6', '\n', ';', '\x3', - ';', '\x6', ';', '\x1C9', '\n', ';', '\r', ';', '\xE', ';', '\x1CA', '\x5', - ';', '\x1CD', '\n', ';', '\x5', ';', '\x1CF', '\n', ';', '\x3', '<', '\x3', - '<', '\x3', '<', '\a', '<', '\x1D4', '\n', '<', '\f', '<', '\xE', '<', - '\x1D7', '\v', '<', '\x3', '<', '\x3', '<', '\x3', '<', '\x3', '<', '\a', - '<', '\x1DD', '\n', '<', '\f', '<', '\xE', '<', '\x1E0', '\v', '<', '\x3', - '<', '\x5', '<', '\x1E3', '\n', '<', '\x3', '=', '\x3', '=', '\x3', '=', - '\x5', '=', '\x1E8', '\n', '=', '\x3', '>', '\x3', '>', '\x3', '>', '\x3', - '>', '\x3', '>', '\x3', '>', '\x3', '?', '\x3', '?', '\x3', '@', '\x3', - '@', '\x3', '\x41', '\x3', '\x41', '\x3', '\x42', '\x3', '\x42', '\x3', - '\x42', '\x3', '\x42', '\a', '\x42', '\x1FA', '\n', '\x42', '\f', '\x42', - '\xE', '\x42', '\x1FD', '\v', '\x42', '\x5', '\x42', '\x1FF', '\n', '\x42', - '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', '\x44', '\x3', '\x44', - '\x3', '\x45', '\x3', '\x45', '\x3', '\x46', '\x3', '\x46', '\x3', 'G', + '$', '\x3', '$', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', + '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', '%', '\x3', '&', '\x3', + '&', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', + '\'', '\x3', '\'', '\x3', '\'', '\x3', '\'', '\x3', '\'', '\x3', '\'', + '\x3', '\'', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\x3', '(', '\x3', ')', '\x3', ')', '\x3', ')', '\x3', ')', '\x3', ')', + '\x3', '*', '\x3', '*', '\x3', '*', '\x3', '*', '\x3', '*', '\x3', '*', + '\x3', '+', '\x3', '+', '\x3', '+', '\x3', ',', '\x3', ',', '\x3', ',', + '\x3', ',', '\x3', ',', '\x3', '-', '\x3', '-', '\x3', '-', '\x3', '-', + '\x3', '-', '\x3', '.', '\x3', '.', '\x3', '.', '\x3', '.', '\x3', '.', + '\x3', '/', '\x3', '/', '\x3', '/', '\x3', '/', '\x3', '/', '\x3', '/', + '\x3', '\x30', '\x3', '\x30', '\x3', '\x30', '\x3', '\x30', '\x3', '\x31', + '\x3', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x32', + '\x3', '\x32', '\x3', '\x32', '\x3', '\x32', '\x3', '\x32', '\x3', '\x32', + '\x3', '\x32', '\x3', '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', '\x34', + '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', + '\x3', '\x35', '\x3', '\x35', '\x3', '\x35', '\x3', '\x35', '\x3', '\x35', + '\x3', '\x35', '\x3', '\x36', '\x3', '\x36', '\x3', '\x36', '\x3', '\x36', + '\x3', '\x36', '\x3', '\x36', '\x3', '\x36', '\x3', '\x37', '\x3', '\x37', + '\x3', '\x37', '\x3', '\x37', '\x3', '\x38', '\x3', '\x38', '\x3', '\x38', + '\x3', '\x38', '\x3', '\x38', '\x3', '\x39', '\x3', '\x39', '\x3', '\x39', + '\x3', '\x39', '\x3', ':', '\x3', ':', '\x3', ':', '\x3', ':', '\x3', + ':', '\x3', ':', '\x3', ':', '\x3', ':', '\x3', ':', '\x3', ':', '\x3', + ';', '\x3', ';', '\x3', ';', '\x3', ';', '\x3', ';', '\x3', ';', '\x3', + '<', '\x3', '<', '\x3', '<', '\x3', '<', '\x3', '<', '\x3', '<', '\x3', + '=', '\x6', '=', '\x1AE', '\n', '=', '\r', '=', '\xE', '=', '\x1AF', '\x3', + '=', '\x3', '=', '\x3', '>', '\x5', '>', '\x1B5', '\n', '>', '\x3', '>', + '\x6', '>', '\x1B8', '\n', '>', '\r', '>', '\xE', '>', '\x1B9', '\x3', + '>', '\x3', '>', '\a', '>', '\x1BE', '\n', '>', '\f', '>', '\xE', '>', + '\x1C1', '\v', '>', '\x5', '>', '\x1C3', '\n', '>', '\x3', '>', '\x3', + '>', '\x5', '>', '\x1C7', '\n', '>', '\x3', '>', '\x6', '>', '\x1CA', + '\n', '>', '\r', '>', '\xE', '>', '\x1CB', '\x5', '>', '\x1CE', '\n', + '>', '\x3', '>', '\x5', '>', '\x1D1', '\n', '>', '\x3', '>', '\x3', '>', + '\x6', '>', '\x1D5', '\n', '>', '\r', '>', '\xE', '>', '\x1D6', '\x3', + '>', '\x3', '>', '\x5', '>', '\x1DB', '\n', '>', '\x3', '>', '\x6', '>', + '\x1DE', '\n', '>', '\r', '>', '\xE', '>', '\x1DF', '\x5', '>', '\x1E2', + '\n', '>', '\x5', '>', '\x1E4', '\n', '>', '\x3', '?', '\x3', '?', '\x3', + '?', '\a', '?', '\x1E9', '\n', '?', '\f', '?', '\xE', '?', '\x1EC', '\v', + '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\a', '?', '\x1F2', + '\n', '?', '\f', '?', '\xE', '?', '\x1F5', '\v', '?', '\x3', '?', '\x5', + '?', '\x1F8', '\n', '?', '\x3', '@', '\x3', '@', '\x3', '@', '\x5', '@', + '\x1FD', '\n', '@', '\x3', '\x41', '\x3', '\x41', '\x3', '\x41', '\x3', + '\x41', '\x3', '\x41', '\x3', '\x41', '\x3', '\x42', '\x3', '\x42', '\x3', + '\x43', '\x3', '\x43', '\x3', '\x44', '\x3', '\x44', '\x3', '\x45', '\x3', + '\x45', '\x3', '\x45', '\x3', '\x45', '\a', '\x45', '\x20F', '\n', '\x45', + '\f', '\x45', '\xE', '\x45', '\x212', '\v', '\x45', '\x5', '\x45', '\x214', + '\n', '\x45', '\x3', '\x46', '\x3', '\x46', '\x3', '\x46', '\x3', 'G', '\x3', 'G', '\x3', 'H', '\x3', 'H', '\x3', 'I', '\x3', 'I', '\x3', 'J', '\x3', 'J', '\x3', 'K', '\x3', 'K', '\x3', 'L', '\x3', 'L', '\x3', 'M', '\x3', 'M', '\x3', 'N', '\x3', 'N', '\x3', 'O', '\x3', 'O', '\x3', 'P', @@ -224,382 +228,397 @@ static sqlLexer() { '\x3', 'S', '\x3', 'T', '\x3', 'T', '\x3', 'U', '\x3', 'U', '\x3', 'V', '\x3', 'V', '\x3', 'W', '\x3', 'W', '\x3', 'X', '\x3', 'X', '\x3', 'Y', '\x3', 'Y', '\x3', 'Z', '\x3', 'Z', '\x3', '[', '\x3', '[', '\x3', '\\', - '\x3', '\\', '\x3', ']', '\x3', ']', '\x3', '^', '\x3', '^', '\x2', '\x2', - '_', '\x3', '\x3', '\x5', '\x4', '\a', '\x5', '\t', '\x6', '\v', '\a', - '\r', '\b', '\xF', '\t', '\x11', '\n', '\x13', '\v', '\x15', '\f', '\x17', - '\r', '\x19', '\xE', '\x1B', '\xF', '\x1D', '\x10', '\x1F', '\x11', '!', - '\x12', '#', '\x13', '%', '\x14', '\'', '\x15', ')', '\x16', '+', '\x17', - '-', '\x18', '/', '\x19', '\x31', '\x1A', '\x33', '\x1B', '\x35', '\x1C', - '\x37', '\x1D', '\x39', '\x1E', ';', '\x1F', '=', ' ', '?', '!', '\x41', - '\"', '\x43', '#', '\x45', '$', 'G', '%', 'I', '&', 'K', '\'', 'M', '(', - 'O', ')', 'Q', '*', 'S', '+', 'U', ',', 'W', '-', 'Y', '.', '[', '/', - ']', '\x30', '_', '\x31', '\x61', '\x32', '\x63', '\x33', '\x65', '\x34', - 'g', '\x35', 'i', '\x36', 'k', '\x37', 'm', '\x38', 'o', '\x39', 'q', - ':', 's', ';', 'u', '<', 'w', '=', 'y', '\x2', '{', '\x2', '}', '\x2', - '\x7F', '\x2', '\x81', '\x2', '\x83', '>', '\x85', '?', '\x87', '\x2', - '\x89', '\x2', '\x8B', '\x2', '\x8D', '\x2', '\x8F', '\x2', '\x91', '\x2', - '\x93', '\x2', '\x95', '\x2', '\x97', '\x2', '\x99', '\x2', '\x9B', '\x2', - '\x9D', '\x2', '\x9F', '\x2', '\xA1', '\x2', '\xA3', '\x2', '\xA5', '\x2', - '\xA7', '\x2', '\xA9', '\x2', '\xAB', '\x2', '\xAD', '\x2', '\xAF', '\x2', - '\xB1', '\x2', '\xB3', '\x2', '\xB5', '\x2', '\xB7', '\x2', '\xB9', '\x2', - '\xBB', '\x2', '\x3', '\x2', '$', '\x5', '\x2', '\v', '\f', '\xF', '\xF', - '\"', '\"', '\x4', '\x2', '-', '-', '/', '/', '\n', '\x2', '$', '$', '\x31', - '\x31', '^', '^', '\x64', '\x64', 'h', 'h', 'p', 'p', 't', 't', 'v', 'v', - '\x5', '\x2', '\x32', ';', '\x43', 'H', '\x63', 'h', '\x5', '\x2', '\x2', - '!', ')', ')', '^', '^', '\x5', '\x2', '\x2', '!', '$', '$', '^', '^', - '\x5', '\x2', '\x43', '\\', '\x61', '\x61', '\x63', '|', '\x3', '\x2', - '\x32', ';', '\x4', '\x2', '\x43', '\x43', '\x63', '\x63', '\x4', '\x2', - '\x44', '\x44', '\x64', '\x64', '\x4', '\x2', '\x45', '\x45', '\x65', - '\x65', '\x4', '\x2', '\x46', '\x46', '\x66', '\x66', '\x4', '\x2', 'G', - 'G', 'g', 'g', '\x4', '\x2', 'H', 'H', 'h', 'h', '\x4', '\x2', 'I', 'I', - 'i', 'i', '\x4', '\x2', 'J', 'J', 'j', 'j', '\x4', '\x2', 'K', 'K', 'k', - 'k', '\x4', '\x2', 'L', 'L', 'l', 'l', '\x4', '\x2', 'M', 'M', 'm', 'm', - '\x4', '\x2', 'N', 'N', 'n', 'n', '\x4', '\x2', 'O', 'O', 'o', 'o', '\x4', - '\x2', 'P', 'P', 'p', 'p', '\x4', '\x2', 'Q', 'Q', 'q', 'q', '\x4', '\x2', - 'R', 'R', 'r', 'r', '\x4', '\x2', 'S', 'S', 's', 's', '\x4', '\x2', 'T', - 'T', 't', 't', '\x4', '\x2', 'U', 'U', 'u', 'u', '\x4', '\x2', 'V', 'V', - 'v', 'v', '\x4', '\x2', 'W', 'W', 'w', 'w', '\x4', '\x2', 'X', 'X', 'x', - 'x', '\x4', '\x2', 'Y', 'Y', 'y', 'y', '\x4', '\x2', 'Z', 'Z', 'z', 'z', - '\x4', '\x2', '[', '[', '{', '{', '\x4', '\x2', '\\', '\\', '|', '|', - '\x2', '\x22F', '\x2', '\x3', '\x3', '\x2', '\x2', '\x2', '\x2', '\x5', - '\x3', '\x2', '\x2', '\x2', '\x2', '\a', '\x3', '\x2', '\x2', '\x2', '\x2', - '\t', '\x3', '\x2', '\x2', '\x2', '\x2', '\v', '\x3', '\x2', '\x2', '\x2', - '\x2', '\r', '\x3', '\x2', '\x2', '\x2', '\x2', '\xF', '\x3', '\x2', '\x2', - '\x2', '\x2', '\x11', '\x3', '\x2', '\x2', '\x2', '\x2', '\x13', '\x3', - '\x2', '\x2', '\x2', '\x2', '\x15', '\x3', '\x2', '\x2', '\x2', '\x2', - '\x17', '\x3', '\x2', '\x2', '\x2', '\x2', '\x19', '\x3', '\x2', '\x2', - '\x2', '\x2', '\x1B', '\x3', '\x2', '\x2', '\x2', '\x2', '\x1D', '\x3', - '\x2', '\x2', '\x2', '\x2', '\x1F', '\x3', '\x2', '\x2', '\x2', '\x2', - '!', '\x3', '\x2', '\x2', '\x2', '\x2', '#', '\x3', '\x2', '\x2', '\x2', - '\x2', '%', '\x3', '\x2', '\x2', '\x2', '\x2', '\'', '\x3', '\x2', '\x2', - '\x2', '\x2', ')', '\x3', '\x2', '\x2', '\x2', '\x2', '+', '\x3', '\x2', - '\x2', '\x2', '\x2', '-', '\x3', '\x2', '\x2', '\x2', '\x2', '/', '\x3', - '\x2', '\x2', '\x2', '\x2', '\x31', '\x3', '\x2', '\x2', '\x2', '\x2', - '\x33', '\x3', '\x2', '\x2', '\x2', '\x2', '\x35', '\x3', '\x2', '\x2', - '\x2', '\x2', '\x37', '\x3', '\x2', '\x2', '\x2', '\x2', '\x39', '\x3', - '\x2', '\x2', '\x2', '\x2', ';', '\x3', '\x2', '\x2', '\x2', '\x2', '=', - '\x3', '\x2', '\x2', '\x2', '\x2', '?', '\x3', '\x2', '\x2', '\x2', '\x2', - '\x41', '\x3', '\x2', '\x2', '\x2', '\x2', '\x43', '\x3', '\x2', '\x2', - '\x2', '\x2', '\x45', '\x3', '\x2', '\x2', '\x2', '\x2', 'G', '\x3', '\x2', - '\x2', '\x2', '\x2', 'I', '\x3', '\x2', '\x2', '\x2', '\x2', 'K', '\x3', - '\x2', '\x2', '\x2', '\x2', 'M', '\x3', '\x2', '\x2', '\x2', '\x2', 'O', - '\x3', '\x2', '\x2', '\x2', '\x2', 'Q', '\x3', '\x2', '\x2', '\x2', '\x2', - 'S', '\x3', '\x2', '\x2', '\x2', '\x2', 'U', '\x3', '\x2', '\x2', '\x2', - '\x2', 'W', '\x3', '\x2', '\x2', '\x2', '\x2', 'Y', '\x3', '\x2', '\x2', - '\x2', '\x2', '[', '\x3', '\x2', '\x2', '\x2', '\x2', ']', '\x3', '\x2', - '\x2', '\x2', '\x2', '_', '\x3', '\x2', '\x2', '\x2', '\x2', '\x61', '\x3', - '\x2', '\x2', '\x2', '\x2', '\x63', '\x3', '\x2', '\x2', '\x2', '\x2', - '\x65', '\x3', '\x2', '\x2', '\x2', '\x2', 'g', '\x3', '\x2', '\x2', '\x2', - '\x2', 'i', '\x3', '\x2', '\x2', '\x2', '\x2', 'k', '\x3', '\x2', '\x2', - '\x2', '\x2', 'm', '\x3', '\x2', '\x2', '\x2', '\x2', 'o', '\x3', '\x2', - '\x2', '\x2', '\x2', 'q', '\x3', '\x2', '\x2', '\x2', '\x2', 's', '\x3', - '\x2', '\x2', '\x2', '\x2', 'u', '\x3', '\x2', '\x2', '\x2', '\x2', 'w', - '\x3', '\x2', '\x2', '\x2', '\x2', '\x83', '\x3', '\x2', '\x2', '\x2', - '\x2', '\x85', '\x3', '\x2', '\x2', '\x2', '\x3', '\xBD', '\x3', '\x2', - '\x2', '\x2', '\x5', '\xBF', '\x3', '\x2', '\x2', '\x2', '\a', '\xC1', - '\x3', '\x2', '\x2', '\x2', '\t', '\xC3', '\x3', '\x2', '\x2', '\x2', - '\v', '\xC5', '\x3', '\x2', '\x2', '\x2', '\r', '\xC7', '\x3', '\x2', - '\x2', '\x2', '\xF', '\xC9', '\x3', '\x2', '\x2', '\x2', '\x11', '\xCB', - '\x3', '\x2', '\x2', '\x2', '\x13', '\xCD', '\x3', '\x2', '\x2', '\x2', - '\x15', '\xCF', '\x3', '\x2', '\x2', '\x2', '\x17', '\xD2', '\x3', '\x2', - '\x2', '\x2', '\x19', '\xD4', '\x3', '\x2', '\x2', '\x2', '\x1B', '\xD6', - '\x3', '\x2', '\x2', '\x2', '\x1D', '\xD8', '\x3', '\x2', '\x2', '\x2', - '\x1F', '\xDA', '\x3', '\x2', '\x2', '\x2', '!', '\xDC', '\x3', '\x2', - '\x2', '\x2', '#', '\xDE', '\x3', '\x2', '\x2', '\x2', '%', '\xE1', '\x3', - '\x2', '\x2', '\x2', '\'', '\xE4', '\x3', '\x2', '\x2', '\x2', ')', '\xE6', - '\x3', '\x2', '\x2', '\x2', '+', '\xE9', '\x3', '\x2', '\x2', '\x2', '-', - '\xEB', '\x3', '\x2', '\x2', '\x2', '/', '\xED', '\x3', '\x2', '\x2', - '\x2', '\x31', '\xEF', '\x3', '\x2', '\x2', '\x2', '\x33', '\xF2', '\x3', - '\x2', '\x2', '\x2', '\x35', '\xF4', '\x3', '\x2', '\x2', '\x2', '\x37', - '\xF6', '\x3', '\x2', '\x2', '\x2', '\x39', '\xF8', '\x3', '\x2', '\x2', - '\x2', ';', '\xFC', '\x3', '\x2', '\x2', '\x2', '=', '\x102', '\x3', '\x2', - '\x2', '\x2', '?', '\x105', '\x3', '\x2', '\x2', '\x2', '\x41', '\x109', - '\x3', '\x2', '\x2', '\x2', '\x43', '\x111', '\x3', '\x2', '\x2', '\x2', - '\x45', '\x114', '\x3', '\x2', '\x2', '\x2', 'G', '\x119', '\x3', '\x2', - '\x2', '\x2', 'I', '\x122', '\x3', '\x2', '\x2', '\x2', 'K', '\x129', - '\x3', '\x2', '\x2', '\x2', 'M', '\x130', '\x3', '\x2', '\x2', '\x2', - 'O', '\x136', '\x3', '\x2', '\x2', '\x2', 'Q', '\x13B', '\x3', '\x2', - '\x2', '\x2', 'S', '\x141', '\x3', '\x2', '\x2', '\x2', 'U', '\x144', - '\x3', '\x2', '\x2', '\x2', 'W', '\x149', '\x3', '\x2', '\x2', '\x2', - 'Y', '\x14E', '\x3', '\x2', '\x2', '\x2', '[', '\x154', '\x3', '\x2', - '\x2', '\x2', ']', '\x158', '\x3', '\x2', '\x2', '\x2', '_', '\x15D', - '\x3', '\x2', '\x2', '\x2', '\x61', '\x164', '\x3', '\x2', '\x2', '\x2', - '\x63', '\x167', '\x3', '\x2', '\x2', '\x2', '\x65', '\x16D', '\x3', '\x2', - '\x2', '\x2', 'g', '\x174', '\x3', '\x2', '\x2', '\x2', 'i', '\x178', - '\x3', '\x2', '\x2', '\x2', 'k', '\x17D', '\x3', '\x2', '\x2', '\x2', - 'm', '\x181', '\x3', '\x2', '\x2', '\x2', 'o', '\x18B', '\x3', '\x2', - '\x2', '\x2', 'q', '\x191', '\x3', '\x2', '\x2', '\x2', 's', '\x198', - '\x3', '\x2', '\x2', '\x2', 'u', '\x1CE', '\x3', '\x2', '\x2', '\x2', - 'w', '\x1E2', '\x3', '\x2', '\x2', '\x2', 'y', '\x1E4', '\x3', '\x2', - '\x2', '\x2', '{', '\x1E9', '\x3', '\x2', '\x2', '\x2', '}', '\x1EF', - '\x3', '\x2', '\x2', '\x2', '\x7F', '\x1F1', '\x3', '\x2', '\x2', '\x2', - '\x81', '\x1F3', '\x3', '\x2', '\x2', '\x2', '\x83', '\x1FE', '\x3', '\x2', - '\x2', '\x2', '\x85', '\x200', '\x3', '\x2', '\x2', '\x2', '\x87', '\x203', - '\x3', '\x2', '\x2', '\x2', '\x89', '\x205', '\x3', '\x2', '\x2', '\x2', - '\x8B', '\x207', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x209', '\x3', '\x2', - '\x2', '\x2', '\x8F', '\x20B', '\x3', '\x2', '\x2', '\x2', '\x91', '\x20D', - '\x3', '\x2', '\x2', '\x2', '\x93', '\x20F', '\x3', '\x2', '\x2', '\x2', - '\x95', '\x211', '\x3', '\x2', '\x2', '\x2', '\x97', '\x213', '\x3', '\x2', - '\x2', '\x2', '\x99', '\x215', '\x3', '\x2', '\x2', '\x2', '\x9B', '\x217', - '\x3', '\x2', '\x2', '\x2', '\x9D', '\x219', '\x3', '\x2', '\x2', '\x2', - '\x9F', '\x21B', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x21D', '\x3', '\x2', - '\x2', '\x2', '\xA3', '\x21F', '\x3', '\x2', '\x2', '\x2', '\xA5', '\x221', - '\x3', '\x2', '\x2', '\x2', '\xA7', '\x223', '\x3', '\x2', '\x2', '\x2', - '\xA9', '\x225', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x227', '\x3', '\x2', - '\x2', '\x2', '\xAD', '\x229', '\x3', '\x2', '\x2', '\x2', '\xAF', '\x22B', - '\x3', '\x2', '\x2', '\x2', '\xB1', '\x22D', '\x3', '\x2', '\x2', '\x2', - '\xB3', '\x22F', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x231', '\x3', '\x2', - '\x2', '\x2', '\xB7', '\x233', '\x3', '\x2', '\x2', '\x2', '\xB9', '\x235', - '\x3', '\x2', '\x2', '\x2', '\xBB', '\x237', '\x3', '\x2', '\x2', '\x2', - '\xBD', '\xBE', '\a', ',', '\x2', '\x2', '\xBE', '\x4', '\x3', '\x2', - '\x2', '\x2', '\xBF', '\xC0', '\a', '.', '\x2', '\x2', '\xC0', '\x6', - '\x3', '\x2', '\x2', '\x2', '\xC1', '\xC2', '\a', '*', '\x2', '\x2', '\xC2', - '\b', '\x3', '\x2', '\x2', '\x2', '\xC3', '\xC4', '\a', '+', '\x2', '\x2', - '\xC4', '\n', '\x3', '\x2', '\x2', '\x2', '\xC5', '\xC6', '\a', '\x30', - '\x2', '\x2', '\xC6', '\f', '\x3', '\x2', '\x2', '\x2', '\xC7', '\xC8', - '\a', ']', '\x2', '\x2', '\xC8', '\xE', '\x3', '\x2', '\x2', '\x2', '\xC9', - '\xCA', '\a', '_', '\x2', '\x2', '\xCA', '\x10', '\x3', '\x2', '\x2', - '\x2', '\xCB', '\xCC', '\a', '\x41', '\x2', '\x2', '\xCC', '\x12', '\x3', - '\x2', '\x2', '\x2', '\xCD', '\xCE', '\a', '<', '\x2', '\x2', '\xCE', - '\x14', '\x3', '\x2', '\x2', '\x2', '\xCF', '\xD0', '\a', '\x41', '\x2', - '\x2', '\xD0', '\xD1', '\a', '\x41', '\x2', '\x2', '\xD1', '\x16', '\x3', - '\x2', '\x2', '\x2', '\xD2', '\xD3', '\a', '\x31', '\x2', '\x2', '\xD3', - '\x18', '\x3', '\x2', '\x2', '\x2', '\xD4', '\xD5', '\a', '\'', '\x2', - '\x2', '\xD5', '\x1A', '\x3', '\x2', '\x2', '\x2', '\xD6', '\xD7', '\a', - '-', '\x2', '\x2', '\xD7', '\x1C', '\x3', '\x2', '\x2', '\x2', '\xD8', - '\xD9', '\a', '/', '\x2', '\x2', '\xD9', '\x1E', '\x3', '\x2', '\x2', - '\x2', '\xDA', '\xDB', '\a', '>', '\x2', '\x2', '\xDB', ' ', '\x3', '\x2', - '\x2', '\x2', '\xDC', '\xDD', '\a', '@', '\x2', '\x2', '\xDD', '\"', '\x3', - '\x2', '\x2', '\x2', '\xDE', '\xDF', '\a', '@', '\x2', '\x2', '\xDF', - '\xE0', '\a', '?', '\x2', '\x2', '\xE0', '$', '\x3', '\x2', '\x2', '\x2', - '\xE1', '\xE2', '\a', '>', '\x2', '\x2', '\xE2', '\xE3', '\a', '?', '\x2', - '\x2', '\xE3', '&', '\x3', '\x2', '\x2', '\x2', '\xE4', '\xE5', '\a', - '?', '\x2', '\x2', '\xE5', '(', '\x3', '\x2', '\x2', '\x2', '\xE6', '\xE7', - '\a', '#', '\x2', '\x2', '\xE7', '\xE8', '\a', '?', '\x2', '\x2', '\xE8', - '*', '\x3', '\x2', '\x2', '\x2', '\xE9', '\xEA', '\a', '(', '\x2', '\x2', - '\xEA', ',', '\x3', '\x2', '\x2', '\x2', '\xEB', '\xEC', '\a', '`', '\x2', - '\x2', '\xEC', '.', '\x3', '\x2', '\x2', '\x2', '\xED', '\xEE', '\a', - '~', '\x2', '\x2', '\xEE', '\x30', '\x3', '\x2', '\x2', '\x2', '\xEF', - '\xF0', '\a', '~', '\x2', '\x2', '\xF0', '\xF1', '\a', '~', '\x2', '\x2', - '\xF1', '\x32', '\x3', '\x2', '\x2', '\x2', '\xF2', '\xF3', '\a', '\x80', - '\x2', '\x2', '\xF3', '\x34', '\x3', '\x2', '\x2', '\x2', '\xF4', '\xF5', - '\a', '}', '\x2', '\x2', '\xF5', '\x36', '\x3', '\x2', '\x2', '\x2', '\xF6', - '\xF7', '\a', '\x7F', '\x2', '\x2', '\xF7', '\x38', '\x3', '\x2', '\x2', - '\x2', '\xF8', '\xF9', '\x5', '\x89', '\x45', '\x2', '\xF9', '\xFA', '\x5', - '\xA3', 'R', '\x2', '\xFA', '\xFB', '\x5', '\x8F', 'H', '\x2', '\xFB', - ':', '\x3', '\x2', '\x2', '\x2', '\xFC', '\xFD', '\x5', '\x89', '\x45', - '\x2', '\xFD', '\xFE', '\x5', '\xAB', 'V', '\x2', '\xFE', '\xFF', '\x5', - '\xAB', 'V', '\x2', '\xFF', '\x100', '\x5', '\x89', '\x45', '\x2', '\x100', - '\x101', '\x5', '\xB9', ']', '\x2', '\x101', '<', '\x3', '\x2', '\x2', - '\x2', '\x102', '\x103', '\x5', '\x89', '\x45', '\x2', '\x103', '\x104', - '\x5', '\xAD', 'W', '\x2', '\x104', '>', '\x3', '\x2', '\x2', '\x2', '\x105', - '\x106', '\x5', '\x89', '\x45', '\x2', '\x106', '\x107', '\x5', '\xAD', - 'W', '\x2', '\x107', '\x108', '\x5', '\x8D', 'G', '\x2', '\x108', '@', - '\x3', '\x2', '\x2', '\x2', '\x109', '\x10A', '\x5', '\x8B', '\x46', '\x2', - '\x10A', '\x10B', '\x5', '\x91', 'I', '\x2', '\x10B', '\x10C', '\x5', - '\xAF', 'X', '\x2', '\x10C', '\x10D', '\x5', '\xB5', '[', '\x2', '\x10D', - '\x10E', '\x5', '\x91', 'I', '\x2', '\x10E', '\x10F', '\x5', '\x91', 'I', - '\x2', '\x10F', '\x110', '\x5', '\xA3', 'R', '\x2', '\x110', '\x42', '\x3', - '\x2', '\x2', '\x2', '\x111', '\x112', '\x5', '\x8B', '\x46', '\x2', '\x112', - '\x113', '\x5', '\xB9', ']', '\x2', '\x113', '\x44', '\x3', '\x2', '\x2', - '\x2', '\x114', '\x115', '\x5', '\x8F', 'H', '\x2', '\x115', '\x116', - '\x5', '\x91', 'I', '\x2', '\x116', '\x117', '\x5', '\xAD', 'W', '\x2', - '\x117', '\x118', '\x5', '\x8D', 'G', '\x2', '\x118', '\x46', '\x3', '\x2', - '\x2', '\x2', '\x119', '\x11A', '\x5', '\x8F', 'H', '\x2', '\x11A', '\x11B', - '\x5', '\x99', 'M', '\x2', '\x11B', '\x11C', '\x5', '\xAD', 'W', '\x2', - '\x11C', '\x11D', '\x5', '\xAF', 'X', '\x2', '\x11D', '\x11E', '\x5', - '\x99', 'M', '\x2', '\x11E', '\x11F', '\x5', '\xA3', 'R', '\x2', '\x11F', - '\x120', '\x5', '\x8D', 'G', '\x2', '\x120', '\x121', '\x5', '\xAF', 'X', - '\x2', '\x121', 'H', '\x3', '\x2', '\x2', '\x2', '\x122', '\x123', '\x5', - '\x91', 'I', '\x2', '\x123', '\x124', '\x5', '\xAD', 'W', '\x2', '\x124', - '\x125', '\x5', '\x8D', 'G', '\x2', '\x125', '\x126', '\x5', '\x89', '\x45', - '\x2', '\x126', '\x127', '\x5', '\xA7', 'T', '\x2', '\x127', '\x128', - '\x5', '\x91', 'I', '\x2', '\x128', 'J', '\x3', '\x2', '\x2', '\x2', '\x129', - '\x12A', '\x5', '\x91', 'I', '\x2', '\x12A', '\x12B', '\x5', '\xB7', '\\', - '\x2', '\x12B', '\x12C', '\x5', '\x99', 'M', '\x2', '\x12C', '\x12D', - '\x5', '\xAD', 'W', '\x2', '\x12D', '\x12E', '\x5', '\xAF', 'X', '\x2', - '\x12E', '\x12F', '\x5', '\xAD', 'W', '\x2', '\x12F', 'L', '\x3', '\x2', - '\x2', '\x2', '\x130', '\x131', '\a', 'h', '\x2', '\x2', '\x131', '\x132', - '\a', '\x63', '\x2', '\x2', '\x132', '\x133', '\a', 'n', '\x2', '\x2', - '\x133', '\x134', '\a', 'u', '\x2', '\x2', '\x134', '\x135', '\a', 'g', - '\x2', '\x2', '\x135', 'N', '\x3', '\x2', '\x2', '\x2', '\x136', '\x137', - '\x5', '\x93', 'J', '\x2', '\x137', '\x138', '\x5', '\xAB', 'V', '\x2', - '\x138', '\x139', '\x5', '\xA5', 'S', '\x2', '\x139', '\x13A', '\x5', - '\xA1', 'Q', '\x2', '\x13A', 'P', '\x3', '\x2', '\x2', '\x2', '\x13B', - '\x13C', '\x5', '\x95', 'K', '\x2', '\x13C', '\x13D', '\x5', '\xAB', 'V', - '\x2', '\x13D', '\x13E', '\x5', '\xA5', 'S', '\x2', '\x13E', '\x13F', - '\x5', '\xB1', 'Y', '\x2', '\x13F', '\x140', '\x5', '\xA7', 'T', '\x2', - '\x140', 'R', '\x3', '\x2', '\x2', '\x2', '\x141', '\x142', '\x5', '\x99', - 'M', '\x2', '\x142', '\x143', '\x5', '\xA3', 'R', '\x2', '\x143', 'T', - '\x3', '\x2', '\x2', '\x2', '\x144', '\x145', '\x5', '\x9B', 'N', '\x2', - '\x145', '\x146', '\x5', '\xA5', 'S', '\x2', '\x146', '\x147', '\x5', - '\x99', 'M', '\x2', '\x147', '\x148', '\x5', '\xA3', 'R', '\x2', '\x148', - 'V', '\x3', '\x2', '\x2', '\x2', '\x149', '\x14A', '\x5', '\x9F', 'P', - '\x2', '\x14A', '\x14B', '\x5', '\x99', 'M', '\x2', '\x14B', '\x14C', - '\x5', '\x9D', 'O', '\x2', '\x14C', '\x14D', '\x5', '\x91', 'I', '\x2', - '\x14D', 'X', '\x3', '\x2', '\x2', '\x2', '\x14E', '\x14F', '\x5', '\x9F', - 'P', '\x2', '\x14F', '\x150', '\x5', '\x99', 'M', '\x2', '\x150', '\x151', - '\x5', '\xA1', 'Q', '\x2', '\x151', '\x152', '\x5', '\x99', 'M', '\x2', - '\x152', '\x153', '\x5', '\xAF', 'X', '\x2', '\x153', 'Z', '\x3', '\x2', - '\x2', '\x2', '\x154', '\x155', '\x5', '\xA3', 'R', '\x2', '\x155', '\x156', - '\x5', '\xA5', 'S', '\x2', '\x156', '\x157', '\x5', '\xAF', 'X', '\x2', - '\x157', '\\', '\x3', '\x2', '\x2', '\x2', '\x158', '\x159', '\a', 'p', - '\x2', '\x2', '\x159', '\x15A', '\a', 'w', '\x2', '\x2', '\x15A', '\x15B', - '\a', 'n', '\x2', '\x2', '\x15B', '\x15C', '\a', 'n', '\x2', '\x2', '\x15C', - '^', '\x3', '\x2', '\x2', '\x2', '\x15D', '\x15E', '\x5', '\xA5', 'S', - '\x2', '\x15E', '\x15F', '\x5', '\x93', 'J', '\x2', '\x15F', '\x160', - '\x5', '\x93', 'J', '\x2', '\x160', '\x161', '\x5', '\xAD', 'W', '\x2', - '\x161', '\x162', '\x5', '\x91', 'I', '\x2', '\x162', '\x163', '\x5', - '\xAF', 'X', '\x2', '\x163', '`', '\x3', '\x2', '\x2', '\x2', '\x164', - '\x165', '\x5', '\xA5', 'S', '\x2', '\x165', '\x166', '\x5', '\xAB', 'V', - '\x2', '\x166', '\x62', '\x3', '\x2', '\x2', '\x2', '\x167', '\x168', - '\x5', '\xA5', 'S', '\x2', '\x168', '\x169', '\x5', '\xAB', 'V', '\x2', - '\x169', '\x16A', '\x5', '\x8F', 'H', '\x2', '\x16A', '\x16B', '\x5', - '\x91', 'I', '\x2', '\x16B', '\x16C', '\x5', '\xAB', 'V', '\x2', '\x16C', - '\x64', '\x3', '\x2', '\x2', '\x2', '\x16D', '\x16E', '\x5', '\xAD', 'W', - '\x2', '\x16E', '\x16F', '\x5', '\x91', 'I', '\x2', '\x16F', '\x170', - '\x5', '\x9F', 'P', '\x2', '\x170', '\x171', '\x5', '\x91', 'I', '\x2', - '\x171', '\x172', '\x5', '\x8D', 'G', '\x2', '\x172', '\x173', '\x5', - '\xAF', 'X', '\x2', '\x173', '\x66', '\x3', '\x2', '\x2', '\x2', '\x174', - '\x175', '\x5', '\xAF', 'X', '\x2', '\x175', '\x176', '\x5', '\xA5', 'S', - '\x2', '\x176', '\x177', '\x5', '\xA7', 'T', '\x2', '\x177', 'h', '\x3', - '\x2', '\x2', '\x2', '\x178', '\x179', '\a', 'v', '\x2', '\x2', '\x179', - '\x17A', '\a', 't', '\x2', '\x2', '\x17A', '\x17B', '\a', 'w', '\x2', - '\x2', '\x17B', '\x17C', '\a', 'g', '\x2', '\x2', '\x17C', 'j', '\x3', - '\x2', '\x2', '\x2', '\x17D', '\x17E', '\a', 'w', '\x2', '\x2', '\x17E', - '\x17F', '\a', '\x66', '\x2', '\x2', '\x17F', '\x180', '\a', 'h', '\x2', - '\x2', '\x180', 'l', '\x3', '\x2', '\x2', '\x2', '\x181', '\x182', '\a', - 'w', '\x2', '\x2', '\x182', '\x183', '\a', 'p', '\x2', '\x2', '\x183', - '\x184', '\a', '\x66', '\x2', '\x2', '\x184', '\x185', '\a', 'g', '\x2', - '\x2', '\x185', '\x186', '\a', 'h', '\x2', '\x2', '\x186', '\x187', '\a', - 'k', '\x2', '\x2', '\x187', '\x188', '\a', 'p', '\x2', '\x2', '\x188', - '\x189', '\a', 'g', '\x2', '\x2', '\x189', '\x18A', '\a', '\x66', '\x2', - '\x2', '\x18A', 'n', '\x3', '\x2', '\x2', '\x2', '\x18B', '\x18C', '\x5', - '\xB3', 'Z', '\x2', '\x18C', '\x18D', '\x5', '\x89', '\x45', '\x2', '\x18D', - '\x18E', '\x5', '\x9F', 'P', '\x2', '\x18E', '\x18F', '\x5', '\xB1', 'Y', - '\x2', '\x18F', '\x190', '\x5', '\x91', 'I', '\x2', '\x190', 'p', '\x3', - '\x2', '\x2', '\x2', '\x191', '\x192', '\x5', '\xB5', '[', '\x2', '\x192', - '\x193', '\x5', '\x97', 'L', '\x2', '\x193', '\x194', '\x5', '\x91', 'I', - '\x2', '\x194', '\x195', '\x5', '\xAB', 'V', '\x2', '\x195', '\x196', - '\x5', '\x91', 'I', '\x2', '\x196', 'r', '\x3', '\x2', '\x2', '\x2', '\x197', - '\x199', '\t', '\x2', '\x2', '\x2', '\x198', '\x197', '\x3', '\x2', '\x2', - '\x2', '\x199', '\x19A', '\x3', '\x2', '\x2', '\x2', '\x19A', '\x198', - '\x3', '\x2', '\x2', '\x2', '\x19A', '\x19B', '\x3', '\x2', '\x2', '\x2', - '\x19B', '\x19C', '\x3', '\x2', '\x2', '\x2', '\x19C', '\x19D', '\b', - ':', '\x2', '\x2', '\x19D', 't', '\x3', '\x2', '\x2', '\x2', '\x19E', - '\x1A0', '\t', '\x3', '\x2', '\x2', '\x19F', '\x19E', '\x3', '\x2', '\x2', - '\x2', '\x19F', '\x1A0', '\x3', '\x2', '\x2', '\x2', '\x1A0', '\x1A2', - '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x1A3', '\x5', '\x87', '\x44', '\x2', - '\x1A2', '\x1A1', '\x3', '\x2', '\x2', '\x2', '\x1A3', '\x1A4', '\x3', - '\x2', '\x2', '\x2', '\x1A4', '\x1A2', '\x3', '\x2', '\x2', '\x2', '\x1A4', - '\x1A5', '\x3', '\x2', '\x2', '\x2', '\x1A5', '\x1AD', '\x3', '\x2', '\x2', - '\x2', '\x1A6', '\x1AA', '\a', '\x30', '\x2', '\x2', '\x1A7', '\x1A9', - '\x5', '\x87', '\x44', '\x2', '\x1A8', '\x1A7', '\x3', '\x2', '\x2', '\x2', - '\x1A9', '\x1AC', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1A8', '\x3', - '\x2', '\x2', '\x2', '\x1AA', '\x1AB', '\x3', '\x2', '\x2', '\x2', '\x1AB', - '\x1AE', '\x3', '\x2', '\x2', '\x2', '\x1AC', '\x1AA', '\x3', '\x2', '\x2', - '\x2', '\x1AD', '\x1A6', '\x3', '\x2', '\x2', '\x2', '\x1AD', '\x1AE', - '\x3', '\x2', '\x2', '\x2', '\x1AE', '\x1B8', '\x3', '\x2', '\x2', '\x2', - '\x1AF', '\x1B1', '\x5', '\x91', 'I', '\x2', '\x1B0', '\x1B2', '\t', '\x3', - '\x2', '\x2', '\x1B1', '\x1B0', '\x3', '\x2', '\x2', '\x2', '\x1B1', '\x1B2', - '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B4', '\x3', '\x2', '\x2', '\x2', - '\x1B3', '\x1B5', '\x5', '\x87', '\x44', '\x2', '\x1B4', '\x1B3', '\x3', - '\x2', '\x2', '\x2', '\x1B5', '\x1B6', '\x3', '\x2', '\x2', '\x2', '\x1B6', - '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B6', '\x1B7', '\x3', '\x2', '\x2', - '\x2', '\x1B7', '\x1B9', '\x3', '\x2', '\x2', '\x2', '\x1B8', '\x1AF', - '\x3', '\x2', '\x2', '\x2', '\x1B8', '\x1B9', '\x3', '\x2', '\x2', '\x2', - '\x1B9', '\x1CF', '\x3', '\x2', '\x2', '\x2', '\x1BA', '\x1BC', '\t', - '\x3', '\x2', '\x2', '\x1BB', '\x1BA', '\x3', '\x2', '\x2', '\x2', '\x1BB', - '\x1BC', '\x3', '\x2', '\x2', '\x2', '\x1BC', '\x1BD', '\x3', '\x2', '\x2', - '\x2', '\x1BD', '\x1BF', '\a', '\x30', '\x2', '\x2', '\x1BE', '\x1C0', - '\x5', '\x87', '\x44', '\x2', '\x1BF', '\x1BE', '\x3', '\x2', '\x2', '\x2', - '\x1C0', '\x1C1', '\x3', '\x2', '\x2', '\x2', '\x1C1', '\x1BF', '\x3', - '\x2', '\x2', '\x2', '\x1C1', '\x1C2', '\x3', '\x2', '\x2', '\x2', '\x1C2', - '\x1CC', '\x3', '\x2', '\x2', '\x2', '\x1C3', '\x1C5', '\x5', '\x91', - 'I', '\x2', '\x1C4', '\x1C6', '\t', '\x3', '\x2', '\x2', '\x1C5', '\x1C4', - '\x3', '\x2', '\x2', '\x2', '\x1C5', '\x1C6', '\x3', '\x2', '\x2', '\x2', - '\x1C6', '\x1C8', '\x3', '\x2', '\x2', '\x2', '\x1C7', '\x1C9', '\x5', - '\x87', '\x44', '\x2', '\x1C8', '\x1C7', '\x3', '\x2', '\x2', '\x2', '\x1C9', - '\x1CA', '\x3', '\x2', '\x2', '\x2', '\x1CA', '\x1C8', '\x3', '\x2', '\x2', - '\x2', '\x1CA', '\x1CB', '\x3', '\x2', '\x2', '\x2', '\x1CB', '\x1CD', - '\x3', '\x2', '\x2', '\x2', '\x1CC', '\x1C3', '\x3', '\x2', '\x2', '\x2', - '\x1CC', '\x1CD', '\x3', '\x2', '\x2', '\x2', '\x1CD', '\x1CF', '\x3', - '\x2', '\x2', '\x2', '\x1CE', '\x19F', '\x3', '\x2', '\x2', '\x2', '\x1CE', - '\x1BB', '\x3', '\x2', '\x2', '\x2', '\x1CF', 'v', '\x3', '\x2', '\x2', - '\x2', '\x1D0', '\x1D5', '\a', '$', '\x2', '\x2', '\x1D1', '\x1D4', '\x5', - 'y', '=', '\x2', '\x1D2', '\x1D4', '\x5', '\x81', '\x41', '\x2', '\x1D3', - '\x1D1', '\x3', '\x2', '\x2', '\x2', '\x1D3', '\x1D2', '\x3', '\x2', '\x2', - '\x2', '\x1D4', '\x1D7', '\x3', '\x2', '\x2', '\x2', '\x1D5', '\x1D3', - '\x3', '\x2', '\x2', '\x2', '\x1D5', '\x1D6', '\x3', '\x2', '\x2', '\x2', - '\x1D6', '\x1D8', '\x3', '\x2', '\x2', '\x2', '\x1D7', '\x1D5', '\x3', - '\x2', '\x2', '\x2', '\x1D8', '\x1E3', '\a', '$', '\x2', '\x2', '\x1D9', - '\x1DE', '\a', ')', '\x2', '\x2', '\x1DA', '\x1DD', '\x5', 'y', '=', '\x2', - '\x1DB', '\x1DD', '\x5', '\x7F', '@', '\x2', '\x1DC', '\x1DA', '\x3', - '\x2', '\x2', '\x2', '\x1DC', '\x1DB', '\x3', '\x2', '\x2', '\x2', '\x1DD', - '\x1E0', '\x3', '\x2', '\x2', '\x2', '\x1DE', '\x1DC', '\x3', '\x2', '\x2', - '\x2', '\x1DE', '\x1DF', '\x3', '\x2', '\x2', '\x2', '\x1DF', '\x1E1', - '\x3', '\x2', '\x2', '\x2', '\x1E0', '\x1DE', '\x3', '\x2', '\x2', '\x2', - '\x1E1', '\x1E3', '\a', ')', '\x2', '\x2', '\x1E2', '\x1D0', '\x3', '\x2', - '\x2', '\x2', '\x1E2', '\x1D9', '\x3', '\x2', '\x2', '\x2', '\x1E3', 'x', - '\x3', '\x2', '\x2', '\x2', '\x1E4', '\x1E7', '\a', '^', '\x2', '\x2', - '\x1E5', '\x1E8', '\t', '\x4', '\x2', '\x2', '\x1E6', '\x1E8', '\x5', - '{', '>', '\x2', '\x1E7', '\x1E5', '\x3', '\x2', '\x2', '\x2', '\x1E7', - '\x1E6', '\x3', '\x2', '\x2', '\x2', '\x1E8', 'z', '\x3', '\x2', '\x2', - '\x2', '\x1E9', '\x1EA', '\a', 'w', '\x2', '\x2', '\x1EA', '\x1EB', '\x5', - '}', '?', '\x2', '\x1EB', '\x1EC', '\x5', '}', '?', '\x2', '\x1EC', '\x1ED', - '\x5', '}', '?', '\x2', '\x1ED', '\x1EE', '\x5', '}', '?', '\x2', '\x1EE', - '|', '\x3', '\x2', '\x2', '\x2', '\x1EF', '\x1F0', '\t', '\x5', '\x2', - '\x2', '\x1F0', '~', '\x3', '\x2', '\x2', '\x2', '\x1F1', '\x1F2', '\n', - '\x6', '\x2', '\x2', '\x1F2', '\x80', '\x3', '\x2', '\x2', '\x2', '\x1F3', - '\x1F4', '\n', '\a', '\x2', '\x2', '\x1F4', '\x82', '\x3', '\x2', '\x2', - '\x2', '\x1F5', '\x1FF', '\x3', '\x2', '\x2', '\x2', '\x1F6', '\x1FB', - '\t', '\b', '\x2', '\x2', '\x1F7', '\x1FA', '\t', '\b', '\x2', '\x2', - '\x1F8', '\x1FA', '\x5', '\x87', '\x44', '\x2', '\x1F9', '\x1F7', '\x3', - '\x2', '\x2', '\x2', '\x1F9', '\x1F8', '\x3', '\x2', '\x2', '\x2', '\x1FA', - '\x1FD', '\x3', '\x2', '\x2', '\x2', '\x1FB', '\x1F9', '\x3', '\x2', '\x2', - '\x2', '\x1FB', '\x1FC', '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x1FF', - '\x3', '\x2', '\x2', '\x2', '\x1FD', '\x1FB', '\x3', '\x2', '\x2', '\x2', - '\x1FE', '\x1F5', '\x3', '\x2', '\x2', '\x2', '\x1FE', '\x1F6', '\x3', - '\x2', '\x2', '\x2', '\x1FF', '\x84', '\x3', '\x2', '\x2', '\x2', '\x200', - '\x201', '\a', '\x42', '\x2', '\x2', '\x201', '\x202', '\x5', '\x83', - '\x42', '\x2', '\x202', '\x86', '\x3', '\x2', '\x2', '\x2', '\x203', '\x204', - '\t', '\t', '\x2', '\x2', '\x204', '\x88', '\x3', '\x2', '\x2', '\x2', - '\x205', '\x206', '\t', '\n', '\x2', '\x2', '\x206', '\x8A', '\x3', '\x2', - '\x2', '\x2', '\x207', '\x208', '\t', '\v', '\x2', '\x2', '\x208', '\x8C', - '\x3', '\x2', '\x2', '\x2', '\x209', '\x20A', '\t', '\f', '\x2', '\x2', - '\x20A', '\x8E', '\x3', '\x2', '\x2', '\x2', '\x20B', '\x20C', '\t', '\r', - '\x2', '\x2', '\x20C', '\x90', '\x3', '\x2', '\x2', '\x2', '\x20D', '\x20E', - '\t', '\xE', '\x2', '\x2', '\x20E', '\x92', '\x3', '\x2', '\x2', '\x2', - '\x20F', '\x210', '\t', '\xF', '\x2', '\x2', '\x210', '\x94', '\x3', '\x2', - '\x2', '\x2', '\x211', '\x212', '\t', '\x10', '\x2', '\x2', '\x212', '\x96', - '\x3', '\x2', '\x2', '\x2', '\x213', '\x214', '\t', '\x11', '\x2', '\x2', - '\x214', '\x98', '\x3', '\x2', '\x2', '\x2', '\x215', '\x216', '\t', '\x12', - '\x2', '\x2', '\x216', '\x9A', '\x3', '\x2', '\x2', '\x2', '\x217', '\x218', - '\t', '\x13', '\x2', '\x2', '\x218', '\x9C', '\x3', '\x2', '\x2', '\x2', - '\x219', '\x21A', '\t', '\x14', '\x2', '\x2', '\x21A', '\x9E', '\x3', - '\x2', '\x2', '\x2', '\x21B', '\x21C', '\t', '\x15', '\x2', '\x2', '\x21C', - '\xA0', '\x3', '\x2', '\x2', '\x2', '\x21D', '\x21E', '\t', '\x16', '\x2', - '\x2', '\x21E', '\xA2', '\x3', '\x2', '\x2', '\x2', '\x21F', '\x220', - '\t', '\x17', '\x2', '\x2', '\x220', '\xA4', '\x3', '\x2', '\x2', '\x2', - '\x221', '\x222', '\t', '\x18', '\x2', '\x2', '\x222', '\xA6', '\x3', - '\x2', '\x2', '\x2', '\x223', '\x224', '\t', '\x19', '\x2', '\x2', '\x224', - '\xA8', '\x3', '\x2', '\x2', '\x2', '\x225', '\x226', '\t', '\x1A', '\x2', - '\x2', '\x226', '\xAA', '\x3', '\x2', '\x2', '\x2', '\x227', '\x228', - '\t', '\x1B', '\x2', '\x2', '\x228', '\xAC', '\x3', '\x2', '\x2', '\x2', - '\x229', '\x22A', '\t', '\x1C', '\x2', '\x2', '\x22A', '\xAE', '\x3', - '\x2', '\x2', '\x2', '\x22B', '\x22C', '\t', '\x1D', '\x2', '\x2', '\x22C', - '\xB0', '\x3', '\x2', '\x2', '\x2', '\x22D', '\x22E', '\t', '\x1E', '\x2', - '\x2', '\x22E', '\xB2', '\x3', '\x2', '\x2', '\x2', '\x22F', '\x230', - '\t', '\x1F', '\x2', '\x2', '\x230', '\xB4', '\x3', '\x2', '\x2', '\x2', - '\x231', '\x232', '\t', ' ', '\x2', '\x2', '\x232', '\xB6', '\x3', '\x2', - '\x2', '\x2', '\x233', '\x234', '\t', '!', '\x2', '\x2', '\x234', '\xB8', - '\x3', '\x2', '\x2', '\x2', '\x235', '\x236', '\t', '\"', '\x2', '\x2', - '\x236', '\xBA', '\x3', '\x2', '\x2', '\x2', '\x237', '\x238', '\t', '#', - '\x2', '\x2', '\x238', '\xBC', '\x3', '\x2', '\x2', '\x2', '\x1A', '\x2', - '\x19A', '\x19F', '\x1A4', '\x1AA', '\x1AD', '\x1B1', '\x1B6', '\x1B8', - '\x1BB', '\x1C1', '\x1C5', '\x1CA', '\x1CC', '\x1CE', '\x1D3', '\x1D5', - '\x1DC', '\x1DE', '\x1E2', '\x1E7', '\x1F9', '\x1FB', '\x1FE', '\x3', - '\b', '\x2', '\x2', + '\x3', '\\', '\x3', ']', '\x3', ']', '\x3', '^', '\x3', '^', '\x3', '_', + '\x3', '_', '\x3', '`', '\x3', '`', '\x3', '\x61', '\x3', '\x61', '\x2', + '\x2', '\x62', '\x3', '\x3', '\x5', '\x4', '\a', '\x5', '\t', '\x6', '\v', + '\a', '\r', '\b', '\xF', '\t', '\x11', '\n', '\x13', '\v', '\x15', '\f', + '\x17', '\r', '\x19', '\xE', '\x1B', '\xF', '\x1D', '\x10', '\x1F', '\x11', + '!', '\x12', '#', '\x13', '%', '\x14', '\'', '\x15', ')', '\x16', '+', + '\x17', '-', '\x18', '/', '\x19', '\x31', '\x1A', '\x33', '\x1B', '\x35', + '\x1C', '\x37', '\x1D', '\x39', '\x1E', ';', '\x1F', '=', ' ', '?', '!', + '\x41', '\"', '\x43', '#', '\x45', '$', 'G', '%', 'I', '&', 'K', '\'', + 'M', '(', 'O', ')', 'Q', '*', 'S', '+', 'U', ',', 'W', '-', 'Y', '.', + '[', '/', ']', '\x30', '_', '\x31', '\x61', '\x32', '\x63', '\x33', '\x65', + '\x34', 'g', '\x35', 'i', '\x36', 'k', '\x37', 'm', '\x38', 'o', '\x39', + 'q', ':', 's', ';', 'u', '<', 'w', '=', 'y', '>', '{', '?', '}', '@', + '\x7F', '\x2', '\x81', '\x2', '\x83', '\x2', '\x85', '\x2', '\x87', '\x2', + '\x89', '\x41', '\x8B', '\x42', '\x8D', '\x2', '\x8F', '\x2', '\x91', + '\x2', '\x93', '\x2', '\x95', '\x2', '\x97', '\x2', '\x99', '\x2', '\x9B', + '\x2', '\x9D', '\x2', '\x9F', '\x2', '\xA1', '\x2', '\xA3', '\x2', '\xA5', + '\x2', '\xA7', '\x2', '\xA9', '\x2', '\xAB', '\x2', '\xAD', '\x2', '\xAF', + '\x2', '\xB1', '\x2', '\xB3', '\x2', '\xB5', '\x2', '\xB7', '\x2', '\xB9', + '\x2', '\xBB', '\x2', '\xBD', '\x2', '\xBF', '\x2', '\xC1', '\x2', '\x3', + '\x2', '$', '\x5', '\x2', '\v', '\f', '\xF', '\xF', '\"', '\"', '\x4', + '\x2', '-', '-', '/', '/', '\n', '\x2', '$', '$', '\x31', '\x31', '^', + '^', '\x64', '\x64', 'h', 'h', 'p', 'p', 't', 't', 'v', 'v', '\x5', '\x2', + '\x32', ';', '\x43', 'H', '\x63', 'h', '\x5', '\x2', '\x2', '!', ')', + ')', '^', '^', '\x5', '\x2', '\x2', '!', '$', '$', '^', '^', '\x5', '\x2', + '\x43', '\\', '\x61', '\x61', '\x63', '|', '\x3', '\x2', '\x32', ';', + '\x4', '\x2', '\x43', '\x43', '\x63', '\x63', '\x4', '\x2', '\x44', '\x44', + '\x64', '\x64', '\x4', '\x2', '\x45', '\x45', '\x65', '\x65', '\x4', '\x2', + '\x46', '\x46', '\x66', '\x66', '\x4', '\x2', 'G', 'G', 'g', 'g', '\x4', + '\x2', 'H', 'H', 'h', 'h', '\x4', '\x2', 'I', 'I', 'i', 'i', '\x4', '\x2', + 'J', 'J', 'j', 'j', '\x4', '\x2', 'K', 'K', 'k', 'k', '\x4', '\x2', 'L', + 'L', 'l', 'l', '\x4', '\x2', 'M', 'M', 'm', 'm', '\x4', '\x2', 'N', 'N', + 'n', 'n', '\x4', '\x2', 'O', 'O', 'o', 'o', '\x4', '\x2', 'P', 'P', 'p', + 'p', '\x4', '\x2', 'Q', 'Q', 'q', 'q', '\x4', '\x2', 'R', 'R', 'r', 'r', + '\x4', '\x2', 'S', 'S', 's', 's', '\x4', '\x2', 'T', 'T', 't', 't', '\x4', + '\x2', 'U', 'U', 'u', 'u', '\x4', '\x2', 'V', 'V', 'v', 'v', '\x4', '\x2', + 'W', 'W', 'w', 'w', '\x4', '\x2', 'X', 'X', 'x', 'x', '\x4', '\x2', 'Y', + 'Y', 'y', 'y', '\x4', '\x2', 'Z', 'Z', 'z', 'z', '\x4', '\x2', '[', '[', + '{', '{', '\x4', '\x2', '\\', '\\', '|', '|', '\x2', '\x244', '\x2', '\x3', + '\x3', '\x2', '\x2', '\x2', '\x2', '\x5', '\x3', '\x2', '\x2', '\x2', + '\x2', '\a', '\x3', '\x2', '\x2', '\x2', '\x2', '\t', '\x3', '\x2', '\x2', + '\x2', '\x2', '\v', '\x3', '\x2', '\x2', '\x2', '\x2', '\r', '\x3', '\x2', + '\x2', '\x2', '\x2', '\xF', '\x3', '\x2', '\x2', '\x2', '\x2', '\x11', + '\x3', '\x2', '\x2', '\x2', '\x2', '\x13', '\x3', '\x2', '\x2', '\x2', + '\x2', '\x15', '\x3', '\x2', '\x2', '\x2', '\x2', '\x17', '\x3', '\x2', + '\x2', '\x2', '\x2', '\x19', '\x3', '\x2', '\x2', '\x2', '\x2', '\x1B', + '\x3', '\x2', '\x2', '\x2', '\x2', '\x1D', '\x3', '\x2', '\x2', '\x2', + '\x2', '\x1F', '\x3', '\x2', '\x2', '\x2', '\x2', '!', '\x3', '\x2', '\x2', + '\x2', '\x2', '#', '\x3', '\x2', '\x2', '\x2', '\x2', '%', '\x3', '\x2', + '\x2', '\x2', '\x2', '\'', '\x3', '\x2', '\x2', '\x2', '\x2', ')', '\x3', + '\x2', '\x2', '\x2', '\x2', '+', '\x3', '\x2', '\x2', '\x2', '\x2', '-', + '\x3', '\x2', '\x2', '\x2', '\x2', '/', '\x3', '\x2', '\x2', '\x2', '\x2', + '\x31', '\x3', '\x2', '\x2', '\x2', '\x2', '\x33', '\x3', '\x2', '\x2', + '\x2', '\x2', '\x35', '\x3', '\x2', '\x2', '\x2', '\x2', '\x37', '\x3', + '\x2', '\x2', '\x2', '\x2', '\x39', '\x3', '\x2', '\x2', '\x2', '\x2', + ';', '\x3', '\x2', '\x2', '\x2', '\x2', '=', '\x3', '\x2', '\x2', '\x2', + '\x2', '?', '\x3', '\x2', '\x2', '\x2', '\x2', '\x41', '\x3', '\x2', '\x2', + '\x2', '\x2', '\x43', '\x3', '\x2', '\x2', '\x2', '\x2', '\x45', '\x3', + '\x2', '\x2', '\x2', '\x2', 'G', '\x3', '\x2', '\x2', '\x2', '\x2', 'I', + '\x3', '\x2', '\x2', '\x2', '\x2', 'K', '\x3', '\x2', '\x2', '\x2', '\x2', + 'M', '\x3', '\x2', '\x2', '\x2', '\x2', 'O', '\x3', '\x2', '\x2', '\x2', + '\x2', 'Q', '\x3', '\x2', '\x2', '\x2', '\x2', 'S', '\x3', '\x2', '\x2', + '\x2', '\x2', 'U', '\x3', '\x2', '\x2', '\x2', '\x2', 'W', '\x3', '\x2', + '\x2', '\x2', '\x2', 'Y', '\x3', '\x2', '\x2', '\x2', '\x2', '[', '\x3', + '\x2', '\x2', '\x2', '\x2', ']', '\x3', '\x2', '\x2', '\x2', '\x2', '_', + '\x3', '\x2', '\x2', '\x2', '\x2', '\x61', '\x3', '\x2', '\x2', '\x2', + '\x2', '\x63', '\x3', '\x2', '\x2', '\x2', '\x2', '\x65', '\x3', '\x2', + '\x2', '\x2', '\x2', 'g', '\x3', '\x2', '\x2', '\x2', '\x2', 'i', '\x3', + '\x2', '\x2', '\x2', '\x2', 'k', '\x3', '\x2', '\x2', '\x2', '\x2', 'm', + '\x3', '\x2', '\x2', '\x2', '\x2', 'o', '\x3', '\x2', '\x2', '\x2', '\x2', + 'q', '\x3', '\x2', '\x2', '\x2', '\x2', 's', '\x3', '\x2', '\x2', '\x2', + '\x2', 'u', '\x3', '\x2', '\x2', '\x2', '\x2', 'w', '\x3', '\x2', '\x2', + '\x2', '\x2', 'y', '\x3', '\x2', '\x2', '\x2', '\x2', '{', '\x3', '\x2', + '\x2', '\x2', '\x2', '}', '\x3', '\x2', '\x2', '\x2', '\x2', '\x89', '\x3', + '\x2', '\x2', '\x2', '\x2', '\x8B', '\x3', '\x2', '\x2', '\x2', '\x3', + '\xC3', '\x3', '\x2', '\x2', '\x2', '\x5', '\xC5', '\x3', '\x2', '\x2', + '\x2', '\a', '\xC7', '\x3', '\x2', '\x2', '\x2', '\t', '\xC9', '\x3', + '\x2', '\x2', '\x2', '\v', '\xCB', '\x3', '\x2', '\x2', '\x2', '\r', '\xCD', + '\x3', '\x2', '\x2', '\x2', '\xF', '\xCF', '\x3', '\x2', '\x2', '\x2', + '\x11', '\xD1', '\x3', '\x2', '\x2', '\x2', '\x13', '\xD3', '\x3', '\x2', + '\x2', '\x2', '\x15', '\xD5', '\x3', '\x2', '\x2', '\x2', '\x17', '\xD8', + '\x3', '\x2', '\x2', '\x2', '\x19', '\xDA', '\x3', '\x2', '\x2', '\x2', + '\x1B', '\xDC', '\x3', '\x2', '\x2', '\x2', '\x1D', '\xDE', '\x3', '\x2', + '\x2', '\x2', '\x1F', '\xE0', '\x3', '\x2', '\x2', '\x2', '!', '\xE2', + '\x3', '\x2', '\x2', '\x2', '#', '\xE4', '\x3', '\x2', '\x2', '\x2', '%', + '\xE7', '\x3', '\x2', '\x2', '\x2', '\'', '\xEA', '\x3', '\x2', '\x2', + '\x2', ')', '\xEC', '\x3', '\x2', '\x2', '\x2', '+', '\xEF', '\x3', '\x2', + '\x2', '\x2', '-', '\xF1', '\x3', '\x2', '\x2', '\x2', '/', '\xF3', '\x3', + '\x2', '\x2', '\x2', '\x31', '\xF5', '\x3', '\x2', '\x2', '\x2', '\x33', + '\xF8', '\x3', '\x2', '\x2', '\x2', '\x35', '\xFA', '\x3', '\x2', '\x2', + '\x2', '\x37', '\xFC', '\x3', '\x2', '\x2', '\x2', '\x39', '\xFE', '\x3', + '\x2', '\x2', '\x2', ';', '\x102', '\x3', '\x2', '\x2', '\x2', '=', '\x106', + '\x3', '\x2', '\x2', '\x2', '?', '\x10C', '\x3', '\x2', '\x2', '\x2', + '\x41', '\x10F', '\x3', '\x2', '\x2', '\x2', '\x43', '\x113', '\x3', '\x2', + '\x2', '\x2', '\x45', '\x11B', '\x3', '\x2', '\x2', '\x2', 'G', '\x11E', + '\x3', '\x2', '\x2', '\x2', 'I', '\x123', '\x3', '\x2', '\x2', '\x2', + 'K', '\x12C', '\x3', '\x2', '\x2', '\x2', 'M', '\x133', '\x3', '\x2', + '\x2', '\x2', 'O', '\x13A', '\x3', '\x2', '\x2', '\x2', 'Q', '\x140', + '\x3', '\x2', '\x2', '\x2', 'S', '\x145', '\x3', '\x2', '\x2', '\x2', + 'U', '\x14B', '\x3', '\x2', '\x2', '\x2', 'W', '\x14E', '\x3', '\x2', + '\x2', '\x2', 'Y', '\x153', '\x3', '\x2', '\x2', '\x2', '[', '\x158', + '\x3', '\x2', '\x2', '\x2', ']', '\x15D', '\x3', '\x2', '\x2', '\x2', + '_', '\x163', '\x3', '\x2', '\x2', '\x2', '\x61', '\x167', '\x3', '\x2', + '\x2', '\x2', '\x63', '\x16C', '\x3', '\x2', '\x2', '\x2', '\x65', '\x173', + '\x3', '\x2', '\x2', '\x2', 'g', '\x176', '\x3', '\x2', '\x2', '\x2', + 'i', '\x17C', '\x3', '\x2', '\x2', '\x2', 'k', '\x182', '\x3', '\x2', + '\x2', '\x2', 'm', '\x189', '\x3', '\x2', '\x2', '\x2', 'o', '\x18D', + '\x3', '\x2', '\x2', '\x2', 'q', '\x192', '\x3', '\x2', '\x2', '\x2', + 's', '\x196', '\x3', '\x2', '\x2', '\x2', 'u', '\x1A0', '\x3', '\x2', + '\x2', '\x2', 'w', '\x1A6', '\x3', '\x2', '\x2', '\x2', 'y', '\x1AD', + '\x3', '\x2', '\x2', '\x2', '{', '\x1E3', '\x3', '\x2', '\x2', '\x2', + '}', '\x1F7', '\x3', '\x2', '\x2', '\x2', '\x7F', '\x1F9', '\x3', '\x2', + '\x2', '\x2', '\x81', '\x1FE', '\x3', '\x2', '\x2', '\x2', '\x83', '\x204', + '\x3', '\x2', '\x2', '\x2', '\x85', '\x206', '\x3', '\x2', '\x2', '\x2', + '\x87', '\x208', '\x3', '\x2', '\x2', '\x2', '\x89', '\x213', '\x3', '\x2', + '\x2', '\x2', '\x8B', '\x215', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x218', + '\x3', '\x2', '\x2', '\x2', '\x8F', '\x21A', '\x3', '\x2', '\x2', '\x2', + '\x91', '\x21C', '\x3', '\x2', '\x2', '\x2', '\x93', '\x21E', '\x3', '\x2', + '\x2', '\x2', '\x95', '\x220', '\x3', '\x2', '\x2', '\x2', '\x97', '\x222', + '\x3', '\x2', '\x2', '\x2', '\x99', '\x224', '\x3', '\x2', '\x2', '\x2', + '\x9B', '\x226', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x228', '\x3', '\x2', + '\x2', '\x2', '\x9F', '\x22A', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x22C', + '\x3', '\x2', '\x2', '\x2', '\xA3', '\x22E', '\x3', '\x2', '\x2', '\x2', + '\xA5', '\x230', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x232', '\x3', '\x2', + '\x2', '\x2', '\xA9', '\x234', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x236', + '\x3', '\x2', '\x2', '\x2', '\xAD', '\x238', '\x3', '\x2', '\x2', '\x2', + '\xAF', '\x23A', '\x3', '\x2', '\x2', '\x2', '\xB1', '\x23C', '\x3', '\x2', + '\x2', '\x2', '\xB3', '\x23E', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x240', + '\x3', '\x2', '\x2', '\x2', '\xB7', '\x242', '\x3', '\x2', '\x2', '\x2', + '\xB9', '\x244', '\x3', '\x2', '\x2', '\x2', '\xBB', '\x246', '\x3', '\x2', + '\x2', '\x2', '\xBD', '\x248', '\x3', '\x2', '\x2', '\x2', '\xBF', '\x24A', + '\x3', '\x2', '\x2', '\x2', '\xC1', '\x24C', '\x3', '\x2', '\x2', '\x2', + '\xC3', '\xC4', '\a', ',', '\x2', '\x2', '\xC4', '\x4', '\x3', '\x2', + '\x2', '\x2', '\xC5', '\xC6', '\a', '.', '\x2', '\x2', '\xC6', '\x6', + '\x3', '\x2', '\x2', '\x2', '\xC7', '\xC8', '\a', '*', '\x2', '\x2', '\xC8', + '\b', '\x3', '\x2', '\x2', '\x2', '\xC9', '\xCA', '\a', '+', '\x2', '\x2', + '\xCA', '\n', '\x3', '\x2', '\x2', '\x2', '\xCB', '\xCC', '\a', '\x30', + '\x2', '\x2', '\xCC', '\f', '\x3', '\x2', '\x2', '\x2', '\xCD', '\xCE', + '\a', ']', '\x2', '\x2', '\xCE', '\xE', '\x3', '\x2', '\x2', '\x2', '\xCF', + '\xD0', '\a', '_', '\x2', '\x2', '\xD0', '\x10', '\x3', '\x2', '\x2', + '\x2', '\xD1', '\xD2', '\a', '\x41', '\x2', '\x2', '\xD2', '\x12', '\x3', + '\x2', '\x2', '\x2', '\xD3', '\xD4', '\a', '<', '\x2', '\x2', '\xD4', + '\x14', '\x3', '\x2', '\x2', '\x2', '\xD5', '\xD6', '\a', '\x41', '\x2', + '\x2', '\xD6', '\xD7', '\a', '\x41', '\x2', '\x2', '\xD7', '\x16', '\x3', + '\x2', '\x2', '\x2', '\xD8', '\xD9', '\a', '\x31', '\x2', '\x2', '\xD9', + '\x18', '\x3', '\x2', '\x2', '\x2', '\xDA', '\xDB', '\a', '\'', '\x2', + '\x2', '\xDB', '\x1A', '\x3', '\x2', '\x2', '\x2', '\xDC', '\xDD', '\a', + '-', '\x2', '\x2', '\xDD', '\x1C', '\x3', '\x2', '\x2', '\x2', '\xDE', + '\xDF', '\a', '/', '\x2', '\x2', '\xDF', '\x1E', '\x3', '\x2', '\x2', + '\x2', '\xE0', '\xE1', '\a', '>', '\x2', '\x2', '\xE1', ' ', '\x3', '\x2', + '\x2', '\x2', '\xE2', '\xE3', '\a', '@', '\x2', '\x2', '\xE3', '\"', '\x3', + '\x2', '\x2', '\x2', '\xE4', '\xE5', '\a', '@', '\x2', '\x2', '\xE5', + '\xE6', '\a', '?', '\x2', '\x2', '\xE6', '$', '\x3', '\x2', '\x2', '\x2', + '\xE7', '\xE8', '\a', '>', '\x2', '\x2', '\xE8', '\xE9', '\a', '?', '\x2', + '\x2', '\xE9', '&', '\x3', '\x2', '\x2', '\x2', '\xEA', '\xEB', '\a', + '?', '\x2', '\x2', '\xEB', '(', '\x3', '\x2', '\x2', '\x2', '\xEC', '\xED', + '\a', '#', '\x2', '\x2', '\xED', '\xEE', '\a', '?', '\x2', '\x2', '\xEE', + '*', '\x3', '\x2', '\x2', '\x2', '\xEF', '\xF0', '\a', '(', '\x2', '\x2', + '\xF0', ',', '\x3', '\x2', '\x2', '\x2', '\xF1', '\xF2', '\a', '`', '\x2', + '\x2', '\xF2', '.', '\x3', '\x2', '\x2', '\x2', '\xF3', '\xF4', '\a', + '~', '\x2', '\x2', '\xF4', '\x30', '\x3', '\x2', '\x2', '\x2', '\xF5', + '\xF6', '\a', '~', '\x2', '\x2', '\xF6', '\xF7', '\a', '~', '\x2', '\x2', + '\xF7', '\x32', '\x3', '\x2', '\x2', '\x2', '\xF8', '\xF9', '\a', '\x80', + '\x2', '\x2', '\xF9', '\x34', '\x3', '\x2', '\x2', '\x2', '\xFA', '\xFB', + '\a', '}', '\x2', '\x2', '\xFB', '\x36', '\x3', '\x2', '\x2', '\x2', '\xFC', + '\xFD', '\a', '\x7F', '\x2', '\x2', '\xFD', '\x38', '\x3', '\x2', '\x2', + '\x2', '\xFE', '\xFF', '\x5', '\x8F', 'H', '\x2', '\xFF', '\x100', '\x5', + '\xA5', 'S', '\x2', '\x100', '\x101', '\x5', '\xA5', 'S', '\x2', '\x101', + ':', '\x3', '\x2', '\x2', '\x2', '\x102', '\x103', '\x5', '\x8F', 'H', + '\x2', '\x103', '\x104', '\x5', '\xA9', 'U', '\x2', '\x104', '\x105', + '\x5', '\x95', 'K', '\x2', '\x105', '<', '\x3', '\x2', '\x2', '\x2', '\x106', + '\x107', '\x5', '\x8F', 'H', '\x2', '\x107', '\x108', '\x5', '\xB1', 'Y', + '\x2', '\x108', '\x109', '\x5', '\xB1', 'Y', '\x2', '\x109', '\x10A', + '\x5', '\x8F', 'H', '\x2', '\x10A', '\x10B', '\x5', '\xBF', '`', '\x2', + '\x10B', '>', '\x3', '\x2', '\x2', '\x2', '\x10C', '\x10D', '\x5', '\x8F', + 'H', '\x2', '\x10D', '\x10E', '\x5', '\xB3', 'Z', '\x2', '\x10E', '@', + '\x3', '\x2', '\x2', '\x2', '\x10F', '\x110', '\x5', '\x8F', 'H', '\x2', + '\x110', '\x111', '\x5', '\xB3', 'Z', '\x2', '\x111', '\x112', '\x5', + '\x93', 'J', '\x2', '\x112', '\x42', '\x3', '\x2', '\x2', '\x2', '\x113', + '\x114', '\x5', '\x91', 'I', '\x2', '\x114', '\x115', '\x5', '\x97', 'L', + '\x2', '\x115', '\x116', '\x5', '\xB5', '[', '\x2', '\x116', '\x117', + '\x5', '\xBB', '^', '\x2', '\x117', '\x118', '\x5', '\x97', 'L', '\x2', + '\x118', '\x119', '\x5', '\x97', 'L', '\x2', '\x119', '\x11A', '\x5', + '\xA9', 'U', '\x2', '\x11A', '\x44', '\x3', '\x2', '\x2', '\x2', '\x11B', + '\x11C', '\x5', '\x91', 'I', '\x2', '\x11C', '\x11D', '\x5', '\xBF', '`', + '\x2', '\x11D', '\x46', '\x3', '\x2', '\x2', '\x2', '\x11E', '\x11F', + '\x5', '\x95', 'K', '\x2', '\x11F', '\x120', '\x5', '\x97', 'L', '\x2', + '\x120', '\x121', '\x5', '\xB3', 'Z', '\x2', '\x121', '\x122', '\x5', + '\x93', 'J', '\x2', '\x122', 'H', '\x3', '\x2', '\x2', '\x2', '\x123', + '\x124', '\x5', '\x95', 'K', '\x2', '\x124', '\x125', '\x5', '\x9F', 'P', + '\x2', '\x125', '\x126', '\x5', '\xB3', 'Z', '\x2', '\x126', '\x127', + '\x5', '\xB5', '[', '\x2', '\x127', '\x128', '\x5', '\x9F', 'P', '\x2', + '\x128', '\x129', '\x5', '\xA9', 'U', '\x2', '\x129', '\x12A', '\x5', + '\x93', 'J', '\x2', '\x12A', '\x12B', '\x5', '\xB5', '[', '\x2', '\x12B', + 'J', '\x3', '\x2', '\x2', '\x2', '\x12C', '\x12D', '\x5', '\x97', 'L', + '\x2', '\x12D', '\x12E', '\x5', '\xB3', 'Z', '\x2', '\x12E', '\x12F', + '\x5', '\x93', 'J', '\x2', '\x12F', '\x130', '\x5', '\x8F', 'H', '\x2', + '\x130', '\x131', '\x5', '\xAD', 'W', '\x2', '\x131', '\x132', '\x5', + '\x97', 'L', '\x2', '\x132', 'L', '\x3', '\x2', '\x2', '\x2', '\x133', + '\x134', '\x5', '\x97', 'L', '\x2', '\x134', '\x135', '\x5', '\xBD', '_', + '\x2', '\x135', '\x136', '\x5', '\x9F', 'P', '\x2', '\x136', '\x137', + '\x5', '\xB3', 'Z', '\x2', '\x137', '\x138', '\x5', '\xB5', '[', '\x2', + '\x138', '\x139', '\x5', '\xB3', 'Z', '\x2', '\x139', 'N', '\x3', '\x2', + '\x2', '\x2', '\x13A', '\x13B', '\a', 'h', '\x2', '\x2', '\x13B', '\x13C', + '\a', '\x63', '\x2', '\x2', '\x13C', '\x13D', '\a', 'n', '\x2', '\x2', + '\x13D', '\x13E', '\a', 'u', '\x2', '\x2', '\x13E', '\x13F', '\a', 'g', + '\x2', '\x2', '\x13F', 'P', '\x3', '\x2', '\x2', '\x2', '\x140', '\x141', + '\x5', '\x99', 'M', '\x2', '\x141', '\x142', '\x5', '\xB1', 'Y', '\x2', + '\x142', '\x143', '\x5', '\xAB', 'V', '\x2', '\x143', '\x144', '\x5', + '\xA7', 'T', '\x2', '\x144', 'R', '\x3', '\x2', '\x2', '\x2', '\x145', + '\x146', '\x5', '\x9B', 'N', '\x2', '\x146', '\x147', '\x5', '\xB1', 'Y', + '\x2', '\x147', '\x148', '\x5', '\xAB', 'V', '\x2', '\x148', '\x149', + '\x5', '\xB7', '\\', '\x2', '\x149', '\x14A', '\x5', '\xAD', 'W', '\x2', + '\x14A', 'T', '\x3', '\x2', '\x2', '\x2', '\x14B', '\x14C', '\x5', '\x9F', + 'P', '\x2', '\x14C', '\x14D', '\x5', '\xA9', 'U', '\x2', '\x14D', 'V', + '\x3', '\x2', '\x2', '\x2', '\x14E', '\x14F', '\x5', '\xA1', 'Q', '\x2', + '\x14F', '\x150', '\x5', '\xAB', 'V', '\x2', '\x150', '\x151', '\x5', + '\x9F', 'P', '\x2', '\x151', '\x152', '\x5', '\xA9', 'U', '\x2', '\x152', + 'X', '\x3', '\x2', '\x2', '\x2', '\x153', '\x154', '\x5', '\xA5', 'S', + '\x2', '\x154', '\x155', '\x5', '\x97', 'L', '\x2', '\x155', '\x156', + '\x5', '\x99', 'M', '\x2', '\x156', '\x157', '\x5', '\xB5', '[', '\x2', + '\x157', 'Z', '\x3', '\x2', '\x2', '\x2', '\x158', '\x159', '\x5', '\xA5', + 'S', '\x2', '\x159', '\x15A', '\x5', '\x9F', 'P', '\x2', '\x15A', '\x15B', + '\x5', '\xA3', 'R', '\x2', '\x15B', '\x15C', '\x5', '\x97', 'L', '\x2', + '\x15C', '\\', '\x3', '\x2', '\x2', '\x2', '\x15D', '\x15E', '\x5', '\xA5', + 'S', '\x2', '\x15E', '\x15F', '\x5', '\x9F', 'P', '\x2', '\x15F', '\x160', + '\x5', '\xA7', 'T', '\x2', '\x160', '\x161', '\x5', '\x9F', 'P', '\x2', + '\x161', '\x162', '\x5', '\xB5', '[', '\x2', '\x162', '^', '\x3', '\x2', + '\x2', '\x2', '\x163', '\x164', '\x5', '\xA9', 'U', '\x2', '\x164', '\x165', + '\x5', '\xAB', 'V', '\x2', '\x165', '\x166', '\x5', '\xB5', '[', '\x2', + '\x166', '`', '\x3', '\x2', '\x2', '\x2', '\x167', '\x168', '\a', 'p', + '\x2', '\x2', '\x168', '\x169', '\a', 'w', '\x2', '\x2', '\x169', '\x16A', + '\a', 'n', '\x2', '\x2', '\x16A', '\x16B', '\a', 'n', '\x2', '\x2', '\x16B', + '\x62', '\x3', '\x2', '\x2', '\x2', '\x16C', '\x16D', '\x5', '\xAB', 'V', + '\x2', '\x16D', '\x16E', '\x5', '\x99', 'M', '\x2', '\x16E', '\x16F', + '\x5', '\x99', 'M', '\x2', '\x16F', '\x170', '\x5', '\xB3', 'Z', '\x2', + '\x170', '\x171', '\x5', '\x97', 'L', '\x2', '\x171', '\x172', '\x5', + '\xB5', '[', '\x2', '\x172', '\x64', '\x3', '\x2', '\x2', '\x2', '\x173', + '\x174', '\x5', '\xAB', 'V', '\x2', '\x174', '\x175', '\x5', '\xB1', 'Y', + '\x2', '\x175', '\x66', '\x3', '\x2', '\x2', '\x2', '\x176', '\x177', + '\x5', '\xAB', 'V', '\x2', '\x177', '\x178', '\x5', '\xB1', 'Y', '\x2', + '\x178', '\x179', '\x5', '\x95', 'K', '\x2', '\x179', '\x17A', '\x5', + '\x97', 'L', '\x2', '\x17A', '\x17B', '\x5', '\xB1', 'Y', '\x2', '\x17B', + 'h', '\x3', '\x2', '\x2', '\x2', '\x17C', '\x17D', '\x5', '\xB1', 'Y', + '\x2', '\x17D', '\x17E', '\x5', '\x9F', 'P', '\x2', '\x17E', '\x17F', + '\x5', '\x9B', 'N', '\x2', '\x17F', '\x180', '\x5', '\x9D', 'O', '\x2', + '\x180', '\x181', '\x5', '\xB5', '[', '\x2', '\x181', 'j', '\x3', '\x2', + '\x2', '\x2', '\x182', '\x183', '\x5', '\xB3', 'Z', '\x2', '\x183', '\x184', + '\x5', '\x97', 'L', '\x2', '\x184', '\x185', '\x5', '\xA5', 'S', '\x2', + '\x185', '\x186', '\x5', '\x97', 'L', '\x2', '\x186', '\x187', '\x5', + '\x93', 'J', '\x2', '\x187', '\x188', '\x5', '\xB5', '[', '\x2', '\x188', + 'l', '\x3', '\x2', '\x2', '\x2', '\x189', '\x18A', '\x5', '\xB5', '[', + '\x2', '\x18A', '\x18B', '\x5', '\xAB', 'V', '\x2', '\x18B', '\x18C', + '\x5', '\xAD', 'W', '\x2', '\x18C', 'n', '\x3', '\x2', '\x2', '\x2', '\x18D', + '\x18E', '\a', 'v', '\x2', '\x2', '\x18E', '\x18F', '\a', 't', '\x2', + '\x2', '\x18F', '\x190', '\a', 'w', '\x2', '\x2', '\x190', '\x191', '\a', + 'g', '\x2', '\x2', '\x191', 'p', '\x3', '\x2', '\x2', '\x2', '\x192', + '\x193', '\a', 'w', '\x2', '\x2', '\x193', '\x194', '\a', '\x66', '\x2', + '\x2', '\x194', '\x195', '\a', 'h', '\x2', '\x2', '\x195', 'r', '\x3', + '\x2', '\x2', '\x2', '\x196', '\x197', '\a', 'w', '\x2', '\x2', '\x197', + '\x198', '\a', 'p', '\x2', '\x2', '\x198', '\x199', '\a', '\x66', '\x2', + '\x2', '\x199', '\x19A', '\a', 'g', '\x2', '\x2', '\x19A', '\x19B', '\a', + 'h', '\x2', '\x2', '\x19B', '\x19C', '\a', 'k', '\x2', '\x2', '\x19C', + '\x19D', '\a', 'p', '\x2', '\x2', '\x19D', '\x19E', '\a', 'g', '\x2', + '\x2', '\x19E', '\x19F', '\a', '\x66', '\x2', '\x2', '\x19F', 't', '\x3', + '\x2', '\x2', '\x2', '\x1A0', '\x1A1', '\x5', '\xB9', ']', '\x2', '\x1A1', + '\x1A2', '\x5', '\x8F', 'H', '\x2', '\x1A2', '\x1A3', '\x5', '\xA5', 'S', + '\x2', '\x1A3', '\x1A4', '\x5', '\xB7', '\\', '\x2', '\x1A4', '\x1A5', + '\x5', '\x97', 'L', '\x2', '\x1A5', 'v', '\x3', '\x2', '\x2', '\x2', '\x1A6', + '\x1A7', '\x5', '\xBB', '^', '\x2', '\x1A7', '\x1A8', '\x5', '\x9D', 'O', + '\x2', '\x1A8', '\x1A9', '\x5', '\x97', 'L', '\x2', '\x1A9', '\x1AA', + '\x5', '\xB1', 'Y', '\x2', '\x1AA', '\x1AB', '\x5', '\x97', 'L', '\x2', + '\x1AB', 'x', '\x3', '\x2', '\x2', '\x2', '\x1AC', '\x1AE', '\t', '\x2', + '\x2', '\x2', '\x1AD', '\x1AC', '\x3', '\x2', '\x2', '\x2', '\x1AE', '\x1AF', + '\x3', '\x2', '\x2', '\x2', '\x1AF', '\x1AD', '\x3', '\x2', '\x2', '\x2', + '\x1AF', '\x1B0', '\x3', '\x2', '\x2', '\x2', '\x1B0', '\x1B1', '\x3', + '\x2', '\x2', '\x2', '\x1B1', '\x1B2', '\b', '=', '\x2', '\x2', '\x1B2', + 'z', '\x3', '\x2', '\x2', '\x2', '\x1B3', '\x1B5', '\t', '\x3', '\x2', + '\x2', '\x1B4', '\x1B3', '\x3', '\x2', '\x2', '\x2', '\x1B4', '\x1B5', + '\x3', '\x2', '\x2', '\x2', '\x1B5', '\x1B7', '\x3', '\x2', '\x2', '\x2', + '\x1B6', '\x1B8', '\x5', '\x8D', 'G', '\x2', '\x1B7', '\x1B6', '\x3', + '\x2', '\x2', '\x2', '\x1B8', '\x1B9', '\x3', '\x2', '\x2', '\x2', '\x1B9', + '\x1B7', '\x3', '\x2', '\x2', '\x2', '\x1B9', '\x1BA', '\x3', '\x2', '\x2', + '\x2', '\x1BA', '\x1C2', '\x3', '\x2', '\x2', '\x2', '\x1BB', '\x1BF', + '\a', '\x30', '\x2', '\x2', '\x1BC', '\x1BE', '\x5', '\x8D', 'G', '\x2', + '\x1BD', '\x1BC', '\x3', '\x2', '\x2', '\x2', '\x1BE', '\x1C1', '\x3', + '\x2', '\x2', '\x2', '\x1BF', '\x1BD', '\x3', '\x2', '\x2', '\x2', '\x1BF', + '\x1C0', '\x3', '\x2', '\x2', '\x2', '\x1C0', '\x1C3', '\x3', '\x2', '\x2', + '\x2', '\x1C1', '\x1BF', '\x3', '\x2', '\x2', '\x2', '\x1C2', '\x1BB', + '\x3', '\x2', '\x2', '\x2', '\x1C2', '\x1C3', '\x3', '\x2', '\x2', '\x2', + '\x1C3', '\x1CD', '\x3', '\x2', '\x2', '\x2', '\x1C4', '\x1C6', '\x5', + '\x97', 'L', '\x2', '\x1C5', '\x1C7', '\t', '\x3', '\x2', '\x2', '\x1C6', + '\x1C5', '\x3', '\x2', '\x2', '\x2', '\x1C6', '\x1C7', '\x3', '\x2', '\x2', + '\x2', '\x1C7', '\x1C9', '\x3', '\x2', '\x2', '\x2', '\x1C8', '\x1CA', + '\x5', '\x8D', 'G', '\x2', '\x1C9', '\x1C8', '\x3', '\x2', '\x2', '\x2', + '\x1CA', '\x1CB', '\x3', '\x2', '\x2', '\x2', '\x1CB', '\x1C9', '\x3', + '\x2', '\x2', '\x2', '\x1CB', '\x1CC', '\x3', '\x2', '\x2', '\x2', '\x1CC', + '\x1CE', '\x3', '\x2', '\x2', '\x2', '\x1CD', '\x1C4', '\x3', '\x2', '\x2', + '\x2', '\x1CD', '\x1CE', '\x3', '\x2', '\x2', '\x2', '\x1CE', '\x1E4', + '\x3', '\x2', '\x2', '\x2', '\x1CF', '\x1D1', '\t', '\x3', '\x2', '\x2', + '\x1D0', '\x1CF', '\x3', '\x2', '\x2', '\x2', '\x1D0', '\x1D1', '\x3', + '\x2', '\x2', '\x2', '\x1D1', '\x1D2', '\x3', '\x2', '\x2', '\x2', '\x1D2', + '\x1D4', '\a', '\x30', '\x2', '\x2', '\x1D3', '\x1D5', '\x5', '\x8D', + 'G', '\x2', '\x1D4', '\x1D3', '\x3', '\x2', '\x2', '\x2', '\x1D5', '\x1D6', + '\x3', '\x2', '\x2', '\x2', '\x1D6', '\x1D4', '\x3', '\x2', '\x2', '\x2', + '\x1D6', '\x1D7', '\x3', '\x2', '\x2', '\x2', '\x1D7', '\x1E1', '\x3', + '\x2', '\x2', '\x2', '\x1D8', '\x1DA', '\x5', '\x97', 'L', '\x2', '\x1D9', + '\x1DB', '\t', '\x3', '\x2', '\x2', '\x1DA', '\x1D9', '\x3', '\x2', '\x2', + '\x2', '\x1DA', '\x1DB', '\x3', '\x2', '\x2', '\x2', '\x1DB', '\x1DD', + '\x3', '\x2', '\x2', '\x2', '\x1DC', '\x1DE', '\x5', '\x8D', 'G', '\x2', + '\x1DD', '\x1DC', '\x3', '\x2', '\x2', '\x2', '\x1DE', '\x1DF', '\x3', + '\x2', '\x2', '\x2', '\x1DF', '\x1DD', '\x3', '\x2', '\x2', '\x2', '\x1DF', + '\x1E0', '\x3', '\x2', '\x2', '\x2', '\x1E0', '\x1E2', '\x3', '\x2', '\x2', + '\x2', '\x1E1', '\x1D8', '\x3', '\x2', '\x2', '\x2', '\x1E1', '\x1E2', + '\x3', '\x2', '\x2', '\x2', '\x1E2', '\x1E4', '\x3', '\x2', '\x2', '\x2', + '\x1E3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1E3', '\x1D0', '\x3', + '\x2', '\x2', '\x2', '\x1E4', '|', '\x3', '\x2', '\x2', '\x2', '\x1E5', + '\x1EA', '\a', '$', '\x2', '\x2', '\x1E6', '\x1E9', '\x5', '\x7F', '@', + '\x2', '\x1E7', '\x1E9', '\x5', '\x87', '\x44', '\x2', '\x1E8', '\x1E6', + '\x3', '\x2', '\x2', '\x2', '\x1E8', '\x1E7', '\x3', '\x2', '\x2', '\x2', + '\x1E9', '\x1EC', '\x3', '\x2', '\x2', '\x2', '\x1EA', '\x1E8', '\x3', + '\x2', '\x2', '\x2', '\x1EA', '\x1EB', '\x3', '\x2', '\x2', '\x2', '\x1EB', + '\x1ED', '\x3', '\x2', '\x2', '\x2', '\x1EC', '\x1EA', '\x3', '\x2', '\x2', + '\x2', '\x1ED', '\x1F8', '\a', '$', '\x2', '\x2', '\x1EE', '\x1F3', '\a', + ')', '\x2', '\x2', '\x1EF', '\x1F2', '\x5', '\x7F', '@', '\x2', '\x1F0', + '\x1F2', '\x5', '\x85', '\x43', '\x2', '\x1F1', '\x1EF', '\x3', '\x2', + '\x2', '\x2', '\x1F1', '\x1F0', '\x3', '\x2', '\x2', '\x2', '\x1F2', '\x1F5', + '\x3', '\x2', '\x2', '\x2', '\x1F3', '\x1F1', '\x3', '\x2', '\x2', '\x2', + '\x1F3', '\x1F4', '\x3', '\x2', '\x2', '\x2', '\x1F4', '\x1F6', '\x3', + '\x2', '\x2', '\x2', '\x1F5', '\x1F3', '\x3', '\x2', '\x2', '\x2', '\x1F6', + '\x1F8', '\a', ')', '\x2', '\x2', '\x1F7', '\x1E5', '\x3', '\x2', '\x2', + '\x2', '\x1F7', '\x1EE', '\x3', '\x2', '\x2', '\x2', '\x1F8', '~', '\x3', + '\x2', '\x2', '\x2', '\x1F9', '\x1FC', '\a', '^', '\x2', '\x2', '\x1FA', + '\x1FD', '\t', '\x4', '\x2', '\x2', '\x1FB', '\x1FD', '\x5', '\x81', '\x41', + '\x2', '\x1FC', '\x1FA', '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x1FB', + '\x3', '\x2', '\x2', '\x2', '\x1FD', '\x80', '\x3', '\x2', '\x2', '\x2', + '\x1FE', '\x1FF', '\a', 'w', '\x2', '\x2', '\x1FF', '\x200', '\x5', '\x83', + '\x42', '\x2', '\x200', '\x201', '\x5', '\x83', '\x42', '\x2', '\x201', + '\x202', '\x5', '\x83', '\x42', '\x2', '\x202', '\x203', '\x5', '\x83', + '\x42', '\x2', '\x203', '\x82', '\x3', '\x2', '\x2', '\x2', '\x204', '\x205', + '\t', '\x5', '\x2', '\x2', '\x205', '\x84', '\x3', '\x2', '\x2', '\x2', + '\x206', '\x207', '\n', '\x6', '\x2', '\x2', '\x207', '\x86', '\x3', '\x2', + '\x2', '\x2', '\x208', '\x209', '\n', '\a', '\x2', '\x2', '\x209', '\x88', + '\x3', '\x2', '\x2', '\x2', '\x20A', '\x214', '\x3', '\x2', '\x2', '\x2', + '\x20B', '\x210', '\t', '\b', '\x2', '\x2', '\x20C', '\x20F', '\t', '\b', + '\x2', '\x2', '\x20D', '\x20F', '\x5', '\x8D', 'G', '\x2', '\x20E', '\x20C', + '\x3', '\x2', '\x2', '\x2', '\x20E', '\x20D', '\x3', '\x2', '\x2', '\x2', + '\x20F', '\x212', '\x3', '\x2', '\x2', '\x2', '\x210', '\x20E', '\x3', + '\x2', '\x2', '\x2', '\x210', '\x211', '\x3', '\x2', '\x2', '\x2', '\x211', + '\x214', '\x3', '\x2', '\x2', '\x2', '\x212', '\x210', '\x3', '\x2', '\x2', + '\x2', '\x213', '\x20A', '\x3', '\x2', '\x2', '\x2', '\x213', '\x20B', + '\x3', '\x2', '\x2', '\x2', '\x214', '\x8A', '\x3', '\x2', '\x2', '\x2', + '\x215', '\x216', '\a', '\x42', '\x2', '\x2', '\x216', '\x217', '\x5', + '\x89', '\x45', '\x2', '\x217', '\x8C', '\x3', '\x2', '\x2', '\x2', '\x218', + '\x219', '\t', '\t', '\x2', '\x2', '\x219', '\x8E', '\x3', '\x2', '\x2', + '\x2', '\x21A', '\x21B', '\t', '\n', '\x2', '\x2', '\x21B', '\x90', '\x3', + '\x2', '\x2', '\x2', '\x21C', '\x21D', '\t', '\v', '\x2', '\x2', '\x21D', + '\x92', '\x3', '\x2', '\x2', '\x2', '\x21E', '\x21F', '\t', '\f', '\x2', + '\x2', '\x21F', '\x94', '\x3', '\x2', '\x2', '\x2', '\x220', '\x221', + '\t', '\r', '\x2', '\x2', '\x221', '\x96', '\x3', '\x2', '\x2', '\x2', + '\x222', '\x223', '\t', '\xE', '\x2', '\x2', '\x223', '\x98', '\x3', '\x2', + '\x2', '\x2', '\x224', '\x225', '\t', '\xF', '\x2', '\x2', '\x225', '\x9A', + '\x3', '\x2', '\x2', '\x2', '\x226', '\x227', '\t', '\x10', '\x2', '\x2', + '\x227', '\x9C', '\x3', '\x2', '\x2', '\x2', '\x228', '\x229', '\t', '\x11', + '\x2', '\x2', '\x229', '\x9E', '\x3', '\x2', '\x2', '\x2', '\x22A', '\x22B', + '\t', '\x12', '\x2', '\x2', '\x22B', '\xA0', '\x3', '\x2', '\x2', '\x2', + '\x22C', '\x22D', '\t', '\x13', '\x2', '\x2', '\x22D', '\xA2', '\x3', + '\x2', '\x2', '\x2', '\x22E', '\x22F', '\t', '\x14', '\x2', '\x2', '\x22F', + '\xA4', '\x3', '\x2', '\x2', '\x2', '\x230', '\x231', '\t', '\x15', '\x2', + '\x2', '\x231', '\xA6', '\x3', '\x2', '\x2', '\x2', '\x232', '\x233', + '\t', '\x16', '\x2', '\x2', '\x233', '\xA8', '\x3', '\x2', '\x2', '\x2', + '\x234', '\x235', '\t', '\x17', '\x2', '\x2', '\x235', '\xAA', '\x3', + '\x2', '\x2', '\x2', '\x236', '\x237', '\t', '\x18', '\x2', '\x2', '\x237', + '\xAC', '\x3', '\x2', '\x2', '\x2', '\x238', '\x239', '\t', '\x19', '\x2', + '\x2', '\x239', '\xAE', '\x3', '\x2', '\x2', '\x2', '\x23A', '\x23B', + '\t', '\x1A', '\x2', '\x2', '\x23B', '\xB0', '\x3', '\x2', '\x2', '\x2', + '\x23C', '\x23D', '\t', '\x1B', '\x2', '\x2', '\x23D', '\xB2', '\x3', + '\x2', '\x2', '\x2', '\x23E', '\x23F', '\t', '\x1C', '\x2', '\x2', '\x23F', + '\xB4', '\x3', '\x2', '\x2', '\x2', '\x240', '\x241', '\t', '\x1D', '\x2', + '\x2', '\x241', '\xB6', '\x3', '\x2', '\x2', '\x2', '\x242', '\x243', + '\t', '\x1E', '\x2', '\x2', '\x243', '\xB8', '\x3', '\x2', '\x2', '\x2', + '\x244', '\x245', '\t', '\x1F', '\x2', '\x2', '\x245', '\xBA', '\x3', + '\x2', '\x2', '\x2', '\x246', '\x247', '\t', ' ', '\x2', '\x2', '\x247', + '\xBC', '\x3', '\x2', '\x2', '\x2', '\x248', '\x249', '\t', '!', '\x2', + '\x2', '\x249', '\xBE', '\x3', '\x2', '\x2', '\x2', '\x24A', '\x24B', + '\t', '\"', '\x2', '\x2', '\x24B', '\xC0', '\x3', '\x2', '\x2', '\x2', + '\x24C', '\x24D', '\t', '#', '\x2', '\x2', '\x24D', '\xC2', '\x3', '\x2', + '\x2', '\x2', '\x1A', '\x2', '\x1AF', '\x1B4', '\x1B9', '\x1BF', '\x1C2', + '\x1C6', '\x1CB', '\x1CD', '\x1D0', '\x1D6', '\x1DA', '\x1DF', '\x1E1', + '\x1E3', '\x1E8', '\x1EA', '\x1F1', '\x1F3', '\x1F7', '\x1FC', '\x20E', + '\x210', '\x213', '\x3', '\b', '\x2', '\x2', }; public static readonly ATN _ATN = diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs index 5de50b9faa..53293f9382 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs @@ -38,12 +38,13 @@ public const int T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, - T__24=25, T__25=26, T__26=27, K_AND=28, K_ARRAY=29, K_AS=30, K_ASC=31, - K_BETWEEN=32, K_BY=33, K_DESC=34, K_DISTINCT=35, K_ESCAPE=36, K_EXISTS=37, - K_FALSE=38, K_FROM=39, K_GROUP=40, K_IN=41, K_JOIN=42, K_LIKE=43, K_LIMIT=44, - K_NOT=45, K_NULL=46, K_OFFSET=47, K_OR=48, K_ORDER=49, K_SELECT=50, K_TOP=51, - K_TRUE=52, K_UDF=53, K_UNDEFINED=54, K_VALUE=55, K_WHERE=56, WS=57, NUMERIC_LITERAL=58, - STRING_LITERAL=59, IDENTIFIER=60, PARAMETER=61; + T__24=25, T__25=26, T__26=27, K_ALL=28, K_AND=29, K_ARRAY=30, K_AS=31, + K_ASC=32, K_BETWEEN=33, K_BY=34, K_DESC=35, K_DISTINCT=36, K_ESCAPE=37, + K_EXISTS=38, K_FALSE=39, K_FROM=40, K_GROUP=41, K_IN=42, K_JOIN=43, K_LEFT=44, + K_LIKE=45, K_LIMIT=46, K_NOT=47, K_NULL=48, K_OFFSET=49, K_OR=50, K_ORDER=51, + K_RIGHT=52, K_SELECT=53, K_TOP=54, K_TRUE=55, K_UDF=56, K_UNDEFINED=57, + K_VALUE=58, K_WHERE=59, WS=60, NUMERIC_LITERAL=61, STRING_LITERAL=62, + LEX_IDENTIFIER=63, PARAMETER=64; public const int RULE_program = 0, RULE_sql_query = 1, RULE_select_clause = 2, RULE_top_spec = 3, RULE_selection = 4, RULE_select_star_spec = 5, RULE_select_value_spec = 6, @@ -58,8 +59,9 @@ public const int RULE_equality_operator = 31, RULE_bitwise_and_operator = 32, RULE_bitwise_exclusive_or_operator = 33, RULE_bitwise_inclusive_or_operator = 34, RULE_string_concat_operator = 35, RULE_unary_scalar_expression = 36, RULE_unary_operator = 37, RULE_primary_expression = 38, - RULE_scalar_expression_list = 39, RULE_object_property_list = 40, RULE_object_property = 41, - RULE_literal = 42; + RULE_function_call_scalar_expression = 39, RULE_scalar_expression_list = 40, + RULE_object_property_list = 41, RULE_object_property = 42, RULE_identifier = 43, + RULE_literal = 44; public static readonly string[] ruleNames = { "program", "sql_query", "select_clause", "top_spec", "selection", "select_star_spec", "select_value_spec", "select_list_spec", "select_item", "from_clause", @@ -70,27 +72,28 @@ public const int "escape_expression", "binary_scalar_expression", "multiplicative_operator", "additive_operator", "relational_operator", "equality_operator", "bitwise_and_operator", "bitwise_exclusive_or_operator", "bitwise_inclusive_or_operator", "string_concat_operator", - "unary_scalar_expression", "unary_operator", "primary_expression", "scalar_expression_list", - "object_property_list", "object_property", "literal" + "unary_scalar_expression", "unary_operator", "primary_expression", "function_call_scalar_expression", + "scalar_expression_list", "object_property_list", "object_property", "identifier", + "literal" }; private static readonly string[] _LiteralNames = { null, "'*'", "','", "'('", "')'", "'.'", "'['", "']'", "'?'", "':'", "'??'", "'/'", "'%'", "'+'", "'-'", "'<'", "'>'", "'>='", "'<='", "'='", "'!='", "'&'", "'^'", "'|'", "'||'", "'~'", "'{'", "'}'", null, null, null, null, - null, null, null, null, null, null, "'false'", null, null, null, null, - null, null, null, "'null'", null, null, null, null, null, "'true'", "'udf'", - "'undefined'" + null, null, null, null, null, null, null, "'false'", null, null, null, + null, null, null, null, null, "'null'", null, null, null, null, null, + null, "'true'", "'udf'", "'undefined'" }; private static readonly string[] _SymbolicNames = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, "K_AND", "K_ARRAY", "K_AS", "K_ASC", "K_BETWEEN", - "K_BY", "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", "K_FROM", - "K_GROUP", "K_IN", "K_JOIN", "K_LIKE", "K_LIMIT", "K_NOT", "K_NULL", "K_OFFSET", - "K_OR", "K_ORDER", "K_SELECT", "K_TOP", "K_TRUE", "K_UDF", "K_UNDEFINED", - "K_VALUE", "K_WHERE", "WS", "NUMERIC_LITERAL", "STRING_LITERAL", "IDENTIFIER", - "PARAMETER" + null, null, null, null, "K_ALL", "K_AND", "K_ARRAY", "K_AS", "K_ASC", + "K_BETWEEN", "K_BY", "K_DESC", "K_DISTINCT", "K_ESCAPE", "K_EXISTS", "K_FALSE", + "K_FROM", "K_GROUP", "K_IN", "K_JOIN", "K_LEFT", "K_LIKE", "K_LIMIT", + "K_NOT", "K_NULL", "K_OFFSET", "K_OR", "K_ORDER", "K_RIGHT", "K_SELECT", + "K_TOP", "K_TRUE", "K_UDF", "K_UNDEFINED", "K_VALUE", "K_WHERE", "WS", + "NUMERIC_LITERAL", "STRING_LITERAL", "LEX_IDENTIFIER", "PARAMETER" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -123,7 +126,6 @@ public sqlParser(ITokenStream input, TextWriter output, TextWriter errorOutput) { Interpreter = new ParserATNSimulator(this, _ATN, decisionToDFA, sharedContextCache); } - public partial class ProgramContext : ParserRuleContext { public Sql_queryContext sql_query() { return GetRuleContext(0); @@ -156,8 +158,8 @@ public ProgramContext program() { try { EnterOuterAlt(_localctx, 1); { - State = 86; sql_query(); - State = 87; Match(Eof); + State = 90; sql_query(); + State = 91; Match(Eof); } } catch (RecognitionException re) { @@ -218,49 +220,49 @@ public Sql_queryContext sql_query() { try { EnterOuterAlt(_localctx, 1); { - State = 89; select_clause(); - State = 91; + State = 93; select_clause(); + State = 95; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_FROM) { { - State = 90; from_clause(); + State = 94; from_clause(); } } - State = 94; + State = 98; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_WHERE) { { - State = 93; where_clause(); + State = 97; where_clause(); } } - State = 97; + State = 101; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_GROUP) { { - State = 96; group_by_clause(); + State = 100; group_by_clause(); } } - State = 100; + State = 104; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ORDER) { { - State = 99; order_by_clause(); + State = 103; order_by_clause(); } } - State = 103; + State = 107; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_OFFSET) { { - State = 102; offset_limit_clause(); + State = 106; offset_limit_clause(); } } @@ -314,26 +316,26 @@ public Select_clauseContext select_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 105; Match(K_SELECT); - State = 107; + State = 109; Match(K_SELECT); + State = 111; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_DISTINCT) { { - State = 106; Match(K_DISTINCT); + State = 110; Match(K_DISTINCT); } } - State = 110; + State = 114; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_TOP) { { - State = 109; top_spec(); + State = 113; top_spec(); } } - State = 112; selection(); + State = 116; selection(); } } catch (RecognitionException re) { @@ -379,8 +381,8 @@ public Top_specContext top_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 114; Match(K_TOP); - State = 115; + State = 118; Match(K_TOP); + State = 119; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -437,19 +439,19 @@ public SelectionContext selection() { SelectionContext _localctx = new SelectionContext(Context, State); EnterRule(_localctx, 8, RULE_selection); try { - State = 120; + State = 124; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: EnterOuterAlt(_localctx, 1); { - State = 117; select_star_spec(); + State = 121; select_star_spec(); } break; case K_VALUE: EnterOuterAlt(_localctx, 2); { - State = 118; select_value_spec(); + State = 122; select_value_spec(); } break; case T__2: @@ -458,21 +460,24 @@ public SelectionContext selection() { case T__13: case T__24: case T__25: + case K_ALL: case K_ARRAY: case K_EXISTS: case K_FALSE: + case K_LEFT: case K_NOT: case K_NULL: + case K_RIGHT: case K_TRUE: case K_UDF: case K_UNDEFINED: case NUMERIC_LITERAL: case STRING_LITERAL: - case IDENTIFIER: + case LEX_IDENTIFIER: case PARAMETER: EnterOuterAlt(_localctx, 3); { - State = 119; select_list_spec(); + State = 123; select_list_spec(); } break; default: @@ -518,7 +523,7 @@ public Select_star_specContext select_star_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 122; Match(T__0); + State = 126; Match(T__0); } } catch (RecognitionException re) { @@ -564,8 +569,8 @@ public Select_value_specContext select_value_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 124; Match(K_VALUE); - State = 125; scalar_expression(0); + State = 128; Match(K_VALUE); + State = 129; scalar_expression(0); } } catch (RecognitionException re) { @@ -614,18 +619,18 @@ public Select_list_specContext select_list_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 127; select_item(); - State = 132; + State = 131; select_item(); + State = 136; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 128; Match(T__1); - State = 129; select_item(); + State = 132; Match(T__1); + State = 133; select_item(); } } - State = 134; + State = 138; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -647,7 +652,9 @@ public Scalar_expressionContext scalar_expression() { return GetRuleContext(0); } public ITerminalNode K_AS() { return GetToken(sqlParser.K_AS, 0); } - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public Select_itemContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -676,14 +683,14 @@ public Select_itemContext select_item() { try { EnterOuterAlt(_localctx, 1); { - State = 135; scalar_expression(0); - State = 138; + State = 139; scalar_expression(0); + State = 142; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 136; Match(K_AS); - State = 137; Match(IDENTIFIER); + State = 140; Match(K_AS); + State = 141; identifier(); } } @@ -732,8 +739,8 @@ public From_clauseContext from_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 140; Match(K_FROM); - State = 141; collection_expression(0); + State = 144; Match(K_FROM); + State = 145; collection_expression(0); } } catch (RecognitionException re) { @@ -786,7 +793,9 @@ public partial class AliasedCollectionExpressionContext : Collection_expressionC public CollectionContext collection() { return GetRuleContext(0); } - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public ITerminalNode K_AS() { return GetToken(sqlParser.K_AS, 0); } public AliasedCollectionExpressionContext(Collection_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { @@ -804,7 +813,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { } } public partial class ArrayIteratorCollectionExpressionContext : Collection_expressionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public ITerminalNode K_IN() { return GetToken(sqlParser.K_IN, 0); } public CollectionContext collection() { return GetRuleContext(0); @@ -842,7 +853,7 @@ private Collection_expressionContext collection_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 154; + State = 159; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { case 1: @@ -851,22 +862,22 @@ private Collection_expressionContext collection_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 144; collection(); - State = 149; + State = 148; collection(); + State = 153; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,11,Context) ) { case 1: { - State = 146; + State = 150; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 145; Match(K_AS); + State = 149; Match(K_AS); } } - State = 148; Match(IDENTIFIER); + State = 152; identifier(); } break; } @@ -877,14 +888,14 @@ private Collection_expressionContext collection_expression(int _p) { _localctx = new ArrayIteratorCollectionExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 151; Match(IDENTIFIER); - State = 152; Match(K_IN); - State = 153; collection(); + State = 155; identifier(); + State = 156; Match(K_IN); + State = 157; collection(); } break; } Context.Stop = TokenStream.LT(-1); - State = 161; + State = 166; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -896,14 +907,14 @@ private Collection_expressionContext collection_expression(int _p) { { _localctx = new JoinCollectionExpressionContext(new Collection_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_collection_expression); - State = 156; + State = 161; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 157; Match(K_JOIN); - State = 158; collection_expression(2); + State = 162; Match(K_JOIN); + State = 163; collection_expression(2); } } } - State = 163; + State = 168; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); } @@ -933,7 +944,9 @@ public virtual void CopyFrom(CollectionContext context) { } } public partial class InputPathCollectionContext : CollectionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public Path_expressionContext path_expression() { return GetRuleContext(0); } @@ -977,20 +990,21 @@ public CollectionContext collection() { CollectionContext _localctx = new CollectionContext(Context, State); EnterRule(_localctx, 22, RULE_collection); try { - State = 172; + State = 177; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { - case IDENTIFIER: + case K_ALL: + case LEX_IDENTIFIER: _localctx = new InputPathCollectionContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 164; Match(IDENTIFIER); - State = 166; + State = 169; identifier(); + State = 171; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,14,Context) ) { case 1: { - State = 165; path_expression(0); + State = 170; path_expression(0); } break; } @@ -1000,9 +1014,9 @@ public CollectionContext collection() { _localctx = new SubqueryCollectionContext(_localctx); EnterOuterAlt(_localctx, 2); { - State = 168; Match(T__2); - State = 169; sql_query(); - State = 170; Match(T__3); + State = 173; Match(T__2); + State = 174; sql_query(); + State = 175; Match(T__3); } break; default: @@ -1072,7 +1086,9 @@ public partial class IdentifierPathExpressionContext : Path_expressionContext { public Path_expressionContext path_expression() { return GetRuleContext(0); } - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public IdentifierPathExpressionContext(Path_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; @@ -1132,7 +1148,7 @@ private Path_expressionContext path_expression(int _p) { } Context.Stop = TokenStream.LT(-1); - State = 188; + State = 193; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1141,45 +1157,45 @@ private Path_expressionContext path_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 186; + State = 191; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,16,Context) ) { case 1: { _localctx = new IdentifierPathExpressionContext(new Path_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_path_expression); - State = 175; + State = 180; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 176; Match(T__4); - State = 177; Match(IDENTIFIER); + State = 181; Match(T__4); + State = 182; identifier(); } break; case 2: { _localctx = new NumberPathExpressionContext(new Path_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_path_expression); - State = 178; + State = 183; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 179; Match(T__5); - State = 180; Match(NUMERIC_LITERAL); - State = 181; Match(T__6); + State = 184; Match(T__5); + State = 185; Match(NUMERIC_LITERAL); + State = 186; Match(T__6); } break; case 3: { _localctx = new StringPathExpressionContext(new Path_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_path_expression); - State = 182; + State = 187; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 183; Match(T__5); - State = 184; Match(STRING_LITERAL); - State = 185; Match(T__6); + State = 188; Match(T__5); + State = 189; Match(STRING_LITERAL); + State = 190; Match(T__6); } break; } } } - State = 190; + State = 195; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); } @@ -1228,8 +1244,8 @@ public Where_clauseContext where_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 191; Match(K_WHERE); - State = 192; scalar_expression(0); + State = 196; Match(K_WHERE); + State = 197; scalar_expression(0); } } catch (RecognitionException re) { @@ -1276,9 +1292,9 @@ public Group_by_clauseContext group_by_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 194; Match(K_GROUP); - State = 195; Match(K_BY); - State = 196; scalar_expression_list(); + State = 199; Match(K_GROUP); + State = 200; Match(K_BY); + State = 201; scalar_expression_list(); } } catch (RecognitionException re) { @@ -1325,9 +1341,9 @@ public Order_by_clauseContext order_by_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 198; Match(K_ORDER); - State = 199; Match(K_BY); - State = 200; order_by_items(); + State = 203; Match(K_ORDER); + State = 204; Match(K_BY); + State = 205; order_by_items(); } } catch (RecognitionException re) { @@ -1376,18 +1392,18 @@ public Order_by_itemsContext order_by_items() { try { EnterOuterAlt(_localctx, 1); { - State = 202; order_by_item(); - State = 207; + State = 207; order_by_item(); + State = 212; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 203; Match(T__1); - State = 204; order_by_item(); + State = 208; Match(T__1); + State = 209; order_by_item(); } } - State = 209; + State = 214; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -1439,13 +1455,13 @@ public Order_by_itemContext order_by_item() { try { EnterOuterAlt(_localctx, 1); { - State = 210; scalar_expression(0); - State = 212; + State = 215; scalar_expression(0); + State = 217; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ASC || _la==K_DESC) { { - State = 211; sort_order(); + State = 216; sort_order(); } } @@ -1493,7 +1509,7 @@ public Sort_orderContext sort_order() { try { EnterOuterAlt(_localctx, 1); { - State = 214; + State = 219; _la = TokenStream.LA(1); if ( !(_la==K_ASC || _la==K_DESC) ) { ErrorHandler.RecoverInline(this); @@ -1551,10 +1567,10 @@ public Offset_limit_clauseContext offset_limit_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 216; Match(K_OFFSET); - State = 217; offset_count(); - State = 218; Match(K_LIMIT); - State = 219; limit_count(); + State = 221; Match(K_OFFSET); + State = 222; offset_count(); + State = 223; Match(K_LIMIT); + State = 224; limit_count(); } } catch (RecognitionException re) { @@ -1599,7 +1615,7 @@ public Offset_countContext offset_count() { try { EnterOuterAlt(_localctx, 1); { - State = 221; + State = 226; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1652,7 +1668,7 @@ public Limit_countContext limit_count() { try { EnterOuterAlt(_localctx, 1); { - State = 223; + State = 228; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1792,7 +1808,7 @@ private Scalar_expressionContext scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 236; + State = 241; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,21,Context) ) { case 1: @@ -1801,7 +1817,7 @@ private Scalar_expressionContext scalar_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 226; logical_scalar_expression(0); + State = 231; logical_scalar_expression(0); } break; case 2: @@ -1809,25 +1825,25 @@ private Scalar_expressionContext scalar_expression(int _p) { _localctx = new BetweenScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 227; binary_scalar_expression(0); - State = 229; + State = 232; binary_scalar_expression(0); + State = 234; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 228; Match(K_NOT); + State = 233; Match(K_NOT); } } - State = 231; Match(K_BETWEEN); - State = 232; binary_scalar_expression(0); - State = 233; Match(K_AND); - State = 234; binary_scalar_expression(0); + State = 236; Match(K_BETWEEN); + State = 237; binary_scalar_expression(0); + State = 238; Match(K_AND); + State = 239; binary_scalar_expression(0); } break; } Context.Stop = TokenStream.LT(-1); - State = 249; + State = 254; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1836,35 +1852,35 @@ private Scalar_expressionContext scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 247; + State = 252; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,22,Context) ) { case 1: { _localctx = new ConditionalScalarExpressionContext(new Scalar_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_scalar_expression); - State = 238; + State = 243; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 239; Match(T__7); - State = 240; scalar_expression(0); - State = 241; Match(T__8); - State = 242; scalar_expression(5); + State = 244; Match(T__7); + State = 245; scalar_expression(0); + State = 246; Match(T__8); + State = 247; scalar_expression(5); } break; case 2: { _localctx = new CoalesceScalarExpressionContext(new Scalar_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_scalar_expression); - State = 244; + State = 249; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 245; Match(T__9); - State = 246; scalar_expression(4); + State = 250; Match(T__9); + State = 251; scalar_expression(4); } break; } } } - State = 251; + State = 256; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } @@ -1935,27 +1951,27 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 256; + State = 261; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { case 1: { - State = 253; binary_scalar_expression(0); + State = 258; binary_scalar_expression(0); } break; case 2: { - State = 254; in_scalar_expression(); + State = 259; in_scalar_expression(); } break; case 3: { - State = 255; like_scalar_expression(); + State = 260; like_scalar_expression(); } break; } Context.Stop = TokenStream.LT(-1); - State = 266; + State = 271; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1964,33 +1980,33 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 264; + State = 269; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,25,Context) ) { case 1: { _localctx = new Logical_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_logical_scalar_expression); - State = 258; + State = 263; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 259; Match(K_AND); - State = 260; logical_scalar_expression(3); + State = 264; Match(K_AND); + State = 265; logical_scalar_expression(3); } break; case 2: { _localctx = new Logical_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_logical_scalar_expression); - State = 261; + State = 266; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 262; Match(K_OR); - State = 263; logical_scalar_expression(2); + State = 267; Match(K_OR); + State = 268; logical_scalar_expression(2); } break; } } } - State = 268; + State = 273; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); } @@ -2044,20 +2060,20 @@ public In_scalar_expressionContext in_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 269; binary_scalar_expression(0); - State = 271; + State = 274; binary_scalar_expression(0); + State = 276; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 270; Match(K_NOT); + State = 275; Match(K_NOT); } } - State = 273; Match(K_IN); - State = 274; Match(T__2); - State = 275; scalar_expression_list(); - State = 276; Match(T__3); + State = 278; Match(K_IN); + State = 279; Match(T__2); + State = 280; scalar_expression_list(); + State = 281; Match(T__3); } } catch (RecognitionException re) { @@ -2111,24 +2127,24 @@ public Like_scalar_expressionContext like_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 278; binary_scalar_expression(0); - State = 280; + State = 283; binary_scalar_expression(0); + State = 285; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 279; Match(K_NOT); + State = 284; Match(K_NOT); } } - State = 282; Match(K_LIKE); - State = 283; binary_scalar_expression(0); - State = 285; + State = 287; Match(K_LIKE); + State = 288; binary_scalar_expression(0); + State = 290; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,29,Context) ) { case 1: { - State = 284; escape_expression(); + State = 289; escape_expression(); } break; } @@ -2175,8 +2191,8 @@ public Escape_expressionContext escape_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 287; Match(K_ESCAPE); - State = 288; Match(STRING_LITERAL); + State = 292; Match(K_ESCAPE); + State = 293; Match(STRING_LITERAL); } } catch (RecognitionException re) { @@ -2261,10 +2277,10 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { EnterOuterAlt(_localctx, 1); { { - State = 291; unary_scalar_expression(); + State = 296; unary_scalar_expression(); } Context.Stop = TokenStream.LT(-1); - State = 327; + State = 332; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -2273,93 +2289,93 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 325; + State = 330; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) { case 1: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 293; + State = 298; if (!(Precpred(Context, 8))) throw new FailedPredicateException(this, "Precpred(Context, 8)"); - State = 294; multiplicative_operator(); - State = 295; binary_scalar_expression(9); + State = 299; multiplicative_operator(); + State = 300; binary_scalar_expression(9); } break; case 2: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 297; + State = 302; if (!(Precpred(Context, 7))) throw new FailedPredicateException(this, "Precpred(Context, 7)"); - State = 298; additive_operator(); - State = 299; binary_scalar_expression(8); + State = 303; additive_operator(); + State = 304; binary_scalar_expression(8); } break; case 3: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 301; + State = 306; if (!(Precpred(Context, 6))) throw new FailedPredicateException(this, "Precpred(Context, 6)"); - State = 302; relational_operator(); - State = 303; binary_scalar_expression(7); + State = 307; relational_operator(); + State = 308; binary_scalar_expression(7); } break; case 4: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 305; + State = 310; if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 306; equality_operator(); - State = 307; binary_scalar_expression(6); + State = 311; equality_operator(); + State = 312; binary_scalar_expression(6); } break; case 5: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 309; + State = 314; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 310; bitwise_and_operator(); - State = 311; binary_scalar_expression(5); + State = 315; bitwise_and_operator(); + State = 316; binary_scalar_expression(5); } break; case 6: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 313; + State = 318; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 314; bitwise_exclusive_or_operator(); - State = 315; binary_scalar_expression(4); + State = 319; bitwise_exclusive_or_operator(); + State = 320; binary_scalar_expression(4); } break; case 7: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 317; + State = 322; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 318; bitwise_inclusive_or_operator(); - State = 319; binary_scalar_expression(3); + State = 323; bitwise_inclusive_or_operator(); + State = 324; binary_scalar_expression(3); } break; case 8: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 321; + State = 326; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 322; string_concat_operator(); - State = 323; binary_scalar_expression(2); + State = 327; string_concat_operator(); + State = 328; binary_scalar_expression(2); } break; } } } - State = 329; + State = 334; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); } @@ -2405,7 +2421,7 @@ public Multiplicative_operatorContext multiplicative_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 330; + State = 335; _la = TokenStream.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__10) | (1L << T__11))) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -2456,7 +2472,7 @@ public Additive_operatorContext additive_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 332; + State = 337; _la = TokenStream.LA(1); if ( !(_la==T__12 || _la==T__13) ) { ErrorHandler.RecoverInline(this); @@ -2507,7 +2523,7 @@ public Relational_operatorContext relational_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 334; + State = 339; _la = TokenStream.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__15) | (1L << T__16) | (1L << T__17))) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -2558,7 +2574,7 @@ public Equality_operatorContext equality_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 336; + State = 341; _la = TokenStream.LA(1); if ( !(_la==T__18 || _la==T__19) ) { ErrorHandler.RecoverInline(this); @@ -2608,7 +2624,7 @@ public Bitwise_and_operatorContext bitwise_and_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 338; Match(T__20); + State = 343; Match(T__20); } } catch (RecognitionException re) { @@ -2650,7 +2666,7 @@ public Bitwise_exclusive_or_operatorContext bitwise_exclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 340; Match(T__21); + State = 345; Match(T__21); } } catch (RecognitionException re) { @@ -2692,7 +2708,7 @@ public Bitwise_inclusive_or_operatorContext bitwise_inclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 342; Match(T__22); + State = 347; Match(T__22); } } catch (RecognitionException re) { @@ -2734,7 +2750,7 @@ public String_concat_operatorContext string_concat_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 344; Match(T__23); + State = 349; Match(T__23); } } catch (RecognitionException re) { @@ -2783,26 +2799,29 @@ public Unary_scalar_expressionContext unary_scalar_expression() { Unary_scalar_expressionContext _localctx = new Unary_scalar_expressionContext(Context, State); EnterRule(_localctx, 72, RULE_unary_scalar_expression); try { - State = 350; + State = 355; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: case T__5: case T__25: + case K_ALL: case K_ARRAY: case K_EXISTS: case K_FALSE: + case K_LEFT: case K_NULL: + case K_RIGHT: case K_TRUE: case K_UDF: case K_UNDEFINED: case NUMERIC_LITERAL: case STRING_LITERAL: - case IDENTIFIER: + case LEX_IDENTIFIER: case PARAMETER: EnterOuterAlt(_localctx, 1); { - State = 346; primary_expression(0); + State = 351; primary_expression(0); } break; case T__12: @@ -2811,8 +2830,8 @@ public Unary_scalar_expressionContext unary_scalar_expression() { case K_NOT: EnterOuterAlt(_localctx, 2); { - State = 347; unary_operator(); - State = 348; unary_scalar_expression(); + State = 352; unary_operator(); + State = 353; unary_scalar_expression(); } break; default: @@ -2860,7 +2879,7 @@ public Unary_operatorContext unary_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 352; + State = 357; _la = TokenStream.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << K_NOT))) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -2894,98 +2913,159 @@ public virtual void CopyFrom(Primary_expressionContext context) { base.CopyFrom(context); } } - public partial class SubqueryScalarExpressionContext : Primary_expressionContext { + public partial class AllScalarExpressionContext : Primary_expressionContext { + public ITerminalNode K_ALL() { return GetToken(sqlParser.K_ALL, 0); } public Sql_queryContext sql_query() { return GetRuleContext(0); } - public SubqueryScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public AllScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterSubqueryScalarExpression(this); + if (typedListener != null) typedListener.EnterAllScalarExpression(this); } public override void ExitRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitSubqueryScalarExpression(this); + if (typedListener != null) typedListener.ExitAllScalarExpression(this); } public override TResult Accept(IParseTreeVisitor visitor) { IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitSubqueryScalarExpression(this); + if (typedVisitor != null) return typedVisitor.VisitAllScalarExpression(this); else return visitor.VisitChildren(this); } } - public partial class PropertyRefScalarExpressionBaseContext : Primary_expressionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } - public PropertyRefScalarExpressionBaseContext(Primary_expressionContext context) { CopyFrom(context); } + public partial class LiteralScalarExpressionContext : Primary_expressionContext { + public LiteralContext literal() { + return GetRuleContext(0); + } + public LiteralScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterPropertyRefScalarExpressionBase(this); + if (typedListener != null) typedListener.EnterLiteralScalarExpression(this); } public override void ExitRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitPropertyRefScalarExpressionBase(this); + if (typedListener != null) typedListener.ExitLiteralScalarExpression(this); } public override TResult Accept(IParseTreeVisitor visitor) { IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitPropertyRefScalarExpressionBase(this); + if (typedVisitor != null) return typedVisitor.VisitLiteralScalarExpression(this); else return visitor.VisitChildren(this); } } - public partial class FunctionCallScalarExpressionContext : Primary_expressionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } - public ITerminalNode K_UDF() { return GetToken(sqlParser.K_UDF, 0); } + public partial class ObjectCreateScalarExpressionContext : Primary_expressionContext { + public Object_property_listContext object_property_list() { + return GetRuleContext(0); + } + public ObjectCreateScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public override void EnterRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.EnterObjectCreateScalarExpression(this); + } + public override void ExitRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.ExitObjectCreateScalarExpression(this); + } + public override TResult Accept(IParseTreeVisitor visitor) { + IsqlVisitor typedVisitor = visitor as IsqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitObjectCreateScalarExpression(this); + else return visitor.VisitChildren(this); + } + } + public partial class ArrayCreateScalarExpressionContext : Primary_expressionContext { public Scalar_expression_listContext scalar_expression_list() { return GetRuleContext(0); } - public FunctionCallScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public ArrayCreateScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterFunctionCallScalarExpression(this); + if (typedListener != null) typedListener.EnterArrayCreateScalarExpression(this); } public override void ExitRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitFunctionCallScalarExpression(this); + if (typedListener != null) typedListener.ExitArrayCreateScalarExpression(this); } public override TResult Accept(IParseTreeVisitor visitor) { IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitFunctionCallScalarExpression(this); + if (typedVisitor != null) return typedVisitor.VisitArrayCreateScalarExpression(this); else return visitor.VisitChildren(this); } } - public partial class LiteralScalarExpressionContext : Primary_expressionContext { - public LiteralContext literal() { - return GetRuleContext(0); + public partial class MemberIndexerScalarExpressionContext : Primary_expressionContext { + public Primary_expressionContext primary_expression() { + return GetRuleContext(0); } - public LiteralScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public Scalar_expressionContext scalar_expression() { + return GetRuleContext(0); + } + public MemberIndexerScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterLiteralScalarExpression(this); + if (typedListener != null) typedListener.EnterMemberIndexerScalarExpression(this); } public override void ExitRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitLiteralScalarExpression(this); + if (typedListener != null) typedListener.ExitMemberIndexerScalarExpression(this); } public override TResult Accept(IParseTreeVisitor visitor) { IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitLiteralScalarExpression(this); + if (typedVisitor != null) return typedVisitor.VisitMemberIndexerScalarExpression(this); else return visitor.VisitChildren(this); } } - public partial class ObjectCreateScalarExpressionContext : Primary_expressionContext { - public Object_property_listContext object_property_list() { - return GetRuleContext(0); + public partial class SubqueryScalarExpressionContext : Primary_expressionContext { + public Sql_queryContext sql_query() { + return GetRuleContext(0); } - public ObjectCreateScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public SubqueryScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterObjectCreateScalarExpression(this); + if (typedListener != null) typedListener.EnterSubqueryScalarExpression(this); } public override void ExitRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitObjectCreateScalarExpression(this); + if (typedListener != null) typedListener.ExitSubqueryScalarExpression(this); } public override TResult Accept(IParseTreeVisitor visitor) { IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitObjectCreateScalarExpression(this); + if (typedVisitor != null) return typedVisitor.VisitSubqueryScalarExpression(this); + else return visitor.VisitChildren(this); + } + } + public partial class PropertyRefScalarExpressionBaseContext : Primary_expressionContext { + public IdentifierContext identifier() { + return GetRuleContext(0); + } + public PropertyRefScalarExpressionBaseContext(Primary_expressionContext context) { CopyFrom(context); } + public override void EnterRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.EnterPropertyRefScalarExpressionBase(this); + } + public override void ExitRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.ExitPropertyRefScalarExpressionBase(this); + } + public override TResult Accept(IParseTreeVisitor visitor) { + IsqlVisitor typedVisitor = visitor as IsqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitPropertyRefScalarExpressionBase(this); + else return visitor.VisitChildren(this); + } + } + public partial class FunctionCallScalarExpressionContext : Primary_expressionContext { + public Function_call_scalar_expressionContext function_call_scalar_expression() { + return GetRuleContext(0); + } + public FunctionCallScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } + public override void EnterRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.EnterFunctionCallScalarExpression(this); + } + public override void ExitRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.ExitFunctionCallScalarExpression(this); + } + public override TResult Accept(IParseTreeVisitor visitor) { + IsqlVisitor typedVisitor = visitor as IsqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunctionCallScalarExpression(this); else return visitor.VisitChildren(this); } } @@ -3025,25 +3105,6 @@ public override TResult Accept(IParseTreeVisitor visitor) { else return visitor.VisitChildren(this); } } - public partial class ArrayCreateScalarExpressionContext : Primary_expressionContext { - public Scalar_expression_listContext scalar_expression_list() { - return GetRuleContext(0); - } - public ArrayCreateScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } - public override void EnterRule(IParseTreeListener listener) { - IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterArrayCreateScalarExpression(this); - } - public override void ExitRule(IParseTreeListener listener) { - IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitArrayCreateScalarExpression(this); - } - public override TResult Accept(IParseTreeVisitor visitor) { - IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitArrayCreateScalarExpression(this); - else return visitor.VisitChildren(this); - } - } public partial class ExistsScalarExpressionContext : Primary_expressionContext { public ITerminalNode K_EXISTS() { return GetToken(sqlParser.K_EXISTS, 0); } public Sql_queryContext sql_query() { @@ -3084,33 +3145,13 @@ public override TResult Accept(IParseTreeVisitor visitor) { else return visitor.VisitChildren(this); } } - public partial class MemberIndexerScalarExpressionContext : Primary_expressionContext { - public Primary_expressionContext primary_expression() { - return GetRuleContext(0); - } - public Scalar_expressionContext scalar_expression() { - return GetRuleContext(0); - } - public MemberIndexerScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } - public override void EnterRule(IParseTreeListener listener) { - IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.EnterMemberIndexerScalarExpression(this); - } - public override void ExitRule(IParseTreeListener listener) { - IsqlListener typedListener = listener as IsqlListener; - if (typedListener != null) typedListener.ExitMemberIndexerScalarExpression(this); - } - public override TResult Accept(IParseTreeVisitor visitor) { - IsqlVisitor typedVisitor = visitor as IsqlVisitor; - if (typedVisitor != null) return typedVisitor.VisitMemberIndexerScalarExpression(this); - else return visitor.VisitChildren(this); - } - } public partial class PropertyRefScalarExpressionRecursiveContext : Primary_expressionContext { public Primary_expressionContext primary_expression() { return GetRuleContext(0); } - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public PropertyRefScalarExpressionRecursiveContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; @@ -3144,16 +3185,16 @@ private Primary_expressionContext primary_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 396; + State = 397; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,37,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,35,Context) ) { case 1: { _localctx = new PropertyRefScalarExpressionBaseContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 355; Match(IDENTIFIER); + State = 360; identifier(); } break; case 2: @@ -3161,7 +3202,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ParameterRefScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 356; Match(PARAMETER); + State = 361; Match(PARAMETER); } break; case 3: @@ -3169,7 +3210,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new LiteralScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 357; literal(); + State = 362; literal(); } break; case 4: @@ -3177,17 +3218,17 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ArrayCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 358; Match(T__5); - State = 360; + State = 363; Match(T__5); + State = 365; ErrorHandler.Sync(this); _la = TokenStream.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__5) | (1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << T__25) | (1L << K_ARRAY) | (1L << K_EXISTS) | (1L << K_FALSE) | (1L << K_NOT) | (1L << K_NULL) | (1L << K_TRUE) | (1L << K_UDF) | (1L << K_UNDEFINED) | (1L << NUMERIC_LITERAL) | (1L << STRING_LITERAL) | (1L << IDENTIFIER) | (1L << PARAMETER))) != 0)) { + if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (T__2 - 3)) | (1L << (T__5 - 3)) | (1L << (T__12 - 3)) | (1L << (T__13 - 3)) | (1L << (T__24 - 3)) | (1L << (T__25 - 3)) | (1L << (K_ALL - 3)) | (1L << (K_ARRAY - 3)) | (1L << (K_EXISTS - 3)) | (1L << (K_FALSE - 3)) | (1L << (K_LEFT - 3)) | (1L << (K_NOT - 3)) | (1L << (K_NULL - 3)) | (1L << (K_RIGHT - 3)) | (1L << (K_TRUE - 3)) | (1L << (K_UDF - 3)) | (1L << (K_UNDEFINED - 3)) | (1L << (NUMERIC_LITERAL - 3)) | (1L << (STRING_LITERAL - 3)) | (1L << (LEX_IDENTIFIER - 3)) | (1L << (PARAMETER - 3)))) != 0)) { { - State = 359; scalar_expression_list(); + State = 364; scalar_expression_list(); } } - State = 362; Match(T__6); + State = 367; Match(T__6); } break; case 5: @@ -3195,63 +3236,45 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ObjectCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 363; Match(T__25); - State = 365; + State = 368; Match(T__25); + State = 370; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==STRING_LITERAL) { { - State = 364; object_property_list(); + State = 369; object_property_list(); } } - State = 367; Match(T__26); + State = 372; Match(T__26); } break; case 6: { - _localctx = new FunctionCallScalarExpressionContext(_localctx); + _localctx = new ParenthesizedScalarExperessionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 370; - ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - if (_la==K_UDF) { - { - State = 368; Match(K_UDF); - State = 369; Match(T__4); - } - } - - State = 372; Match(IDENTIFIER); State = 373; Match(T__2); - State = 375; - ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__5) | (1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << T__25) | (1L << K_ARRAY) | (1L << K_EXISTS) | (1L << K_FALSE) | (1L << K_NOT) | (1L << K_NULL) | (1L << K_TRUE) | (1L << K_UDF) | (1L << K_UNDEFINED) | (1L << NUMERIC_LITERAL) | (1L << STRING_LITERAL) | (1L << IDENTIFIER) | (1L << PARAMETER))) != 0)) { - { - State = 374; scalar_expression_list(); - } - } - - State = 377; Match(T__3); + State = 374; scalar_expression(0); + State = 375; Match(T__3); } break; case 7: { - _localctx = new ParenthesizedScalarExperessionContext(_localctx); + _localctx = new SubqueryScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 378; Match(T__2); - State = 379; scalar_expression(0); - State = 380; Match(T__3); + State = 377; Match(T__2); + State = 378; sql_query(); + State = 379; Match(T__3); } break; case 8: { - _localctx = new SubqueryScalarExpressionContext(_localctx); + _localctx = new ExistsScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; + State = 381; Match(K_EXISTS); State = 382; Match(T__2); State = 383; sql_query(); State = 384; Match(T__3); @@ -3259,10 +3282,10 @@ private Primary_expressionContext primary_expression(int _p) { break; case 9: { - _localctx = new ExistsScalarExpressionContext(_localctx); + _localctx = new ArrayScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 386; Match(K_EXISTS); + State = 386; Match(K_ARRAY); State = 387; Match(T__2); State = 388; sql_query(); State = 389; Match(T__3); @@ -3270,56 +3293,64 @@ private Primary_expressionContext primary_expression(int _p) { break; case 10: { - _localctx = new ArrayScalarExpressionContext(_localctx); + _localctx = new AllScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 391; Match(K_ARRAY); + State = 391; Match(K_ALL); State = 392; Match(T__2); State = 393; sql_query(); State = 394; Match(T__3); } break; + case 11: + { + _localctx = new FunctionCallScalarExpressionContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 396; function_call_scalar_expression(); + } + break; } Context.Stop = TokenStream.LT(-1); - State = 408; + State = 409; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( ParseListeners!=null ) TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 406; + State = 407; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,38,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,36,Context) ) { case 1: { _localctx = new PropertyRefScalarExpressionRecursiveContext(new Primary_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_primary_expression); - State = 398; - if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 399; Match(T__4); - State = 400; Match(IDENTIFIER); + State = 399; + if (!(Precpred(Context, 6))) throw new FailedPredicateException(this, "Precpred(Context, 6)"); + State = 400; Match(T__4); + State = 401; identifier(); } break; case 2: { _localctx = new MemberIndexerScalarExpressionContext(new Primary_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_primary_expression); - State = 401; - if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 402; Match(T__5); - State = 403; scalar_expression(0); - State = 404; Match(T__6); + State = 402; + if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); + State = 403; Match(T__5); + State = 404; scalar_expression(0); + State = 405; Match(T__6); } break; } } } - State = 410; + State = 411; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); } } } @@ -3334,6 +3365,123 @@ private Primary_expressionContext primary_expression(int _p) { return _localctx; } + public partial class Function_call_scalar_expressionContext : ParserRuleContext { + public IdentifierContext identifier() { + return GetRuleContext(0); + } + public ITerminalNode K_UDF() { return GetToken(sqlParser.K_UDF, 0); } + public Scalar_expression_listContext scalar_expression_list() { + return GetRuleContext(0); + } + public ITerminalNode K_LEFT() { return GetToken(sqlParser.K_LEFT, 0); } + public ITerminalNode K_RIGHT() { return GetToken(sqlParser.K_RIGHT, 0); } + public Function_call_scalar_expressionContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_function_call_scalar_expression; } } + public override void EnterRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.EnterFunction_call_scalar_expression(this); + } + public override void ExitRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.ExitFunction_call_scalar_expression(this); + } + public override TResult Accept(IParseTreeVisitor visitor) { + IsqlVisitor typedVisitor = visitor as IsqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitFunction_call_scalar_expression(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public Function_call_scalar_expressionContext function_call_scalar_expression() { + Function_call_scalar_expressionContext _localctx = new Function_call_scalar_expressionContext(Context, State); + EnterRule(_localctx, 78, RULE_function_call_scalar_expression); + int _la; + try { + State = 435; + ErrorHandler.Sync(this); + switch (TokenStream.LA(1)) { + case K_ALL: + case K_UDF: + case LEX_IDENTIFIER: + EnterOuterAlt(_localctx, 1); + { + State = 414; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (_la==K_UDF) { + { + State = 412; Match(K_UDF); + State = 413; Match(T__4); + } + } + + State = 416; identifier(); + State = 417; Match(T__2); + State = 419; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (T__2 - 3)) | (1L << (T__5 - 3)) | (1L << (T__12 - 3)) | (1L << (T__13 - 3)) | (1L << (T__24 - 3)) | (1L << (T__25 - 3)) | (1L << (K_ALL - 3)) | (1L << (K_ARRAY - 3)) | (1L << (K_EXISTS - 3)) | (1L << (K_FALSE - 3)) | (1L << (K_LEFT - 3)) | (1L << (K_NOT - 3)) | (1L << (K_NULL - 3)) | (1L << (K_RIGHT - 3)) | (1L << (K_TRUE - 3)) | (1L << (K_UDF - 3)) | (1L << (K_UNDEFINED - 3)) | (1L << (NUMERIC_LITERAL - 3)) | (1L << (STRING_LITERAL - 3)) | (1L << (LEX_IDENTIFIER - 3)) | (1L << (PARAMETER - 3)))) != 0)) { + { + State = 418; scalar_expression_list(); + } + } + + State = 421; Match(T__3); + } + break; + case K_LEFT: + EnterOuterAlt(_localctx, 2); + { + State = 423; Match(K_LEFT); + State = 424; Match(T__2); + State = 426; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (T__2 - 3)) | (1L << (T__5 - 3)) | (1L << (T__12 - 3)) | (1L << (T__13 - 3)) | (1L << (T__24 - 3)) | (1L << (T__25 - 3)) | (1L << (K_ALL - 3)) | (1L << (K_ARRAY - 3)) | (1L << (K_EXISTS - 3)) | (1L << (K_FALSE - 3)) | (1L << (K_LEFT - 3)) | (1L << (K_NOT - 3)) | (1L << (K_NULL - 3)) | (1L << (K_RIGHT - 3)) | (1L << (K_TRUE - 3)) | (1L << (K_UDF - 3)) | (1L << (K_UNDEFINED - 3)) | (1L << (NUMERIC_LITERAL - 3)) | (1L << (STRING_LITERAL - 3)) | (1L << (LEX_IDENTIFIER - 3)) | (1L << (PARAMETER - 3)))) != 0)) { + { + State = 425; scalar_expression_list(); + } + } + + State = 428; Match(T__3); + } + break; + case K_RIGHT: + EnterOuterAlt(_localctx, 3); + { + State = 429; Match(K_RIGHT); + State = 430; Match(T__2); + State = 432; + ErrorHandler.Sync(this); + _la = TokenStream.LA(1); + if (((((_la - 3)) & ~0x3f) == 0 && ((1L << (_la - 3)) & ((1L << (T__2 - 3)) | (1L << (T__5 - 3)) | (1L << (T__12 - 3)) | (1L << (T__13 - 3)) | (1L << (T__24 - 3)) | (1L << (T__25 - 3)) | (1L << (K_ALL - 3)) | (1L << (K_ARRAY - 3)) | (1L << (K_EXISTS - 3)) | (1L << (K_FALSE - 3)) | (1L << (K_LEFT - 3)) | (1L << (K_NOT - 3)) | (1L << (K_NULL - 3)) | (1L << (K_RIGHT - 3)) | (1L << (K_TRUE - 3)) | (1L << (K_UDF - 3)) | (1L << (K_UNDEFINED - 3)) | (1L << (NUMERIC_LITERAL - 3)) | (1L << (STRING_LITERAL - 3)) | (1L << (LEX_IDENTIFIER - 3)) | (1L << (PARAMETER - 3)))) != 0)) { + { + State = 431; scalar_expression_list(); + } + } + + State = 434; Match(T__3); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + public partial class Scalar_expression_listContext : ParserRuleContext { public Scalar_expressionContext[] scalar_expression() { return GetRuleContexts(); @@ -3364,23 +3512,23 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Scalar_expression_listContext scalar_expression_list() { Scalar_expression_listContext _localctx = new Scalar_expression_listContext(Context, State); - EnterRule(_localctx, 78, RULE_scalar_expression_list); + EnterRule(_localctx, 80, RULE_scalar_expression_list); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 411; scalar_expression(0); - State = 416; + State = 437; scalar_expression(0); + State = 442; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 412; Match(T__1); - State = 413; scalar_expression(0); + State = 438; Match(T__1); + State = 439; scalar_expression(0); } } - State = 418; + State = 444; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3427,23 +3575,23 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Object_property_listContext object_property_list() { Object_property_listContext _localctx = new Object_property_listContext(Context, State); - EnterRule(_localctx, 80, RULE_object_property_list); + EnterRule(_localctx, 82, RULE_object_property_list); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 419; object_property(); - State = 424; + State = 445; object_property(); + State = 450; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 420; Match(T__1); - State = 421; object_property(); + State = 446; Match(T__1); + State = 447; object_property(); } } - State = 426; + State = 452; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3488,13 +3636,66 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public Object_propertyContext object_property() { Object_propertyContext _localctx = new Object_propertyContext(Context, State); - EnterRule(_localctx, 82, RULE_object_property); + EnterRule(_localctx, 84, RULE_object_property); try { EnterOuterAlt(_localctx, 1); { - State = 427; Match(STRING_LITERAL); - State = 428; Match(T__8); - State = 429; scalar_expression(0); + State = 453; Match(STRING_LITERAL); + State = 454; Match(T__8); + State = 455; scalar_expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + ErrorHandler.ReportError(this, re); + ErrorHandler.Recover(this, re); + } + finally { + ExitRule(); + } + return _localctx; + } + + public partial class IdentifierContext : ParserRuleContext { + public ITerminalNode LEX_IDENTIFIER() { return GetToken(sqlParser.LEX_IDENTIFIER, 0); } + public ITerminalNode K_ALL() { return GetToken(sqlParser.K_ALL, 0); } + public IdentifierContext(ParserRuleContext parent, int invokingState) + : base(parent, invokingState) + { + } + public override int RuleIndex { get { return RULE_identifier; } } + public override void EnterRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.EnterIdentifier(this); + } + public override void ExitRule(IParseTreeListener listener) { + IsqlListener typedListener = listener as IsqlListener; + if (typedListener != null) typedListener.ExitIdentifier(this); + } + public override TResult Accept(IParseTreeVisitor visitor) { + IsqlVisitor typedVisitor = visitor as IsqlVisitor; + if (typedVisitor != null) return typedVisitor.VisitIdentifier(this); + else return visitor.VisitChildren(this); + } + } + + [RuleVersion(0)] + public IdentifierContext identifier() { + IdentifierContext _localctx = new IdentifierContext(Context, State); + EnterRule(_localctx, 86, RULE_identifier); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 457; + _la = TokenStream.LA(1); + if ( !(_la==K_ALL || _la==LEX_IDENTIFIER) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } } } catch (RecognitionException re) { @@ -3538,12 +3739,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public LiteralContext literal() { LiteralContext _localctx = new LiteralContext(Context, State); - EnterRule(_localctx, 84, RULE_literal); + EnterRule(_localctx, 88, RULE_literal); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 431; + State = 459; _la = TokenStream.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << K_FALSE) | (1L << K_NULL) | (1L << K_TRUE) | (1L << K_UNDEFINED) | (1L << NUMERIC_LITERAL) | (1L << STRING_LITERAL))) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -3619,15 +3820,15 @@ private bool binary_scalar_expression_sempred(Binary_scalar_expressionContext _l } private bool primary_expression_sempred(Primary_expressionContext _localctx, int predIndex) { switch (predIndex) { - case 16: return Precpred(Context, 4); - case 17: return Precpred(Context, 3); + case 16: return Precpred(Context, 6); + case 17: return Precpred(Context, 5); } return true; } private static char[] _serializedATN = { '\x3', '\x608B', '\xA72A', '\x8133', '\xB9ED', '\x417C', '\x3BE7', '\x7786', - '\x5964', '\x3', '?', '\x1B4', '\x4', '\x2', '\t', '\x2', '\x4', '\x3', + '\x5964', '\x3', '\x42', '\x1D0', '\x4', '\x2', '\t', '\x2', '\x4', '\x3', '\t', '\x3', '\x4', '\x4', '\t', '\x4', '\x4', '\x5', '\t', '\x5', '\x4', '\x6', '\t', '\x6', '\x4', '\a', '\t', '\a', '\x4', '\b', '\t', '\b', '\x4', '\t', '\t', '\t', '\x4', '\n', '\t', '\n', '\x4', '\v', '\t', '\v', @@ -3643,358 +3844,383 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '#', '\t', '#', '\x4', '$', '\t', '$', '\x4', '%', '\t', '%', '\x4', '&', '\t', '&', '\x4', '\'', '\t', '\'', '\x4', '(', '\t', '(', '\x4', ')', '\t', ')', '\x4', '*', '\t', '*', '\x4', '+', '\t', '+', '\x4', ',', '\t', - ',', '\x3', '\x2', '\x3', '\x2', '\x3', '\x2', '\x3', '\x3', '\x3', '\x3', - '\x5', '\x3', '^', '\n', '\x3', '\x3', '\x3', '\x5', '\x3', '\x61', '\n', - '\x3', '\x3', '\x3', '\x5', '\x3', '\x64', '\n', '\x3', '\x3', '\x3', - '\x5', '\x3', 'g', '\n', '\x3', '\x3', '\x3', '\x5', '\x3', 'j', '\n', - '\x3', '\x3', '\x4', '\x3', '\x4', '\x5', '\x4', 'n', '\n', '\x4', '\x3', - '\x4', '\x5', '\x4', 'q', '\n', '\x4', '\x3', '\x4', '\x3', '\x4', '\x3', - '\x5', '\x3', '\x5', '\x3', '\x5', '\x3', '\x6', '\x3', '\x6', '\x3', - '\x6', '\x5', '\x6', '{', '\n', '\x6', '\x3', '\a', '\x3', '\a', '\x3', - '\b', '\x3', '\b', '\x3', '\b', '\x3', '\t', '\x3', '\t', '\x3', '\t', - '\a', '\t', '\x85', '\n', '\t', '\f', '\t', '\xE', '\t', '\x88', '\v', - '\t', '\x3', '\n', '\x3', '\n', '\x3', '\n', '\x5', '\n', '\x8D', '\n', - '\n', '\x3', '\v', '\x3', '\v', '\x3', '\v', '\x3', '\f', '\x3', '\f', - '\x3', '\f', '\x5', '\f', '\x95', '\n', '\f', '\x3', '\f', '\x5', '\f', - '\x98', '\n', '\f', '\x3', '\f', '\x3', '\f', '\x3', '\f', '\x5', '\f', - '\x9D', '\n', '\f', '\x3', '\f', '\x3', '\f', '\x3', '\f', '\a', '\f', - '\xA2', '\n', '\f', '\f', '\f', '\xE', '\f', '\xA5', '\v', '\f', '\x3', - '\r', '\x3', '\r', '\x5', '\r', '\xA9', '\n', '\r', '\x3', '\r', '\x3', - '\r', '\x3', '\r', '\x3', '\r', '\x5', '\r', '\xAF', '\n', '\r', '\x3', + ',', '\x4', '-', '\t', '-', '\x4', '.', '\t', '.', '\x3', '\x2', '\x3', + '\x2', '\x3', '\x2', '\x3', '\x3', '\x3', '\x3', '\x5', '\x3', '\x62', + '\n', '\x3', '\x3', '\x3', '\x5', '\x3', '\x65', '\n', '\x3', '\x3', '\x3', + '\x5', '\x3', 'h', '\n', '\x3', '\x3', '\x3', '\x5', '\x3', 'k', '\n', + '\x3', '\x3', '\x3', '\x5', '\x3', 'n', '\n', '\x3', '\x3', '\x4', '\x3', + '\x4', '\x5', '\x4', 'r', '\n', '\x4', '\x3', '\x4', '\x5', '\x4', 'u', + '\n', '\x4', '\x3', '\x4', '\x3', '\x4', '\x3', '\x5', '\x3', '\x5', '\x3', + '\x5', '\x3', '\x6', '\x3', '\x6', '\x3', '\x6', '\x5', '\x6', '\x7F', + '\n', '\x6', '\x3', '\a', '\x3', '\a', '\x3', '\b', '\x3', '\b', '\x3', + '\b', '\x3', '\t', '\x3', '\t', '\x3', '\t', '\a', '\t', '\x89', '\n', + '\t', '\f', '\t', '\xE', '\t', '\x8C', '\v', '\t', '\x3', '\n', '\x3', + '\n', '\x3', '\n', '\x5', '\n', '\x91', '\n', '\n', '\x3', '\v', '\x3', + '\v', '\x3', '\v', '\x3', '\f', '\x3', '\f', '\x3', '\f', '\x5', '\f', + '\x99', '\n', '\f', '\x3', '\f', '\x5', '\f', '\x9C', '\n', '\f', '\x3', + '\f', '\x3', '\f', '\x3', '\f', '\x3', '\f', '\x5', '\f', '\xA2', '\n', + '\f', '\x3', '\f', '\x3', '\f', '\x3', '\f', '\a', '\f', '\xA7', '\n', + '\f', '\f', '\f', '\xE', '\f', '\xAA', '\v', '\f', '\x3', '\r', '\x3', + '\r', '\x5', '\r', '\xAE', '\n', '\r', '\x3', '\r', '\x3', '\r', '\x3', + '\r', '\x3', '\r', '\x5', '\r', '\xB4', '\n', '\r', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', '\xE', '\x3', - '\xE', '\x3', '\xE', '\a', '\xE', '\xBD', '\n', '\xE', '\f', '\xE', '\xE', - '\xE', '\xC0', '\v', '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\xF', - '\x3', '\x10', '\x3', '\x10', '\x3', '\x10', '\x3', '\x10', '\x3', '\x11', - '\x3', '\x11', '\x3', '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', - '\x3', '\x12', '\a', '\x12', '\xD0', '\n', '\x12', '\f', '\x12', '\xE', - '\x12', '\xD3', '\v', '\x12', '\x3', '\x13', '\x3', '\x13', '\x5', '\x13', - '\xD7', '\n', '\x13', '\x3', '\x14', '\x3', '\x14', '\x3', '\x15', '\x3', - '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', '\x3', - '\x16', '\x3', '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', '\x3', - '\x18', '\x3', '\x18', '\x5', '\x18', '\xE8', '\n', '\x18', '\x3', '\x18', - '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x5', '\x18', - '\xEF', '\n', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', + '\xE', '\a', '\xE', '\xC2', '\n', '\xE', '\f', '\xE', '\xE', '\xE', '\xC5', + '\v', '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\xF', '\x3', '\x10', + '\x3', '\x10', '\x3', '\x10', '\x3', '\x10', '\x3', '\x11', '\x3', '\x11', + '\x3', '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', '\x3', '\x12', + '\a', '\x12', '\xD5', '\n', '\x12', '\f', '\x12', '\xE', '\x12', '\xD8', + '\v', '\x12', '\x3', '\x13', '\x3', '\x13', '\x5', '\x13', '\xDC', '\n', + '\x13', '\x3', '\x14', '\x3', '\x14', '\x3', '\x15', '\x3', '\x15', '\x3', + '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', '\x3', '\x16', '\x3', + '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', + '\x18', '\x5', '\x18', '\xED', '\n', '\x18', '\x3', '\x18', '\x3', '\x18', + '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x5', '\x18', '\xF4', '\n', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', - '\x18', '\a', '\x18', '\xFA', '\n', '\x18', '\f', '\x18', '\xE', '\x18', - '\xFD', '\v', '\x18', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', - '\x19', '\x5', '\x19', '\x103', '\n', '\x19', '\x3', '\x19', '\x3', '\x19', - '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\a', '\x19', - '\x10B', '\n', '\x19', '\f', '\x19', '\xE', '\x19', '\x10E', '\v', '\x19', - '\x3', '\x1A', '\x3', '\x1A', '\x5', '\x1A', '\x112', '\n', '\x1A', '\x3', - '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', - '\x1B', '\x3', '\x1B', '\x5', '\x1B', '\x11B', '\n', '\x1B', '\x3', '\x1B', - '\x3', '\x1B', '\x3', '\x1B', '\x5', '\x1B', '\x120', '\n', '\x1B', '\x3', - '\x1C', '\x3', '\x1C', '\x3', '\x1C', '\x3', '\x1D', '\x3', '\x1D', '\x3', + '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\a', + '\x18', '\xFF', '\n', '\x18', '\f', '\x18', '\xE', '\x18', '\x102', '\v', + '\x18', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x5', + '\x19', '\x108', '\n', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', + '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\a', '\x19', '\x110', '\n', + '\x19', '\f', '\x19', '\xE', '\x19', '\x113', '\v', '\x19', '\x3', '\x1A', + '\x3', '\x1A', '\x5', '\x1A', '\x117', '\n', '\x1A', '\x3', '\x1A', '\x3', + '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1B', '\x3', + '\x1B', '\x5', '\x1B', '\x120', '\n', '\x1B', '\x3', '\x1B', '\x3', '\x1B', + '\x3', '\x1B', '\x5', '\x1B', '\x125', '\n', '\x1B', '\x3', '\x1C', '\x3', + '\x1C', '\x3', '\x1C', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', - '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\a', '\x1D', '\x148', '\n', '\x1D', - '\f', '\x1D', '\xE', '\x1D', '\x14B', '\v', '\x1D', '\x3', '\x1E', '\x3', - '\x1E', '\x3', '\x1F', '\x3', '\x1F', '\x3', ' ', '\x3', ' ', '\x3', '!', - '\x3', '!', '\x3', '\"', '\x3', '\"', '\x3', '#', '\x3', '#', '\x3', '$', - '\x3', '$', '\x3', '%', '\x3', '%', '\x3', '&', '\x3', '&', '\x3', '&', - '\x3', '&', '\x5', '&', '\x161', '\n', '&', '\x3', '\'', '\x3', '\'', - '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', - '\x5', '(', '\x16B', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', - '(', '\x170', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', - '\x175', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', '\x17A', + '\x1D', '\x3', '\x1D', '\a', '\x1D', '\x14D', '\n', '\x1D', '\f', '\x1D', + '\xE', '\x1D', '\x150', '\v', '\x1D', '\x3', '\x1E', '\x3', '\x1E', '\x3', + '\x1F', '\x3', '\x1F', '\x3', ' ', '\x3', ' ', '\x3', '!', '\x3', '!', + '\x3', '\"', '\x3', '\"', '\x3', '#', '\x3', '#', '\x3', '$', '\x3', '$', + '\x3', '%', '\x3', '%', '\x3', '&', '\x3', '&', '\x3', '&', '\x3', '&', + '\x5', '&', '\x166', '\n', '&', '\x3', '\'', '\x3', '\'', '\x3', '(', + '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', + '\x170', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', '\x175', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', - '\x3', '(', '\x3', '(', '\x5', '(', '\x18F', '\n', '(', '\x3', '(', '\x3', + '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\x3', '(', '\x3', '(', '\x5', '(', '\x190', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', - '(', '\a', '(', '\x199', '\n', '(', '\f', '(', '\xE', '(', '\x19C', '\v', - '(', '\x3', ')', '\x3', ')', '\x3', ')', '\a', ')', '\x1A1', '\n', ')', - '\f', ')', '\xE', ')', '\x1A4', '\v', ')', '\x3', '*', '\x3', '*', '\x3', - '*', '\a', '*', '\x1A9', '\n', '*', '\f', '*', '\xE', '*', '\x1AC', '\v', - '*', '\x3', '+', '\x3', '+', '\x3', '+', '\x3', '+', '\x3', ',', '\x3', - ',', '\x3', ',', '\x2', '\b', '\x16', '\x1A', '.', '\x30', '\x38', 'N', - '-', '\x2', '\x4', '\x6', '\b', '\n', '\f', '\xE', '\x10', '\x12', '\x14', + '(', '\a', '(', '\x19A', '\n', '(', '\f', '(', '\xE', '(', '\x19D', '\v', + '(', '\x3', ')', '\x3', ')', '\x5', ')', '\x1A1', '\n', ')', '\x3', ')', + '\x3', ')', '\x3', ')', '\x5', ')', '\x1A6', '\n', ')', '\x3', ')', '\x3', + ')', '\x3', ')', '\x3', ')', '\x3', ')', '\x5', ')', '\x1AD', '\n', ')', + '\x3', ')', '\x3', ')', '\x3', ')', '\x3', ')', '\x5', ')', '\x1B3', '\n', + ')', '\x3', ')', '\x5', ')', '\x1B6', '\n', ')', '\x3', '*', '\x3', '*', + '\x3', '*', '\a', '*', '\x1BB', '\n', '*', '\f', '*', '\xE', '*', '\x1BE', + '\v', '*', '\x3', '+', '\x3', '+', '\x3', '+', '\a', '+', '\x1C3', '\n', + '+', '\f', '+', '\xE', '+', '\x1C6', '\v', '+', '\x3', ',', '\x3', ',', + '\x3', ',', '\x3', ',', '\x3', '-', '\x3', '-', '\x3', '.', '\x3', '.', + '\x3', '.', '\x2', '\b', '\x16', '\x1A', '.', '\x30', '\x38', 'N', '/', + '\x2', '\x4', '\x6', '\b', '\n', '\f', '\xE', '\x10', '\x12', '\x14', '\x16', '\x18', '\x1A', '\x1C', '\x1E', ' ', '\"', '$', '&', '(', '*', ',', '.', '\x30', '\x32', '\x34', '\x36', '\x38', ':', '<', '>', '@', - '\x42', '\x44', '\x46', 'H', 'J', 'L', 'N', 'P', 'R', 'T', 'V', '\x2', - '\n', '\x4', '\x2', '<', '<', '?', '?', '\x4', '\x2', '!', '!', '$', '$', - '\x4', '\x2', '\x3', '\x3', '\r', '\xE', '\x3', '\x2', '\xF', '\x10', - '\x3', '\x2', '\x11', '\x14', '\x3', '\x2', '\x15', '\x16', '\x5', '\x2', - '\xF', '\x10', '\x1B', '\x1B', '/', '/', '\a', '\x2', '(', '(', '\x30', - '\x30', '\x36', '\x36', '\x38', '\x38', '<', '=', '\x2', '\x1C3', '\x2', - 'X', '\x3', '\x2', '\x2', '\x2', '\x4', '[', '\x3', '\x2', '\x2', '\x2', - '\x6', 'k', '\x3', '\x2', '\x2', '\x2', '\b', 't', '\x3', '\x2', '\x2', - '\x2', '\n', 'z', '\x3', '\x2', '\x2', '\x2', '\f', '|', '\x3', '\x2', - '\x2', '\x2', '\xE', '~', '\x3', '\x2', '\x2', '\x2', '\x10', '\x81', - '\x3', '\x2', '\x2', '\x2', '\x12', '\x89', '\x3', '\x2', '\x2', '\x2', - '\x14', '\x8E', '\x3', '\x2', '\x2', '\x2', '\x16', '\x9C', '\x3', '\x2', - '\x2', '\x2', '\x18', '\xAE', '\x3', '\x2', '\x2', '\x2', '\x1A', '\xB0', - '\x3', '\x2', '\x2', '\x2', '\x1C', '\xC1', '\x3', '\x2', '\x2', '\x2', - '\x1E', '\xC4', '\x3', '\x2', '\x2', '\x2', ' ', '\xC8', '\x3', '\x2', - '\x2', '\x2', '\"', '\xCC', '\x3', '\x2', '\x2', '\x2', '$', '\xD4', '\x3', - '\x2', '\x2', '\x2', '&', '\xD8', '\x3', '\x2', '\x2', '\x2', '(', '\xDA', - '\x3', '\x2', '\x2', '\x2', '*', '\xDF', '\x3', '\x2', '\x2', '\x2', ',', - '\xE1', '\x3', '\x2', '\x2', '\x2', '.', '\xEE', '\x3', '\x2', '\x2', - '\x2', '\x30', '\x102', '\x3', '\x2', '\x2', '\x2', '\x32', '\x10F', '\x3', - '\x2', '\x2', '\x2', '\x34', '\x118', '\x3', '\x2', '\x2', '\x2', '\x36', - '\x121', '\x3', '\x2', '\x2', '\x2', '\x38', '\x124', '\x3', '\x2', '\x2', - '\x2', ':', '\x14C', '\x3', '\x2', '\x2', '\x2', '<', '\x14E', '\x3', - '\x2', '\x2', '\x2', '>', '\x150', '\x3', '\x2', '\x2', '\x2', '@', '\x152', - '\x3', '\x2', '\x2', '\x2', '\x42', '\x154', '\x3', '\x2', '\x2', '\x2', - '\x44', '\x156', '\x3', '\x2', '\x2', '\x2', '\x46', '\x158', '\x3', '\x2', - '\x2', '\x2', 'H', '\x15A', '\x3', '\x2', '\x2', '\x2', 'J', '\x160', - '\x3', '\x2', '\x2', '\x2', 'L', '\x162', '\x3', '\x2', '\x2', '\x2', - 'N', '\x18E', '\x3', '\x2', '\x2', '\x2', 'P', '\x19D', '\x3', '\x2', - '\x2', '\x2', 'R', '\x1A5', '\x3', '\x2', '\x2', '\x2', 'T', '\x1AD', - '\x3', '\x2', '\x2', '\x2', 'V', '\x1B1', '\x3', '\x2', '\x2', '\x2', - 'X', 'Y', '\x5', '\x4', '\x3', '\x2', 'Y', 'Z', '\a', '\x2', '\x2', '\x3', - 'Z', '\x3', '\x3', '\x2', '\x2', '\x2', '[', ']', '\x5', '\x6', '\x4', - '\x2', '\\', '^', '\x5', '\x14', '\v', '\x2', ']', '\\', '\x3', '\x2', - '\x2', '\x2', ']', '^', '\x3', '\x2', '\x2', '\x2', '^', '`', '\x3', '\x2', - '\x2', '\x2', '_', '\x61', '\x5', '\x1C', '\xF', '\x2', '`', '_', '\x3', - '\x2', '\x2', '\x2', '`', '\x61', '\x3', '\x2', '\x2', '\x2', '\x61', - '\x63', '\x3', '\x2', '\x2', '\x2', '\x62', '\x64', '\x5', '\x1E', '\x10', - '\x2', '\x63', '\x62', '\x3', '\x2', '\x2', '\x2', '\x63', '\x64', '\x3', - '\x2', '\x2', '\x2', '\x64', '\x66', '\x3', '\x2', '\x2', '\x2', '\x65', - 'g', '\x5', ' ', '\x11', '\x2', '\x66', '\x65', '\x3', '\x2', '\x2', '\x2', - '\x66', 'g', '\x3', '\x2', '\x2', '\x2', 'g', 'i', '\x3', '\x2', '\x2', - '\x2', 'h', 'j', '\x5', '(', '\x15', '\x2', 'i', 'h', '\x3', '\x2', '\x2', - '\x2', 'i', 'j', '\x3', '\x2', '\x2', '\x2', 'j', '\x5', '\x3', '\x2', - '\x2', '\x2', 'k', 'm', '\a', '\x34', '\x2', '\x2', 'l', 'n', '\a', '%', - '\x2', '\x2', 'm', 'l', '\x3', '\x2', '\x2', '\x2', 'm', 'n', '\x3', '\x2', - '\x2', '\x2', 'n', 'p', '\x3', '\x2', '\x2', '\x2', 'o', 'q', '\x5', '\b', - '\x5', '\x2', 'p', 'o', '\x3', '\x2', '\x2', '\x2', 'p', 'q', '\x3', '\x2', - '\x2', '\x2', 'q', 'r', '\x3', '\x2', '\x2', '\x2', 'r', 's', '\x5', '\n', - '\x6', '\x2', 's', '\a', '\x3', '\x2', '\x2', '\x2', 't', 'u', '\a', '\x35', - '\x2', '\x2', 'u', 'v', '\t', '\x2', '\x2', '\x2', 'v', '\t', '\x3', '\x2', - '\x2', '\x2', 'w', '{', '\x5', '\f', '\a', '\x2', 'x', '{', '\x5', '\xE', - '\b', '\x2', 'y', '{', '\x5', '\x10', '\t', '\x2', 'z', 'w', '\x3', '\x2', - '\x2', '\x2', 'z', 'x', '\x3', '\x2', '\x2', '\x2', 'z', 'y', '\x3', '\x2', - '\x2', '\x2', '{', '\v', '\x3', '\x2', '\x2', '\x2', '|', '}', '\a', '\x3', - '\x2', '\x2', '}', '\r', '\x3', '\x2', '\x2', '\x2', '~', '\x7F', '\a', - '\x39', '\x2', '\x2', '\x7F', '\x80', '\x5', '.', '\x18', '\x2', '\x80', - '\xF', '\x3', '\x2', '\x2', '\x2', '\x81', '\x86', '\x5', '\x12', '\n', - '\x2', '\x82', '\x83', '\a', '\x4', '\x2', '\x2', '\x83', '\x85', '\x5', - '\x12', '\n', '\x2', '\x84', '\x82', '\x3', '\x2', '\x2', '\x2', '\x85', - '\x88', '\x3', '\x2', '\x2', '\x2', '\x86', '\x84', '\x3', '\x2', '\x2', - '\x2', '\x86', '\x87', '\x3', '\x2', '\x2', '\x2', '\x87', '\x11', '\x3', - '\x2', '\x2', '\x2', '\x88', '\x86', '\x3', '\x2', '\x2', '\x2', '\x89', - '\x8C', '\x5', '.', '\x18', '\x2', '\x8A', '\x8B', '\a', ' ', '\x2', '\x2', - '\x8B', '\x8D', '\a', '>', '\x2', '\x2', '\x8C', '\x8A', '\x3', '\x2', - '\x2', '\x2', '\x8C', '\x8D', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x13', - '\x3', '\x2', '\x2', '\x2', '\x8E', '\x8F', '\a', ')', '\x2', '\x2', '\x8F', - '\x90', '\x5', '\x16', '\f', '\x2', '\x90', '\x15', '\x3', '\x2', '\x2', - '\x2', '\x91', '\x92', '\b', '\f', '\x1', '\x2', '\x92', '\x97', '\x5', - '\x18', '\r', '\x2', '\x93', '\x95', '\a', ' ', '\x2', '\x2', '\x94', - '\x93', '\x3', '\x2', '\x2', '\x2', '\x94', '\x95', '\x3', '\x2', '\x2', - '\x2', '\x95', '\x96', '\x3', '\x2', '\x2', '\x2', '\x96', '\x98', '\a', - '>', '\x2', '\x2', '\x97', '\x94', '\x3', '\x2', '\x2', '\x2', '\x97', - '\x98', '\x3', '\x2', '\x2', '\x2', '\x98', '\x9D', '\x3', '\x2', '\x2', - '\x2', '\x99', '\x9A', '\a', '>', '\x2', '\x2', '\x9A', '\x9B', '\a', - '+', '\x2', '\x2', '\x9B', '\x9D', '\x5', '\x18', '\r', '\x2', '\x9C', - '\x91', '\x3', '\x2', '\x2', '\x2', '\x9C', '\x99', '\x3', '\x2', '\x2', - '\x2', '\x9D', '\xA3', '\x3', '\x2', '\x2', '\x2', '\x9E', '\x9F', '\f', - '\x3', '\x2', '\x2', '\x9F', '\xA0', '\a', ',', '\x2', '\x2', '\xA0', - '\xA2', '\x5', '\x16', '\f', '\x4', '\xA1', '\x9E', '\x3', '\x2', '\x2', - '\x2', '\xA2', '\xA5', '\x3', '\x2', '\x2', '\x2', '\xA3', '\xA1', '\x3', - '\x2', '\x2', '\x2', '\xA3', '\xA4', '\x3', '\x2', '\x2', '\x2', '\xA4', - '\x17', '\x3', '\x2', '\x2', '\x2', '\xA5', '\xA3', '\x3', '\x2', '\x2', - '\x2', '\xA6', '\xA8', '\a', '>', '\x2', '\x2', '\xA7', '\xA9', '\x5', - '\x1A', '\xE', '\x2', '\xA8', '\xA7', '\x3', '\x2', '\x2', '\x2', '\xA8', - '\xA9', '\x3', '\x2', '\x2', '\x2', '\xA9', '\xAF', '\x3', '\x2', '\x2', - '\x2', '\xAA', '\xAB', '\a', '\x5', '\x2', '\x2', '\xAB', '\xAC', '\x5', - '\x4', '\x3', '\x2', '\xAC', '\xAD', '\a', '\x6', '\x2', '\x2', '\xAD', - '\xAF', '\x3', '\x2', '\x2', '\x2', '\xAE', '\xA6', '\x3', '\x2', '\x2', - '\x2', '\xAE', '\xAA', '\x3', '\x2', '\x2', '\x2', '\xAF', '\x19', '\x3', - '\x2', '\x2', '\x2', '\xB0', '\xBE', '\b', '\xE', '\x1', '\x2', '\xB1', - '\xB2', '\f', '\x6', '\x2', '\x2', '\xB2', '\xB3', '\a', '\a', '\x2', - '\x2', '\xB3', '\xBD', '\a', '>', '\x2', '\x2', '\xB4', '\xB5', '\f', - '\x5', '\x2', '\x2', '\xB5', '\xB6', '\a', '\b', '\x2', '\x2', '\xB6', - '\xB7', '\a', '<', '\x2', '\x2', '\xB7', '\xBD', '\a', '\t', '\x2', '\x2', - '\xB8', '\xB9', '\f', '\x4', '\x2', '\x2', '\xB9', '\xBA', '\a', '\b', - '\x2', '\x2', '\xBA', '\xBB', '\a', '=', '\x2', '\x2', '\xBB', '\xBD', - '\a', '\t', '\x2', '\x2', '\xBC', '\xB1', '\x3', '\x2', '\x2', '\x2', - '\xBC', '\xB4', '\x3', '\x2', '\x2', '\x2', '\xBC', '\xB8', '\x3', '\x2', - '\x2', '\x2', '\xBD', '\xC0', '\x3', '\x2', '\x2', '\x2', '\xBE', '\xBC', - '\x3', '\x2', '\x2', '\x2', '\xBE', '\xBF', '\x3', '\x2', '\x2', '\x2', - '\xBF', '\x1B', '\x3', '\x2', '\x2', '\x2', '\xC0', '\xBE', '\x3', '\x2', - '\x2', '\x2', '\xC1', '\xC2', '\a', ':', '\x2', '\x2', '\xC2', '\xC3', - '\x5', '.', '\x18', '\x2', '\xC3', '\x1D', '\x3', '\x2', '\x2', '\x2', - '\xC4', '\xC5', '\a', '*', '\x2', '\x2', '\xC5', '\xC6', '\a', '#', '\x2', - '\x2', '\xC6', '\xC7', '\x5', 'P', ')', '\x2', '\xC7', '\x1F', '\x3', - '\x2', '\x2', '\x2', '\xC8', '\xC9', '\a', '\x33', '\x2', '\x2', '\xC9', - '\xCA', '\a', '#', '\x2', '\x2', '\xCA', '\xCB', '\x5', '\"', '\x12', - '\x2', '\xCB', '!', '\x3', '\x2', '\x2', '\x2', '\xCC', '\xD1', '\x5', - '$', '\x13', '\x2', '\xCD', '\xCE', '\a', '\x4', '\x2', '\x2', '\xCE', - '\xD0', '\x5', '$', '\x13', '\x2', '\xCF', '\xCD', '\x3', '\x2', '\x2', - '\x2', '\xD0', '\xD3', '\x3', '\x2', '\x2', '\x2', '\xD1', '\xCF', '\x3', - '\x2', '\x2', '\x2', '\xD1', '\xD2', '\x3', '\x2', '\x2', '\x2', '\xD2', - '#', '\x3', '\x2', '\x2', '\x2', '\xD3', '\xD1', '\x3', '\x2', '\x2', - '\x2', '\xD4', '\xD6', '\x5', '.', '\x18', '\x2', '\xD5', '\xD7', '\x5', - '&', '\x14', '\x2', '\xD6', '\xD5', '\x3', '\x2', '\x2', '\x2', '\xD6', - '\xD7', '\x3', '\x2', '\x2', '\x2', '\xD7', '%', '\x3', '\x2', '\x2', - '\x2', '\xD8', '\xD9', '\t', '\x3', '\x2', '\x2', '\xD9', '\'', '\x3', - '\x2', '\x2', '\x2', '\xDA', '\xDB', '\a', '\x31', '\x2', '\x2', '\xDB', - '\xDC', '\x5', '*', '\x16', '\x2', '\xDC', '\xDD', '\a', '.', '\x2', '\x2', - '\xDD', '\xDE', '\x5', ',', '\x17', '\x2', '\xDE', ')', '\x3', '\x2', - '\x2', '\x2', '\xDF', '\xE0', '\t', '\x2', '\x2', '\x2', '\xE0', '+', - '\x3', '\x2', '\x2', '\x2', '\xE1', '\xE2', '\t', '\x2', '\x2', '\x2', - '\xE2', '-', '\x3', '\x2', '\x2', '\x2', '\xE3', '\xE4', '\b', '\x18', - '\x1', '\x2', '\xE4', '\xEF', '\x5', '\x30', '\x19', '\x2', '\xE5', '\xE7', - '\x5', '\x38', '\x1D', '\x2', '\xE6', '\xE8', '\a', '/', '\x2', '\x2', - '\xE7', '\xE6', '\x3', '\x2', '\x2', '\x2', '\xE7', '\xE8', '\x3', '\x2', - '\x2', '\x2', '\xE8', '\xE9', '\x3', '\x2', '\x2', '\x2', '\xE9', '\xEA', - '\a', '\"', '\x2', '\x2', '\xEA', '\xEB', '\x5', '\x38', '\x1D', '\x2', - '\xEB', '\xEC', '\a', '\x1E', '\x2', '\x2', '\xEC', '\xED', '\x5', '\x38', - '\x1D', '\x2', '\xED', '\xEF', '\x3', '\x2', '\x2', '\x2', '\xEE', '\xE3', - '\x3', '\x2', '\x2', '\x2', '\xEE', '\xE5', '\x3', '\x2', '\x2', '\x2', - '\xEF', '\xFB', '\x3', '\x2', '\x2', '\x2', '\xF0', '\xF1', '\f', '\x6', - '\x2', '\x2', '\xF1', '\xF2', '\a', '\n', '\x2', '\x2', '\xF2', '\xF3', - '\x5', '.', '\x18', '\x2', '\xF3', '\xF4', '\a', '\v', '\x2', '\x2', '\xF4', - '\xF5', '\x5', '.', '\x18', '\a', '\xF5', '\xFA', '\x3', '\x2', '\x2', - '\x2', '\xF6', '\xF7', '\f', '\x5', '\x2', '\x2', '\xF7', '\xF8', '\a', - '\f', '\x2', '\x2', '\xF8', '\xFA', '\x5', '.', '\x18', '\x6', '\xF9', - '\xF0', '\x3', '\x2', '\x2', '\x2', '\xF9', '\xF6', '\x3', '\x2', '\x2', - '\x2', '\xFA', '\xFD', '\x3', '\x2', '\x2', '\x2', '\xFB', '\xF9', '\x3', - '\x2', '\x2', '\x2', '\xFB', '\xFC', '\x3', '\x2', '\x2', '\x2', '\xFC', - '/', '\x3', '\x2', '\x2', '\x2', '\xFD', '\xFB', '\x3', '\x2', '\x2', - '\x2', '\xFE', '\xFF', '\b', '\x19', '\x1', '\x2', '\xFF', '\x103', '\x5', - '\x38', '\x1D', '\x2', '\x100', '\x103', '\x5', '\x32', '\x1A', '\x2', - '\x101', '\x103', '\x5', '\x34', '\x1B', '\x2', '\x102', '\xFE', '\x3', - '\x2', '\x2', '\x2', '\x102', '\x100', '\x3', '\x2', '\x2', '\x2', '\x102', - '\x101', '\x3', '\x2', '\x2', '\x2', '\x103', '\x10C', '\x3', '\x2', '\x2', - '\x2', '\x104', '\x105', '\f', '\x4', '\x2', '\x2', '\x105', '\x106', - '\a', '\x1E', '\x2', '\x2', '\x106', '\x10B', '\x5', '\x30', '\x19', '\x5', - '\x107', '\x108', '\f', '\x3', '\x2', '\x2', '\x108', '\x109', '\a', '\x32', - '\x2', '\x2', '\x109', '\x10B', '\x5', '\x30', '\x19', '\x4', '\x10A', - '\x104', '\x3', '\x2', '\x2', '\x2', '\x10A', '\x107', '\x3', '\x2', '\x2', - '\x2', '\x10B', '\x10E', '\x3', '\x2', '\x2', '\x2', '\x10C', '\x10A', - '\x3', '\x2', '\x2', '\x2', '\x10C', '\x10D', '\x3', '\x2', '\x2', '\x2', - '\x10D', '\x31', '\x3', '\x2', '\x2', '\x2', '\x10E', '\x10C', '\x3', - '\x2', '\x2', '\x2', '\x10F', '\x111', '\x5', '\x38', '\x1D', '\x2', '\x110', - '\x112', '\a', '/', '\x2', '\x2', '\x111', '\x110', '\x3', '\x2', '\x2', - '\x2', '\x111', '\x112', '\x3', '\x2', '\x2', '\x2', '\x112', '\x113', - '\x3', '\x2', '\x2', '\x2', '\x113', '\x114', '\a', '+', '\x2', '\x2', - '\x114', '\x115', '\a', '\x5', '\x2', '\x2', '\x115', '\x116', '\x5', - 'P', ')', '\x2', '\x116', '\x117', '\a', '\x6', '\x2', '\x2', '\x117', - '\x33', '\x3', '\x2', '\x2', '\x2', '\x118', '\x11A', '\x5', '\x38', '\x1D', - '\x2', '\x119', '\x11B', '\a', '/', '\x2', '\x2', '\x11A', '\x119', '\x3', - '\x2', '\x2', '\x2', '\x11A', '\x11B', '\x3', '\x2', '\x2', '\x2', '\x11B', - '\x11C', '\x3', '\x2', '\x2', '\x2', '\x11C', '\x11D', '\a', '-', '\x2', - '\x2', '\x11D', '\x11F', '\x5', '\x38', '\x1D', '\x2', '\x11E', '\x120', - '\x5', '\x36', '\x1C', '\x2', '\x11F', '\x11E', '\x3', '\x2', '\x2', '\x2', - '\x11F', '\x120', '\x3', '\x2', '\x2', '\x2', '\x120', '\x35', '\x3', - '\x2', '\x2', '\x2', '\x121', '\x122', '\a', '&', '\x2', '\x2', '\x122', - '\x123', '\a', '=', '\x2', '\x2', '\x123', '\x37', '\x3', '\x2', '\x2', - '\x2', '\x124', '\x125', '\b', '\x1D', '\x1', '\x2', '\x125', '\x126', - '\x5', 'J', '&', '\x2', '\x126', '\x149', '\x3', '\x2', '\x2', '\x2', - '\x127', '\x128', '\f', '\n', '\x2', '\x2', '\x128', '\x129', '\x5', ':', - '\x1E', '\x2', '\x129', '\x12A', '\x5', '\x38', '\x1D', '\v', '\x12A', - '\x148', '\x3', '\x2', '\x2', '\x2', '\x12B', '\x12C', '\f', '\t', '\x2', - '\x2', '\x12C', '\x12D', '\x5', '<', '\x1F', '\x2', '\x12D', '\x12E', - '\x5', '\x38', '\x1D', '\n', '\x12E', '\x148', '\x3', '\x2', '\x2', '\x2', - '\x12F', '\x130', '\f', '\b', '\x2', '\x2', '\x130', '\x131', '\x5', '>', - ' ', '\x2', '\x131', '\x132', '\x5', '\x38', '\x1D', '\t', '\x132', '\x148', - '\x3', '\x2', '\x2', '\x2', '\x133', '\x134', '\f', '\a', '\x2', '\x2', - '\x134', '\x135', '\x5', '@', '!', '\x2', '\x135', '\x136', '\x5', '\x38', - '\x1D', '\b', '\x136', '\x148', '\x3', '\x2', '\x2', '\x2', '\x137', '\x138', - '\f', '\x6', '\x2', '\x2', '\x138', '\x139', '\x5', '\x42', '\"', '\x2', - '\x139', '\x13A', '\x5', '\x38', '\x1D', '\a', '\x13A', '\x148', '\x3', - '\x2', '\x2', '\x2', '\x13B', '\x13C', '\f', '\x5', '\x2', '\x2', '\x13C', - '\x13D', '\x5', '\x44', '#', '\x2', '\x13D', '\x13E', '\x5', '\x38', '\x1D', - '\x6', '\x13E', '\x148', '\x3', '\x2', '\x2', '\x2', '\x13F', '\x140', - '\f', '\x4', '\x2', '\x2', '\x140', '\x141', '\x5', '\x46', '$', '\x2', - '\x141', '\x142', '\x5', '\x38', '\x1D', '\x5', '\x142', '\x148', '\x3', - '\x2', '\x2', '\x2', '\x143', '\x144', '\f', '\x3', '\x2', '\x2', '\x144', - '\x145', '\x5', 'H', '%', '\x2', '\x145', '\x146', '\x5', '\x38', '\x1D', - '\x4', '\x146', '\x148', '\x3', '\x2', '\x2', '\x2', '\x147', '\x127', - '\x3', '\x2', '\x2', '\x2', '\x147', '\x12B', '\x3', '\x2', '\x2', '\x2', - '\x147', '\x12F', '\x3', '\x2', '\x2', '\x2', '\x147', '\x133', '\x3', - '\x2', '\x2', '\x2', '\x147', '\x137', '\x3', '\x2', '\x2', '\x2', '\x147', - '\x13B', '\x3', '\x2', '\x2', '\x2', '\x147', '\x13F', '\x3', '\x2', '\x2', - '\x2', '\x147', '\x143', '\x3', '\x2', '\x2', '\x2', '\x148', '\x14B', - '\x3', '\x2', '\x2', '\x2', '\x149', '\x147', '\x3', '\x2', '\x2', '\x2', - '\x149', '\x14A', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x39', '\x3', - '\x2', '\x2', '\x2', '\x14B', '\x149', '\x3', '\x2', '\x2', '\x2', '\x14C', - '\x14D', '\t', '\x4', '\x2', '\x2', '\x14D', ';', '\x3', '\x2', '\x2', - '\x2', '\x14E', '\x14F', '\t', '\x5', '\x2', '\x2', '\x14F', '=', '\x3', - '\x2', '\x2', '\x2', '\x150', '\x151', '\t', '\x6', '\x2', '\x2', '\x151', - '?', '\x3', '\x2', '\x2', '\x2', '\x152', '\x153', '\t', '\a', '\x2', - '\x2', '\x153', '\x41', '\x3', '\x2', '\x2', '\x2', '\x154', '\x155', - '\a', '\x17', '\x2', '\x2', '\x155', '\x43', '\x3', '\x2', '\x2', '\x2', - '\x156', '\x157', '\a', '\x18', '\x2', '\x2', '\x157', '\x45', '\x3', - '\x2', '\x2', '\x2', '\x158', '\x159', '\a', '\x19', '\x2', '\x2', '\x159', - 'G', '\x3', '\x2', '\x2', '\x2', '\x15A', '\x15B', '\a', '\x1A', '\x2', - '\x2', '\x15B', 'I', '\x3', '\x2', '\x2', '\x2', '\x15C', '\x161', '\x5', - 'N', '(', '\x2', '\x15D', '\x15E', '\x5', 'L', '\'', '\x2', '\x15E', '\x15F', - '\x5', 'J', '&', '\x2', '\x15F', '\x161', '\x3', '\x2', '\x2', '\x2', - '\x160', '\x15C', '\x3', '\x2', '\x2', '\x2', '\x160', '\x15D', '\x3', - '\x2', '\x2', '\x2', '\x161', 'K', '\x3', '\x2', '\x2', '\x2', '\x162', - '\x163', '\t', '\b', '\x2', '\x2', '\x163', 'M', '\x3', '\x2', '\x2', - '\x2', '\x164', '\x165', '\b', '(', '\x1', '\x2', '\x165', '\x18F', '\a', - '>', '\x2', '\x2', '\x166', '\x18F', '\a', '?', '\x2', '\x2', '\x167', - '\x18F', '\x5', 'V', ',', '\x2', '\x168', '\x16A', '\a', '\b', '\x2', - '\x2', '\x169', '\x16B', '\x5', 'P', ')', '\x2', '\x16A', '\x169', '\x3', - '\x2', '\x2', '\x2', '\x16A', '\x16B', '\x3', '\x2', '\x2', '\x2', '\x16B', - '\x16C', '\x3', '\x2', '\x2', '\x2', '\x16C', '\x18F', '\a', '\t', '\x2', - '\x2', '\x16D', '\x16F', '\a', '\x1C', '\x2', '\x2', '\x16E', '\x170', - '\x5', 'R', '*', '\x2', '\x16F', '\x16E', '\x3', '\x2', '\x2', '\x2', - '\x16F', '\x170', '\x3', '\x2', '\x2', '\x2', '\x170', '\x171', '\x3', - '\x2', '\x2', '\x2', '\x171', '\x18F', '\a', '\x1D', '\x2', '\x2', '\x172', - '\x173', '\a', '\x37', '\x2', '\x2', '\x173', '\x175', '\a', '\a', '\x2', - '\x2', '\x174', '\x172', '\x3', '\x2', '\x2', '\x2', '\x174', '\x175', - '\x3', '\x2', '\x2', '\x2', '\x175', '\x176', '\x3', '\x2', '\x2', '\x2', - '\x176', '\x177', '\a', '>', '\x2', '\x2', '\x177', '\x179', '\a', '\x5', - '\x2', '\x2', '\x178', '\x17A', '\x5', 'P', ')', '\x2', '\x179', '\x178', - '\x3', '\x2', '\x2', '\x2', '\x179', '\x17A', '\x3', '\x2', '\x2', '\x2', - '\x17A', '\x17B', '\x3', '\x2', '\x2', '\x2', '\x17B', '\x18F', '\a', - '\x6', '\x2', '\x2', '\x17C', '\x17D', '\a', '\x5', '\x2', '\x2', '\x17D', - '\x17E', '\x5', '.', '\x18', '\x2', '\x17E', '\x17F', '\a', '\x6', '\x2', - '\x2', '\x17F', '\x18F', '\x3', '\x2', '\x2', '\x2', '\x180', '\x181', - '\a', '\x5', '\x2', '\x2', '\x181', '\x182', '\x5', '\x4', '\x3', '\x2', - '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', '\x18F', '\x3', - '\x2', '\x2', '\x2', '\x184', '\x185', '\a', '\'', '\x2', '\x2', '\x185', - '\x186', '\a', '\x5', '\x2', '\x2', '\x186', '\x187', '\x5', '\x4', '\x3', - '\x2', '\x187', '\x188', '\a', '\x6', '\x2', '\x2', '\x188', '\x18F', - '\x3', '\x2', '\x2', '\x2', '\x189', '\x18A', '\a', '\x1F', '\x2', '\x2', - '\x18A', '\x18B', '\a', '\x5', '\x2', '\x2', '\x18B', '\x18C', '\x5', - '\x4', '\x3', '\x2', '\x18C', '\x18D', '\a', '\x6', '\x2', '\x2', '\x18D', - '\x18F', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x164', '\x3', '\x2', '\x2', - '\x2', '\x18E', '\x166', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x167', - '\x3', '\x2', '\x2', '\x2', '\x18E', '\x168', '\x3', '\x2', '\x2', '\x2', - '\x18E', '\x16D', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x174', '\x3', - '\x2', '\x2', '\x2', '\x18E', '\x17C', '\x3', '\x2', '\x2', '\x2', '\x18E', - '\x180', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x184', '\x3', '\x2', '\x2', - '\x2', '\x18E', '\x189', '\x3', '\x2', '\x2', '\x2', '\x18F', '\x19A', - '\x3', '\x2', '\x2', '\x2', '\x190', '\x191', '\f', '\x6', '\x2', '\x2', - '\x191', '\x192', '\a', '\a', '\x2', '\x2', '\x192', '\x199', '\a', '>', - '\x2', '\x2', '\x193', '\x194', '\f', '\x5', '\x2', '\x2', '\x194', '\x195', - '\a', '\b', '\x2', '\x2', '\x195', '\x196', '\x5', '.', '\x18', '\x2', - '\x196', '\x197', '\a', '\t', '\x2', '\x2', '\x197', '\x199', '\x3', '\x2', - '\x2', '\x2', '\x198', '\x190', '\x3', '\x2', '\x2', '\x2', '\x198', '\x193', - '\x3', '\x2', '\x2', '\x2', '\x199', '\x19C', '\x3', '\x2', '\x2', '\x2', - '\x19A', '\x198', '\x3', '\x2', '\x2', '\x2', '\x19A', '\x19B', '\x3', - '\x2', '\x2', '\x2', '\x19B', 'O', '\x3', '\x2', '\x2', '\x2', '\x19C', - '\x19A', '\x3', '\x2', '\x2', '\x2', '\x19D', '\x1A2', '\x5', '.', '\x18', - '\x2', '\x19E', '\x19F', '\a', '\x4', '\x2', '\x2', '\x19F', '\x1A1', - '\x5', '.', '\x18', '\x2', '\x1A0', '\x19E', '\x3', '\x2', '\x2', '\x2', - '\x1A1', '\x1A4', '\x3', '\x2', '\x2', '\x2', '\x1A2', '\x1A0', '\x3', - '\x2', '\x2', '\x2', '\x1A2', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x1A3', - 'Q', '\x3', '\x2', '\x2', '\x2', '\x1A4', '\x1A2', '\x3', '\x2', '\x2', - '\x2', '\x1A5', '\x1AA', '\x5', 'T', '+', '\x2', '\x1A6', '\x1A7', '\a', - '\x4', '\x2', '\x2', '\x1A7', '\x1A9', '\x5', 'T', '+', '\x2', '\x1A8', - '\x1A6', '\x3', '\x2', '\x2', '\x2', '\x1A9', '\x1AC', '\x3', '\x2', '\x2', - '\x2', '\x1AA', '\x1A8', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1AB', - '\x3', '\x2', '\x2', '\x2', '\x1AB', 'S', '\x3', '\x2', '\x2', '\x2', - '\x1AC', '\x1AA', '\x3', '\x2', '\x2', '\x2', '\x1AD', '\x1AE', '\a', - '=', '\x2', '\x2', '\x1AE', '\x1AF', '\a', '\v', '\x2', '\x2', '\x1AF', - '\x1B0', '\x5', '.', '\x18', '\x2', '\x1B0', 'U', '\x3', '\x2', '\x2', - '\x2', '\x1B1', '\x1B2', '\t', '\t', '\x2', '\x2', '\x1B2', 'W', '\x3', - '\x2', '\x2', '\x2', ',', ']', '`', '\x63', '\x66', 'i', 'm', 'p', 'z', - '\x86', '\x8C', '\x94', '\x97', '\x9C', '\xA3', '\xA8', '\xAE', '\xBC', - '\xBE', '\xD1', '\xD6', '\xE7', '\xEE', '\xF9', '\xFB', '\x102', '\x10A', - '\x10C', '\x111', '\x11A', '\x11F', '\x147', '\x149', '\x160', '\x16A', - '\x16F', '\x174', '\x179', '\x18E', '\x198', '\x19A', '\x1A2', '\x1AA', + '\x42', '\x44', '\x46', 'H', 'J', 'L', 'N', 'P', 'R', 'T', 'V', 'X', 'Z', + '\x2', '\v', '\x4', '\x2', '?', '?', '\x42', '\x42', '\x4', '\x2', '\"', + '\"', '%', '%', '\x4', '\x2', '\x3', '\x3', '\r', '\xE', '\x3', '\x2', + '\xF', '\x10', '\x3', '\x2', '\x11', '\x14', '\x3', '\x2', '\x15', '\x16', + '\x5', '\x2', '\xF', '\x10', '\x1B', '\x1B', '\x31', '\x31', '\x4', '\x2', + '\x1E', '\x1E', '\x41', '\x41', '\a', '\x2', ')', ')', '\x32', '\x32', + '\x39', '\x39', ';', ';', '?', '@', '\x2', '\x1E2', '\x2', '\\', '\x3', + '\x2', '\x2', '\x2', '\x4', '_', '\x3', '\x2', '\x2', '\x2', '\x6', 'o', + '\x3', '\x2', '\x2', '\x2', '\b', 'x', '\x3', '\x2', '\x2', '\x2', '\n', + '~', '\x3', '\x2', '\x2', '\x2', '\f', '\x80', '\x3', '\x2', '\x2', '\x2', + '\xE', '\x82', '\x3', '\x2', '\x2', '\x2', '\x10', '\x85', '\x3', '\x2', + '\x2', '\x2', '\x12', '\x8D', '\x3', '\x2', '\x2', '\x2', '\x14', '\x92', + '\x3', '\x2', '\x2', '\x2', '\x16', '\xA1', '\x3', '\x2', '\x2', '\x2', + '\x18', '\xB3', '\x3', '\x2', '\x2', '\x2', '\x1A', '\xB5', '\x3', '\x2', + '\x2', '\x2', '\x1C', '\xC6', '\x3', '\x2', '\x2', '\x2', '\x1E', '\xC9', + '\x3', '\x2', '\x2', '\x2', ' ', '\xCD', '\x3', '\x2', '\x2', '\x2', '\"', + '\xD1', '\x3', '\x2', '\x2', '\x2', '$', '\xD9', '\x3', '\x2', '\x2', + '\x2', '&', '\xDD', '\x3', '\x2', '\x2', '\x2', '(', '\xDF', '\x3', '\x2', + '\x2', '\x2', '*', '\xE4', '\x3', '\x2', '\x2', '\x2', ',', '\xE6', '\x3', + '\x2', '\x2', '\x2', '.', '\xF3', '\x3', '\x2', '\x2', '\x2', '\x30', + '\x107', '\x3', '\x2', '\x2', '\x2', '\x32', '\x114', '\x3', '\x2', '\x2', + '\x2', '\x34', '\x11D', '\x3', '\x2', '\x2', '\x2', '\x36', '\x126', '\x3', + '\x2', '\x2', '\x2', '\x38', '\x129', '\x3', '\x2', '\x2', '\x2', ':', + '\x151', '\x3', '\x2', '\x2', '\x2', '<', '\x153', '\x3', '\x2', '\x2', + '\x2', '>', '\x155', '\x3', '\x2', '\x2', '\x2', '@', '\x157', '\x3', + '\x2', '\x2', '\x2', '\x42', '\x159', '\x3', '\x2', '\x2', '\x2', '\x44', + '\x15B', '\x3', '\x2', '\x2', '\x2', '\x46', '\x15D', '\x3', '\x2', '\x2', + '\x2', 'H', '\x15F', '\x3', '\x2', '\x2', '\x2', 'J', '\x165', '\x3', + '\x2', '\x2', '\x2', 'L', '\x167', '\x3', '\x2', '\x2', '\x2', 'N', '\x18F', + '\x3', '\x2', '\x2', '\x2', 'P', '\x1B5', '\x3', '\x2', '\x2', '\x2', + 'R', '\x1B7', '\x3', '\x2', '\x2', '\x2', 'T', '\x1BF', '\x3', '\x2', + '\x2', '\x2', 'V', '\x1C7', '\x3', '\x2', '\x2', '\x2', 'X', '\x1CB', + '\x3', '\x2', '\x2', '\x2', 'Z', '\x1CD', '\x3', '\x2', '\x2', '\x2', + '\\', ']', '\x5', '\x4', '\x3', '\x2', ']', '^', '\a', '\x2', '\x2', '\x3', + '^', '\x3', '\x3', '\x2', '\x2', '\x2', '_', '\x61', '\x5', '\x6', '\x4', + '\x2', '`', '\x62', '\x5', '\x14', '\v', '\x2', '\x61', '`', '\x3', '\x2', + '\x2', '\x2', '\x61', '\x62', '\x3', '\x2', '\x2', '\x2', '\x62', '\x64', + '\x3', '\x2', '\x2', '\x2', '\x63', '\x65', '\x5', '\x1C', '\xF', '\x2', + '\x64', '\x63', '\x3', '\x2', '\x2', '\x2', '\x64', '\x65', '\x3', '\x2', + '\x2', '\x2', '\x65', 'g', '\x3', '\x2', '\x2', '\x2', '\x66', 'h', '\x5', + '\x1E', '\x10', '\x2', 'g', '\x66', '\x3', '\x2', '\x2', '\x2', 'g', 'h', + '\x3', '\x2', '\x2', '\x2', 'h', 'j', '\x3', '\x2', '\x2', '\x2', 'i', + 'k', '\x5', ' ', '\x11', '\x2', 'j', 'i', '\x3', '\x2', '\x2', '\x2', + 'j', 'k', '\x3', '\x2', '\x2', '\x2', 'k', 'm', '\x3', '\x2', '\x2', '\x2', + 'l', 'n', '\x5', '(', '\x15', '\x2', 'm', 'l', '\x3', '\x2', '\x2', '\x2', + 'm', 'n', '\x3', '\x2', '\x2', '\x2', 'n', '\x5', '\x3', '\x2', '\x2', + '\x2', 'o', 'q', '\a', '\x37', '\x2', '\x2', 'p', 'r', '\a', '&', '\x2', + '\x2', 'q', 'p', '\x3', '\x2', '\x2', '\x2', 'q', 'r', '\x3', '\x2', '\x2', + '\x2', 'r', 't', '\x3', '\x2', '\x2', '\x2', 's', 'u', '\x5', '\b', '\x5', + '\x2', 't', 's', '\x3', '\x2', '\x2', '\x2', 't', 'u', '\x3', '\x2', '\x2', + '\x2', 'u', 'v', '\x3', '\x2', '\x2', '\x2', 'v', 'w', '\x5', '\n', '\x6', + '\x2', 'w', '\a', '\x3', '\x2', '\x2', '\x2', 'x', 'y', '\a', '\x38', + '\x2', '\x2', 'y', 'z', '\t', '\x2', '\x2', '\x2', 'z', '\t', '\x3', '\x2', + '\x2', '\x2', '{', '\x7F', '\x5', '\f', '\a', '\x2', '|', '\x7F', '\x5', + '\xE', '\b', '\x2', '}', '\x7F', '\x5', '\x10', '\t', '\x2', '~', '{', + '\x3', '\x2', '\x2', '\x2', '~', '|', '\x3', '\x2', '\x2', '\x2', '~', + '}', '\x3', '\x2', '\x2', '\x2', '\x7F', '\v', '\x3', '\x2', '\x2', '\x2', + '\x80', '\x81', '\a', '\x3', '\x2', '\x2', '\x81', '\r', '\x3', '\x2', + '\x2', '\x2', '\x82', '\x83', '\a', '<', '\x2', '\x2', '\x83', '\x84', + '\x5', '.', '\x18', '\x2', '\x84', '\xF', '\x3', '\x2', '\x2', '\x2', + '\x85', '\x8A', '\x5', '\x12', '\n', '\x2', '\x86', '\x87', '\a', '\x4', + '\x2', '\x2', '\x87', '\x89', '\x5', '\x12', '\n', '\x2', '\x88', '\x86', + '\x3', '\x2', '\x2', '\x2', '\x89', '\x8C', '\x3', '\x2', '\x2', '\x2', + '\x8A', '\x88', '\x3', '\x2', '\x2', '\x2', '\x8A', '\x8B', '\x3', '\x2', + '\x2', '\x2', '\x8B', '\x11', '\x3', '\x2', '\x2', '\x2', '\x8C', '\x8A', + '\x3', '\x2', '\x2', '\x2', '\x8D', '\x90', '\x5', '.', '\x18', '\x2', + '\x8E', '\x8F', '\a', '!', '\x2', '\x2', '\x8F', '\x91', '\x5', 'X', '-', + '\x2', '\x90', '\x8E', '\x3', '\x2', '\x2', '\x2', '\x90', '\x91', '\x3', + '\x2', '\x2', '\x2', '\x91', '\x13', '\x3', '\x2', '\x2', '\x2', '\x92', + '\x93', '\a', '*', '\x2', '\x2', '\x93', '\x94', '\x5', '\x16', '\f', + '\x2', '\x94', '\x15', '\x3', '\x2', '\x2', '\x2', '\x95', '\x96', '\b', + '\f', '\x1', '\x2', '\x96', '\x9B', '\x5', '\x18', '\r', '\x2', '\x97', + '\x99', '\a', '!', '\x2', '\x2', '\x98', '\x97', '\x3', '\x2', '\x2', + '\x2', '\x98', '\x99', '\x3', '\x2', '\x2', '\x2', '\x99', '\x9A', '\x3', + '\x2', '\x2', '\x2', '\x9A', '\x9C', '\x5', 'X', '-', '\x2', '\x9B', '\x98', + '\x3', '\x2', '\x2', '\x2', '\x9B', '\x9C', '\x3', '\x2', '\x2', '\x2', + '\x9C', '\xA2', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x9E', '\x5', 'X', + '-', '\x2', '\x9E', '\x9F', '\a', ',', '\x2', '\x2', '\x9F', '\xA0', '\x5', + '\x18', '\r', '\x2', '\xA0', '\xA2', '\x3', '\x2', '\x2', '\x2', '\xA1', + '\x95', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x9D', '\x3', '\x2', '\x2', + '\x2', '\xA2', '\xA8', '\x3', '\x2', '\x2', '\x2', '\xA3', '\xA4', '\f', + '\x3', '\x2', '\x2', '\xA4', '\xA5', '\a', '-', '\x2', '\x2', '\xA5', + '\xA7', '\x5', '\x16', '\f', '\x4', '\xA6', '\xA3', '\x3', '\x2', '\x2', + '\x2', '\xA7', '\xAA', '\x3', '\x2', '\x2', '\x2', '\xA8', '\xA6', '\x3', + '\x2', '\x2', '\x2', '\xA8', '\xA9', '\x3', '\x2', '\x2', '\x2', '\xA9', + '\x17', '\x3', '\x2', '\x2', '\x2', '\xAA', '\xA8', '\x3', '\x2', '\x2', + '\x2', '\xAB', '\xAD', '\x5', 'X', '-', '\x2', '\xAC', '\xAE', '\x5', + '\x1A', '\xE', '\x2', '\xAD', '\xAC', '\x3', '\x2', '\x2', '\x2', '\xAD', + '\xAE', '\x3', '\x2', '\x2', '\x2', '\xAE', '\xB4', '\x3', '\x2', '\x2', + '\x2', '\xAF', '\xB0', '\a', '\x5', '\x2', '\x2', '\xB0', '\xB1', '\x5', + '\x4', '\x3', '\x2', '\xB1', '\xB2', '\a', '\x6', '\x2', '\x2', '\xB2', + '\xB4', '\x3', '\x2', '\x2', '\x2', '\xB3', '\xAB', '\x3', '\x2', '\x2', + '\x2', '\xB3', '\xAF', '\x3', '\x2', '\x2', '\x2', '\xB4', '\x19', '\x3', + '\x2', '\x2', '\x2', '\xB5', '\xC3', '\b', '\xE', '\x1', '\x2', '\xB6', + '\xB7', '\f', '\x6', '\x2', '\x2', '\xB7', '\xB8', '\a', '\a', '\x2', + '\x2', '\xB8', '\xC2', '\x5', 'X', '-', '\x2', '\xB9', '\xBA', '\f', '\x5', + '\x2', '\x2', '\xBA', '\xBB', '\a', '\b', '\x2', '\x2', '\xBB', '\xBC', + '\a', '?', '\x2', '\x2', '\xBC', '\xC2', '\a', '\t', '\x2', '\x2', '\xBD', + '\xBE', '\f', '\x4', '\x2', '\x2', '\xBE', '\xBF', '\a', '\b', '\x2', + '\x2', '\xBF', '\xC0', '\a', '@', '\x2', '\x2', '\xC0', '\xC2', '\a', + '\t', '\x2', '\x2', '\xC1', '\xB6', '\x3', '\x2', '\x2', '\x2', '\xC1', + '\xB9', '\x3', '\x2', '\x2', '\x2', '\xC1', '\xBD', '\x3', '\x2', '\x2', + '\x2', '\xC2', '\xC5', '\x3', '\x2', '\x2', '\x2', '\xC3', '\xC1', '\x3', + '\x2', '\x2', '\x2', '\xC3', '\xC4', '\x3', '\x2', '\x2', '\x2', '\xC4', + '\x1B', '\x3', '\x2', '\x2', '\x2', '\xC5', '\xC3', '\x3', '\x2', '\x2', + '\x2', '\xC6', '\xC7', '\a', '=', '\x2', '\x2', '\xC7', '\xC8', '\x5', + '.', '\x18', '\x2', '\xC8', '\x1D', '\x3', '\x2', '\x2', '\x2', '\xC9', + '\xCA', '\a', '+', '\x2', '\x2', '\xCA', '\xCB', '\a', '$', '\x2', '\x2', + '\xCB', '\xCC', '\x5', 'R', '*', '\x2', '\xCC', '\x1F', '\x3', '\x2', + '\x2', '\x2', '\xCD', '\xCE', '\a', '\x35', '\x2', '\x2', '\xCE', '\xCF', + '\a', '$', '\x2', '\x2', '\xCF', '\xD0', '\x5', '\"', '\x12', '\x2', '\xD0', + '!', '\x3', '\x2', '\x2', '\x2', '\xD1', '\xD6', '\x5', '$', '\x13', '\x2', + '\xD2', '\xD3', '\a', '\x4', '\x2', '\x2', '\xD3', '\xD5', '\x5', '$', + '\x13', '\x2', '\xD4', '\xD2', '\x3', '\x2', '\x2', '\x2', '\xD5', '\xD8', + '\x3', '\x2', '\x2', '\x2', '\xD6', '\xD4', '\x3', '\x2', '\x2', '\x2', + '\xD6', '\xD7', '\x3', '\x2', '\x2', '\x2', '\xD7', '#', '\x3', '\x2', + '\x2', '\x2', '\xD8', '\xD6', '\x3', '\x2', '\x2', '\x2', '\xD9', '\xDB', + '\x5', '.', '\x18', '\x2', '\xDA', '\xDC', '\x5', '&', '\x14', '\x2', + '\xDB', '\xDA', '\x3', '\x2', '\x2', '\x2', '\xDB', '\xDC', '\x3', '\x2', + '\x2', '\x2', '\xDC', '%', '\x3', '\x2', '\x2', '\x2', '\xDD', '\xDE', + '\t', '\x3', '\x2', '\x2', '\xDE', '\'', '\x3', '\x2', '\x2', '\x2', '\xDF', + '\xE0', '\a', '\x33', '\x2', '\x2', '\xE0', '\xE1', '\x5', '*', '\x16', + '\x2', '\xE1', '\xE2', '\a', '\x30', '\x2', '\x2', '\xE2', '\xE3', '\x5', + ',', '\x17', '\x2', '\xE3', ')', '\x3', '\x2', '\x2', '\x2', '\xE4', '\xE5', + '\t', '\x2', '\x2', '\x2', '\xE5', '+', '\x3', '\x2', '\x2', '\x2', '\xE6', + '\xE7', '\t', '\x2', '\x2', '\x2', '\xE7', '-', '\x3', '\x2', '\x2', '\x2', + '\xE8', '\xE9', '\b', '\x18', '\x1', '\x2', '\xE9', '\xF4', '\x5', '\x30', + '\x19', '\x2', '\xEA', '\xEC', '\x5', '\x38', '\x1D', '\x2', '\xEB', '\xED', + '\a', '\x31', '\x2', '\x2', '\xEC', '\xEB', '\x3', '\x2', '\x2', '\x2', + '\xEC', '\xED', '\x3', '\x2', '\x2', '\x2', '\xED', '\xEE', '\x3', '\x2', + '\x2', '\x2', '\xEE', '\xEF', '\a', '#', '\x2', '\x2', '\xEF', '\xF0', + '\x5', '\x38', '\x1D', '\x2', '\xF0', '\xF1', '\a', '\x1F', '\x2', '\x2', + '\xF1', '\xF2', '\x5', '\x38', '\x1D', '\x2', '\xF2', '\xF4', '\x3', '\x2', + '\x2', '\x2', '\xF3', '\xE8', '\x3', '\x2', '\x2', '\x2', '\xF3', '\xEA', + '\x3', '\x2', '\x2', '\x2', '\xF4', '\x100', '\x3', '\x2', '\x2', '\x2', + '\xF5', '\xF6', '\f', '\x6', '\x2', '\x2', '\xF6', '\xF7', '\a', '\n', + '\x2', '\x2', '\xF7', '\xF8', '\x5', '.', '\x18', '\x2', '\xF8', '\xF9', + '\a', '\v', '\x2', '\x2', '\xF9', '\xFA', '\x5', '.', '\x18', '\a', '\xFA', + '\xFF', '\x3', '\x2', '\x2', '\x2', '\xFB', '\xFC', '\f', '\x5', '\x2', + '\x2', '\xFC', '\xFD', '\a', '\f', '\x2', '\x2', '\xFD', '\xFF', '\x5', + '.', '\x18', '\x6', '\xFE', '\xF5', '\x3', '\x2', '\x2', '\x2', '\xFE', + '\xFB', '\x3', '\x2', '\x2', '\x2', '\xFF', '\x102', '\x3', '\x2', '\x2', + '\x2', '\x100', '\xFE', '\x3', '\x2', '\x2', '\x2', '\x100', '\x101', + '\x3', '\x2', '\x2', '\x2', '\x101', '/', '\x3', '\x2', '\x2', '\x2', + '\x102', '\x100', '\x3', '\x2', '\x2', '\x2', '\x103', '\x104', '\b', + '\x19', '\x1', '\x2', '\x104', '\x108', '\x5', '\x38', '\x1D', '\x2', + '\x105', '\x108', '\x5', '\x32', '\x1A', '\x2', '\x106', '\x108', '\x5', + '\x34', '\x1B', '\x2', '\x107', '\x103', '\x3', '\x2', '\x2', '\x2', '\x107', + '\x105', '\x3', '\x2', '\x2', '\x2', '\x107', '\x106', '\x3', '\x2', '\x2', + '\x2', '\x108', '\x111', '\x3', '\x2', '\x2', '\x2', '\x109', '\x10A', + '\f', '\x4', '\x2', '\x2', '\x10A', '\x10B', '\a', '\x1F', '\x2', '\x2', + '\x10B', '\x110', '\x5', '\x30', '\x19', '\x5', '\x10C', '\x10D', '\f', + '\x3', '\x2', '\x2', '\x10D', '\x10E', '\a', '\x34', '\x2', '\x2', '\x10E', + '\x110', '\x5', '\x30', '\x19', '\x4', '\x10F', '\x109', '\x3', '\x2', + '\x2', '\x2', '\x10F', '\x10C', '\x3', '\x2', '\x2', '\x2', '\x110', '\x113', + '\x3', '\x2', '\x2', '\x2', '\x111', '\x10F', '\x3', '\x2', '\x2', '\x2', + '\x111', '\x112', '\x3', '\x2', '\x2', '\x2', '\x112', '\x31', '\x3', + '\x2', '\x2', '\x2', '\x113', '\x111', '\x3', '\x2', '\x2', '\x2', '\x114', + '\x116', '\x5', '\x38', '\x1D', '\x2', '\x115', '\x117', '\a', '\x31', + '\x2', '\x2', '\x116', '\x115', '\x3', '\x2', '\x2', '\x2', '\x116', '\x117', + '\x3', '\x2', '\x2', '\x2', '\x117', '\x118', '\x3', '\x2', '\x2', '\x2', + '\x118', '\x119', '\a', ',', '\x2', '\x2', '\x119', '\x11A', '\a', '\x5', + '\x2', '\x2', '\x11A', '\x11B', '\x5', 'R', '*', '\x2', '\x11B', '\x11C', + '\a', '\x6', '\x2', '\x2', '\x11C', '\x33', '\x3', '\x2', '\x2', '\x2', + '\x11D', '\x11F', '\x5', '\x38', '\x1D', '\x2', '\x11E', '\x120', '\a', + '\x31', '\x2', '\x2', '\x11F', '\x11E', '\x3', '\x2', '\x2', '\x2', '\x11F', + '\x120', '\x3', '\x2', '\x2', '\x2', '\x120', '\x121', '\x3', '\x2', '\x2', + '\x2', '\x121', '\x122', '\a', '/', '\x2', '\x2', '\x122', '\x124', '\x5', + '\x38', '\x1D', '\x2', '\x123', '\x125', '\x5', '\x36', '\x1C', '\x2', + '\x124', '\x123', '\x3', '\x2', '\x2', '\x2', '\x124', '\x125', '\x3', + '\x2', '\x2', '\x2', '\x125', '\x35', '\x3', '\x2', '\x2', '\x2', '\x126', + '\x127', '\a', '\'', '\x2', '\x2', '\x127', '\x128', '\a', '@', '\x2', + '\x2', '\x128', '\x37', '\x3', '\x2', '\x2', '\x2', '\x129', '\x12A', + '\b', '\x1D', '\x1', '\x2', '\x12A', '\x12B', '\x5', 'J', '&', '\x2', + '\x12B', '\x14E', '\x3', '\x2', '\x2', '\x2', '\x12C', '\x12D', '\f', + '\n', '\x2', '\x2', '\x12D', '\x12E', '\x5', ':', '\x1E', '\x2', '\x12E', + '\x12F', '\x5', '\x38', '\x1D', '\v', '\x12F', '\x14D', '\x3', '\x2', + '\x2', '\x2', '\x130', '\x131', '\f', '\t', '\x2', '\x2', '\x131', '\x132', + '\x5', '<', '\x1F', '\x2', '\x132', '\x133', '\x5', '\x38', '\x1D', '\n', + '\x133', '\x14D', '\x3', '\x2', '\x2', '\x2', '\x134', '\x135', '\f', + '\b', '\x2', '\x2', '\x135', '\x136', '\x5', '>', ' ', '\x2', '\x136', + '\x137', '\x5', '\x38', '\x1D', '\t', '\x137', '\x14D', '\x3', '\x2', + '\x2', '\x2', '\x138', '\x139', '\f', '\a', '\x2', '\x2', '\x139', '\x13A', + '\x5', '@', '!', '\x2', '\x13A', '\x13B', '\x5', '\x38', '\x1D', '\b', + '\x13B', '\x14D', '\x3', '\x2', '\x2', '\x2', '\x13C', '\x13D', '\f', + '\x6', '\x2', '\x2', '\x13D', '\x13E', '\x5', '\x42', '\"', '\x2', '\x13E', + '\x13F', '\x5', '\x38', '\x1D', '\a', '\x13F', '\x14D', '\x3', '\x2', + '\x2', '\x2', '\x140', '\x141', '\f', '\x5', '\x2', '\x2', '\x141', '\x142', + '\x5', '\x44', '#', '\x2', '\x142', '\x143', '\x5', '\x38', '\x1D', '\x6', + '\x143', '\x14D', '\x3', '\x2', '\x2', '\x2', '\x144', '\x145', '\f', + '\x4', '\x2', '\x2', '\x145', '\x146', '\x5', '\x46', '$', '\x2', '\x146', + '\x147', '\x5', '\x38', '\x1D', '\x5', '\x147', '\x14D', '\x3', '\x2', + '\x2', '\x2', '\x148', '\x149', '\f', '\x3', '\x2', '\x2', '\x149', '\x14A', + '\x5', 'H', '%', '\x2', '\x14A', '\x14B', '\x5', '\x38', '\x1D', '\x4', + '\x14B', '\x14D', '\x3', '\x2', '\x2', '\x2', '\x14C', '\x12C', '\x3', + '\x2', '\x2', '\x2', '\x14C', '\x130', '\x3', '\x2', '\x2', '\x2', '\x14C', + '\x134', '\x3', '\x2', '\x2', '\x2', '\x14C', '\x138', '\x3', '\x2', '\x2', + '\x2', '\x14C', '\x13C', '\x3', '\x2', '\x2', '\x2', '\x14C', '\x140', + '\x3', '\x2', '\x2', '\x2', '\x14C', '\x144', '\x3', '\x2', '\x2', '\x2', + '\x14C', '\x148', '\x3', '\x2', '\x2', '\x2', '\x14D', '\x150', '\x3', + '\x2', '\x2', '\x2', '\x14E', '\x14C', '\x3', '\x2', '\x2', '\x2', '\x14E', + '\x14F', '\x3', '\x2', '\x2', '\x2', '\x14F', '\x39', '\x3', '\x2', '\x2', + '\x2', '\x150', '\x14E', '\x3', '\x2', '\x2', '\x2', '\x151', '\x152', + '\t', '\x4', '\x2', '\x2', '\x152', ';', '\x3', '\x2', '\x2', '\x2', '\x153', + '\x154', '\t', '\x5', '\x2', '\x2', '\x154', '=', '\x3', '\x2', '\x2', + '\x2', '\x155', '\x156', '\t', '\x6', '\x2', '\x2', '\x156', '?', '\x3', + '\x2', '\x2', '\x2', '\x157', '\x158', '\t', '\a', '\x2', '\x2', '\x158', + '\x41', '\x3', '\x2', '\x2', '\x2', '\x159', '\x15A', '\a', '\x17', '\x2', + '\x2', '\x15A', '\x43', '\x3', '\x2', '\x2', '\x2', '\x15B', '\x15C', + '\a', '\x18', '\x2', '\x2', '\x15C', '\x45', '\x3', '\x2', '\x2', '\x2', + '\x15D', '\x15E', '\a', '\x19', '\x2', '\x2', '\x15E', 'G', '\x3', '\x2', + '\x2', '\x2', '\x15F', '\x160', '\a', '\x1A', '\x2', '\x2', '\x160', 'I', + '\x3', '\x2', '\x2', '\x2', '\x161', '\x166', '\x5', 'N', '(', '\x2', + '\x162', '\x163', '\x5', 'L', '\'', '\x2', '\x163', '\x164', '\x5', 'J', + '&', '\x2', '\x164', '\x166', '\x3', '\x2', '\x2', '\x2', '\x165', '\x161', + '\x3', '\x2', '\x2', '\x2', '\x165', '\x162', '\x3', '\x2', '\x2', '\x2', + '\x166', 'K', '\x3', '\x2', '\x2', '\x2', '\x167', '\x168', '\t', '\b', + '\x2', '\x2', '\x168', 'M', '\x3', '\x2', '\x2', '\x2', '\x169', '\x16A', + '\b', '(', '\x1', '\x2', '\x16A', '\x190', '\x5', 'X', '-', '\x2', '\x16B', + '\x190', '\a', '\x42', '\x2', '\x2', '\x16C', '\x190', '\x5', 'Z', '.', + '\x2', '\x16D', '\x16F', '\a', '\b', '\x2', '\x2', '\x16E', '\x170', '\x5', + 'R', '*', '\x2', '\x16F', '\x16E', '\x3', '\x2', '\x2', '\x2', '\x16F', + '\x170', '\x3', '\x2', '\x2', '\x2', '\x170', '\x171', '\x3', '\x2', '\x2', + '\x2', '\x171', '\x190', '\a', '\t', '\x2', '\x2', '\x172', '\x174', '\a', + '\x1C', '\x2', '\x2', '\x173', '\x175', '\x5', 'T', '+', '\x2', '\x174', + '\x173', '\x3', '\x2', '\x2', '\x2', '\x174', '\x175', '\x3', '\x2', '\x2', + '\x2', '\x175', '\x176', '\x3', '\x2', '\x2', '\x2', '\x176', '\x190', + '\a', '\x1D', '\x2', '\x2', '\x177', '\x178', '\a', '\x5', '\x2', '\x2', + '\x178', '\x179', '\x5', '.', '\x18', '\x2', '\x179', '\x17A', '\a', '\x6', + '\x2', '\x2', '\x17A', '\x190', '\x3', '\x2', '\x2', '\x2', '\x17B', '\x17C', + '\a', '\x5', '\x2', '\x2', '\x17C', '\x17D', '\x5', '\x4', '\x3', '\x2', + '\x17D', '\x17E', '\a', '\x6', '\x2', '\x2', '\x17E', '\x190', '\x3', + '\x2', '\x2', '\x2', '\x17F', '\x180', '\a', '(', '\x2', '\x2', '\x180', + '\x181', '\a', '\x5', '\x2', '\x2', '\x181', '\x182', '\x5', '\x4', '\x3', + '\x2', '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', '\x190', + '\x3', '\x2', '\x2', '\x2', '\x184', '\x185', '\a', ' ', '\x2', '\x2', + '\x185', '\x186', '\a', '\x5', '\x2', '\x2', '\x186', '\x187', '\x5', + '\x4', '\x3', '\x2', '\x187', '\x188', '\a', '\x6', '\x2', '\x2', '\x188', + '\x190', '\x3', '\x2', '\x2', '\x2', '\x189', '\x18A', '\a', '\x1E', '\x2', + '\x2', '\x18A', '\x18B', '\a', '\x5', '\x2', '\x2', '\x18B', '\x18C', + '\x5', '\x4', '\x3', '\x2', '\x18C', '\x18D', '\a', '\x6', '\x2', '\x2', + '\x18D', '\x190', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x190', '\x5', + 'P', ')', '\x2', '\x18F', '\x169', '\x3', '\x2', '\x2', '\x2', '\x18F', + '\x16B', '\x3', '\x2', '\x2', '\x2', '\x18F', '\x16C', '\x3', '\x2', '\x2', + '\x2', '\x18F', '\x16D', '\x3', '\x2', '\x2', '\x2', '\x18F', '\x172', + '\x3', '\x2', '\x2', '\x2', '\x18F', '\x177', '\x3', '\x2', '\x2', '\x2', + '\x18F', '\x17B', '\x3', '\x2', '\x2', '\x2', '\x18F', '\x17F', '\x3', + '\x2', '\x2', '\x2', '\x18F', '\x184', '\x3', '\x2', '\x2', '\x2', '\x18F', + '\x189', '\x3', '\x2', '\x2', '\x2', '\x18F', '\x18E', '\x3', '\x2', '\x2', + '\x2', '\x190', '\x19B', '\x3', '\x2', '\x2', '\x2', '\x191', '\x192', + '\f', '\b', '\x2', '\x2', '\x192', '\x193', '\a', '\a', '\x2', '\x2', + '\x193', '\x19A', '\x5', 'X', '-', '\x2', '\x194', '\x195', '\f', '\a', + '\x2', '\x2', '\x195', '\x196', '\a', '\b', '\x2', '\x2', '\x196', '\x197', + '\x5', '.', '\x18', '\x2', '\x197', '\x198', '\a', '\t', '\x2', '\x2', + '\x198', '\x19A', '\x3', '\x2', '\x2', '\x2', '\x199', '\x191', '\x3', + '\x2', '\x2', '\x2', '\x199', '\x194', '\x3', '\x2', '\x2', '\x2', '\x19A', + '\x19D', '\x3', '\x2', '\x2', '\x2', '\x19B', '\x199', '\x3', '\x2', '\x2', + '\x2', '\x19B', '\x19C', '\x3', '\x2', '\x2', '\x2', '\x19C', 'O', '\x3', + '\x2', '\x2', '\x2', '\x19D', '\x19B', '\x3', '\x2', '\x2', '\x2', '\x19E', + '\x19F', '\a', ':', '\x2', '\x2', '\x19F', '\x1A1', '\a', '\a', '\x2', + '\x2', '\x1A0', '\x19E', '\x3', '\x2', '\x2', '\x2', '\x1A0', '\x1A1', + '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x1A2', '\x3', '\x2', '\x2', '\x2', + '\x1A2', '\x1A3', '\x5', 'X', '-', '\x2', '\x1A3', '\x1A5', '\a', '\x5', + '\x2', '\x2', '\x1A4', '\x1A6', '\x5', 'R', '*', '\x2', '\x1A5', '\x1A4', + '\x3', '\x2', '\x2', '\x2', '\x1A5', '\x1A6', '\x3', '\x2', '\x2', '\x2', + '\x1A6', '\x1A7', '\x3', '\x2', '\x2', '\x2', '\x1A7', '\x1A8', '\a', + '\x6', '\x2', '\x2', '\x1A8', '\x1B6', '\x3', '\x2', '\x2', '\x2', '\x1A9', + '\x1AA', '\a', '.', '\x2', '\x2', '\x1AA', '\x1AC', '\a', '\x5', '\x2', + '\x2', '\x1AB', '\x1AD', '\x5', 'R', '*', '\x2', '\x1AC', '\x1AB', '\x3', + '\x2', '\x2', '\x2', '\x1AC', '\x1AD', '\x3', '\x2', '\x2', '\x2', '\x1AD', + '\x1AE', '\x3', '\x2', '\x2', '\x2', '\x1AE', '\x1B6', '\a', '\x6', '\x2', + '\x2', '\x1AF', '\x1B0', '\a', '\x36', '\x2', '\x2', '\x1B0', '\x1B2', + '\a', '\x5', '\x2', '\x2', '\x1B1', '\x1B3', '\x5', 'R', '*', '\x2', '\x1B2', + '\x1B1', '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B3', '\x3', '\x2', '\x2', + '\x2', '\x1B3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B4', '\x1B6', + '\a', '\x6', '\x2', '\x2', '\x1B5', '\x1A0', '\x3', '\x2', '\x2', '\x2', + '\x1B5', '\x1A9', '\x3', '\x2', '\x2', '\x2', '\x1B5', '\x1AF', '\x3', + '\x2', '\x2', '\x2', '\x1B6', 'Q', '\x3', '\x2', '\x2', '\x2', '\x1B7', + '\x1BC', '\x5', '.', '\x18', '\x2', '\x1B8', '\x1B9', '\a', '\x4', '\x2', + '\x2', '\x1B9', '\x1BB', '\x5', '.', '\x18', '\x2', '\x1BA', '\x1B8', + '\x3', '\x2', '\x2', '\x2', '\x1BB', '\x1BE', '\x3', '\x2', '\x2', '\x2', + '\x1BC', '\x1BA', '\x3', '\x2', '\x2', '\x2', '\x1BC', '\x1BD', '\x3', + '\x2', '\x2', '\x2', '\x1BD', 'S', '\x3', '\x2', '\x2', '\x2', '\x1BE', + '\x1BC', '\x3', '\x2', '\x2', '\x2', '\x1BF', '\x1C4', '\x5', 'V', ',', + '\x2', '\x1C0', '\x1C1', '\a', '\x4', '\x2', '\x2', '\x1C1', '\x1C3', + '\x5', 'V', ',', '\x2', '\x1C2', '\x1C0', '\x3', '\x2', '\x2', '\x2', + '\x1C3', '\x1C6', '\x3', '\x2', '\x2', '\x2', '\x1C4', '\x1C2', '\x3', + '\x2', '\x2', '\x2', '\x1C4', '\x1C5', '\x3', '\x2', '\x2', '\x2', '\x1C5', + 'U', '\x3', '\x2', '\x2', '\x2', '\x1C6', '\x1C4', '\x3', '\x2', '\x2', + '\x2', '\x1C7', '\x1C8', '\a', '@', '\x2', '\x2', '\x1C8', '\x1C9', '\a', + '\v', '\x2', '\x2', '\x1C9', '\x1CA', '\x5', '.', '\x18', '\x2', '\x1CA', + 'W', '\x3', '\x2', '\x2', '\x2', '\x1CB', '\x1CC', '\t', '\t', '\x2', + '\x2', '\x1CC', 'Y', '\x3', '\x2', '\x2', '\x2', '\x1CD', '\x1CE', '\t', + '\n', '\x2', '\x2', '\x1CE', '[', '\x3', '\x2', '\x2', '\x2', '/', '\x61', + '\x64', 'g', 'j', 'm', 'q', 't', '~', '\x8A', '\x90', '\x98', '\x9B', + '\xA1', '\xA8', '\xAD', '\xB3', '\xC1', '\xC3', '\xD6', '\xDB', '\xEC', + '\xF3', '\xFE', '\x100', '\x107', '\x10F', '\x111', '\x116', '\x11F', + '\x124', '\x14C', '\x14E', '\x165', '\x16F', '\x174', '\x18F', '\x199', + '\x19B', '\x1A0', '\x1A5', '\x1AC', '\x1B2', '\x1B5', '\x1BC', '\x1C4', }; public static readonly ATN _ATN = diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs index 4e6bacb145..36e14d78bd 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs @@ -789,6 +789,12 @@ private enum Aggregate public static readonly AggregateScalarExpressionDetector Singleton = new AggregateScalarExpressionDetector(); + public override bool Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + // No need to worry about aggregates within the subquery (they will recursively get rewritten). + return false; + } + public override bool Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { bool hasAggregates = false; diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/SqlAllScalarExpression.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/SqlAllScalarExpression.cs new file mode 100644 index 0000000000..4bfbee4668 --- /dev/null +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/SqlAllScalarExpression.cs @@ -0,0 +1,40 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace Microsoft.Azure.Cosmos.SqlObjects +{ + using System; + using Microsoft.Azure.Cosmos.SqlObjects.Visitors; + +#if INTERNAL +#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member +#pragma warning disable SA1600 // Elements should be documented + public +#else + internal +#endif + sealed class SqlAllScalarExpression : SqlScalarExpression + { + private SqlAllScalarExpression(SqlQuery subquery) + { + this.Subquery = subquery ?? throw new ArgumentNullException(nameof(subquery)); + } + + public SqlQuery Subquery { get; } + + public static SqlAllScalarExpression Create(SqlQuery subquery) => new SqlAllScalarExpression(subquery); + + public override void Accept(SqlObjectVisitor visitor) => visitor.Visit(this); + + public override TResult Accept(SqlObjectVisitor visitor) => visitor.Visit(this); + + public override TResult Accept(SqlObjectVisitor visitor, T input) => visitor.Visit(this, input); + + public override void Accept(SqlScalarExpressionVisitor visitor) => visitor.Visit(this); + + public override TResult Accept(SqlScalarExpressionVisitor visitor) => visitor.Visit(this); + + public override TResult Accept(SqlScalarExpressionVisitor visitor, T input) => visitor.Visit(this, input); + } +} diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectEqualityVisitor.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectEqualityVisitor.cs index 5a4bd72d63..3a9bf01970 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectEqualityVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectEqualityVisitor.cs @@ -36,6 +36,21 @@ public override bool Visit(SqlAliasedCollectionExpression first, SqlObject secon return true; } + public override bool Visit(SqlAllScalarExpression first, SqlObject secondAsObject) + { + if (!(secondAsObject is SqlAllScalarExpression second)) + { + return false; + } + + if (!Equals(first.Subquery, second.Subquery)) + { + return false; + } + + return true; + } + public override bool Visit(SqlArrayCreateScalarExpression first, SqlObject secondAsObject) { if (!(secondAsObject is SqlArrayCreateScalarExpression second)) diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectHasher.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectHasher.cs index a5f11d45c3..dfbab84bc0 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectHasher.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectHasher.cs @@ -12,6 +12,7 @@ internal sealed class SqlObjectHasher : SqlObjectVisitor public static readonly SqlObjectHasher Singleton = new SqlObjectHasher(true); private const int SqlAliasedCollectionExpressionHashCode = 1202039781; + private const int SqlAllScalarExpressionHashCode = 1369048120; private const int SqlArrayCreateScalarExpressionHashCode = 1760950661; private const int SqlArrayIteratorCollectionExpressionHashCode = -468874086; private const int SqlArrayScalarExpressionHashCode = -1093553293; @@ -119,6 +120,13 @@ public override int Visit(SqlAliasedCollectionExpression sqlAliasedCollectionExp return hashCode; } + public override int Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + int hashCode = SqlAllScalarExpressionHashCode; + hashCode = CombineHashes(hashCode, sqlAllScalarExpression.Subquery.Accept(this)); + return hashCode; + } + public override int Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { int hashCode = SqlArrayCreateScalarExpressionHashCode; diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs index 7fa52c4437..5e6faaef45 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs @@ -44,6 +44,11 @@ public override SqlObject Visit(SqlAliasedCollectionExpression sqlAliasedCollect sqlAliasedCollectionExpression.Alias.Accept(this) as SqlIdentifier); } + public override SqlObject Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + return SqlExistsScalarExpression.Create(sqlAllScalarExpression.Subquery.Accept(this) as SqlQuery); + } + public override SqlObject Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { List items = new List(); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs index c4d3dfa68d..75076e512c 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs @@ -39,6 +39,14 @@ public override void Visit(SqlAliasedCollectionExpression sqlAliasedCollectionEx } } + public override void Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + this.writer.Write("ALL"); + this.WriteStartContext("("); + sqlAllScalarExpression.Subquery.Accept(this); + this.WriteEndContext(")"); + } + public override void Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { int numberOfItems = sqlArrayCreateScalarExpression.Items.Count(); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor.cs index ada48254b6..d8d8899395 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor.cs @@ -14,6 +14,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors abstract class SqlObjectVisitor { public abstract void Visit(SqlAliasedCollectionExpression sqlObject); + public abstract void Visit(SqlAllScalarExpression sqlObject); public abstract void Visit(SqlArrayCreateScalarExpression sqlObject); public abstract void Visit(SqlArrayIteratorCollectionExpression sqlObject); public abstract void Visit(SqlArrayScalarExpression sqlObject); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TArg,TOutput}.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TArg,TOutput}.cs index eda7022f3b..3ba9878ae6 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TArg,TOutput}.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TArg,TOutput}.cs @@ -14,6 +14,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors abstract class SqlObjectVisitor { public abstract TOutput Visit(SqlAliasedCollectionExpression sqlObject, TArg input); + public abstract TOutput Visit(SqlAllScalarExpression sqlObject, TArg input); public abstract TOutput Visit(SqlArrayCreateScalarExpression sqlObject, TArg input); public abstract TOutput Visit(SqlArrayIteratorCollectionExpression sqlObject, TArg input); public abstract TOutput Visit(SqlArrayScalarExpression sqlObject, TArg input); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TResult}.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TResult}.cs index 08d8b7ef10..6f0ce75e99 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TResult}.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectVisitor{TResult}.cs @@ -14,6 +14,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors abstract class SqlObjectVisitor { public abstract TResult Visit(SqlAliasedCollectionExpression sqlObject); + public abstract TResult Visit(SqlAllScalarExpression sqlObject); public abstract TResult Visit(SqlArrayCreateScalarExpression sqlObject); public abstract TResult Visit(SqlArrayIteratorCollectionExpression sqlObject); public abstract TResult Visit(SqlArrayScalarExpression sqlObject); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor.cs index 1e1770403b..8e6e75b7f0 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor.cs @@ -12,6 +12,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors #endif abstract class SqlScalarExpressionVisitor { + public abstract void Visit(SqlAllScalarExpression scalarExpression); public abstract void Visit(SqlArrayCreateScalarExpression scalarExpression); public abstract void Visit(SqlArrayScalarExpression scalarExpression); public abstract void Visit(SqlBetweenScalarExpression scalarExpression); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TArg,TOutput}.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TArg,TOutput}.cs index 3862aaab40..ff5cdbc019 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TArg,TOutput}.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TArg,TOutput}.cs @@ -13,6 +13,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors #endif abstract class SqlScalarExpressionVisitor { + public abstract TOutput Visit(SqlAllScalarExpression scalarExpression, TArg input); public abstract TOutput Visit(SqlArrayCreateScalarExpression scalarExpression, TArg input); public abstract TOutput Visit(SqlArrayScalarExpression scalarExpression, TArg input); public abstract TOutput Visit(SqlBetweenScalarExpression scalarExpression, TArg input); diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TResult}.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TResult}.cs index 1ca9150582..bdc7b5f04f 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TResult}.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlScalarExpressionVisitor{TResult}.cs @@ -13,6 +13,7 @@ namespace Microsoft.Azure.Cosmos.SqlObjects.Visitors #endif abstract class SqlScalarExpressionVisitor { + public abstract TResult Visit(SqlAllScalarExpression scalarExpression); public abstract TResult Visit(SqlArrayCreateScalarExpression scalarExpression); public abstract TResult Visit(SqlArrayScalarExpression scalarExpression); public abstract TResult Visit(SqlBetweenScalarExpression scalarExpression); diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateSubquerySqlParserBaselineTests.All.xml b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateSubquerySqlParserBaselineTests.All.xml new file mode 100644 index 0000000000..4df32ccb12 --- /dev/null +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateSubquerySqlParserBaselineTests.All.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/ScalarExpressionSqlParserBaselineTests.All.xml b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/ScalarExpressionSqlParserBaselineTests.All.xml new file mode 100644 index 0000000000..70040beaf4 --- /dev/null +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/ScalarExpressionSqlParserBaselineTests.All.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Microsoft.Azure.Cosmos.Tests.csproj b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Microsoft.Azure.Cosmos.Tests.csproj index ef7e193dbf..dc5f2c8e41 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Microsoft.Azure.Cosmos.Tests.csproj +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Microsoft.Azure.Cosmos.Tests.csproj @@ -1,4 +1,4 @@ - + true @@ -174,6 +174,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionDector.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionDector.cs index f0ee3beb3d..ca162fc467 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionDector.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionDector.cs @@ -55,6 +55,12 @@ public override bool Visit(SqlSelectStarSpec selectSpec) private sealed class AggregateScalarExpressionDetector : SqlScalarExpressionVisitor { public static readonly AggregateScalarExpressionDetector Singleton = new AggregateScalarExpressionDetector(); + + public override bool Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + // No need to worry about aggregates within the subquery (they will recursively get rewritten). + return false; + } public override bool Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionTransformer.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionTransformer.cs index 15411612f1..1ce82d3c98 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionTransformer.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/AggregateProjectionTransformer.cs @@ -79,6 +79,12 @@ public AggregateScalarExpressionTransformer(IEnumerable dataSourc this.dataSource = dataSource; } + public override SqlScalarExpression Visit(SqlAllScalarExpression sqlAllScalarExpression) + { + // No need to worry about aggregates within the subquery (they will recursively get rewritten). + return sqlAllScalarExpression; + } + public override SqlScalarExpression Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) { List items = new List(); diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/ScalarExpressionEvaluator.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/ScalarExpressionEvaluator.cs index 2274c876a5..2a671f2568 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/ScalarExpressionEvaluator.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/ScalarExpressionEvaluator.cs @@ -24,6 +24,54 @@ private ScalarExpressionEvaluator() { } + public override CosmosElement Visit( + SqlAllScalarExpression scalarExpression, + CosmosElement document) + { + // We evaluate the ALL expression by constructing an equivalent EXISTS and evaluating that. + // ALL ( Filter Expression ) ==> NOT EXISTS ( NOT Filter Expression ) + + // If there is is no filter expression, then an equivalent filter expression of just true is created. + SqlScalarExpression filterExpression; + if (scalarExpression.Subquery.WhereClause == null) + { + SqlLiteral trueLiteral = SqlBooleanLiteral.Create(true); + filterExpression = SqlLiteralScalarExpression.Create(trueLiteral); + } + else + { + filterExpression = scalarExpression.Subquery.WhereClause.FilterExpression; + } + + // Create a NOT unary with filter expression. + SqlUnaryScalarExpression negatedFilterExpression = SqlUnaryScalarExpression.Create( + SqlUnaryScalarOperatorKind.Not, + filterExpression); + + // Create new where clause with negated filter expression. + SqlWhereClause newWhereClause = SqlWhereClause.Create(negatedFilterExpression); + + // create new subquery with new where clause. + SqlQuery newSqlQuery = SqlQuery.Create( + scalarExpression.Subquery.SelectClause, + scalarExpression.Subquery.FromClause, + newWhereClause, + scalarExpression.Subquery.GroupByClause, + scalarExpression.Subquery.OrderByClause, + scalarExpression.Subquery.OffsetLimitClause); + + // Create an exists expression with new subquery. + SqlExistsScalarExpression newExistsScalarExpression = SqlExistsScalarExpression.Create(newSqlQuery); + + // Create a not unary with the exists expression. + SqlUnaryScalarExpression negatedExistsExpression = SqlUnaryScalarExpression.Create( + SqlUnaryScalarOperatorKind.Not, + newExistsScalarExpression); + + // Visit the equivalent NOT EXISTS expression. + return this.Visit(negatedExistsExpression, document); + } + public override CosmosElement Visit( SqlArrayCreateScalarExpression scalarExpression, CosmosElement document) diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/SqlInterpreter.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/SqlInterpreter.cs index ec02c45bde..ba45092faa 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/SqlInterpreter.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/OfflineEngine/SqlInterpreter.cs @@ -631,6 +631,11 @@ public GroupByProjectionScalarExpressionVisitor(IReadOnlyList inputs = new List() + { + CreateInput( + description: "ALL in an SqlSelectItem as an alias", + query: "SELECT 1 AS ALL"), + CreateInput( + description: "ALL in an AliasedCollectionExpression as an alias", + query: "SELECT * " + + "FROM (SELECT VALUE 1) AS ALL"), + CreateInput( + description: "ALL in an ArrayIteratorCollectionExpression", + query: "SELECT * " + + "FROM ALL IN (SELECT VALUE 1)"), + CreateInput( + description: "ALL in an InputPathCollection and IdentifierPathExpression", + query: "SELECT * " + + "FROM ALL.ALL"), + CreateInput( + description: "ALL in a PropertyRefScalarExpression", + query: "SELECT ALL"), + CreateInput( + description: "ALL in a PropertyRefScalarExpression as child", + query: "SELECT c.ALL"), + CreateInput( + description: "ALL in a PropertyRefScalarExpression as parent and child", + query: "SELECT ALL.ALL"), + CreateInput( + description: "ALL in a function call", + query: "SELECT ALL(1, 2)"), + CreateInput( + description: "ALL in a UDF function call", + query: "SELECT udf.ALL(1, 2)"), + CreateInput( + description: "ALL in every possible grammar rule at the same time", + query: "SELECT ALL(1, 2) AS ALL " + + "FROM ALL IN (SELECT ALL.ALL) " + + "WHERE ALL( " + + " SELECT ALL " + + " FROM (SELECT udf.ALL(1, 2)) AS ALL " + + " WHERE ALL( SELECT VALUE 1) " + + ")") + + }; + + this.ExecuteTestSuite(inputs); + } + + public static SqlParserBaselineTestInput CreateInput(string description, string query) + { + return new SqlParserBaselineTestInput(description, query); + } + } +} diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/ScalarExpressionSqlParserBaselineTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/ScalarExpressionSqlParserBaselineTests.cs index 7f0ec89943..2faed74686 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/ScalarExpressionSqlParserBaselineTests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/ScalarExpressionSqlParserBaselineTests.cs @@ -8,6 +8,38 @@ [TestClass] public sealed class ScalarExpressionSqlParserBaselineTests : SqlParserBaselineTests { + [TestMethod] + public void All() + { + List inputs = new List() + { + // Positive + CreateInput(description: "Basic", scalarExpression: "ALL(SELECT *)"), + CreateInput(description: "case insensitive", scalarExpression: "aLl(SELECT *)"), + CreateInput(description: "nested", scalarExpression:"ALL( SELECT * WHERE ALL( SELECT *))"), + CreateInput( + description: "multiple nested", + scalarExpression: + "ALL( " + + " SELECT * " + + " WHERE ALL( " + + " SELECT *" + + " WHERE ALL(" + + " SELECT *" + + " WHERE ALL(" + + " SELECT VALUE 1" + + " )" + + " )" + + " )" + + ")"), + + // Negative + CreateInput(description: "No closing parens", scalarExpression: "ALL(SELECT *") + }; + + this.ExecuteTestSuite(inputs); + } + [TestMethod] public void ArrayCreate() {