This is an automated email from the ASF dual-hosted git repository. aradzinski pushed a commit to branch NLPCRAFT-206 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 546d235246b2f803ef5b0a3c848ed981fdf002bf Author: Aaron Radzinski <[email protected]> AuthorDate: Tue Feb 2 10:06:42 2021 -0800 WIP. --- .../model/intent/impl/antlr4/NCIntentDsl.g4 | 11 +- .../model/intent/impl/antlr4/NCIntentDsl.interp | 5 +- .../model/intent/impl/antlr4/NCIntentDsl.tokens | 22 +- .../impl/antlr4/NCIntentDslBaseListener.java | 12 + .../intent/impl/antlr4/NCIntentDslLexer.interp | 5 +- .../model/intent/impl/antlr4/NCIntentDslLexer.java | 222 +++---- .../intent/impl/antlr4/NCIntentDslLexer.tokens | 22 +- .../intent/impl/antlr4/NCIntentDslListener.java | 10 + .../intent/impl/antlr4/NCIntentDslParser.java | 718 ++++++++++++--------- .../probe/mgrs/model/antlr4/NCSynonymDsl.g4 | 13 +- .../probe/mgrs/model/antlr4/NCSynonymDsl.interp | 9 +- .../probe/mgrs/model/antlr4/NCSynonymDsl.tokens | 42 +- .../model/antlr4/NCSynonymDslBaseListener.java | 12 + .../mgrs/model/antlr4/NCSynonymDslLexer.interp | 11 +- .../probe/mgrs/model/antlr4/NCSynonymDslLexer.java | 181 +++--- .../mgrs/model/antlr4/NCSynonymDslLexer.tokens | 42 +- .../mgrs/model/antlr4/NCSynonymDslListener.java | 10 + .../mgrs/model/antlr4/NCSynonymDslParser.java | 526 +++++++++------ 18 files changed, 1120 insertions(+), 753 deletions(-) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 index 1418b8d..09c1ee2 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 @@ -48,7 +48,15 @@ item pred: expr PRED_OP expr; expr : val - | ID LPAREN expr RPAREN // Buit-in function call. + | LPAREN expr RPAREN + | expr mathOp expr + | ID LPAREN expr? RPAREN // Buit-in function call. + ; +mathOp + : MINUS + | PLUS + | STAR + | DEVIDE ; val : singleVal @@ -135,6 +143,7 @@ EQ: '='; PLUS: '+'; QUESTION: '?'; STAR: '*'; +DEVIDE: '/'; DOLLAR: '$'; POWER: '^'; BOOL: 'true' | 'false'; diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp index bc20478..133ddba 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp @@ -41,6 +41,7 @@ null '+' '?' '*' +'/' '$' '^' null @@ -93,6 +94,7 @@ EQ PLUS QUESTION STAR +DEVIDE DOLLAR POWER BOOL @@ -118,6 +120,7 @@ termId item pred expr +mathOp val singleVal tokQual @@ -132,4 +135,4 @@ minMaxRange atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 51, 276, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 3, 2, 3, 2, 5, 2, 57, 10, 2, 3, 2, 5, 2, 60, 10, 2, 3, 2, 5, 2, 63, 10, [...] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 52, 295, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 3, 2, 3, 2, 5, 2, 59, 10, 2, 3, 2, 5, 2, 62, 10, 2, 3, 2, [...] \ No newline at end of file diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens index 5175019..7b0f50b 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens @@ -39,14 +39,15 @@ EQ=38 PLUS=39 QUESTION=40 STAR=41 -DOLLAR=42 -POWER=43 -BOOL=44 -INT=45 -EXP=46 -ID=47 -WS=48 -ErrorCharacter=49 +DEVIDE=42 +DOLLAR=43 +POWER=44 +BOOL=45 +INT=46 +EXP=47 +ID=48 +WS=49 +ErrorCharacter=50 'intent'=1 'ordered'=2 'flow'=3 @@ -85,5 +86,6 @@ ErrorCharacter=49 '+'=39 '?'=40 '*'=41 -'$'=42 -'^'=43 +'/'=42 +'$'=43 +'^'=44 diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java index a6d7267..689fd21 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java @@ -196,6 +196,18 @@ public class NCIntentDslBaseListener implements NCIntentDslListener { * * <p>The default implementation does nothing.</p> */ + @Override public void enterMathOp(NCIntentDslParser.MathOpContext ctx) { } + /** + * {@inheritDoc} + * + * <p>The default implementation does nothing.</p> + */ + @Override public void exitMathOp(NCIntentDslParser.MathOpContext ctx) { } + /** + * {@inheritDoc} + * + * <p>The default implementation does nothing.</p> + */ @Override public void enterVal(NCIntentDslParser.ValContext ctx) { } /** * {@inheritDoc} diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp index ee91550..4183c24 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp @@ -41,6 +41,7 @@ null '+' '?' '*' +'/' '$' '^' null @@ -93,6 +94,7 @@ EQ PLUS QUESTION STAR +DEVIDE DOLLAR POWER BOOL @@ -144,6 +146,7 @@ EQ PLUS QUESTION STAR +DEVIDE DOLLAR POWER BOOL @@ -161,4 +164,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 51, 332, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, [...] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 52, 336, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, [...] \ No newline at end of file diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java index dd551a5..629af31 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java @@ -22,7 +22,8 @@ public class NCIntentDslLexer extends Lexer { PRED_OP=17, AND=18, OR=19, VERT=20, EXCL=21, LPAREN=22, RPAREN=23, LCURLY=24, RCURLY=25, SQUOTE=26, DQUOTE=27, TILDA=28, RIGHT=29, LBR=30, RBR=31, POUND=32, COMMA=33, COLON=34, MINUS=35, DOT=36, UNDERSCORE=37, EQ=38, PLUS=39, QUESTION=40, - STAR=41, DOLLAR=42, POWER=43, BOOL=44, INT=45, EXP=46, ID=47, WS=48, ErrorCharacter=49; + STAR=41, DEVIDE=42, DOLLAR=43, POWER=44, BOOL=45, INT=46, EXP=47, ID=48, + WS=49, ErrorCharacter=50; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -38,7 +39,7 @@ public class NCIntentDslLexer extends Lexer { "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN", "LCURLY", "RCURLY", "SQUOTE", "DQUOTE", "TILDA", "RIGHT", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", "DOT", "UNDERSCORE", "EQ", "PLUS", "QUESTION", "STAR", - "DOLLAR", "POWER", "BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter" + "DEVIDE", "DOLLAR", "POWER", "BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter" }; } public static final String[] ruleNames = makeRuleNames(); @@ -50,7 +51,7 @@ public class NCIntentDslLexer extends Lexer { "'ancestors'", "'value'", null, null, null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", "'}'", "'''", "'\"'", "'~'", "'>>'", "'['", "']'", "'#'", "','", "':'", "'-'", "'.'", "'_'", "'='", "'+'", "'?'", "'*'", - "'$'", "'^'" + "'/'", "'$'", "'^'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -60,8 +61,8 @@ public class NCIntentDslLexer extends Lexer { null, null, null, "SQSTRING", "DQSTRING", "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN", "LCURLY", "RCURLY", "SQUOTE", "DQUOTE", "TILDA", "RIGHT", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", "DOT", "UNDERSCORE", - "EQ", "PLUS", "QUESTION", "STAR", "DOLLAR", "POWER", "BOOL", "INT", "EXP", - "ID", "WS", "ErrorCharacter" + "EQ", "PLUS", "QUESTION", "STAR", "DEVIDE", "DOLLAR", "POWER", "BOOL", + "INT", "EXP", "ID", "WS", "ErrorCharacter" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -123,116 +124,117 @@ public class NCIntentDslLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\63\u014c\b\1\4\2"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\64\u0150\b\1\4\2"+ "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+ "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+ " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+ - "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\3\2\3\2\3\2\3"+ - "\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5"+ - "\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3"+ - "\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\13"+ - "\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r"+ - "\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\17"+ - "\3\17\3\17\3\17\3\17\3\17\3\20\3\20\7\20\u00c4\n\20\f\20\16\20\u00c7\13"+ - "\20\3\20\3\20\3\21\3\21\7\21\u00cd\n\21\f\21\16\21\u00d0\13\21\3\21\3"+ - "\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\5"+ - "\22\u00e1\n\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27"+ - "\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36"+ - "\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3&\3&\3\'\3"+ - "\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3-\3-\3-\3-\3-\3-\3-\5-\u0123\n"+ - "-\3.\3.\3.\7.\u0128\n.\f.\16.\u012b\13.\5.\u012d\n.\3/\3/\6/\u0131\n/"+ - "\r/\16/\u0132\3\60\3\60\6\60\u0137\n\60\r\60\16\60\u0138\3\60\3\60\3\60"+ - "\3\60\7\60\u013f\n\60\f\60\16\60\u0142\13\60\3\61\6\61\u0145\n\61\r\61"+ - "\16\61\u0146\3\61\3\61\3\62\3\62\2\2\63\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+ - "\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27"+ - "-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W"+ - "-Y.[/]\60_\61a\62c\63\3\2\13\3\2))\3\2$$\4\2>>@@\3\2\63;\4\2\62;aa\3\2"+ - "\62;\4\2C\\c|\5\2\62;C\\c|\5\2\13\f\16\17\"\"\2\u015e\2\3\3\2\2\2\2\5"+ - "\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+ - "\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33"+ - "\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2"+ - "\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+ - "\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2"+ - "\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K"+ - "\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2"+ - "\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2"+ - "\3e\3\2\2\2\5l\3\2\2\2\7t\3\2\2\2\ty\3\2\2\2\13~\3\2\2\2\r\u0083\3\2\2"+ - "\2\17\u0088\3\2\2\2\21\u008b\3\2\2\2\23\u0093\3\2\2\2\25\u009c\3\2\2\2"+ - "\27\u00a3\3\2\2\2\31\u00aa\3\2\2\2\33\u00b1\3\2\2\2\35\u00bb\3\2\2\2\37"+ - "\u00c1\3\2\2\2!\u00ca\3\2\2\2#\u00e0\3\2\2\2%\u00e2\3\2\2\2\'\u00e5\3"+ - "\2\2\2)\u00e8\3\2\2\2+\u00ea\3\2\2\2-\u00ec\3\2\2\2/\u00ee\3\2\2\2\61"+ - "\u00f0\3\2\2\2\63\u00f2\3\2\2\2\65\u00f4\3\2\2\2\67\u00f6\3\2\2\29\u00f8"+ - "\3\2\2\2;\u00fa\3\2\2\2=\u00fd\3\2\2\2?\u00ff\3\2\2\2A\u0101\3\2\2\2C"+ - "\u0103\3\2\2\2E\u0105\3\2\2\2G\u0107\3\2\2\2I\u0109\3\2\2\2K\u010b\3\2"+ - "\2\2M\u010d\3\2\2\2O\u010f\3\2\2\2Q\u0111\3\2\2\2S\u0113\3\2\2\2U\u0115"+ - "\3\2\2\2W\u0117\3\2\2\2Y\u0122\3\2\2\2[\u012c\3\2\2\2]\u012e\3\2\2\2_"+ - "\u0136\3\2\2\2a\u0144\3\2\2\2c\u014a\3\2\2\2ef\7k\2\2fg\7p\2\2gh\7v\2"+ - "\2hi\7g\2\2ij\7p\2\2jk\7v\2\2k\4\3\2\2\2lm\7q\2\2mn\7t\2\2no\7f\2\2op"+ - "\7g\2\2pq\7t\2\2qr\7g\2\2rs\7f\2\2s\6\3\2\2\2tu\7h\2\2uv\7n\2\2vw\7q\2"+ - "\2wx\7y\2\2x\b\3\2\2\2yz\7o\2\2z{\7g\2\2{|\7v\2\2|}\7c\2\2}\n\3\2\2\2"+ - "~\177\7p\2\2\177\u0080\7w\2\2\u0080\u0081\7n\2\2\u0081\u0082\7n\2\2\u0082"+ - "\f\3\2\2\2\u0083\u0084\7v\2\2\u0084\u0085\7g\2\2\u0085\u0086\7t\2\2\u0086"+ - "\u0087\7o\2\2\u0087\16\3\2\2\2\u0088\u0089\7k\2\2\u0089\u008a\7f\2\2\u008a"+ - "\20\3\2\2\2\u008b\u008c\7c\2\2\u008c\u008d\7n\2\2\u008d\u008e\7k\2\2\u008e"+ - "\u008f\7c\2\2\u008f\u0090\7u\2\2\u0090\u0091\7g\2\2\u0091\u0092\7u\2\2"+ - "\u0092\22\3\2\2\2\u0093\u0094\7u\2\2\u0094\u0095\7v\2\2\u0095\u0096\7"+ - "c\2\2\u0096\u0097\7t\2\2\u0097\u0098\7v\2\2\u0098\u0099\7k\2\2\u0099\u009a"+ - "\7f\2\2\u009a\u009b\7z\2\2\u009b\24\3\2\2\2\u009c\u009d\7g\2\2\u009d\u009e"+ - "\7p\2\2\u009e\u009f\7f\2\2\u009f\u00a0\7k\2\2\u00a0\u00a1\7f\2\2\u00a1"+ - "\u00a2\7z\2\2\u00a2\26\3\2\2\2\u00a3\u00a4\7r\2\2\u00a4\u00a5\7c\2\2\u00a5"+ - "\u00a6\7t\2\2\u00a6\u00a7\7g\2\2\u00a7\u00a8\7p\2\2\u00a8\u00a9\7v\2\2"+ - "\u00a9\30\3\2\2\2\u00aa\u00ab\7i\2\2\u00ab\u00ac\7t\2\2\u00ac\u00ad\7"+ - "q\2\2\u00ad\u00ae\7w\2\2\u00ae\u00af\7r\2\2\u00af\u00b0\7u\2\2\u00b0\32"+ - "\3\2\2\2\u00b1\u00b2\7c\2\2\u00b2\u00b3\7p\2\2\u00b3\u00b4\7e\2\2\u00b4"+ - "\u00b5\7g\2\2\u00b5\u00b6\7u\2\2\u00b6\u00b7\7v\2\2\u00b7\u00b8\7q\2\2"+ - "\u00b8\u00b9\7t\2\2\u00b9\u00ba\7u\2\2\u00ba\34\3\2\2\2\u00bb\u00bc\7"+ - "x\2\2\u00bc\u00bd\7c\2\2\u00bd\u00be\7n\2\2\u00be\u00bf\7w\2\2\u00bf\u00c0"+ - "\7g\2\2\u00c0\36\3\2\2\2\u00c1\u00c5\5\65\33\2\u00c2\u00c4\n\2\2\2\u00c3"+ - "\u00c2\3\2\2\2\u00c4\u00c7\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c5\u00c6\3\2"+ - "\2\2\u00c6\u00c8\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c8\u00c9\5\65\33\2\u00c9"+ - " \3\2\2\2\u00ca\u00ce\5\67\34\2\u00cb\u00cd\n\3\2\2\u00cc\u00cb\3\2\2"+ - "\2\u00cd\u00d0\3\2\2\2\u00ce\u00cc\3\2\2\2\u00ce\u00cf\3\2\2\2\u00cf\u00d1"+ - "\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d1\u00d2\5\67\34\2\u00d2\"\3\2\2\2\u00d3"+ - "\u00d4\7?\2\2\u00d4\u00e1\7?\2\2\u00d5\u00d6\7#\2\2\u00d6\u00e1\7?\2\2"+ - "\u00d7\u00d8\7@\2\2\u00d8\u00e1\7?\2\2\u00d9\u00da\7>\2\2\u00da\u00e1"+ - "\7?\2\2\u00db\u00e1\t\4\2\2\u00dc\u00dd\7B\2\2\u00dd\u00e1\7B\2\2\u00de"+ - "\u00df\7#\2\2\u00df\u00e1\7B\2\2\u00e0\u00d3\3\2\2\2\u00e0\u00d5\3\2\2"+ - "\2\u00e0\u00d7\3\2\2\2\u00e0\u00d9\3\2\2\2\u00e0\u00db\3\2\2\2\u00e0\u00dc"+ - "\3\2\2\2\u00e0\u00de\3\2\2\2\u00e1$\3\2\2\2\u00e2\u00e3\7(\2\2\u00e3\u00e4"+ - "\7(\2\2\u00e4&\3\2\2\2\u00e5\u00e6\7~\2\2\u00e6\u00e7\7~\2\2\u00e7(\3"+ - "\2\2\2\u00e8\u00e9\7~\2\2\u00e9*\3\2\2\2\u00ea\u00eb\7#\2\2\u00eb,\3\2"+ - "\2\2\u00ec\u00ed\7*\2\2\u00ed.\3\2\2\2\u00ee\u00ef\7+\2\2\u00ef\60\3\2"+ - "\2\2\u00f0\u00f1\7}\2\2\u00f1\62\3\2\2\2\u00f2\u00f3\7\177\2\2\u00f3\64"+ - "\3\2\2\2\u00f4\u00f5\7)\2\2\u00f5\66\3\2\2\2\u00f6\u00f7\7$\2\2\u00f7"+ - "8\3\2\2\2\u00f8\u00f9\7\u0080\2\2\u00f9:\3\2\2\2\u00fa\u00fb\7@\2\2\u00fb"+ - "\u00fc\7@\2\2\u00fc<\3\2\2\2\u00fd\u00fe\7]\2\2\u00fe>\3\2\2\2\u00ff\u0100"+ - "\7_\2\2\u0100@\3\2\2\2\u0101\u0102\7%\2\2\u0102B\3\2\2\2\u0103\u0104\7"+ - ".\2\2\u0104D\3\2\2\2\u0105\u0106\7<\2\2\u0106F\3\2\2\2\u0107\u0108\7/"+ - "\2\2\u0108H\3\2\2\2\u0109\u010a\7\60\2\2\u010aJ\3\2\2\2\u010b\u010c\7"+ - "a\2\2\u010cL\3\2\2\2\u010d\u010e\7?\2\2\u010eN\3\2\2\2\u010f\u0110\7-"+ - "\2\2\u0110P\3\2\2\2\u0111\u0112\7A\2\2\u0112R\3\2\2\2\u0113\u0114\7,\2"+ - "\2\u0114T\3\2\2\2\u0115\u0116\7&\2\2\u0116V\3\2\2\2\u0117\u0118\7`\2\2"+ - "\u0118X\3\2\2\2\u0119\u011a\7v\2\2\u011a\u011b\7t\2\2\u011b\u011c\7w\2"+ - "\2\u011c\u0123\7g\2\2\u011d\u011e\7h\2\2\u011e\u011f\7c\2\2\u011f\u0120"+ - "\7n\2\2\u0120\u0121\7u\2\2\u0121\u0123\7g\2\2\u0122\u0119\3\2\2\2\u0122"+ - "\u011d\3\2\2\2\u0123Z\3\2\2\2\u0124\u012d\7\62\2\2\u0125\u0129\t\5\2\2"+ - "\u0126\u0128\t\6\2\2\u0127\u0126\3\2\2\2\u0128\u012b\3\2\2\2\u0129\u0127"+ - "\3\2\2\2\u0129\u012a\3\2\2\2\u012a\u012d\3\2\2\2\u012b\u0129\3\2\2\2\u012c"+ - "\u0124\3\2\2\2\u012c\u0125\3\2\2\2\u012d\\\3\2\2\2\u012e\u0130\5I%\2\u012f"+ - "\u0131\t\7\2\2\u0130\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0130\3\2"+ - "\2\2\u0132\u0133\3\2\2\2\u0133^\3\2\2\2\u0134\u0137\5K&\2\u0135\u0137"+ - "\t\b\2\2\u0136\u0134\3\2\2\2\u0136\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138"+ - "\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u0140\3\2\2\2\u013a\u013f\t\t"+ - "\2\2\u013b\u013f\5E#\2\u013c\u013f\5G$\2\u013d\u013f\5K&\2\u013e\u013a"+ - "\3\2\2\2\u013e\u013b\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013d\3\2\2\2\u013f"+ - "\u0142\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141`\3\2\2\2"+ - "\u0142\u0140\3\2\2\2\u0143\u0145\t\n\2\2\u0144\u0143\3\2\2\2\u0145\u0146"+ - "\3\2\2\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147\u0148\3\2\2\2\u0148"+ - "\u0149\b\61\2\2\u0149b\3\2\2\2\u014a\u014b\13\2\2\2\u014bd\3\2\2\2\17"+ - "\2\u00c5\u00ce\u00e0\u0122\u0129\u012c\u0132\u0136\u0138\u013e\u0140\u0146"+ - "\3\b\2\2"; + "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\3\2"+ + "\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3"+ + "\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b"+ + "\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3"+ + "\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ + "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3"+ + "\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\7\20\u00c6\n\20\f\20"+ + "\16\20\u00c9\13\20\3\20\3\20\3\21\3\21\7\21\u00cf\n\21\f\21\16\21\u00d2"+ + "\13\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22\3\22"+ + "\3\22\3\22\5\22\u00e3\n\22\3\23\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\26"+ + "\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35"+ + "\3\35\3\36\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3#\3#\3$\3$\3%\3%\3"+ + "&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-\3-\3.\3.\3.\3.\3.\3.\3."+ + "\3.\3.\5.\u0127\n.\3/\3/\3/\7/\u012c\n/\f/\16/\u012f\13/\5/\u0131\n/\3"+ + "\60\3\60\6\60\u0135\n\60\r\60\16\60\u0136\3\61\3\61\6\61\u013b\n\61\r"+ + "\61\16\61\u013c\3\61\3\61\3\61\3\61\7\61\u0143\n\61\f\61\16\61\u0146\13"+ + "\61\3\62\6\62\u0149\n\62\r\62\16\62\u014a\3\62\3\62\3\63\3\63\2\2\64\3"+ + "\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37"+ + "\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37="+ + " ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64\3\2\13\3\2))\3\2"+ + "$$\4\2>>@@\3\2\63;\4\2\62;aa\3\2\62;\4\2C\\c|\5\2\62;C\\c|\5\2\13\f\16"+ + "\17\"\"\2\u0162\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3"+ + "\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2"+ + "\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3"+ + "\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2"+ + "\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2"+ + "9\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3"+ + "\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2"+ + "\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2"+ + "_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\3g\3\2\2\2\5n\3\2\2\2\7v\3"+ + "\2\2\2\t{\3\2\2\2\13\u0080\3\2\2\2\r\u0085\3\2\2\2\17\u008a\3\2\2\2\21"+ + "\u008d\3\2\2\2\23\u0095\3\2\2\2\25\u009e\3\2\2\2\27\u00a5\3\2\2\2\31\u00ac"+ + "\3\2\2\2\33\u00b3\3\2\2\2\35\u00bd\3\2\2\2\37\u00c3\3\2\2\2!\u00cc\3\2"+ + "\2\2#\u00e2\3\2\2\2%\u00e4\3\2\2\2\'\u00e7\3\2\2\2)\u00ea\3\2\2\2+\u00ec"+ + "\3\2\2\2-\u00ee\3\2\2\2/\u00f0\3\2\2\2\61\u00f2\3\2\2\2\63\u00f4\3\2\2"+ + "\2\65\u00f6\3\2\2\2\67\u00f8\3\2\2\29\u00fa\3\2\2\2;\u00fc\3\2\2\2=\u00ff"+ + "\3\2\2\2?\u0101\3\2\2\2A\u0103\3\2\2\2C\u0105\3\2\2\2E\u0107\3\2\2\2G"+ + "\u0109\3\2\2\2I\u010b\3\2\2\2K\u010d\3\2\2\2M\u010f\3\2\2\2O\u0111\3\2"+ + "\2\2Q\u0113\3\2\2\2S\u0115\3\2\2\2U\u0117\3\2\2\2W\u0119\3\2\2\2Y\u011b"+ + "\3\2\2\2[\u0126\3\2\2\2]\u0130\3\2\2\2_\u0132\3\2\2\2a\u013a\3\2\2\2c"+ + "\u0148\3\2\2\2e\u014e\3\2\2\2gh\7k\2\2hi\7p\2\2ij\7v\2\2jk\7g\2\2kl\7"+ + "p\2\2lm\7v\2\2m\4\3\2\2\2no\7q\2\2op\7t\2\2pq\7f\2\2qr\7g\2\2rs\7t\2\2"+ + "st\7g\2\2tu\7f\2\2u\6\3\2\2\2vw\7h\2\2wx\7n\2\2xy\7q\2\2yz\7y\2\2z\b\3"+ + "\2\2\2{|\7o\2\2|}\7g\2\2}~\7v\2\2~\177\7c\2\2\177\n\3\2\2\2\u0080\u0081"+ + "\7p\2\2\u0081\u0082\7w\2\2\u0082\u0083\7n\2\2\u0083\u0084\7n\2\2\u0084"+ + "\f\3\2\2\2\u0085\u0086\7v\2\2\u0086\u0087\7g\2\2\u0087\u0088\7t\2\2\u0088"+ + "\u0089\7o\2\2\u0089\16\3\2\2\2\u008a\u008b\7k\2\2\u008b\u008c\7f\2\2\u008c"+ + "\20\3\2\2\2\u008d\u008e\7c\2\2\u008e\u008f\7n\2\2\u008f\u0090\7k\2\2\u0090"+ + "\u0091\7c\2\2\u0091\u0092\7u\2\2\u0092\u0093\7g\2\2\u0093\u0094\7u\2\2"+ + "\u0094\22\3\2\2\2\u0095\u0096\7u\2\2\u0096\u0097\7v\2\2\u0097\u0098\7"+ + "c\2\2\u0098\u0099\7t\2\2\u0099\u009a\7v\2\2\u009a\u009b\7k\2\2\u009b\u009c"+ + "\7f\2\2\u009c\u009d\7z\2\2\u009d\24\3\2\2\2\u009e\u009f\7g\2\2\u009f\u00a0"+ + "\7p\2\2\u00a0\u00a1\7f\2\2\u00a1\u00a2\7k\2\2\u00a2\u00a3\7f\2\2\u00a3"+ + "\u00a4\7z\2\2\u00a4\26\3\2\2\2\u00a5\u00a6\7r\2\2\u00a6\u00a7\7c\2\2\u00a7"+ + "\u00a8\7t\2\2\u00a8\u00a9\7g\2\2\u00a9\u00aa\7p\2\2\u00aa\u00ab\7v\2\2"+ + "\u00ab\30\3\2\2\2\u00ac\u00ad\7i\2\2\u00ad\u00ae\7t\2\2\u00ae\u00af\7"+ + "q\2\2\u00af\u00b0\7w\2\2\u00b0\u00b1\7r\2\2\u00b1\u00b2\7u\2\2\u00b2\32"+ + "\3\2\2\2\u00b3\u00b4\7c\2\2\u00b4\u00b5\7p\2\2\u00b5\u00b6\7e\2\2\u00b6"+ + "\u00b7\7g\2\2\u00b7\u00b8\7u\2\2\u00b8\u00b9\7v\2\2\u00b9\u00ba\7q\2\2"+ + "\u00ba\u00bb\7t\2\2\u00bb\u00bc\7u\2\2\u00bc\34\3\2\2\2\u00bd\u00be\7"+ + "x\2\2\u00be\u00bf\7c\2\2\u00bf\u00c0\7n\2\2\u00c0\u00c1\7w\2\2\u00c1\u00c2"+ + "\7g\2\2\u00c2\36\3\2\2\2\u00c3\u00c7\5\65\33\2\u00c4\u00c6\n\2\2\2\u00c5"+ + "\u00c4\3\2\2\2\u00c6\u00c9\3\2\2\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2"+ + "\2\2\u00c8\u00ca\3\2\2\2\u00c9\u00c7\3\2\2\2\u00ca\u00cb\5\65\33\2\u00cb"+ + " \3\2\2\2\u00cc\u00d0\5\67\34\2\u00cd\u00cf\n\3\2\2\u00ce\u00cd\3\2\2"+ + "\2\u00cf\u00d2\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1\u00d3"+ + "\3\2\2\2\u00d2\u00d0\3\2\2\2\u00d3\u00d4\5\67\34\2\u00d4\"\3\2\2\2\u00d5"+ + "\u00d6\7?\2\2\u00d6\u00e3\7?\2\2\u00d7\u00d8\7#\2\2\u00d8\u00e3\7?\2\2"+ + "\u00d9\u00da\7@\2\2\u00da\u00e3\7?\2\2\u00db\u00dc\7>\2\2\u00dc\u00e3"+ + "\7?\2\2\u00dd\u00e3\t\4\2\2\u00de\u00df\7B\2\2\u00df\u00e3\7B\2\2\u00e0"+ + "\u00e1\7#\2\2\u00e1\u00e3\7B\2\2\u00e2\u00d5\3\2\2\2\u00e2\u00d7\3\2\2"+ + "\2\u00e2\u00d9\3\2\2\2\u00e2\u00db\3\2\2\2\u00e2\u00dd\3\2\2\2\u00e2\u00de"+ + "\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e3$\3\2\2\2\u00e4\u00e5\7(\2\2\u00e5\u00e6"+ + "\7(\2\2\u00e6&\3\2\2\2\u00e7\u00e8\7~\2\2\u00e8\u00e9\7~\2\2\u00e9(\3"+ + "\2\2\2\u00ea\u00eb\7~\2\2\u00eb*\3\2\2\2\u00ec\u00ed\7#\2\2\u00ed,\3\2"+ + "\2\2\u00ee\u00ef\7*\2\2\u00ef.\3\2\2\2\u00f0\u00f1\7+\2\2\u00f1\60\3\2"+ + "\2\2\u00f2\u00f3\7}\2\2\u00f3\62\3\2\2\2\u00f4\u00f5\7\177\2\2\u00f5\64"+ + "\3\2\2\2\u00f6\u00f7\7)\2\2\u00f7\66\3\2\2\2\u00f8\u00f9\7$\2\2\u00f9"+ + "8\3\2\2\2\u00fa\u00fb\7\u0080\2\2\u00fb:\3\2\2\2\u00fc\u00fd\7@\2\2\u00fd"+ + "\u00fe\7@\2\2\u00fe<\3\2\2\2\u00ff\u0100\7]\2\2\u0100>\3\2\2\2\u0101\u0102"+ + "\7_\2\2\u0102@\3\2\2\2\u0103\u0104\7%\2\2\u0104B\3\2\2\2\u0105\u0106\7"+ + ".\2\2\u0106D\3\2\2\2\u0107\u0108\7<\2\2\u0108F\3\2\2\2\u0109\u010a\7/"+ + "\2\2\u010aH\3\2\2\2\u010b\u010c\7\60\2\2\u010cJ\3\2\2\2\u010d\u010e\7"+ + "a\2\2\u010eL\3\2\2\2\u010f\u0110\7?\2\2\u0110N\3\2\2\2\u0111\u0112\7-"+ + "\2\2\u0112P\3\2\2\2\u0113\u0114\7A\2\2\u0114R\3\2\2\2\u0115\u0116\7,\2"+ + "\2\u0116T\3\2\2\2\u0117\u0118\7\61\2\2\u0118V\3\2\2\2\u0119\u011a\7&\2"+ + "\2\u011aX\3\2\2\2\u011b\u011c\7`\2\2\u011cZ\3\2\2\2\u011d\u011e\7v\2\2"+ + "\u011e\u011f\7t\2\2\u011f\u0120\7w\2\2\u0120\u0127\7g\2\2\u0121\u0122"+ + "\7h\2\2\u0122\u0123\7c\2\2\u0123\u0124\7n\2\2\u0124\u0125\7u\2\2\u0125"+ + "\u0127\7g\2\2\u0126\u011d\3\2\2\2\u0126\u0121\3\2\2\2\u0127\\\3\2\2\2"+ + "\u0128\u0131\7\62\2\2\u0129\u012d\t\5\2\2\u012a\u012c\t\6\2\2\u012b\u012a"+ + "\3\2\2\2\u012c\u012f\3\2\2\2\u012d\u012b\3\2\2\2\u012d\u012e\3\2\2\2\u012e"+ + "\u0131\3\2\2\2\u012f\u012d\3\2\2\2\u0130\u0128\3\2\2\2\u0130\u0129\3\2"+ + "\2\2\u0131^\3\2\2\2\u0132\u0134\5I%\2\u0133\u0135\t\7\2\2\u0134\u0133"+ + "\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0134\3\2\2\2\u0136\u0137\3\2\2\2\u0137"+ + "`\3\2\2\2\u0138\u013b\5K&\2\u0139\u013b\t\b\2\2\u013a\u0138\3\2\2\2\u013a"+ + "\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013a\3\2\2\2\u013c\u013d\3\2"+ + "\2\2\u013d\u0144\3\2\2\2\u013e\u0143\t\t\2\2\u013f\u0143\5E#\2\u0140\u0143"+ + "\5G$\2\u0141\u0143\5K&\2\u0142\u013e\3\2\2\2\u0142\u013f\3\2\2\2\u0142"+ + "\u0140\3\2\2\2\u0142\u0141\3\2\2\2\u0143\u0146\3\2\2\2\u0144\u0142\3\2"+ + "\2\2\u0144\u0145\3\2\2\2\u0145b\3\2\2\2\u0146\u0144\3\2\2\2\u0147\u0149"+ + "\t\n\2\2\u0148\u0147\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u0148\3\2\2\2\u014a"+ + "\u014b\3\2\2\2\u014b\u014c\3\2\2\2\u014c\u014d\b\62\2\2\u014dd\3\2\2\2"+ + "\u014e\u014f\13\2\2\2\u014ff\3\2\2\2\17\2\u00c7\u00d0\u00e2\u0126\u012d"+ + "\u0130\u0136\u013a\u013c\u0142\u0144\u014a\3\b\2\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens index 5175019..7b0f50b 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens @@ -39,14 +39,15 @@ EQ=38 PLUS=39 QUESTION=40 STAR=41 -DOLLAR=42 -POWER=43 -BOOL=44 -INT=45 -EXP=46 -ID=47 -WS=48 -ErrorCharacter=49 +DEVIDE=42 +DOLLAR=43 +POWER=44 +BOOL=45 +INT=46 +EXP=47 +ID=48 +WS=49 +ErrorCharacter=50 'intent'=1 'ordered'=2 'flow'=3 @@ -85,5 +86,6 @@ ErrorCharacter=49 '+'=39 '?'=40 '*'=41 -'$'=42 -'^'=43 +'/'=42 +'$'=43 +'^'=44 diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java index eea29a5..c09ec34 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java @@ -158,6 +158,16 @@ public interface NCIntentDslListener extends ParseTreeListener { */ void exitExpr(NCIntentDslParser.ExprContext ctx); /** + * Enter a parse tree produced by {@link NCIntentDslParser#mathOp}. + * @param ctx the parse tree + */ + void enterMathOp(NCIntentDslParser.MathOpContext ctx); + /** + * Exit a parse tree produced by {@link NCIntentDslParser#mathOp}. + * @param ctx the parse tree + */ + void exitMathOp(NCIntentDslParser.MathOpContext ctx); + /** * Enter a parse tree produced by {@link NCIntentDslParser#val}. * @param ctx the parse tree */ diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java index bd52388..6b04ee5 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java @@ -22,20 +22,23 @@ public class NCIntentDslParser extends Parser { PRED_OP=17, AND=18, OR=19, VERT=20, EXCL=21, LPAREN=22, RPAREN=23, LCURLY=24, RCURLY=25, SQUOTE=26, DQUOTE=27, TILDA=28, RIGHT=29, LBR=30, RBR=31, POUND=32, COMMA=33, COLON=34, MINUS=35, DOT=36, UNDERSCORE=37, EQ=38, PLUS=39, QUESTION=40, - STAR=41, DOLLAR=42, POWER=43, BOOL=44, INT=45, EXP=46, ID=47, WS=48, ErrorCharacter=49; + STAR=41, DEVIDE=42, DOLLAR=43, POWER=44, BOOL=45, INT=46, EXP=47, ID=48, + WS=49, ErrorCharacter=50; public static final int RULE_intent = 0, RULE_intentId = 1, RULE_orderedDecl = 2, RULE_flowDecl = 3, RULE_metaDecl = 4, RULE_metaList = 5, RULE_metaItem = 6, RULE_metaItemRval = 7, RULE_terms = 8, RULE_termEq = 9, RULE_term = 10, RULE_termId = 11, RULE_item = 12, - RULE_pred = 13, RULE_expr = 14, RULE_val = 15, RULE_singleVal = 16, RULE_tokQual = 17, - RULE_tokQualPart = 18, RULE_tokMeta = 19, RULE_modelMeta = 20, RULE_intentMeta = 21, - RULE_qstring = 22, RULE_minMax = 23, RULE_minMaxShortcut = 24, RULE_minMaxRange = 25; + RULE_pred = 13, RULE_expr = 14, RULE_mathOp = 15, RULE_val = 16, RULE_singleVal = 17, + RULE_tokQual = 18, RULE_tokQualPart = 19, RULE_tokMeta = 20, RULE_modelMeta = 21, + RULE_intentMeta = 22, RULE_qstring = 23, RULE_minMax = 24, RULE_minMaxShortcut = 25, + RULE_minMaxRange = 26; private static String[] makeRuleNames() { return new String[] { "intent", "intentId", "orderedDecl", "flowDecl", "metaDecl", "metaList", "metaItem", "metaItemRval", "terms", "termEq", "term", "termId", "item", - "pred", "expr", "val", "singleVal", "tokQual", "tokQualPart", "tokMeta", - "modelMeta", "intentMeta", "qstring", "minMax", "minMaxShortcut", "minMaxRange" + "pred", "expr", "mathOp", "val", "singleVal", "tokQual", "tokQualPart", + "tokMeta", "modelMeta", "intentMeta", "qstring", "minMax", "minMaxShortcut", + "minMaxRange" }; } public static final String[] ruleNames = makeRuleNames(); @@ -47,7 +50,7 @@ public class NCIntentDslParser extends Parser { "'ancestors'", "'value'", null, null, null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", "'}'", "'''", "'\"'", "'~'", "'>>'", "'['", "']'", "'#'", "','", "':'", "'-'", "'.'", "'_'", "'='", "'+'", "'?'", "'*'", - "'$'", "'^'" + "'/'", "'$'", "'^'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -57,8 +60,8 @@ public class NCIntentDslParser extends Parser { null, null, null, "SQSTRING", "DQSTRING", "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN", "LCURLY", "RCURLY", "SQUOTE", "DQUOTE", "TILDA", "RIGHT", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", "DOT", "UNDERSCORE", - "EQ", "PLUS", "QUESTION", "STAR", "DOLLAR", "POWER", "BOOL", "INT", "EXP", - "ID", "WS", "ErrorCharacter" + "EQ", "PLUS", "QUESTION", "STAR", "DEVIDE", "DOLLAR", "POWER", "BOOL", + "INT", "EXP", "ID", "WS", "ErrorCharacter" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -150,41 +153,41 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(52); - intentId(); setState(54); + intentId(); + setState(56); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__1) { { - setState(53); + setState(55); orderedDecl(); } } - setState(57); + setState(59); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__2) { { - setState(56); + setState(58); flowDecl(); } } - setState(60); + setState(62); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(59); + setState(61); metaDecl(); } } - setState(62); + setState(64); terms(0); - setState(63); + setState(65); match(EOF); } } @@ -222,11 +225,11 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(65); + setState(67); match(T__0); - setState(66); + setState(68); match(EQ); - setState(67); + setState(69); match(ID); } } @@ -264,11 +267,11 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(69); + setState(71); match(T__1); - setState(70); + setState(72); match(EQ); - setState(71); + setState(73); match(BOOL); } } @@ -308,11 +311,11 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(73); + setState(75); match(T__2); - setState(74); + setState(76); match(EQ); - setState(75); + setState(77); qstring(); } } @@ -355,23 +358,23 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(77); + setState(79); match(T__3); - setState(78); + setState(80); match(EQ); - setState(79); - match(LCURLY); setState(81); + match(LCURLY); + setState(83); _errHandler.sync(this); _la = _input.LA(1); if (_la==SQSTRING || _la==DQSTRING) { { - setState(80); + setState(82); metaList(0); } } - setState(83); + setState(85); match(RCURLY); } } @@ -424,11 +427,11 @@ public class NCIntentDslParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(86); + setState(88); metaItem(); } _ctx.stop = _input.LT(-1); - setState(93); + setState(95); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -439,16 +442,16 @@ public class NCIntentDslParser extends Parser { { _localctx = new MetaListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_metaList); - setState(88); + setState(90); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(89); + setState(91); match(COMMA); - setState(90); + setState(92); metaItem(); } } } - setState(95); + setState(97); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); } @@ -493,11 +496,11 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(96); + setState(98); qstring(); - setState(97); + setState(99); match(COLON); - setState(98); + setState(100); metaItemRval(); } } @@ -535,20 +538,20 @@ public class NCIntentDslParser extends Parser { MetaItemRvalContext _localctx = new MetaItemRvalContext(_ctx, getState()); enterRule(_localctx, 14, RULE_metaItemRval); try { - setState(103); + setState(105); _errHandler.sync(this); switch (_input.LA(1)) { case T__4: enterOuterAlt(_localctx, 1); { - setState(100); + setState(102); match(T__4); } break; case BOOL: enterOuterAlt(_localctx, 2); { - setState(101); + setState(103); match(BOOL); } break; @@ -556,7 +559,7 @@ public class NCIntentDslParser extends Parser { case DQSTRING: enterOuterAlt(_localctx, 3); { - setState(102); + setState(104); qstring(); } break; @@ -612,11 +615,11 @@ public class NCIntentDslParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(106); + setState(108); term(); } _ctx.stop = _input.LT(-1); - setState(112); + setState(114); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,6,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -627,14 +630,14 @@ public class NCIntentDslParser extends Parser { { _localctx = new TermsContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_terms); - setState(108); + setState(110); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(109); + setState(111); term(); } } } - setState(114); + setState(116); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,6,_ctx); } @@ -675,7 +678,7 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(115); + setState(117); _la = _input.LA(1); if ( !(_la==TILDA || _la==EQ) ) { _errHandler.recoverInline(this); @@ -734,32 +737,32 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(117); - match(T__5); setState(119); + match(T__5); + setState(121); _errHandler.sync(this); _la = _input.LA(1); if (_la==LPAREN) { { - setState(118); + setState(120); termId(); } } - setState(121); + setState(123); termEq(); - setState(122); + setState(124); match(LCURLY); - setState(123); + setState(125); item(0); - setState(124); - match(RCURLY); setState(126); + match(RCURLY); + setState(128); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: { - setState(125); + setState(127); minMax(); } break; @@ -801,11 +804,11 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(128); + setState(130); match(LPAREN); - setState(129); + setState(131); match(ID); - setState(130); + setState(132); match(RPAREN); } } @@ -865,36 +868,36 @@ public class NCIntentDslParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(140); + setState(142); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { case 1: { - setState(133); + setState(135); pred(); } break; case 2: { - setState(134); + setState(136); match(LPAREN); - setState(135); + setState(137); item(0); - setState(136); + setState(138); match(RPAREN); } break; case 3: { - setState(138); + setState(140); match(EXCL); - setState(139); + setState(141); item(1); } break; } _ctx.stop = _input.LT(-1); - setState(147); + setState(149); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,10,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -905,9 +908,9 @@ public class NCIntentDslParser extends Parser { { _localctx = new ItemContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_item); - setState(142); + setState(144); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(143); + setState(145); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -917,12 +920,12 @@ public class NCIntentDslParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(144); + setState(146); item(3); } } } - setState(149); + setState(151); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,10,_ctx); } @@ -967,12 +970,12 @@ public class NCIntentDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(150); - expr(); - setState(151); - match(PRED_OP); setState(152); - expr(); + expr(0); + setState(153); + match(PRED_OP); + setState(154); + expr(0); } } catch (RecognitionException re) { @@ -990,12 +993,18 @@ public class NCIntentDslParser extends Parser { public ValContext val() { return getRuleContext(ValContext.class,0); } - public TerminalNode ID() { return getToken(NCIntentDslParser.ID, 0); } public TerminalNode LPAREN() { return getToken(NCIntentDslParser.LPAREN, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public List<ExprContext> expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); } public TerminalNode RPAREN() { return getToken(NCIntentDslParser.RPAREN, 0); } + public TerminalNode ID() { return getToken(NCIntentDslParser.ID, 0); } + public MathOpContext mathOp() { + return getRuleContext(MathOpContext.class,0); + } public ExprContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -1011,33 +1020,136 @@ public class NCIntentDslParser extends Parser { } public final ExprContext expr() throws RecognitionException { - ExprContext _localctx = new ExprContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_expr); + return expr(0); + } + + private ExprContext expr(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExprContext _localctx = new ExprContext(_ctx, _parentState); + ExprContext _prevctx = _localctx; + int _startState = 28; + enterRecursionRule(_localctx, 28, RULE_expr, _p); + int _la; try { - setState(160); + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(168); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: - enterOuterAlt(_localctx, 1); { - setState(154); + setState(157); val(0); } break; case 2: - enterOuterAlt(_localctx, 2); { - setState(155); + setState(158); + match(LPAREN); + setState(159); + expr(0); + setState(160); + match(RPAREN); + } + break; + case 3: + { + setState(162); match(ID); - setState(156); + setState(163); match(LPAREN); - setState(157); - expr(); - setState(158); + setState(165); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << SQSTRING) | (1L << DQSTRING) | (1L << LPAREN) | (1L << TILDA) | (1L << POUND) | (1L << MINUS) | (1L << DOLLAR) | (1L << BOOL) | (1L << INT) | (1L << ID))) != 0)) { + { + setState(164); + expr(0); + } + } + + setState(167); match(RPAREN); } break; } + _ctx.stop = _input.LT(-1); + setState(176); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(170); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(171); + mathOp(); + setState(172); + expr(3); + } + } + } + setState(178); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class MathOpContext extends ParserRuleContext { + public TerminalNode MINUS() { return getToken(NCIntentDslParser.MINUS, 0); } + public TerminalNode PLUS() { return getToken(NCIntentDslParser.PLUS, 0); } + public TerminalNode STAR() { return getToken(NCIntentDslParser.STAR, 0); } + public TerminalNode DEVIDE() { return getToken(NCIntentDslParser.DEVIDE, 0); } + public MathOpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mathOp; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).enterMathOp(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitMathOp(this); + } + } + + public final MathOpContext mathOp() throws RecognitionException { + MathOpContext _localctx = new MathOpContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_mathOp); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(179); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MINUS) | (1L << PLUS) | (1L << STAR) | (1L << DEVIDE))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } } catch (RecognitionException re) { _localctx.exception = re; @@ -1086,13 +1198,13 @@ public class NCIntentDslParser extends Parser { int _parentState = getState(); ValContext _localctx = new ValContext(_ctx, _parentState); ValContext _prevctx = _localctx; - int _startState = 30; - enterRecursionRule(_localctx, 30, RULE_val, _p); + int _startState = 32; + enterRecursionRule(_localctx, 32, RULE_val, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(168); + setState(187); _errHandler.sync(this); switch (_input.LA(1)) { case T__4: @@ -1114,17 +1226,17 @@ public class NCIntentDslParser extends Parser { case INT: case ID: { - setState(163); + setState(182); singleVal(); } break; case LPAREN: { - setState(164); + setState(183); match(LPAREN); - setState(165); + setState(184); val(0); - setState(166); + setState(185); match(RPAREN); } break; @@ -1132,9 +1244,9 @@ public class NCIntentDslParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(175); + setState(194); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -1143,18 +1255,18 @@ public class NCIntentDslParser extends Parser { { _localctx = new ValContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_val); - setState(170); + setState(189); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(171); + setState(190); match(COMMA); - setState(172); + setState(191); val(2); } } } - setState(177); + setState(196); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); } } } @@ -1205,46 +1317,46 @@ public class NCIntentDslParser extends Parser { public final SingleValContext singleVal() throws RecognitionException { SingleValContext _localctx = new SingleValContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_singleVal); + enterRule(_localctx, 34, RULE_singleVal); int _la; try { - setState(199); + setState(218); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(178); + setState(197); match(T__4); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(180); + setState(199); _errHandler.sync(this); _la = _input.LA(1); if (_la==MINUS) { { - setState(179); + setState(198); match(MINUS); } } - setState(185); + setState(204); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: { - setState(182); + setState(201); match(INT); } break; case 2: { - setState(183); + setState(202); match(INT); - setState(184); + setState(203); match(EXP); } break; @@ -1254,31 +1366,31 @@ public class NCIntentDslParser extends Parser { case 3: enterOuterAlt(_localctx, 3); { - setState(187); + setState(206); match(BOOL); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(188); + setState(207); qstring(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(190); + setState(209); _errHandler.sync(this); _la = _input.LA(1); if (_la==ID) { { - setState(189); + setState(208); tokQual(0); } } - setState(192); + setState(211); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13))) != 0)) ) { _errHandler.recoverInline(this); @@ -1293,31 +1405,31 @@ public class NCIntentDslParser extends Parser { case 6: enterOuterAlt(_localctx, 6); { - setState(194); + setState(213); _errHandler.sync(this); _la = _input.LA(1); if (_la==ID) { { - setState(193); + setState(212); tokQual(0); } } - setState(196); + setState(215); tokMeta(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(197); + setState(216); modelMeta(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(198); + setState(217); intentMeta(); } break; @@ -1364,20 +1476,20 @@ public class NCIntentDslParser extends Parser { int _parentState = getState(); TokQualContext _localctx = new TokQualContext(_ctx, _parentState); TokQualContext _prevctx = _localctx; - int _startState = 34; - enterRecursionRule(_localctx, 34, RULE_tokQual, _p); + int _startState = 36; + enterRecursionRule(_localctx, 36, RULE_tokQual, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(202); + setState(221); tokQualPart(); } _ctx.stop = _input.LT(-1); - setState(208); + setState(227); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + _alt = getInterpreter().adaptivePredict(_input,21,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -1386,16 +1498,16 @@ public class NCIntentDslParser extends Parser { { _localctx = new TokQualContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_tokQual); - setState(204); + setState(223); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(205); + setState(224); tokQualPart(); } } } - setState(210); + setState(229); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,19,_ctx); + _alt = getInterpreter().adaptivePredict(_input,21,_ctx); } } } @@ -1429,13 +1541,13 @@ public class NCIntentDslParser extends Parser { public final TokQualPartContext tokQualPart() throws RecognitionException { TokQualPartContext _localctx = new TokQualPartContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_tokQualPart); + enterRule(_localctx, 38, RULE_tokQualPart); try { enterOuterAlt(_localctx, 1); { - setState(211); + setState(230); match(ID); - setState(212); + setState(231); match(DOT); } } @@ -1475,47 +1587,47 @@ public class NCIntentDslParser extends Parser { public final TokMetaContext tokMeta() throws RecognitionException { TokMetaContext _localctx = new TokMetaContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_tokMeta); + enterRule(_localctx, 40, RULE_tokMeta); try { - setState(227); + setState(246); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(214); + setState(233); match(TILDA); - setState(215); + setState(234); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(216); + setState(235); match(TILDA); - setState(217); + setState(236); match(ID); - setState(218); + setState(237); match(LBR); - setState(219); + setState(238); match(INT); - setState(220); + setState(239); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(221); + setState(240); match(TILDA); - setState(222); + setState(241); match(ID); - setState(223); + setState(242); match(LBR); - setState(224); + setState(243); qstring(); - setState(225); + setState(244); match(RBR); } break; @@ -1557,47 +1669,47 @@ public class NCIntentDslParser extends Parser { public final ModelMetaContext modelMeta() throws RecognitionException { ModelMetaContext _localctx = new ModelMetaContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_modelMeta); + enterRule(_localctx, 42, RULE_modelMeta); try { - setState(242); + setState(261); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(229); + setState(248); match(POUND); - setState(230); + setState(249); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(231); + setState(250); match(POUND); - setState(232); + setState(251); match(ID); - setState(233); + setState(252); match(LBR); - setState(234); + setState(253); match(INT); - setState(235); + setState(254); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(236); + setState(255); match(POUND); - setState(237); + setState(256); match(ID); - setState(238); + setState(257); match(LBR); - setState(239); + setState(258); qstring(); - setState(240); + setState(259); match(RBR); } break; @@ -1639,47 +1751,47 @@ public class NCIntentDslParser extends Parser { public final IntentMetaContext intentMeta() throws RecognitionException { IntentMetaContext _localctx = new IntentMetaContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_intentMeta); + enterRule(_localctx, 44, RULE_intentMeta); try { - setState(257); + setState(276); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(244); + setState(263); match(DOLLAR); - setState(245); + setState(264); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(246); + setState(265); match(DOLLAR); - setState(247); + setState(266); match(ID); - setState(248); + setState(267); match(LBR); - setState(249); + setState(268); match(INT); - setState(250); + setState(269); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(251); + setState(270); match(DOLLAR); - setState(252); + setState(271); match(ID); - setState(253); + setState(272); match(LBR); - setState(254); + setState(273); qstring(); - setState(255); + setState(274); match(RBR); } break; @@ -1715,12 +1827,12 @@ public class NCIntentDslParser extends Parser { public final QstringContext qstring() throws RecognitionException { QstringContext _localctx = new QstringContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_qstring); + enterRule(_localctx, 46, RULE_qstring); int _la; try { enterOuterAlt(_localctx, 1); { - setState(259); + setState(278); _la = _input.LA(1); if ( !(_la==SQSTRING || _la==DQSTRING) ) { _errHandler.recoverInline(this); @@ -1766,9 +1878,9 @@ public class NCIntentDslParser extends Parser { public final MinMaxContext minMax() throws RecognitionException { MinMaxContext _localctx = new MinMaxContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_minMax); + enterRule(_localctx, 48, RULE_minMax); try { - setState(263); + setState(282); _errHandler.sync(this); switch (_input.LA(1)) { case PLUS: @@ -1776,14 +1888,14 @@ public class NCIntentDslParser extends Parser { case STAR: enterOuterAlt(_localctx, 1); { - setState(261); + setState(280); minMaxShortcut(); } break; case LBR: enterOuterAlt(_localctx, 2); { - setState(262); + setState(281); minMaxRange(); } break; @@ -1822,12 +1934,12 @@ public class NCIntentDslParser extends Parser { public final MinMaxShortcutContext minMaxShortcut() throws RecognitionException { MinMaxShortcutContext _localctx = new MinMaxShortcutContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_minMaxShortcut); + enterRule(_localctx, 50, RULE_minMaxShortcut); int _la; try { enterOuterAlt(_localctx, 1); { - setState(265); + setState(284); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << QUESTION) | (1L << STAR))) != 0)) ) { _errHandler.recoverInline(this); @@ -1874,19 +1986,19 @@ public class NCIntentDslParser extends Parser { public final MinMaxRangeContext minMaxRange() throws RecognitionException { MinMaxRangeContext _localctx = new MinMaxRangeContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_minMaxRange); + enterRule(_localctx, 52, RULE_minMaxRange); try { enterOuterAlt(_localctx, 1); { - setState(267); + setState(286); match(LBR); - setState(268); + setState(287); match(INT); - setState(269); + setState(288); match(COMMA); - setState(270); + setState(289); match(INT); - setState(271); + setState(290); match(RBR); } } @@ -1909,9 +2021,11 @@ public class NCIntentDslParser extends Parser { return terms_sempred((TermsContext)_localctx, predIndex); case 12: return item_sempred((ItemContext)_localctx, predIndex); - case 15: + case 14: + return expr_sempred((ExprContext)_localctx, predIndex); + case 16: return val_sempred((ValContext)_localctx, predIndex); - case 17: + case 18: return tokQual_sempred((TokQualContext)_localctx, predIndex); } return true; @@ -1937,113 +2051,129 @@ public class NCIntentDslParser extends Parser { } return true; } - private boolean val_sempred(ValContext _localctx, int predIndex) { + private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { case 3: + return precpred(_ctx, 2); + } + return true; + } + private boolean val_sempred(ValContext _localctx, int predIndex) { + switch (predIndex) { + case 4: return precpred(_ctx, 1); } return true; } private boolean tokQual_sempred(TokQualContext _localctx, int predIndex) { switch (predIndex) { - case 4: + case 5: return precpred(_ctx, 1); } return true; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63\u0114\4\2\t\2"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\64\u0127\4\2\t\2"+ "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ - "\4\32\t\32\4\33\t\33\3\2\3\2\5\29\n\2\3\2\5\2<\n\2\3\2\5\2?\n\2\3\2\3"+ - "\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6"+ - "\5\6T\n\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\7\7^\n\7\f\7\16\7a\13\7\3\b"+ - "\3\b\3\b\3\b\3\t\3\t\3\t\5\tj\n\t\3\n\3\n\3\n\3\n\3\n\7\nq\n\n\f\n\16"+ - "\nt\13\n\3\13\3\13\3\f\3\f\5\fz\n\f\3\f\3\f\3\f\3\f\3\f\5\f\u0081\n\f"+ - "\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u008f\n"+ - "\16\3\16\3\16\3\16\7\16\u0094\n\16\f\16\16\16\u0097\13\16\3\17\3\17\3"+ - "\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00a3\n\20\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\5\21\u00ab\n\21\3\21\3\21\3\21\7\21\u00b0\n\21\f\21\16"+ - "\21\u00b3\13\21\3\22\3\22\5\22\u00b7\n\22\3\22\3\22\3\22\5\22\u00bc\n"+ - "\22\3\22\3\22\3\22\5\22\u00c1\n\22\3\22\3\22\5\22\u00c5\n\22\3\22\3\22"+ - "\3\22\5\22\u00ca\n\22\3\23\3\23\3\23\3\23\3\23\7\23\u00d1\n\23\f\23\16"+ - "\23\u00d4\13\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\25\3\25\3\25\5\25\u00e6\n\25\3\26\3\26\3\26\3\26\3\26\3\26"+ - "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u00f5\n\26\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\5\27\u0104\n\27\3\30\3\30"+ - "\3\31\3\31\5\31\u010a\n\31\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33"+ - "\2\7\f\22\32 $\34\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+ - "\64\2\7\4\2\36\36((\3\2\24\25\3\2\t\20\3\2\21\22\3\2)+\2\u011c\2\66\3"+ - "\2\2\2\4C\3\2\2\2\6G\3\2\2\2\bK\3\2\2\2\nO\3\2\2\2\fW\3\2\2\2\16b\3\2"+ - "\2\2\20i\3\2\2\2\22k\3\2\2\2\24u\3\2\2\2\26w\3\2\2\2\30\u0082\3\2\2\2"+ - "\32\u008e\3\2\2\2\34\u0098\3\2\2\2\36\u00a2\3\2\2\2 \u00aa\3\2\2\2\"\u00c9"+ - "\3\2\2\2$\u00cb\3\2\2\2&\u00d5\3\2\2\2(\u00e5\3\2\2\2*\u00f4\3\2\2\2,"+ - "\u0103\3\2\2\2.\u0105\3\2\2\2\60\u0109\3\2\2\2\62\u010b\3\2\2\2\64\u010d"+ - "\3\2\2\2\668\5\4\3\2\679\5\6\4\28\67\3\2\2\289\3\2\2\29;\3\2\2\2:<\5\b"+ - "\5\2;:\3\2\2\2;<\3\2\2\2<>\3\2\2\2=?\5\n\6\2>=\3\2\2\2>?\3\2\2\2?@\3\2"+ - "\2\2@A\5\22\n\2AB\7\2\2\3B\3\3\2\2\2CD\7\3\2\2DE\7(\2\2EF\7\61\2\2F\5"+ - "\3\2\2\2GH\7\4\2\2HI\7(\2\2IJ\7.\2\2J\7\3\2\2\2KL\7\5\2\2LM\7(\2\2MN\5"+ - ".\30\2N\t\3\2\2\2OP\7\6\2\2PQ\7(\2\2QS\7\32\2\2RT\5\f\7\2SR\3\2\2\2ST"+ - "\3\2\2\2TU\3\2\2\2UV\7\33\2\2V\13\3\2\2\2WX\b\7\1\2XY\5\16\b\2Y_\3\2\2"+ - "\2Z[\f\3\2\2[\\\7#\2\2\\^\5\16\b\2]Z\3\2\2\2^a\3\2\2\2_]\3\2\2\2_`\3\2"+ - "\2\2`\r\3\2\2\2a_\3\2\2\2bc\5.\30\2cd\7$\2\2de\5\20\t\2e\17\3\2\2\2fj"+ - "\7\7\2\2gj\7.\2\2hj\5.\30\2if\3\2\2\2ig\3\2\2\2ih\3\2\2\2j\21\3\2\2\2"+ - "kl\b\n\1\2lm\5\26\f\2mr\3\2\2\2no\f\3\2\2oq\5\26\f\2pn\3\2\2\2qt\3\2\2"+ - "\2rp\3\2\2\2rs\3\2\2\2s\23\3\2\2\2tr\3\2\2\2uv\t\2\2\2v\25\3\2\2\2wy\7"+ - "\b\2\2xz\5\30\r\2yx\3\2\2\2yz\3\2\2\2z{\3\2\2\2{|\5\24\13\2|}\7\32\2\2"+ - "}~\5\32\16\2~\u0080\7\33\2\2\177\u0081\5\60\31\2\u0080\177\3\2\2\2\u0080"+ - "\u0081\3\2\2\2\u0081\27\3\2\2\2\u0082\u0083\7\30\2\2\u0083\u0084\7\61"+ - "\2\2\u0084\u0085\7\31\2\2\u0085\31\3\2\2\2\u0086\u0087\b\16\1\2\u0087"+ - "\u008f\5\34\17\2\u0088\u0089\7\30\2\2\u0089\u008a\5\32\16\2\u008a\u008b"+ - "\7\31\2\2\u008b\u008f\3\2\2\2\u008c\u008d\7\27\2\2\u008d\u008f\5\32\16"+ - "\3\u008e\u0086\3\2\2\2\u008e\u0088\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0095"+ - "\3\2\2\2\u0090\u0091\f\4\2\2\u0091\u0092\t\3\2\2\u0092\u0094\5\32\16\5"+ - "\u0093\u0090\3\2\2\2\u0094\u0097\3\2\2\2\u0095\u0093\3\2\2\2\u0095\u0096"+ - "\3\2\2\2\u0096\33\3\2\2\2\u0097\u0095\3\2\2\2\u0098\u0099\5\36\20\2\u0099"+ - "\u009a\7\23\2\2\u009a\u009b\5\36\20\2\u009b\35\3\2\2\2\u009c\u00a3\5 "+ - "\21\2\u009d\u009e\7\61\2\2\u009e\u009f\7\30\2\2\u009f\u00a0\5\36\20\2"+ - "\u00a0\u00a1\7\31\2\2\u00a1\u00a3\3\2\2\2\u00a2\u009c\3\2\2\2\u00a2\u009d"+ - "\3\2\2\2\u00a3\37\3\2\2\2\u00a4\u00a5\b\21\1\2\u00a5\u00ab\5\"\22\2\u00a6"+ - "\u00a7\7\30\2\2\u00a7\u00a8\5 \21\2\u00a8\u00a9\7\31\2\2\u00a9\u00ab\3"+ - "\2\2\2\u00aa\u00a4\3\2\2\2\u00aa\u00a6\3\2\2\2\u00ab\u00b1\3\2\2\2\u00ac"+ - "\u00ad\f\3\2\2\u00ad\u00ae\7#\2\2\u00ae\u00b0\5 \21\4\u00af\u00ac\3\2"+ - "\2\2\u00b0\u00b3\3\2\2\2\u00b1\u00af\3\2\2\2\u00b1\u00b2\3\2\2\2\u00b2"+ - "!\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4\u00ca\7\7\2\2\u00b5\u00b7\7%\2\2\u00b6"+ - "\u00b5\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00bb\3\2\2\2\u00b8\u00bc\7/"+ - "\2\2\u00b9\u00ba\7/\2\2\u00ba\u00bc\7\60\2\2\u00bb\u00b8\3\2\2\2\u00bb"+ - "\u00b9\3\2\2\2\u00bc\u00ca\3\2\2\2\u00bd\u00ca\7.\2\2\u00be\u00ca\5.\30"+ - "\2\u00bf\u00c1\5$\23\2\u00c0\u00bf\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1\u00c2"+ - "\3\2\2\2\u00c2\u00ca\t\4\2\2\u00c3\u00c5\5$\23\2\u00c4\u00c3\3\2\2\2\u00c4"+ - "\u00c5\3\2\2\2\u00c5\u00c6\3\2\2\2\u00c6\u00ca\5(\25\2\u00c7\u00ca\5*"+ - "\26\2\u00c8\u00ca\5,\27\2\u00c9\u00b4\3\2\2\2\u00c9\u00b6\3\2\2\2\u00c9"+ - "\u00bd\3\2\2\2\u00c9\u00be\3\2\2\2\u00c9\u00c0\3\2\2\2\u00c9\u00c4\3\2"+ - "\2\2\u00c9\u00c7\3\2\2\2\u00c9\u00c8\3\2\2\2\u00ca#\3\2\2\2\u00cb\u00cc"+ - "\b\23\1\2\u00cc\u00cd\5&\24\2\u00cd\u00d2\3\2\2\2\u00ce\u00cf\f\3\2\2"+ - "\u00cf\u00d1\5&\24\2\u00d0\u00ce\3\2\2\2\u00d1\u00d4\3\2\2\2\u00d2\u00d0"+ - "\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3%\3\2\2\2\u00d4\u00d2\3\2\2\2\u00d5"+ - "\u00d6\7\61\2\2\u00d6\u00d7\7&\2\2\u00d7\'\3\2\2\2\u00d8\u00d9\7\36\2"+ - "\2\u00d9\u00e6\7\61\2\2\u00da\u00db\7\36\2\2\u00db\u00dc\7\61\2\2\u00dc"+ - "\u00dd\7 \2\2\u00dd\u00de\7/\2\2\u00de\u00e6\7!\2\2\u00df\u00e0\7\36\2"+ - "\2\u00e0\u00e1\7\61\2\2\u00e1\u00e2\7 \2\2\u00e2\u00e3\5.\30\2\u00e3\u00e4"+ - "\7!\2\2\u00e4\u00e6\3\2\2\2\u00e5\u00d8\3\2\2\2\u00e5\u00da\3\2\2\2\u00e5"+ - "\u00df\3\2\2\2\u00e6)\3\2\2\2\u00e7\u00e8\7\"\2\2\u00e8\u00f5\7\61\2\2"+ - "\u00e9\u00ea\7\"\2\2\u00ea\u00eb\7\61\2\2\u00eb\u00ec\7 \2\2\u00ec\u00ed"+ - "\7/\2\2\u00ed\u00f5\7!\2\2\u00ee\u00ef\7\"\2\2\u00ef\u00f0\7\61\2\2\u00f0"+ - "\u00f1\7 \2\2\u00f1\u00f2\5.\30\2\u00f2\u00f3\7!\2\2\u00f3\u00f5\3\2\2"+ - "\2\u00f4\u00e7\3\2\2\2\u00f4\u00e9\3\2\2\2\u00f4\u00ee\3\2\2\2\u00f5+"+ - "\3\2\2\2\u00f6\u00f7\7,\2\2\u00f7\u0104\7\61\2\2\u00f8\u00f9\7,\2\2\u00f9"+ - "\u00fa\7\61\2\2\u00fa\u00fb\7 \2\2\u00fb\u00fc\7/\2\2\u00fc\u0104\7!\2"+ - "\2\u00fd\u00fe\7,\2\2\u00fe\u00ff\7\61\2\2\u00ff\u0100\7 \2\2\u0100\u0101"+ - "\5.\30\2\u0101\u0102\7!\2\2\u0102\u0104\3\2\2\2\u0103\u00f6\3\2\2\2\u0103"+ - "\u00f8\3\2\2\2\u0103\u00fd\3\2\2\2\u0104-\3\2\2\2\u0105\u0106\t\5\2\2"+ - "\u0106/\3\2\2\2\u0107\u010a\5\62\32\2\u0108\u010a\5\64\33\2\u0109\u0107"+ - "\3\2\2\2\u0109\u0108\3\2\2\2\u010a\61\3\2\2\2\u010b\u010c\t\6\2\2\u010c"+ - "\63\3\2\2\2\u010d\u010e\7 \2\2\u010e\u010f\7/\2\2\u010f\u0110\7#\2\2\u0110"+ - "\u0111\7/\2\2\u0111\u0112\7!\2\2\u0112\65\3\2\2\2\328;>S_iry\u0080\u008e"+ - "\u0095\u00a2\u00aa\u00b1\u00b6\u00bb\u00c0\u00c4\u00c9\u00d2\u00e5\u00f4"+ - "\u0103\u0109"; + "\4\32\t\32\4\33\t\33\4\34\t\34\3\2\3\2\5\2;\n\2\3\2\5\2>\n\2\3\2\5\2A"+ + "\n\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3"+ + "\6\3\6\3\6\5\6V\n\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\7\7`\n\7\f\7\16\7"+ + "c\13\7\3\b\3\b\3\b\3\b\3\t\3\t\3\t\5\tl\n\t\3\n\3\n\3\n\3\n\3\n\7\ns\n"+ + "\n\f\n\16\nv\13\n\3\13\3\13\3\f\3\f\5\f|\n\f\3\f\3\f\3\f\3\f\3\f\5\f\u0083"+ + "\n\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0091"+ + "\n\16\3\16\3\16\3\16\7\16\u0096\n\16\f\16\16\16\u0099\13\16\3\17\3\17"+ + "\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00a8\n\20"+ + "\3\20\5\20\u00ab\n\20\3\20\3\20\3\20\3\20\7\20\u00b1\n\20\f\20\16\20\u00b4"+ + "\13\20\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u00be\n\22\3\22\3"+ + "\22\3\22\7\22\u00c3\n\22\f\22\16\22\u00c6\13\22\3\23\3\23\5\23\u00ca\n"+ + "\23\3\23\3\23\3\23\5\23\u00cf\n\23\3\23\3\23\3\23\5\23\u00d4\n\23\3\23"+ + "\3\23\5\23\u00d8\n\23\3\23\3\23\3\23\5\23\u00dd\n\23\3\24\3\24\3\24\3"+ + "\24\3\24\7\24\u00e4\n\24\f\24\16\24\u00e7\13\24\3\25\3\25\3\25\3\26\3"+ + "\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u00f9"+ + "\n\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ + "\5\27\u0108\n\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ + "\3\30\3\30\5\30\u0117\n\30\3\31\3\31\3\32\3\32\5\32\u011d\n\32\3\33\3"+ + "\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\2\b\f\22\32\36\"&\35\2\4\6\b\n"+ + "\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\66\2\b\4\2\36\36((\3\2"+ + "\24\25\5\2%%))+,\3\2\t\20\3\2\21\22\3\2)+\2\u0131\28\3\2\2\2\4E\3\2\2"+ + "\2\6I\3\2\2\2\bM\3\2\2\2\nQ\3\2\2\2\fY\3\2\2\2\16d\3\2\2\2\20k\3\2\2\2"+ + "\22m\3\2\2\2\24w\3\2\2\2\26y\3\2\2\2\30\u0084\3\2\2\2\32\u0090\3\2\2\2"+ + "\34\u009a\3\2\2\2\36\u00aa\3\2\2\2 \u00b5\3\2\2\2\"\u00bd\3\2\2\2$\u00dc"+ + "\3\2\2\2&\u00de\3\2\2\2(\u00e8\3\2\2\2*\u00f8\3\2\2\2,\u0107\3\2\2\2."+ + "\u0116\3\2\2\2\60\u0118\3\2\2\2\62\u011c\3\2\2\2\64\u011e\3\2\2\2\66\u0120"+ + "\3\2\2\28:\5\4\3\29;\5\6\4\2:9\3\2\2\2:;\3\2\2\2;=\3\2\2\2<>\5\b\5\2="+ + "<\3\2\2\2=>\3\2\2\2>@\3\2\2\2?A\5\n\6\2@?\3\2\2\2@A\3\2\2\2AB\3\2\2\2"+ + "BC\5\22\n\2CD\7\2\2\3D\3\3\2\2\2EF\7\3\2\2FG\7(\2\2GH\7\62\2\2H\5\3\2"+ + "\2\2IJ\7\4\2\2JK\7(\2\2KL\7/\2\2L\7\3\2\2\2MN\7\5\2\2NO\7(\2\2OP\5\60"+ + "\31\2P\t\3\2\2\2QR\7\6\2\2RS\7(\2\2SU\7\32\2\2TV\5\f\7\2UT\3\2\2\2UV\3"+ + "\2\2\2VW\3\2\2\2WX\7\33\2\2X\13\3\2\2\2YZ\b\7\1\2Z[\5\16\b\2[a\3\2\2\2"+ + "\\]\f\3\2\2]^\7#\2\2^`\5\16\b\2_\\\3\2\2\2`c\3\2\2\2a_\3\2\2\2ab\3\2\2"+ + "\2b\r\3\2\2\2ca\3\2\2\2de\5\60\31\2ef\7$\2\2fg\5\20\t\2g\17\3\2\2\2hl"+ + "\7\7\2\2il\7/\2\2jl\5\60\31\2kh\3\2\2\2ki\3\2\2\2kj\3\2\2\2l\21\3\2\2"+ + "\2mn\b\n\1\2no\5\26\f\2ot\3\2\2\2pq\f\3\2\2qs\5\26\f\2rp\3\2\2\2sv\3\2"+ + "\2\2tr\3\2\2\2tu\3\2\2\2u\23\3\2\2\2vt\3\2\2\2wx\t\2\2\2x\25\3\2\2\2y"+ + "{\7\b\2\2z|\5\30\r\2{z\3\2\2\2{|\3\2\2\2|}\3\2\2\2}~\5\24\13\2~\177\7"+ + "\32\2\2\177\u0080\5\32\16\2\u0080\u0082\7\33\2\2\u0081\u0083\5\62\32\2"+ + "\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\27\3\2\2\2\u0084\u0085"+ + "\7\30\2\2\u0085\u0086\7\62\2\2\u0086\u0087\7\31\2\2\u0087\31\3\2\2\2\u0088"+ + "\u0089\b\16\1\2\u0089\u0091\5\34\17\2\u008a\u008b\7\30\2\2\u008b\u008c"+ + "\5\32\16\2\u008c\u008d\7\31\2\2\u008d\u0091\3\2\2\2\u008e\u008f\7\27\2"+ + "\2\u008f\u0091\5\32\16\3\u0090\u0088\3\2\2\2\u0090\u008a\3\2\2\2\u0090"+ + "\u008e\3\2\2\2\u0091\u0097\3\2\2\2\u0092\u0093\f\4\2\2\u0093\u0094\t\3"+ + "\2\2\u0094\u0096\5\32\16\5\u0095\u0092\3\2\2\2\u0096\u0099\3\2\2\2\u0097"+ + "\u0095\3\2\2\2\u0097\u0098\3\2\2\2\u0098\33\3\2\2\2\u0099\u0097\3\2\2"+ + "\2\u009a\u009b\5\36\20\2\u009b\u009c\7\23\2\2\u009c\u009d\5\36\20\2\u009d"+ + "\35\3\2\2\2\u009e\u009f\b\20\1\2\u009f\u00ab\5\"\22\2\u00a0\u00a1\7\30"+ + "\2\2\u00a1\u00a2\5\36\20\2\u00a2\u00a3\7\31\2\2\u00a3\u00ab\3\2\2\2\u00a4"+ + "\u00a5\7\62\2\2\u00a5\u00a7\7\30\2\2\u00a6\u00a8\5\36\20\2\u00a7\u00a6"+ + "\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8\u00a9\3\2\2\2\u00a9\u00ab\7\31\2\2"+ + "\u00aa\u009e\3\2\2\2\u00aa\u00a0\3\2\2\2\u00aa\u00a4\3\2\2\2\u00ab\u00b2"+ + "\3\2\2\2\u00ac\u00ad\f\4\2\2\u00ad\u00ae\5 \21\2\u00ae\u00af\5\36\20\5"+ + "\u00af\u00b1\3\2\2\2\u00b0\u00ac\3\2\2\2\u00b1\u00b4\3\2\2\2\u00b2\u00b0"+ + "\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\37\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b5"+ + "\u00b6\t\4\2\2\u00b6!\3\2\2\2\u00b7\u00b8\b\22\1\2\u00b8\u00be\5$\23\2"+ + "\u00b9\u00ba\7\30\2\2\u00ba\u00bb\5\"\22\2\u00bb\u00bc\7\31\2\2\u00bc"+ + "\u00be\3\2\2\2\u00bd\u00b7\3\2\2\2\u00bd\u00b9\3\2\2\2\u00be\u00c4\3\2"+ + "\2\2\u00bf\u00c0\f\3\2\2\u00c0\u00c1\7#\2\2\u00c1\u00c3\5\"\22\4\u00c2"+ + "\u00bf\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4\u00c2\3\2\2\2\u00c4\u00c5\3\2"+ + "\2\2\u00c5#\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c7\u00dd\7\7\2\2\u00c8\u00ca"+ + "\7%\2\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00ce\3\2\2\2\u00cb"+ + "\u00cf\7\60\2\2\u00cc\u00cd\7\60\2\2\u00cd\u00cf\7\61\2\2\u00ce\u00cb"+ + "\3\2\2\2\u00ce\u00cc\3\2\2\2\u00cf\u00dd\3\2\2\2\u00d0\u00dd\7/\2\2\u00d1"+ + "\u00dd\5\60\31\2\u00d2\u00d4\5&\24\2\u00d3\u00d2\3\2\2\2\u00d3\u00d4\3"+ + "\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00dd\t\5\2\2\u00d6\u00d8\5&\24\2\u00d7"+ + "\u00d6\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00dd\5*"+ + "\26\2\u00da\u00dd\5,\27\2\u00db\u00dd\5.\30\2\u00dc\u00c7\3\2\2\2\u00dc"+ + "\u00c9\3\2\2\2\u00dc\u00d0\3\2\2\2\u00dc\u00d1\3\2\2\2\u00dc\u00d3\3\2"+ + "\2\2\u00dc\u00d7\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc\u00db\3\2\2\2\u00dd"+ + "%\3\2\2\2\u00de\u00df\b\24\1\2\u00df\u00e0\5(\25\2\u00e0\u00e5\3\2\2\2"+ + "\u00e1\u00e2\f\3\2\2\u00e2\u00e4\5(\25\2\u00e3\u00e1\3\2\2\2\u00e4\u00e7"+ + "\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\'\3\2\2\2\u00e7"+ + "\u00e5\3\2\2\2\u00e8\u00e9\7\62\2\2\u00e9\u00ea\7&\2\2\u00ea)\3\2\2\2"+ + "\u00eb\u00ec\7\36\2\2\u00ec\u00f9\7\62\2\2\u00ed\u00ee\7\36\2\2\u00ee"+ + "\u00ef\7\62\2\2\u00ef\u00f0\7 \2\2\u00f0\u00f1\7\60\2\2\u00f1\u00f9\7"+ + "!\2\2\u00f2\u00f3\7\36\2\2\u00f3\u00f4\7\62\2\2\u00f4\u00f5\7 \2\2\u00f5"+ + "\u00f6\5\60\31\2\u00f6\u00f7\7!\2\2\u00f7\u00f9\3\2\2\2\u00f8\u00eb\3"+ + "\2\2\2\u00f8\u00ed\3\2\2\2\u00f8\u00f2\3\2\2\2\u00f9+\3\2\2\2\u00fa\u00fb"+ + "\7\"\2\2\u00fb\u0108\7\62\2\2\u00fc\u00fd\7\"\2\2\u00fd\u00fe\7\62\2\2"+ + "\u00fe\u00ff\7 \2\2\u00ff\u0100\7\60\2\2\u0100\u0108\7!\2\2\u0101\u0102"+ + "\7\"\2\2\u0102\u0103\7\62\2\2\u0103\u0104\7 \2\2\u0104\u0105\5\60\31\2"+ + "\u0105\u0106\7!\2\2\u0106\u0108\3\2\2\2\u0107\u00fa\3\2\2\2\u0107\u00fc"+ + "\3\2\2\2\u0107\u0101\3\2\2\2\u0108-\3\2\2\2\u0109\u010a\7-\2\2\u010a\u0117"+ + "\7\62\2\2\u010b\u010c\7-\2\2\u010c\u010d\7\62\2\2\u010d\u010e\7 \2\2\u010e"+ + "\u010f\7\60\2\2\u010f\u0117\7!\2\2\u0110\u0111\7-\2\2\u0111\u0112\7\62"+ + "\2\2\u0112\u0113\7 \2\2\u0113\u0114\5\60\31\2\u0114\u0115\7!\2\2\u0115"+ + "\u0117\3\2\2\2\u0116\u0109\3\2\2\2\u0116\u010b\3\2\2\2\u0116\u0110\3\2"+ + "\2\2\u0117/\3\2\2\2\u0118\u0119\t\6\2\2\u0119\61\3\2\2\2\u011a\u011d\5"+ + "\64\33\2\u011b\u011d\5\66\34\2\u011c\u011a\3\2\2\2\u011c\u011b\3\2\2\2"+ + "\u011d\63\3\2\2\2\u011e\u011f\t\7\2\2\u011f\65\3\2\2\2\u0120\u0121\7 "+ + "\2\2\u0121\u0122\7\60\2\2\u0122\u0123\7#\2\2\u0123\u0124\7\60\2\2\u0124"+ + "\u0125\7!\2\2\u0125\67\3\2\2\2\34:=@Uakt{\u0082\u0090\u0097\u00a7\u00aa"+ + "\u00b2\u00bd\u00c4\u00c9\u00ce\u00d3\u00d7\u00dc\u00e5\u00f8\u0107\u0116"+ + "\u011c"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 index bb7ee64..aae4ee5 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 @@ -31,7 +31,15 @@ item pred: expr PRED_OP expr; expr : val - | ID LPAREN expr RPAREN // Buit-in function call. + | LPAREN expr RPAREN + | expr mathOp expr + | ID LPAREN expr? RPAREN // Buit-in function call. + ; +mathOp + : MINUS + | PLUS + | STAR + | DEVIDE ; val : singleVal @@ -95,6 +103,9 @@ DOLLAR: '$'; TILDA: '~'; LBR: '['; RBR: ']'; +PLUS: '+'; +STAR: '*'; +DEVIDE: '/'; COMMA: ','; COLON: ':'; POUND: '#'; diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.interp index 0aa2601..0dca965 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.interp +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.interp @@ -23,6 +23,9 @@ null '~' '[' ']' +'+' +'*' +'/' ',' ':' '#' @@ -61,6 +64,9 @@ DOLLAR TILDA LBR RBR +PLUS +STAR +DEVIDE COMMA COLON POUND @@ -80,6 +86,7 @@ alias item pred expr +mathOp val singleVal tokQual @@ -91,4 +98,4 @@ qstring atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 37, 173, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 38, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 52, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 57, 10, 4, 12, 4, 14, 4, 60, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6 [...] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 40, 192, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 40, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 54, 10, 4, 3, 4, 3, 4, 3, 4, 7, 4, 59, 10, 4, 12, 4, 14, 4, 62, 11, 4, 3, 5, 3, 5, 3, 5, 3, [...] \ No newline at end of file diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.tokens index 7d51b56..041c397 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.tokens +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.tokens @@ -21,18 +21,21 @@ DOLLAR=20 TILDA=21 LBR=22 RBR=23 -COMMA=24 -COLON=25 -POUND=26 -MINUS=27 -DOT=28 -UNDERSCORE=29 -BOOL=30 -INT=31 -EXP=32 -ID=33 -WS=34 -ErrorCharacter=35 +PLUS=24 +STAR=25 +DEVIDE=26 +COMMA=27 +COLON=28 +POUND=29 +MINUS=30 +DOT=31 +UNDERSCORE=32 +BOOL=33 +INT=34 +EXP=35 +ID=36 +WS=37 +ErrorCharacter=38 'null'=1 'id'=2 'aliases'=3 @@ -53,9 +56,12 @@ ErrorCharacter=35 '~'=21 '['=22 ']'=23 -','=24 -':'=25 -'#'=26 -'-'=27 -'.'=28 -'_'=29 +'+'=24 +'*'=25 +'/'=26 +','=27 +':'=28 +'#'=29 +'-'=30 +'.'=31 +'_'=32 diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java index 6258388..26791e8 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java @@ -76,6 +76,18 @@ public class NCSynonymDslBaseListener implements NCSynonymDslListener { * * <p>The default implementation does nothing.</p> */ + @Override public void enterMathOp(NCSynonymDslParser.MathOpContext ctx) { } + /** + * {@inheritDoc} + * + * <p>The default implementation does nothing.</p> + */ + @Override public void exitMathOp(NCSynonymDslParser.MathOpContext ctx) { } + /** + * {@inheritDoc} + * + * <p>The default implementation does nothing.</p> + */ @Override public void enterVal(NCSynonymDslParser.ValContext ctx) { } /** * {@inheritDoc} diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.interp index b2c4a40..d3cec1e 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.interp +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.interp @@ -23,6 +23,9 @@ null '~' '[' ']' +'+' +'*' +'/' ',' ':' '#' @@ -61,6 +64,9 @@ DOLLAR TILDA LBR RBR +PLUS +STAR +DEVIDE COMMA COLON POUND @@ -98,6 +104,9 @@ DOLLAR TILDA LBR RBR +PLUS +STAR +DEVIDE COMMA COLON POUND @@ -119,4 +128,4 @@ mode names: DEFAULT_MODE atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 37, 255, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, [...] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 40, 267, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, [...] \ No newline at end of file diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java index 461fbae..3c4fbb0 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java @@ -20,8 +20,8 @@ public class NCSynonymDslLexer extends Lexer { 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, SQSTRING=10, DQSTRING=11, PRED_OP=12, AND=13, OR=14, EXCL=15, LPAREN=16, RPAREN=17, SQUOTE=18, DQUOTE=19, DOLLAR=20, TILDA=21, LBR=22, RBR=23, - COMMA=24, COLON=25, POUND=26, MINUS=27, DOT=28, UNDERSCORE=29, BOOL=30, - INT=31, EXP=32, ID=33, WS=34, ErrorCharacter=35; + PLUS=24, STAR=25, DEVIDE=26, COMMA=27, COLON=28, POUND=29, MINUS=30, DOT=31, + UNDERSCORE=32, BOOL=33, INT=34, EXP=35, ID=36, WS=37, ErrorCharacter=38; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -34,9 +34,9 @@ public class NCSynonymDslLexer extends Lexer { return new String[] { "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", "SQSTRING", "DQSTRING", "PRED_OP", "AND", "OR", "EXCL", "LPAREN", "RPAREN", - "SQUOTE", "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "COMMA", "COLON", - "POUND", "MINUS", "DOT", "UNDERSCORE", "BOOL", "INT", "EXP", "ID", "WS", - "ErrorCharacter" + "SQUOTE", "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "PLUS", "STAR", + "DEVIDE", "COMMA", "COLON", "POUND", "MINUS", "DOT", "UNDERSCORE", "BOOL", + "INT", "EXP", "ID", "WS", "ErrorCharacter" }; } public static final String[] ruleNames = makeRuleNames(); @@ -45,8 +45,8 @@ public class NCSynonymDslLexer extends Lexer { return new String[] { null, "'null'", "'id'", "'aliases'", "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'", "'value'", null, null, null, "'&&'", "'||'", - "'!'", "'('", "')'", "'''", "'\"'", "'$'", "'~'", "'['", "']'", "','", - "':'", "'#'", "'-'", "'.'", "'_'" + "'!'", "'('", "')'", "'''", "'\"'", "'$'", "'~'", "'['", "']'", "'+'", + "'*'", "'/'", "','", "':'", "'#'", "'-'", "'.'", "'_'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -54,8 +54,9 @@ public class NCSynonymDslLexer extends Lexer { return new String[] { null, null, null, null, null, null, null, null, null, null, "SQSTRING", "DQSTRING", "PRED_OP", "AND", "OR", "EXCL", "LPAREN", "RPAREN", "SQUOTE", - "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "COMMA", "COLON", "POUND", - "MINUS", "DOT", "UNDERSCORE", "BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter" + "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "PLUS", "STAR", "DEVIDE", + "COMMA", "COLON", "POUND", "MINUS", "DOT", "UNDERSCORE", "BOOL", "INT", + "EXP", "ID", "WS", "ErrorCharacter" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -117,89 +118,93 @@ public class NCSynonymDslLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2%\u00ff\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2(\u010b\b\1\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4\3"+ - "\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6"+ - "\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+ - "\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3"+ - "\13\7\13\u008a\n\13\f\13\16\13\u008d\13\13\3\13\3\13\3\f\3\f\7\f\u0093"+ - "\n\f\f\f\16\f\u0096\13\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+ - "\r\3\r\3\r\3\r\5\r\u00a7\n\r\3\16\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3"+ - "\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3"+ - "\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3"+ - "\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u00d6\n\37\3 \3 \3 \7"+ - " \u00db\n \f \16 \u00de\13 \5 \u00e0\n \3!\3!\6!\u00e4\n!\r!\16!\u00e5"+ - "\3\"\3\"\6\"\u00ea\n\"\r\"\16\"\u00eb\3\"\3\"\3\"\3\"\7\"\u00f2\n\"\f"+ - "\"\16\"\u00f5\13\"\3#\6#\u00f8\n#\r#\16#\u00f9\3#\3#\3$\3$\2\2%\3\3\5"+ - "\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21"+ - "!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!"+ - "A\"C#E$G%\3\2\13\3\2))\3\2$$\4\2>>@@\3\2\63;\4\2\62;aa\3\2\62;\4\2C\\"+ - "c|\5\2\62;C\\c|\5\2\13\f\16\17\"\"\2\u0111\2\3\3\2\2\2\2\5\3\2\2\2\2\7"+ - "\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2"+ - "\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2"+ - "\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2"+ - "\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2"+ - "\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2"+ - "\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\3I\3\2\2\2\5N\3\2\2\2\7Q"+ - "\3\2\2\2\tY\3\2\2\2\13b\3\2\2\2\ri\3\2\2\2\17p\3\2\2\2\21w\3\2\2\2\23"+ - "\u0081\3\2\2\2\25\u0087\3\2\2\2\27\u0090\3\2\2\2\31\u00a6\3\2\2\2\33\u00a8"+ - "\3\2\2\2\35\u00ab\3\2\2\2\37\u00ae\3\2\2\2!\u00b0\3\2\2\2#\u00b2\3\2\2"+ - "\2%\u00b4\3\2\2\2\'\u00b6\3\2\2\2)\u00b8\3\2\2\2+\u00ba\3\2\2\2-\u00bc"+ - "\3\2\2\2/\u00be\3\2\2\2\61\u00c0\3\2\2\2\63\u00c2\3\2\2\2\65\u00c4\3\2"+ - "\2\2\67\u00c6\3\2\2\29\u00c8\3\2\2\2;\u00ca\3\2\2\2=\u00d5\3\2\2\2?\u00df"+ - "\3\2\2\2A\u00e1\3\2\2\2C\u00e9\3\2\2\2E\u00f7\3\2\2\2G\u00fd\3\2\2\2I"+ - "J\7p\2\2JK\7w\2\2KL\7n\2\2LM\7n\2\2M\4\3\2\2\2NO\7k\2\2OP\7f\2\2P\6\3"+ - "\2\2\2QR\7c\2\2RS\7n\2\2ST\7k\2\2TU\7c\2\2UV\7u\2\2VW\7g\2\2WX\7u\2\2"+ - "X\b\3\2\2\2YZ\7u\2\2Z[\7v\2\2[\\\7c\2\2\\]\7t\2\2]^\7v\2\2^_\7k\2\2_`"+ - "\7f\2\2`a\7z\2\2a\n\3\2\2\2bc\7g\2\2cd\7p\2\2de\7f\2\2ef\7k\2\2fg\7f\2"+ - "\2gh\7z\2\2h\f\3\2\2\2ij\7r\2\2jk\7c\2\2kl\7t\2\2lm\7g\2\2mn\7p\2\2no"+ - "\7v\2\2o\16\3\2\2\2pq\7i\2\2qr\7t\2\2rs\7q\2\2st\7w\2\2tu\7r\2\2uv\7u"+ - "\2\2v\20\3\2\2\2wx\7c\2\2xy\7p\2\2yz\7e\2\2z{\7g\2\2{|\7u\2\2|}\7v\2\2"+ - "}~\7q\2\2~\177\7t\2\2\177\u0080\7u\2\2\u0080\22\3\2\2\2\u0081\u0082\7"+ - "x\2\2\u0082\u0083\7c\2\2\u0083\u0084\7n\2\2\u0084\u0085\7w\2\2\u0085\u0086"+ - "\7g\2\2\u0086\24\3\2\2\2\u0087\u008b\5%\23\2\u0088\u008a\n\2\2\2\u0089"+ - "\u0088\3\2\2\2\u008a\u008d\3\2\2\2\u008b\u0089\3\2\2\2\u008b\u008c\3\2"+ - "\2\2\u008c\u008e\3\2\2\2\u008d\u008b\3\2\2\2\u008e\u008f\5%\23\2\u008f"+ - "\26\3\2\2\2\u0090\u0094\5\'\24\2\u0091\u0093\n\3\2\2\u0092\u0091\3\2\2"+ - "\2\u0093\u0096\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0095\3\2\2\2\u0095\u0097"+ - "\3\2\2\2\u0096\u0094\3\2\2\2\u0097\u0098\5\'\24\2\u0098\30\3\2\2\2\u0099"+ - "\u009a\7?\2\2\u009a\u00a7\7?\2\2\u009b\u009c\7#\2\2\u009c\u00a7\7?\2\2"+ - "\u009d\u009e\7@\2\2\u009e\u00a7\7?\2\2\u009f\u00a0\7>\2\2\u00a0\u00a7"+ - "\7?\2\2\u00a1\u00a7\t\4\2\2\u00a2\u00a3\7B\2\2\u00a3\u00a7\7B\2\2\u00a4"+ - "\u00a5\7#\2\2\u00a5\u00a7\7B\2\2\u00a6\u0099\3\2\2\2\u00a6\u009b\3\2\2"+ - "\2\u00a6\u009d\3\2\2\2\u00a6\u009f\3\2\2\2\u00a6\u00a1\3\2\2\2\u00a6\u00a2"+ - "\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a7\32\3\2\2\2\u00a8\u00a9\7(\2\2\u00a9"+ - "\u00aa\7(\2\2\u00aa\34\3\2\2\2\u00ab\u00ac\7~\2\2\u00ac\u00ad\7~\2\2\u00ad"+ - "\36\3\2\2\2\u00ae\u00af\7#\2\2\u00af \3\2\2\2\u00b0\u00b1\7*\2\2\u00b1"+ - "\"\3\2\2\2\u00b2\u00b3\7+\2\2\u00b3$\3\2\2\2\u00b4\u00b5\7)\2\2\u00b5"+ - "&\3\2\2\2\u00b6\u00b7\7$\2\2\u00b7(\3\2\2\2\u00b8\u00b9\7&\2\2\u00b9*"+ - "\3\2\2\2\u00ba\u00bb\7\u0080\2\2\u00bb,\3\2\2\2\u00bc\u00bd\7]\2\2\u00bd"+ - ".\3\2\2\2\u00be\u00bf\7_\2\2\u00bf\60\3\2\2\2\u00c0\u00c1\7.\2\2\u00c1"+ - "\62\3\2\2\2\u00c2\u00c3\7<\2\2\u00c3\64\3\2\2\2\u00c4\u00c5\7%\2\2\u00c5"+ - "\66\3\2\2\2\u00c6\u00c7\7/\2\2\u00c78\3\2\2\2\u00c8\u00c9\7\60\2\2\u00c9"+ - ":\3\2\2\2\u00ca\u00cb\7a\2\2\u00cb<\3\2\2\2\u00cc\u00cd\7v\2\2\u00cd\u00ce"+ - "\7t\2\2\u00ce\u00cf\7w\2\2\u00cf\u00d6\7g\2\2\u00d0\u00d1\7h\2\2\u00d1"+ - "\u00d2\7c\2\2\u00d2\u00d3\7n\2\2\u00d3\u00d4\7u\2\2\u00d4\u00d6\7g\2\2"+ - "\u00d5\u00cc\3\2\2\2\u00d5\u00d0\3\2\2\2\u00d6>\3\2\2\2\u00d7\u00e0\7"+ - "\62\2\2\u00d8\u00dc\t\5\2\2\u00d9\u00db\t\6\2\2\u00da\u00d9\3\2\2\2\u00db"+ - "\u00de\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00e0\3\2"+ - "\2\2\u00de\u00dc\3\2\2\2\u00df\u00d7\3\2\2\2\u00df\u00d8\3\2\2\2\u00e0"+ - "@\3\2\2\2\u00e1\u00e3\59\35\2\u00e2\u00e4\t\7\2\2\u00e3\u00e2\3\2\2\2"+ - "\u00e4\u00e5\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6B\3"+ - "\2\2\2\u00e7\u00ea\5;\36\2\u00e8\u00ea\t\b\2\2\u00e9\u00e7\3\2\2\2\u00e9"+ - "\u00e8\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00e9\3\2\2\2\u00eb\u00ec\3\2"+ - "\2\2\u00ec\u00f3\3\2\2\2\u00ed\u00f2\t\t\2\2\u00ee\u00f2\5\63\32\2\u00ef"+ - "\u00f2\5\67\34\2\u00f0\u00f2\5;\36\2\u00f1\u00ed\3\2\2\2\u00f1\u00ee\3"+ - "\2\2\2\u00f1\u00ef\3\2\2\2\u00f1\u00f0\3\2\2\2\u00f2\u00f5\3\2\2\2\u00f3"+ - "\u00f1\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4D\3\2\2\2\u00f5\u00f3\3\2\2\2"+ - "\u00f6\u00f8\t\n\2\2\u00f7\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00f7"+ - "\3\2\2\2\u00f9\u00fa\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\b#\2\2\u00fc"+ - "F\3\2\2\2\u00fd\u00fe\13\2\2\2\u00feH\3\2\2\2\17\2\u008b\u0094\u00a6\u00d5"+ - "\u00dc\u00df\u00e5\u00e9\u00eb\u00f1\u00f3\u00f9\3\b\2\2"; + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\3\2\3\2\3\2\3\2\3\2\3\3\3"+ + "\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5"+ + "\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3"+ + "\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n"+ + "\3\n\3\n\3\n\3\13\3\13\7\13\u0090\n\13\f\13\16\13\u0093\13\13\3\13\3\13"+ + "\3\f\3\f\7\f\u0099\n\f\f\f\16\f\u009c\13\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r"+ + "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00ad\n\r\3\16\3\16\3\16\3\17\3\17"+ + "\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26"+ + "\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35"+ + "\3\35\3\36\3\36\3\37\3\37\3 \3 \3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ + "\3\"\5\"\u00e2\n\"\3#\3#\3#\7#\u00e7\n#\f#\16#\u00ea\13#\5#\u00ec\n#\3"+ + "$\3$\6$\u00f0\n$\r$\16$\u00f1\3%\3%\6%\u00f6\n%\r%\16%\u00f7\3%\3%\3%"+ + "\3%\7%\u00fe\n%\f%\16%\u0101\13%\3&\6&\u0104\n&\r&\16&\u0105\3&\3&\3\'"+ + "\3\'\2\2(\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33"+ + "\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67"+ + "\359\36;\37= ?!A\"C#E$G%I&K\'M(\3\2\13\3\2))\3\2$$\4\2>>@@\3\2\63;\4\2"+ + "\62;aa\3\2\62;\4\2C\\c|\5\2\62;C\\c|\5\2\13\f\16\17\"\"\2\u011d\2\3\3"+ + "\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2"+ + "\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3"+ + "\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2"+ + "%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61"+ + "\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2"+ + "\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I"+ + "\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\3O\3\2\2\2\5T\3\2\2\2\7W\3\2\2\2\t_\3\2"+ + "\2\2\13h\3\2\2\2\ro\3\2\2\2\17v\3\2\2\2\21}\3\2\2\2\23\u0087\3\2\2\2\25"+ + "\u008d\3\2\2\2\27\u0096\3\2\2\2\31\u00ac\3\2\2\2\33\u00ae\3\2\2\2\35\u00b1"+ + "\3\2\2\2\37\u00b4\3\2\2\2!\u00b6\3\2\2\2#\u00b8\3\2\2\2%\u00ba\3\2\2\2"+ + "\'\u00bc\3\2\2\2)\u00be\3\2\2\2+\u00c0\3\2\2\2-\u00c2\3\2\2\2/\u00c4\3"+ + "\2\2\2\61\u00c6\3\2\2\2\63\u00c8\3\2\2\2\65\u00ca\3\2\2\2\67\u00cc\3\2"+ + "\2\29\u00ce\3\2\2\2;\u00d0\3\2\2\2=\u00d2\3\2\2\2?\u00d4\3\2\2\2A\u00d6"+ + "\3\2\2\2C\u00e1\3\2\2\2E\u00eb\3\2\2\2G\u00ed\3\2\2\2I\u00f5\3\2\2\2K"+ + "\u0103\3\2\2\2M\u0109\3\2\2\2OP\7p\2\2PQ\7w\2\2QR\7n\2\2RS\7n\2\2S\4\3"+ + "\2\2\2TU\7k\2\2UV\7f\2\2V\6\3\2\2\2WX\7c\2\2XY\7n\2\2YZ\7k\2\2Z[\7c\2"+ + "\2[\\\7u\2\2\\]\7g\2\2]^\7u\2\2^\b\3\2\2\2_`\7u\2\2`a\7v\2\2ab\7c\2\2"+ + "bc\7t\2\2cd\7v\2\2de\7k\2\2ef\7f\2\2fg\7z\2\2g\n\3\2\2\2hi\7g\2\2ij\7"+ + "p\2\2jk\7f\2\2kl\7k\2\2lm\7f\2\2mn\7z\2\2n\f\3\2\2\2op\7r\2\2pq\7c\2\2"+ + "qr\7t\2\2rs\7g\2\2st\7p\2\2tu\7v\2\2u\16\3\2\2\2vw\7i\2\2wx\7t\2\2xy\7"+ + "q\2\2yz\7w\2\2z{\7r\2\2{|\7u\2\2|\20\3\2\2\2}~\7c\2\2~\177\7p\2\2\177"+ + "\u0080\7e\2\2\u0080\u0081\7g\2\2\u0081\u0082\7u\2\2\u0082\u0083\7v\2\2"+ + "\u0083\u0084\7q\2\2\u0084\u0085\7t\2\2\u0085\u0086\7u\2\2\u0086\22\3\2"+ + "\2\2\u0087\u0088\7x\2\2\u0088\u0089\7c\2\2\u0089\u008a\7n\2\2\u008a\u008b"+ + "\7w\2\2\u008b\u008c\7g\2\2\u008c\24\3\2\2\2\u008d\u0091\5%\23\2\u008e"+ + "\u0090\n\2\2\2\u008f\u008e\3\2\2\2\u0090\u0093\3\2\2\2\u0091\u008f\3\2"+ + "\2\2\u0091\u0092\3\2\2\2\u0092\u0094\3\2\2\2\u0093\u0091\3\2\2\2\u0094"+ + "\u0095\5%\23\2\u0095\26\3\2\2\2\u0096\u009a\5\'\24\2\u0097\u0099\n\3\2"+ + "\2\u0098\u0097\3\2\2\2\u0099\u009c\3\2\2\2\u009a\u0098\3\2\2\2\u009a\u009b"+ + "\3\2\2\2\u009b\u009d\3\2\2\2\u009c\u009a\3\2\2\2\u009d\u009e\5\'\24\2"+ + "\u009e\30\3\2\2\2\u009f\u00a0\7?\2\2\u00a0\u00ad\7?\2\2\u00a1\u00a2\7"+ + "#\2\2\u00a2\u00ad\7?\2\2\u00a3\u00a4\7@\2\2\u00a4\u00ad\7?\2\2\u00a5\u00a6"+ + "\7>\2\2\u00a6\u00ad\7?\2\2\u00a7\u00ad\t\4\2\2\u00a8\u00a9\7B\2\2\u00a9"+ + "\u00ad\7B\2\2\u00aa\u00ab\7#\2\2\u00ab\u00ad\7B\2\2\u00ac\u009f\3\2\2"+ + "\2\u00ac\u00a1\3\2\2\2\u00ac\u00a3\3\2\2\2\u00ac\u00a5\3\2\2\2\u00ac\u00a7"+ + "\3\2\2\2\u00ac\u00a8\3\2\2\2\u00ac\u00aa\3\2\2\2\u00ad\32\3\2\2\2\u00ae"+ + "\u00af\7(\2\2\u00af\u00b0\7(\2\2\u00b0\34\3\2\2\2\u00b1\u00b2\7~\2\2\u00b2"+ + "\u00b3\7~\2\2\u00b3\36\3\2\2\2\u00b4\u00b5\7#\2\2\u00b5 \3\2\2\2\u00b6"+ + "\u00b7\7*\2\2\u00b7\"\3\2\2\2\u00b8\u00b9\7+\2\2\u00b9$\3\2\2\2\u00ba"+ + "\u00bb\7)\2\2\u00bb&\3\2\2\2\u00bc\u00bd\7$\2\2\u00bd(\3\2\2\2\u00be\u00bf"+ + "\7&\2\2\u00bf*\3\2\2\2\u00c0\u00c1\7\u0080\2\2\u00c1,\3\2\2\2\u00c2\u00c3"+ + "\7]\2\2\u00c3.\3\2\2\2\u00c4\u00c5\7_\2\2\u00c5\60\3\2\2\2\u00c6\u00c7"+ + "\7-\2\2\u00c7\62\3\2\2\2\u00c8\u00c9\7,\2\2\u00c9\64\3\2\2\2\u00ca\u00cb"+ + "\7\61\2\2\u00cb\66\3\2\2\2\u00cc\u00cd\7.\2\2\u00cd8\3\2\2\2\u00ce\u00cf"+ + "\7<\2\2\u00cf:\3\2\2\2\u00d0\u00d1\7%\2\2\u00d1<\3\2\2\2\u00d2\u00d3\7"+ + "/\2\2\u00d3>\3\2\2\2\u00d4\u00d5\7\60\2\2\u00d5@\3\2\2\2\u00d6\u00d7\7"+ + "a\2\2\u00d7B\3\2\2\2\u00d8\u00d9\7v\2\2\u00d9\u00da\7t\2\2\u00da\u00db"+ + "\7w\2\2\u00db\u00e2\7g\2\2\u00dc\u00dd\7h\2\2\u00dd\u00de\7c\2\2\u00de"+ + "\u00df\7n\2\2\u00df\u00e0\7u\2\2\u00e0\u00e2\7g\2\2\u00e1\u00d8\3\2\2"+ + "\2\u00e1\u00dc\3\2\2\2\u00e2D\3\2\2\2\u00e3\u00ec\7\62\2\2\u00e4\u00e8"+ + "\t\5\2\2\u00e5\u00e7\t\6\2\2\u00e6\u00e5\3\2\2\2\u00e7\u00ea\3\2\2\2\u00e8"+ + "\u00e6\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2"+ + "\2\2\u00eb\u00e3\3\2\2\2\u00eb\u00e4\3\2\2\2\u00ecF\3\2\2\2\u00ed\u00ef"+ + "\5? \2\u00ee\u00f0\t\7\2\2\u00ef\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1"+ + "\u00ef\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2H\3\2\2\2\u00f3\u00f6\5A!\2\u00f4"+ + "\u00f6\t\b\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f4\3\2\2\2\u00f6\u00f7\3\2"+ + "\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00ff\3\2\2\2\u00f9"+ + "\u00fe\t\t\2\2\u00fa\u00fe\59\35\2\u00fb\u00fe\5=\37\2\u00fc\u00fe\5A"+ + "!\2\u00fd\u00f9\3\2\2\2\u00fd\u00fa\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd"+ + "\u00fc\3\2\2\2\u00fe\u0101\3\2\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2"+ + "\2\2\u0100J\3\2\2\2\u0101\u00ff\3\2\2\2\u0102\u0104\t\n\2\2\u0103\u0102"+ + "\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0103\3\2\2\2\u0105\u0106\3\2\2\2\u0106"+ + "\u0107\3\2\2\2\u0107\u0108\b&\2\2\u0108L\3\2\2\2\u0109\u010a\13\2\2\2"+ + "\u010aN\3\2\2\2\17\2\u0091\u009a\u00ac\u00e1\u00e8\u00eb\u00f1\u00f5\u00f7"+ + "\u00fd\u00ff\u0105\3\b\2\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.tokens index 7d51b56..041c397 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.tokens +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.tokens @@ -21,18 +21,21 @@ DOLLAR=20 TILDA=21 LBR=22 RBR=23 -COMMA=24 -COLON=25 -POUND=26 -MINUS=27 -DOT=28 -UNDERSCORE=29 -BOOL=30 -INT=31 -EXP=32 -ID=33 -WS=34 -ErrorCharacter=35 +PLUS=24 +STAR=25 +DEVIDE=26 +COMMA=27 +COLON=28 +POUND=29 +MINUS=30 +DOT=31 +UNDERSCORE=32 +BOOL=33 +INT=34 +EXP=35 +ID=36 +WS=37 +ErrorCharacter=38 'null'=1 'id'=2 'aliases'=3 @@ -53,9 +56,12 @@ ErrorCharacter=35 '~'=21 '['=22 ']'=23 -','=24 -':'=25 -'#'=26 -'-'=27 -'.'=28 -'_'=29 +'+'=24 +'*'=25 +'/'=26 +','=27 +':'=28 +'#'=29 +'-'=30 +'.'=31 +'_'=32 diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java index a22ba9a..146ef51 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java @@ -58,6 +58,16 @@ public interface NCSynonymDslListener extends ParseTreeListener { */ void exitExpr(NCSynonymDslParser.ExprContext ctx); /** + * Enter a parse tree produced by {@link NCSynonymDslParser#mathOp}. + * @param ctx the parse tree + */ + void enterMathOp(NCSynonymDslParser.MathOpContext ctx); + /** + * Exit a parse tree produced by {@link NCSynonymDslParser#mathOp}. + * @param ctx the parse tree + */ + void exitMathOp(NCSynonymDslParser.MathOpContext ctx); + /** * Enter a parse tree produced by {@link NCSynonymDslParser#val}. * @param ctx the parse tree */ diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java index ea65684..33047ef 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java @@ -20,16 +20,16 @@ public class NCSynonymDslParser extends Parser { 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, SQSTRING=10, DQSTRING=11, PRED_OP=12, AND=13, OR=14, EXCL=15, LPAREN=16, RPAREN=17, SQUOTE=18, DQUOTE=19, DOLLAR=20, TILDA=21, LBR=22, RBR=23, - COMMA=24, COLON=25, POUND=26, MINUS=27, DOT=28, UNDERSCORE=29, BOOL=30, - INT=31, EXP=32, ID=33, WS=34, ErrorCharacter=35; + PLUS=24, STAR=25, DEVIDE=26, COMMA=27, COLON=28, POUND=29, MINUS=30, DOT=31, + UNDERSCORE=32, BOOL=33, INT=34, EXP=35, ID=36, WS=37, ErrorCharacter=38; public static final int RULE_synonym = 0, RULE_alias = 1, RULE_item = 2, RULE_pred = 3, RULE_expr = 4, - RULE_val = 5, RULE_singleVal = 6, RULE_tokQual = 7, RULE_tokQualPart = 8, - RULE_tokMeta = 9, RULE_modelMeta = 10, RULE_intentMeta = 11, RULE_qstring = 12; + RULE_mathOp = 5, RULE_val = 6, RULE_singleVal = 7, RULE_tokQual = 8, RULE_tokQualPart = 9, + RULE_tokMeta = 10, RULE_modelMeta = 11, RULE_intentMeta = 12, RULE_qstring = 13; private static String[] makeRuleNames() { return new String[] { - "synonym", "alias", "item", "pred", "expr", "val", "singleVal", "tokQual", - "tokQualPart", "tokMeta", "modelMeta", "intentMeta", "qstring" + "synonym", "alias", "item", "pred", "expr", "mathOp", "val", "singleVal", + "tokQual", "tokQualPart", "tokMeta", "modelMeta", "intentMeta", "qstring" }; } public static final String[] ruleNames = makeRuleNames(); @@ -38,8 +38,8 @@ public class NCSynonymDslParser extends Parser { return new String[] { null, "'null'", "'id'", "'aliases'", "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'", "'value'", null, null, null, "'&&'", "'||'", - "'!'", "'('", "')'", "'''", "'\"'", "'$'", "'~'", "'['", "']'", "','", - "':'", "'#'", "'-'", "'.'", "'_'" + "'!'", "'('", "')'", "'''", "'\"'", "'$'", "'~'", "'['", "']'", "'+'", + "'*'", "'/'", "','", "':'", "'#'", "'-'", "'.'", "'_'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); @@ -47,8 +47,9 @@ public class NCSynonymDslParser extends Parser { return new String[] { null, null, null, null, null, null, null, null, null, null, "SQSTRING", "DQSTRING", "PRED_OP", "AND", "OR", "EXCL", "LPAREN", "RPAREN", "SQUOTE", - "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "COMMA", "COLON", "POUND", - "MINUS", "DOT", "UNDERSCORE", "BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter" + "DQUOTE", "DOLLAR", "TILDA", "LBR", "RBR", "PLUS", "STAR", "DEVIDE", + "COMMA", "COLON", "POUND", "MINUS", "DOT", "UNDERSCORE", "BOOL", "INT", + "EXP", "ID", "WS", "ErrorCharacter" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -130,21 +131,21 @@ public class NCSynonymDslParser extends Parser { SynonymContext _localctx = new SynonymContext(_ctx, getState()); enterRule(_localctx, 0, RULE_synonym); try { - setState(35); + setState(37); _errHandler.sync(this); switch (_input.LA(1)) { case LBR: enterOuterAlt(_localctx, 1); { - setState(26); + setState(28); alias(); - setState(27); + setState(29); match(LPAREN); - setState(28); + setState(30); item(0); - setState(29); + setState(31); match(RPAREN); - setState(30); + setState(32); match(EOF); } break; @@ -170,9 +171,9 @@ public class NCSynonymDslParser extends Parser { case ID: enterOuterAlt(_localctx, 2); { - setState(32); + setState(34); item(0); - setState(33); + setState(35); match(EOF); } break; @@ -215,11 +216,11 @@ public class NCSynonymDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(37); + setState(39); match(LBR); - setState(38); + setState(40); match(ID); - setState(39); + setState(41); match(RBR); } } @@ -279,36 +280,36 @@ public class NCSynonymDslParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(49); + setState(51); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { case 1: { - setState(42); + setState(44); pred(); } break; case 2: { - setState(43); + setState(45); match(LPAREN); - setState(44); + setState(46); item(0); - setState(45); + setState(47); match(RPAREN); } break; case 3: { - setState(47); + setState(49); match(EXCL); - setState(48); + setState(50); item(1); } break; } _ctx.stop = _input.LT(-1); - setState(56); + setState(58); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -319,9 +320,9 @@ public class NCSynonymDslParser extends Parser { { _localctx = new ItemContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_item); - setState(51); + setState(53); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(52); + setState(54); _la = _input.LA(1); if ( !(_la==AND || _la==OR) ) { _errHandler.recoverInline(this); @@ -331,12 +332,12 @@ public class NCSynonymDslParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(53); + setState(55); item(3); } } } - setState(58); + setState(60); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); } @@ -381,12 +382,12 @@ public class NCSynonymDslParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(59); - expr(); - setState(60); - match(PRED_OP); setState(61); - expr(); + expr(0); + setState(62); + match(PRED_OP); + setState(63); + expr(0); } } catch (RecognitionException re) { @@ -404,12 +405,18 @@ public class NCSynonymDslParser extends Parser { public ValContext val() { return getRuleContext(ValContext.class,0); } - public TerminalNode ID() { return getToken(NCSynonymDslParser.ID, 0); } public TerminalNode LPAREN() { return getToken(NCSynonymDslParser.LPAREN, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public List<ExprContext> expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); } public TerminalNode RPAREN() { return getToken(NCSynonymDslParser.RPAREN, 0); } + public TerminalNode ID() { return getToken(NCSynonymDslParser.ID, 0); } + public MathOpContext mathOp() { + return getRuleContext(MathOpContext.class,0); + } public ExprContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @@ -425,33 +432,136 @@ public class NCSynonymDslParser extends Parser { } public final ExprContext expr() throws RecognitionException { - ExprContext _localctx = new ExprContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_expr); + return expr(0); + } + + private ExprContext expr(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExprContext _localctx = new ExprContext(_ctx, _parentState); + ExprContext _prevctx = _localctx; + int _startState = 8; + enterRecursionRule(_localctx, 8, RULE_expr, _p); + int _la; try { - setState(69); + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(77); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { case 1: - enterOuterAlt(_localctx, 1); { - setState(63); + setState(66); val(0); } break; case 2: - enterOuterAlt(_localctx, 2); { - setState(64); + setState(67); + match(LPAREN); + setState(68); + expr(0); + setState(69); + match(RPAREN); + } + break; + case 3: + { + setState(71); match(ID); - setState(65); + setState(72); match(LPAREN); - setState(66); - expr(); - setState(67); + setState(74); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << SQSTRING) | (1L << DQSTRING) | (1L << LPAREN) | (1L << DOLLAR) | (1L << TILDA) | (1L << POUND) | (1L << MINUS) | (1L << BOOL) | (1L << INT) | (1L << ID))) != 0)) { + { + setState(73); + expr(0); + } + } + + setState(76); match(RPAREN); } break; } + _ctx.stop = _input.LT(-1); + setState(85); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExprContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(79); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(80); + mathOp(); + setState(81); + expr(3); + } + } + } + setState(87); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class MathOpContext extends ParserRuleContext { + public TerminalNode MINUS() { return getToken(NCSynonymDslParser.MINUS, 0); } + public TerminalNode PLUS() { return getToken(NCSynonymDslParser.PLUS, 0); } + public TerminalNode STAR() { return getToken(NCSynonymDslParser.STAR, 0); } + public TerminalNode DEVIDE() { return getToken(NCSynonymDslParser.DEVIDE, 0); } + public MathOpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mathOp; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).enterMathOp(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitMathOp(this); + } + } + + public final MathOpContext mathOp() throws RecognitionException { + MathOpContext _localctx = new MathOpContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_mathOp); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(88); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << STAR) | (1L << DEVIDE) | (1L << MINUS))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } } catch (RecognitionException re) { _localctx.exception = re; @@ -500,13 +610,13 @@ public class NCSynonymDslParser extends Parser { int _parentState = getState(); ValContext _localctx = new ValContext(_ctx, _parentState); ValContext _prevctx = _localctx; - int _startState = 10; - enterRecursionRule(_localctx, 10, RULE_val, _p); + int _startState = 12; + enterRecursionRule(_localctx, 12, RULE_val, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(77); + setState(96); _errHandler.sync(this); switch (_input.LA(1)) { case T__0: @@ -528,17 +638,17 @@ public class NCSynonymDslParser extends Parser { case INT: case ID: { - setState(72); + setState(91); singleVal(); } break; case LPAREN: { - setState(73); + setState(92); match(LPAREN); - setState(74); + setState(93); val(0); - setState(75); + setState(94); match(RPAREN); } break; @@ -546,9 +656,9 @@ public class NCSynonymDslParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(84); + setState(103); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -557,18 +667,18 @@ public class NCSynonymDslParser extends Parser { { _localctx = new ValContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_val); - setState(79); + setState(98); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(80); + setState(99); match(COMMA); - setState(81); + setState(100); val(2); } } } - setState(86); + setState(105); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,5,_ctx); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } } } @@ -619,46 +729,46 @@ public class NCSynonymDslParser extends Parser { public final SingleValContext singleVal() throws RecognitionException { SingleValContext _localctx = new SingleValContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_singleVal); + enterRule(_localctx, 14, RULE_singleVal); int _la; try { - setState(108); + setState(127); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(87); + setState(106); match(T__0); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(89); + setState(108); _errHandler.sync(this); _la = _input.LA(1); if (_la==MINUS) { { - setState(88); + setState(107); match(MINUS); } } - setState(94); + setState(113); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { case 1: { - setState(91); + setState(110); match(INT); } break; case 2: { - setState(92); + setState(111); match(INT); - setState(93); + setState(112); match(EXP); } break; @@ -668,31 +778,31 @@ public class NCSynonymDslParser extends Parser { case 3: enterOuterAlt(_localctx, 3); { - setState(96); + setState(115); match(BOOL); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(97); + setState(116); qstring(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(99); + setState(118); _errHandler.sync(this); _la = _input.LA(1); if (_la==ID) { { - setState(98); + setState(117); tokQual(0); } } - setState(101); + setState(120); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8))) != 0)) ) { _errHandler.recoverInline(this); @@ -707,31 +817,31 @@ public class NCSynonymDslParser extends Parser { case 6: enterOuterAlt(_localctx, 6); { - setState(103); + setState(122); _errHandler.sync(this); _la = _input.LA(1); if (_la==ID) { { - setState(102); + setState(121); tokQual(0); } } - setState(105); + setState(124); tokMeta(); } break; case 7: enterOuterAlt(_localctx, 7); { - setState(106); + setState(125); modelMeta(); } break; case 8: enterOuterAlt(_localctx, 8); { - setState(107); + setState(126); intentMeta(); } break; @@ -778,20 +888,20 @@ public class NCSynonymDslParser extends Parser { int _parentState = getState(); TokQualContext _localctx = new TokQualContext(_ctx, _parentState); TokQualContext _prevctx = _localctx; - int _startState = 14; - enterRecursionRule(_localctx, 14, RULE_tokQual, _p); + int _startState = 16; + enterRecursionRule(_localctx, 16, RULE_tokQual, _p); try { int _alt; enterOuterAlt(_localctx, 1); { { - setState(111); + setState(130); tokQualPart(); } _ctx.stop = _input.LT(-1); - setState(117); + setState(136); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,11,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -800,16 +910,16 @@ public class NCSynonymDslParser extends Parser { { _localctx = new TokQualContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_tokQual); - setState(113); + setState(132); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(114); + setState(133); tokQualPart(); } } } - setState(119); + setState(138); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,11,_ctx); + _alt = getInterpreter().adaptivePredict(_input,13,_ctx); } } } @@ -843,13 +953,13 @@ public class NCSynonymDslParser extends Parser { public final TokQualPartContext tokQualPart() throws RecognitionException { TokQualPartContext _localctx = new TokQualPartContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_tokQualPart); + enterRule(_localctx, 18, RULE_tokQualPart); try { enterOuterAlt(_localctx, 1); { - setState(120); + setState(139); match(ID); - setState(121); + setState(140); match(DOT); } } @@ -889,47 +999,47 @@ public class NCSynonymDslParser extends Parser { public final TokMetaContext tokMeta() throws RecognitionException { TokMetaContext _localctx = new TokMetaContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_tokMeta); + enterRule(_localctx, 20, RULE_tokMeta); try { - setState(136); + setState(155); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(123); + setState(142); match(TILDA); - setState(124); + setState(143); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(125); + setState(144); match(TILDA); - setState(126); + setState(145); match(ID); - setState(127); + setState(146); match(LBR); - setState(128); + setState(147); match(INT); - setState(129); + setState(148); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(130); + setState(149); match(TILDA); - setState(131); + setState(150); match(ID); - setState(132); + setState(151); match(LBR); - setState(133); + setState(152); qstring(); - setState(134); + setState(153); match(RBR); } break; @@ -971,47 +1081,47 @@ public class NCSynonymDslParser extends Parser { public final ModelMetaContext modelMeta() throws RecognitionException { ModelMetaContext _localctx = new ModelMetaContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_modelMeta); + enterRule(_localctx, 22, RULE_modelMeta); try { - setState(151); + setState(170); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(138); + setState(157); match(POUND); - setState(139); + setState(158); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(140); + setState(159); match(POUND); - setState(141); + setState(160); match(ID); - setState(142); + setState(161); match(LBR); - setState(143); + setState(162); match(INT); - setState(144); + setState(163); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(145); + setState(164); match(POUND); - setState(146); + setState(165); match(ID); - setState(147); + setState(166); match(LBR); - setState(148); + setState(167); qstring(); - setState(149); + setState(168); match(RBR); } break; @@ -1053,47 +1163,47 @@ public class NCSynonymDslParser extends Parser { public final IntentMetaContext intentMeta() throws RecognitionException { IntentMetaContext _localctx = new IntentMetaContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_intentMeta); + enterRule(_localctx, 24, RULE_intentMeta); try { - setState(166); + setState(185); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(153); + setState(172); match(DOLLAR); - setState(154); + setState(173); match(ID); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(155); + setState(174); match(DOLLAR); - setState(156); + setState(175); match(ID); - setState(157); + setState(176); match(LBR); - setState(158); + setState(177); match(INT); - setState(159); + setState(178); match(RBR); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(160); + setState(179); match(DOLLAR); - setState(161); + setState(180); match(ID); - setState(162); + setState(181); match(LBR); - setState(163); + setState(182); qstring(); - setState(164); + setState(183); match(RBR); } break; @@ -1129,12 +1239,12 @@ public class NCSynonymDslParser extends Parser { public final QstringContext qstring() throws RecognitionException { QstringContext _localctx = new QstringContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_qstring); + enterRule(_localctx, 26, RULE_qstring); int _la; try { enterOuterAlt(_localctx, 1); { - setState(168); + setState(187); _la = _input.LA(1); if ( !(_la==SQSTRING || _la==DQSTRING) ) { _errHandler.recoverInline(this); @@ -1161,9 +1271,11 @@ public class NCSynonymDslParser extends Parser { switch (ruleIndex) { case 2: return item_sempred((ItemContext)_localctx, predIndex); - case 5: + case 4: + return expr_sempred((ExprContext)_localctx, predIndex); + case 6: return val_sempred((ValContext)_localctx, predIndex); - case 7: + case 8: return tokQual_sempred((TokQualContext)_localctx, predIndex); } return true; @@ -1175,71 +1287,87 @@ public class NCSynonymDslParser extends Parser { } return true; } - private boolean val_sempred(ValContext _localctx, int predIndex) { + private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean val_sempred(ValContext _localctx, int predIndex) { + switch (predIndex) { + case 2: return precpred(_ctx, 1); } return true; } private boolean tokQual_sempred(TokQualContext _localctx, int predIndex) { switch (predIndex) { - case 2: + case 3: return precpred(_ctx, 1); } return true; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3%\u00ad\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3(\u00c0\4\2\t\2\4"+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ - "\13\4\f\t\f\4\r\t\r\4\16\t\16\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\5\2"+ - "&\n\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\64\n\4\3\4\3"+ - "\4\3\4\7\49\n\4\f\4\16\4<\13\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6"+ - "\5\6H\n\6\3\7\3\7\3\7\3\7\3\7\3\7\5\7P\n\7\3\7\3\7\3\7\7\7U\n\7\f\7\16"+ - "\7X\13\7\3\b\3\b\5\b\\\n\b\3\b\3\b\3\b\5\ba\n\b\3\b\3\b\3\b\5\bf\n\b\3"+ - "\b\3\b\5\bj\n\b\3\b\3\b\3\b\5\bo\n\b\3\t\3\t\3\t\3\t\3\t\7\tv\n\t\f\t"+ - "\16\ty\13\t\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3"+ - "\13\3\13\3\13\3\13\5\13\u008b\n\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ - "\3\f\3\f\3\f\3\f\5\f\u009a\n\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+ - "\3\r\3\r\3\r\5\r\u00a9\n\r\3\16\3\16\3\16\2\5\6\f\20\17\2\4\6\b\n\f\16"+ - "\20\22\24\26\30\32\2\5\3\2\17\20\3\2\4\13\3\2\f\r\2\u00b8\2%\3\2\2\2\4"+ - "\'\3\2\2\2\6\63\3\2\2\2\b=\3\2\2\2\nG\3\2\2\2\fO\3\2\2\2\16n\3\2\2\2\20"+ - "p\3\2\2\2\22z\3\2\2\2\24\u008a\3\2\2\2\26\u0099\3\2\2\2\30\u00a8\3\2\2"+ - "\2\32\u00aa\3\2\2\2\34\35\5\4\3\2\35\36\7\22\2\2\36\37\5\6\4\2\37 \7\23"+ - "\2\2 !\7\2\2\3!&\3\2\2\2\"#\5\6\4\2#$\7\2\2\3$&\3\2\2\2%\34\3\2\2\2%\""+ - "\3\2\2\2&\3\3\2\2\2\'(\7\30\2\2()\7#\2\2)*\7\31\2\2*\5\3\2\2\2+,\b\4\1"+ - "\2,\64\5\b\5\2-.\7\22\2\2./\5\6\4\2/\60\7\23\2\2\60\64\3\2\2\2\61\62\7"+ - "\21\2\2\62\64\5\6\4\3\63+\3\2\2\2\63-\3\2\2\2\63\61\3\2\2\2\64:\3\2\2"+ - "\2\65\66\f\4\2\2\66\67\t\2\2\2\679\5\6\4\58\65\3\2\2\29<\3\2\2\2:8\3\2"+ - "\2\2:;\3\2\2\2;\7\3\2\2\2<:\3\2\2\2=>\5\n\6\2>?\7\16\2\2?@\5\n\6\2@\t"+ - "\3\2\2\2AH\5\f\7\2BC\7#\2\2CD\7\22\2\2DE\5\n\6\2EF\7\23\2\2FH\3\2\2\2"+ - "GA\3\2\2\2GB\3\2\2\2H\13\3\2\2\2IJ\b\7\1\2JP\5\16\b\2KL\7\22\2\2LM\5\f"+ - "\7\2MN\7\23\2\2NP\3\2\2\2OI\3\2\2\2OK\3\2\2\2PV\3\2\2\2QR\f\3\2\2RS\7"+ - "\32\2\2SU\5\f\7\4TQ\3\2\2\2UX\3\2\2\2VT\3\2\2\2VW\3\2\2\2W\r\3\2\2\2X"+ - "V\3\2\2\2Yo\7\3\2\2Z\\\7\35\2\2[Z\3\2\2\2[\\\3\2\2\2\\`\3\2\2\2]a\7!\2"+ - "\2^_\7!\2\2_a\7\"\2\2`]\3\2\2\2`^\3\2\2\2ao\3\2\2\2bo\7 \2\2co\5\32\16"+ - "\2df\5\20\t\2ed\3\2\2\2ef\3\2\2\2fg\3\2\2\2go\t\3\2\2hj\5\20\t\2ih\3\2"+ - "\2\2ij\3\2\2\2jk\3\2\2\2ko\5\24\13\2lo\5\26\f\2mo\5\30\r\2nY\3\2\2\2n"+ - "[\3\2\2\2nb\3\2\2\2nc\3\2\2\2ne\3\2\2\2ni\3\2\2\2nl\3\2\2\2nm\3\2\2\2"+ - "o\17\3\2\2\2pq\b\t\1\2qr\5\22\n\2rw\3\2\2\2st\f\3\2\2tv\5\22\n\2us\3\2"+ - "\2\2vy\3\2\2\2wu\3\2\2\2wx\3\2\2\2x\21\3\2\2\2yw\3\2\2\2z{\7#\2\2{|\7"+ - "\36\2\2|\23\3\2\2\2}~\7\27\2\2~\u008b\7#\2\2\177\u0080\7\27\2\2\u0080"+ - "\u0081\7#\2\2\u0081\u0082\7\30\2\2\u0082\u0083\7!\2\2\u0083\u008b\7\31"+ - "\2\2\u0084\u0085\7\27\2\2\u0085\u0086\7#\2\2\u0086\u0087\7\30\2\2\u0087"+ - "\u0088\5\32\16\2\u0088\u0089\7\31\2\2\u0089\u008b\3\2\2\2\u008a}\3\2\2"+ - "\2\u008a\177\3\2\2\2\u008a\u0084\3\2\2\2\u008b\25\3\2\2\2\u008c\u008d"+ - "\7\34\2\2\u008d\u009a\7#\2\2\u008e\u008f\7\34\2\2\u008f\u0090\7#\2\2\u0090"+ - "\u0091\7\30\2\2\u0091\u0092\7!\2\2\u0092\u009a\7\31\2\2\u0093\u0094\7"+ - "\34\2\2\u0094\u0095\7#\2\2\u0095\u0096\7\30\2\2\u0096\u0097\5\32\16\2"+ - "\u0097\u0098\7\31\2\2\u0098\u009a\3\2\2\2\u0099\u008c\3\2\2\2\u0099\u008e"+ - "\3\2\2\2\u0099\u0093\3\2\2\2\u009a\27\3\2\2\2\u009b\u009c\7\26\2\2\u009c"+ - "\u00a9\7#\2\2\u009d\u009e\7\26\2\2\u009e\u009f\7#\2\2\u009f\u00a0\7\30"+ - "\2\2\u00a0\u00a1\7!\2\2\u00a1\u00a9\7\31\2\2\u00a2\u00a3\7\26\2\2\u00a3"+ - "\u00a4\7#\2\2\u00a4\u00a5\7\30\2\2\u00a5\u00a6\5\32\16\2\u00a6\u00a7\7"+ - "\31\2\2\u00a7\u00a9\3\2\2\2\u00a8\u009b\3\2\2\2\u00a8\u009d\3\2\2\2\u00a8"+ - "\u00a2\3\2\2\2\u00a9\31\3\2\2\2\u00aa\u00ab\t\4\2\2\u00ab\33\3\2\2\2\21"+ - "%\63:GOV[`einw\u008a\u0099\u00a8"; + "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3"+ + "\2\3\2\5\2(\n\2\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\66"+ + "\n\4\3\4\3\4\3\4\7\4;\n\4\f\4\16\4>\13\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3"+ + "\6\3\6\3\6\3\6\3\6\3\6\5\6M\n\6\3\6\5\6P\n\6\3\6\3\6\3\6\3\6\7\6V\n\6"+ + "\f\6\16\6Y\13\6\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\5\bc\n\b\3\b\3\b\3\b\7"+ + "\bh\n\b\f\b\16\bk\13\b\3\t\3\t\5\to\n\t\3\t\3\t\3\t\5\tt\n\t\3\t\3\t\3"+ + "\t\5\ty\n\t\3\t\3\t\5\t}\n\t\3\t\3\t\3\t\5\t\u0082\n\t\3\n\3\n\3\n\3\n"+ + "\3\n\7\n\u0089\n\n\f\n\16\n\u008c\13\n\3\13\3\13\3\13\3\f\3\f\3\f\3\f"+ + "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f\u009e\n\f\3\r\3\r\3\r\3\r\3\r"+ + "\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5\r\u00ad\n\r\3\16\3\16\3\16\3\16\3\16"+ + "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00bc\n\16\3\17\3\17\3\17"+ + "\2\6\6\n\16\22\20\2\4\6\b\n\f\16\20\22\24\26\30\32\34\2\6\3\2\17\20\4"+ + "\2\32\34 \3\2\4\13\3\2\f\r\2\u00cd\2\'\3\2\2\2\4)\3\2\2\2\6\65\3\2\2"+ + "\2\b?\3\2\2\2\nO\3\2\2\2\fZ\3\2\2\2\16b\3\2\2\2\20\u0081\3\2\2\2\22\u0083"+ + "\3\2\2\2\24\u008d\3\2\2\2\26\u009d\3\2\2\2\30\u00ac\3\2\2\2\32\u00bb\3"+ + "\2\2\2\34\u00bd\3\2\2\2\36\37\5\4\3\2\37 \7\22\2\2 !\5\6\4\2!\"\7\23\2"+ + "\2\"#\7\2\2\3#(\3\2\2\2$%\5\6\4\2%&\7\2\2\3&(\3\2\2\2\'\36\3\2\2\2\'$"+ + "\3\2\2\2(\3\3\2\2\2)*\7\30\2\2*+\7&\2\2+,\7\31\2\2,\5\3\2\2\2-.\b\4\1"+ + "\2.\66\5\b\5\2/\60\7\22\2\2\60\61\5\6\4\2\61\62\7\23\2\2\62\66\3\2\2\2"+ + "\63\64\7\21\2\2\64\66\5\6\4\3\65-\3\2\2\2\65/\3\2\2\2\65\63\3\2\2\2\66"+ + "<\3\2\2\2\678\f\4\2\289\t\2\2\29;\5\6\4\5:\67\3\2\2\2;>\3\2\2\2<:\3\2"+ + "\2\2<=\3\2\2\2=\7\3\2\2\2><\3\2\2\2?@\5\n\6\2@A\7\16\2\2AB\5\n\6\2B\t"+ + "\3\2\2\2CD\b\6\1\2DP\5\16\b\2EF\7\22\2\2FG\5\n\6\2GH\7\23\2\2HP\3\2\2"+ + "\2IJ\7&\2\2JL\7\22\2\2KM\5\n\6\2LK\3\2\2\2LM\3\2\2\2MN\3\2\2\2NP\7\23"+ + "\2\2OC\3\2\2\2OE\3\2\2\2OI\3\2\2\2PW\3\2\2\2QR\f\4\2\2RS\5\f\7\2ST\5\n"+ + "\6\5TV\3\2\2\2UQ\3\2\2\2VY\3\2\2\2WU\3\2\2\2WX\3\2\2\2X\13\3\2\2\2YW\3"+ + "\2\2\2Z[\t\3\2\2[\r\3\2\2\2\\]\b\b\1\2]c\5\20\t\2^_\7\22\2\2_`\5\16\b"+ + "\2`a\7\23\2\2ac\3\2\2\2b\\\3\2\2\2b^\3\2\2\2ci\3\2\2\2de\f\3\2\2ef\7\35"+ + "\2\2fh\5\16\b\4gd\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2j\17\3\2\2\2ki"+ + "\3\2\2\2l\u0082\7\3\2\2mo\7 \2\2nm\3\2\2\2no\3\2\2\2os\3\2\2\2pt\7$\2"+ + "\2qr\7$\2\2rt\7%\2\2sp\3\2\2\2sq\3\2\2\2t\u0082\3\2\2\2u\u0082\7#\2\2"+ + "v\u0082\5\34\17\2wy\5\22\n\2xw\3\2\2\2xy\3\2\2\2yz\3\2\2\2z\u0082\t\4"+ + "\2\2{}\5\22\n\2|{\3\2\2\2|}\3\2\2\2}~\3\2\2\2~\u0082\5\26\f\2\177\u0082"+ + "\5\30\r\2\u0080\u0082\5\32\16\2\u0081l\3\2\2\2\u0081n\3\2\2\2\u0081u\3"+ + "\2\2\2\u0081v\3\2\2\2\u0081x\3\2\2\2\u0081|\3\2\2\2\u0081\177\3\2\2\2"+ + "\u0081\u0080\3\2\2\2\u0082\21\3\2\2\2\u0083\u0084\b\n\1\2\u0084\u0085"+ + "\5\24\13\2\u0085\u008a\3\2\2\2\u0086\u0087\f\3\2\2\u0087\u0089\5\24\13"+ + "\2\u0088\u0086\3\2\2\2\u0089\u008c\3\2\2\2\u008a\u0088\3\2\2\2\u008a\u008b"+ + "\3\2\2\2\u008b\23\3\2\2\2\u008c\u008a\3\2\2\2\u008d\u008e\7&\2\2\u008e"+ + "\u008f\7!\2\2\u008f\25\3\2\2\2\u0090\u0091\7\27\2\2\u0091\u009e\7&\2\2"+ + "\u0092\u0093\7\27\2\2\u0093\u0094\7&\2\2\u0094\u0095\7\30\2\2\u0095\u0096"+ + "\7$\2\2\u0096\u009e\7\31\2\2\u0097\u0098\7\27\2\2\u0098\u0099\7&\2\2\u0099"+ + "\u009a\7\30\2\2\u009a\u009b\5\34\17\2\u009b\u009c\7\31\2\2\u009c\u009e"+ + "\3\2\2\2\u009d\u0090\3\2\2\2\u009d\u0092\3\2\2\2\u009d\u0097\3\2\2\2\u009e"+ + "\27\3\2\2\2\u009f\u00a0\7\37\2\2\u00a0\u00ad\7&\2\2\u00a1\u00a2\7\37\2"+ + "\2\u00a2\u00a3\7&\2\2\u00a3\u00a4\7\30\2\2\u00a4\u00a5\7$\2\2\u00a5\u00ad"+ + "\7\31\2\2\u00a6\u00a7\7\37\2\2\u00a7\u00a8\7&\2\2\u00a8\u00a9\7\30\2\2"+ + "\u00a9\u00aa\5\34\17\2\u00aa\u00ab\7\31\2\2\u00ab\u00ad\3\2\2\2\u00ac"+ + "\u009f\3\2\2\2\u00ac\u00a1\3\2\2\2\u00ac\u00a6\3\2\2\2\u00ad\31\3\2\2"+ + "\2\u00ae\u00af\7\26\2\2\u00af\u00bc\7&\2\2\u00b0\u00b1\7\26\2\2\u00b1"+ + "\u00b2\7&\2\2\u00b2\u00b3\7\30\2\2\u00b3\u00b4\7$\2\2\u00b4\u00bc\7\31"+ + "\2\2\u00b5\u00b6\7\26\2\2\u00b6\u00b7\7&\2\2\u00b7\u00b8\7\30\2\2\u00b8"+ + "\u00b9\5\34\17\2\u00b9\u00ba\7\31\2\2\u00ba\u00bc\3\2\2\2\u00bb\u00ae"+ + "\3\2\2\2\u00bb\u00b0\3\2\2\2\u00bb\u00b5\3\2\2\2\u00bc\33\3\2\2\2\u00bd"+ + "\u00be\t\5\2\2\u00be\35\3\2\2\2\23\'\65<LOWbinsx|\u0081\u008a\u009d\u00ac"+ + "\u00bb"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static {
