浏览代码

Refactoring of the KQL grammar. (#115632) (#115644)

Aurélien FOUCRET 11 月之前
父节点
当前提交
18e933993d

+ 48 - 47
x-pack/plugin/kql/src/main/antlr/KqlBase.g4

@@ -26,70 +26,68 @@ topLevelQuery
     ;
 
 query
-    : query (AND | OR) query          #booleanQuery
-    | NOT subQuery=simpleQuery        #notQuery
-    | simpleQuery                     #defaultQuery
+    : <assoc=right> query operator=(AND | OR) query     #booleanQuery
+    | NOT subQuery=simpleQuery                          #notQuery
+    | simpleQuery                                       #defaultQuery
     ;
 
 simpleQuery
     : nestedQuery
-    | expression
     | parenthesizedQuery
-    ;
-
-expression
-    : fieldTermQuery
-    | fieldRangeQuery
+    | matchAllQuery
+    | existsQuery
+    | rangeQuery
+    | fieldQuery
+    | fieldLessQuery
     ;
 
 nestedQuery
     : fieldName COLON LEFT_CURLY_BRACKET query RIGHT_CURLY_BRACKET
     ;
 
-parenthesizedQuery:
-   LEFT_PARENTHESIS query RIGHT_PARENTHESIS;
-
-fieldRangeQuery
-    : fieldName operator=OP_COMPARE rangeQueryValue
+matchAllQuery
+    : (WILDCARD COLON)? WILDCARD
     ;
 
-fieldTermQuery
-    : (fieldName COLON)? termQueryValue
+parenthesizedQuery
+    : LEFT_PARENTHESIS query RIGHT_PARENTHESIS
     ;
 
-fieldName
-    : wildcardExpression
-    | unquotedLiteralExpression
-    | quotedStringExpression
+rangeQuery
+    : fieldName operator=(OP_LESS|OP_LESS_EQ|OP_MORE|OP_MORE_EQ) rangeQueryValue
     ;
 
 rangeQueryValue
-    : unquotedLiteralExpression
-    | quotedStringExpression
-    ;
-
-termQueryValue
-    : wildcardExpression
-    | quotedStringExpression
-    | termValue=unquotedLiteralExpression
-    | groupingTermExpression;
+    : (UNQUOTED_LITERAL|WILDCARD)+
+    | QUOTED_STRING
+   ;
 
-groupingTermExpression
-    : LEFT_PARENTHESIS unquotedLiteralExpression RIGHT_PARENTHESIS
+existsQuery
+    :fieldName COLON WILDCARD
     ;
 
-unquotedLiteralExpression
-    : UNQUOTED_LITERAL+
+fieldQuery
+    : fieldName COLON fieldQueryValue
+    | fieldName COLON LEFT_PARENTHESIS fieldQueryValue RIGHT_PARENTHESIS
     ;
 
-quotedStringExpression
-    : QUOTED_STRING
+fieldLessQuery
+    : fieldQueryValue
+    | LEFT_PARENTHESIS fieldQueryValue RIGHT_PARENTHESIS
     ;
 
-wildcardExpression
-    : WILDCARD
-;
+fieldQueryValue
+    : (AND|OR)? (UNQUOTED_LITERAL | WILDCARD )+
+    | (UNQUOTED_LITERAL | WILDCARD )+ (AND|OR)?
+    | (NOT|AND|OR)
+    | QUOTED_STRING
+    ;
 
+fieldName
+    : value=UNQUOTED_LITERAL+
+    | value=QUOTED_STRING
+    | value=WILDCARD
+    ;
 
 DEFAULT_SKIP: WHITESPACE -> skip;
 
@@ -98,31 +96,34 @@ OR: 'or';
 NOT: 'not';
 
 COLON: ':';
-OP_COMPARE: OP_LESS | OP_MORE | OP_LESS_EQ | OP_MORE_EQ;
+OP_LESS: '<';
+OP_LESS_EQ: '<=';
+OP_MORE: '>';
+OP_MORE_EQ: '>=';
 
 LEFT_PARENTHESIS: '(';
 RIGHT_PARENTHESIS: ')';
 LEFT_CURLY_BRACKET: '{';
 RIGHT_CURLY_BRACKET: '}';
 
-UNQUOTED_LITERAL: WILDCARD* UNQUOTED_LITERAL_CHAR+ WILDCARD*;
+UNQUOTED_LITERAL: UNQUOTED_LITERAL_CHAR+;
 
 QUOTED_STRING: '"'QUOTED_CHAR*'"';
 
-WILDCARD: WILDCARD_CHAR+;
+WILDCARD: WILDCARD_CHAR;
 
 fragment WILDCARD_CHAR: '*';
-fragment OP_LESS: '<';
-fragment OP_LESS_EQ: '<=';
-fragment OP_MORE: '>';
-fragment OP_MORE_EQ: '>=';
 
 fragment UNQUOTED_LITERAL_CHAR
+    : WILDCARD_CHAR* UNQUOTED_LITERAL_BASE_CHAR WILDCARD_CHAR*
+    | WILDCARD_CHAR WILDCARD_CHAR+
+    ;
+
+fragment UNQUOTED_LITERAL_BASE_CHAR
     : ESCAPED_WHITESPACE
     | ESCAPED_SPECIAL_CHAR
     | ESCAPE_UNICODE_SEQUENCE
     | '\\' (AND | OR | NOT)
-    | WILDCARD_CHAR UNQUOTED_LITERAL_CHAR
     | NON_SPECIAL_CHAR
     ;
 
@@ -135,7 +136,7 @@ fragment QUOTED_CHAR
 
 fragment WHITESPACE: [ \t\n\r\u3000];
 fragment ESCAPED_WHITESPACE: '\\r' | '\\t' | '\\n';
-fragment NON_SPECIAL_CHAR: ~[ \\():<>"*{}];
+fragment NON_SPECIAL_CHAR: ~[ \n\r\t\u3000\\():<>"*{}];
 fragment ESCAPED_SPECIAL_CHAR: '\\'[ \\():<>"*{}];
 
 fragment ESCAPED_QUOTE: '\\"';

+ 19 - 12
x-pack/plugin/kql/src/main/antlr/KqlBase.tokens

@@ -3,19 +3,26 @@ AND=2
 OR=3
 NOT=4
 COLON=5
-OP_COMPARE=6
-LEFT_PARENTHESIS=7
-RIGHT_PARENTHESIS=8
-LEFT_CURLY_BRACKET=9
-RIGHT_CURLY_BRACKET=10
-UNQUOTED_LITERAL=11
-QUOTED_STRING=12
-WILDCARD=13
+OP_LESS=6
+OP_LESS_EQ=7
+OP_MORE=8
+OP_MORE_EQ=9
+LEFT_PARENTHESIS=10
+RIGHT_PARENTHESIS=11
+LEFT_CURLY_BRACKET=12
+RIGHT_CURLY_BRACKET=13
+UNQUOTED_LITERAL=14
+QUOTED_STRING=15
+WILDCARD=16
 'and'=2
 'or'=3
 'not'=4
 ':'=5
-'('=7
-')'=8
-'{'=9
-'}'=10
+'<'=6
+'<='=7
+'>'=8
+'>='=9
+'('=10
+')'=11
+'{'=12
+'}'=13

+ 19 - 12
x-pack/plugin/kql/src/main/antlr/KqlBaseLexer.tokens

@@ -3,19 +3,26 @@ AND=2
 OR=3
 NOT=4
 COLON=5
-OP_COMPARE=6
-LEFT_PARENTHESIS=7
-RIGHT_PARENTHESIS=8
-LEFT_CURLY_BRACKET=9
-RIGHT_CURLY_BRACKET=10
-UNQUOTED_LITERAL=11
-QUOTED_STRING=12
-WILDCARD=13
+OP_LESS=6
+OP_LESS_EQ=7
+OP_MORE=8
+OP_MORE_EQ=9
+LEFT_PARENTHESIS=10
+RIGHT_PARENTHESIS=11
+LEFT_CURLY_BRACKET=12
+RIGHT_CURLY_BRACKET=13
+UNQUOTED_LITERAL=14
+QUOTED_STRING=15
+WILDCARD=16
 'and'=2
 'or'=3
 'not'=4
 ':'=5
-'('=7
-')'=8
-'{'=9
-'}'=10
+'<'=6
+'<='=7
+'>'=8
+'>='=9
+'('=10
+')'=11
+'{'=12
+'}'=13

文件差异内容过多而无法显示
+ 15 - 11
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBase.interp


+ 16 - 40
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseBaseListener.java

@@ -80,18 +80,6 @@ class KqlBaseBaseListener implements KqlBaseListener {
      * <p>The default implementation does nothing.</p>
      */
     @Override public void exitSimpleQuery(KqlBaseParser.SimpleQueryContext ctx) { }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation does nothing.</p>
-     */
-    @Override public void enterExpression(KqlBaseParser.ExpressionContext ctx) { }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation does nothing.</p>
-     */
-    @Override public void exitExpression(KqlBaseParser.ExpressionContext ctx) { }
     /**
      * {@inheritDoc}
      *
@@ -109,49 +97,37 @@ class KqlBaseBaseListener implements KqlBaseListener {
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation does nothing.</p>
-     */
-    @Override public void exitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation does nothing.</p>
-     */
-    @Override public void enterFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx) { }
+    @Override public void enterMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx) { }
+    @Override public void exitMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx) { }
+    @Override public void enterParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx) { }
+    @Override public void exitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterFieldName(KqlBaseParser.FieldNameContext ctx) { }
+    @Override public void enterRangeQuery(KqlBaseParser.RangeQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitFieldName(KqlBaseParser.FieldNameContext ctx) { }
+    @Override public void exitRangeQuery(KqlBaseParser.RangeQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
@@ -169,61 +145,61 @@ class KqlBaseBaseListener implements KqlBaseListener {
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterTermQueryValue(KqlBaseParser.TermQueryValueContext ctx) { }
+    @Override public void enterExistsQuery(KqlBaseParser.ExistsQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitTermQueryValue(KqlBaseParser.TermQueryValueContext ctx) { }
+    @Override public void exitExistsQuery(KqlBaseParser.ExistsQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx) { }
+    @Override public void enterFieldQuery(KqlBaseParser.FieldQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx) { }
+    @Override public void exitFieldQuery(KqlBaseParser.FieldQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx) { }
+    @Override public void enterFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx) { }
+    @Override public void exitFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx) { }
+    @Override public void enterFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx) { }
+    @Override public void exitFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void enterWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx) { }
+    @Override public void enterFieldName(KqlBaseParser.FieldNameContext ctx) { }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation does nothing.</p>
      */
-    @Override public void exitWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx) { }
+    @Override public void exitFieldName(KqlBaseParser.FieldNameContext ctx) { }
 
     /**
      * {@inheritDoc}

+ 8 - 22
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseBaseVisitor.java

@@ -55,13 +55,6 @@ class KqlBaseBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements KqlBa
      * {@link #visitChildren} on {@code ctx}.</p>
      */
     @Override public T visitSimpleQuery(KqlBaseParser.SimpleQueryContext ctx) { return visitChildren(ctx); }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation returns the result of calling
