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 {

Reply via email to