From 4c460c2d4ace1b1d9a52b9deb95d78e51e4c0987 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Sun, 2 Oct 2022 22:13:06 -0700 Subject: [PATCH 01/16] Add SqlAllScalarExpression to v3 DOM --- .../CosmosQueryExecutionContextFactory.cs | 6 +++ .../src/SqlObjects/SqlAllScalarExpression.cs | 40 ++++++++++++++++ .../Visitors/SqlObjectEqualityVisitor.cs | 15 ++++++ .../SqlObjects/Visitors/SqlObjectHasher.cs | 8 ++++ .../Visitors/SqlObjectObfuscator.cs | 5 ++ .../Visitors/SqlObjectTextSerializer.cs | 8 ++++ .../SqlObjects/Visitors/SqlObjectVisitor.cs | 1 + .../SqlObjectVisitor{TArg,TOutput}.cs | 1 + .../Visitors/SqlObjectVisitor{TResult}.cs | 1 + .../Visitors/SqlScalarExpressionVisitor.cs | 1 + ...qlScalarExpressionVisitor{TArg,TOutput}.cs | 1 + .../SqlScalarExpressionVisitor{TResult}.cs | 1 + .../AggregateProjectionDector.cs | 6 +++ .../AggregateProjectionTransformer.cs | 6 +++ .../ScalarExpressionEvaluator.cs | 48 +++++++++++++++++++ .../Query/OfflineEngine/SqlInterpreter.cs | 5 ++ 16 files changed, 153 insertions(+) create mode 100644 Microsoft.Azure.Cosmos/src/SqlObjects/SqlAllScalarExpression.cs diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs index 21b512166e..9852e703da 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs @@ -788,6 +788,12 @@ private enum Aggregate public static readonly AggregateScalarExpressionDetector Singleton = new AggregateScalarExpressionDetector(); + public override bool Visit(SqlAllScalarExpression sqlExistsScalarExpression) + { + // 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..ee9750c985 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 sqlExistsScalarExpression) + { + return SqlExistsScalarExpression.Create(sqlExistsScalarExpression.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..2820aa7028 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 sqlExistsScalarExpression) + { + this.writer.Write("ALL"); + this.WriteStartContext("("); + sqlExistsScalarExpression.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/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 Date: Wed, 12 Oct 2022 07:36:21 -0700 Subject: [PATCH 02/16] updated generated parser files --- .../src/Query/Core/Parser/IsqlListener.cs | 101 ++- .../src/Query/Core/Parser/IsqlVisitor.cs | 52 +- .../src/Query/Core/Parser/sqlBaseListener.cs | 103 ++- .../src/Query/Core/Parser/sqlBaseVisitor.cs | 56 +- .../src/Query/Core/Parser/sqlLexer.cs | 832 +++++++++--------- .../src/Query/Core/Parser/sqlParser.cs | 570 ++++++------ 6 files changed, 904 insertions(+), 810 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs index ed0eb42e76..753eef53f7 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs @@ -28,6 +28,7 @@ /// . /// [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal interface IsqlListener : IParseTreeListener { /// /// Enter a parse tree produced by . @@ -526,137 +527,149 @@ 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 ExistsScalarExpression + /// Enter a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// /// The parse tree. - void EnterExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); + void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); /// - /// Exit a parse tree produced by the ExistsScalarExpression + /// Exit a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// /// The parse tree. - void ExitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); + void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); /// - /// Enter a parse tree produced by the ArrayScalarExpression + /// Enter a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); + void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); /// - /// Exit a parse tree produced by the ArrayScalarExpression + /// Exit a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); + void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); /// - /// Enter a parse tree produced by the MemberIndexerScalarExpression + /// Enter a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// /// The parse tree. - void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + void EnterExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); /// - /// Exit a parse tree produced by the MemberIndexerScalarExpression + /// Exit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// /// The parse tree. - void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + void ExitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); + /// + /// Enter a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + void EnterArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); + /// + /// Exit a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); /// /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs index 2e96892783..518445ad31 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs @@ -29,6 +29,7 @@ /// /// The return type of the visit operation. [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal interface IsqlVisitor : IParseTreeVisitor { /// /// Visit a parse tree produced by . @@ -326,82 +327,89 @@ 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 ExistsScalarExpression + /// Visit a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); + Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context); /// - /// Visit a parse tree produced by the ArrayScalarExpression + /// Visit a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); + Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context); /// - /// Visit a parse tree produced by the MemberIndexerScalarExpression + /// Visit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// /// The parse tree. /// The visitor result. - Result VisitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context); + Result VisitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context); + /// + /// Visit a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// + /// The parse tree. + /// The visitor result. + Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context); /// /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs index 5a52445735..bf6a1e3835 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs @@ -32,6 +32,7 @@ /// of the available methods. /// [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal partial class sqlBaseListener : IsqlListener { /// /// Enter a parse tree produced by . @@ -624,159 +625,173 @@ 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 ExistsScalarExpression + /// Enter a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { } + public virtual void EnterParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } /// - /// Exit a parse tree produced by the ExistsScalarExpression + /// Exit a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { } + public virtual void ExitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { } /// - /// Enter a parse tree produced by the ArrayScalarExpression + /// Enter a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { } + public virtual void EnterParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the ArrayScalarExpression + /// Exit a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { } + public virtual void ExitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { } /// - /// Enter a parse tree produced by the MemberIndexerScalarExpression + /// Enter a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void EnterMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } + public virtual void EnterExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { } /// - /// Exit a parse tree produced by the MemberIndexerScalarExpression + /// Exit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// The default implementation does nothing. /// /// The parse tree. - public virtual void ExitMemberIndexerScalarExpression([NotNull] sqlParser.MemberIndexerScalarExpressionContext context) { } + public virtual void ExitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { } + /// + /// Enter a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { } + /// + /// Exit a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void ExitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { } /// /// Enter a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs index 287851e115..d03ec23b48 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs @@ -31,6 +31,7 @@ /// /// The return type of the visit operation. [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal partial class sqlBaseVisitor : AbstractParseTreeVisitor, IsqlVisitor { /// /// Visit a parse tree produced by . @@ -516,7 +517,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 +526,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 +537,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 +548,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 +559,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 +570,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 +581,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 +592,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,9 +603,9 @@ 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 ExistsScalarExpression + /// Visit a parse tree produced by the ParenthesizedScalarExperession /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -613,9 +614,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitParenthesizedScalarExperession([NotNull] sqlParser.ParenthesizedScalarExperessionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the ArrayScalarExpression + /// Visit a parse tree produced by the ParameterRefScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -624,9 +625,9 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// /// The parse tree. /// The visitor result. - public virtual Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { return VisitChildren(context); } + public virtual Result VisitParameterRefScalarExpression([NotNull] sqlParser.ParameterRefScalarExpressionContext context) { return VisitChildren(context); } /// - /// Visit a parse tree produced by the MemberIndexerScalarExpression + /// Visit a parse tree produced by the ExistsScalarExpression /// labeled alternative in . /// /// The default implementation returns the result of calling @@ -635,7 +636,18 @@ 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 VisitExistsScalarExpression([NotNull] sqlParser.ExistsScalarExpressionContext context) { return VisitChildren(context); } + /// + /// Visit a parse tree produced by the ArrayScalarExpression + /// labeled alternative in . + /// + /// The default implementation returns the result of calling + /// on . + /// + /// + /// The parse tree. + /// The visitor result. + public virtual Result VisitArrayScalarExpression([NotNull] sqlParser.ArrayScalarExpressionContext context) { return VisitChildren(context); } /// /// Visit a parse tree produced by the PropertyRefScalarExpressionRecursive /// labeled alternative in . diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs index 23f23fbed2..634f576a74 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs @@ -28,6 +28,7 @@ using DFA = Antlr4.Runtime.Dfa.DFA; [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal partial class sqlLexer : Lexer { protected static DFA[] decisionToDFA; protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); @@ -35,12 +36,12 @@ 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_LIKE=44, + K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, + K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, + WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, IDENTIFIER=61, PARAMETER=62; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -53,9 +54,9 @@ 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", + "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_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", @@ -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, "'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_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" }; 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', '@', '\x240', '\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,96 +155,98 @@ 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', '^', - '\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', - '\t', '\x3', '\n', '\x3', '\n', '\x3', '\v', '\x3', '\v', '\x3', '\v', - '\x3', '\f', '\x3', '\f', '\x3', '\r', '\x3', '\r', '\x3', '\xE', '\x3', - '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\x10', '\x3', '\x10', '\x3', - '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', '\x3', '\x12', '\x3', - '\x13', '\x3', '\x13', '\x3', '\x13', '\x3', '\x14', '\x3', '\x14', '\x3', - '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', '\x3', '\x16', '\x3', - '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', '\x3', '\x19', '\x3', - '\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', - '#', '\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', + '\x4', '_', '\t', '_', '\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', '\t', '\x3', '\n', '\x3', '\n', '\x3', '\v', '\x3', + '\v', '\x3', '\v', '\x3', '\f', '\x3', '\f', '\x3', '\r', '\x3', '\r', + '\x3', '\xE', '\x3', '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\x10', + '\x3', '\x10', '\x3', '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', + '\x3', '\x12', '\x3', '\x13', '\x3', '\x13', '\x3', '\x13', '\x3', '\x14', + '\x3', '\x14', '\x3', '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', + '\x3', '\x16', '\x3', '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', + '\x3', '\x19', '\x3', '\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', '\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', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', + '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x32', '\x3', '\x32', '\x3', + '\x32', '\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', + '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x35', '\x3', + '\x35', '\x3', '\x35', '\x3', '\x35', '\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', '\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', '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', - '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', 'R', '\x3', 'S', - '\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', + '\x38', '\x3', '\x38', '\x3', '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', + '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', ':', '\x3', ':', '\x3', ':', + '\x3', ':', '\x3', ':', '\x3', ':', '\x3', ';', '\x6', ';', '\x19F', '\n', + ';', '\r', ';', '\xE', ';', '\x1A0', '\x3', ';', '\x3', ';', '\x3', '<', + '\x5', '<', '\x1A6', '\n', '<', '\x3', '<', '\x6', '<', '\x1A9', '\n', + '<', '\r', '<', '\xE', '<', '\x1AA', '\x3', '<', '\x3', '<', '\a', '<', + '\x1AF', '\n', '<', '\f', '<', '\xE', '<', '\x1B2', '\v', '<', '\x5', + '<', '\x1B4', '\n', '<', '\x3', '<', '\x3', '<', '\x5', '<', '\x1B8', + '\n', '<', '\x3', '<', '\x6', '<', '\x1BB', '\n', '<', '\r', '<', '\xE', + '<', '\x1BC', '\x5', '<', '\x1BF', '\n', '<', '\x3', '<', '\x5', '<', + '\x1C2', '\n', '<', '\x3', '<', '\x3', '<', '\x6', '<', '\x1C6', '\n', + '<', '\r', '<', '\xE', '<', '\x1C7', '\x3', '<', '\x3', '<', '\x5', '<', + '\x1CC', '\n', '<', '\x3', '<', '\x6', '<', '\x1CF', '\n', '<', '\r', + '<', '\xE', '<', '\x1D0', '\x5', '<', '\x1D3', '\n', '<', '\x5', '<', + '\x1D5', '\n', '<', '\x3', '=', '\x3', '=', '\x3', '=', '\a', '=', '\x1DA', + '\n', '=', '\f', '=', '\xE', '=', '\x1DD', '\v', '=', '\x3', '=', '\x3', + '=', '\x3', '=', '\x3', '=', '\a', '=', '\x1E3', '\n', '=', '\f', '=', + '\xE', '=', '\x1E6', '\v', '=', '\x3', '=', '\x5', '=', '\x1E9', '\n', + '=', '\x3', '>', '\x3', '>', '\x3', '>', '\x5', '>', '\x1EE', '\n', '>', + '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', + '\x3', '@', '\x3', '@', '\x3', '\x41', '\x3', '\x41', '\x3', '\x42', '\x3', + '\x42', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', + '\x43', '\a', '\x43', '\x201', '\n', '\x43', '\f', '\x43', '\xE', '\x43', + '\x204', '\v', '\x43', '\x5', '\x43', '\x206', '\n', '\x43', '\x3', '\x44', + '\x3', '\x44', '\x3', '\x44', '\x3', '\x45', '\x3', '\x45', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', + 'R', '\x3', 'R', '\x3', 'S', '\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', '^', '\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', '\x7F', '\x2', '\x81', + '\x2', '\x83', '\x2', '\x85', '?', '\x87', '@', '\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', '\xBD', + '\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', '!', '$', '$', '^', '^', @@ -261,7 +264,7 @@ static sqlLexer() { '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', + '\x2', '\x237', '\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', @@ -294,311 +297,316 @@ static sqlLexer() { '\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', + '\x3', '\x2', '\x2', '\x2', '\x2', 'y', '\x3', '\x2', '\x2', '\x2', '\x2', + '\x85', '\x3', '\x2', '\x2', '\x2', '\x2', '\x87', '\x3', '\x2', '\x2', + '\x2', '\x3', '\xBF', '\x3', '\x2', '\x2', '\x2', '\x5', '\xC1', '\x3', + '\x2', '\x2', '\x2', '\a', '\xC3', '\x3', '\x2', '\x2', '\x2', '\t', '\xC5', + '\x3', '\x2', '\x2', '\x2', '\v', '\xC7', '\x3', '\x2', '\x2', '\x2', + '\r', '\xC9', '\x3', '\x2', '\x2', '\x2', '\xF', '\xCB', '\x3', '\x2', + '\x2', '\x2', '\x11', '\xCD', '\x3', '\x2', '\x2', '\x2', '\x13', '\xCF', + '\x3', '\x2', '\x2', '\x2', '\x15', '\xD1', '\x3', '\x2', '\x2', '\x2', + '\x17', '\xD4', '\x3', '\x2', '\x2', '\x2', '\x19', '\xD6', '\x3', '\x2', + '\x2', '\x2', '\x1B', '\xD8', '\x3', '\x2', '\x2', '\x2', '\x1D', '\xDA', + '\x3', '\x2', '\x2', '\x2', '\x1F', '\xDC', '\x3', '\x2', '\x2', '\x2', + '!', '\xDE', '\x3', '\x2', '\x2', '\x2', '#', '\xE0', '\x3', '\x2', '\x2', + '\x2', '%', '\xE3', '\x3', '\x2', '\x2', '\x2', '\'', '\xE6', '\x3', '\x2', + '\x2', '\x2', ')', '\xE8', '\x3', '\x2', '\x2', '\x2', '+', '\xEB', '\x3', + '\x2', '\x2', '\x2', '-', '\xED', '\x3', '\x2', '\x2', '\x2', '/', '\xEF', + '\x3', '\x2', '\x2', '\x2', '\x31', '\xF1', '\x3', '\x2', '\x2', '\x2', + '\x33', '\xF4', '\x3', '\x2', '\x2', '\x2', '\x35', '\xF6', '\x3', '\x2', + '\x2', '\x2', '\x37', '\xF8', '\x3', '\x2', '\x2', '\x2', '\x39', '\xFA', + '\x3', '\x2', '\x2', '\x2', ';', '\xFE', '\x3', '\x2', '\x2', '\x2', '=', + '\x102', '\x3', '\x2', '\x2', '\x2', '?', '\x108', '\x3', '\x2', '\x2', + '\x2', '\x41', '\x10B', '\x3', '\x2', '\x2', '\x2', '\x43', '\x10F', '\x3', + '\x2', '\x2', '\x2', '\x45', '\x117', '\x3', '\x2', '\x2', '\x2', 'G', + '\x11A', '\x3', '\x2', '\x2', '\x2', 'I', '\x11F', '\x3', '\x2', '\x2', + '\x2', 'K', '\x128', '\x3', '\x2', '\x2', '\x2', 'M', '\x12F', '\x3', + '\x2', '\x2', '\x2', 'O', '\x136', '\x3', '\x2', '\x2', '\x2', 'Q', '\x13C', + '\x3', '\x2', '\x2', '\x2', 'S', '\x141', '\x3', '\x2', '\x2', '\x2', + 'U', '\x147', '\x3', '\x2', '\x2', '\x2', 'W', '\x14A', '\x3', '\x2', + '\x2', '\x2', 'Y', '\x14F', '\x3', '\x2', '\x2', '\x2', '[', '\x154', + '\x3', '\x2', '\x2', '\x2', ']', '\x15A', '\x3', '\x2', '\x2', '\x2', + '_', '\x15E', '\x3', '\x2', '\x2', '\x2', '\x61', '\x163', '\x3', '\x2', + '\x2', '\x2', '\x63', '\x16A', '\x3', '\x2', '\x2', '\x2', '\x65', '\x16D', + '\x3', '\x2', '\x2', '\x2', 'g', '\x173', '\x3', '\x2', '\x2', '\x2', + 'i', '\x17A', '\x3', '\x2', '\x2', '\x2', 'k', '\x17E', '\x3', '\x2', + '\x2', '\x2', 'm', '\x183', '\x3', '\x2', '\x2', '\x2', 'o', '\x187', + '\x3', '\x2', '\x2', '\x2', 'q', '\x191', '\x3', '\x2', '\x2', '\x2', + 's', '\x197', '\x3', '\x2', '\x2', '\x2', 'u', '\x19E', '\x3', '\x2', + '\x2', '\x2', 'w', '\x1D4', '\x3', '\x2', '\x2', '\x2', 'y', '\x1E8', + '\x3', '\x2', '\x2', '\x2', '{', '\x1EA', '\x3', '\x2', '\x2', '\x2', + '}', '\x1EF', '\x3', '\x2', '\x2', '\x2', '\x7F', '\x1F5', '\x3', '\x2', + '\x2', '\x2', '\x81', '\x1F7', '\x3', '\x2', '\x2', '\x2', '\x83', '\x1F9', + '\x3', '\x2', '\x2', '\x2', '\x85', '\x205', '\x3', '\x2', '\x2', '\x2', + '\x87', '\x207', '\x3', '\x2', '\x2', '\x2', '\x89', '\x20A', '\x3', '\x2', + '\x2', '\x2', '\x8B', '\x20C', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x20E', + '\x3', '\x2', '\x2', '\x2', '\x8F', '\x210', '\x3', '\x2', '\x2', '\x2', + '\x91', '\x212', '\x3', '\x2', '\x2', '\x2', '\x93', '\x214', '\x3', '\x2', + '\x2', '\x2', '\x95', '\x216', '\x3', '\x2', '\x2', '\x2', '\x97', '\x218', + '\x3', '\x2', '\x2', '\x2', '\x99', '\x21A', '\x3', '\x2', '\x2', '\x2', + '\x9B', '\x21C', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x21E', '\x3', '\x2', + '\x2', '\x2', '\x9F', '\x220', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x222', + '\x3', '\x2', '\x2', '\x2', '\xA3', '\x224', '\x3', '\x2', '\x2', '\x2', + '\xA5', '\x226', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x228', '\x3', '\x2', + '\x2', '\x2', '\xA9', '\x22A', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x22C', + '\x3', '\x2', '\x2', '\x2', '\xAD', '\x22E', '\x3', '\x2', '\x2', '\x2', + '\xAF', '\x230', '\x3', '\x2', '\x2', '\x2', '\xB1', '\x232', '\x3', '\x2', + '\x2', '\x2', '\xB3', '\x234', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x236', + '\x3', '\x2', '\x2', '\x2', '\xB7', '\x238', '\x3', '\x2', '\x2', '\x2', + '\xB9', '\x23A', '\x3', '\x2', '\x2', '\x2', '\xBB', '\x23C', '\x3', '\x2', + '\x2', '\x2', '\xBD', '\x23E', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xC0', + '\a', ',', '\x2', '\x2', '\xC0', '\x4', '\x3', '\x2', '\x2', '\x2', '\xC1', + '\xC2', '\a', '.', '\x2', '\x2', '\xC2', '\x6', '\x3', '\x2', '\x2', '\x2', + '\xC3', '\xC4', '\a', '*', '\x2', '\x2', '\xC4', '\b', '\x3', '\x2', '\x2', + '\x2', '\xC5', '\xC6', '\a', '+', '\x2', '\x2', '\xC6', '\n', '\x3', '\x2', + '\x2', '\x2', '\xC7', '\xC8', '\a', '\x30', '\x2', '\x2', '\xC8', '\f', + '\x3', '\x2', '\x2', '\x2', '\xC9', '\xCA', '\a', ']', '\x2', '\x2', '\xCA', + '\xE', '\x3', '\x2', '\x2', '\x2', '\xCB', '\xCC', '\a', '_', '\x2', '\x2', + '\xCC', '\x10', '\x3', '\x2', '\x2', '\x2', '\xCD', '\xCE', '\a', '\x41', + '\x2', '\x2', '\xCE', '\x12', '\x3', '\x2', '\x2', '\x2', '\xCF', '\xD0', + '\a', '<', '\x2', '\x2', '\xD0', '\x14', '\x3', '\x2', '\x2', '\x2', '\xD1', + '\xD2', '\a', '\x41', '\x2', '\x2', '\xD2', '\xD3', '\a', '\x41', '\x2', + '\x2', '\xD3', '\x16', '\x3', '\x2', '\x2', '\x2', '\xD4', '\xD5', '\a', + '\x31', '\x2', '\x2', '\xD5', '\x18', '\x3', '\x2', '\x2', '\x2', '\xD6', + '\xD7', '\a', '\'', '\x2', '\x2', '\xD7', '\x1A', '\x3', '\x2', '\x2', + '\x2', '\xD8', '\xD9', '\a', '-', '\x2', '\x2', '\xD9', '\x1C', '\x3', + '\x2', '\x2', '\x2', '\xDA', '\xDB', '\a', '/', '\x2', '\x2', '\xDB', + '\x1E', '\x3', '\x2', '\x2', '\x2', '\xDC', '\xDD', '\a', '>', '\x2', + '\x2', '\xDD', ' ', '\x3', '\x2', '\x2', '\x2', '\xDE', '\xDF', '\a', + '@', '\x2', '\x2', '\xDF', '\"', '\x3', '\x2', '\x2', '\x2', '\xE0', '\xE1', + '\a', '@', '\x2', '\x2', '\xE1', '\xE2', '\a', '?', '\x2', '\x2', '\xE2', + '$', '\x3', '\x2', '\x2', '\x2', '\xE3', '\xE4', '\a', '>', '\x2', '\x2', + '\xE4', '\xE5', '\a', '?', '\x2', '\x2', '\xE5', '&', '\x3', '\x2', '\x2', + '\x2', '\xE6', '\xE7', '\a', '?', '\x2', '\x2', '\xE7', '(', '\x3', '\x2', + '\x2', '\x2', '\xE8', '\xE9', '\a', '#', '\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', '.', '\x3', '\x2', '\x2', + '\x2', '\xEF', '\xF0', '\a', '~', '\x2', '\x2', '\xF0', '\x30', '\x3', + '\x2', '\x2', '\x2', '\xF1', '\xF2', '\a', '~', '\x2', '\x2', '\xF2', + '\xF3', '\a', '~', '\x2', '\x2', '\xF3', '\x32', '\x3', '\x2', '\x2', + '\x2', '\xF4', '\xF5', '\a', '\x80', '\x2', '\x2', '\xF5', '\x34', '\x3', + '\x2', '\x2', '\x2', '\xF6', '\xF7', '\a', '}', '\x2', '\x2', '\xF7', + '\x36', '\x3', '\x2', '\x2', '\x2', '\xF8', '\xF9', '\a', '\x7F', '\x2', + '\x2', '\xF9', '\x38', '\x3', '\x2', '\x2', '\x2', '\xFA', '\xFB', '\x5', + '\x8B', '\x46', '\x2', '\xFB', '\xFC', '\x5', '\xA1', 'Q', '\x2', '\xFC', + '\xFD', '\x5', '\xA1', 'Q', '\x2', '\xFD', ':', '\x3', '\x2', '\x2', '\x2', + '\xFE', '\xFF', '\x5', '\x8B', '\x46', '\x2', '\xFF', '\x100', '\x5', + '\xA5', 'S', '\x2', '\x100', '\x101', '\x5', '\x91', 'I', '\x2', '\x101', + '<', '\x3', '\x2', '\x2', '\x2', '\x102', '\x103', '\x5', '\x8B', '\x46', + '\x2', '\x103', '\x104', '\x5', '\xAD', 'W', '\x2', '\x104', '\x105', + '\x5', '\xAD', 'W', '\x2', '\x105', '\x106', '\x5', '\x8B', '\x46', '\x2', + '\x106', '\x107', '\x5', '\xBB', '^', '\x2', '\x107', '>', '\x3', '\x2', + '\x2', '\x2', '\x108', '\x109', '\x5', '\x8B', '\x46', '\x2', '\x109', + '\x10A', '\x5', '\xAF', 'X', '\x2', '\x10A', '@', '\x3', '\x2', '\x2', + '\x2', '\x10B', '\x10C', '\x5', '\x8B', '\x46', '\x2', '\x10C', '\x10D', + '\x5', '\xAF', 'X', '\x2', '\x10D', '\x10E', '\x5', '\x8F', 'H', '\x2', + '\x10E', '\x42', '\x3', '\x2', '\x2', '\x2', '\x10F', '\x110', '\x5', + '\x8D', 'G', '\x2', '\x110', '\x111', '\x5', '\x93', 'J', '\x2', '\x111', + '\x112', '\x5', '\xB1', 'Y', '\x2', '\x112', '\x113', '\x5', '\xB7', '\\', + '\x2', '\x113', '\x114', '\x5', '\x93', 'J', '\x2', '\x114', '\x115', + '\x5', '\x93', 'J', '\x2', '\x115', '\x116', '\x5', '\xA5', 'S', '\x2', + '\x116', '\x44', '\x3', '\x2', '\x2', '\x2', '\x117', '\x118', '\x5', + '\x8D', 'G', '\x2', '\x118', '\x119', '\x5', '\xBB', '^', '\x2', '\x119', + '\x46', '\x3', '\x2', '\x2', '\x2', '\x11A', '\x11B', '\x5', '\x91', 'I', + '\x2', '\x11B', '\x11C', '\x5', '\x93', 'J', '\x2', '\x11C', '\x11D', + '\x5', '\xAF', 'X', '\x2', '\x11D', '\x11E', '\x5', '\x8F', 'H', '\x2', + '\x11E', 'H', '\x3', '\x2', '\x2', '\x2', '\x11F', '\x120', '\x5', '\x91', + 'I', '\x2', '\x120', '\x121', '\x5', '\x9B', 'N', '\x2', '\x121', '\x122', + '\x5', '\xAF', 'X', '\x2', '\x122', '\x123', '\x5', '\xB1', 'Y', '\x2', + '\x123', '\x124', '\x5', '\x9B', 'N', '\x2', '\x124', '\x125', '\x5', + '\xA5', 'S', '\x2', '\x125', '\x126', '\x5', '\x8F', 'H', '\x2', '\x126', + '\x127', '\x5', '\xB1', 'Y', '\x2', '\x127', 'J', '\x3', '\x2', '\x2', + '\x2', '\x128', '\x129', '\x5', '\x93', 'J', '\x2', '\x129', '\x12A', + '\x5', '\xAF', 'X', '\x2', '\x12A', '\x12B', '\x5', '\x8F', 'H', '\x2', + '\x12B', '\x12C', '\x5', '\x8B', '\x46', '\x2', '\x12C', '\x12D', '\x5', + '\xA9', 'U', '\x2', '\x12D', '\x12E', '\x5', '\x93', 'J', '\x2', '\x12E', + 'L', '\x3', '\x2', '\x2', '\x2', '\x12F', '\x130', '\x5', '\x93', 'J', + '\x2', '\x130', '\x131', '\x5', '\xB9', ']', '\x2', '\x131', '\x132', + '\x5', '\x9B', 'N', '\x2', '\x132', '\x133', '\x5', '\xAF', 'X', '\x2', + '\x133', '\x134', '\x5', '\xB1', 'Y', '\x2', '\x134', '\x135', '\x5', + '\xAF', 'X', '\x2', '\x135', 'N', '\x3', '\x2', '\x2', '\x2', '\x136', + '\x137', '\a', 'h', '\x2', '\x2', '\x137', '\x138', '\a', '\x63', '\x2', + '\x2', '\x138', '\x139', '\a', 'n', '\x2', '\x2', '\x139', '\x13A', '\a', + 'u', '\x2', '\x2', '\x13A', '\x13B', '\a', 'g', '\x2', '\x2', '\x13B', + 'P', '\x3', '\x2', '\x2', '\x2', '\x13C', '\x13D', '\x5', '\x95', 'K', + '\x2', '\x13D', '\x13E', '\x5', '\xAD', 'W', '\x2', '\x13E', '\x13F', + '\x5', '\xA7', 'T', '\x2', '\x13F', '\x140', '\x5', '\xA3', 'R', '\x2', + '\x140', 'R', '\x3', '\x2', '\x2', '\x2', '\x141', '\x142', '\x5', '\x97', + 'L', '\x2', '\x142', '\x143', '\x5', '\xAD', 'W', '\x2', '\x143', '\x144', + '\x5', '\xA7', 'T', '\x2', '\x144', '\x145', '\x5', '\xB3', 'Z', '\x2', + '\x145', '\x146', '\x5', '\xA9', 'U', '\x2', '\x146', 'T', '\x3', '\x2', + '\x2', '\x2', '\x147', '\x148', '\x5', '\x9B', 'N', '\x2', '\x148', '\x149', + '\x5', '\xA5', 'S', '\x2', '\x149', 'V', '\x3', '\x2', '\x2', '\x2', '\x14A', + '\x14B', '\x5', '\x9D', 'O', '\x2', '\x14B', '\x14C', '\x5', '\xA7', 'T', + '\x2', '\x14C', '\x14D', '\x5', '\x9B', 'N', '\x2', '\x14D', '\x14E', + '\x5', '\xA5', 'S', '\x2', '\x14E', 'X', '\x3', '\x2', '\x2', '\x2', '\x14F', + '\x150', '\x5', '\xA1', 'Q', '\x2', '\x150', '\x151', '\x5', '\x9B', 'N', + '\x2', '\x151', '\x152', '\x5', '\x9F', 'P', '\x2', '\x152', '\x153', + '\x5', '\x93', 'J', '\x2', '\x153', 'Z', '\x3', '\x2', '\x2', '\x2', '\x154', + '\x155', '\x5', '\xA1', 'Q', '\x2', '\x155', '\x156', '\x5', '\x9B', 'N', + '\x2', '\x156', '\x157', '\x5', '\xA3', 'R', '\x2', '\x157', '\x158', + '\x5', '\x9B', 'N', '\x2', '\x158', '\x159', '\x5', '\xB1', 'Y', '\x2', + '\x159', '\\', '\x3', '\x2', '\x2', '\x2', '\x15A', '\x15B', '\x5', '\xA5', + 'S', '\x2', '\x15B', '\x15C', '\x5', '\xA7', 'T', '\x2', '\x15C', '\x15D', + '\x5', '\xB1', 'Y', '\x2', '\x15D', '^', '\x3', '\x2', '\x2', '\x2', '\x15E', + '\x15F', '\a', 'p', '\x2', '\x2', '\x15F', '\x160', '\a', 'w', '\x2', + '\x2', '\x160', '\x161', '\a', 'n', '\x2', '\x2', '\x161', '\x162', '\a', + 'n', '\x2', '\x2', '\x162', '`', '\x3', '\x2', '\x2', '\x2', '\x163', + '\x164', '\x5', '\xA7', 'T', '\x2', '\x164', '\x165', '\x5', '\x95', 'K', + '\x2', '\x165', '\x166', '\x5', '\x95', 'K', '\x2', '\x166', '\x167', + '\x5', '\xAF', 'X', '\x2', '\x167', '\x168', '\x5', '\x93', 'J', '\x2', + '\x168', '\x169', '\x5', '\xB1', 'Y', '\x2', '\x169', '\x62', '\x3', '\x2', + '\x2', '\x2', '\x16A', '\x16B', '\x5', '\xA7', 'T', '\x2', '\x16B', '\x16C', + '\x5', '\xAD', 'W', '\x2', '\x16C', '\x64', '\x3', '\x2', '\x2', '\x2', + '\x16D', '\x16E', '\x5', '\xA7', 'T', '\x2', '\x16E', '\x16F', '\x5', + '\xAD', 'W', '\x2', '\x16F', '\x170', '\x5', '\x91', 'I', '\x2', '\x170', + '\x171', '\x5', '\x93', 'J', '\x2', '\x171', '\x172', '\x5', '\xAD', 'W', + '\x2', '\x172', '\x66', '\x3', '\x2', '\x2', '\x2', '\x173', '\x174', + '\x5', '\xAF', 'X', '\x2', '\x174', '\x175', '\x5', '\x93', 'J', '\x2', + '\x175', '\x176', '\x5', '\xA1', 'Q', '\x2', '\x176', '\x177', '\x5', + '\x93', 'J', '\x2', '\x177', '\x178', '\x5', '\x8F', 'H', '\x2', '\x178', + '\x179', '\x5', '\xB1', 'Y', '\x2', '\x179', 'h', '\x3', '\x2', '\x2', + '\x2', '\x17A', '\x17B', '\x5', '\xB1', 'Y', '\x2', '\x17B', '\x17C', + '\x5', '\xA7', 'T', '\x2', '\x17C', '\x17D', '\x5', '\xA9', 'U', '\x2', + '\x17D', 'j', '\x3', '\x2', '\x2', '\x2', '\x17E', '\x17F', '\a', 'v', + '\x2', '\x2', '\x17F', '\x180', '\a', 't', '\x2', '\x2', '\x180', '\x181', + '\a', 'w', '\x2', '\x2', '\x181', '\x182', '\a', 'g', '\x2', '\x2', '\x182', + 'l', '\x3', '\x2', '\x2', '\x2', '\x183', '\x184', '\a', 'w', '\x2', '\x2', + '\x184', '\x185', '\a', '\x66', '\x2', '\x2', '\x185', '\x186', '\a', + 'h', '\x2', '\x2', '\x186', 'n', '\x3', '\x2', '\x2', '\x2', '\x187', + '\x188', '\a', 'w', '\x2', '\x2', '\x188', '\x189', '\a', 'p', '\x2', + '\x2', '\x189', '\x18A', '\a', '\x66', '\x2', '\x2', '\x18A', '\x18B', + '\a', 'g', '\x2', '\x2', '\x18B', '\x18C', '\a', 'h', '\x2', '\x2', '\x18C', + '\x18D', '\a', 'k', '\x2', '\x2', '\x18D', '\x18E', '\a', 'p', '\x2', + '\x2', '\x18E', '\x18F', '\a', 'g', '\x2', '\x2', '\x18F', '\x190', '\a', + '\x66', '\x2', '\x2', '\x190', 'p', '\x3', '\x2', '\x2', '\x2', '\x191', + '\x192', '\x5', '\xB5', '[', '\x2', '\x192', '\x193', '\x5', '\x8B', '\x46', + '\x2', '\x193', '\x194', '\x5', '\xA1', 'Q', '\x2', '\x194', '\x195', + '\x5', '\xB3', 'Z', '\x2', '\x195', '\x196', '\x5', '\x93', 'J', '\x2', + '\x196', 'r', '\x3', '\x2', '\x2', '\x2', '\x197', '\x198', '\x5', '\xB7', + '\\', '\x2', '\x198', '\x199', '\x5', '\x99', 'M', '\x2', '\x199', '\x19A', + '\x5', '\x93', 'J', '\x2', '\x19A', '\x19B', '\x5', '\xAD', 'W', '\x2', + '\x19B', '\x19C', '\x5', '\x93', 'J', '\x2', '\x19C', 't', '\x3', '\x2', + '\x2', '\x2', '\x19D', '\x19F', '\t', '\x2', '\x2', '\x2', '\x19E', '\x19D', + '\x3', '\x2', '\x2', '\x2', '\x19F', '\x1A0', '\x3', '\x2', '\x2', '\x2', + '\x1A0', '\x19E', '\x3', '\x2', '\x2', '\x2', '\x1A0', '\x1A1', '\x3', + '\x2', '\x2', '\x2', '\x1A1', '\x1A2', '\x3', '\x2', '\x2', '\x2', '\x1A2', + '\x1A3', '\b', ';', '\x2', '\x2', '\x1A3', 'v', '\x3', '\x2', '\x2', '\x2', + '\x1A4', '\x1A6', '\t', '\x3', '\x2', '\x2', '\x1A5', '\x1A4', '\x3', + '\x2', '\x2', '\x2', '\x1A5', '\x1A6', '\x3', '\x2', '\x2', '\x2', '\x1A6', + '\x1A8', '\x3', '\x2', '\x2', '\x2', '\x1A7', '\x1A9', '\x5', '\x89', + '\x45', '\x2', '\x1A8', '\x1A7', '\x3', '\x2', '\x2', '\x2', '\x1A9', + '\x1AA', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1A8', '\x3', '\x2', '\x2', + '\x2', '\x1AA', '\x1AB', '\x3', '\x2', '\x2', '\x2', '\x1AB', '\x1B3', + '\x3', '\x2', '\x2', '\x2', '\x1AC', '\x1B0', '\a', '\x30', '\x2', '\x2', + '\x1AD', '\x1AF', '\x5', '\x89', '\x45', '\x2', '\x1AE', '\x1AD', '\x3', + '\x2', '\x2', '\x2', '\x1AF', '\x1B2', '\x3', '\x2', '\x2', '\x2', '\x1B0', + '\x1AE', '\x3', '\x2', '\x2', '\x2', '\x1B0', '\x1B1', '\x3', '\x2', '\x2', + '\x2', '\x1B1', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B0', + '\x3', '\x2', '\x2', '\x2', '\x1B3', '\x1AC', '\x3', '\x2', '\x2', '\x2', + '\x1B3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B4', '\x1BE', '\x3', + '\x2', '\x2', '\x2', '\x1B5', '\x1B7', '\x5', '\x93', 'J', '\x2', '\x1B6', + '\x1B8', '\t', '\x3', '\x2', '\x2', '\x1B7', '\x1B6', '\x3', '\x2', '\x2', + '\x2', '\x1B7', '\x1B8', '\x3', '\x2', '\x2', '\x2', '\x1B8', '\x1BA', + '\x3', '\x2', '\x2', '\x2', '\x1B9', '\x1BB', '\x5', '\x89', '\x45', '\x2', + '\x1BA', '\x1B9', '\x3', '\x2', '\x2', '\x2', '\x1BB', '\x1BC', '\x3', + '\x2', '\x2', '\x2', '\x1BC', '\x1BA', '\x3', '\x2', '\x2', '\x2', '\x1BC', + '\x1BD', '\x3', '\x2', '\x2', '\x2', '\x1BD', '\x1BF', '\x3', '\x2', '\x2', + '\x2', '\x1BE', '\x1B5', '\x3', '\x2', '\x2', '\x2', '\x1BE', '\x1BF', + '\x3', '\x2', '\x2', '\x2', '\x1BF', '\x1D5', '\x3', '\x2', '\x2', '\x2', + '\x1C0', '\x1C2', '\t', '\x3', '\x2', '\x2', '\x1C1', '\x1C0', '\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', + '\x1C3', '\x3', '\x2', '\x2', '\x2', '\x1C3', '\x1C5', '\a', '\x30', '\x2', + '\x2', '\x1C4', '\x1C6', '\x5', '\x89', '\x45', '\x2', '\x1C5', '\x1C4', + '\x3', '\x2', '\x2', '\x2', '\x1C6', '\x1C7', '\x3', '\x2', '\x2', '\x2', + '\x1C7', '\x1C5', '\x3', '\x2', '\x2', '\x2', '\x1C7', '\x1C8', '\x3', + '\x2', '\x2', '\x2', '\x1C8', '\x1D2', '\x3', '\x2', '\x2', '\x2', '\x1C9', + '\x1CB', '\x5', '\x93', 'J', '\x2', '\x1CA', '\x1CC', '\t', '\x3', '\x2', + '\x2', '\x1CB', '\x1CA', '\x3', '\x2', '\x2', '\x2', '\x1CB', '\x1CC', + '\x3', '\x2', '\x2', '\x2', '\x1CC', '\x1CE', '\x3', '\x2', '\x2', '\x2', + '\x1CD', '\x1CF', '\x5', '\x89', '\x45', '\x2', '\x1CE', '\x1CD', '\x3', + '\x2', '\x2', '\x2', '\x1CF', '\x1D0', '\x3', '\x2', '\x2', '\x2', '\x1D0', + '\x1CE', '\x3', '\x2', '\x2', '\x2', '\x1D0', '\x1D1', '\x3', '\x2', '\x2', + '\x2', '\x1D1', '\x1D3', '\x3', '\x2', '\x2', '\x2', '\x1D2', '\x1C9', + '\x3', '\x2', '\x2', '\x2', '\x1D2', '\x1D3', '\x3', '\x2', '\x2', '\x2', + '\x1D3', '\x1D5', '\x3', '\x2', '\x2', '\x2', '\x1D4', '\x1A5', '\x3', + '\x2', '\x2', '\x2', '\x1D4', '\x1C1', '\x3', '\x2', '\x2', '\x2', '\x1D5', + 'x', '\x3', '\x2', '\x2', '\x2', '\x1D6', '\x1DB', '\a', '$', '\x2', '\x2', + '\x1D7', '\x1DA', '\x5', '{', '>', '\x2', '\x1D8', '\x1DA', '\x5', '\x83', + '\x42', '\x2', '\x1D9', '\x1D7', '\x3', '\x2', '\x2', '\x2', '\x1D9', + '\x1D8', '\x3', '\x2', '\x2', '\x2', '\x1DA', '\x1DD', '\x3', '\x2', '\x2', + '\x2', '\x1DB', '\x1D9', '\x3', '\x2', '\x2', '\x2', '\x1DB', '\x1DC', + '\x3', '\x2', '\x2', '\x2', '\x1DC', '\x1DE', '\x3', '\x2', '\x2', '\x2', + '\x1DD', '\x1DB', '\x3', '\x2', '\x2', '\x2', '\x1DE', '\x1E9', '\a', + '$', '\x2', '\x2', '\x1DF', '\x1E4', '\a', ')', '\x2', '\x2', '\x1E0', + '\x1E3', '\x5', '{', '>', '\x2', '\x1E1', '\x1E3', '\x5', '\x81', '\x41', + '\x2', '\x1E2', '\x1E0', '\x3', '\x2', '\x2', '\x2', '\x1E2', '\x1E1', + '\x3', '\x2', '\x2', '\x2', '\x1E3', '\x1E6', '\x3', '\x2', '\x2', '\x2', + '\x1E4', '\x1E2', '\x3', '\x2', '\x2', '\x2', '\x1E4', '\x1E5', '\x3', + '\x2', '\x2', '\x2', '\x1E5', '\x1E7', '\x3', '\x2', '\x2', '\x2', '\x1E6', + '\x1E4', '\x3', '\x2', '\x2', '\x2', '\x1E7', '\x1E9', '\a', ')', '\x2', + '\x2', '\x1E8', '\x1D6', '\x3', '\x2', '\x2', '\x2', '\x1E8', '\x1DF', + '\x3', '\x2', '\x2', '\x2', '\x1E9', 'z', '\x3', '\x2', '\x2', '\x2', + '\x1EA', '\x1ED', '\a', '^', '\x2', '\x2', '\x1EB', '\x1EE', '\t', '\x4', + '\x2', '\x2', '\x1EC', '\x1EE', '\x5', '}', '?', '\x2', '\x1ED', '\x1EB', + '\x3', '\x2', '\x2', '\x2', '\x1ED', '\x1EC', '\x3', '\x2', '\x2', '\x2', + '\x1EE', '|', '\x3', '\x2', '\x2', '\x2', '\x1EF', '\x1F0', '\a', 'w', + '\x2', '\x2', '\x1F0', '\x1F1', '\x5', '\x7F', '@', '\x2', '\x1F1', '\x1F2', + '\x5', '\x7F', '@', '\x2', '\x1F2', '\x1F3', '\x5', '\x7F', '@', '\x2', + '\x1F3', '\x1F4', '\x5', '\x7F', '@', '\x2', '\x1F4', '~', '\x3', '\x2', + '\x2', '\x2', '\x1F5', '\x1F6', '\t', '\x5', '\x2', '\x2', '\x1F6', '\x80', + '\x3', '\x2', '\x2', '\x2', '\x1F7', '\x1F8', '\n', '\x6', '\x2', '\x2', + '\x1F8', '\x82', '\x3', '\x2', '\x2', '\x2', '\x1F9', '\x1FA', '\n', '\a', + '\x2', '\x2', '\x1FA', '\x84', '\x3', '\x2', '\x2', '\x2', '\x1FB', '\x206', + '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x206', '\x5', '\x39', '\x1D', '\x2', + '\x1FD', '\x202', '\t', '\b', '\x2', '\x2', '\x1FE', '\x201', '\t', '\b', + '\x2', '\x2', '\x1FF', '\x201', '\x5', '\x89', '\x45', '\x2', '\x200', + '\x1FE', '\x3', '\x2', '\x2', '\x2', '\x200', '\x1FF', '\x3', '\x2', '\x2', + '\x2', '\x201', '\x204', '\x3', '\x2', '\x2', '\x2', '\x202', '\x200', + '\x3', '\x2', '\x2', '\x2', '\x202', '\x203', '\x3', '\x2', '\x2', '\x2', + '\x203', '\x206', '\x3', '\x2', '\x2', '\x2', '\x204', '\x202', '\x3', + '\x2', '\x2', '\x2', '\x205', '\x1FB', '\x3', '\x2', '\x2', '\x2', '\x205', + '\x1FC', '\x3', '\x2', '\x2', '\x2', '\x205', '\x1FD', '\x3', '\x2', '\x2', + '\x2', '\x206', '\x86', '\x3', '\x2', '\x2', '\x2', '\x207', '\x208', + '\a', '\x42', '\x2', '\x2', '\x208', '\x209', '\x5', '\x85', '\x43', '\x2', + '\x209', '\x88', '\x3', '\x2', '\x2', '\x2', '\x20A', '\x20B', '\t', '\t', + '\x2', '\x2', '\x20B', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x20C', '\x20D', + '\t', '\n', '\x2', '\x2', '\x20D', '\x8C', '\x3', '\x2', '\x2', '\x2', + '\x20E', '\x20F', '\t', '\v', '\x2', '\x2', '\x20F', '\x8E', '\x3', '\x2', + '\x2', '\x2', '\x210', '\x211', '\t', '\f', '\x2', '\x2', '\x211', '\x90', + '\x3', '\x2', '\x2', '\x2', '\x212', '\x213', '\t', '\r', '\x2', '\x2', + '\x213', '\x92', '\x3', '\x2', '\x2', '\x2', '\x214', '\x215', '\t', '\xE', + '\x2', '\x2', '\x215', '\x94', '\x3', '\x2', '\x2', '\x2', '\x216', '\x217', + '\t', '\xF', '\x2', '\x2', '\x217', '\x96', '\x3', '\x2', '\x2', '\x2', + '\x218', '\x219', '\t', '\x10', '\x2', '\x2', '\x219', '\x98', '\x3', + '\x2', '\x2', '\x2', '\x21A', '\x21B', '\t', '\x11', '\x2', '\x2', '\x21B', + '\x9A', '\x3', '\x2', '\x2', '\x2', '\x21C', '\x21D', '\t', '\x12', '\x2', + '\x2', '\x21D', '\x9C', '\x3', '\x2', '\x2', '\x2', '\x21E', '\x21F', + '\t', '\x13', '\x2', '\x2', '\x21F', '\x9E', '\x3', '\x2', '\x2', '\x2', + '\x220', '\x221', '\t', '\x14', '\x2', '\x2', '\x221', '\xA0', '\x3', + '\x2', '\x2', '\x2', '\x222', '\x223', '\t', '\x15', '\x2', '\x2', '\x223', + '\xA2', '\x3', '\x2', '\x2', '\x2', '\x224', '\x225', '\t', '\x16', '\x2', + '\x2', '\x225', '\xA4', '\x3', '\x2', '\x2', '\x2', '\x226', '\x227', + '\t', '\x17', '\x2', '\x2', '\x227', '\xA6', '\x3', '\x2', '\x2', '\x2', + '\x228', '\x229', '\t', '\x18', '\x2', '\x2', '\x229', '\xA8', '\x3', + '\x2', '\x2', '\x2', '\x22A', '\x22B', '\t', '\x19', '\x2', '\x2', '\x22B', + '\xAA', '\x3', '\x2', '\x2', '\x2', '\x22C', '\x22D', '\t', '\x1A', '\x2', + '\x2', '\x22D', '\xAC', '\x3', '\x2', '\x2', '\x2', '\x22E', '\x22F', + '\t', '\x1B', '\x2', '\x2', '\x22F', '\xAE', '\x3', '\x2', '\x2', '\x2', + '\x230', '\x231', '\t', '\x1C', '\x2', '\x2', '\x231', '\xB0', '\x3', + '\x2', '\x2', '\x2', '\x232', '\x233', '\t', '\x1D', '\x2', '\x2', '\x233', + '\xB2', '\x3', '\x2', '\x2', '\x2', '\x234', '\x235', '\t', '\x1E', '\x2', + '\x2', '\x235', '\xB4', '\x3', '\x2', '\x2', '\x2', '\x236', '\x237', + '\t', '\x1F', '\x2', '\x2', '\x237', '\xB6', '\x3', '\x2', '\x2', '\x2', + '\x238', '\x239', '\t', ' ', '\x2', '\x2', '\x239', '\xB8', '\x3', '\x2', + '\x2', '\x2', '\x23A', '\x23B', '\t', '!', '\x2', '\x2', '\x23B', '\xBA', + '\x3', '\x2', '\x2', '\x2', '\x23C', '\x23D', '\t', '\"', '\x2', '\x2', + '\x23D', '\xBC', '\x3', '\x2', '\x2', '\x2', '\x23E', '\x23F', '\t', '#', + '\x2', '\x2', '\x23F', '\xBE', '\x3', '\x2', '\x2', '\x2', '\x1A', '\x2', + '\x1A0', '\x1A5', '\x1AA', '\x1B0', '\x1B3', '\x1B7', '\x1BC', '\x1BE', + '\x1C1', '\x1C7', '\x1CB', '\x1D0', '\x1D2', '\x1D4', '\x1D9', '\x1DB', + '\x1E2', '\x1E4', '\x1E8', '\x1ED', '\x200', '\x202', '\x205', '\x3', '\b', '\x2', '\x2', }; diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs index 5de50b9faa..0a6f113697 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs @@ -31,6 +31,7 @@ using DFA = Antlr4.Runtime.Dfa.DFA; [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] +[System.CLSCompliant(false)] internal partial class sqlParser : Parser { protected static DFA[] decisionToDFA; protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); @@ -38,12 +39,12 @@ 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_LIKE=44, + K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, + K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, + WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, IDENTIFIER=61, PARAMETER=62; 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, @@ -78,19 +79,19 @@ public const int 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, "'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_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" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -123,7 +124,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); @@ -458,6 +458,7 @@ public SelectionContext selection() { case T__13: case T__24: case T__25: + case K_ALL: case K_ARRAY: case K_EXISTS: case K_FALSE: @@ -2789,6 +2790,7 @@ public Unary_scalar_expressionContext unary_scalar_expression() { case T__2: case T__5: case T__25: + case K_ALL: case K_ARRAY: case K_EXISTS: case K_FALSE: @@ -2894,98 +2896,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 ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 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 ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public ITerminalNode K_UDF() { return GetToken(sqlParser.K_UDF, 0); } + public Scalar_expression_listContext scalar_expression_list() { + 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 +3088,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,28 +3128,6 @@ 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); @@ -3144,7 +3166,7 @@ private Primary_expressionContext primary_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 396; + State = 401; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,37,Context) ) { case 1: @@ -3181,7 +3203,7 @@ private Primary_expressionContext primary_expression(int _p) { State = 360; 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) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__5) | (1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << T__25) | (1L << K_ALL) | (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 = 359; scalar_expression_list(); } @@ -3228,7 +3250,7 @@ private Primary_expressionContext primary_expression(int _p) { 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)) { + 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_ALL) | (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(); } @@ -3279,9 +3301,20 @@ private Primary_expressionContext primary_expression(int _p) { State = 394; Match(T__3); } break; + case 11: + { + _localctx = new AllScalarExpressionContext(_localctx); + Context = _localctx; + _prevctx = _localctx; + State = 396; Match(K_ALL); + State = 397; Match(T__2); + State = 398; sql_query(); + State = 399; Match(T__3); + } + break; } Context.Stop = TokenStream.LT(-1); - State = 408; + State = 413; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -3290,34 +3323,34 @@ private Primary_expressionContext primary_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 406; + State = 411; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,38,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 = 403; + if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); + State = 404; Match(T__4); + State = 405; Match(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 = 406; + if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); + State = 407; Match(T__5); + State = 408; scalar_expression(0); + State = 409; Match(T__6); } break; } } } - State = 410; + State = 415; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); } @@ -3369,18 +3402,18 @@ public Scalar_expression_listContext scalar_expression_list() { try { EnterOuterAlt(_localctx, 1); { - State = 411; scalar_expression(0); - State = 416; + State = 416; scalar_expression(0); + State = 421; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 412; Match(T__1); - State = 413; scalar_expression(0); + State = 417; Match(T__1); + State = 418; scalar_expression(0); } } - State = 418; + State = 423; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3432,18 +3465,18 @@ public Object_property_listContext object_property_list() { try { EnterOuterAlt(_localctx, 1); { - State = 419; object_property(); - State = 424; + State = 424; object_property(); + State = 429; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 420; Match(T__1); - State = 421; object_property(); + State = 425; Match(T__1); + State = 426; object_property(); } } - State = 426; + State = 431; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3492,9 +3525,9 @@ public Object_propertyContext object_property() { try { EnterOuterAlt(_localctx, 1); { - State = 427; Match(STRING_LITERAL); - State = 428; Match(T__8); - State = 429; scalar_expression(0); + State = 432; Match(STRING_LITERAL); + State = 433; Match(T__8); + State = 434; scalar_expression(0); } } catch (RecognitionException re) { @@ -3543,7 +3576,7 @@ public LiteralContext literal() { try { EnterOuterAlt(_localctx, 1); { - State = 431; + State = 436; _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 +3652,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, 5); + case 17: return Precpred(Context, 4); } 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', '@', '\x1B9', '\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', @@ -3705,101 +3738,102 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '\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', - '(', '\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', - '\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', + '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\x3', '(', '\x5', '(', '\x194', '\n', '(', '\x3', '(', '\x3', '(', '\x3', + '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\a', + '(', '\x19E', '\n', '(', '\f', '(', '\xE', '(', '\x1A1', '\v', '(', '\x3', + ')', '\x3', ')', '\x3', ')', '\a', ')', '\x1A6', '\n', ')', '\f', ')', + '\xE', ')', '\x1A9', '\v', ')', '\x3', '*', '\x3', '*', '\x3', '*', '\a', + '*', '\x1AE', '\n', '*', '\f', '*', '\xE', '*', '\x1B1', '\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', '\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', '\x30', '\x30', '\a', '\x2', ')', ')', '\x31', '\x31', + '\x37', '\x37', '\x39', '\x39', '=', '>', '\x2', '\x1C9', '\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', '\x193', + '\x3', '\x2', '\x2', '\x2', 'P', '\x1A2', '\x3', '\x2', '\x2', '\x2', + 'R', '\x1AA', '\x3', '\x2', '\x2', '\x2', 'T', '\x1B2', '\x3', '\x2', + '\x2', '\x2', 'V', '\x1B6', '\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', '\x35', '\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', '\x36', '\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', + ':', '\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', + '\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', + '\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', + '\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', + '?', '\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', + '\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', + '\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', + '\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', @@ -3808,22 +3842,22 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '\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', + '\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', + '\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', + '\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', + '\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', + '\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', '\x2', '\x2', '\xC8', '\xC9', '\a', '\x34', '\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', @@ -3834,18 +3868,18 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '&', '\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', + '\x2', '\x2', '\x2', '\xDA', '\xDB', '\a', '\x32', '\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', + '\x5', '\x38', '\x1D', '\x2', '\xE6', '\xE8', '\a', '\x30', '\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', + '\a', '#', '\x2', '\x2', '\xEA', '\xEB', '\x5', '\x38', '\x1D', '\x2', + '\xEB', '\xEC', '\a', '\x1F', '\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', @@ -3864,29 +3898,29 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '\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', + '\a', '\x1F', '\x2', '\x2', '\x106', '\x10B', '\x5', '\x30', '\x19', '\x5', + '\x107', '\x108', '\f', '\x3', '\x2', '\x2', '\x108', '\x109', '\a', '\x33', '\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', + '\x112', '\a', '\x30', '\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', + '\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', + '\x2', '\x119', '\x11B', '\a', '\x30', '\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', @@ -3931,70 +3965,74 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int '\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', '\x164', '\x165', '\b', '(', '\x1', '\x2', '\x165', '\x194', '\a', + '?', '\x2', '\x2', '\x166', '\x194', '\a', '@', '\x2', '\x2', '\x167', + '\x194', '\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', + '\x16C', '\x3', '\x2', '\x2', '\x2', '\x16C', '\x194', '\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', '\x2', '\x2', '\x171', '\x194', '\a', '\x1D', '\x2', '\x2', '\x172', + '\x173', '\a', '\x38', '\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', + '\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', + '\x17A', '\x17B', '\x3', '\x2', '\x2', '\x2', '\x17B', '\x194', '\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', + '\x2', '\x17F', '\x194', '\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', + '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', '\x194', '\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', + '\x2', '\x187', '\x188', '\a', '\x6', '\x2', '\x2', '\x188', '\x194', + '\x3', '\x2', '\x2', '\x2', '\x189', '\x18A', '\a', ' ', '\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', + '\x194', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x18F', '\a', '\x1E', '\x2', + '\x2', '\x18F', '\x190', '\a', '\x5', '\x2', '\x2', '\x190', '\x191', + '\x5', '\x4', '\x3', '\x2', '\x191', '\x192', '\a', '\x6', '\x2', '\x2', + '\x192', '\x194', '\x3', '\x2', '\x2', '\x2', '\x193', '\x164', '\x3', + '\x2', '\x2', '\x2', '\x193', '\x166', '\x3', '\x2', '\x2', '\x2', '\x193', + '\x167', '\x3', '\x2', '\x2', '\x2', '\x193', '\x168', '\x3', '\x2', '\x2', + '\x2', '\x193', '\x16D', '\x3', '\x2', '\x2', '\x2', '\x193', '\x174', + '\x3', '\x2', '\x2', '\x2', '\x193', '\x17C', '\x3', '\x2', '\x2', '\x2', + '\x193', '\x180', '\x3', '\x2', '\x2', '\x2', '\x193', '\x184', '\x3', + '\x2', '\x2', '\x2', '\x193', '\x189', '\x3', '\x2', '\x2', '\x2', '\x193', + '\x18E', '\x3', '\x2', '\x2', '\x2', '\x194', '\x19F', '\x3', '\x2', '\x2', + '\x2', '\x195', '\x196', '\f', '\a', '\x2', '\x2', '\x196', '\x197', '\a', + '\a', '\x2', '\x2', '\x197', '\x19E', '\a', '?', '\x2', '\x2', '\x198', + '\x199', '\f', '\x6', '\x2', '\x2', '\x199', '\x19A', '\a', '\b', '\x2', + '\x2', '\x19A', '\x19B', '\x5', '.', '\x18', '\x2', '\x19B', '\x19C', + '\a', '\t', '\x2', '\x2', '\x19C', '\x19E', '\x3', '\x2', '\x2', '\x2', + '\x19D', '\x195', '\x3', '\x2', '\x2', '\x2', '\x19D', '\x198', '\x3', + '\x2', '\x2', '\x2', '\x19E', '\x1A1', '\x3', '\x2', '\x2', '\x2', '\x19F', + '\x19D', '\x3', '\x2', '\x2', '\x2', '\x19F', '\x1A0', '\x3', '\x2', '\x2', + '\x2', '\x1A0', 'O', '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x19F', '\x3', + '\x2', '\x2', '\x2', '\x1A2', '\x1A7', '\x5', '.', '\x18', '\x2', '\x1A3', + '\x1A4', '\a', '\x4', '\x2', '\x2', '\x1A4', '\x1A6', '\x5', '.', '\x18', + '\x2', '\x1A5', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x1A6', '\x1A9', + '\x3', '\x2', '\x2', '\x2', '\x1A7', '\x1A5', '\x3', '\x2', '\x2', '\x2', + '\x1A7', '\x1A8', '\x3', '\x2', '\x2', '\x2', '\x1A8', 'Q', '\x3', '\x2', + '\x2', '\x2', '\x1A9', '\x1A7', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1AF', + '\x5', 'T', '+', '\x2', '\x1AB', '\x1AC', '\a', '\x4', '\x2', '\x2', '\x1AC', + '\x1AE', '\x5', 'T', '+', '\x2', '\x1AD', '\x1AB', '\x3', '\x2', '\x2', + '\x2', '\x1AE', '\x1B1', '\x3', '\x2', '\x2', '\x2', '\x1AF', '\x1AD', + '\x3', '\x2', '\x2', '\x2', '\x1AF', '\x1B0', '\x3', '\x2', '\x2', '\x2', + '\x1B0', 'S', '\x3', '\x2', '\x2', '\x2', '\x1B1', '\x1AF', '\x3', '\x2', + '\x2', '\x2', '\x1B2', '\x1B3', '\a', '>', '\x2', '\x2', '\x1B3', '\x1B4', + '\a', '\v', '\x2', '\x2', '\x1B4', '\x1B5', '\x5', '.', '\x18', '\x2', + '\x1B5', 'U', '\x3', '\x2', '\x2', '\x2', '\x1B6', '\x1B7', '\t', '\t', + '\x2', '\x2', '\x1B7', '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', '\x193', + '\x19D', '\x19F', '\x1A7', '\x1AF', }; public static readonly ATN _ATN = From 08341def44ae84835e12b18357b44a49bef504b4 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Wed, 12 Oct 2022 08:37:59 -0700 Subject: [PATCH 03/16] Parsing for ALL --- .../src/Query/Core/Parser/CstToAstVisitor.cs | 35 +- .../src/Query/Core/Parser/IsqlListener.cs | 11 +- .../src/Query/Core/Parser/IsqlVisitor.cs | 7 +- .../src/Query/Core/Parser/sql.g4 | 27 +- .../src/Query/Core/Parser/sqlBaseListener.cs | 13 +- .../src/Query/Core/Parser/sqlBaseVisitor.cs | 11 +- .../src/Query/Core/Parser/sqlLexer.cs | 361 +++-- .../src/Query/Core/Parser/sqlParser.cs | 1305 +++++++++-------- 8 files changed, 945 insertions(+), 825 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs index 6b1de2883e..9df2d48826 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,10 @@ 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? ')' + // (K_UDF '.')? identifier '(' scalar_expression_list? ')' bool udf = context.K_UDF() != null; - SqlIdentifier identifier = SqlIdentifier.Create(context.IDENTIFIER().GetText()); + SqlIdentifier identifier = SqlIdentifier.Create(context.identifier().GetText()); List arguments = new List(); if (context.scalar_expression_list() != null) { @@ -719,20 +728,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 753eef53f7..26bb6b3532 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs @@ -28,7 +28,6 @@ /// . /// [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal interface IsqlListener : IParseTreeListener { /// /// Enter a parse tree produced by . @@ -713,6 +712,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 518445ad31..b697d0673f 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs @@ -29,7 +29,6 @@ /// /// The return type of the visit operation. [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal interface IsqlVisitor : IParseTreeVisitor { /// /// Visit a parse tree produced by . @@ -436,6 +435,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..d632a723b5 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 @@ -19,7 +19,7 @@ selection 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,16 +27,16 @@ 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 (K_AS? identifier)? #AliasedCollectionExpression + | identifier K_IN collection #ArrayIteratorCollectionExpression | collection_expression K_JOIN collection_expression #JoinCollectionExpression ; collection - : IDENTIFIER path_expression? #InputPathCollection + : identifier path_expression? #InputPathCollection | '(' sql_query ')' #SubqueryCollection ; path_expression - : path_expression'.'IDENTIFIER #IdentifierPathExpression + : path_expression'.'identifier #IdentifierPathExpression | path_expression'[' NUMERIC_LITERAL ']' #NumberPathExpression | path_expression'[' STRING_LITERAL ']' #StringPathExpression | /*epsilon*/ #EpsilonPathExpression @@ -161,18 +161,19 @@ unary_operator ; primary_expression - : IDENTIFIER #PropertyRefScalarExpressionBase + : identifier #PropertyRefScalarExpressionBase | PARAMETER #ParameterRefScalarExpression | literal #LiteralScalarExpression | '[' scalar_expression_list? ']' #ArrayCreateScalarExpression | '{' object_property_list? '}' #ObjectCreateScalarExpression - | (K_UDF '.')? IDENTIFIER '(' scalar_expression_list? ')' #FunctionCallScalarExpression + | (K_UDF '.')? identifier '(' scalar_expression_list? ')' #FunctionCallScalarExpression | '(' scalar_expression ')' #ParenthesizedScalarExperession | '(' sql_query ')' #SubqueryScalarExpression - | primary_expression '.' IDENTIFIER #PropertyRefScalarExpressionRecursive + | primary_expression '.' identifier #PropertyRefScalarExpressionRecursive | primary_expression '[' scalar_expression ']' #MemberIndexerScalarExpression | K_EXISTS '(' sql_query ')' #ExistsScalarExpression | K_ARRAY '(' sql_query ')' #ArrayScalarExpression + | K_ALL '(' sql_query ')' #AllScalarExpression ; scalar_expression_list : scalar_expression (',' scalar_expression)*; @@ -180,11 +181,17 @@ 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; @@ -262,13 +269,13 @@ fragment SAFECODEPOINTWITHDOUBLEQUOTATION : ~ ["\\\u0000-\u001F] ; -IDENTIFIER +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 bf6a1e3835..beebec4b00 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs @@ -32,7 +32,6 @@ /// of the available methods. /// [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal partial class sqlBaseListener : IsqlListener { /// /// Enter a parse tree produced by . @@ -843,6 +842,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 d03ec23b48..df7ed92ed7 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs @@ -31,7 +31,6 @@ /// /// The return type of the visit operation. [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal partial class sqlBaseVisitor : AbstractParseTreeVisitor, IsqlVisitor { /// /// Visit a parse tree produced by . @@ -690,6 +689,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 634f576a74..105362273a 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs @@ -28,7 +28,6 @@ using DFA = Antlr4.Runtime.Dfa.DFA; [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal partial class sqlLexer : Lexer { protected static DFA[] decisionToDFA; protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); @@ -41,7 +40,7 @@ public const int K_EXISTS=38, K_FALSE=39, K_FROM=40, K_GROUP=41, K_IN=42, K_JOIN=43, K_LIKE=44, K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, - WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, IDENTIFIER=61, PARAMETER=62; + WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, LEX_IDENTIFIER=61, PARAMETER=62; public static string[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -60,9 +59,9 @@ public const int "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" + "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" }; @@ -91,7 +90,7 @@ public sqlLexer(ICharStream input, TextWriter output, TextWriter errorOutput) "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" + "LEX_IDENTIFIER", "PARAMETER" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -122,7 +121,7 @@ static sqlLexer() { } private static char[] _serializedATN = { '\x3', '\x608B', '\xA72A', '\x8133', '\xB9ED', '\x417C', '\x3BE7', '\x7786', - '\x5964', '\x2', '@', '\x240', '\b', '\x1', '\x4', '\x2', '\t', '\x2', + '\x5964', '\x2', '@', '\x23F', '\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', @@ -215,113 +214,113 @@ static sqlLexer() { '=', '\x3', '>', '\x3', '>', '\x3', '>', '\x5', '>', '\x1EE', '\n', '>', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '@', '\x3', '@', '\x3', '\x41', '\x3', '\x41', '\x3', '\x42', '\x3', - '\x42', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', - '\x43', '\a', '\x43', '\x201', '\n', '\x43', '\f', '\x43', '\xE', '\x43', - '\x204', '\v', '\x43', '\x5', '\x43', '\x206', '\n', '\x43', '\x3', '\x44', - '\x3', '\x44', '\x3', '\x44', '\x3', '\x45', '\x3', '\x45', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', - 'R', '\x3', 'R', '\x3', 'S', '\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', '^', '\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', '\x7F', '\x2', '\x81', - '\x2', '\x83', '\x2', '\x85', '?', '\x87', '@', '\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', '\xBD', - '\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', '\x237', '\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', - '\x85', '\x3', '\x2', '\x2', '\x2', '\x2', '\x87', '\x3', '\x2', '\x2', - '\x2', '\x3', '\xBF', '\x3', '\x2', '\x2', '\x2', '\x5', '\xC1', '\x3', - '\x2', '\x2', '\x2', '\a', '\xC3', '\x3', '\x2', '\x2', '\x2', '\t', '\xC5', - '\x3', '\x2', '\x2', '\x2', '\v', '\xC7', '\x3', '\x2', '\x2', '\x2', - '\r', '\xC9', '\x3', '\x2', '\x2', '\x2', '\xF', '\xCB', '\x3', '\x2', - '\x2', '\x2', '\x11', '\xCD', '\x3', '\x2', '\x2', '\x2', '\x13', '\xCF', - '\x3', '\x2', '\x2', '\x2', '\x15', '\xD1', '\x3', '\x2', '\x2', '\x2', - '\x17', '\xD4', '\x3', '\x2', '\x2', '\x2', '\x19', '\xD6', '\x3', '\x2', - '\x2', '\x2', '\x1B', '\xD8', '\x3', '\x2', '\x2', '\x2', '\x1D', '\xDA', - '\x3', '\x2', '\x2', '\x2', '\x1F', '\xDC', '\x3', '\x2', '\x2', '\x2', - '!', '\xDE', '\x3', '\x2', '\x2', '\x2', '#', '\xE0', '\x3', '\x2', '\x2', - '\x2', '%', '\xE3', '\x3', '\x2', '\x2', '\x2', '\'', '\xE6', '\x3', '\x2', - '\x2', '\x2', ')', '\xE8', '\x3', '\x2', '\x2', '\x2', '+', '\xEB', '\x3', - '\x2', '\x2', '\x2', '-', '\xED', '\x3', '\x2', '\x2', '\x2', '/', '\xEF', - '\x3', '\x2', '\x2', '\x2', '\x31', '\xF1', '\x3', '\x2', '\x2', '\x2', - '\x33', '\xF4', '\x3', '\x2', '\x2', '\x2', '\x35', '\xF6', '\x3', '\x2', - '\x2', '\x2', '\x37', '\xF8', '\x3', '\x2', '\x2', '\x2', '\x39', '\xFA', - '\x3', '\x2', '\x2', '\x2', ';', '\xFE', '\x3', '\x2', '\x2', '\x2', '=', - '\x102', '\x3', '\x2', '\x2', '\x2', '?', '\x108', '\x3', '\x2', '\x2', - '\x2', '\x41', '\x10B', '\x3', '\x2', '\x2', '\x2', '\x43', '\x10F', '\x3', - '\x2', '\x2', '\x2', '\x45', '\x117', '\x3', '\x2', '\x2', '\x2', 'G', - '\x11A', '\x3', '\x2', '\x2', '\x2', 'I', '\x11F', '\x3', '\x2', '\x2', - '\x2', 'K', '\x128', '\x3', '\x2', '\x2', '\x2', 'M', '\x12F', '\x3', - '\x2', '\x2', '\x2', 'O', '\x136', '\x3', '\x2', '\x2', '\x2', 'Q', '\x13C', + '\x42', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\a', + '\x43', '\x200', '\n', '\x43', '\f', '\x43', '\xE', '\x43', '\x203', '\v', + '\x43', '\x5', '\x43', '\x205', '\n', '\x43', '\x3', '\x44', '\x3', '\x44', + '\x3', '\x44', '\x3', '\x45', '\x3', '\x45', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', 'R', + '\x3', 'S', '\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', '^', + '\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', '\x7F', '\x2', '\x81', '\x2', '\x83', + '\x2', '\x85', '?', '\x87', '@', '\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', '\xBD', '\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', '\x235', '\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', '\x85', '\x3', '\x2', + '\x2', '\x2', '\x2', '\x87', '\x3', '\x2', '\x2', '\x2', '\x3', '\xBF', + '\x3', '\x2', '\x2', '\x2', '\x5', '\xC1', '\x3', '\x2', '\x2', '\x2', + '\a', '\xC3', '\x3', '\x2', '\x2', '\x2', '\t', '\xC5', '\x3', '\x2', + '\x2', '\x2', '\v', '\xC7', '\x3', '\x2', '\x2', '\x2', '\r', '\xC9', + '\x3', '\x2', '\x2', '\x2', '\xF', '\xCB', '\x3', '\x2', '\x2', '\x2', + '\x11', '\xCD', '\x3', '\x2', '\x2', '\x2', '\x13', '\xCF', '\x3', '\x2', + '\x2', '\x2', '\x15', '\xD1', '\x3', '\x2', '\x2', '\x2', '\x17', '\xD4', + '\x3', '\x2', '\x2', '\x2', '\x19', '\xD6', '\x3', '\x2', '\x2', '\x2', + '\x1B', '\xD8', '\x3', '\x2', '\x2', '\x2', '\x1D', '\xDA', '\x3', '\x2', + '\x2', '\x2', '\x1F', '\xDC', '\x3', '\x2', '\x2', '\x2', '!', '\xDE', + '\x3', '\x2', '\x2', '\x2', '#', '\xE0', '\x3', '\x2', '\x2', '\x2', '%', + '\xE3', '\x3', '\x2', '\x2', '\x2', '\'', '\xE6', '\x3', '\x2', '\x2', + '\x2', ')', '\xE8', '\x3', '\x2', '\x2', '\x2', '+', '\xEB', '\x3', '\x2', + '\x2', '\x2', '-', '\xED', '\x3', '\x2', '\x2', '\x2', '/', '\xEF', '\x3', + '\x2', '\x2', '\x2', '\x31', '\xF1', '\x3', '\x2', '\x2', '\x2', '\x33', + '\xF4', '\x3', '\x2', '\x2', '\x2', '\x35', '\xF6', '\x3', '\x2', '\x2', + '\x2', '\x37', '\xF8', '\x3', '\x2', '\x2', '\x2', '\x39', '\xFA', '\x3', + '\x2', '\x2', '\x2', ';', '\xFE', '\x3', '\x2', '\x2', '\x2', '=', '\x102', + '\x3', '\x2', '\x2', '\x2', '?', '\x108', '\x3', '\x2', '\x2', '\x2', + '\x41', '\x10B', '\x3', '\x2', '\x2', '\x2', '\x43', '\x10F', '\x3', '\x2', + '\x2', '\x2', '\x45', '\x117', '\x3', '\x2', '\x2', '\x2', 'G', '\x11A', + '\x3', '\x2', '\x2', '\x2', 'I', '\x11F', '\x3', '\x2', '\x2', '\x2', + 'K', '\x128', '\x3', '\x2', '\x2', '\x2', 'M', '\x12F', '\x3', '\x2', + '\x2', '\x2', 'O', '\x136', '\x3', '\x2', '\x2', '\x2', 'Q', '\x13C', '\x3', '\x2', '\x2', '\x2', 'S', '\x141', '\x3', '\x2', '\x2', '\x2', 'U', '\x147', '\x3', '\x2', '\x2', '\x2', 'W', '\x14A', '\x3', '\x2', '\x2', '\x2', 'Y', '\x14F', '\x3', '\x2', '\x2', '\x2', '[', '\x154', @@ -337,24 +336,24 @@ static sqlLexer() { '\x3', '\x2', '\x2', '\x2', '{', '\x1EA', '\x3', '\x2', '\x2', '\x2', '}', '\x1EF', '\x3', '\x2', '\x2', '\x2', '\x7F', '\x1F5', '\x3', '\x2', '\x2', '\x2', '\x81', '\x1F7', '\x3', '\x2', '\x2', '\x2', '\x83', '\x1F9', - '\x3', '\x2', '\x2', '\x2', '\x85', '\x205', '\x3', '\x2', '\x2', '\x2', - '\x87', '\x207', '\x3', '\x2', '\x2', '\x2', '\x89', '\x20A', '\x3', '\x2', - '\x2', '\x2', '\x8B', '\x20C', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x20E', - '\x3', '\x2', '\x2', '\x2', '\x8F', '\x210', '\x3', '\x2', '\x2', '\x2', - '\x91', '\x212', '\x3', '\x2', '\x2', '\x2', '\x93', '\x214', '\x3', '\x2', - '\x2', '\x2', '\x95', '\x216', '\x3', '\x2', '\x2', '\x2', '\x97', '\x218', - '\x3', '\x2', '\x2', '\x2', '\x99', '\x21A', '\x3', '\x2', '\x2', '\x2', - '\x9B', '\x21C', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x21E', '\x3', '\x2', - '\x2', '\x2', '\x9F', '\x220', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x222', - '\x3', '\x2', '\x2', '\x2', '\xA3', '\x224', '\x3', '\x2', '\x2', '\x2', - '\xA5', '\x226', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x228', '\x3', '\x2', - '\x2', '\x2', '\xA9', '\x22A', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x22C', - '\x3', '\x2', '\x2', '\x2', '\xAD', '\x22E', '\x3', '\x2', '\x2', '\x2', - '\xAF', '\x230', '\x3', '\x2', '\x2', '\x2', '\xB1', '\x232', '\x3', '\x2', - '\x2', '\x2', '\xB3', '\x234', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x236', - '\x3', '\x2', '\x2', '\x2', '\xB7', '\x238', '\x3', '\x2', '\x2', '\x2', - '\xB9', '\x23A', '\x3', '\x2', '\x2', '\x2', '\xBB', '\x23C', '\x3', '\x2', - '\x2', '\x2', '\xBD', '\x23E', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xC0', + '\x3', '\x2', '\x2', '\x2', '\x85', '\x204', '\x3', '\x2', '\x2', '\x2', + '\x87', '\x206', '\x3', '\x2', '\x2', '\x2', '\x89', '\x209', '\x3', '\x2', + '\x2', '\x2', '\x8B', '\x20B', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x20D', + '\x3', '\x2', '\x2', '\x2', '\x8F', '\x20F', '\x3', '\x2', '\x2', '\x2', + '\x91', '\x211', '\x3', '\x2', '\x2', '\x2', '\x93', '\x213', '\x3', '\x2', + '\x2', '\x2', '\x95', '\x215', '\x3', '\x2', '\x2', '\x2', '\x97', '\x217', + '\x3', '\x2', '\x2', '\x2', '\x99', '\x219', '\x3', '\x2', '\x2', '\x2', + '\x9B', '\x21B', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x21D', '\x3', '\x2', + '\x2', '\x2', '\x9F', '\x21F', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x221', + '\x3', '\x2', '\x2', '\x2', '\xA3', '\x223', '\x3', '\x2', '\x2', '\x2', + '\xA5', '\x225', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x227', '\x3', '\x2', + '\x2', '\x2', '\xA9', '\x229', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x22B', + '\x3', '\x2', '\x2', '\x2', '\xAD', '\x22D', '\x3', '\x2', '\x2', '\x2', + '\xAF', '\x22F', '\x3', '\x2', '\x2', '\x2', '\xB1', '\x231', '\x3', '\x2', + '\x2', '\x2', '\xB3', '\x233', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x235', + '\x3', '\x2', '\x2', '\x2', '\xB7', '\x237', '\x3', '\x2', '\x2', '\x2', + '\xB9', '\x239', '\x3', '\x2', '\x2', '\x2', '\xBB', '\x23B', '\x3', '\x2', + '\x2', '\x2', '\xBD', '\x23D', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xC0', '\a', ',', '\x2', '\x2', '\xC0', '\x4', '\x3', '\x2', '\x2', '\x2', '\xC1', '\xC2', '\a', '.', '\x2', '\x2', '\xC2', '\x6', '\x3', '\x2', '\x2', '\x2', '\xC3', '\xC4', '\a', '*', '\x2', '\x2', '\xC4', '\b', '\x3', '\x2', '\x2', @@ -558,56 +557,54 @@ static sqlLexer() { '\x2', '\x2', '\x1F5', '\x1F6', '\t', '\x5', '\x2', '\x2', '\x1F6', '\x80', '\x3', '\x2', '\x2', '\x2', '\x1F7', '\x1F8', '\n', '\x6', '\x2', '\x2', '\x1F8', '\x82', '\x3', '\x2', '\x2', '\x2', '\x1F9', '\x1FA', '\n', '\a', - '\x2', '\x2', '\x1FA', '\x84', '\x3', '\x2', '\x2', '\x2', '\x1FB', '\x206', - '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x206', '\x5', '\x39', '\x1D', '\x2', - '\x1FD', '\x202', '\t', '\b', '\x2', '\x2', '\x1FE', '\x201', '\t', '\b', - '\x2', '\x2', '\x1FF', '\x201', '\x5', '\x89', '\x45', '\x2', '\x200', - '\x1FE', '\x3', '\x2', '\x2', '\x2', '\x200', '\x1FF', '\x3', '\x2', '\x2', - '\x2', '\x201', '\x204', '\x3', '\x2', '\x2', '\x2', '\x202', '\x200', - '\x3', '\x2', '\x2', '\x2', '\x202', '\x203', '\x3', '\x2', '\x2', '\x2', - '\x203', '\x206', '\x3', '\x2', '\x2', '\x2', '\x204', '\x202', '\x3', - '\x2', '\x2', '\x2', '\x205', '\x1FB', '\x3', '\x2', '\x2', '\x2', '\x205', - '\x1FC', '\x3', '\x2', '\x2', '\x2', '\x205', '\x1FD', '\x3', '\x2', '\x2', - '\x2', '\x206', '\x86', '\x3', '\x2', '\x2', '\x2', '\x207', '\x208', - '\a', '\x42', '\x2', '\x2', '\x208', '\x209', '\x5', '\x85', '\x43', '\x2', - '\x209', '\x88', '\x3', '\x2', '\x2', '\x2', '\x20A', '\x20B', '\t', '\t', - '\x2', '\x2', '\x20B', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x20C', '\x20D', - '\t', '\n', '\x2', '\x2', '\x20D', '\x8C', '\x3', '\x2', '\x2', '\x2', - '\x20E', '\x20F', '\t', '\v', '\x2', '\x2', '\x20F', '\x8E', '\x3', '\x2', - '\x2', '\x2', '\x210', '\x211', '\t', '\f', '\x2', '\x2', '\x211', '\x90', - '\x3', '\x2', '\x2', '\x2', '\x212', '\x213', '\t', '\r', '\x2', '\x2', - '\x213', '\x92', '\x3', '\x2', '\x2', '\x2', '\x214', '\x215', '\t', '\xE', - '\x2', '\x2', '\x215', '\x94', '\x3', '\x2', '\x2', '\x2', '\x216', '\x217', - '\t', '\xF', '\x2', '\x2', '\x217', '\x96', '\x3', '\x2', '\x2', '\x2', - '\x218', '\x219', '\t', '\x10', '\x2', '\x2', '\x219', '\x98', '\x3', - '\x2', '\x2', '\x2', '\x21A', '\x21B', '\t', '\x11', '\x2', '\x2', '\x21B', - '\x9A', '\x3', '\x2', '\x2', '\x2', '\x21C', '\x21D', '\t', '\x12', '\x2', - '\x2', '\x21D', '\x9C', '\x3', '\x2', '\x2', '\x2', '\x21E', '\x21F', - '\t', '\x13', '\x2', '\x2', '\x21F', '\x9E', '\x3', '\x2', '\x2', '\x2', - '\x220', '\x221', '\t', '\x14', '\x2', '\x2', '\x221', '\xA0', '\x3', - '\x2', '\x2', '\x2', '\x222', '\x223', '\t', '\x15', '\x2', '\x2', '\x223', - '\xA2', '\x3', '\x2', '\x2', '\x2', '\x224', '\x225', '\t', '\x16', '\x2', - '\x2', '\x225', '\xA4', '\x3', '\x2', '\x2', '\x2', '\x226', '\x227', - '\t', '\x17', '\x2', '\x2', '\x227', '\xA6', '\x3', '\x2', '\x2', '\x2', - '\x228', '\x229', '\t', '\x18', '\x2', '\x2', '\x229', '\xA8', '\x3', - '\x2', '\x2', '\x2', '\x22A', '\x22B', '\t', '\x19', '\x2', '\x2', '\x22B', - '\xAA', '\x3', '\x2', '\x2', '\x2', '\x22C', '\x22D', '\t', '\x1A', '\x2', - '\x2', '\x22D', '\xAC', '\x3', '\x2', '\x2', '\x2', '\x22E', '\x22F', - '\t', '\x1B', '\x2', '\x2', '\x22F', '\xAE', '\x3', '\x2', '\x2', '\x2', - '\x230', '\x231', '\t', '\x1C', '\x2', '\x2', '\x231', '\xB0', '\x3', - '\x2', '\x2', '\x2', '\x232', '\x233', '\t', '\x1D', '\x2', '\x2', '\x233', - '\xB2', '\x3', '\x2', '\x2', '\x2', '\x234', '\x235', '\t', '\x1E', '\x2', - '\x2', '\x235', '\xB4', '\x3', '\x2', '\x2', '\x2', '\x236', '\x237', - '\t', '\x1F', '\x2', '\x2', '\x237', '\xB6', '\x3', '\x2', '\x2', '\x2', - '\x238', '\x239', '\t', ' ', '\x2', '\x2', '\x239', '\xB8', '\x3', '\x2', - '\x2', '\x2', '\x23A', '\x23B', '\t', '!', '\x2', '\x2', '\x23B', '\xBA', - '\x3', '\x2', '\x2', '\x2', '\x23C', '\x23D', '\t', '\"', '\x2', '\x2', - '\x23D', '\xBC', '\x3', '\x2', '\x2', '\x2', '\x23E', '\x23F', '\t', '#', - '\x2', '\x2', '\x23F', '\xBE', '\x3', '\x2', '\x2', '\x2', '\x1A', '\x2', - '\x1A0', '\x1A5', '\x1AA', '\x1B0', '\x1B3', '\x1B7', '\x1BC', '\x1BE', - '\x1C1', '\x1C7', '\x1CB', '\x1D0', '\x1D2', '\x1D4', '\x1D9', '\x1DB', - '\x1E2', '\x1E4', '\x1E8', '\x1ED', '\x200', '\x202', '\x205', '\x3', - '\b', '\x2', '\x2', + '\x2', '\x2', '\x1FA', '\x84', '\x3', '\x2', '\x2', '\x2', '\x1FB', '\x205', + '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x201', '\t', '\b', '\x2', '\x2', + '\x1FD', '\x200', '\t', '\b', '\x2', '\x2', '\x1FE', '\x200', '\x5', '\x89', + '\x45', '\x2', '\x1FF', '\x1FD', '\x3', '\x2', '\x2', '\x2', '\x1FF', + '\x1FE', '\x3', '\x2', '\x2', '\x2', '\x200', '\x203', '\x3', '\x2', '\x2', + '\x2', '\x201', '\x1FF', '\x3', '\x2', '\x2', '\x2', '\x201', '\x202', + '\x3', '\x2', '\x2', '\x2', '\x202', '\x205', '\x3', '\x2', '\x2', '\x2', + '\x203', '\x201', '\x3', '\x2', '\x2', '\x2', '\x204', '\x1FB', '\x3', + '\x2', '\x2', '\x2', '\x204', '\x1FC', '\x3', '\x2', '\x2', '\x2', '\x205', + '\x86', '\x3', '\x2', '\x2', '\x2', '\x206', '\x207', '\a', '\x42', '\x2', + '\x2', '\x207', '\x208', '\x5', '\x85', '\x43', '\x2', '\x208', '\x88', + '\x3', '\x2', '\x2', '\x2', '\x209', '\x20A', '\t', '\t', '\x2', '\x2', + '\x20A', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x20B', '\x20C', '\t', '\n', + '\x2', '\x2', '\x20C', '\x8C', '\x3', '\x2', '\x2', '\x2', '\x20D', '\x20E', + '\t', '\v', '\x2', '\x2', '\x20E', '\x8E', '\x3', '\x2', '\x2', '\x2', + '\x20F', '\x210', '\t', '\f', '\x2', '\x2', '\x210', '\x90', '\x3', '\x2', + '\x2', '\x2', '\x211', '\x212', '\t', '\r', '\x2', '\x2', '\x212', '\x92', + '\x3', '\x2', '\x2', '\x2', '\x213', '\x214', '\t', '\xE', '\x2', '\x2', + '\x214', '\x94', '\x3', '\x2', '\x2', '\x2', '\x215', '\x216', '\t', '\xF', + '\x2', '\x2', '\x216', '\x96', '\x3', '\x2', '\x2', '\x2', '\x217', '\x218', + '\t', '\x10', '\x2', '\x2', '\x218', '\x98', '\x3', '\x2', '\x2', '\x2', + '\x219', '\x21A', '\t', '\x11', '\x2', '\x2', '\x21A', '\x9A', '\x3', + '\x2', '\x2', '\x2', '\x21B', '\x21C', '\t', '\x12', '\x2', '\x2', '\x21C', + '\x9C', '\x3', '\x2', '\x2', '\x2', '\x21D', '\x21E', '\t', '\x13', '\x2', + '\x2', '\x21E', '\x9E', '\x3', '\x2', '\x2', '\x2', '\x21F', '\x220', + '\t', '\x14', '\x2', '\x2', '\x220', '\xA0', '\x3', '\x2', '\x2', '\x2', + '\x221', '\x222', '\t', '\x15', '\x2', '\x2', '\x222', '\xA2', '\x3', + '\x2', '\x2', '\x2', '\x223', '\x224', '\t', '\x16', '\x2', '\x2', '\x224', + '\xA4', '\x3', '\x2', '\x2', '\x2', '\x225', '\x226', '\t', '\x17', '\x2', + '\x2', '\x226', '\xA6', '\x3', '\x2', '\x2', '\x2', '\x227', '\x228', + '\t', '\x18', '\x2', '\x2', '\x228', '\xA8', '\x3', '\x2', '\x2', '\x2', + '\x229', '\x22A', '\t', '\x19', '\x2', '\x2', '\x22A', '\xAA', '\x3', + '\x2', '\x2', '\x2', '\x22B', '\x22C', '\t', '\x1A', '\x2', '\x2', '\x22C', + '\xAC', '\x3', '\x2', '\x2', '\x2', '\x22D', '\x22E', '\t', '\x1B', '\x2', + '\x2', '\x22E', '\xAE', '\x3', '\x2', '\x2', '\x2', '\x22F', '\x230', + '\t', '\x1C', '\x2', '\x2', '\x230', '\xB0', '\x3', '\x2', '\x2', '\x2', + '\x231', '\x232', '\t', '\x1D', '\x2', '\x2', '\x232', '\xB2', '\x3', + '\x2', '\x2', '\x2', '\x233', '\x234', '\t', '\x1E', '\x2', '\x2', '\x234', + '\xB4', '\x3', '\x2', '\x2', '\x2', '\x235', '\x236', '\t', '\x1F', '\x2', + '\x2', '\x236', '\xB6', '\x3', '\x2', '\x2', '\x2', '\x237', '\x238', + '\t', ' ', '\x2', '\x2', '\x238', '\xB8', '\x3', '\x2', '\x2', '\x2', + '\x239', '\x23A', '\t', '!', '\x2', '\x2', '\x23A', '\xBA', '\x3', '\x2', + '\x2', '\x2', '\x23B', '\x23C', '\t', '\"', '\x2', '\x2', '\x23C', '\xBC', + '\x3', '\x2', '\x2', '\x2', '\x23D', '\x23E', '\t', '#', '\x2', '\x2', + '\x23E', '\xBE', '\x3', '\x2', '\x2', '\x2', '\x1A', '\x2', '\x1A0', '\x1A5', + '\x1AA', '\x1B0', '\x1B3', '\x1B7', '\x1BC', '\x1BE', '\x1C1', '\x1C7', + '\x1CB', '\x1D0', '\x1D2', '\x1D4', '\x1D9', '\x1DB', '\x1E2', '\x1E4', + '\x1E8', '\x1ED', '\x1FF', '\x201', '\x204', '\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 0a6f113697..abcbf96f9a 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs @@ -31,7 +31,6 @@ using DFA = Antlr4.Runtime.Dfa.DFA; [System.CodeDom.Compiler.GeneratedCode("ANTLR", "4.7.2")] -[System.CLSCompliant(false)] internal partial class sqlParser : Parser { protected static DFA[] decisionToDFA; protected static PredictionContextCache sharedContextCache = new PredictionContextCache(); @@ -44,7 +43,7 @@ public const int K_EXISTS=38, K_FALSE=39, K_FROM=40, K_GROUP=41, K_IN=42, K_JOIN=43, K_LIKE=44, K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, - WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, IDENTIFIER=61, PARAMETER=62; + WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, LEX_IDENTIFIER=61, PARAMETER=62; 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, @@ -60,7 +59,7 @@ public const int 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_identifier = 42, RULE_literal = 43; 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", @@ -72,7 +71,7 @@ public const int "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" + "object_property_list", "object_property", "identifier", "literal" }; private static readonly string[] _LiteralNames = { @@ -91,7 +90,7 @@ public const int "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" + "LEX_IDENTIFIER", "PARAMETER" }; public static readonly IVocabulary DefaultVocabulary = new Vocabulary(_LiteralNames, _SymbolicNames); @@ -156,8 +155,8 @@ public ProgramContext program() { try { EnterOuterAlt(_localctx, 1); { - State = 86; sql_query(); - State = 87; Match(Eof); + State = 88; sql_query(); + State = 89; Match(Eof); } } catch (RecognitionException re) { @@ -218,49 +217,49 @@ public Sql_queryContext sql_query() { try { EnterOuterAlt(_localctx, 1); { - State = 89; select_clause(); - State = 91; + State = 91; select_clause(); + State = 93; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_FROM) { { - State = 90; from_clause(); + State = 92; from_clause(); } } - State = 94; + State = 96; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_WHERE) { { - State = 93; where_clause(); + State = 95; where_clause(); } } - State = 97; + State = 99; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_GROUP) { { - State = 96; group_by_clause(); + State = 98; group_by_clause(); } } - State = 100; + State = 102; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ORDER) { { - State = 99; order_by_clause(); + State = 101; order_by_clause(); } } - State = 103; + State = 105; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_OFFSET) { { - State = 102; offset_limit_clause(); + State = 104; offset_limit_clause(); } } @@ -314,26 +313,26 @@ public Select_clauseContext select_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 105; Match(K_SELECT); - State = 107; + State = 107; Match(K_SELECT); + State = 109; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_DISTINCT) { { - State = 106; Match(K_DISTINCT); + State = 108; Match(K_DISTINCT); } } - State = 110; + State = 112; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_TOP) { { - State = 109; top_spec(); + State = 111; top_spec(); } } - State = 112; selection(); + State = 114; selection(); } } catch (RecognitionException re) { @@ -379,8 +378,8 @@ public Top_specContext top_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 114; Match(K_TOP); - State = 115; + State = 116; Match(K_TOP); + State = 117; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -437,19 +436,19 @@ public SelectionContext selection() { SelectionContext _localctx = new SelectionContext(Context, State); EnterRule(_localctx, 8, RULE_selection); try { - State = 120; + State = 122; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: EnterOuterAlt(_localctx, 1); { - State = 117; select_star_spec(); + State = 119; select_star_spec(); } break; case K_VALUE: EnterOuterAlt(_localctx, 2); { - State = 118; select_value_spec(); + State = 120; select_value_spec(); } break; case T__2: @@ -469,11 +468,11 @@ public SelectionContext selection() { 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 = 121; select_list_spec(); } break; default: @@ -519,7 +518,7 @@ public Select_star_specContext select_star_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 122; Match(T__0); + State = 124; Match(T__0); } } catch (RecognitionException re) { @@ -565,8 +564,8 @@ public Select_value_specContext select_value_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 124; Match(K_VALUE); - State = 125; scalar_expression(0); + State = 126; Match(K_VALUE); + State = 127; scalar_expression(0); } } catch (RecognitionException re) { @@ -615,18 +614,18 @@ public Select_list_specContext select_list_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 127; select_item(); - State = 132; + State = 129; select_item(); + State = 134; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 128; Match(T__1); - State = 129; select_item(); + State = 130; Match(T__1); + State = 131; select_item(); } } - State = 134; + State = 136; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -648,7 +647,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) { @@ -677,14 +678,14 @@ public Select_itemContext select_item() { try { EnterOuterAlt(_localctx, 1); { - State = 135; scalar_expression(0); - State = 138; + State = 137; scalar_expression(0); + State = 140; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 136; Match(K_AS); - State = 137; Match(IDENTIFIER); + State = 138; Match(K_AS); + State = 139; identifier(); } } @@ -733,8 +734,8 @@ public From_clauseContext from_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 140; Match(K_FROM); - State = 141; collection_expression(0); + State = 142; Match(K_FROM); + State = 143; collection_expression(0); } } catch (RecognitionException re) { @@ -787,7 +788,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) { @@ -805,7 +808,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); @@ -843,7 +848,7 @@ private Collection_expressionContext collection_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 154; + State = 157; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { case 1: @@ -852,22 +857,22 @@ private Collection_expressionContext collection_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 144; collection(); - State = 149; + State = 146; collection(); + State = 151; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,11,Context) ) { case 1: { - State = 146; + State = 148; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 145; Match(K_AS); + State = 147; Match(K_AS); } } - State = 148; Match(IDENTIFIER); + State = 150; identifier(); } break; } @@ -878,14 +883,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 = 153; identifier(); + State = 154; Match(K_IN); + State = 155; collection(); } break; } Context.Stop = TokenStream.LT(-1); - State = 161; + State = 164; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -897,14 +902,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 = 159; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 157; Match(K_JOIN); - State = 158; collection_expression(2); + State = 160; Match(K_JOIN); + State = 161; collection_expression(2); } } } - State = 163; + State = 166; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); } @@ -934,7 +939,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); } @@ -978,20 +985,21 @@ public CollectionContext collection() { CollectionContext _localctx = new CollectionContext(Context, State); EnterRule(_localctx, 22, RULE_collection); try { - State = 172; + State = 175; 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 = 167; identifier(); + State = 169; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,14,Context) ) { case 1: { - State = 165; path_expression(0); + State = 168; path_expression(0); } break; } @@ -1001,9 +1009,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 = 171; Match(T__2); + State = 172; sql_query(); + State = 173; Match(T__3); } break; default: @@ -1073,7 +1081,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; @@ -1133,7 +1143,7 @@ private Path_expressionContext path_expression(int _p) { } Context.Stop = TokenStream.LT(-1); - State = 188; + State = 191; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1142,45 +1152,45 @@ private Path_expressionContext path_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 186; + State = 189; 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 = 178; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 176; Match(T__4); - State = 177; Match(IDENTIFIER); + State = 179; Match(T__4); + State = 180; identifier(); } break; case 2: { _localctx = new NumberPathExpressionContext(new Path_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_path_expression); - State = 178; + State = 181; 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 = 182; Match(T__5); + State = 183; Match(NUMERIC_LITERAL); + State = 184; Match(T__6); } break; case 3: { _localctx = new StringPathExpressionContext(new Path_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_path_expression); - State = 182; + State = 185; 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 = 186; Match(T__5); + State = 187; Match(STRING_LITERAL); + State = 188; Match(T__6); } break; } } } - State = 190; + State = 193; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); } @@ -1229,8 +1239,8 @@ public Where_clauseContext where_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 191; Match(K_WHERE); - State = 192; scalar_expression(0); + State = 194; Match(K_WHERE); + State = 195; scalar_expression(0); } } catch (RecognitionException re) { @@ -1277,9 +1287,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 = 197; Match(K_GROUP); + State = 198; Match(K_BY); + State = 199; scalar_expression_list(); } } catch (RecognitionException re) { @@ -1326,9 +1336,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 = 201; Match(K_ORDER); + State = 202; Match(K_BY); + State = 203; order_by_items(); } } catch (RecognitionException re) { @@ -1377,18 +1387,18 @@ public Order_by_itemsContext order_by_items() { try { EnterOuterAlt(_localctx, 1); { - State = 202; order_by_item(); - State = 207; + State = 205; order_by_item(); + State = 210; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 203; Match(T__1); - State = 204; order_by_item(); + State = 206; Match(T__1); + State = 207; order_by_item(); } } - State = 209; + State = 212; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -1440,13 +1450,13 @@ public Order_by_itemContext order_by_item() { try { EnterOuterAlt(_localctx, 1); { - State = 210; scalar_expression(0); - State = 212; + State = 213; scalar_expression(0); + State = 215; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ASC || _la==K_DESC) { { - State = 211; sort_order(); + State = 214; sort_order(); } } @@ -1494,7 +1504,7 @@ public Sort_orderContext sort_order() { try { EnterOuterAlt(_localctx, 1); { - State = 214; + State = 217; _la = TokenStream.LA(1); if ( !(_la==K_ASC || _la==K_DESC) ) { ErrorHandler.RecoverInline(this); @@ -1552,10 +1562,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 = 219; Match(K_OFFSET); + State = 220; offset_count(); + State = 221; Match(K_LIMIT); + State = 222; limit_count(); } } catch (RecognitionException re) { @@ -1600,7 +1610,7 @@ public Offset_countContext offset_count() { try { EnterOuterAlt(_localctx, 1); { - State = 221; + State = 224; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1653,7 +1663,7 @@ public Limit_countContext limit_count() { try { EnterOuterAlt(_localctx, 1); { - State = 223; + State = 226; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1793,7 +1803,7 @@ private Scalar_expressionContext scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 236; + State = 239; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,21,Context) ) { case 1: @@ -1802,7 +1812,7 @@ private Scalar_expressionContext scalar_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 226; logical_scalar_expression(0); + State = 229; logical_scalar_expression(0); } break; case 2: @@ -1810,25 +1820,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 = 230; binary_scalar_expression(0); + State = 232; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 228; Match(K_NOT); + State = 231; 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 = 234; Match(K_BETWEEN); + State = 235; binary_scalar_expression(0); + State = 236; Match(K_AND); + State = 237; binary_scalar_expression(0); } break; } Context.Stop = TokenStream.LT(-1); - State = 249; + State = 252; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1837,35 +1847,35 @@ private Scalar_expressionContext scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 247; + State = 250; 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 = 241; 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 = 242; Match(T__7); + State = 243; scalar_expression(0); + State = 244; Match(T__8); + State = 245; scalar_expression(5); } break; case 2: { _localctx = new CoalesceScalarExpressionContext(new Scalar_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_scalar_expression); - State = 244; + State = 247; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 245; Match(T__9); - State = 246; scalar_expression(4); + State = 248; Match(T__9); + State = 249; scalar_expression(4); } break; } } } - State = 251; + State = 254; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } @@ -1936,27 +1946,27 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 256; + State = 259; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { case 1: { - State = 253; binary_scalar_expression(0); + State = 256; binary_scalar_expression(0); } break; case 2: { - State = 254; in_scalar_expression(); + State = 257; in_scalar_expression(); } break; case 3: { - State = 255; like_scalar_expression(); + State = 258; like_scalar_expression(); } break; } Context.Stop = TokenStream.LT(-1); - State = 266; + State = 269; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1965,33 +1975,33 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 264; + State = 267; 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 = 261; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 259; Match(K_AND); - State = 260; logical_scalar_expression(3); + State = 262; Match(K_AND); + State = 263; logical_scalar_expression(3); } break; case 2: { _localctx = new Logical_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_logical_scalar_expression); - State = 261; + State = 264; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 262; Match(K_OR); - State = 263; logical_scalar_expression(2); + State = 265; Match(K_OR); + State = 266; logical_scalar_expression(2); } break; } } } - State = 268; + State = 271; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); } @@ -2045,20 +2055,20 @@ public In_scalar_expressionContext in_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 269; binary_scalar_expression(0); - State = 271; + State = 272; binary_scalar_expression(0); + State = 274; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 270; Match(K_NOT); + State = 273; Match(K_NOT); } } - State = 273; Match(K_IN); - State = 274; Match(T__2); - State = 275; scalar_expression_list(); - State = 276; Match(T__3); + State = 276; Match(K_IN); + State = 277; Match(T__2); + State = 278; scalar_expression_list(); + State = 279; Match(T__3); } } catch (RecognitionException re) { @@ -2112,24 +2122,24 @@ public Like_scalar_expressionContext like_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 278; binary_scalar_expression(0); - State = 280; + State = 281; binary_scalar_expression(0); + State = 283; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 279; Match(K_NOT); + State = 282; Match(K_NOT); } } - State = 282; Match(K_LIKE); - State = 283; binary_scalar_expression(0); - State = 285; + State = 285; Match(K_LIKE); + State = 286; binary_scalar_expression(0); + State = 288; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,29,Context) ) { case 1: { - State = 284; escape_expression(); + State = 287; escape_expression(); } break; } @@ -2176,8 +2186,8 @@ public Escape_expressionContext escape_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 287; Match(K_ESCAPE); - State = 288; Match(STRING_LITERAL); + State = 290; Match(K_ESCAPE); + State = 291; Match(STRING_LITERAL); } } catch (RecognitionException re) { @@ -2262,10 +2272,10 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { EnterOuterAlt(_localctx, 1); { { - State = 291; unary_scalar_expression(); + State = 294; unary_scalar_expression(); } Context.Stop = TokenStream.LT(-1); - State = 327; + State = 330; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -2274,93 +2284,93 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 325; + State = 328; 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 = 296; if (!(Precpred(Context, 8))) throw new FailedPredicateException(this, "Precpred(Context, 8)"); - State = 294; multiplicative_operator(); - State = 295; binary_scalar_expression(9); + State = 297; multiplicative_operator(); + State = 298; binary_scalar_expression(9); } break; case 2: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 297; + State = 300; if (!(Precpred(Context, 7))) throw new FailedPredicateException(this, "Precpred(Context, 7)"); - State = 298; additive_operator(); - State = 299; binary_scalar_expression(8); + State = 301; additive_operator(); + State = 302; binary_scalar_expression(8); } break; case 3: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 301; + State = 304; if (!(Precpred(Context, 6))) throw new FailedPredicateException(this, "Precpred(Context, 6)"); - State = 302; relational_operator(); - State = 303; binary_scalar_expression(7); + State = 305; relational_operator(); + State = 306; binary_scalar_expression(7); } break; case 4: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 305; + State = 308; if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 306; equality_operator(); - State = 307; binary_scalar_expression(6); + State = 309; equality_operator(); + State = 310; binary_scalar_expression(6); } break; case 5: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 309; + State = 312; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 310; bitwise_and_operator(); - State = 311; binary_scalar_expression(5); + State = 313; bitwise_and_operator(); + State = 314; binary_scalar_expression(5); } break; case 6: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 313; + State = 316; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 314; bitwise_exclusive_or_operator(); - State = 315; binary_scalar_expression(4); + State = 317; bitwise_exclusive_or_operator(); + State = 318; binary_scalar_expression(4); } break; case 7: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 317; + State = 320; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 318; bitwise_inclusive_or_operator(); - State = 319; binary_scalar_expression(3); + State = 321; bitwise_inclusive_or_operator(); + State = 322; binary_scalar_expression(3); } break; case 8: { _localctx = new Binary_scalar_expressionContext(_parentctx, _parentState); PushNewRecursionContext(_localctx, _startState, RULE_binary_scalar_expression); - State = 321; + State = 324; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 322; string_concat_operator(); - State = 323; binary_scalar_expression(2); + State = 325; string_concat_operator(); + State = 326; binary_scalar_expression(2); } break; } } } - State = 329; + State = 332; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); } @@ -2406,7 +2416,7 @@ public Multiplicative_operatorContext multiplicative_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 330; + State = 333; _la = TokenStream.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__10) | (1L << T__11))) != 0)) ) { ErrorHandler.RecoverInline(this); @@ -2457,7 +2467,7 @@ public Additive_operatorContext additive_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 332; + State = 335; _la = TokenStream.LA(1); if ( !(_la==T__12 || _la==T__13) ) { ErrorHandler.RecoverInline(this); @@ -2508,7 +2518,7 @@ public Relational_operatorContext relational_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 334; + State = 337; _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); @@ -2559,7 +2569,7 @@ public Equality_operatorContext equality_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 336; + State = 339; _la = TokenStream.LA(1); if ( !(_la==T__18 || _la==T__19) ) { ErrorHandler.RecoverInline(this); @@ -2609,7 +2619,7 @@ public Bitwise_and_operatorContext bitwise_and_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 338; Match(T__20); + State = 341; Match(T__20); } } catch (RecognitionException re) { @@ -2651,7 +2661,7 @@ public Bitwise_exclusive_or_operatorContext bitwise_exclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 340; Match(T__21); + State = 343; Match(T__21); } } catch (RecognitionException re) { @@ -2693,7 +2703,7 @@ public Bitwise_inclusive_or_operatorContext bitwise_inclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 342; Match(T__22); + State = 345; Match(T__22); } } catch (RecognitionException re) { @@ -2735,7 +2745,7 @@ public String_concat_operatorContext string_concat_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 344; Match(T__23); + State = 347; Match(T__23); } } catch (RecognitionException re) { @@ -2784,7 +2794,7 @@ 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 = 353; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: @@ -2800,11 +2810,11 @@ public Unary_scalar_expressionContext unary_scalar_expression() { 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 = 349; primary_expression(0); } break; case T__12: @@ -2813,8 +2823,8 @@ public Unary_scalar_expressionContext unary_scalar_expression() { case K_NOT: EnterOuterAlt(_localctx, 2); { - State = 347; unary_operator(); - State = 348; unary_scalar_expression(); + State = 350; unary_operator(); + State = 351; unary_scalar_expression(); } break; default: @@ -2862,7 +2872,7 @@ public Unary_operatorContext unary_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 352; + State = 355; _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); @@ -3015,7 +3025,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { } } public partial class PropertyRefScalarExpressionBaseContext : Primary_expressionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + public IdentifierContext identifier() { + return GetRuleContext(0); + } public PropertyRefScalarExpressionBaseContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { IsqlListener typedListener = listener as IsqlListener; @@ -3032,7 +3044,9 @@ public override TResult Accept(IParseTreeVisitor visitor) { } } public partial class FunctionCallScalarExpressionContext : Primary_expressionContext { - public ITerminalNode IDENTIFIER() { return GetToken(sqlParser.IDENTIFIER, 0); } + 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); @@ -3132,7 +3146,9 @@ public partial class PropertyRefScalarExpressionRecursiveContext : Primary_expre 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; @@ -3166,7 +3182,7 @@ private Primary_expressionContext primary_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 401; + State = 405; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,37,Context) ) { case 1: @@ -3175,7 +3191,7 @@ private Primary_expressionContext primary_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 355; Match(IDENTIFIER); + State = 358; identifier(); } break; case 2: @@ -3183,7 +3199,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ParameterRefScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 356; Match(PARAMETER); + State = 359; Match(PARAMETER); } break; case 3: @@ -3191,7 +3207,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new LiteralScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 357; literal(); + State = 360; literal(); } break; case 4: @@ -3199,17 +3215,17 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ArrayCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 358; Match(T__5); - State = 360; + State = 361; Match(T__5); + State = 363; 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_ALL) | (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) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__5) | (1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << T__25) | (1L << K_ALL) | (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 << LEX_IDENTIFIER) | (1L << PARAMETER))) != 0)) { { - State = 359; scalar_expression_list(); + State = 362; scalar_expression_list(); } } - State = 362; Match(T__6); + State = 365; Match(T__6); } break; case 5: @@ -3217,17 +3233,17 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ObjectCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 363; Match(T__25); - State = 365; + State = 366; Match(T__25); + State = 368; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==STRING_LITERAL) { { - State = 364; object_property_list(); + State = 367; object_property_list(); } } - State = 367; Match(T__26); + State = 370; Match(T__26); } break; case 6: @@ -3235,28 +3251,28 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new FunctionCallScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 370; + State = 373; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_UDF) { { - State = 368; Match(K_UDF); - State = 369; Match(T__4); + State = 371; Match(K_UDF); + State = 372; Match(T__4); } } - State = 372; Match(IDENTIFIER); - State = 373; Match(T__2); - State = 375; + State = 375; identifier(); + State = 376; Match(T__2); + State = 378; 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_ALL) | (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) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__5) | (1L << T__12) | (1L << T__13) | (1L << T__24) | (1L << T__25) | (1L << K_ALL) | (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 << LEX_IDENTIFIER) | (1L << PARAMETER))) != 0)) { { - State = 374; scalar_expression_list(); + State = 377; scalar_expression_list(); } } - State = 377; Match(T__3); + State = 380; Match(T__3); } break; case 7: @@ -3264,9 +3280,9 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ParenthesizedScalarExperessionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 378; Match(T__2); - State = 379; scalar_expression(0); - State = 380; Match(T__3); + State = 382; Match(T__2); + State = 383; scalar_expression(0); + State = 384; Match(T__3); } break; case 8: @@ -3274,9 +3290,9 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new SubqueryScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 382; Match(T__2); - State = 383; sql_query(); - State = 384; Match(T__3); + State = 386; Match(T__2); + State = 387; sql_query(); + State = 388; Match(T__3); } break; case 9: @@ -3284,10 +3300,10 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ExistsScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 386; Match(K_EXISTS); - State = 387; Match(T__2); - State = 388; sql_query(); - State = 389; Match(T__3); + State = 390; Match(K_EXISTS); + State = 391; Match(T__2); + State = 392; sql_query(); + State = 393; Match(T__3); } break; case 10: @@ -3295,10 +3311,10 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ArrayScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 391; Match(K_ARRAY); - State = 392; Match(T__2); - State = 393; sql_query(); - State = 394; Match(T__3); + State = 395; Match(K_ARRAY); + State = 396; Match(T__2); + State = 397; sql_query(); + State = 398; Match(T__3); } break; case 11: @@ -3306,15 +3322,15 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new AllScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 396; Match(K_ALL); - State = 397; Match(T__2); - State = 398; sql_query(); - State = 399; Match(T__3); + State = 400; Match(K_ALL); + State = 401; Match(T__2); + State = 402; sql_query(); + State = 403; Match(T__3); } break; } Context.Stop = TokenStream.LT(-1); - State = 413; + State = 417; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -3323,34 +3339,34 @@ private Primary_expressionContext primary_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 411; + State = 415; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,38,Context) ) { case 1: { _localctx = new PropertyRefScalarExpressionRecursiveContext(new Primary_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_primary_expression); - State = 403; + State = 407; if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 404; Match(T__4); - State = 405; Match(IDENTIFIER); + State = 408; Match(T__4); + State = 409; identifier(); } break; case 2: { _localctx = new MemberIndexerScalarExpressionContext(new Primary_expressionContext(_parentctx, _parentState)); PushNewRecursionContext(_localctx, _startState, RULE_primary_expression); - State = 406; + State = 410; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 407; Match(T__5); - State = 408; scalar_expression(0); - State = 409; Match(T__6); + State = 411; Match(T__5); + State = 412; scalar_expression(0); + State = 413; Match(T__6); } break; } } } - State = 415; + State = 419; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); } @@ -3402,18 +3418,18 @@ public Scalar_expression_listContext scalar_expression_list() { try { EnterOuterAlt(_localctx, 1); { - State = 416; scalar_expression(0); - State = 421; + State = 420; scalar_expression(0); + State = 425; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 417; Match(T__1); - State = 418; scalar_expression(0); + State = 421; Match(T__1); + State = 422; scalar_expression(0); } } - State = 423; + State = 427; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3465,18 +3481,18 @@ public Object_property_listContext object_property_list() { try { EnterOuterAlt(_localctx, 1); { - State = 424; object_property(); - State = 429; + State = 428; object_property(); + State = 433; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 425; Match(T__1); - State = 426; object_property(); + State = 429; Match(T__1); + State = 430; object_property(); } } - State = 431; + State = 435; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3525,9 +3541,62 @@ public Object_propertyContext object_property() { try { EnterOuterAlt(_localctx, 1); { - State = 432; Match(STRING_LITERAL); - State = 433; Match(T__8); - State = 434; scalar_expression(0); + State = 436; Match(STRING_LITERAL); + State = 437; Match(T__8); + State = 438; 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, 84, RULE_identifier); + int _la; + try { + EnterOuterAlt(_localctx, 1); + { + State = 440; + _la = TokenStream.LA(1); + if ( !(_la==K_ALL || _la==LEX_IDENTIFIER) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } } } catch (RecognitionException re) { @@ -3571,12 +3640,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, 86, RULE_literal); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 436; + State = 442; _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); @@ -3660,7 +3729,7 @@ private bool primary_expression_sempred(Primary_expressionContext _localctx, int private static char[] _serializedATN = { '\x3', '\x608B', '\xA72A', '\x8133', '\xB9ED', '\x417C', '\x3BE7', '\x7786', - '\x5964', '\x3', '@', '\x1B9', '\x4', '\x2', '\t', '\x2', '\x4', '\x3', + '\x5964', '\x3', '@', '\x1BF', '\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', @@ -3676,363 +3745,367 @@ 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', - '\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', + ',', '\x4', '-', '\t', '-', '\x3', '\x2', '\x3', '\x2', '\x3', '\x2', + '\x3', '\x3', '\x3', '\x3', '\x5', '\x3', '`', '\n', '\x3', '\x3', '\x3', + '\x5', '\x3', '\x63', '\n', '\x3', '\x3', '\x3', '\x5', '\x3', '\x66', + '\n', '\x3', '\x3', '\x3', '\x5', '\x3', 'i', '\n', '\x3', '\x3', '\x3', + '\x5', '\x3', 'l', '\n', '\x3', '\x3', '\x4', '\x3', '\x4', '\x5', '\x4', + 'p', '\n', '\x4', '\x3', '\x4', '\x5', '\x4', 's', '\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', '\x87', '\n', '\t', '\f', '\t', + '\xE', '\t', '\x8A', '\v', '\t', '\x3', '\n', '\x3', '\n', '\x3', '\n', + '\x5', '\n', '\x8F', '\n', '\n', '\x3', '\v', '\x3', '\v', '\x3', '\v', + '\x3', '\f', '\x3', '\f', '\x3', '\f', '\x5', '\f', '\x97', '\n', '\f', + '\x3', '\f', '\x5', '\f', '\x9A', '\n', '\f', '\x3', '\f', '\x3', '\f', + '\x3', '\f', '\x3', '\f', '\x5', '\f', '\xA0', '\n', '\f', '\x3', '\f', + '\x3', '\f', '\x3', '\f', '\a', '\f', '\xA5', '\n', '\f', '\f', '\f', + '\xE', '\f', '\xA8', '\v', '\f', '\x3', '\r', '\x3', '\r', '\x5', '\r', + '\xAC', '\n', '\r', '\x3', '\r', '\x3', '\r', '\x3', '\r', '\x3', '\r', + '\x5', '\r', '\xB2', '\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', '\a', '\xE', '\xC0', + '\n', '\xE', '\f', '\xE', '\xE', '\xE', '\xC3', '\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', '\xD3', '\n', + '\x12', '\f', '\x12', '\xE', '\x12', '\xD6', '\v', '\x12', '\x3', '\x13', + '\x3', '\x13', '\x5', '\x13', '\xDA', '\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', '\xEB', + '\n', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', + '\x3', '\x18', '\x5', '\x18', '\xF2', '\n', '\x18', '\x3', '\x18', '\x3', '\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', '\a', '\x18', '\xFD', '\n', '\x18', + '\f', '\x18', '\xE', '\x18', '\x100', '\v', '\x18', '\x3', '\x19', '\x3', + '\x19', '\x3', '\x19', '\x3', '\x19', '\x5', '\x19', '\x106', '\n', '\x19', + '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', + '\x3', '\x19', '\a', '\x19', '\x10E', '\n', '\x19', '\f', '\x19', '\xE', + '\x19', '\x111', '\v', '\x19', '\x3', '\x1A', '\x3', '\x1A', '\x5', '\x1A', + '\x115', '\n', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', + '\x1A', '\x3', '\x1A', '\x3', '\x1B', '\x3', '\x1B', '\x5', '\x1B', '\x11E', + '\n', '\x1B', '\x3', '\x1B', '\x3', '\x1B', '\x3', '\x1B', '\x5', '\x1B', + '\x123', '\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', '\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', - '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\x3', '\x1D', '\a', + '\x1D', '\x14B', '\n', '\x1D', '\f', '\x1D', '\xE', '\x1D', '\x14E', '\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', '&', '\x164', '\n', '&', + '\x3', '\'', '\x3', '\'', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\x3', '(', '\x3', '(', '\x5', '(', '\x16E', '\n', '(', '\x3', '(', '\x3', + '(', '\x3', '(', '\x5', '(', '\x173', '\n', '(', '\x3', '(', '\x3', '(', + '\x3', '(', '\x5', '(', '\x178', '\n', '(', '\x3', '(', '\x3', '(', '\x3', + '(', '\x5', '(', '\x17D', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', - '\x3', '(', '\x5', '(', '\x194', '\n', '(', '\x3', '(', '\x3', '(', '\x3', - '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\a', - '(', '\x19E', '\n', '(', '\f', '(', '\xE', '(', '\x1A1', '\v', '(', '\x3', - ')', '\x3', ')', '\x3', ')', '\a', ')', '\x1A6', '\n', ')', '\f', ')', - '\xE', ')', '\x1A9', '\v', ')', '\x3', '*', '\x3', '*', '\x3', '*', '\a', - '*', '\x1AE', '\n', '*', '\f', '*', '\xE', '*', '\x1B1', '\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', '\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', '\x30', '\x30', '\a', '\x2', ')', ')', '\x31', '\x31', - '\x37', '\x37', '\x39', '\x39', '=', '>', '\x2', '\x1C9', '\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', '\x193', - '\x3', '\x2', '\x2', '\x2', 'P', '\x1A2', '\x3', '\x2', '\x2', '\x2', - 'R', '\x1AA', '\x3', '\x2', '\x2', '\x2', 'T', '\x1B2', '\x3', '\x2', - '\x2', '\x2', 'V', '\x1B6', '\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', '\x35', '\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', '\x36', - '\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', - ':', '\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', '\x34', '\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', '\x32', '\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', '\x30', '\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', '\x1F', '\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', '\x1F', '\x2', '\x2', '\x106', '\x10B', '\x5', '\x30', '\x19', '\x5', - '\x107', '\x108', '\f', '\x3', '\x2', '\x2', '\x108', '\x109', '\a', '\x33', - '\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', '\x30', '\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', '\x30', '\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', '\x194', '\a', - '?', '\x2', '\x2', '\x166', '\x194', '\a', '@', '\x2', '\x2', '\x167', - '\x194', '\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', '\x194', '\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', '\x194', '\a', '\x1D', '\x2', '\x2', '\x172', - '\x173', '\a', '\x38', '\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', '\x194', '\a', - '\x6', '\x2', '\x2', '\x17C', '\x17D', '\a', '\x5', '\x2', '\x2', '\x17D', - '\x17E', '\x5', '.', '\x18', '\x2', '\x17E', '\x17F', '\a', '\x6', '\x2', - '\x2', '\x17F', '\x194', '\x3', '\x2', '\x2', '\x2', '\x180', '\x181', - '\a', '\x5', '\x2', '\x2', '\x181', '\x182', '\x5', '\x4', '\x3', '\x2', - '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', '\x194', '\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', '\x194', - '\x3', '\x2', '\x2', '\x2', '\x189', '\x18A', '\a', ' ', '\x2', '\x2', - '\x18A', '\x18B', '\a', '\x5', '\x2', '\x2', '\x18B', '\x18C', '\x5', - '\x4', '\x3', '\x2', '\x18C', '\x18D', '\a', '\x6', '\x2', '\x2', '\x18D', - '\x194', '\x3', '\x2', '\x2', '\x2', '\x18E', '\x18F', '\a', '\x1E', '\x2', - '\x2', '\x18F', '\x190', '\a', '\x5', '\x2', '\x2', '\x190', '\x191', - '\x5', '\x4', '\x3', '\x2', '\x191', '\x192', '\a', '\x6', '\x2', '\x2', - '\x192', '\x194', '\x3', '\x2', '\x2', '\x2', '\x193', '\x164', '\x3', - '\x2', '\x2', '\x2', '\x193', '\x166', '\x3', '\x2', '\x2', '\x2', '\x193', - '\x167', '\x3', '\x2', '\x2', '\x2', '\x193', '\x168', '\x3', '\x2', '\x2', - '\x2', '\x193', '\x16D', '\x3', '\x2', '\x2', '\x2', '\x193', '\x174', - '\x3', '\x2', '\x2', '\x2', '\x193', '\x17C', '\x3', '\x2', '\x2', '\x2', - '\x193', '\x180', '\x3', '\x2', '\x2', '\x2', '\x193', '\x184', '\x3', - '\x2', '\x2', '\x2', '\x193', '\x189', '\x3', '\x2', '\x2', '\x2', '\x193', - '\x18E', '\x3', '\x2', '\x2', '\x2', '\x194', '\x19F', '\x3', '\x2', '\x2', - '\x2', '\x195', '\x196', '\f', '\a', '\x2', '\x2', '\x196', '\x197', '\a', - '\a', '\x2', '\x2', '\x197', '\x19E', '\a', '?', '\x2', '\x2', '\x198', - '\x199', '\f', '\x6', '\x2', '\x2', '\x199', '\x19A', '\a', '\b', '\x2', - '\x2', '\x19A', '\x19B', '\x5', '.', '\x18', '\x2', '\x19B', '\x19C', - '\a', '\t', '\x2', '\x2', '\x19C', '\x19E', '\x3', '\x2', '\x2', '\x2', - '\x19D', '\x195', '\x3', '\x2', '\x2', '\x2', '\x19D', '\x198', '\x3', - '\x2', '\x2', '\x2', '\x19E', '\x1A1', '\x3', '\x2', '\x2', '\x2', '\x19F', - '\x19D', '\x3', '\x2', '\x2', '\x2', '\x19F', '\x1A0', '\x3', '\x2', '\x2', - '\x2', '\x1A0', 'O', '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x19F', '\x3', - '\x2', '\x2', '\x2', '\x1A2', '\x1A7', '\x5', '.', '\x18', '\x2', '\x1A3', - '\x1A4', '\a', '\x4', '\x2', '\x2', '\x1A4', '\x1A6', '\x5', '.', '\x18', - '\x2', '\x1A5', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x1A6', '\x1A9', - '\x3', '\x2', '\x2', '\x2', '\x1A7', '\x1A5', '\x3', '\x2', '\x2', '\x2', - '\x1A7', '\x1A8', '\x3', '\x2', '\x2', '\x2', '\x1A8', 'Q', '\x3', '\x2', - '\x2', '\x2', '\x1A9', '\x1A7', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1AF', - '\x5', 'T', '+', '\x2', '\x1AB', '\x1AC', '\a', '\x4', '\x2', '\x2', '\x1AC', - '\x1AE', '\x5', 'T', '+', '\x2', '\x1AD', '\x1AB', '\x3', '\x2', '\x2', - '\x2', '\x1AE', '\x1B1', '\x3', '\x2', '\x2', '\x2', '\x1AF', '\x1AD', - '\x3', '\x2', '\x2', '\x2', '\x1AF', '\x1B0', '\x3', '\x2', '\x2', '\x2', - '\x1B0', 'S', '\x3', '\x2', '\x2', '\x2', '\x1B1', '\x1AF', '\x3', '\x2', - '\x2', '\x2', '\x1B2', '\x1B3', '\a', '>', '\x2', '\x2', '\x1B3', '\x1B4', - '\a', '\v', '\x2', '\x2', '\x1B4', '\x1B5', '\x5', '.', '\x18', '\x2', - '\x1B5', 'U', '\x3', '\x2', '\x2', '\x2', '\x1B6', '\x1B7', '\t', '\t', - '\x2', '\x2', '\x1B7', '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', '\x193', - '\x19D', '\x19F', '\x1A7', '\x1AF', + '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', '\x198', '\n', + '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', + '(', '\x3', '(', '\x3', '(', '\a', '(', '\x1A2', '\n', '(', '\f', '(', + '\xE', '(', '\x1A5', '\v', '(', '\x3', ')', '\x3', ')', '\x3', ')', '\a', + ')', '\x1AA', '\n', ')', '\f', ')', '\xE', ')', '\x1AD', '\v', ')', '\x3', + '*', '\x3', '*', '\x3', '*', '\a', '*', '\x1B2', '\n', '*', '\f', '*', + '\xE', '*', '\x1B5', '\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', 'X', '\x2', '\v', '\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', '\x30', '\x30', '\x4', '\x2', '\x1E', '\x1E', '?', '?', '\a', + '\x2', ')', ')', '\x31', '\x31', '\x37', '\x37', '\x39', '\x39', '=', + '>', '\x2', '\x1CE', '\x2', 'Z', '\x3', '\x2', '\x2', '\x2', '\x4', ']', + '\x3', '\x2', '\x2', '\x2', '\x6', 'm', '\x3', '\x2', '\x2', '\x2', '\b', + 'v', '\x3', '\x2', '\x2', '\x2', '\n', '|', '\x3', '\x2', '\x2', '\x2', + '\f', '~', '\x3', '\x2', '\x2', '\x2', '\xE', '\x80', '\x3', '\x2', '\x2', + '\x2', '\x10', '\x83', '\x3', '\x2', '\x2', '\x2', '\x12', '\x8B', '\x3', + '\x2', '\x2', '\x2', '\x14', '\x90', '\x3', '\x2', '\x2', '\x2', '\x16', + '\x9F', '\x3', '\x2', '\x2', '\x2', '\x18', '\xB1', '\x3', '\x2', '\x2', + '\x2', '\x1A', '\xB3', '\x3', '\x2', '\x2', '\x2', '\x1C', '\xC4', '\x3', + '\x2', '\x2', '\x2', '\x1E', '\xC7', '\x3', '\x2', '\x2', '\x2', ' ', + '\xCB', '\x3', '\x2', '\x2', '\x2', '\"', '\xCF', '\x3', '\x2', '\x2', + '\x2', '$', '\xD7', '\x3', '\x2', '\x2', '\x2', '&', '\xDB', '\x3', '\x2', + '\x2', '\x2', '(', '\xDD', '\x3', '\x2', '\x2', '\x2', '*', '\xE2', '\x3', + '\x2', '\x2', '\x2', ',', '\xE4', '\x3', '\x2', '\x2', '\x2', '.', '\xF1', + '\x3', '\x2', '\x2', '\x2', '\x30', '\x105', '\x3', '\x2', '\x2', '\x2', + '\x32', '\x112', '\x3', '\x2', '\x2', '\x2', '\x34', '\x11B', '\x3', '\x2', + '\x2', '\x2', '\x36', '\x124', '\x3', '\x2', '\x2', '\x2', '\x38', '\x127', + '\x3', '\x2', '\x2', '\x2', ':', '\x14F', '\x3', '\x2', '\x2', '\x2', + '<', '\x151', '\x3', '\x2', '\x2', '\x2', '>', '\x153', '\x3', '\x2', + '\x2', '\x2', '@', '\x155', '\x3', '\x2', '\x2', '\x2', '\x42', '\x157', + '\x3', '\x2', '\x2', '\x2', '\x44', '\x159', '\x3', '\x2', '\x2', '\x2', + '\x46', '\x15B', '\x3', '\x2', '\x2', '\x2', 'H', '\x15D', '\x3', '\x2', + '\x2', '\x2', 'J', '\x163', '\x3', '\x2', '\x2', '\x2', 'L', '\x165', + '\x3', '\x2', '\x2', '\x2', 'N', '\x197', '\x3', '\x2', '\x2', '\x2', + 'P', '\x1A6', '\x3', '\x2', '\x2', '\x2', 'R', '\x1AE', '\x3', '\x2', + '\x2', '\x2', 'T', '\x1B6', '\x3', '\x2', '\x2', '\x2', 'V', '\x1BA', + '\x3', '\x2', '\x2', '\x2', 'X', '\x1BC', '\x3', '\x2', '\x2', '\x2', + 'Z', '[', '\x5', '\x4', '\x3', '\x2', '[', '\\', '\a', '\x2', '\x2', '\x3', + '\\', '\x3', '\x3', '\x2', '\x2', '\x2', ']', '_', '\x5', '\x6', '\x4', + '\x2', '^', '`', '\x5', '\x14', '\v', '\x2', '_', '^', '\x3', '\x2', '\x2', + '\x2', '_', '`', '\x3', '\x2', '\x2', '\x2', '`', '\x62', '\x3', '\x2', + '\x2', '\x2', '\x61', '\x63', '\x5', '\x1C', '\xF', '\x2', '\x62', '\x61', + '\x3', '\x2', '\x2', '\x2', '\x62', '\x63', '\x3', '\x2', '\x2', '\x2', + '\x63', '\x65', '\x3', '\x2', '\x2', '\x2', '\x64', '\x66', '\x5', '\x1E', + '\x10', '\x2', '\x65', '\x64', '\x3', '\x2', '\x2', '\x2', '\x65', '\x66', + '\x3', '\x2', '\x2', '\x2', '\x66', 'h', '\x3', '\x2', '\x2', '\x2', 'g', + 'i', '\x5', ' ', '\x11', '\x2', 'h', 'g', '\x3', '\x2', '\x2', '\x2', + 'h', 'i', '\x3', '\x2', '\x2', '\x2', 'i', 'k', '\x3', '\x2', '\x2', '\x2', + 'j', 'l', '\x5', '(', '\x15', '\x2', 'k', 'j', '\x3', '\x2', '\x2', '\x2', + 'k', 'l', '\x3', '\x2', '\x2', '\x2', 'l', '\x5', '\x3', '\x2', '\x2', + '\x2', 'm', 'o', '\a', '\x35', '\x2', '\x2', 'n', 'p', '\a', '&', '\x2', + '\x2', 'o', 'n', '\x3', '\x2', '\x2', '\x2', 'o', 'p', '\x3', '\x2', '\x2', + '\x2', 'p', 'r', '\x3', '\x2', '\x2', '\x2', 'q', 's', '\x5', '\b', '\x5', + '\x2', 'r', 'q', '\x3', '\x2', '\x2', '\x2', 'r', 's', '\x3', '\x2', '\x2', + '\x2', 's', 't', '\x3', '\x2', '\x2', '\x2', 't', 'u', '\x5', '\n', '\x6', + '\x2', 'u', '\a', '\x3', '\x2', '\x2', '\x2', 'v', 'w', '\a', '\x36', + '\x2', '\x2', 'w', 'x', '\t', '\x2', '\x2', '\x2', 'x', '\t', '\x3', '\x2', + '\x2', '\x2', 'y', '}', '\x5', '\f', '\a', '\x2', 'z', '}', '\x5', '\xE', + '\b', '\x2', '{', '}', '\x5', '\x10', '\t', '\x2', '|', 'y', '\x3', '\x2', + '\x2', '\x2', '|', 'z', '\x3', '\x2', '\x2', '\x2', '|', '{', '\x3', '\x2', + '\x2', '\x2', '}', '\v', '\x3', '\x2', '\x2', '\x2', '~', '\x7F', '\a', + '\x3', '\x2', '\x2', '\x7F', '\r', '\x3', '\x2', '\x2', '\x2', '\x80', + '\x81', '\a', ':', '\x2', '\x2', '\x81', '\x82', '\x5', '.', '\x18', '\x2', + '\x82', '\xF', '\x3', '\x2', '\x2', '\x2', '\x83', '\x88', '\x5', '\x12', + '\n', '\x2', '\x84', '\x85', '\a', '\x4', '\x2', '\x2', '\x85', '\x87', + '\x5', '\x12', '\n', '\x2', '\x86', '\x84', '\x3', '\x2', '\x2', '\x2', + '\x87', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x88', '\x86', '\x3', '\x2', + '\x2', '\x2', '\x88', '\x89', '\x3', '\x2', '\x2', '\x2', '\x89', '\x11', + '\x3', '\x2', '\x2', '\x2', '\x8A', '\x88', '\x3', '\x2', '\x2', '\x2', + '\x8B', '\x8E', '\x5', '.', '\x18', '\x2', '\x8C', '\x8D', '\a', '!', + '\x2', '\x2', '\x8D', '\x8F', '\x5', 'V', ',', '\x2', '\x8E', '\x8C', + '\x3', '\x2', '\x2', '\x2', '\x8E', '\x8F', '\x3', '\x2', '\x2', '\x2', + '\x8F', '\x13', '\x3', '\x2', '\x2', '\x2', '\x90', '\x91', '\a', '*', + '\x2', '\x2', '\x91', '\x92', '\x5', '\x16', '\f', '\x2', '\x92', '\x15', + '\x3', '\x2', '\x2', '\x2', '\x93', '\x94', '\b', '\f', '\x1', '\x2', + '\x94', '\x99', '\x5', '\x18', '\r', '\x2', '\x95', '\x97', '\a', '!', + '\x2', '\x2', '\x96', '\x95', '\x3', '\x2', '\x2', '\x2', '\x96', '\x97', + '\x3', '\x2', '\x2', '\x2', '\x97', '\x98', '\x3', '\x2', '\x2', '\x2', + '\x98', '\x9A', '\x5', 'V', ',', '\x2', '\x99', '\x96', '\x3', '\x2', + '\x2', '\x2', '\x99', '\x9A', '\x3', '\x2', '\x2', '\x2', '\x9A', '\xA0', + '\x3', '\x2', '\x2', '\x2', '\x9B', '\x9C', '\x5', 'V', ',', '\x2', '\x9C', + '\x9D', '\a', ',', '\x2', '\x2', '\x9D', '\x9E', '\x5', '\x18', '\r', + '\x2', '\x9E', '\xA0', '\x3', '\x2', '\x2', '\x2', '\x9F', '\x93', '\x3', + '\x2', '\x2', '\x2', '\x9F', '\x9B', '\x3', '\x2', '\x2', '\x2', '\xA0', + '\xA6', '\x3', '\x2', '\x2', '\x2', '\xA1', '\xA2', '\f', '\x3', '\x2', + '\x2', '\xA2', '\xA3', '\a', '-', '\x2', '\x2', '\xA3', '\xA5', '\x5', + '\x16', '\f', '\x4', '\xA4', '\xA1', '\x3', '\x2', '\x2', '\x2', '\xA5', + '\xA8', '\x3', '\x2', '\x2', '\x2', '\xA6', '\xA4', '\x3', '\x2', '\x2', + '\x2', '\xA6', '\xA7', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x17', '\x3', + '\x2', '\x2', '\x2', '\xA8', '\xA6', '\x3', '\x2', '\x2', '\x2', '\xA9', + '\xAB', '\x5', 'V', ',', '\x2', '\xAA', '\xAC', '\x5', '\x1A', '\xE', + '\x2', '\xAB', '\xAA', '\x3', '\x2', '\x2', '\x2', '\xAB', '\xAC', '\x3', + '\x2', '\x2', '\x2', '\xAC', '\xB2', '\x3', '\x2', '\x2', '\x2', '\xAD', + '\xAE', '\a', '\x5', '\x2', '\x2', '\xAE', '\xAF', '\x5', '\x4', '\x3', + '\x2', '\xAF', '\xB0', '\a', '\x6', '\x2', '\x2', '\xB0', '\xB2', '\x3', + '\x2', '\x2', '\x2', '\xB1', '\xA9', '\x3', '\x2', '\x2', '\x2', '\xB1', + '\xAD', '\x3', '\x2', '\x2', '\x2', '\xB2', '\x19', '\x3', '\x2', '\x2', + '\x2', '\xB3', '\xC1', '\b', '\xE', '\x1', '\x2', '\xB4', '\xB5', '\f', + '\x6', '\x2', '\x2', '\xB5', '\xB6', '\a', '\a', '\x2', '\x2', '\xB6', + '\xC0', '\x5', 'V', ',', '\x2', '\xB7', '\xB8', '\f', '\x5', '\x2', '\x2', + '\xB8', '\xB9', '\a', '\b', '\x2', '\x2', '\xB9', '\xBA', '\a', '=', '\x2', + '\x2', '\xBA', '\xC0', '\a', '\t', '\x2', '\x2', '\xBB', '\xBC', '\f', + '\x4', '\x2', '\x2', '\xBC', '\xBD', '\a', '\b', '\x2', '\x2', '\xBD', + '\xBE', '\a', '>', '\x2', '\x2', '\xBE', '\xC0', '\a', '\t', '\x2', '\x2', + '\xBF', '\xB4', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xB7', '\x3', '\x2', + '\x2', '\x2', '\xBF', '\xBB', '\x3', '\x2', '\x2', '\x2', '\xC0', '\xC3', + '\x3', '\x2', '\x2', '\x2', '\xC1', '\xBF', '\x3', '\x2', '\x2', '\x2', + '\xC1', '\xC2', '\x3', '\x2', '\x2', '\x2', '\xC2', '\x1B', '\x3', '\x2', + '\x2', '\x2', '\xC3', '\xC1', '\x3', '\x2', '\x2', '\x2', '\xC4', '\xC5', + '\a', ';', '\x2', '\x2', '\xC5', '\xC6', '\x5', '.', '\x18', '\x2', '\xC6', + '\x1D', '\x3', '\x2', '\x2', '\x2', '\xC7', '\xC8', '\a', '+', '\x2', + '\x2', '\xC8', '\xC9', '\a', '$', '\x2', '\x2', '\xC9', '\xCA', '\x5', + 'P', ')', '\x2', '\xCA', '\x1F', '\x3', '\x2', '\x2', '\x2', '\xCB', '\xCC', + '\a', '\x34', '\x2', '\x2', '\xCC', '\xCD', '\a', '$', '\x2', '\x2', '\xCD', + '\xCE', '\x5', '\"', '\x12', '\x2', '\xCE', '!', '\x3', '\x2', '\x2', + '\x2', '\xCF', '\xD4', '\x5', '$', '\x13', '\x2', '\xD0', '\xD1', '\a', + '\x4', '\x2', '\x2', '\xD1', '\xD3', '\x5', '$', '\x13', '\x2', '\xD2', + '\xD0', '\x3', '\x2', '\x2', '\x2', '\xD3', '\xD6', '\x3', '\x2', '\x2', + '\x2', '\xD4', '\xD2', '\x3', '\x2', '\x2', '\x2', '\xD4', '\xD5', '\x3', + '\x2', '\x2', '\x2', '\xD5', '#', '\x3', '\x2', '\x2', '\x2', '\xD6', + '\xD4', '\x3', '\x2', '\x2', '\x2', '\xD7', '\xD9', '\x5', '.', '\x18', + '\x2', '\xD8', '\xDA', '\x5', '&', '\x14', '\x2', '\xD9', '\xD8', '\x3', + '\x2', '\x2', '\x2', '\xD9', '\xDA', '\x3', '\x2', '\x2', '\x2', '\xDA', + '%', '\x3', '\x2', '\x2', '\x2', '\xDB', '\xDC', '\t', '\x3', '\x2', '\x2', + '\xDC', '\'', '\x3', '\x2', '\x2', '\x2', '\xDD', '\xDE', '\a', '\x32', + '\x2', '\x2', '\xDE', '\xDF', '\x5', '*', '\x16', '\x2', '\xDF', '\xE0', + '\a', '/', '\x2', '\x2', '\xE0', '\xE1', '\x5', ',', '\x17', '\x2', '\xE1', + ')', '\x3', '\x2', '\x2', '\x2', '\xE2', '\xE3', '\t', '\x2', '\x2', '\x2', + '\xE3', '+', '\x3', '\x2', '\x2', '\x2', '\xE4', '\xE5', '\t', '\x2', + '\x2', '\x2', '\xE5', '-', '\x3', '\x2', '\x2', '\x2', '\xE6', '\xE7', + '\b', '\x18', '\x1', '\x2', '\xE7', '\xF2', '\x5', '\x30', '\x19', '\x2', + '\xE8', '\xEA', '\x5', '\x38', '\x1D', '\x2', '\xE9', '\xEB', '\a', '\x30', + '\x2', '\x2', '\xEA', '\xE9', '\x3', '\x2', '\x2', '\x2', '\xEA', '\xEB', + '\x3', '\x2', '\x2', '\x2', '\xEB', '\xEC', '\x3', '\x2', '\x2', '\x2', + '\xEC', '\xED', '\a', '#', '\x2', '\x2', '\xED', '\xEE', '\x5', '\x38', + '\x1D', '\x2', '\xEE', '\xEF', '\a', '\x1F', '\x2', '\x2', '\xEF', '\xF0', + '\x5', '\x38', '\x1D', '\x2', '\xF0', '\xF2', '\x3', '\x2', '\x2', '\x2', + '\xF1', '\xE6', '\x3', '\x2', '\x2', '\x2', '\xF1', '\xE8', '\x3', '\x2', + '\x2', '\x2', '\xF2', '\xFE', '\x3', '\x2', '\x2', '\x2', '\xF3', '\xF4', + '\f', '\x6', '\x2', '\x2', '\xF4', '\xF5', '\a', '\n', '\x2', '\x2', '\xF5', + '\xF6', '\x5', '.', '\x18', '\x2', '\xF6', '\xF7', '\a', '\v', '\x2', + '\x2', '\xF7', '\xF8', '\x5', '.', '\x18', '\a', '\xF8', '\xFD', '\x3', + '\x2', '\x2', '\x2', '\xF9', '\xFA', '\f', '\x5', '\x2', '\x2', '\xFA', + '\xFB', '\a', '\f', '\x2', '\x2', '\xFB', '\xFD', '\x5', '.', '\x18', + '\x6', '\xFC', '\xF3', '\x3', '\x2', '\x2', '\x2', '\xFC', '\xF9', '\x3', + '\x2', '\x2', '\x2', '\xFD', '\x100', '\x3', '\x2', '\x2', '\x2', '\xFE', + '\xFC', '\x3', '\x2', '\x2', '\x2', '\xFE', '\xFF', '\x3', '\x2', '\x2', + '\x2', '\xFF', '/', '\x3', '\x2', '\x2', '\x2', '\x100', '\xFE', '\x3', + '\x2', '\x2', '\x2', '\x101', '\x102', '\b', '\x19', '\x1', '\x2', '\x102', + '\x106', '\x5', '\x38', '\x1D', '\x2', '\x103', '\x106', '\x5', '\x32', + '\x1A', '\x2', '\x104', '\x106', '\x5', '\x34', '\x1B', '\x2', '\x105', + '\x101', '\x3', '\x2', '\x2', '\x2', '\x105', '\x103', '\x3', '\x2', '\x2', + '\x2', '\x105', '\x104', '\x3', '\x2', '\x2', '\x2', '\x106', '\x10F', + '\x3', '\x2', '\x2', '\x2', '\x107', '\x108', '\f', '\x4', '\x2', '\x2', + '\x108', '\x109', '\a', '\x1F', '\x2', '\x2', '\x109', '\x10E', '\x5', + '\x30', '\x19', '\x5', '\x10A', '\x10B', '\f', '\x3', '\x2', '\x2', '\x10B', + '\x10C', '\a', '\x33', '\x2', '\x2', '\x10C', '\x10E', '\x5', '\x30', + '\x19', '\x4', '\x10D', '\x107', '\x3', '\x2', '\x2', '\x2', '\x10D', + '\x10A', '\x3', '\x2', '\x2', '\x2', '\x10E', '\x111', '\x3', '\x2', '\x2', + '\x2', '\x10F', '\x10D', '\x3', '\x2', '\x2', '\x2', '\x10F', '\x110', + '\x3', '\x2', '\x2', '\x2', '\x110', '\x31', '\x3', '\x2', '\x2', '\x2', + '\x111', '\x10F', '\x3', '\x2', '\x2', '\x2', '\x112', '\x114', '\x5', + '\x38', '\x1D', '\x2', '\x113', '\x115', '\a', '\x30', '\x2', '\x2', '\x114', + '\x113', '\x3', '\x2', '\x2', '\x2', '\x114', '\x115', '\x3', '\x2', '\x2', + '\x2', '\x115', '\x116', '\x3', '\x2', '\x2', '\x2', '\x116', '\x117', + '\a', ',', '\x2', '\x2', '\x117', '\x118', '\a', '\x5', '\x2', '\x2', + '\x118', '\x119', '\x5', 'P', ')', '\x2', '\x119', '\x11A', '\a', '\x6', + '\x2', '\x2', '\x11A', '\x33', '\x3', '\x2', '\x2', '\x2', '\x11B', '\x11D', + '\x5', '\x38', '\x1D', '\x2', '\x11C', '\x11E', '\a', '\x30', '\x2', '\x2', + '\x11D', '\x11C', '\x3', '\x2', '\x2', '\x2', '\x11D', '\x11E', '\x3', + '\x2', '\x2', '\x2', '\x11E', '\x11F', '\x3', '\x2', '\x2', '\x2', '\x11F', + '\x120', '\a', '.', '\x2', '\x2', '\x120', '\x122', '\x5', '\x38', '\x1D', + '\x2', '\x121', '\x123', '\x5', '\x36', '\x1C', '\x2', '\x122', '\x121', + '\x3', '\x2', '\x2', '\x2', '\x122', '\x123', '\x3', '\x2', '\x2', '\x2', + '\x123', '\x35', '\x3', '\x2', '\x2', '\x2', '\x124', '\x125', '\a', '\'', + '\x2', '\x2', '\x125', '\x126', '\a', '>', '\x2', '\x2', '\x126', '\x37', + '\x3', '\x2', '\x2', '\x2', '\x127', '\x128', '\b', '\x1D', '\x1', '\x2', + '\x128', '\x129', '\x5', 'J', '&', '\x2', '\x129', '\x14C', '\x3', '\x2', + '\x2', '\x2', '\x12A', '\x12B', '\f', '\n', '\x2', '\x2', '\x12B', '\x12C', + '\x5', ':', '\x1E', '\x2', '\x12C', '\x12D', '\x5', '\x38', '\x1D', '\v', + '\x12D', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x12E', '\x12F', '\f', + '\t', '\x2', '\x2', '\x12F', '\x130', '\x5', '<', '\x1F', '\x2', '\x130', + '\x131', '\x5', '\x38', '\x1D', '\n', '\x131', '\x14B', '\x3', '\x2', + '\x2', '\x2', '\x132', '\x133', '\f', '\b', '\x2', '\x2', '\x133', '\x134', + '\x5', '>', ' ', '\x2', '\x134', '\x135', '\x5', '\x38', '\x1D', '\t', + '\x135', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x136', '\x137', '\f', + '\a', '\x2', '\x2', '\x137', '\x138', '\x5', '@', '!', '\x2', '\x138', + '\x139', '\x5', '\x38', '\x1D', '\b', '\x139', '\x14B', '\x3', '\x2', + '\x2', '\x2', '\x13A', '\x13B', '\f', '\x6', '\x2', '\x2', '\x13B', '\x13C', + '\x5', '\x42', '\"', '\x2', '\x13C', '\x13D', '\x5', '\x38', '\x1D', '\a', + '\x13D', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x13E', '\x13F', '\f', + '\x5', '\x2', '\x2', '\x13F', '\x140', '\x5', '\x44', '#', '\x2', '\x140', + '\x141', '\x5', '\x38', '\x1D', '\x6', '\x141', '\x14B', '\x3', '\x2', + '\x2', '\x2', '\x142', '\x143', '\f', '\x4', '\x2', '\x2', '\x143', '\x144', + '\x5', '\x46', '$', '\x2', '\x144', '\x145', '\x5', '\x38', '\x1D', '\x5', + '\x145', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x146', '\x147', '\f', + '\x3', '\x2', '\x2', '\x147', '\x148', '\x5', 'H', '%', '\x2', '\x148', + '\x149', '\x5', '\x38', '\x1D', '\x4', '\x149', '\x14B', '\x3', '\x2', + '\x2', '\x2', '\x14A', '\x12A', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x12E', + '\x3', '\x2', '\x2', '\x2', '\x14A', '\x132', '\x3', '\x2', '\x2', '\x2', + '\x14A', '\x136', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x13A', '\x3', + '\x2', '\x2', '\x2', '\x14A', '\x13E', '\x3', '\x2', '\x2', '\x2', '\x14A', + '\x142', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x146', '\x3', '\x2', '\x2', + '\x2', '\x14B', '\x14E', '\x3', '\x2', '\x2', '\x2', '\x14C', '\x14A', + '\x3', '\x2', '\x2', '\x2', '\x14C', '\x14D', '\x3', '\x2', '\x2', '\x2', + '\x14D', '\x39', '\x3', '\x2', '\x2', '\x2', '\x14E', '\x14C', '\x3', + '\x2', '\x2', '\x2', '\x14F', '\x150', '\t', '\x4', '\x2', '\x2', '\x150', + ';', '\x3', '\x2', '\x2', '\x2', '\x151', '\x152', '\t', '\x5', '\x2', + '\x2', '\x152', '=', '\x3', '\x2', '\x2', '\x2', '\x153', '\x154', '\t', + '\x6', '\x2', '\x2', '\x154', '?', '\x3', '\x2', '\x2', '\x2', '\x155', + '\x156', '\t', '\a', '\x2', '\x2', '\x156', '\x41', '\x3', '\x2', '\x2', + '\x2', '\x157', '\x158', '\a', '\x17', '\x2', '\x2', '\x158', '\x43', + '\x3', '\x2', '\x2', '\x2', '\x159', '\x15A', '\a', '\x18', '\x2', '\x2', + '\x15A', '\x45', '\x3', '\x2', '\x2', '\x2', '\x15B', '\x15C', '\a', '\x19', + '\x2', '\x2', '\x15C', 'G', '\x3', '\x2', '\x2', '\x2', '\x15D', '\x15E', + '\a', '\x1A', '\x2', '\x2', '\x15E', 'I', '\x3', '\x2', '\x2', '\x2', + '\x15F', '\x164', '\x5', 'N', '(', '\x2', '\x160', '\x161', '\x5', 'L', + '\'', '\x2', '\x161', '\x162', '\x5', 'J', '&', '\x2', '\x162', '\x164', + '\x3', '\x2', '\x2', '\x2', '\x163', '\x15F', '\x3', '\x2', '\x2', '\x2', + '\x163', '\x160', '\x3', '\x2', '\x2', '\x2', '\x164', 'K', '\x3', '\x2', + '\x2', '\x2', '\x165', '\x166', '\t', '\b', '\x2', '\x2', '\x166', 'M', + '\x3', '\x2', '\x2', '\x2', '\x167', '\x168', '\b', '(', '\x1', '\x2', + '\x168', '\x198', '\x5', 'V', ',', '\x2', '\x169', '\x198', '\a', '@', + '\x2', '\x2', '\x16A', '\x198', '\x5', 'X', '-', '\x2', '\x16B', '\x16D', + '\a', '\b', '\x2', '\x2', '\x16C', '\x16E', '\x5', 'P', ')', '\x2', '\x16D', + '\x16C', '\x3', '\x2', '\x2', '\x2', '\x16D', '\x16E', '\x3', '\x2', '\x2', + '\x2', '\x16E', '\x16F', '\x3', '\x2', '\x2', '\x2', '\x16F', '\x198', + '\a', '\t', '\x2', '\x2', '\x170', '\x172', '\a', '\x1C', '\x2', '\x2', + '\x171', '\x173', '\x5', 'R', '*', '\x2', '\x172', '\x171', '\x3', '\x2', + '\x2', '\x2', '\x172', '\x173', '\x3', '\x2', '\x2', '\x2', '\x173', '\x174', + '\x3', '\x2', '\x2', '\x2', '\x174', '\x198', '\a', '\x1D', '\x2', '\x2', + '\x175', '\x176', '\a', '\x38', '\x2', '\x2', '\x176', '\x178', '\a', + '\a', '\x2', '\x2', '\x177', '\x175', '\x3', '\x2', '\x2', '\x2', '\x177', + '\x178', '\x3', '\x2', '\x2', '\x2', '\x178', '\x179', '\x3', '\x2', '\x2', + '\x2', '\x179', '\x17A', '\x5', 'V', ',', '\x2', '\x17A', '\x17C', '\a', + '\x5', '\x2', '\x2', '\x17B', '\x17D', '\x5', 'P', ')', '\x2', '\x17C', + '\x17B', '\x3', '\x2', '\x2', '\x2', '\x17C', '\x17D', '\x3', '\x2', '\x2', + '\x2', '\x17D', '\x17E', '\x3', '\x2', '\x2', '\x2', '\x17E', '\x17F', + '\a', '\x6', '\x2', '\x2', '\x17F', '\x198', '\x3', '\x2', '\x2', '\x2', + '\x180', '\x181', '\a', '\x5', '\x2', '\x2', '\x181', '\x182', '\x5', + '.', '\x18', '\x2', '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', + '\x198', '\x3', '\x2', '\x2', '\x2', '\x184', '\x185', '\a', '\x5', '\x2', + '\x2', '\x185', '\x186', '\x5', '\x4', '\x3', '\x2', '\x186', '\x187', + '\a', '\x6', '\x2', '\x2', '\x187', '\x198', '\x3', '\x2', '\x2', '\x2', + '\x188', '\x189', '\a', '(', '\x2', '\x2', '\x189', '\x18A', '\a', '\x5', + '\x2', '\x2', '\x18A', '\x18B', '\x5', '\x4', '\x3', '\x2', '\x18B', '\x18C', + '\a', '\x6', '\x2', '\x2', '\x18C', '\x198', '\x3', '\x2', '\x2', '\x2', + '\x18D', '\x18E', '\a', ' ', '\x2', '\x2', '\x18E', '\x18F', '\a', '\x5', + '\x2', '\x2', '\x18F', '\x190', '\x5', '\x4', '\x3', '\x2', '\x190', '\x191', + '\a', '\x6', '\x2', '\x2', '\x191', '\x198', '\x3', '\x2', '\x2', '\x2', + '\x192', '\x193', '\a', '\x1E', '\x2', '\x2', '\x193', '\x194', '\a', + '\x5', '\x2', '\x2', '\x194', '\x195', '\x5', '\x4', '\x3', '\x2', '\x195', + '\x196', '\a', '\x6', '\x2', '\x2', '\x196', '\x198', '\x3', '\x2', '\x2', + '\x2', '\x197', '\x167', '\x3', '\x2', '\x2', '\x2', '\x197', '\x169', + '\x3', '\x2', '\x2', '\x2', '\x197', '\x16A', '\x3', '\x2', '\x2', '\x2', + '\x197', '\x16B', '\x3', '\x2', '\x2', '\x2', '\x197', '\x170', '\x3', + '\x2', '\x2', '\x2', '\x197', '\x177', '\x3', '\x2', '\x2', '\x2', '\x197', + '\x180', '\x3', '\x2', '\x2', '\x2', '\x197', '\x184', '\x3', '\x2', '\x2', + '\x2', '\x197', '\x188', '\x3', '\x2', '\x2', '\x2', '\x197', '\x18D', + '\x3', '\x2', '\x2', '\x2', '\x197', '\x192', '\x3', '\x2', '\x2', '\x2', + '\x198', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x199', '\x19A', '\f', + '\a', '\x2', '\x2', '\x19A', '\x19B', '\a', '\a', '\x2', '\x2', '\x19B', + '\x1A2', '\x5', 'V', ',', '\x2', '\x19C', '\x19D', '\f', '\x6', '\x2', + '\x2', '\x19D', '\x19E', '\a', '\b', '\x2', '\x2', '\x19E', '\x19F', '\x5', + '.', '\x18', '\x2', '\x19F', '\x1A0', '\a', '\t', '\x2', '\x2', '\x1A0', + '\x1A2', '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x199', '\x3', '\x2', '\x2', + '\x2', '\x1A1', '\x19C', '\x3', '\x2', '\x2', '\x2', '\x1A2', '\x1A5', + '\x3', '\x2', '\x2', '\x2', '\x1A3', '\x1A1', '\x3', '\x2', '\x2', '\x2', + '\x1A3', '\x1A4', '\x3', '\x2', '\x2', '\x2', '\x1A4', 'O', '\x3', '\x2', + '\x2', '\x2', '\x1A5', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x1A6', '\x1AB', + '\x5', '.', '\x18', '\x2', '\x1A7', '\x1A8', '\a', '\x4', '\x2', '\x2', + '\x1A8', '\x1AA', '\x5', '.', '\x18', '\x2', '\x1A9', '\x1A7', '\x3', + '\x2', '\x2', '\x2', '\x1AA', '\x1AD', '\x3', '\x2', '\x2', '\x2', '\x1AB', + '\x1A9', '\x3', '\x2', '\x2', '\x2', '\x1AB', '\x1AC', '\x3', '\x2', '\x2', + '\x2', '\x1AC', 'Q', '\x3', '\x2', '\x2', '\x2', '\x1AD', '\x1AB', '\x3', + '\x2', '\x2', '\x2', '\x1AE', '\x1B3', '\x5', 'T', '+', '\x2', '\x1AF', + '\x1B0', '\a', '\x4', '\x2', '\x2', '\x1B0', '\x1B2', '\x5', 'T', '+', + '\x2', '\x1B1', '\x1AF', '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B5', + '\x3', '\x2', '\x2', '\x2', '\x1B3', '\x1B1', '\x3', '\x2', '\x2', '\x2', + '\x1B3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B4', 'S', '\x3', '\x2', + '\x2', '\x2', '\x1B5', '\x1B3', '\x3', '\x2', '\x2', '\x2', '\x1B6', '\x1B7', + '\a', '>', '\x2', '\x2', '\x1B7', '\x1B8', '\a', '\v', '\x2', '\x2', '\x1B8', + '\x1B9', '\x5', '.', '\x18', '\x2', '\x1B9', 'U', '\x3', '\x2', '\x2', + '\x2', '\x1BA', '\x1BB', '\t', '\t', '\x2', '\x2', '\x1BB', 'W', '\x3', + '\x2', '\x2', '\x2', '\x1BC', '\x1BD', '\t', '\n', '\x2', '\x2', '\x1BD', + 'Y', '\x3', '\x2', '\x2', '\x2', ',', '_', '\x62', '\x65', 'h', 'k', 'o', + 'r', '|', '\x88', '\x8E', '\x96', '\x99', '\x9F', '\xA6', '\xAB', '\xB1', + '\xBF', '\xC1', '\xD4', '\xD9', '\xEA', '\xF1', '\xFC', '\xFE', '\x105', + '\x10D', '\x10F', '\x114', '\x11D', '\x122', '\x14A', '\x14C', '\x163', + '\x16D', '\x172', '\x177', '\x17C', '\x197', '\x1A1', '\x1A3', '\x1AB', + '\x1B3', }; public static readonly ATN _ATN = From c0f452257c5c04257ccd57fb7ce5fee3dd51a6c8 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Sun, 16 Oct 2022 12:34:53 -0700 Subject: [PATCH 04/16] Added tests for ALL and baselines --- ...gregateAllSqlParserBaselineTests.Tests.xml | 83 +++++++++++++++++++ ...arExpressionSqlParserBaselineTests.All.xml | 29 +++++++ .../AggregateAllSqlParserBaselineTests.cs | 43 ++++++++++ .../ScalarExpressionSqlParserBaselineTests.cs | 16 ++++ 4 files changed, 171 insertions(+) create mode 100644 Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml create mode 100644 Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/ScalarExpressionSqlParserBaselineTests.All.xml create mode 100644 Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml new file mode 100644 index 0000000000..859b023ed2 --- /dev/null +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..dee9b2b51a --- /dev/null +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/ScalarExpressionSqlParserBaselineTests.All.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs new file mode 100644 index 0000000000..085691606e --- /dev/null +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace Microsoft.Azure.Cosmos.Tests.Query.Parser +{ + using System.Collections.Generic; + using Microsoft.VisualStudio.TestTools.UnitTesting; + + [TestClass] + public sealed class AggregateAllSqlParserBaselineTests : SqlParserBaselineTests + { + [TestMethod] + public void Tests() + { + List inputs = new List() + { + CreateInput(description: "ALL in an SqlSelectItem as an alias", scalarExpression: "SELECT 1 as ALL"), + CreateInput(description: "ALL in an AliasedCollectionExpression as an alias", scalarExpression: + "SELECT * " + + "FROM (SELECT VALUE 1) as ALL"), + CreateInput(description: "ALL in an ArrayIteratorCollectionExpression", scalarExpression: + "SELECT * " + + "FROM ALL IN (SELECT VALUE 1)"), + CreateInput(description: "ALL in an InputPathCollection and IdentifierPathExpression", scalarExpression: + "SELECT * " + + "FROM ALL.ALL"), + CreateInput(description: "ALL in a PropertyRefScalarExpression", scalarExpression: "SELECT ALL"), + CreateInput(description: "ALL in a PropertyRefScalarExpression as child", scalarExpression: "SELECT c.ALL"), + CreateInput(description: "ALL in a PropertyRefScalarExpression as parent and child", scalarExpression: "SELECT ALL.ALL"), + CreateInput(description: "ALL in a function call", scalarExpression: "SELECT ALL( 1, 2)"), + CreateInput(description: "ALL in a UDF function call", scalarExpression: "SELECT udf.ALL( 1, 2)"), + }; + + this.ExecuteTestSuite(inputs); + } + + public static SqlParserBaselineTestInput CreateInput(string description, string scalarExpression) + { + return new SqlParserBaselineTestInput(description, scalarExpression); + } + } +} 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..0dc4d05d42 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,22 @@ [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 *)"), + + // Negative + CreateInput(description: "No closing parens", scalarExpression: "ALL(SELECT *") + }; + + this.ExecuteTestSuite(inputs); + } + [TestMethod] public void ArrayCreate() { From 731439089d3b91592b11ddced41d6d9dd671922f Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Thu, 20 Oct 2022 10:10:16 -0700 Subject: [PATCH 05/16] Added more tests --- ...larExpressionSqlParserBaselineTests.All.xml | 18 ++++++++++++++++++ .../ScalarExpressionSqlParserBaselineTests.cs | 14 ++++++++++++++ 2 files changed, 32 insertions(+) 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 index dee9b2b51a..70040beaf4 100644 --- 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 @@ -17,6 +17,24 @@ + + + + + + + + + + + + + + + + + + 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 0dc4d05d42..595b338fc6 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 @@ -16,6 +16,20 @@ public void All() // 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 *") From a3e88e81dc52f7d28c4547a66a501ee90da9b0db Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 21 Oct 2022 10:57:21 -0700 Subject: [PATCH 06/16] added new test, cleanup --- ...gregateAllSqlParserBaselineTests.Tests.xml | 13 +++- .../AggregateAllSqlParserBaselineTests.cs | 59 +++++++++++++------ .../ScalarExpressionSqlParserBaselineTests.cs | 4 +- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml index 859b023ed2..600af189e1 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml @@ -65,7 +65,7 @@ - + @@ -74,10 +74,19 @@ - + + + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs index 085691606e..38712dfba0 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs @@ -15,29 +15,54 @@ public void Tests() { List inputs = new List() { - CreateInput(description: "ALL in an SqlSelectItem as an alias", scalarExpression: "SELECT 1 as ALL"), - CreateInput(description: "ALL in an AliasedCollectionExpression as an alias", scalarExpression: - "SELECT * " + - "FROM (SELECT VALUE 1) as ALL"), - CreateInput(description: "ALL in an ArrayIteratorCollectionExpression", scalarExpression: - "SELECT * " + - "FROM ALL IN (SELECT VALUE 1)"), - CreateInput(description: "ALL in an InputPathCollection and IdentifierPathExpression", scalarExpression: - "SELECT * " + - "FROM ALL.ALL"), - CreateInput(description: "ALL in a PropertyRefScalarExpression", scalarExpression: "SELECT ALL"), - CreateInput(description: "ALL in a PropertyRefScalarExpression as child", scalarExpression: "SELECT c.ALL"), - CreateInput(description: "ALL in a PropertyRefScalarExpression as parent and child", scalarExpression: "SELECT ALL.ALL"), - CreateInput(description: "ALL in a function call", scalarExpression: "SELECT ALL( 1, 2)"), - CreateInput(description: "ALL in a UDF function call", scalarExpression: "SELECT udf.ALL( 1, 2)"), + 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 scalarExpression) + public static SqlParserBaselineTestInput CreateInput(string description, string query) { - return new SqlParserBaselineTestInput(description, scalarExpression); + 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 595b338fc6..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 @@ -17,7 +17,9 @@ public void All() 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: + CreateInput( + description: "multiple nested", + scalarExpression: "ALL( " + " SELECT * " + " WHERE ALL( " + From 9384e51294ab2c7f31c172663b1575c5592f18ed Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 21 Oct 2022 10:58:08 -0700 Subject: [PATCH 07/16] cleaning & fix typos --- .../src/Query/Core/Parser/sql.g4 | 224 +++++++++--------- .../Visitors/SqlObjectObfuscator.cs | 4 +- .../Visitors/SqlObjectTextSerializer.cs | 4 +- 3 files changed, 116 insertions(+), 116 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 index d632a723b5..1da8c667dd 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,10 +12,10 @@ 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 )* ; @@ -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,32 +149,32 @@ 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 - | K_ALL '(' sql_query ')' #AllScalarExpression - ; + : 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 + | K_ALL '(' sql_query ')' #AllScalarExpression + ; scalar_expression_list : scalar_expression (',' scalar_expression)*; @@ -183,9 +183,9 @@ object_property_list : object_property (',' object_property)* ; object_property : STRING_LITERAL ':' scalar_expression ; identifier - : LEX_IDENTIFIER - | K_ALL - ; + : LEX_IDENTIFIER + | K_ALL + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ @@ -231,27 +231,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 @@ -262,21 +262,21 @@ fragment HEX ; fragment SAFECODEPOINTWITHSINGLEQUOTATION - : ~ ['\\\u0000-\u001F] - ; + : ~ ['\\\u0000-\u001F] + ; fragment SAFECODEPOINTWITHDOUBLEQUOTATION - : ~ ["\\\u0000-\u001F] - ; + : ~ ["\\\u0000-\u001F] + ; LEX_IDENTIFIER - : - | [a-zA-Z_]([a-zA-Z_]|DIGIT)* - ; + : + | [a-zA-Z_]([a-zA-Z_]|DIGIT)* + ; PARAMETER - : '@'LEX_IDENTIFIER - ; + : '@'LEX_IDENTIFIER + ; /*--------------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------------*/ diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs index ee9750c985..5e6faaef45 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectObfuscator.cs @@ -44,9 +44,9 @@ public override SqlObject Visit(SqlAliasedCollectionExpression sqlAliasedCollect sqlAliasedCollectionExpression.Alias.Accept(this) as SqlIdentifier); } - public override SqlObject Visit(SqlAllScalarExpression sqlExistsScalarExpression) + public override SqlObject Visit(SqlAllScalarExpression sqlAllScalarExpression) { - return SqlExistsScalarExpression.Create(sqlExistsScalarExpression.Subquery.Accept(this) as SqlQuery); + return SqlExistsScalarExpression.Create(sqlAllScalarExpression.Subquery.Accept(this) as SqlQuery); } public override SqlObject Visit(SqlArrayCreateScalarExpression sqlArrayCreateScalarExpression) diff --git a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs index 2820aa7028..75076e512c 100644 --- a/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs +++ b/Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs @@ -39,11 +39,11 @@ public override void Visit(SqlAliasedCollectionExpression sqlAliasedCollectionEx } } - public override void Visit(SqlAllScalarExpression sqlExistsScalarExpression) + public override void Visit(SqlAllScalarExpression sqlAllScalarExpression) { this.writer.Write("ALL"); this.WriteStartContext("("); - sqlExistsScalarExpression.Subquery.Accept(this); + sqlAllScalarExpression.Subquery.Accept(this); this.WriteEndContext(")"); } From 852c1ce29658bdbf369bbd2db8e3b7702b871795 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 21 Oct 2022 13:07:03 -0700 Subject: [PATCH 08/16] fixed typo --- .../Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs index 9852e703da..4faa4f1019 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Pipeline/CosmosQueryExecutionContextFactory.cs @@ -788,7 +788,7 @@ private enum Aggregate public static readonly AggregateScalarExpressionDetector Singleton = new AggregateScalarExpressionDetector(); - public override bool Visit(SqlAllScalarExpression sqlExistsScalarExpression) + public override bool Visit(SqlAllScalarExpression sqlAllScalarExpression) { // No need to worry about aggregates within the subquery (they will recursively get rewritten). return false; From 1247473285862cb13b562dceab501499da89f12f Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Tue, 1 Nov 2022 10:40:30 -0700 Subject: [PATCH 09/16] Added new baseline test file names to csproj file --- .../Microsoft.Azure.Cosmos.Tests.csproj | 6 ++++++ 1 file changed, 6 insertions(+) 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 2fe8b7feec..ca7554e526 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 @@ -174,6 +174,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest From c29296ca01c93771d70e4bb4692f9d0b818d389e Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Tue, 1 Nov 2022 13:04:22 -0700 Subject: [PATCH 10/16] renamed AggregateAll to AggregateSubquery to accomodate FIRST and LAST later --- ...ts.xml => AggregateSubquerySqlParserBaselineTests.All.xml} | 0 .../Microsoft.Azure.Cosmos.Tests.csproj | 4 ++-- ...ineTests.cs => AggregateSubquerySqlParserBaselineTests.cs} | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/{AggregateAllSqlParserBaselineTests.Tests.xml => AggregateSubquerySqlParserBaselineTests.All.xml} (100%) rename Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/{AggregateAllSqlParserBaselineTests.cs => AggregateSubquerySqlParserBaselineTests.cs} (96%) diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateSubquerySqlParserBaselineTests.All.xml similarity index 100% rename from Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateAllSqlParserBaselineTests.Tests.xml rename to Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/BaselineTest/TestBaseline/AggregateSubquerySqlParserBaselineTests.All.xml 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 ca7554e526..2d8d5c7a57 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 @@ -177,7 +177,7 @@ PreserveNewest - + PreserveNewest diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs similarity index 96% rename from Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs rename to Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs index 38712dfba0..b7b82e9cee 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateAllSqlParserBaselineTests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs @@ -8,10 +8,10 @@ namespace Microsoft.Azure.Cosmos.Tests.Query.Parser using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] - public sealed class AggregateAllSqlParserBaselineTests : SqlParserBaselineTests + public sealed class AggregateSubquerySqlParserBaselineTests : SqlParserBaselineTests { [TestMethod] - public void Tests() + public void All() { List inputs = new List() { From 71377a1f54db15fb395ea685365be000f9648ae3 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 01:55:40 -0800 Subject: [PATCH 11/16] Added keywords for 'left' and 'right' and respective function calls --- .../src/Query/Core/Parser/CstToAstVisitor.cs | 28 +- .../src/Query/Core/Parser/IsqlListener.cs | 10 + .../src/Query/Core/Parser/IsqlVisitor.cs | 6 + .../src/Query/Core/Parser/sql.g4 | 13 +- .../src/Query/Core/Parser/sqlBaseListener.cs | 12 + .../src/Query/Core/Parser/sqlBaseVisitor.cs | 10 + .../src/Query/Core/Parser/sqlLexer.cs | 948 +++++------ .../src/Query/Core/Parser/sqlParser.cs | 1423 +++++++++-------- 8 files changed, 1322 insertions(+), 1128 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs index 9df2d48826..2e8054bc30 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs @@ -571,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? ')' + Contract.Requires(context.function_call_scalar_expression != null); + + 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) { diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs index 26bb6b3532..24a4a0694a 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlListener.cs @@ -682,6 +682,16 @@ internal interface IsqlListener : IParseTreeListener { /// The parse tree. void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); /// + /// Enter a parse tree produced by . + /// + /// The parse tree. + void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context); + /// + /// Exit a parse tree produced by . + /// + /// The parse tree. + void ExitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext 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 b697d0673f..e22a9d4218 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/IsqlVisitor.cs @@ -417,6 +417,12 @@ internal interface IsqlVisitor : IParseTreeVisitor { /// The visitor result. Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context); /// + /// Visit a parse tree produced by . + /// + /// The parse tree. + /// The visitor result. + Result VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext 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 1da8c667dd..8c731b3130 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 @@ -166,7 +166,6 @@ primary_expression | 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 @@ -174,8 +173,15 @@ primary_expression | 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)* ; @@ -207,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; @@ -214,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'; @@ -270,8 +278,7 @@ fragment SAFECODEPOINTWITHDOUBLEQUOTATION ; LEX_IDENTIFIER - : - | [a-zA-Z_]([a-zA-Z_]|DIGIT)* + : [a-zA-Z_]([a-zA-Z_]|DIGIT)* ; PARAMETER diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs index beebec4b00..18003391b1 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseListener.cs @@ -806,6 +806,18 @@ public virtual void EnterPropertyRefScalarExpressionRecursive([NotNull] sqlParse /// The parse tree. public virtual void ExitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext context) { } /// + /// Enter a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + public virtual void EnterFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext context) { } + /// + /// Exit a parse tree produced by . + /// The default implementation does nothing. + /// + /// The parse tree. + 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. /// diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs index df7ed92ed7..bb3b86379d 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlBaseVisitor.cs @@ -659,6 +659,16 @@ internal partial class sqlBaseVisitor : AbstractParseTreeVisitor /// The visitor result. public virtual Result VisitPropertyRefScalarExpressionRecursive([NotNull] sqlParser.PropertyRefScalarExpressionRecursiveContext 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 VisitFunction_call_scalar_expression([NotNull] sqlParser.Function_call_scalar_expressionContext 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 105362273a..2e20cc14f6 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs @@ -37,10 +37,11 @@ public const int 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_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_LIKE=44, - K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, - K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, - WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, LEX_IDENTIFIER=61, PARAMETER=62; + 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" }; @@ -55,13 +56,13 @@ public const int "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "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_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", - "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" + "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" }; @@ -79,18 +80,18 @@ 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, 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_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_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", - "LEX_IDENTIFIER", "PARAMETER" + "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', '@', '\x23F', '\b', '\x1', '\x4', '\x2', '\t', '\x2', + '\x5964', '\x2', '\x42', '\x24B', '\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,457 +155,466 @@ 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', '_', '\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', '\t', '\x3', '\n', '\x3', '\n', '\x3', '\v', '\x3', - '\v', '\x3', '\v', '\x3', '\f', '\x3', '\f', '\x3', '\r', '\x3', '\r', - '\x3', '\xE', '\x3', '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\x10', - '\x3', '\x10', '\x3', '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', - '\x3', '\x12', '\x3', '\x13', '\x3', '\x13', '\x3', '\x13', '\x3', '\x14', - '\x3', '\x14', '\x3', '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', - '\x3', '\x16', '\x3', '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', - '\x3', '\x19', '\x3', '\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', '\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', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', - '\x31', '\x3', '\x31', '\x3', '\x31', '\x3', '\x32', '\x3', '\x32', '\x3', - '\x32', '\x3', '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', '\x33', '\x3', - '\x33', '\x3', '\x33', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', - '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x34', '\x3', '\x35', '\x3', - '\x35', '\x3', '\x35', '\x3', '\x35', '\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', '\x38', '\x3', '\x38', '\x3', '\x38', '\x3', - '\x38', '\x3', '\x38', '\x3', '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', - '\x39', '\x3', '\x39', '\x3', '\x39', '\x3', ':', '\x3', ':', '\x3', ':', - '\x3', ':', '\x3', ':', '\x3', ':', '\x3', ';', '\x6', ';', '\x19F', '\n', - ';', '\r', ';', '\xE', ';', '\x1A0', '\x3', ';', '\x3', ';', '\x3', '<', - '\x5', '<', '\x1A6', '\n', '<', '\x3', '<', '\x6', '<', '\x1A9', '\n', - '<', '\r', '<', '\xE', '<', '\x1AA', '\x3', '<', '\x3', '<', '\a', '<', - '\x1AF', '\n', '<', '\f', '<', '\xE', '<', '\x1B2', '\v', '<', '\x5', - '<', '\x1B4', '\n', '<', '\x3', '<', '\x3', '<', '\x5', '<', '\x1B8', - '\n', '<', '\x3', '<', '\x6', '<', '\x1BB', '\n', '<', '\r', '<', '\xE', - '<', '\x1BC', '\x5', '<', '\x1BF', '\n', '<', '\x3', '<', '\x5', '<', - '\x1C2', '\n', '<', '\x3', '<', '\x3', '<', '\x6', '<', '\x1C6', '\n', - '<', '\r', '<', '\xE', '<', '\x1C7', '\x3', '<', '\x3', '<', '\x5', '<', - '\x1CC', '\n', '<', '\x3', '<', '\x6', '<', '\x1CF', '\n', '<', '\r', - '<', '\xE', '<', '\x1D0', '\x5', '<', '\x1D3', '\n', '<', '\x5', '<', - '\x1D5', '\n', '<', '\x3', '=', '\x3', '=', '\x3', '=', '\a', '=', '\x1DA', - '\n', '=', '\f', '=', '\xE', '=', '\x1DD', '\v', '=', '\x3', '=', '\x3', - '=', '\x3', '=', '\x3', '=', '\a', '=', '\x1E3', '\n', '=', '\f', '=', - '\xE', '=', '\x1E6', '\v', '=', '\x3', '=', '\x5', '=', '\x1E9', '\n', - '=', '\x3', '>', '\x3', '>', '\x3', '>', '\x5', '>', '\x1EE', '\n', '>', - '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', '\x3', '?', - '\x3', '@', '\x3', '@', '\x3', '\x41', '\x3', '\x41', '\x3', '\x42', '\x3', - '\x42', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\x3', '\x43', '\a', - '\x43', '\x200', '\n', '\x43', '\f', '\x43', '\xE', '\x43', '\x203', '\v', - '\x43', '\x5', '\x43', '\x205', '\n', '\x43', '\x3', '\x44', '\x3', '\x44', - '\x3', '\x44', '\x3', '\x45', '\x3', '\x45', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', 'R', - '\x3', 'S', '\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', '^', - '\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', '\x7F', '\x2', '\x81', '\x2', '\x83', - '\x2', '\x85', '?', '\x87', '@', '\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', '\xBD', '\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', '\x235', '\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', '\x85', '\x3', '\x2', - '\x2', '\x2', '\x2', '\x87', '\x3', '\x2', '\x2', '\x2', '\x3', '\xBF', - '\x3', '\x2', '\x2', '\x2', '\x5', '\xC1', '\x3', '\x2', '\x2', '\x2', - '\a', '\xC3', '\x3', '\x2', '\x2', '\x2', '\t', '\xC5', '\x3', '\x2', - '\x2', '\x2', '\v', '\xC7', '\x3', '\x2', '\x2', '\x2', '\r', '\xC9', - '\x3', '\x2', '\x2', '\x2', '\xF', '\xCB', '\x3', '\x2', '\x2', '\x2', - '\x11', '\xCD', '\x3', '\x2', '\x2', '\x2', '\x13', '\xCF', '\x3', '\x2', - '\x2', '\x2', '\x15', '\xD1', '\x3', '\x2', '\x2', '\x2', '\x17', '\xD4', - '\x3', '\x2', '\x2', '\x2', '\x19', '\xD6', '\x3', '\x2', '\x2', '\x2', - '\x1B', '\xD8', '\x3', '\x2', '\x2', '\x2', '\x1D', '\xDA', '\x3', '\x2', - '\x2', '\x2', '\x1F', '\xDC', '\x3', '\x2', '\x2', '\x2', '!', '\xDE', - '\x3', '\x2', '\x2', '\x2', '#', '\xE0', '\x3', '\x2', '\x2', '\x2', '%', - '\xE3', '\x3', '\x2', '\x2', '\x2', '\'', '\xE6', '\x3', '\x2', '\x2', - '\x2', ')', '\xE8', '\x3', '\x2', '\x2', '\x2', '+', '\xEB', '\x3', '\x2', - '\x2', '\x2', '-', '\xED', '\x3', '\x2', '\x2', '\x2', '/', '\xEF', '\x3', - '\x2', '\x2', '\x2', '\x31', '\xF1', '\x3', '\x2', '\x2', '\x2', '\x33', - '\xF4', '\x3', '\x2', '\x2', '\x2', '\x35', '\xF6', '\x3', '\x2', '\x2', - '\x2', '\x37', '\xF8', '\x3', '\x2', '\x2', '\x2', '\x39', '\xFA', '\x3', - '\x2', '\x2', '\x2', ';', '\xFE', '\x3', '\x2', '\x2', '\x2', '=', '\x102', - '\x3', '\x2', '\x2', '\x2', '?', '\x108', '\x3', '\x2', '\x2', '\x2', - '\x41', '\x10B', '\x3', '\x2', '\x2', '\x2', '\x43', '\x10F', '\x3', '\x2', - '\x2', '\x2', '\x45', '\x117', '\x3', '\x2', '\x2', '\x2', 'G', '\x11A', - '\x3', '\x2', '\x2', '\x2', 'I', '\x11F', '\x3', '\x2', '\x2', '\x2', - 'K', '\x128', '\x3', '\x2', '\x2', '\x2', 'M', '\x12F', '\x3', '\x2', - '\x2', '\x2', 'O', '\x136', '\x3', '\x2', '\x2', '\x2', 'Q', '\x13C', - '\x3', '\x2', '\x2', '\x2', 'S', '\x141', '\x3', '\x2', '\x2', '\x2', - 'U', '\x147', '\x3', '\x2', '\x2', '\x2', 'W', '\x14A', '\x3', '\x2', - '\x2', '\x2', 'Y', '\x14F', '\x3', '\x2', '\x2', '\x2', '[', '\x154', - '\x3', '\x2', '\x2', '\x2', ']', '\x15A', '\x3', '\x2', '\x2', '\x2', - '_', '\x15E', '\x3', '\x2', '\x2', '\x2', '\x61', '\x163', '\x3', '\x2', - '\x2', '\x2', '\x63', '\x16A', '\x3', '\x2', '\x2', '\x2', '\x65', '\x16D', - '\x3', '\x2', '\x2', '\x2', 'g', '\x173', '\x3', '\x2', '\x2', '\x2', - 'i', '\x17A', '\x3', '\x2', '\x2', '\x2', 'k', '\x17E', '\x3', '\x2', - '\x2', '\x2', 'm', '\x183', '\x3', '\x2', '\x2', '\x2', 'o', '\x187', - '\x3', '\x2', '\x2', '\x2', 'q', '\x191', '\x3', '\x2', '\x2', '\x2', - 's', '\x197', '\x3', '\x2', '\x2', '\x2', 'u', '\x19E', '\x3', '\x2', - '\x2', '\x2', 'w', '\x1D4', '\x3', '\x2', '\x2', '\x2', 'y', '\x1E8', - '\x3', '\x2', '\x2', '\x2', '{', '\x1EA', '\x3', '\x2', '\x2', '\x2', - '}', '\x1EF', '\x3', '\x2', '\x2', '\x2', '\x7F', '\x1F5', '\x3', '\x2', - '\x2', '\x2', '\x81', '\x1F7', '\x3', '\x2', '\x2', '\x2', '\x83', '\x1F9', - '\x3', '\x2', '\x2', '\x2', '\x85', '\x204', '\x3', '\x2', '\x2', '\x2', - '\x87', '\x206', '\x3', '\x2', '\x2', '\x2', '\x89', '\x209', '\x3', '\x2', - '\x2', '\x2', '\x8B', '\x20B', '\x3', '\x2', '\x2', '\x2', '\x8D', '\x20D', - '\x3', '\x2', '\x2', '\x2', '\x8F', '\x20F', '\x3', '\x2', '\x2', '\x2', - '\x91', '\x211', '\x3', '\x2', '\x2', '\x2', '\x93', '\x213', '\x3', '\x2', - '\x2', '\x2', '\x95', '\x215', '\x3', '\x2', '\x2', '\x2', '\x97', '\x217', - '\x3', '\x2', '\x2', '\x2', '\x99', '\x219', '\x3', '\x2', '\x2', '\x2', - '\x9B', '\x21B', '\x3', '\x2', '\x2', '\x2', '\x9D', '\x21D', '\x3', '\x2', - '\x2', '\x2', '\x9F', '\x21F', '\x3', '\x2', '\x2', '\x2', '\xA1', '\x221', - '\x3', '\x2', '\x2', '\x2', '\xA3', '\x223', '\x3', '\x2', '\x2', '\x2', - '\xA5', '\x225', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x227', '\x3', '\x2', - '\x2', '\x2', '\xA9', '\x229', '\x3', '\x2', '\x2', '\x2', '\xAB', '\x22B', - '\x3', '\x2', '\x2', '\x2', '\xAD', '\x22D', '\x3', '\x2', '\x2', '\x2', - '\xAF', '\x22F', '\x3', '\x2', '\x2', '\x2', '\xB1', '\x231', '\x3', '\x2', - '\x2', '\x2', '\xB3', '\x233', '\x3', '\x2', '\x2', '\x2', '\xB5', '\x235', - '\x3', '\x2', '\x2', '\x2', '\xB7', '\x237', '\x3', '\x2', '\x2', '\x2', - '\xB9', '\x239', '\x3', '\x2', '\x2', '\x2', '\xBB', '\x23B', '\x3', '\x2', - '\x2', '\x2', '\xBD', '\x23D', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xC0', - '\a', ',', '\x2', '\x2', '\xC0', '\x4', '\x3', '\x2', '\x2', '\x2', '\xC1', - '\xC2', '\a', '.', '\x2', '\x2', '\xC2', '\x6', '\x3', '\x2', '\x2', '\x2', - '\xC3', '\xC4', '\a', '*', '\x2', '\x2', '\xC4', '\b', '\x3', '\x2', '\x2', - '\x2', '\xC5', '\xC6', '\a', '+', '\x2', '\x2', '\xC6', '\n', '\x3', '\x2', - '\x2', '\x2', '\xC7', '\xC8', '\a', '\x30', '\x2', '\x2', '\xC8', '\f', - '\x3', '\x2', '\x2', '\x2', '\xC9', '\xCA', '\a', ']', '\x2', '\x2', '\xCA', - '\xE', '\x3', '\x2', '\x2', '\x2', '\xCB', '\xCC', '\a', '_', '\x2', '\x2', - '\xCC', '\x10', '\x3', '\x2', '\x2', '\x2', '\xCD', '\xCE', '\a', '\x41', - '\x2', '\x2', '\xCE', '\x12', '\x3', '\x2', '\x2', '\x2', '\xCF', '\xD0', - '\a', '<', '\x2', '\x2', '\xD0', '\x14', '\x3', '\x2', '\x2', '\x2', '\xD1', - '\xD2', '\a', '\x41', '\x2', '\x2', '\xD2', '\xD3', '\a', '\x41', '\x2', - '\x2', '\xD3', '\x16', '\x3', '\x2', '\x2', '\x2', '\xD4', '\xD5', '\a', - '\x31', '\x2', '\x2', '\xD5', '\x18', '\x3', '\x2', '\x2', '\x2', '\xD6', - '\xD7', '\a', '\'', '\x2', '\x2', '\xD7', '\x1A', '\x3', '\x2', '\x2', - '\x2', '\xD8', '\xD9', '\a', '-', '\x2', '\x2', '\xD9', '\x1C', '\x3', - '\x2', '\x2', '\x2', '\xDA', '\xDB', '\a', '/', '\x2', '\x2', '\xDB', - '\x1E', '\x3', '\x2', '\x2', '\x2', '\xDC', '\xDD', '\a', '>', '\x2', - '\x2', '\xDD', ' ', '\x3', '\x2', '\x2', '\x2', '\xDE', '\xDF', '\a', - '@', '\x2', '\x2', '\xDF', '\"', '\x3', '\x2', '\x2', '\x2', '\xE0', '\xE1', - '\a', '@', '\x2', '\x2', '\xE1', '\xE2', '\a', '?', '\x2', '\x2', '\xE2', - '$', '\x3', '\x2', '\x2', '\x2', '\xE3', '\xE4', '\a', '>', '\x2', '\x2', - '\xE4', '\xE5', '\a', '?', '\x2', '\x2', '\xE5', '&', '\x3', '\x2', '\x2', - '\x2', '\xE6', '\xE7', '\a', '?', '\x2', '\x2', '\xE7', '(', '\x3', '\x2', - '\x2', '\x2', '\xE8', '\xE9', '\a', '#', '\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', '.', '\x3', '\x2', '\x2', - '\x2', '\xEF', '\xF0', '\a', '~', '\x2', '\x2', '\xF0', '\x30', '\x3', - '\x2', '\x2', '\x2', '\xF1', '\xF2', '\a', '~', '\x2', '\x2', '\xF2', - '\xF3', '\a', '~', '\x2', '\x2', '\xF3', '\x32', '\x3', '\x2', '\x2', - '\x2', '\xF4', '\xF5', '\a', '\x80', '\x2', '\x2', '\xF5', '\x34', '\x3', - '\x2', '\x2', '\x2', '\xF6', '\xF7', '\a', '}', '\x2', '\x2', '\xF7', - '\x36', '\x3', '\x2', '\x2', '\x2', '\xF8', '\xF9', '\a', '\x7F', '\x2', - '\x2', '\xF9', '\x38', '\x3', '\x2', '\x2', '\x2', '\xFA', '\xFB', '\x5', - '\x8B', '\x46', '\x2', '\xFB', '\xFC', '\x5', '\xA1', 'Q', '\x2', '\xFC', - '\xFD', '\x5', '\xA1', 'Q', '\x2', '\xFD', ':', '\x3', '\x2', '\x2', '\x2', - '\xFE', '\xFF', '\x5', '\x8B', '\x46', '\x2', '\xFF', '\x100', '\x5', - '\xA5', 'S', '\x2', '\x100', '\x101', '\x5', '\x91', 'I', '\x2', '\x101', - '<', '\x3', '\x2', '\x2', '\x2', '\x102', '\x103', '\x5', '\x8B', '\x46', - '\x2', '\x103', '\x104', '\x5', '\xAD', 'W', '\x2', '\x104', '\x105', - '\x5', '\xAD', 'W', '\x2', '\x105', '\x106', '\x5', '\x8B', '\x46', '\x2', - '\x106', '\x107', '\x5', '\xBB', '^', '\x2', '\x107', '>', '\x3', '\x2', - '\x2', '\x2', '\x108', '\x109', '\x5', '\x8B', '\x46', '\x2', '\x109', - '\x10A', '\x5', '\xAF', 'X', '\x2', '\x10A', '@', '\x3', '\x2', '\x2', - '\x2', '\x10B', '\x10C', '\x5', '\x8B', '\x46', '\x2', '\x10C', '\x10D', - '\x5', '\xAF', 'X', '\x2', '\x10D', '\x10E', '\x5', '\x8F', 'H', '\x2', - '\x10E', '\x42', '\x3', '\x2', '\x2', '\x2', '\x10F', '\x110', '\x5', - '\x8D', 'G', '\x2', '\x110', '\x111', '\x5', '\x93', 'J', '\x2', '\x111', - '\x112', '\x5', '\xB1', 'Y', '\x2', '\x112', '\x113', '\x5', '\xB7', '\\', - '\x2', '\x113', '\x114', '\x5', '\x93', 'J', '\x2', '\x114', '\x115', - '\x5', '\x93', 'J', '\x2', '\x115', '\x116', '\x5', '\xA5', 'S', '\x2', - '\x116', '\x44', '\x3', '\x2', '\x2', '\x2', '\x117', '\x118', '\x5', - '\x8D', 'G', '\x2', '\x118', '\x119', '\x5', '\xBB', '^', '\x2', '\x119', - '\x46', '\x3', '\x2', '\x2', '\x2', '\x11A', '\x11B', '\x5', '\x91', 'I', - '\x2', '\x11B', '\x11C', '\x5', '\x93', 'J', '\x2', '\x11C', '\x11D', - '\x5', '\xAF', 'X', '\x2', '\x11D', '\x11E', '\x5', '\x8F', 'H', '\x2', - '\x11E', 'H', '\x3', '\x2', '\x2', '\x2', '\x11F', '\x120', '\x5', '\x91', - 'I', '\x2', '\x120', '\x121', '\x5', '\x9B', 'N', '\x2', '\x121', '\x122', - '\x5', '\xAF', 'X', '\x2', '\x122', '\x123', '\x5', '\xB1', 'Y', '\x2', - '\x123', '\x124', '\x5', '\x9B', 'N', '\x2', '\x124', '\x125', '\x5', - '\xA5', 'S', '\x2', '\x125', '\x126', '\x5', '\x8F', 'H', '\x2', '\x126', - '\x127', '\x5', '\xB1', 'Y', '\x2', '\x127', 'J', '\x3', '\x2', '\x2', - '\x2', '\x128', '\x129', '\x5', '\x93', 'J', '\x2', '\x129', '\x12A', - '\x5', '\xAF', 'X', '\x2', '\x12A', '\x12B', '\x5', '\x8F', 'H', '\x2', - '\x12B', '\x12C', '\x5', '\x8B', '\x46', '\x2', '\x12C', '\x12D', '\x5', - '\xA9', 'U', '\x2', '\x12D', '\x12E', '\x5', '\x93', 'J', '\x2', '\x12E', - 'L', '\x3', '\x2', '\x2', '\x2', '\x12F', '\x130', '\x5', '\x93', 'J', - '\x2', '\x130', '\x131', '\x5', '\xB9', ']', '\x2', '\x131', '\x132', - '\x5', '\x9B', 'N', '\x2', '\x132', '\x133', '\x5', '\xAF', 'X', '\x2', - '\x133', '\x134', '\x5', '\xB1', 'Y', '\x2', '\x134', '\x135', '\x5', - '\xAF', 'X', '\x2', '\x135', 'N', '\x3', '\x2', '\x2', '\x2', '\x136', - '\x137', '\a', 'h', '\x2', '\x2', '\x137', '\x138', '\a', '\x63', '\x2', - '\x2', '\x138', '\x139', '\a', 'n', '\x2', '\x2', '\x139', '\x13A', '\a', - 'u', '\x2', '\x2', '\x13A', '\x13B', '\a', 'g', '\x2', '\x2', '\x13B', - 'P', '\x3', '\x2', '\x2', '\x2', '\x13C', '\x13D', '\x5', '\x95', 'K', - '\x2', '\x13D', '\x13E', '\x5', '\xAD', 'W', '\x2', '\x13E', '\x13F', - '\x5', '\xA7', 'T', '\x2', '\x13F', '\x140', '\x5', '\xA3', 'R', '\x2', - '\x140', 'R', '\x3', '\x2', '\x2', '\x2', '\x141', '\x142', '\x5', '\x97', - 'L', '\x2', '\x142', '\x143', '\x5', '\xAD', 'W', '\x2', '\x143', '\x144', - '\x5', '\xA7', 'T', '\x2', '\x144', '\x145', '\x5', '\xB3', 'Z', '\x2', - '\x145', '\x146', '\x5', '\xA9', 'U', '\x2', '\x146', 'T', '\x3', '\x2', - '\x2', '\x2', '\x147', '\x148', '\x5', '\x9B', 'N', '\x2', '\x148', '\x149', - '\x5', '\xA5', 'S', '\x2', '\x149', 'V', '\x3', '\x2', '\x2', '\x2', '\x14A', - '\x14B', '\x5', '\x9D', 'O', '\x2', '\x14B', '\x14C', '\x5', '\xA7', 'T', - '\x2', '\x14C', '\x14D', '\x5', '\x9B', 'N', '\x2', '\x14D', '\x14E', - '\x5', '\xA5', 'S', '\x2', '\x14E', 'X', '\x3', '\x2', '\x2', '\x2', '\x14F', - '\x150', '\x5', '\xA1', 'Q', '\x2', '\x150', '\x151', '\x5', '\x9B', 'N', - '\x2', '\x151', '\x152', '\x5', '\x9F', 'P', '\x2', '\x152', '\x153', - '\x5', '\x93', 'J', '\x2', '\x153', 'Z', '\x3', '\x2', '\x2', '\x2', '\x154', - '\x155', '\x5', '\xA1', 'Q', '\x2', '\x155', '\x156', '\x5', '\x9B', 'N', - '\x2', '\x156', '\x157', '\x5', '\xA3', 'R', '\x2', '\x157', '\x158', - '\x5', '\x9B', 'N', '\x2', '\x158', '\x159', '\x5', '\xB1', 'Y', '\x2', - '\x159', '\\', '\x3', '\x2', '\x2', '\x2', '\x15A', '\x15B', '\x5', '\xA5', - 'S', '\x2', '\x15B', '\x15C', '\x5', '\xA7', 'T', '\x2', '\x15C', '\x15D', - '\x5', '\xB1', 'Y', '\x2', '\x15D', '^', '\x3', '\x2', '\x2', '\x2', '\x15E', - '\x15F', '\a', 'p', '\x2', '\x2', '\x15F', '\x160', '\a', 'w', '\x2', - '\x2', '\x160', '\x161', '\a', 'n', '\x2', '\x2', '\x161', '\x162', '\a', - 'n', '\x2', '\x2', '\x162', '`', '\x3', '\x2', '\x2', '\x2', '\x163', - '\x164', '\x5', '\xA7', 'T', '\x2', '\x164', '\x165', '\x5', '\x95', 'K', - '\x2', '\x165', '\x166', '\x5', '\x95', 'K', '\x2', '\x166', '\x167', - '\x5', '\xAF', 'X', '\x2', '\x167', '\x168', '\x5', '\x93', 'J', '\x2', - '\x168', '\x169', '\x5', '\xB1', 'Y', '\x2', '\x169', '\x62', '\x3', '\x2', - '\x2', '\x2', '\x16A', '\x16B', '\x5', '\xA7', 'T', '\x2', '\x16B', '\x16C', - '\x5', '\xAD', 'W', '\x2', '\x16C', '\x64', '\x3', '\x2', '\x2', '\x2', - '\x16D', '\x16E', '\x5', '\xA7', 'T', '\x2', '\x16E', '\x16F', '\x5', - '\xAD', 'W', '\x2', '\x16F', '\x170', '\x5', '\x91', 'I', '\x2', '\x170', - '\x171', '\x5', '\x93', 'J', '\x2', '\x171', '\x172', '\x5', '\xAD', 'W', - '\x2', '\x172', '\x66', '\x3', '\x2', '\x2', '\x2', '\x173', '\x174', - '\x5', '\xAF', 'X', '\x2', '\x174', '\x175', '\x5', '\x93', 'J', '\x2', - '\x175', '\x176', '\x5', '\xA1', 'Q', '\x2', '\x176', '\x177', '\x5', - '\x93', 'J', '\x2', '\x177', '\x178', '\x5', '\x8F', 'H', '\x2', '\x178', - '\x179', '\x5', '\xB1', 'Y', '\x2', '\x179', 'h', '\x3', '\x2', '\x2', - '\x2', '\x17A', '\x17B', '\x5', '\xB1', 'Y', '\x2', '\x17B', '\x17C', - '\x5', '\xA7', 'T', '\x2', '\x17C', '\x17D', '\x5', '\xA9', 'U', '\x2', - '\x17D', 'j', '\x3', '\x2', '\x2', '\x2', '\x17E', '\x17F', '\a', 'v', - '\x2', '\x2', '\x17F', '\x180', '\a', 't', '\x2', '\x2', '\x180', '\x181', - '\a', 'w', '\x2', '\x2', '\x181', '\x182', '\a', 'g', '\x2', '\x2', '\x182', - 'l', '\x3', '\x2', '\x2', '\x2', '\x183', '\x184', '\a', 'w', '\x2', '\x2', - '\x184', '\x185', '\a', '\x66', '\x2', '\x2', '\x185', '\x186', '\a', - 'h', '\x2', '\x2', '\x186', 'n', '\x3', '\x2', '\x2', '\x2', '\x187', - '\x188', '\a', 'w', '\x2', '\x2', '\x188', '\x189', '\a', 'p', '\x2', - '\x2', '\x189', '\x18A', '\a', '\x66', '\x2', '\x2', '\x18A', '\x18B', - '\a', 'g', '\x2', '\x2', '\x18B', '\x18C', '\a', 'h', '\x2', '\x2', '\x18C', - '\x18D', '\a', 'k', '\x2', '\x2', '\x18D', '\x18E', '\a', 'p', '\x2', - '\x2', '\x18E', '\x18F', '\a', 'g', '\x2', '\x2', '\x18F', '\x190', '\a', - '\x66', '\x2', '\x2', '\x190', 'p', '\x3', '\x2', '\x2', '\x2', '\x191', - '\x192', '\x5', '\xB5', '[', '\x2', '\x192', '\x193', '\x5', '\x8B', '\x46', - '\x2', '\x193', '\x194', '\x5', '\xA1', 'Q', '\x2', '\x194', '\x195', - '\x5', '\xB3', 'Z', '\x2', '\x195', '\x196', '\x5', '\x93', 'J', '\x2', - '\x196', 'r', '\x3', '\x2', '\x2', '\x2', '\x197', '\x198', '\x5', '\xB7', - '\\', '\x2', '\x198', '\x199', '\x5', '\x99', 'M', '\x2', '\x199', '\x19A', - '\x5', '\x93', 'J', '\x2', '\x19A', '\x19B', '\x5', '\xAD', 'W', '\x2', - '\x19B', '\x19C', '\x5', '\x93', 'J', '\x2', '\x19C', 't', '\x3', '\x2', - '\x2', '\x2', '\x19D', '\x19F', '\t', '\x2', '\x2', '\x2', '\x19E', '\x19D', - '\x3', '\x2', '\x2', '\x2', '\x19F', '\x1A0', '\x3', '\x2', '\x2', '\x2', - '\x1A0', '\x19E', '\x3', '\x2', '\x2', '\x2', '\x1A0', '\x1A1', '\x3', - '\x2', '\x2', '\x2', '\x1A1', '\x1A2', '\x3', '\x2', '\x2', '\x2', '\x1A2', - '\x1A3', '\b', ';', '\x2', '\x2', '\x1A3', 'v', '\x3', '\x2', '\x2', '\x2', - '\x1A4', '\x1A6', '\t', '\x3', '\x2', '\x2', '\x1A5', '\x1A4', '\x3', - '\x2', '\x2', '\x2', '\x1A5', '\x1A6', '\x3', '\x2', '\x2', '\x2', '\x1A6', - '\x1A8', '\x3', '\x2', '\x2', '\x2', '\x1A7', '\x1A9', '\x5', '\x89', - '\x45', '\x2', '\x1A8', '\x1A7', '\x3', '\x2', '\x2', '\x2', '\x1A9', - '\x1AA', '\x3', '\x2', '\x2', '\x2', '\x1AA', '\x1A8', '\x3', '\x2', '\x2', - '\x2', '\x1AA', '\x1AB', '\x3', '\x2', '\x2', '\x2', '\x1AB', '\x1B3', - '\x3', '\x2', '\x2', '\x2', '\x1AC', '\x1B0', '\a', '\x30', '\x2', '\x2', - '\x1AD', '\x1AF', '\x5', '\x89', '\x45', '\x2', '\x1AE', '\x1AD', '\x3', - '\x2', '\x2', '\x2', '\x1AF', '\x1B2', '\x3', '\x2', '\x2', '\x2', '\x1B0', - '\x1AE', '\x3', '\x2', '\x2', '\x2', '\x1B0', '\x1B1', '\x3', '\x2', '\x2', - '\x2', '\x1B1', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B0', - '\x3', '\x2', '\x2', '\x2', '\x1B3', '\x1AC', '\x3', '\x2', '\x2', '\x2', - '\x1B3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B4', '\x1BE', '\x3', - '\x2', '\x2', '\x2', '\x1B5', '\x1B7', '\x5', '\x93', 'J', '\x2', '\x1B6', - '\x1B8', '\t', '\x3', '\x2', '\x2', '\x1B7', '\x1B6', '\x3', '\x2', '\x2', - '\x2', '\x1B7', '\x1B8', '\x3', '\x2', '\x2', '\x2', '\x1B8', '\x1BA', - '\x3', '\x2', '\x2', '\x2', '\x1B9', '\x1BB', '\x5', '\x89', '\x45', '\x2', - '\x1BA', '\x1B9', '\x3', '\x2', '\x2', '\x2', '\x1BB', '\x1BC', '\x3', - '\x2', '\x2', '\x2', '\x1BC', '\x1BA', '\x3', '\x2', '\x2', '\x2', '\x1BC', - '\x1BD', '\x3', '\x2', '\x2', '\x2', '\x1BD', '\x1BF', '\x3', '\x2', '\x2', - '\x2', '\x1BE', '\x1B5', '\x3', '\x2', '\x2', '\x2', '\x1BE', '\x1BF', - '\x3', '\x2', '\x2', '\x2', '\x1BF', '\x1D5', '\x3', '\x2', '\x2', '\x2', - '\x1C0', '\x1C2', '\t', '\x3', '\x2', '\x2', '\x1C1', '\x1C0', '\x3', - '\x2', '\x2', '\x2', '\x1C1', '\x1C2', '\x3', '\x2', '\x2', '\x2', '\x1C2', - '\x1C3', '\x3', '\x2', '\x2', '\x2', '\x1C3', '\x1C5', '\a', '\x30', '\x2', - '\x2', '\x1C4', '\x1C6', '\x5', '\x89', '\x45', '\x2', '\x1C5', '\x1C4', - '\x3', '\x2', '\x2', '\x2', '\x1C6', '\x1C7', '\x3', '\x2', '\x2', '\x2', - '\x1C7', '\x1C5', '\x3', '\x2', '\x2', '\x2', '\x1C7', '\x1C8', '\x3', - '\x2', '\x2', '\x2', '\x1C8', '\x1D2', '\x3', '\x2', '\x2', '\x2', '\x1C9', - '\x1CB', '\x5', '\x93', 'J', '\x2', '\x1CA', '\x1CC', '\t', '\x3', '\x2', - '\x2', '\x1CB', '\x1CA', '\x3', '\x2', '\x2', '\x2', '\x1CB', '\x1CC', - '\x3', '\x2', '\x2', '\x2', '\x1CC', '\x1CE', '\x3', '\x2', '\x2', '\x2', - '\x1CD', '\x1CF', '\x5', '\x89', '\x45', '\x2', '\x1CE', '\x1CD', '\x3', - '\x2', '\x2', '\x2', '\x1CF', '\x1D0', '\x3', '\x2', '\x2', '\x2', '\x1D0', - '\x1CE', '\x3', '\x2', '\x2', '\x2', '\x1D0', '\x1D1', '\x3', '\x2', '\x2', - '\x2', '\x1D1', '\x1D3', '\x3', '\x2', '\x2', '\x2', '\x1D2', '\x1C9', - '\x3', '\x2', '\x2', '\x2', '\x1D2', '\x1D3', '\x3', '\x2', '\x2', '\x2', - '\x1D3', '\x1D5', '\x3', '\x2', '\x2', '\x2', '\x1D4', '\x1A5', '\x3', - '\x2', '\x2', '\x2', '\x1D4', '\x1C1', '\x3', '\x2', '\x2', '\x2', '\x1D5', - 'x', '\x3', '\x2', '\x2', '\x2', '\x1D6', '\x1DB', '\a', '$', '\x2', '\x2', - '\x1D7', '\x1DA', '\x5', '{', '>', '\x2', '\x1D8', '\x1DA', '\x5', '\x83', - '\x42', '\x2', '\x1D9', '\x1D7', '\x3', '\x2', '\x2', '\x2', '\x1D9', - '\x1D8', '\x3', '\x2', '\x2', '\x2', '\x1DA', '\x1DD', '\x3', '\x2', '\x2', - '\x2', '\x1DB', '\x1D9', '\x3', '\x2', '\x2', '\x2', '\x1DB', '\x1DC', - '\x3', '\x2', '\x2', '\x2', '\x1DC', '\x1DE', '\x3', '\x2', '\x2', '\x2', - '\x1DD', '\x1DB', '\x3', '\x2', '\x2', '\x2', '\x1DE', '\x1E9', '\a', - '$', '\x2', '\x2', '\x1DF', '\x1E4', '\a', ')', '\x2', '\x2', '\x1E0', - '\x1E3', '\x5', '{', '>', '\x2', '\x1E1', '\x1E3', '\x5', '\x81', '\x41', - '\x2', '\x1E2', '\x1E0', '\x3', '\x2', '\x2', '\x2', '\x1E2', '\x1E1', - '\x3', '\x2', '\x2', '\x2', '\x1E3', '\x1E6', '\x3', '\x2', '\x2', '\x2', - '\x1E4', '\x1E2', '\x3', '\x2', '\x2', '\x2', '\x1E4', '\x1E5', '\x3', - '\x2', '\x2', '\x2', '\x1E5', '\x1E7', '\x3', '\x2', '\x2', '\x2', '\x1E6', - '\x1E4', '\x3', '\x2', '\x2', '\x2', '\x1E7', '\x1E9', '\a', ')', '\x2', - '\x2', '\x1E8', '\x1D6', '\x3', '\x2', '\x2', '\x2', '\x1E8', '\x1DF', - '\x3', '\x2', '\x2', '\x2', '\x1E9', 'z', '\x3', '\x2', '\x2', '\x2', - '\x1EA', '\x1ED', '\a', '^', '\x2', '\x2', '\x1EB', '\x1EE', '\t', '\x4', - '\x2', '\x2', '\x1EC', '\x1EE', '\x5', '}', '?', '\x2', '\x1ED', '\x1EB', - '\x3', '\x2', '\x2', '\x2', '\x1ED', '\x1EC', '\x3', '\x2', '\x2', '\x2', - '\x1EE', '|', '\x3', '\x2', '\x2', '\x2', '\x1EF', '\x1F0', '\a', 'w', - '\x2', '\x2', '\x1F0', '\x1F1', '\x5', '\x7F', '@', '\x2', '\x1F1', '\x1F2', - '\x5', '\x7F', '@', '\x2', '\x1F2', '\x1F3', '\x5', '\x7F', '@', '\x2', - '\x1F3', '\x1F4', '\x5', '\x7F', '@', '\x2', '\x1F4', '~', '\x3', '\x2', - '\x2', '\x2', '\x1F5', '\x1F6', '\t', '\x5', '\x2', '\x2', '\x1F6', '\x80', - '\x3', '\x2', '\x2', '\x2', '\x1F7', '\x1F8', '\n', '\x6', '\x2', '\x2', - '\x1F8', '\x82', '\x3', '\x2', '\x2', '\x2', '\x1F9', '\x1FA', '\n', '\a', - '\x2', '\x2', '\x1FA', '\x84', '\x3', '\x2', '\x2', '\x2', '\x1FB', '\x205', - '\x3', '\x2', '\x2', '\x2', '\x1FC', '\x201', '\t', '\b', '\x2', '\x2', - '\x1FD', '\x200', '\t', '\b', '\x2', '\x2', '\x1FE', '\x200', '\x5', '\x89', - '\x45', '\x2', '\x1FF', '\x1FD', '\x3', '\x2', '\x2', '\x2', '\x1FF', - '\x1FE', '\x3', '\x2', '\x2', '\x2', '\x200', '\x203', '\x3', '\x2', '\x2', - '\x2', '\x201', '\x1FF', '\x3', '\x2', '\x2', '\x2', '\x201', '\x202', - '\x3', '\x2', '\x2', '\x2', '\x202', '\x205', '\x3', '\x2', '\x2', '\x2', - '\x203', '\x201', '\x3', '\x2', '\x2', '\x2', '\x204', '\x1FB', '\x3', - '\x2', '\x2', '\x2', '\x204', '\x1FC', '\x3', '\x2', '\x2', '\x2', '\x205', - '\x86', '\x3', '\x2', '\x2', '\x2', '\x206', '\x207', '\a', '\x42', '\x2', - '\x2', '\x207', '\x208', '\x5', '\x85', '\x43', '\x2', '\x208', '\x88', - '\x3', '\x2', '\x2', '\x2', '\x209', '\x20A', '\t', '\t', '\x2', '\x2', - '\x20A', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x20B', '\x20C', '\t', '\n', - '\x2', '\x2', '\x20C', '\x8C', '\x3', '\x2', '\x2', '\x2', '\x20D', '\x20E', - '\t', '\v', '\x2', '\x2', '\x20E', '\x8E', '\x3', '\x2', '\x2', '\x2', - '\x20F', '\x210', '\t', '\f', '\x2', '\x2', '\x210', '\x90', '\x3', '\x2', - '\x2', '\x2', '\x211', '\x212', '\t', '\r', '\x2', '\x2', '\x212', '\x92', - '\x3', '\x2', '\x2', '\x2', '\x213', '\x214', '\t', '\xE', '\x2', '\x2', - '\x214', '\x94', '\x3', '\x2', '\x2', '\x2', '\x215', '\x216', '\t', '\xF', - '\x2', '\x2', '\x216', '\x96', '\x3', '\x2', '\x2', '\x2', '\x217', '\x218', - '\t', '\x10', '\x2', '\x2', '\x218', '\x98', '\x3', '\x2', '\x2', '\x2', - '\x219', '\x21A', '\t', '\x11', '\x2', '\x2', '\x21A', '\x9A', '\x3', - '\x2', '\x2', '\x2', '\x21B', '\x21C', '\t', '\x12', '\x2', '\x2', '\x21C', - '\x9C', '\x3', '\x2', '\x2', '\x2', '\x21D', '\x21E', '\t', '\x13', '\x2', - '\x2', '\x21E', '\x9E', '\x3', '\x2', '\x2', '\x2', '\x21F', '\x220', - '\t', '\x14', '\x2', '\x2', '\x220', '\xA0', '\x3', '\x2', '\x2', '\x2', - '\x221', '\x222', '\t', '\x15', '\x2', '\x2', '\x222', '\xA2', '\x3', - '\x2', '\x2', '\x2', '\x223', '\x224', '\t', '\x16', '\x2', '\x2', '\x224', - '\xA4', '\x3', '\x2', '\x2', '\x2', '\x225', '\x226', '\t', '\x17', '\x2', - '\x2', '\x226', '\xA6', '\x3', '\x2', '\x2', '\x2', '\x227', '\x228', - '\t', '\x18', '\x2', '\x2', '\x228', '\xA8', '\x3', '\x2', '\x2', '\x2', - '\x229', '\x22A', '\t', '\x19', '\x2', '\x2', '\x22A', '\xAA', '\x3', - '\x2', '\x2', '\x2', '\x22B', '\x22C', '\t', '\x1A', '\x2', '\x2', '\x22C', - '\xAC', '\x3', '\x2', '\x2', '\x2', '\x22D', '\x22E', '\t', '\x1B', '\x2', - '\x2', '\x22E', '\xAE', '\x3', '\x2', '\x2', '\x2', '\x22F', '\x230', - '\t', '\x1C', '\x2', '\x2', '\x230', '\xB0', '\x3', '\x2', '\x2', '\x2', - '\x231', '\x232', '\t', '\x1D', '\x2', '\x2', '\x232', '\xB2', '\x3', - '\x2', '\x2', '\x2', '\x233', '\x234', '\t', '\x1E', '\x2', '\x2', '\x234', - '\xB4', '\x3', '\x2', '\x2', '\x2', '\x235', '\x236', '\t', '\x1F', '\x2', - '\x2', '\x236', '\xB6', '\x3', '\x2', '\x2', '\x2', '\x237', '\x238', - '\t', ' ', '\x2', '\x2', '\x238', '\xB8', '\x3', '\x2', '\x2', '\x2', - '\x239', '\x23A', '\t', '!', '\x2', '\x2', '\x23A', '\xBA', '\x3', '\x2', - '\x2', '\x2', '\x23B', '\x23C', '\t', '\"', '\x2', '\x2', '\x23C', '\xBC', - '\x3', '\x2', '\x2', '\x2', '\x23D', '\x23E', '\t', '#', '\x2', '\x2', - '\x23E', '\xBE', '\x3', '\x2', '\x2', '\x2', '\x1A', '\x2', '\x1A0', '\x1A5', - '\x1AA', '\x1B0', '\x1B3', '\x1B7', '\x1BC', '\x1BE', '\x1C1', '\x1C7', - '\x1CB', '\x1D0', '\x1D2', '\x1D4', '\x1D9', '\x1DB', '\x1E2', '\x1E4', - '\x1E8', '\x1ED', '\x1FF', '\x201', '\x204', '\x3', '\b', '\x2', '\x2', + '\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', + '\t', '\x3', '\n', '\x3', '\n', '\x3', '\v', '\x3', '\v', '\x3', '\v', + '\x3', '\f', '\x3', '\f', '\x3', '\r', '\x3', '\r', '\x3', '\xE', '\x3', + '\xE', '\x3', '\xF', '\x3', '\xF', '\x3', '\x10', '\x3', '\x10', '\x3', + '\x11', '\x3', '\x11', '\x3', '\x12', '\x3', '\x12', '\x3', '\x12', '\x3', + '\x13', '\x3', '\x13', '\x3', '\x13', '\x3', '\x14', '\x3', '\x14', '\x3', + '\x15', '\x3', '\x15', '\x3', '\x15', '\x3', '\x16', '\x3', '\x16', '\x3', + '\x17', '\x3', '\x17', '\x3', '\x18', '\x3', '\x18', '\x3', '\x19', '\x3', + '\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', '\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', '/', + '\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', '\a', '\x45', '\x20E', '\n', '\x45', '\f', '\x45', + '\xE', '\x45', '\x211', '\v', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', + 'R', '\x3', 'S', '\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', + '^', '\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', '\x240', '\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', '\x20A', '\x3', '\x2', '\x2', '\x2', '\x8B', '\x212', '\x3', '\x2', + '\x2', '\x2', '\x8D', '\x215', '\x3', '\x2', '\x2', '\x2', '\x8F', '\x217', + '\x3', '\x2', '\x2', '\x2', '\x91', '\x219', '\x3', '\x2', '\x2', '\x2', + '\x93', '\x21B', '\x3', '\x2', '\x2', '\x2', '\x95', '\x21D', '\x3', '\x2', + '\x2', '\x2', '\x97', '\x21F', '\x3', '\x2', '\x2', '\x2', '\x99', '\x221', + '\x3', '\x2', '\x2', '\x2', '\x9B', '\x223', '\x3', '\x2', '\x2', '\x2', + '\x9D', '\x225', '\x3', '\x2', '\x2', '\x2', '\x9F', '\x227', '\x3', '\x2', + '\x2', '\x2', '\xA1', '\x229', '\x3', '\x2', '\x2', '\x2', '\xA3', '\x22B', + '\x3', '\x2', '\x2', '\x2', '\xA5', '\x22D', '\x3', '\x2', '\x2', '\x2', + '\xA7', '\x22F', '\x3', '\x2', '\x2', '\x2', '\xA9', '\x231', '\x3', '\x2', + '\x2', '\x2', '\xAB', '\x233', '\x3', '\x2', '\x2', '\x2', '\xAD', '\x235', + '\x3', '\x2', '\x2', '\x2', '\xAF', '\x237', '\x3', '\x2', '\x2', '\x2', + '\xB1', '\x239', '\x3', '\x2', '\x2', '\x2', '\xB3', '\x23B', '\x3', '\x2', + '\x2', '\x2', '\xB5', '\x23D', '\x3', '\x2', '\x2', '\x2', '\xB7', '\x23F', + '\x3', '\x2', '\x2', '\x2', '\xB9', '\x241', '\x3', '\x2', '\x2', '\x2', + '\xBB', '\x243', '\x3', '\x2', '\x2', '\x2', '\xBD', '\x245', '\x3', '\x2', + '\x2', '\x2', '\xBF', '\x247', '\x3', '\x2', '\x2', '\x2', '\xC1', '\x249', + '\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', '\x20F', '\t', '\b', '\x2', '\x2', + '\x20B', '\x20E', '\t', '\b', '\x2', '\x2', '\x20C', '\x20E', '\x5', '\x8D', + 'G', '\x2', '\x20D', '\x20B', '\x3', '\x2', '\x2', '\x2', '\x20D', '\x20C', + '\x3', '\x2', '\x2', '\x2', '\x20E', '\x211', '\x3', '\x2', '\x2', '\x2', + '\x20F', '\x20D', '\x3', '\x2', '\x2', '\x2', '\x20F', '\x210', '\x3', + '\x2', '\x2', '\x2', '\x210', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x211', + '\x20F', '\x3', '\x2', '\x2', '\x2', '\x212', '\x213', '\a', '\x42', '\x2', + '\x2', '\x213', '\x214', '\x5', '\x89', '\x45', '\x2', '\x214', '\x8C', + '\x3', '\x2', '\x2', '\x2', '\x215', '\x216', '\t', '\t', '\x2', '\x2', + '\x216', '\x8E', '\x3', '\x2', '\x2', '\x2', '\x217', '\x218', '\t', '\n', + '\x2', '\x2', '\x218', '\x90', '\x3', '\x2', '\x2', '\x2', '\x219', '\x21A', + '\t', '\v', '\x2', '\x2', '\x21A', '\x92', '\x3', '\x2', '\x2', '\x2', + '\x21B', '\x21C', '\t', '\f', '\x2', '\x2', '\x21C', '\x94', '\x3', '\x2', + '\x2', '\x2', '\x21D', '\x21E', '\t', '\r', '\x2', '\x2', '\x21E', '\x96', + '\x3', '\x2', '\x2', '\x2', '\x21F', '\x220', '\t', '\xE', '\x2', '\x2', + '\x220', '\x98', '\x3', '\x2', '\x2', '\x2', '\x221', '\x222', '\t', '\xF', + '\x2', '\x2', '\x222', '\x9A', '\x3', '\x2', '\x2', '\x2', '\x223', '\x224', + '\t', '\x10', '\x2', '\x2', '\x224', '\x9C', '\x3', '\x2', '\x2', '\x2', + '\x225', '\x226', '\t', '\x11', '\x2', '\x2', '\x226', '\x9E', '\x3', + '\x2', '\x2', '\x2', '\x227', '\x228', '\t', '\x12', '\x2', '\x2', '\x228', + '\xA0', '\x3', '\x2', '\x2', '\x2', '\x229', '\x22A', '\t', '\x13', '\x2', + '\x2', '\x22A', '\xA2', '\x3', '\x2', '\x2', '\x2', '\x22B', '\x22C', + '\t', '\x14', '\x2', '\x2', '\x22C', '\xA4', '\x3', '\x2', '\x2', '\x2', + '\x22D', '\x22E', '\t', '\x15', '\x2', '\x2', '\x22E', '\xA6', '\x3', + '\x2', '\x2', '\x2', '\x22F', '\x230', '\t', '\x16', '\x2', '\x2', '\x230', + '\xA8', '\x3', '\x2', '\x2', '\x2', '\x231', '\x232', '\t', '\x17', '\x2', + '\x2', '\x232', '\xAA', '\x3', '\x2', '\x2', '\x2', '\x233', '\x234', + '\t', '\x18', '\x2', '\x2', '\x234', '\xAC', '\x3', '\x2', '\x2', '\x2', + '\x235', '\x236', '\t', '\x19', '\x2', '\x2', '\x236', '\xAE', '\x3', + '\x2', '\x2', '\x2', '\x237', '\x238', '\t', '\x1A', '\x2', '\x2', '\x238', + '\xB0', '\x3', '\x2', '\x2', '\x2', '\x239', '\x23A', '\t', '\x1B', '\x2', + '\x2', '\x23A', '\xB2', '\x3', '\x2', '\x2', '\x2', '\x23B', '\x23C', + '\t', '\x1C', '\x2', '\x2', '\x23C', '\xB4', '\x3', '\x2', '\x2', '\x2', + '\x23D', '\x23E', '\t', '\x1D', '\x2', '\x2', '\x23E', '\xB6', '\x3', + '\x2', '\x2', '\x2', '\x23F', '\x240', '\t', '\x1E', '\x2', '\x2', '\x240', + '\xB8', '\x3', '\x2', '\x2', '\x2', '\x241', '\x242', '\t', '\x1F', '\x2', + '\x2', '\x242', '\xBA', '\x3', '\x2', '\x2', '\x2', '\x243', '\x244', + '\t', ' ', '\x2', '\x2', '\x244', '\xBC', '\x3', '\x2', '\x2', '\x2', + '\x245', '\x246', '\t', '!', '\x2', '\x2', '\x246', '\xBE', '\x3', '\x2', + '\x2', '\x2', '\x247', '\x248', '\t', '\"', '\x2', '\x2', '\x248', '\xC0', + '\x3', '\x2', '\x2', '\x2', '\x249', '\x24A', '\t', '#', '\x2', '\x2', + '\x24A', '\xC2', '\x3', '\x2', '\x2', '\x2', '\x19', '\x2', '\x1AF', '\x1B4', + '\x1B9', '\x1BF', '\x1C2', '\x1C6', '\x1CB', '\x1CD', '\x1D0', '\x1D6', + '\x1DA', '\x1DF', '\x1E1', '\x1E3', '\x1E8', '\x1EA', '\x1F1', '\x1F3', + '\x1F7', '\x1FC', '\x20D', '\x20F', '\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 abcbf96f9a..53293f9382 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlParser.cs @@ -40,10 +40,11 @@ public const int 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_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_LIKE=44, - K_LIMIT=45, K_NOT=46, K_NULL=47, K_OFFSET=48, K_OR=49, K_ORDER=50, K_SELECT=51, - K_TOP=52, K_TRUE=53, K_UDF=54, K_UNDEFINED=55, K_VALUE=56, K_WHERE=57, - WS=58, NUMERIC_LITERAL=59, STRING_LITERAL=60, LEX_IDENTIFIER=61, PARAMETER=62; + 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_identifier = 42, RULE_literal = 43; + 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,8 +72,9 @@ 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", "identifier", "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 = { @@ -79,18 +82,18 @@ public const int "'/'", "'%'", "'+'", "'-'", "'<'", "'>'", "'>='", "'<='", "'='", "'!='", "'&'", "'^'", "'|'", "'||'", "'~'", "'{'", "'}'", 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, 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_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_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", - "LEX_IDENTIFIER", "PARAMETER" + "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); @@ -155,8 +158,8 @@ public ProgramContext program() { try { EnterOuterAlt(_localctx, 1); { - State = 88; sql_query(); - State = 89; Match(Eof); + State = 90; sql_query(); + State = 91; Match(Eof); } } catch (RecognitionException re) { @@ -217,49 +220,49 @@ public Sql_queryContext sql_query() { try { EnterOuterAlt(_localctx, 1); { - State = 91; select_clause(); - State = 93; + State = 93; select_clause(); + State = 95; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_FROM) { { - State = 92; from_clause(); + State = 94; from_clause(); } } - State = 96; + State = 98; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_WHERE) { { - State = 95; where_clause(); + State = 97; where_clause(); } } - State = 99; + State = 101; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_GROUP) { { - State = 98; group_by_clause(); + State = 100; group_by_clause(); } } - State = 102; + State = 104; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ORDER) { { - State = 101; order_by_clause(); + State = 103; order_by_clause(); } } - State = 105; + State = 107; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_OFFSET) { { - State = 104; offset_limit_clause(); + State = 106; offset_limit_clause(); } } @@ -313,26 +316,26 @@ public Select_clauseContext select_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 107; Match(K_SELECT); - State = 109; + State = 109; Match(K_SELECT); + State = 111; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_DISTINCT) { { - State = 108; Match(K_DISTINCT); + State = 110; Match(K_DISTINCT); } } - State = 112; + State = 114; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_TOP) { { - State = 111; top_spec(); + State = 113; top_spec(); } } - State = 114; selection(); + State = 116; selection(); } } catch (RecognitionException re) { @@ -378,8 +381,8 @@ public Top_specContext top_spec() { try { EnterOuterAlt(_localctx, 1); { - State = 116; Match(K_TOP); - State = 117; + State = 118; Match(K_TOP); + State = 119; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -436,19 +439,19 @@ public SelectionContext selection() { SelectionContext _localctx = new SelectionContext(Context, State); EnterRule(_localctx, 8, RULE_selection); try { - State = 122; + State = 124; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__0: EnterOuterAlt(_localctx, 1); { - State = 119; select_star_spec(); + State = 121; select_star_spec(); } break; case K_VALUE: EnterOuterAlt(_localctx, 2); { - State = 120; select_value_spec(); + State = 122; select_value_spec(); } break; case T__2: @@ -461,8 +464,10 @@ public SelectionContext selection() { 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: @@ -472,7 +477,7 @@ public SelectionContext selection() { case PARAMETER: EnterOuterAlt(_localctx, 3); { - State = 121; 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 = 124; 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 = 126; Match(K_VALUE); - State = 127; 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 = 129; select_item(); - State = 134; + State = 131; select_item(); + State = 136; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 130; Match(T__1); - State = 131; select_item(); + State = 132; Match(T__1); + State = 133; select_item(); } } - State = 136; + State = 138; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -678,14 +683,14 @@ public Select_itemContext select_item() { try { EnterOuterAlt(_localctx, 1); { - State = 137; scalar_expression(0); - State = 140; + State = 139; scalar_expression(0); + State = 142; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 138; Match(K_AS); - State = 139; identifier(); + State = 140; Match(K_AS); + State = 141; identifier(); } } @@ -734,8 +739,8 @@ public From_clauseContext from_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 142; Match(K_FROM); - State = 143; collection_expression(0); + State = 144; Match(K_FROM); + State = 145; collection_expression(0); } } catch (RecognitionException re) { @@ -848,7 +853,7 @@ private Collection_expressionContext collection_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 157; + State = 159; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,12,Context) ) { case 1: @@ -857,22 +862,22 @@ private Collection_expressionContext collection_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 146; collection(); - State = 151; + State = 148; collection(); + State = 153; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,11,Context) ) { case 1: { - State = 148; + State = 150; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_AS) { { - State = 147; Match(K_AS); + State = 149; Match(K_AS); } } - State = 150; identifier(); + State = 152; identifier(); } break; } @@ -883,14 +888,14 @@ private Collection_expressionContext collection_expression(int _p) { _localctx = new ArrayIteratorCollectionExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 153; identifier(); - State = 154; Match(K_IN); - State = 155; collection(); + State = 155; identifier(); + State = 156; Match(K_IN); + State = 157; collection(); } break; } Context.Stop = TokenStream.LT(-1); - State = 164; + State = 166; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -902,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 = 159; + State = 161; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 160; Match(K_JOIN); - State = 161; collection_expression(2); + State = 162; Match(K_JOIN); + State = 163; collection_expression(2); } } } - State = 166; + State = 168; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,13,Context); } @@ -985,7 +990,7 @@ public CollectionContext collection() { CollectionContext _localctx = new CollectionContext(Context, State); EnterRule(_localctx, 22, RULE_collection); try { - State = 175; + State = 177; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case K_ALL: @@ -993,13 +998,13 @@ public CollectionContext collection() { _localctx = new InputPathCollectionContext(_localctx); EnterOuterAlt(_localctx, 1); { - State = 167; identifier(); - State = 169; + State = 169; identifier(); + State = 171; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,14,Context) ) { case 1: { - State = 168; path_expression(0); + State = 170; path_expression(0); } break; } @@ -1009,9 +1014,9 @@ public CollectionContext collection() { _localctx = new SubqueryCollectionContext(_localctx); EnterOuterAlt(_localctx, 2); { - State = 171; Match(T__2); - State = 172; sql_query(); - State = 173; Match(T__3); + State = 173; Match(T__2); + State = 174; sql_query(); + State = 175; Match(T__3); } break; default: @@ -1143,7 +1148,7 @@ private Path_expressionContext path_expression(int _p) { } Context.Stop = TokenStream.LT(-1); - State = 191; + State = 193; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1152,45 +1157,45 @@ private Path_expressionContext path_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 189; + 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 = 178; + State = 180; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 179; Match(T__4); - State = 180; 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 = 181; + State = 183; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 182; Match(T__5); - State = 183; Match(NUMERIC_LITERAL); - State = 184; 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 = 185; + State = 187; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 186; Match(T__5); - State = 187; Match(STRING_LITERAL); - State = 188; Match(T__6); + State = 188; Match(T__5); + State = 189; Match(STRING_LITERAL); + State = 190; Match(T__6); } break; } } } - State = 193; + State = 195; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,17,Context); } @@ -1239,8 +1244,8 @@ public Where_clauseContext where_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 194; Match(K_WHERE); - State = 195; scalar_expression(0); + State = 196; Match(K_WHERE); + State = 197; scalar_expression(0); } } catch (RecognitionException re) { @@ -1287,9 +1292,9 @@ public Group_by_clauseContext group_by_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 197; Match(K_GROUP); - State = 198; Match(K_BY); - State = 199; scalar_expression_list(); + State = 199; Match(K_GROUP); + State = 200; Match(K_BY); + State = 201; scalar_expression_list(); } } catch (RecognitionException re) { @@ -1336,9 +1341,9 @@ public Order_by_clauseContext order_by_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 201; Match(K_ORDER); - State = 202; Match(K_BY); - State = 203; order_by_items(); + State = 203; Match(K_ORDER); + State = 204; Match(K_BY); + State = 205; order_by_items(); } } catch (RecognitionException re) { @@ -1387,18 +1392,18 @@ public Order_by_itemsContext order_by_items() { try { EnterOuterAlt(_localctx, 1); { - State = 205; order_by_item(); - State = 210; + State = 207; order_by_item(); + State = 212; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 206; Match(T__1); - State = 207; order_by_item(); + State = 208; Match(T__1); + State = 209; order_by_item(); } } - State = 212; + State = 214; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -1450,13 +1455,13 @@ public Order_by_itemContext order_by_item() { try { EnterOuterAlt(_localctx, 1); { - State = 213; scalar_expression(0); - State = 215; + State = 215; scalar_expression(0); + State = 217; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_ASC || _la==K_DESC) { { - State = 214; sort_order(); + State = 216; sort_order(); } } @@ -1504,7 +1509,7 @@ public Sort_orderContext sort_order() { try { EnterOuterAlt(_localctx, 1); { - State = 217; + State = 219; _la = TokenStream.LA(1); if ( !(_la==K_ASC || _la==K_DESC) ) { ErrorHandler.RecoverInline(this); @@ -1562,10 +1567,10 @@ public Offset_limit_clauseContext offset_limit_clause() { try { EnterOuterAlt(_localctx, 1); { - State = 219; Match(K_OFFSET); - State = 220; offset_count(); - State = 221; Match(K_LIMIT); - State = 222; limit_count(); + State = 221; Match(K_OFFSET); + State = 222; offset_count(); + State = 223; Match(K_LIMIT); + State = 224; limit_count(); } } catch (RecognitionException re) { @@ -1610,7 +1615,7 @@ public Offset_countContext offset_count() { try { EnterOuterAlt(_localctx, 1); { - State = 224; + State = 226; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1663,7 +1668,7 @@ public Limit_countContext limit_count() { try { EnterOuterAlt(_localctx, 1); { - State = 226; + State = 228; _la = TokenStream.LA(1); if ( !(_la==NUMERIC_LITERAL || _la==PARAMETER) ) { ErrorHandler.RecoverInline(this); @@ -1803,7 +1808,7 @@ private Scalar_expressionContext scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 239; + State = 241; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,21,Context) ) { case 1: @@ -1812,7 +1817,7 @@ private Scalar_expressionContext scalar_expression(int _p) { Context = _localctx; _prevctx = _localctx; - State = 229; logical_scalar_expression(0); + State = 231; logical_scalar_expression(0); } break; case 2: @@ -1820,25 +1825,25 @@ private Scalar_expressionContext scalar_expression(int _p) { _localctx = new BetweenScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 230; binary_scalar_expression(0); - State = 232; + State = 232; binary_scalar_expression(0); + State = 234; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 231; Match(K_NOT); + State = 233; Match(K_NOT); } } - State = 234; Match(K_BETWEEN); - State = 235; binary_scalar_expression(0); - State = 236; Match(K_AND); + 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 = 252; + State = 254; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1847,35 +1852,35 @@ private Scalar_expressionContext scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 250; + 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 = 241; + State = 243; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 242; Match(T__7); - State = 243; scalar_expression(0); - State = 244; Match(T__8); - State = 245; 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 = 247; + State = 249; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 248; Match(T__9); - State = 249; scalar_expression(4); + State = 250; Match(T__9); + State = 251; scalar_expression(4); } break; } } } - State = 254; + State = 256; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,23,Context); } @@ -1946,27 +1951,27 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 259; + State = 261; ErrorHandler.Sync(this); switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { case 1: { - State = 256; binary_scalar_expression(0); + State = 258; binary_scalar_expression(0); } break; case 2: { - State = 257; in_scalar_expression(); + State = 259; in_scalar_expression(); } break; case 3: { - State = 258; like_scalar_expression(); + State = 260; like_scalar_expression(); } break; } Context.Stop = TokenStream.LT(-1); - State = 269; + State = 271; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -1975,33 +1980,33 @@ private Logical_scalar_expressionContext logical_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 267; + 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 = 261; + State = 263; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 262; Match(K_AND); - State = 263; 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 = 264; + State = 266; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 265; Match(K_OR); - State = 266; logical_scalar_expression(2); + State = 267; Match(K_OR); + State = 268; logical_scalar_expression(2); } break; } } } - State = 271; + State = 273; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); } @@ -2055,20 +2060,20 @@ public In_scalar_expressionContext in_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 272; binary_scalar_expression(0); - State = 274; + State = 274; binary_scalar_expression(0); + State = 276; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 273; Match(K_NOT); + State = 275; Match(K_NOT); } } - State = 276; Match(K_IN); - State = 277; Match(T__2); - State = 278; scalar_expression_list(); - State = 279; 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) { @@ -2122,24 +2127,24 @@ public Like_scalar_expressionContext like_scalar_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 281; binary_scalar_expression(0); - State = 283; + State = 283; binary_scalar_expression(0); + State = 285; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==K_NOT) { { - State = 282; Match(K_NOT); + State = 284; Match(K_NOT); } } - State = 285; Match(K_LIKE); - State = 286; binary_scalar_expression(0); - State = 288; + 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 = 287; escape_expression(); + State = 289; escape_expression(); } break; } @@ -2186,8 +2191,8 @@ public Escape_expressionContext escape_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 290; Match(K_ESCAPE); - State = 291; Match(STRING_LITERAL); + State = 292; Match(K_ESCAPE); + State = 293; Match(STRING_LITERAL); } } catch (RecognitionException re) { @@ -2272,10 +2277,10 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { EnterOuterAlt(_localctx, 1); { { - State = 294; unary_scalar_expression(); + State = 296; unary_scalar_expression(); } Context.Stop = TokenStream.LT(-1); - State = 330; + State = 332; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { @@ -2284,93 +2289,93 @@ private Binary_scalar_expressionContext binary_scalar_expression(int _p) { TriggerExitRuleEvent(); _prevctx = _localctx; { - State = 328; + 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 = 296; + State = 298; if (!(Precpred(Context, 8))) throw new FailedPredicateException(this, "Precpred(Context, 8)"); - State = 297; multiplicative_operator(); - State = 298; 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 = 300; + State = 302; if (!(Precpred(Context, 7))) throw new FailedPredicateException(this, "Precpred(Context, 7)"); - State = 301; additive_operator(); - State = 302; 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 = 304; + State = 306; if (!(Precpred(Context, 6))) throw new FailedPredicateException(this, "Precpred(Context, 6)"); - State = 305; relational_operator(); - State = 306; 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 = 308; + State = 310; if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 309; equality_operator(); - State = 310; 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 = 312; + State = 314; if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 313; bitwise_and_operator(); - State = 314; 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 = 316; + State = 318; if (!(Precpred(Context, 3))) throw new FailedPredicateException(this, "Precpred(Context, 3)"); - State = 317; bitwise_exclusive_or_operator(); - State = 318; 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 = 320; + State = 322; if (!(Precpred(Context, 2))) throw new FailedPredicateException(this, "Precpred(Context, 2)"); - State = 321; bitwise_inclusive_or_operator(); - State = 322; 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 = 324; + State = 326; if (!(Precpred(Context, 1))) throw new FailedPredicateException(this, "Precpred(Context, 1)"); - State = 325; string_concat_operator(); - State = 326; binary_scalar_expression(2); + State = 327; string_concat_operator(); + State = 328; binary_scalar_expression(2); } break; } } } - State = 332; + State = 334; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); } @@ -2416,7 +2421,7 @@ public Multiplicative_operatorContext multiplicative_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 333; + 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); @@ -2467,7 +2472,7 @@ public Additive_operatorContext additive_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 335; + State = 337; _la = TokenStream.LA(1); if ( !(_la==T__12 || _la==T__13) ) { ErrorHandler.RecoverInline(this); @@ -2518,7 +2523,7 @@ public Relational_operatorContext relational_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 337; + 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); @@ -2569,7 +2574,7 @@ public Equality_operatorContext equality_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 339; + State = 341; _la = TokenStream.LA(1); if ( !(_la==T__18 || _la==T__19) ) { ErrorHandler.RecoverInline(this); @@ -2619,7 +2624,7 @@ public Bitwise_and_operatorContext bitwise_and_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 341; Match(T__20); + State = 343; Match(T__20); } } catch (RecognitionException re) { @@ -2661,7 +2666,7 @@ public Bitwise_exclusive_or_operatorContext bitwise_exclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 343; Match(T__21); + State = 345; Match(T__21); } } catch (RecognitionException re) { @@ -2703,7 +2708,7 @@ public Bitwise_inclusive_or_operatorContext bitwise_inclusive_or_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 345; Match(T__22); + State = 347; Match(T__22); } } catch (RecognitionException re) { @@ -2745,7 +2750,7 @@ public String_concat_operatorContext string_concat_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 347; Match(T__23); + State = 349; Match(T__23); } } catch (RecognitionException re) { @@ -2794,7 +2799,7 @@ 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 = 353; + State = 355; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: @@ -2804,7 +2809,9 @@ public Unary_scalar_expressionContext unary_scalar_expression() { 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: @@ -2814,7 +2821,7 @@ public Unary_scalar_expressionContext unary_scalar_expression() { case PARAMETER: EnterOuterAlt(_localctx, 1); { - State = 349; primary_expression(0); + State = 351; primary_expression(0); } break; case T__12: @@ -2823,8 +2830,8 @@ public Unary_scalar_expressionContext unary_scalar_expression() { case K_NOT: EnterOuterAlt(_localctx, 2); { - State = 350; unary_operator(); - State = 351; unary_scalar_expression(); + State = 352; unary_operator(); + State = 353; unary_scalar_expression(); } break; default: @@ -2872,7 +2879,7 @@ public Unary_operatorContext unary_operator() { try { EnterOuterAlt(_localctx, 1); { - State = 355; + 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); @@ -3044,12 +3051,8 @@ public override TResult Accept(IParseTreeVisitor visitor) { } } public partial class FunctionCallScalarExpressionContext : Primary_expressionContext { - 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 Function_call_scalar_expressionContext function_call_scalar_expression() { + return GetRuleContext(0); } public FunctionCallScalarExpressionContext(Primary_expressionContext context) { CopyFrom(context); } public override void EnterRule(IParseTreeListener listener) { @@ -3182,16 +3185,16 @@ private Primary_expressionContext primary_expression(int _p) { int _alt; EnterOuterAlt(_localctx, 1); { - State = 405; + 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 = 358; identifier(); + State = 360; identifier(); } break; case 2: @@ -3199,7 +3202,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ParameterRefScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 359; Match(PARAMETER); + State = 361; Match(PARAMETER); } break; case 3: @@ -3207,7 +3210,7 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new LiteralScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 360; literal(); + State = 362; literal(); } break; case 4: @@ -3215,17 +3218,17 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ArrayCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 361; Match(T__5); - State = 363; + 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_ALL) | (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 << LEX_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 = 362; scalar_expression_list(); + State = 364; scalar_expression_list(); } } - State = 365; Match(T__6); + State = 367; Match(T__6); } break; case 5: @@ -3233,142 +3236,121 @@ private Primary_expressionContext primary_expression(int _p) { _localctx = new ObjectCreateScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 366; Match(T__25); - State = 368; + State = 368; Match(T__25); + State = 370; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if (_la==STRING_LITERAL) { { - State = 367; object_property_list(); + State = 369; object_property_list(); } } - State = 370; Match(T__26); + State = 372; Match(T__26); } break; case 6: { - _localctx = new FunctionCallScalarExpressionContext(_localctx); + _localctx = new ParenthesizedScalarExperessionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 373; - ErrorHandler.Sync(this); - _la = TokenStream.LA(1); - if (_la==K_UDF) { - { - State = 371; Match(K_UDF); - State = 372; Match(T__4); - } - } - - State = 375; identifier(); - State = 376; Match(T__2); - State = 378; - 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_ALL) | (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 << LEX_IDENTIFIER) | (1L << PARAMETER))) != 0)) { - { - State = 377; scalar_expression_list(); - } - } - - State = 380; Match(T__3); + State = 373; Match(T__2); + 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 = 382; Match(T__2); - State = 383; scalar_expression(0); - State = 384; 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 = 386; Match(T__2); - State = 387; sql_query(); - State = 388; Match(T__3); + State = 381; Match(K_EXISTS); + State = 382; Match(T__2); + State = 383; sql_query(); + State = 384; Match(T__3); } break; case 9: { - _localctx = new ExistsScalarExpressionContext(_localctx); + _localctx = new ArrayScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 390; Match(K_EXISTS); - State = 391; Match(T__2); - State = 392; sql_query(); - State = 393; Match(T__3); + State = 386; Match(K_ARRAY); + State = 387; Match(T__2); + State = 388; sql_query(); + State = 389; Match(T__3); } break; case 10: { - _localctx = new ArrayScalarExpressionContext(_localctx); + _localctx = new AllScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 395; Match(K_ARRAY); - State = 396; Match(T__2); - State = 397; sql_query(); - State = 398; Match(T__3); + State = 391; Match(K_ALL); + State = 392; Match(T__2); + State = 393; sql_query(); + State = 394; Match(T__3); } break; case 11: { - _localctx = new AllScalarExpressionContext(_localctx); + _localctx = new FunctionCallScalarExpressionContext(_localctx); Context = _localctx; _prevctx = _localctx; - State = 400; Match(K_ALL); - State = 401; Match(T__2); - State = 402; sql_query(); - State = 403; Match(T__3); + State = 396; function_call_scalar_expression(); } break; } Context.Stop = TokenStream.LT(-1); - State = 417; + 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 = 415; + 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 = 407; - if (!(Precpred(Context, 5))) throw new FailedPredicateException(this, "Precpred(Context, 5)"); - State = 408; Match(T__4); - State = 409; 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 = 410; - if (!(Precpred(Context, 4))) throw new FailedPredicateException(this, "Precpred(Context, 4)"); - State = 411; Match(T__5); - State = 412; scalar_expression(0); - State = 413; 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 = 419; + State = 411; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,39,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,37,Context); } } } @@ -3383,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(); @@ -3413,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 = 420; scalar_expression(0); - State = 425; + State = 437; scalar_expression(0); + State = 442; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 421; Match(T__1); - State = 422; scalar_expression(0); + State = 438; Match(T__1); + State = 439; scalar_expression(0); } } - State = 427; + State = 444; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3476,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 = 428; object_property(); - State = 433; + State = 445; object_property(); + State = 450; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__1) { { { - State = 429; Match(T__1); - State = 430; object_property(); + State = 446; Match(T__1); + State = 447; object_property(); } } - State = 435; + State = 452; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3537,13 +3636,13 @@ 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 = 436; Match(STRING_LITERAL); - State = 437; Match(T__8); - State = 438; scalar_expression(0); + State = 453; Match(STRING_LITERAL); + State = 454; Match(T__8); + State = 455; scalar_expression(0); } } catch (RecognitionException re) { @@ -3583,12 +3682,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public IdentifierContext identifier() { IdentifierContext _localctx = new IdentifierContext(Context, State); - EnterRule(_localctx, 84, RULE_identifier); + EnterRule(_localctx, 86, RULE_identifier); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 440; + State = 457; _la = TokenStream.LA(1); if ( !(_la==K_ALL || _la==LEX_IDENTIFIER) ) { ErrorHandler.RecoverInline(this); @@ -3640,12 +3739,12 @@ public override TResult Accept(IParseTreeVisitor visitor) { [RuleVersion(0)] public LiteralContext literal() { LiteralContext _localctx = new LiteralContext(Context, State); - EnterRule(_localctx, 86, RULE_literal); + EnterRule(_localctx, 88, RULE_literal); int _la; try { EnterOuterAlt(_localctx, 1); { - State = 442; + 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); @@ -3721,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, 5); - case 17: return Precpred(Context, 4); + 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', '@', '\x1BF', '\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', @@ -3745,367 +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', - ',', '\x4', '-', '\t', '-', '\x3', '\x2', '\x3', '\x2', '\x3', '\x2', - '\x3', '\x3', '\x3', '\x3', '\x5', '\x3', '`', '\n', '\x3', '\x3', '\x3', - '\x5', '\x3', '\x63', '\n', '\x3', '\x3', '\x3', '\x5', '\x3', '\x66', - '\n', '\x3', '\x3', '\x3', '\x5', '\x3', 'i', '\n', '\x3', '\x3', '\x3', - '\x5', '\x3', 'l', '\n', '\x3', '\x3', '\x4', '\x3', '\x4', '\x5', '\x4', - 'p', '\n', '\x4', '\x3', '\x4', '\x5', '\x4', 's', '\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', '\x87', '\n', '\t', '\f', '\t', - '\xE', '\t', '\x8A', '\v', '\t', '\x3', '\n', '\x3', '\n', '\x3', '\n', - '\x5', '\n', '\x8F', '\n', '\n', '\x3', '\v', '\x3', '\v', '\x3', '\v', - '\x3', '\f', '\x3', '\f', '\x3', '\f', '\x5', '\f', '\x97', '\n', '\f', - '\x3', '\f', '\x5', '\f', '\x9A', '\n', '\f', '\x3', '\f', '\x3', '\f', - '\x3', '\f', '\x3', '\f', '\x5', '\f', '\xA0', '\n', '\f', '\x3', '\f', - '\x3', '\f', '\x3', '\f', '\a', '\f', '\xA5', '\n', '\f', '\f', '\f', - '\xE', '\f', '\xA8', '\v', '\f', '\x3', '\r', '\x3', '\r', '\x5', '\r', - '\xAC', '\n', '\r', '\x3', '\r', '\x3', '\r', '\x3', '\r', '\x3', '\r', - '\x5', '\r', '\xB2', '\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', '\a', '\xE', '\xC0', - '\n', '\xE', '\f', '\xE', '\xE', '\xE', '\xC3', '\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', '\xD3', '\n', - '\x12', '\f', '\x12', '\xE', '\x12', '\xD6', '\v', '\x12', '\x3', '\x13', - '\x3', '\x13', '\x5', '\x13', '\xDA', '\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', '\xEB', - '\n', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', '\x3', '\x18', - '\x3', '\x18', '\x5', '\x18', '\xF2', '\n', '\x18', '\x3', '\x18', '\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', '\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', '\x3', '\x18', '\x3', '\x18', '\a', '\x18', '\xFD', '\n', '\x18', - '\f', '\x18', '\xE', '\x18', '\x100', '\v', '\x18', '\x3', '\x19', '\x3', - '\x19', '\x3', '\x19', '\x3', '\x19', '\x5', '\x19', '\x106', '\n', '\x19', - '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', '\x3', '\x19', - '\x3', '\x19', '\a', '\x19', '\x10E', '\n', '\x19', '\f', '\x19', '\xE', - '\x19', '\x111', '\v', '\x19', '\x3', '\x1A', '\x3', '\x1A', '\x5', '\x1A', - '\x115', '\n', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', '\x1A', '\x3', - '\x1A', '\x3', '\x1A', '\x3', '\x1B', '\x3', '\x1B', '\x5', '\x1B', '\x11E', - '\n', '\x1B', '\x3', '\x1B', '\x3', '\x1B', '\x3', '\x1B', '\x5', '\x1B', - '\x123', '\n', '\x1B', '\x3', '\x1C', '\x3', '\x1C', '\x3', '\x1C', '\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', '\x3', '\x1D', '\x3', '\x1D', '\a', - '\x1D', '\x14B', '\n', '\x1D', '\f', '\x1D', '\xE', '\x1D', '\x14E', '\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', '&', '\x164', '\n', '&', - '\x3', '\'', '\x3', '\'', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', - '\x3', '(', '\x3', '(', '\x5', '(', '\x16E', '\n', '(', '\x3', '(', '\x3', - '(', '\x3', '(', '\x5', '(', '\x173', '\n', '(', '\x3', '(', '\x3', '(', - '\x3', '(', '\x5', '(', '\x178', '\n', '(', '\x3', '(', '\x3', '(', '\x3', - '(', '\x5', '(', '\x17D', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', + '\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', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', - '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x5', '(', '\x198', '\n', + '\x3', '(', '\x3', '(', '\x5', '(', '\x190', '\n', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', '(', '\x3', - '(', '\x3', '(', '\x3', '(', '\a', '(', '\x1A2', '\n', '(', '\f', '(', - '\xE', '(', '\x1A5', '\v', '(', '\x3', ')', '\x3', ')', '\x3', ')', '\a', - ')', '\x1AA', '\n', ')', '\f', ')', '\xE', ')', '\x1AD', '\v', ')', '\x3', - '*', '\x3', '*', '\x3', '*', '\a', '*', '\x1B2', '\n', '*', '\f', '*', - '\xE', '*', '\x1B5', '\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', 'X', '\x2', '\v', '\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', '\x30', '\x30', '\x4', '\x2', '\x1E', '\x1E', '?', '?', '\a', - '\x2', ')', ')', '\x31', '\x31', '\x37', '\x37', '\x39', '\x39', '=', - '>', '\x2', '\x1CE', '\x2', 'Z', '\x3', '\x2', '\x2', '\x2', '\x4', ']', - '\x3', '\x2', '\x2', '\x2', '\x6', 'm', '\x3', '\x2', '\x2', '\x2', '\b', - 'v', '\x3', '\x2', '\x2', '\x2', '\n', '|', '\x3', '\x2', '\x2', '\x2', - '\f', '~', '\x3', '\x2', '\x2', '\x2', '\xE', '\x80', '\x3', '\x2', '\x2', - '\x2', '\x10', '\x83', '\x3', '\x2', '\x2', '\x2', '\x12', '\x8B', '\x3', - '\x2', '\x2', '\x2', '\x14', '\x90', '\x3', '\x2', '\x2', '\x2', '\x16', - '\x9F', '\x3', '\x2', '\x2', '\x2', '\x18', '\xB1', '\x3', '\x2', '\x2', - '\x2', '\x1A', '\xB3', '\x3', '\x2', '\x2', '\x2', '\x1C', '\xC4', '\x3', - '\x2', '\x2', '\x2', '\x1E', '\xC7', '\x3', '\x2', '\x2', '\x2', ' ', - '\xCB', '\x3', '\x2', '\x2', '\x2', '\"', '\xCF', '\x3', '\x2', '\x2', - '\x2', '$', '\xD7', '\x3', '\x2', '\x2', '\x2', '&', '\xDB', '\x3', '\x2', - '\x2', '\x2', '(', '\xDD', '\x3', '\x2', '\x2', '\x2', '*', '\xE2', '\x3', - '\x2', '\x2', '\x2', ',', '\xE4', '\x3', '\x2', '\x2', '\x2', '.', '\xF1', - '\x3', '\x2', '\x2', '\x2', '\x30', '\x105', '\x3', '\x2', '\x2', '\x2', - '\x32', '\x112', '\x3', '\x2', '\x2', '\x2', '\x34', '\x11B', '\x3', '\x2', - '\x2', '\x2', '\x36', '\x124', '\x3', '\x2', '\x2', '\x2', '\x38', '\x127', - '\x3', '\x2', '\x2', '\x2', ':', '\x14F', '\x3', '\x2', '\x2', '\x2', - '<', '\x151', '\x3', '\x2', '\x2', '\x2', '>', '\x153', '\x3', '\x2', - '\x2', '\x2', '@', '\x155', '\x3', '\x2', '\x2', '\x2', '\x42', '\x157', - '\x3', '\x2', '\x2', '\x2', '\x44', '\x159', '\x3', '\x2', '\x2', '\x2', - '\x46', '\x15B', '\x3', '\x2', '\x2', '\x2', 'H', '\x15D', '\x3', '\x2', - '\x2', '\x2', 'J', '\x163', '\x3', '\x2', '\x2', '\x2', 'L', '\x165', - '\x3', '\x2', '\x2', '\x2', 'N', '\x197', '\x3', '\x2', '\x2', '\x2', - 'P', '\x1A6', '\x3', '\x2', '\x2', '\x2', 'R', '\x1AE', '\x3', '\x2', - '\x2', '\x2', 'T', '\x1B6', '\x3', '\x2', '\x2', '\x2', 'V', '\x1BA', - '\x3', '\x2', '\x2', '\x2', 'X', '\x1BC', '\x3', '\x2', '\x2', '\x2', - 'Z', '[', '\x5', '\x4', '\x3', '\x2', '[', '\\', '\a', '\x2', '\x2', '\x3', - '\\', '\x3', '\x3', '\x2', '\x2', '\x2', ']', '_', '\x5', '\x6', '\x4', - '\x2', '^', '`', '\x5', '\x14', '\v', '\x2', '_', '^', '\x3', '\x2', '\x2', - '\x2', '_', '`', '\x3', '\x2', '\x2', '\x2', '`', '\x62', '\x3', '\x2', - '\x2', '\x2', '\x61', '\x63', '\x5', '\x1C', '\xF', '\x2', '\x62', '\x61', - '\x3', '\x2', '\x2', '\x2', '\x62', '\x63', '\x3', '\x2', '\x2', '\x2', - '\x63', '\x65', '\x3', '\x2', '\x2', '\x2', '\x64', '\x66', '\x5', '\x1E', - '\x10', '\x2', '\x65', '\x64', '\x3', '\x2', '\x2', '\x2', '\x65', '\x66', - '\x3', '\x2', '\x2', '\x2', '\x66', 'h', '\x3', '\x2', '\x2', '\x2', 'g', - 'i', '\x5', ' ', '\x11', '\x2', 'h', 'g', '\x3', '\x2', '\x2', '\x2', - 'h', 'i', '\x3', '\x2', '\x2', '\x2', 'i', 'k', '\x3', '\x2', '\x2', '\x2', - 'j', 'l', '\x5', '(', '\x15', '\x2', 'k', 'j', '\x3', '\x2', '\x2', '\x2', - 'k', 'l', '\x3', '\x2', '\x2', '\x2', 'l', '\x5', '\x3', '\x2', '\x2', - '\x2', 'm', 'o', '\a', '\x35', '\x2', '\x2', 'n', 'p', '\a', '&', '\x2', - '\x2', 'o', 'n', '\x3', '\x2', '\x2', '\x2', 'o', 'p', '\x3', '\x2', '\x2', - '\x2', 'p', 'r', '\x3', '\x2', '\x2', '\x2', 'q', 's', '\x5', '\b', '\x5', - '\x2', 'r', 'q', '\x3', '\x2', '\x2', '\x2', 'r', 's', '\x3', '\x2', '\x2', - '\x2', 's', 't', '\x3', '\x2', '\x2', '\x2', 't', 'u', '\x5', '\n', '\x6', - '\x2', 'u', '\a', '\x3', '\x2', '\x2', '\x2', 'v', 'w', '\a', '\x36', - '\x2', '\x2', 'w', 'x', '\t', '\x2', '\x2', '\x2', 'x', '\t', '\x3', '\x2', - '\x2', '\x2', 'y', '}', '\x5', '\f', '\a', '\x2', 'z', '}', '\x5', '\xE', - '\b', '\x2', '{', '}', '\x5', '\x10', '\t', '\x2', '|', 'y', '\x3', '\x2', - '\x2', '\x2', '|', 'z', '\x3', '\x2', '\x2', '\x2', '|', '{', '\x3', '\x2', - '\x2', '\x2', '}', '\v', '\x3', '\x2', '\x2', '\x2', '~', '\x7F', '\a', - '\x3', '\x2', '\x2', '\x7F', '\r', '\x3', '\x2', '\x2', '\x2', '\x80', - '\x81', '\a', ':', '\x2', '\x2', '\x81', '\x82', '\x5', '.', '\x18', '\x2', - '\x82', '\xF', '\x3', '\x2', '\x2', '\x2', '\x83', '\x88', '\x5', '\x12', - '\n', '\x2', '\x84', '\x85', '\a', '\x4', '\x2', '\x2', '\x85', '\x87', - '\x5', '\x12', '\n', '\x2', '\x86', '\x84', '\x3', '\x2', '\x2', '\x2', - '\x87', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x88', '\x86', '\x3', '\x2', - '\x2', '\x2', '\x88', '\x89', '\x3', '\x2', '\x2', '\x2', '\x89', '\x11', - '\x3', '\x2', '\x2', '\x2', '\x8A', '\x88', '\x3', '\x2', '\x2', '\x2', - '\x8B', '\x8E', '\x5', '.', '\x18', '\x2', '\x8C', '\x8D', '\a', '!', - '\x2', '\x2', '\x8D', '\x8F', '\x5', 'V', ',', '\x2', '\x8E', '\x8C', - '\x3', '\x2', '\x2', '\x2', '\x8E', '\x8F', '\x3', '\x2', '\x2', '\x2', - '\x8F', '\x13', '\x3', '\x2', '\x2', '\x2', '\x90', '\x91', '\a', '*', - '\x2', '\x2', '\x91', '\x92', '\x5', '\x16', '\f', '\x2', '\x92', '\x15', - '\x3', '\x2', '\x2', '\x2', '\x93', '\x94', '\b', '\f', '\x1', '\x2', - '\x94', '\x99', '\x5', '\x18', '\r', '\x2', '\x95', '\x97', '\a', '!', - '\x2', '\x2', '\x96', '\x95', '\x3', '\x2', '\x2', '\x2', '\x96', '\x97', - '\x3', '\x2', '\x2', '\x2', '\x97', '\x98', '\x3', '\x2', '\x2', '\x2', - '\x98', '\x9A', '\x5', 'V', ',', '\x2', '\x99', '\x96', '\x3', '\x2', - '\x2', '\x2', '\x99', '\x9A', '\x3', '\x2', '\x2', '\x2', '\x9A', '\xA0', - '\x3', '\x2', '\x2', '\x2', '\x9B', '\x9C', '\x5', 'V', ',', '\x2', '\x9C', - '\x9D', '\a', ',', '\x2', '\x2', '\x9D', '\x9E', '\x5', '\x18', '\r', - '\x2', '\x9E', '\xA0', '\x3', '\x2', '\x2', '\x2', '\x9F', '\x93', '\x3', - '\x2', '\x2', '\x2', '\x9F', '\x9B', '\x3', '\x2', '\x2', '\x2', '\xA0', - '\xA6', '\x3', '\x2', '\x2', '\x2', '\xA1', '\xA2', '\f', '\x3', '\x2', - '\x2', '\xA2', '\xA3', '\a', '-', '\x2', '\x2', '\xA3', '\xA5', '\x5', - '\x16', '\f', '\x4', '\xA4', '\xA1', '\x3', '\x2', '\x2', '\x2', '\xA5', - '\xA8', '\x3', '\x2', '\x2', '\x2', '\xA6', '\xA4', '\x3', '\x2', '\x2', - '\x2', '\xA6', '\xA7', '\x3', '\x2', '\x2', '\x2', '\xA7', '\x17', '\x3', - '\x2', '\x2', '\x2', '\xA8', '\xA6', '\x3', '\x2', '\x2', '\x2', '\xA9', - '\xAB', '\x5', 'V', ',', '\x2', '\xAA', '\xAC', '\x5', '\x1A', '\xE', - '\x2', '\xAB', '\xAA', '\x3', '\x2', '\x2', '\x2', '\xAB', '\xAC', '\x3', - '\x2', '\x2', '\x2', '\xAC', '\xB2', '\x3', '\x2', '\x2', '\x2', '\xAD', - '\xAE', '\a', '\x5', '\x2', '\x2', '\xAE', '\xAF', '\x5', '\x4', '\x3', - '\x2', '\xAF', '\xB0', '\a', '\x6', '\x2', '\x2', '\xB0', '\xB2', '\x3', - '\x2', '\x2', '\x2', '\xB1', '\xA9', '\x3', '\x2', '\x2', '\x2', '\xB1', - '\xAD', '\x3', '\x2', '\x2', '\x2', '\xB2', '\x19', '\x3', '\x2', '\x2', - '\x2', '\xB3', '\xC1', '\b', '\xE', '\x1', '\x2', '\xB4', '\xB5', '\f', - '\x6', '\x2', '\x2', '\xB5', '\xB6', '\a', '\a', '\x2', '\x2', '\xB6', - '\xC0', '\x5', 'V', ',', '\x2', '\xB7', '\xB8', '\f', '\x5', '\x2', '\x2', - '\xB8', '\xB9', '\a', '\b', '\x2', '\x2', '\xB9', '\xBA', '\a', '=', '\x2', - '\x2', '\xBA', '\xC0', '\a', '\t', '\x2', '\x2', '\xBB', '\xBC', '\f', - '\x4', '\x2', '\x2', '\xBC', '\xBD', '\a', '\b', '\x2', '\x2', '\xBD', - '\xBE', '\a', '>', '\x2', '\x2', '\xBE', '\xC0', '\a', '\t', '\x2', '\x2', - '\xBF', '\xB4', '\x3', '\x2', '\x2', '\x2', '\xBF', '\xB7', '\x3', '\x2', - '\x2', '\x2', '\xBF', '\xBB', '\x3', '\x2', '\x2', '\x2', '\xC0', '\xC3', - '\x3', '\x2', '\x2', '\x2', '\xC1', '\xBF', '\x3', '\x2', '\x2', '\x2', - '\xC1', '\xC2', '\x3', '\x2', '\x2', '\x2', '\xC2', '\x1B', '\x3', '\x2', - '\x2', '\x2', '\xC3', '\xC1', '\x3', '\x2', '\x2', '\x2', '\xC4', '\xC5', - '\a', ';', '\x2', '\x2', '\xC5', '\xC6', '\x5', '.', '\x18', '\x2', '\xC6', - '\x1D', '\x3', '\x2', '\x2', '\x2', '\xC7', '\xC8', '\a', '+', '\x2', - '\x2', '\xC8', '\xC9', '\a', '$', '\x2', '\x2', '\xC9', '\xCA', '\x5', - 'P', ')', '\x2', '\xCA', '\x1F', '\x3', '\x2', '\x2', '\x2', '\xCB', '\xCC', - '\a', '\x34', '\x2', '\x2', '\xCC', '\xCD', '\a', '$', '\x2', '\x2', '\xCD', - '\xCE', '\x5', '\"', '\x12', '\x2', '\xCE', '!', '\x3', '\x2', '\x2', - '\x2', '\xCF', '\xD4', '\x5', '$', '\x13', '\x2', '\xD0', '\xD1', '\a', - '\x4', '\x2', '\x2', '\xD1', '\xD3', '\x5', '$', '\x13', '\x2', '\xD2', - '\xD0', '\x3', '\x2', '\x2', '\x2', '\xD3', '\xD6', '\x3', '\x2', '\x2', - '\x2', '\xD4', '\xD2', '\x3', '\x2', '\x2', '\x2', '\xD4', '\xD5', '\x3', - '\x2', '\x2', '\x2', '\xD5', '#', '\x3', '\x2', '\x2', '\x2', '\xD6', - '\xD4', '\x3', '\x2', '\x2', '\x2', '\xD7', '\xD9', '\x5', '.', '\x18', - '\x2', '\xD8', '\xDA', '\x5', '&', '\x14', '\x2', '\xD9', '\xD8', '\x3', - '\x2', '\x2', '\x2', '\xD9', '\xDA', '\x3', '\x2', '\x2', '\x2', '\xDA', - '%', '\x3', '\x2', '\x2', '\x2', '\xDB', '\xDC', '\t', '\x3', '\x2', '\x2', - '\xDC', '\'', '\x3', '\x2', '\x2', '\x2', '\xDD', '\xDE', '\a', '\x32', - '\x2', '\x2', '\xDE', '\xDF', '\x5', '*', '\x16', '\x2', '\xDF', '\xE0', - '\a', '/', '\x2', '\x2', '\xE0', '\xE1', '\x5', ',', '\x17', '\x2', '\xE1', - ')', '\x3', '\x2', '\x2', '\x2', '\xE2', '\xE3', '\t', '\x2', '\x2', '\x2', - '\xE3', '+', '\x3', '\x2', '\x2', '\x2', '\xE4', '\xE5', '\t', '\x2', - '\x2', '\x2', '\xE5', '-', '\x3', '\x2', '\x2', '\x2', '\xE6', '\xE7', - '\b', '\x18', '\x1', '\x2', '\xE7', '\xF2', '\x5', '\x30', '\x19', '\x2', - '\xE8', '\xEA', '\x5', '\x38', '\x1D', '\x2', '\xE9', '\xEB', '\a', '\x30', - '\x2', '\x2', '\xEA', '\xE9', '\x3', '\x2', '\x2', '\x2', '\xEA', '\xEB', - '\x3', '\x2', '\x2', '\x2', '\xEB', '\xEC', '\x3', '\x2', '\x2', '\x2', - '\xEC', '\xED', '\a', '#', '\x2', '\x2', '\xED', '\xEE', '\x5', '\x38', - '\x1D', '\x2', '\xEE', '\xEF', '\a', '\x1F', '\x2', '\x2', '\xEF', '\xF0', - '\x5', '\x38', '\x1D', '\x2', '\xF0', '\xF2', '\x3', '\x2', '\x2', '\x2', - '\xF1', '\xE6', '\x3', '\x2', '\x2', '\x2', '\xF1', '\xE8', '\x3', '\x2', - '\x2', '\x2', '\xF2', '\xFE', '\x3', '\x2', '\x2', '\x2', '\xF3', '\xF4', - '\f', '\x6', '\x2', '\x2', '\xF4', '\xF5', '\a', '\n', '\x2', '\x2', '\xF5', - '\xF6', '\x5', '.', '\x18', '\x2', '\xF6', '\xF7', '\a', '\v', '\x2', - '\x2', '\xF7', '\xF8', '\x5', '.', '\x18', '\a', '\xF8', '\xFD', '\x3', - '\x2', '\x2', '\x2', '\xF9', '\xFA', '\f', '\x5', '\x2', '\x2', '\xFA', - '\xFB', '\a', '\f', '\x2', '\x2', '\xFB', '\xFD', '\x5', '.', '\x18', - '\x6', '\xFC', '\xF3', '\x3', '\x2', '\x2', '\x2', '\xFC', '\xF9', '\x3', - '\x2', '\x2', '\x2', '\xFD', '\x100', '\x3', '\x2', '\x2', '\x2', '\xFE', - '\xFC', '\x3', '\x2', '\x2', '\x2', '\xFE', '\xFF', '\x3', '\x2', '\x2', - '\x2', '\xFF', '/', '\x3', '\x2', '\x2', '\x2', '\x100', '\xFE', '\x3', - '\x2', '\x2', '\x2', '\x101', '\x102', '\b', '\x19', '\x1', '\x2', '\x102', - '\x106', '\x5', '\x38', '\x1D', '\x2', '\x103', '\x106', '\x5', '\x32', - '\x1A', '\x2', '\x104', '\x106', '\x5', '\x34', '\x1B', '\x2', '\x105', - '\x101', '\x3', '\x2', '\x2', '\x2', '\x105', '\x103', '\x3', '\x2', '\x2', - '\x2', '\x105', '\x104', '\x3', '\x2', '\x2', '\x2', '\x106', '\x10F', - '\x3', '\x2', '\x2', '\x2', '\x107', '\x108', '\f', '\x4', '\x2', '\x2', - '\x108', '\x109', '\a', '\x1F', '\x2', '\x2', '\x109', '\x10E', '\x5', - '\x30', '\x19', '\x5', '\x10A', '\x10B', '\f', '\x3', '\x2', '\x2', '\x10B', - '\x10C', '\a', '\x33', '\x2', '\x2', '\x10C', '\x10E', '\x5', '\x30', - '\x19', '\x4', '\x10D', '\x107', '\x3', '\x2', '\x2', '\x2', '\x10D', - '\x10A', '\x3', '\x2', '\x2', '\x2', '\x10E', '\x111', '\x3', '\x2', '\x2', - '\x2', '\x10F', '\x10D', '\x3', '\x2', '\x2', '\x2', '\x10F', '\x110', - '\x3', '\x2', '\x2', '\x2', '\x110', '\x31', '\x3', '\x2', '\x2', '\x2', - '\x111', '\x10F', '\x3', '\x2', '\x2', '\x2', '\x112', '\x114', '\x5', - '\x38', '\x1D', '\x2', '\x113', '\x115', '\a', '\x30', '\x2', '\x2', '\x114', - '\x113', '\x3', '\x2', '\x2', '\x2', '\x114', '\x115', '\x3', '\x2', '\x2', - '\x2', '\x115', '\x116', '\x3', '\x2', '\x2', '\x2', '\x116', '\x117', - '\a', ',', '\x2', '\x2', '\x117', '\x118', '\a', '\x5', '\x2', '\x2', - '\x118', '\x119', '\x5', 'P', ')', '\x2', '\x119', '\x11A', '\a', '\x6', - '\x2', '\x2', '\x11A', '\x33', '\x3', '\x2', '\x2', '\x2', '\x11B', '\x11D', - '\x5', '\x38', '\x1D', '\x2', '\x11C', '\x11E', '\a', '\x30', '\x2', '\x2', - '\x11D', '\x11C', '\x3', '\x2', '\x2', '\x2', '\x11D', '\x11E', '\x3', - '\x2', '\x2', '\x2', '\x11E', '\x11F', '\x3', '\x2', '\x2', '\x2', '\x11F', - '\x120', '\a', '.', '\x2', '\x2', '\x120', '\x122', '\x5', '\x38', '\x1D', - '\x2', '\x121', '\x123', '\x5', '\x36', '\x1C', '\x2', '\x122', '\x121', - '\x3', '\x2', '\x2', '\x2', '\x122', '\x123', '\x3', '\x2', '\x2', '\x2', - '\x123', '\x35', '\x3', '\x2', '\x2', '\x2', '\x124', '\x125', '\a', '\'', - '\x2', '\x2', '\x125', '\x126', '\a', '>', '\x2', '\x2', '\x126', '\x37', - '\x3', '\x2', '\x2', '\x2', '\x127', '\x128', '\b', '\x1D', '\x1', '\x2', - '\x128', '\x129', '\x5', 'J', '&', '\x2', '\x129', '\x14C', '\x3', '\x2', - '\x2', '\x2', '\x12A', '\x12B', '\f', '\n', '\x2', '\x2', '\x12B', '\x12C', - '\x5', ':', '\x1E', '\x2', '\x12C', '\x12D', '\x5', '\x38', '\x1D', '\v', - '\x12D', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x12E', '\x12F', '\f', - '\t', '\x2', '\x2', '\x12F', '\x130', '\x5', '<', '\x1F', '\x2', '\x130', - '\x131', '\x5', '\x38', '\x1D', '\n', '\x131', '\x14B', '\x3', '\x2', - '\x2', '\x2', '\x132', '\x133', '\f', '\b', '\x2', '\x2', '\x133', '\x134', - '\x5', '>', ' ', '\x2', '\x134', '\x135', '\x5', '\x38', '\x1D', '\t', - '\x135', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x136', '\x137', '\f', - '\a', '\x2', '\x2', '\x137', '\x138', '\x5', '@', '!', '\x2', '\x138', - '\x139', '\x5', '\x38', '\x1D', '\b', '\x139', '\x14B', '\x3', '\x2', - '\x2', '\x2', '\x13A', '\x13B', '\f', '\x6', '\x2', '\x2', '\x13B', '\x13C', - '\x5', '\x42', '\"', '\x2', '\x13C', '\x13D', '\x5', '\x38', '\x1D', '\a', - '\x13D', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x13E', '\x13F', '\f', - '\x5', '\x2', '\x2', '\x13F', '\x140', '\x5', '\x44', '#', '\x2', '\x140', - '\x141', '\x5', '\x38', '\x1D', '\x6', '\x141', '\x14B', '\x3', '\x2', - '\x2', '\x2', '\x142', '\x143', '\f', '\x4', '\x2', '\x2', '\x143', '\x144', - '\x5', '\x46', '$', '\x2', '\x144', '\x145', '\x5', '\x38', '\x1D', '\x5', - '\x145', '\x14B', '\x3', '\x2', '\x2', '\x2', '\x146', '\x147', '\f', - '\x3', '\x2', '\x2', '\x147', '\x148', '\x5', 'H', '%', '\x2', '\x148', - '\x149', '\x5', '\x38', '\x1D', '\x4', '\x149', '\x14B', '\x3', '\x2', - '\x2', '\x2', '\x14A', '\x12A', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x12E', - '\x3', '\x2', '\x2', '\x2', '\x14A', '\x132', '\x3', '\x2', '\x2', '\x2', - '\x14A', '\x136', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x13A', '\x3', - '\x2', '\x2', '\x2', '\x14A', '\x13E', '\x3', '\x2', '\x2', '\x2', '\x14A', - '\x142', '\x3', '\x2', '\x2', '\x2', '\x14A', '\x146', '\x3', '\x2', '\x2', - '\x2', '\x14B', '\x14E', '\x3', '\x2', '\x2', '\x2', '\x14C', '\x14A', - '\x3', '\x2', '\x2', '\x2', '\x14C', '\x14D', '\x3', '\x2', '\x2', '\x2', - '\x14D', '\x39', '\x3', '\x2', '\x2', '\x2', '\x14E', '\x14C', '\x3', - '\x2', '\x2', '\x2', '\x14F', '\x150', '\t', '\x4', '\x2', '\x2', '\x150', - ';', '\x3', '\x2', '\x2', '\x2', '\x151', '\x152', '\t', '\x5', '\x2', - '\x2', '\x152', '=', '\x3', '\x2', '\x2', '\x2', '\x153', '\x154', '\t', - '\x6', '\x2', '\x2', '\x154', '?', '\x3', '\x2', '\x2', '\x2', '\x155', - '\x156', '\t', '\a', '\x2', '\x2', '\x156', '\x41', '\x3', '\x2', '\x2', - '\x2', '\x157', '\x158', '\a', '\x17', '\x2', '\x2', '\x158', '\x43', - '\x3', '\x2', '\x2', '\x2', '\x159', '\x15A', '\a', '\x18', '\x2', '\x2', - '\x15A', '\x45', '\x3', '\x2', '\x2', '\x2', '\x15B', '\x15C', '\a', '\x19', - '\x2', '\x2', '\x15C', 'G', '\x3', '\x2', '\x2', '\x2', '\x15D', '\x15E', - '\a', '\x1A', '\x2', '\x2', '\x15E', 'I', '\x3', '\x2', '\x2', '\x2', - '\x15F', '\x164', '\x5', 'N', '(', '\x2', '\x160', '\x161', '\x5', 'L', - '\'', '\x2', '\x161', '\x162', '\x5', 'J', '&', '\x2', '\x162', '\x164', - '\x3', '\x2', '\x2', '\x2', '\x163', '\x15F', '\x3', '\x2', '\x2', '\x2', - '\x163', '\x160', '\x3', '\x2', '\x2', '\x2', '\x164', 'K', '\x3', '\x2', - '\x2', '\x2', '\x165', '\x166', '\t', '\b', '\x2', '\x2', '\x166', 'M', - '\x3', '\x2', '\x2', '\x2', '\x167', '\x168', '\b', '(', '\x1', '\x2', - '\x168', '\x198', '\x5', 'V', ',', '\x2', '\x169', '\x198', '\a', '@', - '\x2', '\x2', '\x16A', '\x198', '\x5', 'X', '-', '\x2', '\x16B', '\x16D', - '\a', '\b', '\x2', '\x2', '\x16C', '\x16E', '\x5', 'P', ')', '\x2', '\x16D', - '\x16C', '\x3', '\x2', '\x2', '\x2', '\x16D', '\x16E', '\x3', '\x2', '\x2', - '\x2', '\x16E', '\x16F', '\x3', '\x2', '\x2', '\x2', '\x16F', '\x198', - '\a', '\t', '\x2', '\x2', '\x170', '\x172', '\a', '\x1C', '\x2', '\x2', - '\x171', '\x173', '\x5', 'R', '*', '\x2', '\x172', '\x171', '\x3', '\x2', - '\x2', '\x2', '\x172', '\x173', '\x3', '\x2', '\x2', '\x2', '\x173', '\x174', - '\x3', '\x2', '\x2', '\x2', '\x174', '\x198', '\a', '\x1D', '\x2', '\x2', - '\x175', '\x176', '\a', '\x38', '\x2', '\x2', '\x176', '\x178', '\a', - '\a', '\x2', '\x2', '\x177', '\x175', '\x3', '\x2', '\x2', '\x2', '\x177', - '\x178', '\x3', '\x2', '\x2', '\x2', '\x178', '\x179', '\x3', '\x2', '\x2', - '\x2', '\x179', '\x17A', '\x5', 'V', ',', '\x2', '\x17A', '\x17C', '\a', - '\x5', '\x2', '\x2', '\x17B', '\x17D', '\x5', 'P', ')', '\x2', '\x17C', - '\x17B', '\x3', '\x2', '\x2', '\x2', '\x17C', '\x17D', '\x3', '\x2', '\x2', - '\x2', '\x17D', '\x17E', '\x3', '\x2', '\x2', '\x2', '\x17E', '\x17F', - '\a', '\x6', '\x2', '\x2', '\x17F', '\x198', '\x3', '\x2', '\x2', '\x2', - '\x180', '\x181', '\a', '\x5', '\x2', '\x2', '\x181', '\x182', '\x5', - '.', '\x18', '\x2', '\x182', '\x183', '\a', '\x6', '\x2', '\x2', '\x183', - '\x198', '\x3', '\x2', '\x2', '\x2', '\x184', '\x185', '\a', '\x5', '\x2', - '\x2', '\x185', '\x186', '\x5', '\x4', '\x3', '\x2', '\x186', '\x187', - '\a', '\x6', '\x2', '\x2', '\x187', '\x198', '\x3', '\x2', '\x2', '\x2', - '\x188', '\x189', '\a', '(', '\x2', '\x2', '\x189', '\x18A', '\a', '\x5', - '\x2', '\x2', '\x18A', '\x18B', '\x5', '\x4', '\x3', '\x2', '\x18B', '\x18C', - '\a', '\x6', '\x2', '\x2', '\x18C', '\x198', '\x3', '\x2', '\x2', '\x2', - '\x18D', '\x18E', '\a', ' ', '\x2', '\x2', '\x18E', '\x18F', '\a', '\x5', - '\x2', '\x2', '\x18F', '\x190', '\x5', '\x4', '\x3', '\x2', '\x190', '\x191', - '\a', '\x6', '\x2', '\x2', '\x191', '\x198', '\x3', '\x2', '\x2', '\x2', - '\x192', '\x193', '\a', '\x1E', '\x2', '\x2', '\x193', '\x194', '\a', - '\x5', '\x2', '\x2', '\x194', '\x195', '\x5', '\x4', '\x3', '\x2', '\x195', - '\x196', '\a', '\x6', '\x2', '\x2', '\x196', '\x198', '\x3', '\x2', '\x2', - '\x2', '\x197', '\x167', '\x3', '\x2', '\x2', '\x2', '\x197', '\x169', - '\x3', '\x2', '\x2', '\x2', '\x197', '\x16A', '\x3', '\x2', '\x2', '\x2', - '\x197', '\x16B', '\x3', '\x2', '\x2', '\x2', '\x197', '\x170', '\x3', - '\x2', '\x2', '\x2', '\x197', '\x177', '\x3', '\x2', '\x2', '\x2', '\x197', - '\x180', '\x3', '\x2', '\x2', '\x2', '\x197', '\x184', '\x3', '\x2', '\x2', - '\x2', '\x197', '\x188', '\x3', '\x2', '\x2', '\x2', '\x197', '\x18D', - '\x3', '\x2', '\x2', '\x2', '\x197', '\x192', '\x3', '\x2', '\x2', '\x2', - '\x198', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x199', '\x19A', '\f', - '\a', '\x2', '\x2', '\x19A', '\x19B', '\a', '\a', '\x2', '\x2', '\x19B', - '\x1A2', '\x5', 'V', ',', '\x2', '\x19C', '\x19D', '\f', '\x6', '\x2', - '\x2', '\x19D', '\x19E', '\a', '\b', '\x2', '\x2', '\x19E', '\x19F', '\x5', - '.', '\x18', '\x2', '\x19F', '\x1A0', '\a', '\t', '\x2', '\x2', '\x1A0', - '\x1A2', '\x3', '\x2', '\x2', '\x2', '\x1A1', '\x199', '\x3', '\x2', '\x2', - '\x2', '\x1A1', '\x19C', '\x3', '\x2', '\x2', '\x2', '\x1A2', '\x1A5', - '\x3', '\x2', '\x2', '\x2', '\x1A3', '\x1A1', '\x3', '\x2', '\x2', '\x2', - '\x1A3', '\x1A4', '\x3', '\x2', '\x2', '\x2', '\x1A4', 'O', '\x3', '\x2', - '\x2', '\x2', '\x1A5', '\x1A3', '\x3', '\x2', '\x2', '\x2', '\x1A6', '\x1AB', - '\x5', '.', '\x18', '\x2', '\x1A7', '\x1A8', '\a', '\x4', '\x2', '\x2', - '\x1A8', '\x1AA', '\x5', '.', '\x18', '\x2', '\x1A9', '\x1A7', '\x3', - '\x2', '\x2', '\x2', '\x1AA', '\x1AD', '\x3', '\x2', '\x2', '\x2', '\x1AB', - '\x1A9', '\x3', '\x2', '\x2', '\x2', '\x1AB', '\x1AC', '\x3', '\x2', '\x2', - '\x2', '\x1AC', 'Q', '\x3', '\x2', '\x2', '\x2', '\x1AD', '\x1AB', '\x3', - '\x2', '\x2', '\x2', '\x1AE', '\x1B3', '\x5', 'T', '+', '\x2', '\x1AF', - '\x1B0', '\a', '\x4', '\x2', '\x2', '\x1B0', '\x1B2', '\x5', 'T', '+', - '\x2', '\x1B1', '\x1AF', '\x3', '\x2', '\x2', '\x2', '\x1B2', '\x1B5', - '\x3', '\x2', '\x2', '\x2', '\x1B3', '\x1B1', '\x3', '\x2', '\x2', '\x2', - '\x1B3', '\x1B4', '\x3', '\x2', '\x2', '\x2', '\x1B4', 'S', '\x3', '\x2', - '\x2', '\x2', '\x1B5', '\x1B3', '\x3', '\x2', '\x2', '\x2', '\x1B6', '\x1B7', - '\a', '>', '\x2', '\x2', '\x1B7', '\x1B8', '\a', '\v', '\x2', '\x2', '\x1B8', - '\x1B9', '\x5', '.', '\x18', '\x2', '\x1B9', 'U', '\x3', '\x2', '\x2', - '\x2', '\x1BA', '\x1BB', '\t', '\t', '\x2', '\x2', '\x1BB', 'W', '\x3', - '\x2', '\x2', '\x2', '\x1BC', '\x1BD', '\t', '\n', '\x2', '\x2', '\x1BD', - 'Y', '\x3', '\x2', '\x2', '\x2', ',', '_', '\x62', '\x65', 'h', 'k', 'o', - 'r', '|', '\x88', '\x8E', '\x96', '\x99', '\x9F', '\xA6', '\xAB', '\xB1', - '\xBF', '\xC1', '\xD4', '\xD9', '\xEA', '\xF1', '\xFC', '\xFE', '\x105', - '\x10D', '\x10F', '\x114', '\x11D', '\x122', '\x14A', '\x14C', '\x163', - '\x16D', '\x172', '\x177', '\x17C', '\x197', '\x1A1', '\x1A3', '\x1AB', - '\x1B3', + '(', '\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', '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 = From ad3b74768ca340431f499dcfbaa5d6a0cee40e1f Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 02:05:59 -0800 Subject: [PATCH 12/16] fixed bug from last commit --- .../src/Query/Core/Parser/sql.g4 | 5 +- .../src/Query/Core/Parser/sqlLexer.cs | 512 +++++++++--------- 2 files changed, 261 insertions(+), 256 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 index 8c731b3130..ec71f74fca 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 @@ -278,8 +278,9 @@ fragment SAFECODEPOINTWITHDOUBLEQUOTATION ; LEX_IDENTIFIER - : [a-zA-Z_]([a-zA-Z_]|DIGIT)* - ; + : + | [a-zA-Z_]([a-zA-Z_]|DIGIT)* + ; PARAMETER : '@'LEX_IDENTIFIER diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs index 2e20cc14f6..1d5b7262bd 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sqlLexer.cs @@ -122,7 +122,7 @@ static sqlLexer() { } private static char[] _serializedATN = { '\x3', '\x608B', '\xA72A', '\x8133', '\xB9ED', '\x417C', '\x3BE7', '\x7786', - '\x5964', '\x2', '\x42', '\x24B', '\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', @@ -218,214 +218,215 @@ static sqlLexer() { '\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', '\a', '\x45', '\x20E', '\n', '\x45', '\f', '\x45', - '\xE', '\x45', '\x211', '\v', '\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', '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', - 'R', '\x3', 'S', '\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', - '^', '\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', '\x240', '\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', '\x20A', '\x3', '\x2', '\x2', '\x2', '\x8B', '\x212', '\x3', '\x2', - '\x2', '\x2', '\x8D', '\x215', '\x3', '\x2', '\x2', '\x2', '\x8F', '\x217', - '\x3', '\x2', '\x2', '\x2', '\x91', '\x219', '\x3', '\x2', '\x2', '\x2', - '\x93', '\x21B', '\x3', '\x2', '\x2', '\x2', '\x95', '\x21D', '\x3', '\x2', - '\x2', '\x2', '\x97', '\x21F', '\x3', '\x2', '\x2', '\x2', '\x99', '\x221', - '\x3', '\x2', '\x2', '\x2', '\x9B', '\x223', '\x3', '\x2', '\x2', '\x2', - '\x9D', '\x225', '\x3', '\x2', '\x2', '\x2', '\x9F', '\x227', '\x3', '\x2', - '\x2', '\x2', '\xA1', '\x229', '\x3', '\x2', '\x2', '\x2', '\xA3', '\x22B', - '\x3', '\x2', '\x2', '\x2', '\xA5', '\x22D', '\x3', '\x2', '\x2', '\x2', - '\xA7', '\x22F', '\x3', '\x2', '\x2', '\x2', '\xA9', '\x231', '\x3', '\x2', - '\x2', '\x2', '\xAB', '\x233', '\x3', '\x2', '\x2', '\x2', '\xAD', '\x235', - '\x3', '\x2', '\x2', '\x2', '\xAF', '\x237', '\x3', '\x2', '\x2', '\x2', - '\xB1', '\x239', '\x3', '\x2', '\x2', '\x2', '\xB3', '\x23B', '\x3', '\x2', - '\x2', '\x2', '\xB5', '\x23D', '\x3', '\x2', '\x2', '\x2', '\xB7', '\x23F', - '\x3', '\x2', '\x2', '\x2', '\xB9', '\x241', '\x3', '\x2', '\x2', '\x2', - '\xBB', '\x243', '\x3', '\x2', '\x2', '\x2', '\xBD', '\x245', '\x3', '\x2', - '\x2', '\x2', '\xBF', '\x247', '\x3', '\x2', '\x2', '\x2', '\xC1', '\x249', - '\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', + '\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', + '\x3', 'P', '\x3', 'Q', '\x3', 'Q', '\x3', 'R', '\x3', 'R', '\x3', 'S', + '\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', '^', '\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', @@ -570,51 +571,54 @@ static sqlLexer() { '\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', '\x20F', '\t', '\b', '\x2', '\x2', - '\x20B', '\x20E', '\t', '\b', '\x2', '\x2', '\x20C', '\x20E', '\x5', '\x8D', - 'G', '\x2', '\x20D', '\x20B', '\x3', '\x2', '\x2', '\x2', '\x20D', '\x20C', - '\x3', '\x2', '\x2', '\x2', '\x20E', '\x211', '\x3', '\x2', '\x2', '\x2', - '\x20F', '\x20D', '\x3', '\x2', '\x2', '\x2', '\x20F', '\x210', '\x3', - '\x2', '\x2', '\x2', '\x210', '\x8A', '\x3', '\x2', '\x2', '\x2', '\x211', - '\x20F', '\x3', '\x2', '\x2', '\x2', '\x212', '\x213', '\a', '\x42', '\x2', - '\x2', '\x213', '\x214', '\x5', '\x89', '\x45', '\x2', '\x214', '\x8C', - '\x3', '\x2', '\x2', '\x2', '\x215', '\x216', '\t', '\t', '\x2', '\x2', - '\x216', '\x8E', '\x3', '\x2', '\x2', '\x2', '\x217', '\x218', '\t', '\n', - '\x2', '\x2', '\x218', '\x90', '\x3', '\x2', '\x2', '\x2', '\x219', '\x21A', - '\t', '\v', '\x2', '\x2', '\x21A', '\x92', '\x3', '\x2', '\x2', '\x2', - '\x21B', '\x21C', '\t', '\f', '\x2', '\x2', '\x21C', '\x94', '\x3', '\x2', - '\x2', '\x2', '\x21D', '\x21E', '\t', '\r', '\x2', '\x2', '\x21E', '\x96', - '\x3', '\x2', '\x2', '\x2', '\x21F', '\x220', '\t', '\xE', '\x2', '\x2', - '\x220', '\x98', '\x3', '\x2', '\x2', '\x2', '\x221', '\x222', '\t', '\xF', - '\x2', '\x2', '\x222', '\x9A', '\x3', '\x2', '\x2', '\x2', '\x223', '\x224', - '\t', '\x10', '\x2', '\x2', '\x224', '\x9C', '\x3', '\x2', '\x2', '\x2', - '\x225', '\x226', '\t', '\x11', '\x2', '\x2', '\x226', '\x9E', '\x3', - '\x2', '\x2', '\x2', '\x227', '\x228', '\t', '\x12', '\x2', '\x2', '\x228', - '\xA0', '\x3', '\x2', '\x2', '\x2', '\x229', '\x22A', '\t', '\x13', '\x2', - '\x2', '\x22A', '\xA2', '\x3', '\x2', '\x2', '\x2', '\x22B', '\x22C', - '\t', '\x14', '\x2', '\x2', '\x22C', '\xA4', '\x3', '\x2', '\x2', '\x2', - '\x22D', '\x22E', '\t', '\x15', '\x2', '\x2', '\x22E', '\xA6', '\x3', - '\x2', '\x2', '\x2', '\x22F', '\x230', '\t', '\x16', '\x2', '\x2', '\x230', - '\xA8', '\x3', '\x2', '\x2', '\x2', '\x231', '\x232', '\t', '\x17', '\x2', - '\x2', '\x232', '\xAA', '\x3', '\x2', '\x2', '\x2', '\x233', '\x234', - '\t', '\x18', '\x2', '\x2', '\x234', '\xAC', '\x3', '\x2', '\x2', '\x2', - '\x235', '\x236', '\t', '\x19', '\x2', '\x2', '\x236', '\xAE', '\x3', - '\x2', '\x2', '\x2', '\x237', '\x238', '\t', '\x1A', '\x2', '\x2', '\x238', - '\xB0', '\x3', '\x2', '\x2', '\x2', '\x239', '\x23A', '\t', '\x1B', '\x2', - '\x2', '\x23A', '\xB2', '\x3', '\x2', '\x2', '\x2', '\x23B', '\x23C', - '\t', '\x1C', '\x2', '\x2', '\x23C', '\xB4', '\x3', '\x2', '\x2', '\x2', - '\x23D', '\x23E', '\t', '\x1D', '\x2', '\x2', '\x23E', '\xB6', '\x3', - '\x2', '\x2', '\x2', '\x23F', '\x240', '\t', '\x1E', '\x2', '\x2', '\x240', - '\xB8', '\x3', '\x2', '\x2', '\x2', '\x241', '\x242', '\t', '\x1F', '\x2', - '\x2', '\x242', '\xBA', '\x3', '\x2', '\x2', '\x2', '\x243', '\x244', - '\t', ' ', '\x2', '\x2', '\x244', '\xBC', '\x3', '\x2', '\x2', '\x2', - '\x245', '\x246', '\t', '!', '\x2', '\x2', '\x246', '\xBE', '\x3', '\x2', - '\x2', '\x2', '\x247', '\x248', '\t', '\"', '\x2', '\x2', '\x248', '\xC0', - '\x3', '\x2', '\x2', '\x2', '\x249', '\x24A', '\t', '#', '\x2', '\x2', - '\x24A', '\xC2', '\x3', '\x2', '\x2', '\x2', '\x19', '\x2', '\x1AF', '\x1B4', - '\x1B9', '\x1BF', '\x1C2', '\x1C6', '\x1CB', '\x1CD', '\x1D0', '\x1D6', - '\x1DA', '\x1DF', '\x1E1', '\x1E3', '\x1E8', '\x1EA', '\x1F1', '\x1F3', - '\x1F7', '\x1FC', '\x20D', '\x20F', '\x3', '\b', '\x2', '\x2', + '\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 = From 795a88c2d38b7c3347feb2542c640262549a53e6 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 02:13:12 -0800 Subject: [PATCH 13/16] cleaning --- Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs index 2e8054bc30..448b8f4ca6 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs @@ -571,7 +571,7 @@ public override SqlObject VisitExistsScalarExpression([NotNull] sqlParser.Exists public override SqlObject VisitFunctionCallScalarExpression([NotNull] sqlParser.FunctionCallScalarExpressionContext context) { Contract.Requires(context != null); - Contract.Requires(context.function_call_scalar_expression != null); + // function_call_scalar_expression return this.Visit(context.function_call_scalar_expression()); } From 85b4a0bd4d6be0e3b70f673e5593cb62eaca22d7 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 02:16:45 -0800 Subject: [PATCH 14/16] replace tabs with spaces --- Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 index ec71f74fca..42ac229557 100644 --- a/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 +++ b/Microsoft.Azure.Cosmos/src/Query/Core/Parser/sql.g4 @@ -177,10 +177,10 @@ primary_expression ; function_call_scalar_expression - : (K_UDF '.')? identifier '(' scalar_expression_list? ')' - | K_LEFT '(' scalar_expression_list? ')' - | K_RIGHT '(' scalar_expression_list? ')' - ; + : (K_UDF '.')? identifier '(' scalar_expression_list? ')' + | K_LEFT '(' scalar_expression_list? ')' + | K_RIGHT '(' scalar_expression_list? ')' + ; scalar_expression_list : scalar_expression (',' scalar_expression)*; @@ -278,9 +278,9 @@ fragment SAFECODEPOINTWITHDOUBLEQUOTATION ; LEX_IDENTIFIER - : + : | [a-zA-Z_]([a-zA-Z_]|DIGIT)* - ; + ; PARAMETER : '@'LEX_IDENTIFIER From acb14f7961951d5052e030578c0103dcac9538d1 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 09:38:31 -0800 Subject: [PATCH 15/16] cleaning --- .../Parser/AggregateSubquerySqlParserBaselineTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs index b7b82e9cee..079fbbba46 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Query/Parser/AggregateSubquerySqlParserBaselineTests.cs @@ -17,11 +17,11 @@ public void All() { CreateInput( description: "ALL in an SqlSelectItem as an alias", - query: "SELECT 1 as ALL"), + query: "SELECT 1 AS ALL"), CreateInput( description: "ALL in an AliasedCollectionExpression as an alias", query: "SELECT * " + - "FROM (SELECT VALUE 1) as ALL"), + "FROM (SELECT VALUE 1) AS ALL"), CreateInput( description: "ALL in an ArrayIteratorCollectionExpression", query: "SELECT * " + @@ -47,11 +47,11 @@ public void All() 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 " + + 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 " + + " FROM (SELECT udf.ALL(1, 2)) AS ALL " + " WHERE ALL( SELECT VALUE 1) " + ")") From 9973f849b9619bac2c61609613d9217bc56a87c5 Mon Sep 17 00:00:00 2001 From: Ezra Haleva Date: Fri, 18 Nov 2022 10:48:06 -0800 Subject: [PATCH 16/16] update baseline test --- .../AggregateSubquerySqlParserBaselineTests.All.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index 600af189e1..4df32ccb12 100644 --- 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 @@ -2,7 +2,7 @@ - + @@ -11,7 +11,7 @@ - + @@ -83,7 +83,7 @@ - +