-     * {@link #visitChildren} on {@code ctx}.</p>
-     */
-    @Override public T visitExpression(KqlBaseParser.ExpressionContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
@@ -75,28 +68,21 @@ class KqlBaseBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements KqlBa
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { return visitChildren(ctx); }
-    /**
-     * {@inheritDoc}
-     *
-     * <p>The default implementation returns the result of calling
-     * {@link #visitChildren} on {@code ctx}.</p>
-     */
-    @Override public T visitFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx) { return visitChildren(ctx); }
+    @Override public T visitMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx) { return visitChildren(ctx); }
+    @Override public T visitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitFieldName(KqlBaseParser.FieldNameContext ctx) { return visitChildren(ctx); }
+    @Override public T visitRangeQuery(KqlBaseParser.RangeQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
@@ -110,33 +96,33 @@ class KqlBaseBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements KqlBa
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitTermQueryValue(KqlBaseParser.TermQueryValueContext ctx) { return visitChildren(ctx); }
+    @Override public T visitExistsQuery(KqlBaseParser.ExistsQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx) { return visitChildren(ctx); }
+    @Override public T visitFieldQuery(KqlBaseParser.FieldQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx) { return visitChildren(ctx); }
+    @Override public T visitFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx) { return visitChildren(ctx); }
+    @Override public T visitFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx) { return visitChildren(ctx); }
     /**
      * {@inheritDoc}
      *
      * <p>The default implementation returns the result of calling
      * {@link #visitChildren} on {@code ctx}.</p>
      */
-    @Override public T visitWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx) { return visitChildren(ctx); }
+    @Override public T visitFieldName(KqlBaseParser.FieldNameContext ctx) { return visitChildren(ctx); }
 }

文件差异内容过多而无法显示
+ 13 - 7
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseLexer.interp


+ 128 - 127
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseLexer.java

@@ -25,9 +25,9 @@ class KqlBaseLexer extends Lexer {
     protected static final PredictionContextCache _sharedContextCache =
         new PredictionContextCache();
     public static final int
-        DEFAULT_SKIP=1, AND=2, OR=3, NOT=4, COLON=5, OP_COMPARE=6, LEFT_PARENTHESIS=7, 
-        RIGHT_PARENTHESIS=8, LEFT_CURLY_BRACKET=9, RIGHT_CURLY_BRACKET=10, UNQUOTED_LITERAL=11, 
-        QUOTED_STRING=12, WILDCARD=13;
+        DEFAULT_SKIP=1, AND=2, OR=3, NOT=4, COLON=5, OP_LESS=6, OP_LESS_EQ=7, 
+        OP_MORE=8, OP_MORE_EQ=9, LEFT_PARENTHESIS=10, RIGHT_PARENTHESIS=11, LEFT_CURLY_BRACKET=12, 
+        RIGHT_CURLY_BRACKET=13, UNQUOTED_LITERAL=14, QUOTED_STRING=15, WILDCARD=16;
     public static String[] channelNames = {
         "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
     };
@@ -38,28 +38,29 @@ class KqlBaseLexer extends Lexer {
 
     private static String[] makeRuleNames() {
         return new String[] {
-            "DEFAULT_SKIP", "AND", "OR", "NOT", "COLON", "OP_COMPARE", "LEFT_PARENTHESIS", 
-            "RIGHT_PARENTHESIS", "LEFT_CURLY_BRACKET", "RIGHT_CURLY_BRACKET", "UNQUOTED_LITERAL", 
-            "QUOTED_STRING", "WILDCARD", "WILDCARD_CHAR", "OP_LESS", "OP_LESS_EQ", 
-            "OP_MORE", "OP_MORE_EQ", "UNQUOTED_LITERAL_CHAR", "QUOTED_CHAR", "WHITESPACE", 
-            "ESCAPED_WHITESPACE", "NON_SPECIAL_CHAR", "ESCAPED_SPECIAL_CHAR", "ESCAPED_QUOTE", 
-            "ESCAPE_UNICODE_SEQUENCE", "UNICODE_SEQUENCE", "HEX_DIGIT"
+            "DEFAULT_SKIP", "AND", "OR", "NOT", "COLON", "OP_LESS", "OP_LESS_EQ", 
+            "OP_MORE", "OP_MORE_EQ", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "LEFT_CURLY_BRACKET", 
+            "RIGHT_CURLY_BRACKET", "UNQUOTED_LITERAL", "QUOTED_STRING", "WILDCARD", 
+            "WILDCARD_CHAR", "UNQUOTED_LITERAL_CHAR", "UNQUOTED_LITERAL_BASE_CHAR", 
+            "QUOTED_CHAR", "WHITESPACE", "ESCAPED_WHITESPACE", "NON_SPECIAL_CHAR", 
+            "ESCAPED_SPECIAL_CHAR", "ESCAPED_QUOTE", "ESCAPE_UNICODE_SEQUENCE", "UNICODE_SEQUENCE", 
+            "HEX_DIGIT"
         };
     }
     public static final String[] ruleNames = makeRuleNames();
 
     private static String[] makeLiteralNames() {
         return new String[] {
-            null, null, "'and'", "'or'", "'not'", "':'", null, "'('", "')'", "'{'", 
-            "'}'"
+            null, null, "'and'", "'or'", "'not'", "':'", "'<'", "'<='", "'>'", "'>='", 
+            "'('", "')'", "'{'", "'}'"
         };
     }
     private static final String[] _LITERAL_NAMES = makeLiteralNames();
     private static String[] makeSymbolicNames() {
         return new String[] {
-            null, "DEFAULT_SKIP", "AND", "OR", "NOT", "COLON", "OP_COMPARE", "LEFT_PARENTHESIS", 
-            "RIGHT_PARENTHESIS", "LEFT_CURLY_BRACKET", "RIGHT_CURLY_BRACKET", "UNQUOTED_LITERAL", 
-            "QUOTED_STRING", "WILDCARD"
+            null, "DEFAULT_SKIP", "AND", "OR", "NOT", "COLON", "OP_LESS", "OP_LESS_EQ", 
+            "OP_MORE", "OP_MORE_EQ", "LEFT_PARENTHESIS", "RIGHT_PARENTHESIS", "LEFT_CURLY_BRACKET", 
+            "RIGHT_CURLY_BRACKET", "UNQUOTED_LITERAL", "QUOTED_STRING", "WILDCARD"
         };
     }
     private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -121,119 +122,119 @@ class KqlBaseLexer extends Lexer {
     public ATN getATN() { return _ATN; }
 
     public static final String _serializedATN =
-        "\u0004\u0000\r\u00b5\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+
-        "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+
-        "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+
-        "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+
-        "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+
-        "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+
-        "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+
-        "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+
-        "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+
-        "\u001b\u0007\u001b\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+
-        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+
-        "\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+
-        "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005O\b"+
-        "\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b"+
-        "\u0001\t\u0001\t\u0001\n\u0005\nZ\b\n\n\n\f\n]\t\n\u0001\n\u0004\n`\b"+
-        "\n\u000b\n\f\na\u0001\n\u0005\ne\b\n\n\n\f\nh\t\n\u0001\u000b\u0001\u000b"+
-        "\u0005\u000bl\b\u000b\n\u000b\f\u000bo\t\u000b\u0001\u000b\u0001\u000b"+
-        "\u0001\f\u0004\ft\b\f\u000b\f\f\fu\u0001\r\u0001\r\u0001\u000e\u0001\u000e"+
-        "\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011"+
-        "\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012"+
-        "\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u008b\b\u0012\u0001\u0012"+
-        "\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u0091\b\u0012\u0001\u0013"+
-        "\u0001\u0013\u0001\u0013\u0001\u0013\u0003\u0013\u0097\b\u0013\u0001\u0014"+
-        "\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015"+
-        "\u0001\u0015\u0003\u0015\u00a1\b\u0015\u0001\u0016\u0001\u0016\u0001\u0017"+
-        "\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0019"+
-        "\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a"+
-        "\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0000\u0000\u001c\u0001"+
-        "\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007"+
-        "\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u0000\u001d"+
-        "\u0000\u001f\u0000!\u0000#\u0000%\u0000\'\u0000)\u0000+\u0000-\u0000/"+
-        "\u00001\u00003\u00005\u00007\u0000\u0001\u0000\u000b\u0002\u0000AAaa\u0002"+
-        "\u0000NNnn\u0002\u0000DDdd\u0002\u0000OOoo\u0002\u0000RRrr\u0002\u0000"+
-        "TTtt\u0001\u0000\"\"\u0004\u0000\t\n\r\r  \u3000\u3000\t\u0000  \"\"("+
-        "*::<<>>\\\\{{}}\u0002\u0000UUuu\u0003\u000009AFaf\u00b9\u0000\u0001\u0001"+
-        "\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001"+
-        "\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000"+
-        "\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000"+
-        "\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000"+
-        "\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000"+
-        "\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000"+
-        "\u0000\u00019\u0001\u0000\u0000\u0000\u0003=\u0001\u0000\u0000\u0000\u0005"+
-        "A\u0001\u0000\u0000\u0000\u0007D\u0001\u0000\u0000\u0000\tH\u0001\u0000"+
-        "\u0000\u0000\u000bN\u0001\u0000\u0000\u0000\rP\u0001\u0000\u0000\u0000"+
-        "\u000fR\u0001\u0000\u0000\u0000\u0011T\u0001\u0000\u0000\u0000\u0013V"+
-        "\u0001\u0000\u0000\u0000\u0015[\u0001\u0000\u0000\u0000\u0017i\u0001\u0000"+
-        "\u0000\u0000\u0019s\u0001\u0000\u0000\u0000\u001bw\u0001\u0000\u0000\u0000"+
-        "\u001dy\u0001\u0000\u0000\u0000\u001f{\u0001\u0000\u0000\u0000!~\u0001"+
-        "\u0000\u0000\u0000#\u0080\u0001\u0000\u0000\u0000%\u0090\u0001\u0000\u0000"+
-        "\u0000\'\u0096\u0001\u0000\u0000\u0000)\u0098\u0001\u0000\u0000\u0000"+
-        "+\u00a0\u0001\u0000\u0000\u0000-\u00a2\u0001\u0000\u0000\u0000/\u00a4"+
-        "\u0001\u0000\u0000\u00001\u00a7\u0001\u0000\u0000\u00003\u00aa\u0001\u0000"+
-        "\u0000\u00005\u00ad\u0001\u0000\u0000\u00007\u00b3\u0001\u0000\u0000\u0000"+
-        "9:\u0003)\u0014\u0000:;\u0001\u0000\u0000\u0000;<\u0006\u0000\u0000\u0000"+
-        "<\u0002\u0001\u0000\u0000\u0000=>\u0007\u0000\u0000\u0000>?\u0007\u0001"+
-        "\u0000\u0000?@\u0007\u0002\u0000\u0000@\u0004\u0001\u0000\u0000\u0000"+
-        "AB\u0007\u0003\u0000\u0000BC\u0007\u0004\u0000\u0000C\u0006\u0001\u0000"+
-        "\u0000\u0000DE\u0007\u0001\u0000\u0000EF\u0007\u0003\u0000\u0000FG\u0007"+
-        "\u0005\u0000\u0000G\b\u0001\u0000\u0000\u0000HI\u0005:\u0000\u0000I\n"+
-        "\u0001\u0000\u0000\u0000JO\u0003\u001d\u000e\u0000KO\u0003!\u0010\u0000"+
-        "LO\u0003\u001f\u000f\u0000MO\u0003#\u0011\u0000NJ\u0001\u0000\u0000\u0000"+
-        "NK\u0001\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000NM\u0001\u0000\u0000"+
-        "\u0000O\f\u0001\u0000\u0000\u0000PQ\u0005(\u0000\u0000Q\u000e\u0001\u0000"+
-        "\u0000\u0000RS\u0005)\u0000\u0000S\u0010\u0001\u0000\u0000\u0000TU\u0005"+
-        "{\u0000\u0000U\u0012\u0001\u0000\u0000\u0000VW\u0005}\u0000\u0000W\u0014"+
-        "\u0001\u0000\u0000\u0000XZ\u0003\u0019\f\u0000YX\u0001\u0000\u0000\u0000"+
-        "Z]\u0001\u0000\u0000\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+
-        "\u0000\\_\u0001\u0000\u0000\u0000][\u0001\u0000\u0000\u0000^`\u0003%\u0012"+
-        "\u0000_^\u0001\u0000\u0000\u0000`a\u0001\u0000\u0000\u0000a_\u0001\u0000"+
-        "\u0000\u0000ab\u0001\u0000\u0000\u0000bf\u0001\u0000\u0000\u0000ce\u0003"+
-        "\u0019\f\u0000dc\u0001\u0000\u0000\u0000eh\u0001\u0000\u0000\u0000fd\u0001"+
-        "\u0000\u0000\u0000fg\u0001\u0000\u0000\u0000g\u0016\u0001\u0000\u0000"+
-        "\u0000hf\u0001\u0000\u0000\u0000im\u0005\"\u0000\u0000jl\u0003\'\u0013"+
-        "\u0000kj\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000mk\u0001\u0000"+
-        "\u0000\u0000mn\u0001\u0000\u0000\u0000np\u0001\u0000\u0000\u0000om\u0001"+
-        "\u0000\u0000\u0000pq\u0005\"\u0000\u0000q\u0018\u0001\u0000\u0000\u0000"+
-        "rt\u0003\u001b\r\u0000sr\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000"+
-        "us\u0001\u0000\u0000\u0000uv\u0001\u0000\u0000\u0000v\u001a\u0001\u0000"+
-        "\u0000\u0000wx\u0005*\u0000\u0000x\u001c\u0001\u0000\u0000\u0000yz\u0005"+
-        "<\u0000\u0000z\u001e\u0001\u0000\u0000\u0000{|\u0005<\u0000\u0000|}\u0005"+
-        "=\u0000\u0000} \u0001\u0000\u0000\u0000~\u007f\u0005>\u0000\u0000\u007f"+
-        "\"\u0001\u0000\u0000\u0000\u0080\u0081\u0005>\u0000\u0000\u0081\u0082"+
-        "\u0005=\u0000\u0000\u0082$\u0001\u0000\u0000\u0000\u0083\u0091\u0003+"+
-        "\u0015\u0000\u0084\u0091\u0003/\u0017\u0000\u0085\u0091\u00033\u0019\u0000"+
-        "\u0086\u008a\u0005\\\u0000\u0000\u0087\u008b\u0003\u0003\u0001\u0000\u0088"+
-        "\u008b\u0003\u0005\u0002\u0000\u0089\u008b\u0003\u0007\u0003\u0000\u008a"+
-        "\u0087\u0001\u0000\u0000\u0000\u008a\u0088\u0001\u0000\u0000\u0000\u008a"+
-        "\u0089\u0001\u0000\u0000\u0000\u008b\u0091\u0001\u0000\u0000\u0000\u008c"+
-        "\u008d\u0003\u001b\r\u0000\u008d\u008e\u0003%\u0012\u0000\u008e\u0091"+
-        "\u0001\u0000\u0000\u0000\u008f\u0091\u0003-\u0016\u0000\u0090\u0083\u0001"+
-        "\u0000\u0000\u0000\u0090\u0084\u0001\u0000\u0000\u0000\u0090\u0085\u0001"+
-        "\u0000\u0000\u0000\u0090\u0086\u0001\u0000\u0000\u0000\u0090\u008c\u0001"+
-        "\u0000\u0000\u0000\u0090\u008f\u0001\u0000\u0000\u0000\u0091&\u0001\u0000"+
-        "\u0000\u0000\u0092\u0097\u0003+\u0015\u0000\u0093\u0097\u00033\u0019\u0000"+
-        "\u0094\u0097\u00031\u0018\u0000\u0095\u0097\b\u0006\u0000\u0000\u0096"+
-        "\u0092\u0001\u0000\u0000\u0000\u0096\u0093\u0001\u0000\u0000\u0000\u0096"+
-        "\u0094\u0001\u0000\u0000\u0000\u0096\u0095\u0001\u0000\u0000\u0000\u0097"+
-        "(\u0001\u0000\u0000\u0000\u0098\u0099\u0007\u0007\u0000\u0000\u0099*\u0001"+
-        "\u0000\u0000\u0000\u009a\u009b\u0005\\\u0000\u0000\u009b\u00a1\u0007\u0004"+
-        "\u0000\u0000\u009c\u009d\u0005\\\u0000\u0000\u009d\u00a1\u0007\u0005\u0000"+
-        "\u0000\u009e\u009f\u0005\\\u0000\u0000\u009f\u00a1\u0007\u0001\u0000\u0000"+
-        "\u00a0\u009a\u0001\u0000\u0000\u0000\u00a0\u009c\u0001\u0000\u0000\u0000"+
-        "\u00a0\u009e\u0001\u0000\u0000\u0000\u00a1,\u0001\u0000\u0000\u0000\u00a2"+
-        "\u00a3\b\b\u0000\u0000\u00a3.\u0001\u0000\u0000\u0000\u00a4\u00a5\u0005"+
-        "\\\u0000\u0000\u00a5\u00a6\u0007\b\u0000\u0000\u00a60\u0001\u0000\u0000"+
-        "\u0000\u00a7\u00a8\u0005\\\u0000\u0000\u00a8\u00a9\u0005\"\u0000\u0000"+
-        "\u00a92\u0001\u0000\u0000\u0000\u00aa\u00ab\u0005\\\u0000\u0000\u00ab"+
-        "\u00ac\u00035\u001a\u0000\u00ac4\u0001\u0000\u0000\u0000\u00ad\u00ae\u0007"+
-        "\t\u0000\u0000\u00ae\u00af\u00037\u001b\u0000\u00af\u00b0\u00037\u001b"+
-        "\u0000\u00b0\u00b1\u00037\u001b\u0000\u00b1\u00b2\u00037\u001b\u0000\u00b2"+
-        "6\u0001\u0000\u0000\u0000\u00b3\u00b4\u0007\n\u0000\u0000\u00b48\u0001"+
-        "\u0000\u0000\u0000\u000b\u0000N[afmu\u008a\u0090\u0096\u00a0\u0001\u0006"+
-        "\u0000\u0000";
+        "\u0004\u0000\u0010\u00b2\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+
+        "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+
+        "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+
+        "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+
+        "\u000b\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e"+
+        "\u0002\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011"+
+        "\u0002\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014"+
+        "\u0002\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017"+
+        "\u0002\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a"+
+        "\u0002\u001b\u0007\u001b\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+
+        "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+
+        "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0004"+
+        "\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+
+        "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+
+        "\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0004\r^\b"+
+        "\r\u000b\r\f\r_\u0001\u000e\u0001\u000e\u0005\u000ed\b\u000e\n\u000e\f"+
+        "\u000eg\t\u000e\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+
+        "\u0010\u0001\u0010\u0001\u0011\u0005\u0011p\b\u0011\n\u0011\f\u0011s\t"+
+        "\u0011\u0001\u0011\u0001\u0011\u0005\u0011w\b\u0011\n\u0011\f\u0011z\t"+
+        "\u0011\u0001\u0011\u0001\u0011\u0004\u0011~\b\u0011\u000b\u0011\f\u0011"+
+        "\u007f\u0003\u0011\u0082\b\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+
+        "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0003\u0012\u008b\b\u0012\u0001"+
+        "\u0012\u0003\u0012\u008e\b\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+
+        "\u0013\u0003\u0013\u0094\b\u0013\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+
+        "\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0003\u0015\u009e"+
+        "\b\u0015\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+
+        "\u0018\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+
+        "\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001a\u0001"+
+        "\u001b\u0001\u001b\u0000\u0000\u001c\u0001\u0001\u0003\u0002\u0005\u0003"+
+        "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+
+        "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0000#\u0000"+
+        "%\u0000\'\u0000)\u0000+\u0000-\u0000/\u00001\u00003\u00005\u00007\u0000"+
+        "\u0001\u0000\f\u0002\u0000AAaa\u0002\u0000NNnn\u0002\u0000DDdd\u0002\u0000"+
+        "OOoo\u0002\u0000RRrr\u0002\u0000TTtt\u0001\u0000\"\"\u0004\u0000\t\n\r"+
+        "\r  \u3000\u3000\f\u0000\t\n\r\r  \"\"(*::<<>>\\\\{{}}\u3000\u3000\t\u0000"+
+        "  \"\"(*::<<>>\\\\{{}}\u0002\u0000UUuu\u0003\u000009AFaf\u00b6\u0000\u0001"+
+        "\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+
+        "\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+
+        "\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+
+        "\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+
+        "\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+
+        "\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+
+        "\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000"+
+        "\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u00019\u0001\u0000\u0000"+
+        "\u0000\u0003=\u0001\u0000\u0000\u0000\u0005A\u0001\u0000\u0000\u0000\u0007"+
+        "D\u0001\u0000\u0000\u0000\tH\u0001\u0000\u0000\u0000\u000bJ\u0001\u0000"+
+        "\u0000\u0000\rL\u0001\u0000\u0000\u0000\u000fO\u0001\u0000\u0000\u0000"+
+        "\u0011Q\u0001\u0000\u0000\u0000\u0013T\u0001\u0000\u0000\u0000\u0015V"+
+        "\u0001\u0000\u0000\u0000\u0017X\u0001\u0000\u0000\u0000\u0019Z\u0001\u0000"+
+        "\u0000\u0000\u001b]\u0001\u0000\u0000\u0000\u001da\u0001\u0000\u0000\u0000"+
+        "\u001fj\u0001\u0000\u0000\u0000!l\u0001\u0000\u0000\u0000#\u0081\u0001"+
+        "\u0000\u0000\u0000%\u008d\u0001\u0000\u0000\u0000\'\u0093\u0001\u0000"+
+        "\u0000\u0000)\u0095\u0001\u0000\u0000\u0000+\u009d\u0001\u0000\u0000\u0000"+
+        "-\u009f\u0001\u0000\u0000\u0000/\u00a1\u0001\u0000\u0000\u00001\u00a4"+
+        "\u0001\u0000\u0000\u00003\u00a7\u0001\u0000\u0000\u00005\u00aa\u0001\u0000"+
+        "\u0000\u00007\u00b0\u0001\u0000\u0000\u00009:\u0003)\u0014\u0000:;\u0001"+
+        "\u0000\u0000\u0000;<\u0006\u0000\u0000\u0000<\u0002\u0001\u0000\u0000"+
+        "\u0000=>\u0007\u0000\u0000\u0000>?\u0007\u0001\u0000\u0000?@\u0007\u0002"+
+        "\u0000\u0000@\u0004\u0001\u0000\u0000\u0000AB\u0007\u0003\u0000\u0000"+
+        "BC\u0007\u0004\u0000\u0000C\u0006\u0001\u0000\u0000\u0000DE\u0007\u0001"+
+        "\u0000\u0000EF\u0007\u0003\u0000\u0000FG\u0007\u0005\u0000\u0000G\b\u0001"+
+        "\u0000\u0000\u0000HI\u0005:\u0000\u0000I\n\u0001\u0000\u0000\u0000JK\u0005"+
+        "<\u0000\u0000K\f\u0001\u0000\u0000\u0000LM\u0005<\u0000\u0000MN\u0005"+
+        "=\u0000\u0000N\u000e\u0001\u0000\u0000\u0000OP\u0005>\u0000\u0000P\u0010"+
+        "\u0001\u0000\u0000\u0000QR\u0005>\u0000\u0000RS\u0005=\u0000\u0000S\u0012"+
+        "\u0001\u0000\u0000\u0000TU\u0005(\u0000\u0000U\u0014\u0001\u0000\u0000"+
+        "\u0000VW\u0005)\u0000\u0000W\u0016\u0001\u0000\u0000\u0000XY\u0005{\u0000"+
+        "\u0000Y\u0018\u0001\u0000\u0000\u0000Z[\u0005}\u0000\u0000[\u001a\u0001"+
+        "\u0000\u0000\u0000\\^\u0003#\u0011\u0000]\\\u0001\u0000\u0000\u0000^_"+
+        "\u0001\u0000\u0000\u0000_]\u0001\u0000\u0000\u0000_`\u0001\u0000\u0000"+
+        "\u0000`\u001c\u0001\u0000\u0000\u0000ae\u0005\"\u0000\u0000bd\u0003\'"+
+        "\u0013\u0000cb\u0001\u0000\u0000\u0000dg\u0001\u0000\u0000\u0000ec\u0001"+
+        "\u0000\u0000\u0000ef\u0001\u0000\u0000\u0000fh\u0001\u0000\u0000\u0000"+
+        "ge\u0001\u0000\u0000\u0000hi\u0005\"\u0000\u0000i\u001e\u0001\u0000\u0000"+
+        "\u0000jk\u0003!\u0010\u0000k \u0001\u0000\u0000\u0000lm\u0005*\u0000\u0000"+
+        "m\"\u0001\u0000\u0000\u0000np\u0003!\u0010\u0000on\u0001\u0000\u0000\u0000"+
+        "ps\u0001\u0000\u0000\u0000qo\u0001\u0000\u0000\u0000qr\u0001\u0000\u0000"+
+        "\u0000rt\u0001\u0000\u0000\u0000sq\u0001\u0000\u0000\u0000tx\u0003%\u0012"+
+        "\u0000uw\u0003!\u0010\u0000vu\u0001\u0000\u0000\u0000wz\u0001\u0000\u0000"+
+        "\u0000xv\u0001\u0000\u0000\u0000xy\u0001\u0000\u0000\u0000y\u0082\u0001"+
+        "\u0000\u0000\u0000zx\u0001\u0000\u0000\u0000{}\u0003!\u0010\u0000|~\u0003"+
+        "!\u0010\u0000}|\u0001\u0000\u0000\u0000~\u007f\u0001\u0000\u0000\u0000"+
+        "\u007f}\u0001\u0000\u0000\u0000\u007f\u0080\u0001\u0000\u0000\u0000\u0080"+
+        "\u0082\u0001\u0000\u0000\u0000\u0081q\u0001\u0000\u0000\u0000\u0081{\u0001"+
+        "\u0000\u0000\u0000\u0082$\u0001\u0000\u0000\u0000\u0083\u008e\u0003+\u0015"+
+        "\u0000\u0084\u008e\u0003/\u0017\u0000\u0085\u008e\u00033\u0019\u0000\u0086"+
+        "\u008a\u0005\\\u0000\u0000\u0087\u008b\u0003\u0003\u0001\u0000\u0088\u008b"+
+        "\u0003\u0005\u0002\u0000\u0089\u008b\u0003\u0007\u0003\u0000\u008a\u0087"+
+        "\u0001\u0000\u0000\u0000\u008a\u0088\u0001\u0000\u0000\u0000\u008a\u0089"+
+        "\u0001\u0000\u0000\u0000\u008b\u008e\u0001\u0000\u0000\u0000\u008c\u008e"+
+        "\u0003-\u0016\u0000\u008d\u0083\u0001\u0000\u0000\u0000\u008d\u0084\u0001"+
+        "\u0000\u0000\u0000\u008d\u0085\u0001\u0000\u0000\u0000\u008d\u0086\u0001"+
+        "\u0000\u0000\u0000\u008d\u008c\u0001\u0000\u0000\u0000\u008e&\u0001\u0000"+
+        "\u0000\u0000\u008f\u0094\u0003+\u0015\u0000\u0090\u0094\u00033\u0019\u0000"+
+        "\u0091\u0094\u00031\u0018\u0000\u0092\u0094\b\u0006\u0000\u0000\u0093"+
+        "\u008f\u0001\u0000\u0000\u0000\u0093\u0090\u0001\u0000\u0000\u0000\u0093"+
+        "\u0091\u0001\u0000\u0000\u0000\u0093\u0092\u0001\u0000\u0000\u0000\u0094"+
+        "(\u0001\u0000\u0000\u0000\u0095\u0096\u0007\u0007\u0000\u0000\u0096*\u0001"+
+        "\u0000\u0000\u0000\u0097\u0098\u0005\\\u0000\u0000\u0098\u009e\u0007\u0004"+
+        "\u0000\u0000\u0099\u009a\u0005\\\u0000\u0000\u009a\u009e\u0007\u0005\u0000"+
+        "\u0000\u009b\u009c\u0005\\\u0000\u0000\u009c\u009e\u0007\u0001\u0000\u0000"+
+        "\u009d\u0097\u0001\u0000\u0000\u0000\u009d\u0099\u0001\u0000\u0000\u0000"+
+        "\u009d\u009b\u0001\u0000\u0000\u0000\u009e,\u0001\u0000\u0000\u0000\u009f"+
+        "\u00a0\b\b\u0000\u0000\u00a0.\u0001\u0000\u0000\u0000\u00a1\u00a2\u0005"+
+        "\\\u0000\u0000\u00a2\u00a3\u0007\t\u0000\u0000\u00a30\u0001\u0000\u0000"+
+        "\u0000\u00a4\u00a5\u0005\\\u0000\u0000\u00a5\u00a6\u0005\"\u0000\u0000"+
+        "\u00a62\u0001\u0000\u0000\u0000\u00a7\u00a8\u0005\\\u0000\u0000\u00a8"+
+        "\u00a9\u00035\u001a\u0000\u00a94\u0001\u0000\u0000\u0000\u00aa\u00ab\u0007"+
+        "\n\u0000\u0000\u00ab\u00ac\u00037\u001b\u0000\u00ac\u00ad\u00037\u001b"+
+        "\u0000\u00ad\u00ae\u00037\u001b\u0000\u00ae\u00af\u00037\u001b\u0000\u00af"+
+        "6\u0001\u0000\u0000\u0000\u00b0\u00b1\u0007\u000b\u0000\u0000\u00b18\u0001"+
+        "\u0000\u0000\u0000\u000b\u0000_eqx\u007f\u0081\u008a\u008d\u0093\u009d"+
+        "\u0001\u0006\u0000\u0000";
     public static final ATN _ATN =
         new ATNDeserializer().deserialize(_serializedATN.toCharArray());
     static {

+ 32 - 52
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseListener.java

@@ -71,16 +71,6 @@ interface KqlBaseListener extends ParseTreeListener {
      * @param ctx the parse tree
      */
     void exitSimpleQuery(KqlBaseParser.SimpleQueryContext ctx);
-    /**
-     * Enter a parse tree produced by {@link KqlBaseParser#expression}.
-     * @param ctx the parse tree
-     */
-    void enterExpression(KqlBaseParser.ExpressionContext ctx);
-    /**
-     * Exit a parse tree produced by {@link KqlBaseParser#expression}.
-     * @param ctx the parse tree
-     */
-    void exitExpression(KqlBaseParser.ExpressionContext ctx);
     /**
      * Enter a parse tree produced by {@link KqlBaseParser#nestedQuery}.
      * @param ctx the parse tree
@@ -92,45 +82,35 @@ interface KqlBaseListener extends ParseTreeListener {
      */
     void exitNestedQuery(KqlBaseParser.NestedQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
-     * @param ctx the parse tree
-     */
-    void enterParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
-    /**
-     * Exit a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
-     * @param ctx the parse tree
-     */
-    void exitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
-    /**
-     * Enter a parse tree produced by {@link KqlBaseParser#fieldRangeQuery}.
+     * Enter a parse tree produced by {@link KqlBaseParser#matchAllQuery}.
      * @param ctx the parse tree
      */
-    void enterFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx);
+    void enterMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#fieldRangeQuery}.
+     * Exit a parse tree produced by {@link KqlBaseParser#matchAllQuery}.
      * @param ctx the parse tree
      */
-    void exitFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx);
+    void exitMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#fieldTermQuery}.
+     * Enter a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
      * @param ctx the parse tree
      */
-    void enterFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx);
+    void enterParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#fieldTermQuery}.
+     * Exit a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
      * @param ctx the parse tree
      */
-    void exitFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx);
+    void exitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#fieldName}.
+     * Enter a parse tree produced by {@link KqlBaseParser#rangeQuery}.
      * @param ctx the parse tree
      */
-    void enterFieldName(KqlBaseParser.FieldNameContext ctx);
+    void enterRangeQuery(KqlBaseParser.RangeQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#fieldName}.
+     * Exit a parse tree produced by {@link KqlBaseParser#rangeQuery}.
      * @param ctx the parse tree
      */
-    void exitFieldName(KqlBaseParser.FieldNameContext ctx);
+    void exitRangeQuery(KqlBaseParser.RangeQueryContext ctx);
     /**
      * Enter a parse tree produced by {@link KqlBaseParser#rangeQueryValue}.
      * @param ctx the parse tree
@@ -142,53 +122,53 @@ interface KqlBaseListener extends ParseTreeListener {
      */
     void exitRangeQueryValue(KqlBaseParser.RangeQueryValueContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#termQueryValue}.
+     * Enter a parse tree produced by {@link KqlBaseParser#existsQuery}.
      * @param ctx the parse tree
      */
-    void enterTermQueryValue(KqlBaseParser.TermQueryValueContext ctx);
+    void enterExistsQuery(KqlBaseParser.ExistsQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#termQueryValue}.
+     * Exit a parse tree produced by {@link KqlBaseParser#existsQuery}.
      * @param ctx the parse tree
      */
-    void exitTermQueryValue(KqlBaseParser.TermQueryValueContext ctx);
+    void exitExistsQuery(KqlBaseParser.ExistsQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#groupingTermExpression}.
+     * Enter a parse tree produced by {@link KqlBaseParser#fieldQuery}.
      * @param ctx the parse tree
      */
-    void enterGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx);
+    void enterFieldQuery(KqlBaseParser.FieldQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#groupingTermExpression}.
+     * Exit a parse tree produced by {@link KqlBaseParser#fieldQuery}.
      * @param ctx the parse tree
      */
-    void exitGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx);
+    void exitFieldQuery(KqlBaseParser.FieldQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#unquotedLiteralExpression}.
+     * Enter a parse tree produced by {@link KqlBaseParser#fieldLessQuery}.
      * @param ctx the parse tree
      */
-    void enterUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx);
+    void enterFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#unquotedLiteralExpression}.
+     * Exit a parse tree produced by {@link KqlBaseParser#fieldLessQuery}.
      * @param ctx the parse tree
      */
-    void exitUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx);
+    void exitFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#quotedStringExpression}.
+     * Enter a parse tree produced by {@link KqlBaseParser#fieldQueryValue}.
      * @param ctx the parse tree
      */
-    void enterQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx);
+    void enterFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#quotedStringExpression}.
+     * Exit a parse tree produced by {@link KqlBaseParser#fieldQueryValue}.
      * @param ctx the parse tree
      */
-    void exitQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx);
+    void exitFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx);
     /**
-     * Enter a parse tree produced by {@link KqlBaseParser#wildcardExpression}.
+     * Enter a parse tree produced by {@link KqlBaseParser#fieldName}.
      * @param ctx the parse tree
      */
-    void enterWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx);
+    void enterFieldName(KqlBaseParser.FieldNameContext ctx);
     /**
-     * Exit a parse tree produced by {@link KqlBaseParser#wildcardExpression}.
+     * Exit a parse tree produced by {@link KqlBaseParser#fieldName}.
      * @param ctx the parse tree
      */
-    void exitWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx);
+    void exitFieldName(KqlBaseParser.FieldNameContext ctx);
 }

文件差异内容过多而无法显示
+ 442 - 321
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseParser.java


+ 16 - 28
x-pack/plugin/kql/src/main/java/org/elasticsearch/xpack/kql/parser/KqlBaseVisitor.java

@@ -51,12 +51,6 @@ interface KqlBaseVisitor<T> extends ParseTreeVisitor<T> {
      * @return the visitor result
      */
     T visitSimpleQuery(KqlBaseParser.SimpleQueryContext ctx);
-    /**
-     * Visit a parse tree produced by {@link KqlBaseParser#expression}.
-     * @param ctx the parse tree
-     * @return the visitor result
-     */
-    T visitExpression(KqlBaseParser.ExpressionContext ctx);
     /**
      * Visit a parse tree produced by {@link KqlBaseParser#nestedQuery}.
      * @param ctx the parse tree
@@ -64,29 +58,23 @@ interface KqlBaseVisitor<T> extends ParseTreeVisitor<T> {
      */
     T visitNestedQuery(KqlBaseParser.NestedQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
-     * @param ctx the parse tree
-     * @return the visitor result
-     */
-    T visitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
-    /**
-     * Visit a parse tree produced by {@link KqlBaseParser#fieldRangeQuery}.
+     * Visit a parse tree produced by {@link KqlBaseParser#matchAllQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitFieldRangeQuery(KqlBaseParser.FieldRangeQueryContext ctx);
+    T visitMatchAllQuery(KqlBaseParser.MatchAllQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#fieldTermQuery}.
+     * Visit a parse tree produced by {@link KqlBaseParser#parenthesizedQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitFieldTermQuery(KqlBaseParser.FieldTermQueryContext ctx);
+    T visitParenthesizedQuery(KqlBaseParser.ParenthesizedQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#fieldName}.
+     * Visit a parse tree produced by {@link KqlBaseParser#rangeQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitFieldName(KqlBaseParser.FieldNameContext ctx);
+    T visitRangeQuery(KqlBaseParser.RangeQueryContext ctx);
     /**
      * Visit a parse tree produced by {@link KqlBaseParser#rangeQueryValue}.
      * @param ctx the parse tree
@@ -94,33 +82,33 @@ interface KqlBaseVisitor<T> extends ParseTreeVisitor<T> {
      */
     T visitRangeQueryValue(KqlBaseParser.RangeQueryValueContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#termQueryValue}.
+     * Visit a parse tree produced by {@link KqlBaseParser#existsQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitTermQueryValue(KqlBaseParser.TermQueryValueContext ctx);
+    T visitExistsQuery(KqlBaseParser.ExistsQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#groupingTermExpression}.
+     * Visit a parse tree produced by {@link KqlBaseParser#fieldQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitGroupingTermExpression(KqlBaseParser.GroupingTermExpressionContext ctx);
+    T visitFieldQuery(KqlBaseParser.FieldQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#unquotedLiteralExpression}.
+     * Visit a parse tree produced by {@link KqlBaseParser#fieldLessQuery}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitUnquotedLiteralExpression(KqlBaseParser.UnquotedLiteralExpressionContext ctx);
+    T visitFieldLessQuery(KqlBaseParser.FieldLessQueryContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#quotedStringExpression}.
+     * Visit a parse tree produced by {@link KqlBaseParser#fieldQueryValue}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitQuotedStringExpression(KqlBaseParser.QuotedStringExpressionContext ctx);
+    T visitFieldQueryValue(KqlBaseParser.FieldQueryValueContext ctx);
     /**
-     * Visit a parse tree produced by {@link KqlBaseParser#wildcardExpression}.
+     * Visit a parse tree produced by {@link KqlBaseParser#fieldName}.
      * @param ctx the parse tree
      * @return the visitor result
      */
-    T visitWildcardExpression(KqlBaseParser.WildcardExpressionContext ctx);
+    T visitFieldName(KqlBaseParser.FieldNameContext ctx);
 }

+ 9 - 0
x-pack/plugin/kql/src/test/resources/supported-queries

@@ -68,6 +68,15 @@ foo_field:foo AND (foo_field:foo bar OR foo bar)
 foo_field:foo AND (foo_field:foo bar OR foo bar)
 foo_field:foo OR (foo_field:foo bar OR foo bar)
 
+foo:AND
+foo:OR
+foo:NOT
+foo AND
+foo OR
+AND foo
+OR foo
+NOT
+
 // Nested queries
 nested_field: { NOT foo }
 nested_field: { NOT foo bar }

+ 0 - 8
x-pack/plugin/kql/src/test/resources/unsupported-queries

@@ -16,14 +16,6 @@ NOT (foo_field:foo AND) foo_field:foo bar
 foo_field: "foo bar
 foo_field: foo bar"
 
-
-// Invalid boolean queries
-foo AND
-AND foo
-foo OR
-OR foo
-NOT foo:
-
 // Can't nest grouping terms parentheses
 foo_field:(foo (bar))
 

部分文件因为文件数量过多而无法显示