WIP.
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4 b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4
index 038f193..613dfc5 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4
@@ -72,8 +72,19 @@
term: 'term' termId? termEq ((LBRACE vars? expr RBRACE) | mtdDecl) minMax?;
mtdRef: javaFqn? POUND id;
javaFqn
+ : javaClass
+ | javaFqn DOT javaClass
+ ;
+javaClass
: id
- | javaFqn DOT id
+ // We need to include keywords to make sure they don't conflict.
+ | IMPORT
+ | INTENT
+ | ORDERED
+ | FLOW
+ | META
+ | TERM
+ | FRAG
;
termId: LPAR id RPAR;
expr
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.interp
index 459779b..f3a74b6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.interp
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.interp
@@ -135,6 +135,7 @@
term
mtdRef
javaFqn
+javaClass
termId
expr
vars
@@ -149,4 +150,4 @@
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 54, 365, 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, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 3, 2, 3, 2, 3, 2, 3, 3, 5, 3, 81, 10, 3, 3, 3, 3, 3, 5, 3, 85, 10, 3, 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, 5, 7, 5, 100, 10, 5, 12, 5, 14, 5, 103, 11, 5, 3, 6, 3, 6, 3, 6, 5, 6, 108, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 126, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 135, 10, 12, 3, 12, 5, 12, 138, 10, 12, 3, 12, 5, 12, 141, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 161, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 171, 10, 18, 12, 18, 14, 18, 174, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 180, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 188, 10, 20, 3, 20, 3, 20, 5, 20, 192, 10, 20, 3, 20, 5, 20, 195, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 201, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 207, 10, 21, 12, 21, 14, 21, 210, 11, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 216, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 223, 10, 22, 12, 22, 14, 22, 226, 11, 22, 3, 23, 3, 23, 5, 23, 230, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 236, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 241, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 247, 10, 25, 3, 25, 5, 25, 250, 10, 25, 3, 26, 5, 26, 253, 10, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 264, 10, 27, 12, 27, 14, 27, 267, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 284, 10, 29, 3, 29, 3, 29, 3, 29, 5, 29, 289, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 306, 10, 29, 12, 29, 14, 29, 309, 11, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 316, 10, 30, 12, 30, 14, 30, 319, 11, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 332, 10, 32, 12, 32, 14, 32, 335, 11, 32, 3, 33, 3, 33, 3, 33, 5, 33, 340, 10, 33, 3, 33, 5, 33, 343, 10, 33, 3, 33, 3, 33, 5, 33, 347, 10, 33, 3, 34, 3, 34, 3, 35, 3, 35, 5, 35, 353, 10, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 2, 8, 8, 42, 52, 56, 58, 62, 39, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 2, 12, 4, 2, 31, 31, 40, 40, 4, 2, 24, 24, 37, 37, 3, 2, 43, 45, 4, 2, 37, 37, 41, 41, 3, 2, 17, 20, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 11, 12, 3, 2, 41, 43, 4, 2, 3, 3, 51, 51, 2, 375, 2, 76, 3, 2, 2, 2, 4, 80, 3, 2, 2, 2, 6, 90, 3, 2, 2, 2, 8, 94, 3, 2, 2, 2, 10, 107, 3, 2, 2, 2, 12, 109, 3, 2, 2, 2, 14, 114, 3, 2, 2, 2, 16, 117, 3, 2, 2, 2, 18, 121, 3, 2, 2, 2, 20, 129, 3, 2, 2, 2, 22, 132, 3, 2, 2, 2, 24, 144, 3, 2, 2, 2, 26, 148, 3, 2, 2, 2, 28, 152, 3, 2, 2, 2, 30, 156, 3, 2, 2, 2, 32, 162, 3, 2, 2, 2, 34, 179, 3, 2, 2, 2, 36, 181, 3, 2, 2, 2, 38, 200, 3, 2, 2, 2, 40, 215, 3, 2, 2, 2, 42, 217, 3, 2, 2, 2, 44, 229, 3, 2, 2, 2, 46, 231, 3, 2, 2, 2, 48, 233, 3, 2, 2, 2, 50, 252, 3, 2, 2, 2, 52, 257, 3, 2, 2, 2, 54, 268, 3, 2, 2, 2, 56, 288, 3, 2, 2, 2, 58, 310, 3, 2, 2, 2, 60, 320, 3, 2, 2, 2, 62, 325, 3, 2, 2, 2, 64, 346, 3, 2, 2, 2, 66, 348, 3, 2, 2, 2, 68, 352, 3, 2, 2, 2, 70, 354, 3, 2, 2, 2, 72, 356, 3, 2, 2, 2, 74, 362, 3, 2, 2, 2, 76, 77, 5, 8, 5, 2, 77, 78, 7, 2, 2, 3, 78, 3, 3, 2, 2, 2, 79, 81, 5, 6, 4, 2, 80, 79, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 82, 3, 2, 2, 2, 82, 84, 7, 27, 2, 2, 83, 85, 5, 58, 30, 2, 84, 83, 3, 2, 2, 2, 84, 85, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 87, 5, 56, 29, 2, 87, 88, 7, 28, 2, 2, 88, 89, 7, 2, 2, 3, 89, 5, 3, 2, 2, 2, 90, 91, 7, 32, 2, 2, 91, 92, 5, 74, 38, 2, 92, 93, 7, 33, 2, 2, 93, 7, 3, 2, 2, 2, 94, 95, 8, 5, 1, 2, 95, 96, 5, 10, 6, 2, 96, 101, 3, 2, 2, 2, 97, 98, 12, 3, 2, 2, 98, 100, 5, 10, 6, 2, 99, 97, 3, 2, 2, 2, 100, 103, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 101, 102, 3, 2, 2, 2, 102, 9, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 104, 108, 5, 22, 12, 2, 105, 108, 5, 14, 8, 2, 106, 108, 5, 12, 7, 2, 107, 104, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 106, 3, 2, 2, 2, 108, 11, 3, 2, 2, 2, 109, 110, 7, 4, 2, 2, 110, 111, 7, 25, 2, 2, 111, 112, 5, 66, 34, 2, 112, 113, 7, 26, 2, 2, 113, 13, 3, 2, 2, 2, 114, 115, 5, 16, 9, 2, 115, 116, 5, 42, 22, 2, 116, 15, 3, 2, 2, 2, 117, 118, 7, 10, 2, 2, 118, 119, 7, 40, 2, 2, 119, 120, 5, 74, 38, 2, 120, 17, 3, 2, 2, 2, 121, 122, 7, 10, 2, 2, 122, 123, 7, 25, 2, 2, 123, 125, 5, 74, 38, 2, 124, 126, 5, 20, 11, 2, 125, 124, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 127, 3, 2, 2, 2, 127, 128, 7, 26, 2, 2, 128, 19, 3, 2, 2, 2, 129, 130, 7, 35, 2, 2, 130, 131, 5, 34, 18, 2, 131, 21, 3, 2, 2, 2, 132, 134, 5, 24, 13, 2, 133, 135, 5, 26, 14, 2, 134, 133, 3, 2, 2, 2, 134, 135, 3, 2, 2, 2, 135, 137, 3, 2, 2, 2, 136, 138, 5, 30, 16, 2, 137, 136, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 140, 3, 2, 2, 2, 139, 141, 5, 32, 17, 2, 140, 139, 3, 2, 2, 2, 140, 141, 3, 2, 2, 2, 141, 142, 3, 2, 2, 2, 142, 143, 5, 42, 22, 2, 143, 23, 3, 2, 2, 2, 144, 145, 7, 5, 2, 2, 145, 146, 7, 40, 2, 2, 146, 147, 5, 74, 38, 2, 147, 25, 3, 2, 2, 2, 148, 149, 7, 6, 2, 2, 149, 150, 7, 40, 2, 2, 150, 151, 7, 13, 2, 2, 151, 27, 3, 2, 2, 2, 152, 153, 7, 44, 2, 2, 153, 154, 5, 50, 26, 2, 154, 155, 7, 44, 2, 2, 155, 29, 3, 2, 2, 2, 156, 157, 7, 7, 2, 2, 157, 160, 7, 40, 2, 2, 158, 161, 5, 66, 34, 2, 159, 161, 5, 28, 15, 2, 160, 158, 3, 2, 2, 2, 160, 159, 3, 2, 2, 2, 161, 31, 3, 2, 2, 2, 162, 163, 7, 8, 2, 2, 163, 164, 7, 40, 2, 2, 164, 165, 5, 34, 18, 2, 165, 33, 3, 2, 2, 2, 166, 167, 7, 27, 2, 2, 167, 172, 5, 36, 19, 2, 168, 169, 7, 35, 2, 2, 169, 171, 5, 36, 19, 2, 170, 168, 3, 2, 2, 2, 171, 174, 3, 2, 2, 2, 172, 170, 3, 2, 2, 2, 172, 173, 3, 2, 2, 2, 173, 175, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 175, 176, 7, 28, 2, 2, 176, 180, 3, 2, 2, 2, 177, 178, 7, 27, 2, 2, 178, 180, 7, 28, 2, 2, 179, 166, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 180, 35, 3, 2, 2, 2, 181, 182, 5, 66, 34, 2, 182, 183, 7, 36, 2, 2, 183, 184, 5, 38, 20, 2, 184, 37, 3, 2, 2, 2, 185, 201, 5, 66, 34, 2, 186, 188, 7, 37, 2, 2, 187, 186, 3, 2, 2, 2, 187, 188, 3, 2, 2, 2, 188, 189, 3, 2, 2, 2, 189, 191, 7, 48, 2, 2, 190, 192, 7, 49, 2, 2, 191, 190, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 194, 3, 2, 2, 2, 193, 195, 7, 50, 2, 2, 194, 193, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 201, 3, 2, 2, 2, 196, 201, 5, 34, 18, 2, 197, 201, 5, 40, 21, 2, 198, 201, 7, 13, 2, 2, 199, 201, 7, 14, 2, 2, 200, 185, 3, 2, 2, 2, 200, 187, 3, 2, 2, 2, 200, 196, 3, 2, 2, 2, 200, 197, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 199, 3, 2, 2, 2, 201, 39, 3, 2, 2, 2, 202, 203, 7, 32, 2, 2, 203, 208, 5, 38, 20, 2, 204, 205, 7, 35, 2, 2, 205, 207, 5, 38, 20, 2, 206, 204, 3, 2, 2, 2, 207, 210, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, 209, 3, 2, 2, 2, 209, 211, 3, 2, 2, 2, 210, 208, 3, 2, 2, 2, 211, 212, 7, 33, 2, 2, 212, 216, 3, 2, 2, 2, 213, 214, 7, 32, 2, 2, 214, 216, 7, 33, 2, 2, 215, 202, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 216, 41, 3, 2, 2, 2, 217, 218, 8, 22, 1, 2, 218, 219, 5, 44, 23, 2, 219, 224, 3, 2, 2, 2, 220, 221, 12, 3, 2, 2, 221, 223, 5, 44, 23, 2, 222, 220, 3, 2, 2, 2, 223, 226, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 43, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 227, 230, 5, 48, 25, 2, 228, 230, 5, 18, 10, 2, 229, 227, 3, 2, 2, 2, 229, 228, 3, 2, 2, 2, 230, 45, 3, 2, 2, 2, 231, 232, 9, 2, 2, 2, 232, 47, 3, 2, 2, 2, 233, 235, 7, 9, 2, 2, 234, 236, 5, 54, 28, 2, 235, 234, 3, 2, 2, 2, 235, 236, 3, 2, 2, 2, 236, 237, 3, 2, 2, 2, 237, 246, 5, 46, 24, 2, 238, 240, 7, 27, 2, 2, 239, 241, 5, 58, 30, 2, 240, 239, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 243, 5, 56, 29, 2, 243, 244, 7, 28, 2, 2, 244, 247, 3, 2, 2, 2, 245, 247, 5, 28, 15, 2, 246, 238, 3, 2, 2, 2, 246, 245, 3, 2, 2, 2, 247, 249, 3, 2, 2, 2, 248, 250, 5, 68, 35, 2, 249, 248, 3, 2, 2, 2, 249, 250, 3, 2, 2, 2, 250, 49, 3, 2, 2, 2, 251, 253, 5, 52, 27, 2, 252, 251, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 7, 34, 2, 2, 255, 256, 5, 74, 38, 2, 256, 51, 3, 2, 2, 2, 257, 258, 8, 27, 1, 2, 258, 259, 5, 74, 38, 2, 259, 265, 3, 2, 2, 2, 260, 261, 12, 3, 2, 2, 261, 262, 7, 38, 2, 2, 262, 264, 5, 74, 38, 2, 263, 260, 3, 2, 2, 2, 264, 267, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 266, 53, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 268, 269, 7, 25, 2, 2, 269, 270, 5, 74, 38, 2, 270, 271, 7, 26, 2, 2, 271, 55, 3, 2, 2, 2, 272, 273, 8, 29, 1, 2, 273, 274, 9, 3, 2, 2, 274, 289, 5, 56, 29, 12, 275, 276, 7, 25, 2, 2, 276, 277, 5, 56, 29, 2, 277, 278, 7, 26, 2, 2, 278, 289, 3, 2, 2, 2, 279, 289, 5, 64, 33, 2, 280, 281, 7, 3, 2, 2, 281, 283, 7, 25, 2, 2, 282, 284, 5, 62, 32, 2, 283, 282, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 289, 7, 26, 2, 2, 286, 287, 7, 46, 2, 2, 287, 289, 5, 74, 38, 2, 288, 272, 3, 2, 2, 2, 288, 275, 3, 2, 2, 2, 288, 279, 3, 2, 2, 2, 288, 280, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 289, 307, 3, 2, 2, 2, 290, 291, 12, 10, 2, 2, 291, 292, 9, 4, 2, 2, 292, 306, 5, 56, 29, 11, 293, 294, 12, 9, 2, 2, 294, 295, 9, 5, 2, 2, 295, 306, 5, 56, 29, 10, 296, 297, 12, 8, 2, 2, 297, 298, 9, 6, 2, 2, 298, 306, 5, 56, 29, 9, 299, 300, 12, 7, 2, 2, 300, 301, 9, 7, 2, 2, 301, 306, 5, 56, 29, 8, 302, 303, 12, 6, 2, 2, 303, 304, 9, 8, 2, 2, 304, 306, 5, 56, 29, 7, 305, 290, 3, 2, 2, 2, 305, 293, 3, 2, 2, 2, 305, 296, 3, 2, 2, 2, 305, 299, 3, 2, 2, 2, 305, 302, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 57, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 310, 311, 8, 30, 1, 2, 311, 312, 5, 60, 31, 2, 312, 317, 3, 2, 2, 2, 313, 314, 12, 3, 2, 2, 314, 316, 5, 60, 31, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 59, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 7, 46, 2, 2, 321, 322, 5, 74, 38, 2, 322, 323, 7, 40, 2, 2, 323, 324, 5, 56, 29, 2, 324, 61, 3, 2, 2, 2, 325, 326, 8, 32, 1, 2, 326, 327, 5, 56, 29, 2, 327, 333, 3, 2, 2, 2, 328, 329, 12, 3, 2, 2, 329, 330, 7, 35, 2, 2, 330, 332, 5, 56, 29, 2, 331, 328, 3, 2, 2, 2, 332, 335, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 63, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 347, 7, 14, 2, 2, 337, 339, 7, 48, 2, 2, 338, 340, 7, 49, 2, 2, 339, 338, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 343, 7, 50, 2, 2, 342, 341, 3, 2, 2, 2, 342, 343, 3, 2, 2, 2, 343, 347, 3, 2, 2, 2, 344, 347, 7, 13, 2, 2, 345, 347, 5, 66, 34, 2, 346, 336, 3, 2, 2, 2, 346, 337, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 346, 345, 3, 2, 2, 2, 347, 65, 3, 2, 2, 2, 348, 349, 9, 9, 2, 2, 349, 67, 3, 2, 2, 2, 350, 353, 5, 70, 36, 2, 351, 353, 5, 72, 37, 2, 352, 350, 3, 2, 2, 2, 352, 351, 3, 2, 2, 2, 353, 69, 3, 2, 2, 2, 354, 355, 9, 10, 2, 2, 355, 71, 3, 2, 2, 2, 356, 357, 7, 32, 2, 2, 357, 358, 7, 48, 2, 2, 358, 359, 7, 35, 2, 2, 359, 360, 7, 48, 2, 2, 360, 361, 7, 33, 2, 2, 361, 73, 3, 2, 2, 2, 362, 363, 9, 11, 2, 2, 363, 75, 3, 2, 2, 2, 37, 80, 84, 101, 107, 125, 134, 137, 140, 160, 172, 179, 187, 191, 194, 200, 208, 215, 224, 229, 235, 240, 246, 249, 252, 265, 283, 288, 305, 307, 317, 333, 339, 342, 346, 352]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 54, 377, 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, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 3, 2, 3, 2, 3, 2, 3, 3, 5, 3, 83, 10, 3, 3, 3, 3, 3, 5, 3, 87, 10, 3, 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, 5, 7, 5, 102, 10, 5, 12, 5, 14, 5, 105, 11, 5, 3, 6, 3, 6, 3, 6, 5, 6, 110, 10, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 128, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 137, 10, 12, 3, 12, 5, 12, 140, 10, 12, 3, 12, 5, 12, 143, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 163, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 7, 18, 173, 10, 18, 12, 18, 14, 18, 176, 11, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 182, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 190, 10, 20, 3, 20, 3, 20, 5, 20, 194, 10, 20, 3, 20, 5, 20, 197, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 203, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 209, 10, 21, 12, 21, 14, 21, 212, 11, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 218, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 225, 10, 22, 12, 22, 14, 22, 228, 11, 22, 3, 23, 3, 23, 5, 23, 232, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 238, 10, 25, 3, 25, 3, 25, 3, 25, 5, 25, 243, 10, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 249, 10, 25, 3, 25, 5, 25, 252, 10, 25, 3, 26, 5, 26, 255, 10, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 266, 10, 27, 12, 27, 14, 27, 269, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 279, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 296, 10, 30, 3, 30, 3, 30, 3, 30, 5, 30, 301, 10, 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, 3, 30, 3, 30, 3, 30, 7, 30, 318, 10, 30, 12, 30, 14, 30, 321, 11, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 328, 10, 31, 12, 31, 14, 31, 331, 11, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 7, 33, 344, 10, 33, 12, 33, 14, 33, 347, 11, 33, 3, 34, 3, 34, 3, 34, 5, 34, 352, 10, 34, 3, 34, 5, 34, 355, 10, 34, 3, 34, 3, 34, 5, 34, 359, 10, 34, 3, 35, 3, 35, 3, 36, 3, 36, 5, 36, 365, 10, 36, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 2, 8, 8, 42, 52, 58, 60, 64, 40, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 2, 12, 4, 2, 31, 31, 40, 40, 4, 2, 24, 24, 37, 37, 3, 2, 43, 45, 4, 2, 37, 37, 41, 41, 3, 2, 17, 20, 3, 2, 15, 16, 3, 2, 21, 22, 3, 2, 11, 12, 3, 2, 41, 43, 4, 2, 3, 3, 51, 51, 2, 393, 2, 78, 3, 2, 2, 2, 4, 82, 3, 2, 2, 2, 6, 92, 3, 2, 2, 2, 8, 96, 3, 2, 2, 2, 10, 109, 3, 2, 2, 2, 12, 111, 3, 2, 2, 2, 14, 116, 3, 2, 2, 2, 16, 119, 3, 2, 2, 2, 18, 123, 3, 2, 2, 2, 20, 131, 3, 2, 2, 2, 22, 134, 3, 2, 2, 2, 24, 146, 3, 2, 2, 2, 26, 150, 3, 2, 2, 2, 28, 154, 3, 2, 2, 2, 30, 158, 3, 2, 2, 2, 32, 164, 3, 2, 2, 2, 34, 181, 3, 2, 2, 2, 36, 183, 3, 2, 2, 2, 38, 202, 3, 2, 2, 2, 40, 217, 3, 2, 2, 2, 42, 219, 3, 2, 2, 2, 44, 231, 3, 2, 2, 2, 46, 233, 3, 2, 2, 2, 48, 235, 3, 2, 2, 2, 50, 254, 3, 2, 2, 2, 52, 259, 3, 2, 2, 2, 54, 278, 3, 2, 2, 2, 56, 280, 3, 2, 2, 2, 58, 300, 3, 2, 2, 2, 60, 322, 3, 2, 2, 2, 62, 332, 3, 2, 2, 2, 64, 337, 3, 2, 2, 2, 66, 358, 3, 2, 2, 2, 68, 360, 3, 2, 2, 2, 70, 364, 3, 2, 2, 2, 72, 366, 3, 2, 2, 2, 74, 368, 3, 2, 2, 2, 76, 374, 3, 2, 2, 2, 78, 79, 5, 8, 5, 2, 79, 80, 7, 2, 2, 3, 80, 3, 3, 2, 2, 2, 81, 83, 5, 6, 4, 2, 82, 81, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 84, 3, 2, 2, 2, 84, 86, 7, 27, 2, 2, 85, 87, 5, 60, 31, 2, 86, 85, 3, 2, 2, 2, 86, 87, 3, 2, 2, 2, 87, 88, 3, 2, 2, 2, 88, 89, 5, 58, 30, 2, 89, 90, 7, 28, 2, 2, 90, 91, 7, 2, 2, 3, 91, 5, 3, 2, 2, 2, 92, 93, 7, 32, 2, 2, 93, 94, 5, 76, 39, 2, 94, 95, 7, 33, 2, 2, 95, 7, 3, 2, 2, 2, 96, 97, 8, 5, 1, 2, 97, 98, 5, 10, 6, 2, 98, 103, 3, 2, 2, 2, 99, 100, 12, 3, 2, 2, 100, 102, 5, 10, 6, 2, 101, 99, 3, 2, 2, 2, 102, 105, 3, 2, 2, 2, 103, 101, 3, 2, 2, 2, 103, 104, 3, 2, 2, 2, 104, 9, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 106, 110, 5, 22, 12, 2, 107, 110, 5, 14, 8, 2, 108, 110, 5, 12, 7, 2, 109, 106, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 109, 108, 3, 2, 2, 2, 110, 11, 3, 2, 2, 2, 111, 112, 7, 4, 2, 2, 112, 113, 7, 25, 2, 2, 113, 114, 5, 68, 35, 2, 114, 115, 7, 26, 2, 2, 115, 13, 3, 2, 2, 2, 116, 117, 5, 16, 9, 2, 117, 118, 5, 42, 22, 2, 118, 15, 3, 2, 2, 2, 119, 120, 7, 10, 2, 2, 120, 121, 7, 40, 2, 2, 121, 122, 5, 76, 39, 2, 122, 17, 3, 2, 2, 2, 123, 124, 7, 10, 2, 2, 124, 125, 7, 25, 2, 2, 125, 127, 5, 76, 39, 2, 126, 128, 5, 20, 11, 2, 127, 126, 3, 2, 2, 2, 127, 128, 3, 2, 2, 2, 128, 129, 3, 2, 2, 2, 129, 130, 7, 26, 2, 2, 130, 19, 3, 2, 2, 2, 131, 132, 7, 35, 2, 2, 132, 133, 5, 34, 18, 2, 133, 21, 3, 2, 2, 2, 134, 136, 5, 24, 13, 2, 135, 137, 5, 26, 14, 2, 136, 135, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 139, 3, 2, 2, 2, 138, 140, 5, 30, 16, 2, 139, 138, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 142, 3, 2, 2, 2, 141, 143, 5, 32, 17, 2, 142, 141, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 145, 5, 42, 22, 2, 145, 23, 3, 2, 2, 2, 146, 147, 7, 5, 2, 2, 147, 148, 7, 40, 2, 2, 148, 149, 5, 76, 39, 2, 149, 25, 3, 2, 2, 2, 150, 151, 7, 6, 2, 2, 151, 152, 7, 40, 2, 2, 152, 153, 7, 13, 2, 2, 153, 27, 3, 2, 2, 2, 154, 155, 7, 44, 2, 2, 155, 156, 5, 50, 26, 2, 156, 157, 7, 44, 2, 2, 157, 29, 3, 2, 2, 2, 158, 159, 7, 7, 2, 2, 159, 162, 7, 40, 2, 2, 160, 163, 5, 68, 35, 2, 161, 163, 5, 28, 15, 2, 162, 160, 3, 2, 2, 2, 162, 161, 3, 2, 2, 2, 163, 31, 3, 2, 2, 2, 164, 165, 7, 8, 2, 2, 165, 166, 7, 40, 2, 2, 166, 167, 5, 34, 18, 2, 167, 33, 3, 2, 2, 2, 168, 169, 7, 27, 2, 2, 169, 174, 5, 36, 19, 2, 170, 171, 7, 35, 2, 2, 171, 173, 5, 36, 19, 2, 172, 170, 3, 2, 2, 2, 173, 176, 3, 2, 2, 2, 174, 172, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 177, 3, 2, 2, 2, 176, 174, 3, 2, 2, 2, 177, 178, 7, 28, 2, 2, 178, 182, 3, 2, 2, 2, 179, 180, 7, 27, 2, 2, 180, 182, 7, 28, 2, 2, 181, 168, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 35, 3, 2, 2, 2, 183, 184, 5, 68, 35, 2, 184, 185, 7, 36, 2, 2, 185, 186, 5, 38, 20, 2, 186, 37, 3, 2, 2, 2, 187, 203, 5, 68, 35, 2, 188, 190, 7, 37, 2, 2, 189, 188, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 193, 7, 48, 2, 2, 192, 194, 7, 49, 2, 2, 193, 192, 3, 2, 2, 2, 193, 194, 3, 2, 2, 2, 194, 196, 3, 2, 2, 2, 195, 197, 7, 50, 2, 2, 196, 195, 3, 2, 2, 2, 196, 197, 3, 2, 2, 2, 197, 203, 3, 2, 2, 2, 198, 203, 5, 34, 18, 2, 199, 203, 5, 40, 21, 2, 200, 203, 7, 13, 2, 2, 201, 203, 7, 14, 2, 2, 202, 187, 3, 2, 2, 2, 202, 189, 3, 2, 2, 2, 202, 198, 3, 2, 2, 2, 202, 199, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 202, 201, 3, 2, 2, 2, 203, 39, 3, 2, 2, 2, 204, 205, 7, 32, 2, 2, 205, 210, 5, 38, 20, 2, 206, 207, 7, 35, 2, 2, 207, 209, 5, 38, 20, 2, 208, 206, 3, 2, 2, 2, 209, 212, 3, 2, 2, 2, 210, 208, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 213, 3, 2, 2, 2, 212, 210, 3, 2, 2, 2, 213, 214, 7, 33, 2, 2, 214, 218, 3, 2, 2, 2, 215, 216, 7, 32, 2, 2, 216, 218, 7, 33, 2, 2, 217, 204, 3, 2, 2, 2, 217, 215, 3, 2, 2, 2, 218, 41, 3, 2, 2, 2, 219, 220, 8, 22, 1, 2, 220, 221, 5, 44, 23, 2, 221, 226, 3, 2, 2, 2, 222, 223, 12, 3, 2, 2, 223, 225, 5, 44, 23, 2, 224, 222, 3, 2, 2, 2, 225, 228, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 43, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 229, 232, 5, 48, 25, 2, 230, 232, 5, 18, 10, 2, 231, 229, 3, 2, 2, 2, 231, 230, 3, 2, 2, 2, 232, 45, 3, 2, 2, 2, 233, 234, 9, 2, 2, 2, 234, 47, 3, 2, 2, 2, 235, 237, 7, 9, 2, 2, 236, 238, 5, 56, 29, 2, 237, 236, 3, 2, 2, 2, 237, 238, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 248, 5, 46, 24, 2, 240, 242, 7, 27, 2, 2, 241, 243, 5, 60, 31, 2, 242, 241, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 244, 3, 2, 2, 2, 244, 245, 5, 58, 30, 2, 245, 246, 7, 28, 2, 2, 246, 249, 3, 2, 2, 2, 247, 249, 5, 28, 15, 2, 248, 240, 3, 2, 2, 2, 248, 247, 3, 2, 2, 2, 249, 251, 3, 2, 2, 2, 250, 252, 5, 70, 36, 2, 251, 250, 3, 2, 2, 2, 251, 252, 3, 2, 2, 2, 252, 49, 3, 2, 2, 2, 253, 255, 5, 52, 27, 2, 254, 253, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 7, 34, 2, 2, 257, 258, 5, 76, 39, 2, 258, 51, 3, 2, 2, 2, 259, 260, 8, 27, 1, 2, 260, 261, 5, 54, 28, 2, 261, 267, 3, 2, 2, 2, 262, 263, 12, 3, 2, 2, 263, 264, 7, 38, 2, 2, 264, 266, 5, 54, 28, 2, 265, 262, 3, 2, 2, 2, 266, 269, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 53, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 279, 5, 76, 39, 2, 271, 279, 7, 4, 2, 2, 272, 279, 7, 5, 2, 2, 273, 279, 7, 6, 2, 2, 274, 279, 7, 7, 2, 2, 275, 279, 7, 8, 2, 2, 276, 279, 7, 9, 2, 2, 277, 279, 7, 10, 2, 2, 278, 270, 3, 2, 2, 2, 278, 271, 3, 2, 2, 2, 278, 272, 3, 2, 2, 2, 278, 273, 3, 2, 2, 2, 278, 274, 3, 2, 2, 2, 278, 275, 3, 2, 2, 2, 278, 276, 3, 2, 2, 2, 278, 277, 3, 2, 2, 2, 279, 55, 3, 2, 2, 2, 280, 281, 7, 25, 2, 2, 281, 282, 5, 76, 39, 2, 282, 283, 7, 26, 2, 2, 283, 57, 3, 2, 2, 2, 284, 285, 8, 30, 1, 2, 285, 286, 9, 3, 2, 2, 286, 301, 5, 58, 30, 12, 287, 288, 7, 25, 2, 2, 288, 289, 5, 58, 30, 2, 289, 290, 7, 26, 2, 2, 290, 301, 3, 2, 2, 2, 291, 301, 5, 66, 34, 2, 292, 293, 7, 3, 2, 2, 293, 295, 7, 25, 2, 2, 294, 296, 5, 64, 33, 2, 295, 294, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 301, 7, 26, 2, 2, 298, 299, 7, 46, 2, 2, 299, 301, 5, 76, 39, 2, 300, 284, 3, 2, 2, 2, 300, 287, 3, 2, 2, 2, 300, 291, 3, 2, 2, 2, 300, 292, 3, 2, 2, 2, 300, 298, 3, 2, 2, 2, 301, 319, 3, 2, 2, 2, 302, 303, 12, 10, 2, 2, 303, 304, 9, 4, 2, 2, 304, 318, 5, 58, 30, 11, 305, 306, 12, 9, 2, 2, 306, 307, 9, 5, 2, 2, 307, 318, 5, 58, 30, 10, 308, 309, 12, 8, 2, 2, 309, 310, 9, 6, 2, 2, 310, 318, 5, 58, 30, 9, 311, 312, 12, 7, 2, 2, 312, 313, 9, 7, 2, 2, 313, 318, 5, 58, 30, 8, 314, 315, 12, 6, 2, 2, 315, 316, 9, 8, 2, 2, 316, 318, 5, 58, 30, 7, 317, 302, 3, 2, 2, 2, 317, 305, 3, 2, 2, 2, 317, 308, 3, 2, 2, 2, 317, 311, 3, 2, 2, 2, 317, 314, 3, 2, 2, 2, 318, 321, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 319, 320, 3, 2, 2, 2, 320, 59, 3, 2, 2, 2, 321, 319, 3, 2, 2, 2, 322, 323, 8, 31, 1, 2, 323, 324, 5, 62, 32, 2, 324, 329, 3, 2, 2, 2, 325, 326, 12, 3, 2, 2, 326, 328, 5, 62, 32, 2, 327, 325, 3, 2, 2, 2, 328, 331, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 329, 330, 3, 2, 2, 2, 330, 61, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 332, 333, 7, 46, 2, 2, 333, 334, 5, 76, 39, 2, 334, 335, 7, 40, 2, 2, 335, 336, 5, 58, 30, 2, 336, 63, 3, 2, 2, 2, 337, 338, 8, 33, 1, 2, 338, 339, 5, 58, 30, 2, 339, 345, 3, 2, 2, 2, 340, 341, 12, 3, 2, 2, 341, 342, 7, 35, 2, 2, 342, 344, 5, 58, 30, 2, 343, 340, 3, 2, 2, 2, 344, 347, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 346, 3, 2, 2, 2, 346, 65, 3, 2, 2, 2, 347, 345, 3, 2, 2, 2, 348, 359, 7, 14, 2, 2, 349, 351, 7, 48, 2, 2, 350, 352, 7, 49, 2, 2, 351, 350, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 354, 3, 2, 2, 2, 353, 355, 7, 50, 2, 2, 354, 353, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 359, 3, 2, 2, 2, 356, 359, 7, 13, 2, 2, 357, 359, 5, 68, 35, 2, 358, 348, 3, 2, 2, 2, 358, 349, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 358, 357, 3, 2, 2, 2, 359, 67, 3, 2, 2, 2, 360, 361, 9, 9, 2, 2, 361, 69, 3, 2, 2, 2, 362, 365, 5, 72, 37, 2, 363, 365, 5, 74, 38, 2, 364, 362, 3, 2, 2, 2, 364, 363, 3, 2, 2, 2, 365, 71, 3, 2, 2, 2, 366, 367, 9, 10, 2, 2, 367, 73, 3, 2, 2, 2, 368, 369, 7, 32, 2, 2, 369, 370, 7, 48, 2, 2, 370, 371, 7, 35, 2, 2, 371, 372, 7, 48, 2, 2, 372, 373, 7, 33, 2, 2, 373, 75, 3, 2, 2, 2, 374, 375, 9, 11, 2, 2, 375, 77, 3, 2, 2, 2, 38, 82, 86, 103, 109, 127, 136, 139, 142, 162, 174, 181, 189, 193, 196, 202, 210, 217, 226, 231, 237, 242, 248, 251, 254, 267, 278, 295, 300, 317, 319, 329, 345, 351, 354, 358, 364]
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlBaseListener.java
index 9f6e068..1101df2 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlBaseListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlBaseListener.java
@@ -328,6 +328,18 @@
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterJavaClass(NCIdlParser.JavaClassContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitJavaClass(NCIdlParser.JavaClassContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterTermId(NCIdlParser.TermIdContext ctx) { }
/**
* {@inheritDoc}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlListener.java
index 7ad1ddb..d497b65 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlListener.java
@@ -268,6 +268,16 @@
*/
void exitJavaFqn(NCIdlParser.JavaFqnContext ctx);
/**
+ * Enter a parse tree produced by {@link NCIdlParser#javaClass}.
+ * @param ctx the parse tree
+ */
+ void enterJavaClass(NCIdlParser.JavaClassContext ctx);
+ /**
+ * Exit a parse tree produced by {@link NCIdlParser#javaClass}.
+ * @param ctx the parse tree
+ */
+ void exitJavaClass(NCIdlParser.JavaClassContext ctx);
+ /**
* Enter a parse tree produced by {@link NCIdlParser#termId}.
* @param ctx the parse tree
*/
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlParser.java
index 9106ee2..fe02e69 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlParser.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdlParser.java
@@ -31,17 +31,17 @@
RULE_flowDecl = 14, RULE_metaDecl = 15, RULE_jsonObj = 16, RULE_jsonPair = 17,
RULE_jsonVal = 18, RULE_jsonArr = 19, RULE_termDecls = 20, RULE_termDecl = 21,
RULE_termEq = 22, RULE_term = 23, RULE_mtdRef = 24, RULE_javaFqn = 25,
- RULE_termId = 26, RULE_expr = 27, RULE_vars = 28, RULE_varDecl = 29, RULE_paramList = 30,
- RULE_atom = 31, RULE_qstring = 32, RULE_minMax = 33, RULE_minMaxShortcut = 34,
- RULE_minMaxRange = 35, RULE_id = 36;
+ RULE_javaClass = 26, RULE_termId = 27, RULE_expr = 28, RULE_vars = 29,
+ RULE_varDecl = 30, RULE_paramList = 31, RULE_atom = 32, RULE_qstring = 33,
+ RULE_minMax = 34, RULE_minMaxShortcut = 35, RULE_minMaxRange = 36, RULE_id = 37;
private static String[] makeRuleNames() {
return new String[] {
"idl", "synonym", "alias", "idlDecls", "idlDecl", "imp", "frag", "fragId",
"fragRef", "fragMeta", "intent", "intentId", "orderedDecl", "mtdDecl",
"flowDecl", "metaDecl", "jsonObj", "jsonPair", "jsonVal", "jsonArr",
- "termDecls", "termDecl", "termEq", "term", "mtdRef", "javaFqn", "termId",
- "expr", "vars", "varDecl", "paramList", "atom", "qstring", "minMax",
- "minMaxShortcut", "minMaxRange", "id"
+ "termDecls", "termDecl", "termEq", "term", "mtdRef", "javaFqn", "javaClass",
+ "termId", "expr", "vars", "varDecl", "paramList", "atom", "qstring",
+ "minMax", "minMaxShortcut", "minMaxRange", "id"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -143,9 +143,9 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(74);
+ setState(76);
idlDecls(0);
- setState(75);
+ setState(77);
match(EOF);
}
}
@@ -194,33 +194,33 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(78);
+ setState(80);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==LBR) {
{
- setState(77);
+ setState(79);
alias();
}
}
- setState(80);
- match(LBRACE);
setState(82);
+ match(LBRACE);
+ setState(84);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
case 1:
{
- setState(81);
+ setState(83);
vars(0);
}
break;
}
- setState(84);
- expr(0);
- setState(85);
- match(RBRACE);
setState(86);
+ expr(0);
+ setState(87);
+ match(RBRACE);
+ setState(88);
match(EOF);
}
}
@@ -261,11 +261,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(88);
- match(LBR);
- setState(89);
- id();
setState(90);
+ match(LBR);
+ setState(91);
+ id();
+ setState(92);
match(RBR);
}
}
@@ -317,11 +317,11 @@
enterOuterAlt(_localctx, 1);
{
{
- setState(93);
+ setState(95);
idlDecl();
}
_ctx.stop = _input.LT(-1);
- setState(99);
+ setState(101);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,2,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -332,14 +332,14 @@
{
_localctx = new IdlDeclsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_idlDecls);
- setState(95);
+ setState(97);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(96);
+ setState(98);
idlDecl();
}
}
}
- setState(101);
+ setState(103);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,2,_ctx);
}
@@ -384,27 +384,27 @@
IdlDeclContext _localctx = new IdlDeclContext(_ctx, getState());
enterRule(_localctx, 8, RULE_idlDecl);
try {
- setState(105);
+ setState(107);
_errHandler.sync(this);
switch (_input.LA(1)) {
case INTENT:
enterOuterAlt(_localctx, 1);
{
- setState(102);
+ setState(104);
intent();
}
break;
case FRAG:
enterOuterAlt(_localctx, 2);
{
- setState(103);
+ setState(105);
frag();
}
break;
case IMPORT:
enterOuterAlt(_localctx, 3);
{
- setState(104);
+ setState(106);
imp();
}
break;
@@ -450,13 +450,13 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(107);
- match(IMPORT);
- setState(108);
- match(LPAR);
setState(109);
- qstring();
+ match(IMPORT);
setState(110);
+ match(LPAR);
+ setState(111);
+ qstring();
+ setState(112);
match(RPAR);
}
}
@@ -498,9 +498,9 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(112);
+ setState(114);
fragId();
- setState(113);
+ setState(115);
termDecls(0);
}
}
@@ -541,11 +541,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(115);
- match(FRAG);
- setState(116);
- match(ASSIGN);
setState(117);
+ match(FRAG);
+ setState(118);
+ match(ASSIGN);
+ setState(119);
id();
}
}
@@ -591,23 +591,23 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(119);
- match(FRAG);
- setState(120);
- match(LPAR);
setState(121);
- id();
+ match(FRAG);
+ setState(122);
+ match(LPAR);
setState(123);
+ id();
+ setState(125);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==COMMA) {
{
- setState(122);
+ setState(124);
fragMeta();
}
}
- setState(125);
+ setState(127);
match(RPAR);
}
}
@@ -647,9 +647,9 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(127);
+ setState(129);
match(COMMA);
- setState(128);
+ setState(130);
jsonObj();
}
}
@@ -701,39 +701,39 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(130);
- intentId();
setState(132);
+ intentId();
+ setState(134);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ORDERED) {
{
- setState(131);
+ setState(133);
orderedDecl();
}
}
- setState(135);
+ setState(137);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==FLOW) {
{
- setState(134);
+ setState(136);
flowDecl();
}
}
- setState(138);
+ setState(140);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==META) {
{
- setState(137);
+ setState(139);
metaDecl();
}
}
- setState(140);
+ setState(142);
termDecls(0);
}
}
@@ -774,11 +774,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(142);
- match(INTENT);
- setState(143);
- match(ASSIGN);
setState(144);
+ match(INTENT);
+ setState(145);
+ match(ASSIGN);
+ setState(146);
id();
}
}
@@ -817,11 +817,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(146);
- match(ORDERED);
- setState(147);
- match(ASSIGN);
setState(148);
+ match(ORDERED);
+ setState(149);
+ match(ASSIGN);
+ setState(150);
match(BOOL);
}
}
@@ -864,12 +864,12 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(150);
- match(DIV);
- setState(151);
- mtdRef();
setState(152);
match(DIV);
+ setState(153);
+ mtdRef();
+ setState(154);
+ match(DIV);
}
}
catch (RecognitionException re) {
@@ -912,23 +912,23 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(154);
+ setState(156);
match(FLOW);
- setState(155);
+ setState(157);
match(ASSIGN);
- setState(158);
+ setState(160);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SQSTRING:
case DQSTRING:
{
- setState(156);
+ setState(158);
qstring();
}
break;
case DIV:
{
- setState(157);
+ setState(159);
mtdDecl();
}
break;
@@ -974,11 +974,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(160);
- match(META);
- setState(161);
- match(ASSIGN);
setState(162);
+ match(META);
+ setState(163);
+ match(ASSIGN);
+ setState(164);
jsonObj();
}
}
@@ -1025,42 +1025,42 @@
enterRule(_localctx, 32, RULE_jsonObj);
int _la;
try {
- setState(177);
+ setState(179);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(164);
+ setState(166);
match(LBRACE);
- setState(165);
+ setState(167);
jsonPair();
- setState(170);
+ setState(172);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(166);
+ setState(168);
match(COMMA);
- setState(167);
+ setState(169);
jsonPair();
}
}
- setState(172);
+ setState(174);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(173);
+ setState(175);
match(RBRACE);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(175);
+ setState(177);
match(LBRACE);
- setState(176);
+ setState(178);
match(RBRACE);
}
break;
@@ -1105,11 +1105,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(179);
- qstring();
- setState(180);
- match(COLON);
setState(181);
+ qstring();
+ setState(182);
+ match(COLON);
+ setState(183);
jsonVal();
}
}
@@ -1159,14 +1159,14 @@
enterRule(_localctx, 36, RULE_jsonVal);
int _la;
try {
- setState(198);
+ setState(200);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SQSTRING:
case DQSTRING:
enterOuterAlt(_localctx, 1);
{
- setState(183);
+ setState(185);
qstring();
}
break;
@@ -1174,34 +1174,34 @@
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(185);
+ setState(187);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==MINUS) {
{
- setState(184);
+ setState(186);
match(MINUS);
}
}
- setState(187);
- match(INT);
setState(189);
+ match(INT);
+ setState(191);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==REAL) {
{
- setState(188);
+ setState(190);
match(REAL);
}
}
- setState(192);
+ setState(194);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==EXP) {
{
- setState(191);
+ setState(193);
match(EXP);
}
}
@@ -1211,28 +1211,28 @@
case LBRACE:
enterOuterAlt(_localctx, 3);
{
- setState(194);
+ setState(196);
jsonObj();
}
break;
case LBR:
enterOuterAlt(_localctx, 4);
{
- setState(195);
+ setState(197);
jsonArr();
}
break;
case BOOL:
enterOuterAlt(_localctx, 5);
{
- setState(196);
+ setState(198);
match(BOOL);
}
break;
case NULL:
enterOuterAlt(_localctx, 6);
{
- setState(197);
+ setState(199);
match(NULL);
}
break;
@@ -1283,42 +1283,42 @@
enterRule(_localctx, 38, RULE_jsonArr);
int _la;
try {
- setState(213);
+ setState(215);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(200);
+ setState(202);
match(LBR);
- setState(201);
+ setState(203);
jsonVal();
- setState(206);
+ setState(208);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(202);
+ setState(204);
match(COMMA);
- setState(203);
+ setState(205);
jsonVal();
}
}
- setState(208);
+ setState(210);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(209);
+ setState(211);
match(RBR);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(211);
+ setState(213);
match(LBR);
- setState(212);
+ setState(214);
match(RBR);
}
break;
@@ -1372,11 +1372,11 @@
enterOuterAlt(_localctx, 1);
{
{
- setState(216);
+ setState(218);
termDecl();
}
_ctx.stop = _input.LT(-1);
- setState(222);
+ setState(224);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1387,14 +1387,14 @@
{
_localctx = new TermDeclsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_termDecls);
- setState(218);
+ setState(220);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(219);
+ setState(221);
termDecl();
}
}
}
- setState(224);
+ setState(226);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,17,_ctx);
}
@@ -1436,20 +1436,20 @@
TermDeclContext _localctx = new TermDeclContext(_ctx, getState());
enterRule(_localctx, 42, RULE_termDecl);
try {
- setState(227);
+ setState(229);
_errHandler.sync(this);
switch (_input.LA(1)) {
case TERM:
enterOuterAlt(_localctx, 1);
{
- setState(225);
+ setState(227);
term();
}
break;
case FRAG:
enterOuterAlt(_localctx, 2);
{
- setState(226);
+ setState(228);
fragRef();
}
break;
@@ -1492,7 +1492,7 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(229);
+ setState(231);
_la = _input.LA(1);
if ( !(_la==TILDA || _la==ASSIGN) ) {
_errHandler.recoverInline(this);
@@ -1558,60 +1558,60 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(231);
- match(TERM);
setState(233);
+ match(TERM);
+ setState(235);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==LPAR) {
{
- setState(232);
+ setState(234);
termId();
}
}
- setState(235);
+ setState(237);
termEq();
- setState(244);
+ setState(246);
_errHandler.sync(this);
switch (_input.LA(1)) {
case LBRACE:
{
{
- setState(236);
- match(LBRACE);
setState(238);
+ match(LBRACE);
+ setState(240);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
case 1:
{
- setState(237);
+ setState(239);
vars(0);
}
break;
}
- setState(240);
+ setState(242);
expr(0);
- setState(241);
+ setState(243);
match(RBRACE);
}
}
break;
case DIV:
{
- setState(243);
+ setState(245);
mtdDecl();
}
break;
default:
throw new NoViableAltException(this);
}
- setState(247);
+ setState(249);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
case 1:
{
- setState(246);
+ setState(248);
minMax();
}
break;
@@ -1658,19 +1658,19 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(250);
+ setState(252);
_errHandler.sync(this);
_la = _input.LA(1);
- if (_la==FUN_NAME || _la==ID) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FUN_NAME) | (1L << IMPORT) | (1L << INTENT) | (1L << ORDERED) | (1L << FLOW) | (1L << META) | (1L << TERM) | (1L << FRAG) | (1L << ID))) != 0)) {
{
- setState(249);
+ setState(251);
javaFqn(0);
}
}
- setState(252);
+ setState(254);
match(POUND);
- setState(253);
+ setState(255);
id();
}
}
@@ -1686,8 +1686,8 @@
}
public static class JavaFqnContext extends ParserRuleContext {
- public IdContext id() {
- return getRuleContext(IdContext.class,0);
+ public JavaClassContext javaClass() {
+ return getRuleContext(JavaClassContext.class,0);
}
public JavaFqnContext javaFqn() {
return getRuleContext(JavaFqnContext.class,0);
@@ -1723,11 +1723,11 @@
enterOuterAlt(_localctx, 1);
{
{
- setState(256);
- id();
+ setState(258);
+ javaClass();
}
_ctx.stop = _input.LT(-1);
- setState(263);
+ setState(265);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,24,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1738,16 +1738,16 @@
{
_localctx = new JavaFqnContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_javaFqn);
- setState(258);
- if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(259);
- match(DOT);
setState(260);
- id();
+ if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+ setState(261);
+ match(DOT);
+ setState(262);
+ javaClass();
}
}
}
- setState(265);
+ setState(267);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,24,_ctx);
}
@@ -1764,6 +1764,110 @@
return _localctx;
}
+ public static class JavaClassContext extends ParserRuleContext {
+ public IdContext id() {
+ return getRuleContext(IdContext.class,0);
+ }
+ public TerminalNode IMPORT() { return getToken(NCIdlParser.IMPORT, 0); }
+ public TerminalNode INTENT() { return getToken(NCIdlParser.INTENT, 0); }
+ public TerminalNode ORDERED() { return getToken(NCIdlParser.ORDERED, 0); }
+ public TerminalNode FLOW() { return getToken(NCIdlParser.FLOW, 0); }
+ public TerminalNode META() { return getToken(NCIdlParser.META, 0); }
+ public TerminalNode TERM() { return getToken(NCIdlParser.TERM, 0); }
+ public TerminalNode FRAG() { return getToken(NCIdlParser.FRAG, 0); }
+ public JavaClassContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_javaClass; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIdlListener ) ((NCIdlListener)listener).enterJavaClass(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIdlListener ) ((NCIdlListener)listener).exitJavaClass(this);
+ }
+ }
+
+ public final JavaClassContext javaClass() throws RecognitionException {
+ JavaClassContext _localctx = new JavaClassContext(_ctx, getState());
+ enterRule(_localctx, 52, RULE_javaClass);
+ try {
+ setState(276);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case FUN_NAME:
+ case ID:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(268);
+ id();
+ }
+ break;
+ case IMPORT:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(269);
+ match(IMPORT);
+ }
+ break;
+ case INTENT:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(270);
+ match(INTENT);
+ }
+ break;
+ case ORDERED:
+ enterOuterAlt(_localctx, 4);
+ {
+ setState(271);
+ match(ORDERED);
+ }
+ break;
+ case FLOW:
+ enterOuterAlt(_localctx, 5);
+ {
+ setState(272);
+ match(FLOW);
+ }
+ break;
+ case META:
+ enterOuterAlt(_localctx, 6);
+ {
+ setState(273);
+ match(META);
+ }
+ break;
+ case TERM:
+ enterOuterAlt(_localctx, 7);
+ {
+ setState(274);
+ match(TERM);
+ }
+ break;
+ case FRAG:
+ enterOuterAlt(_localctx, 8);
+ {
+ setState(275);
+ match(FRAG);
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class TermIdContext extends ParserRuleContext {
public TerminalNode LPAR() { return getToken(NCIdlParser.LPAR, 0); }
public IdContext id() {
@@ -1786,15 +1890,15 @@
public final TermIdContext termId() throws RecognitionException {
TermIdContext _localctx = new TermIdContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_termId);
+ enterRule(_localctx, 54, RULE_termId);
try {
enterOuterAlt(_localctx, 1);
{
- setState(266);
+ setState(278);
match(LPAR);
- setState(267);
+ setState(279);
id();
- setState(268);
+ setState(280);
match(RPAR);
}
}
@@ -2012,14 +2116,14 @@
int _parentState = getState();
ExprContext _localctx = new ExprContext(_ctx, _parentState);
ExprContext _prevctx = _localctx;
- int _startState = 54;
- enterRecursionRule(_localctx, 54, RULE_expr, _p);
+ int _startState = 56;
+ enterRecursionRule(_localctx, 56, RULE_expr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(286);
+ setState(298);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NOT:
@@ -2029,7 +2133,7 @@
_ctx = _localctx;
_prevctx = _localctx;
- setState(271);
+ setState(283);
((UnaryExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==NOT || _la==MINUS) ) {
@@ -2040,7 +2144,7 @@
_errHandler.reportMatch(this);
consume();
}
- setState(272);
+ setState(284);
expr(10);
}
break;
@@ -2049,11 +2153,11 @@
_localctx = new ParExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(273);
+ setState(285);
match(LPAR);
- setState(274);
+ setState(286);
expr(0);
- setState(275);
+ setState(287);
match(RPAR);
}
break;
@@ -2066,7 +2170,7 @@
_localctx = new AtomExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(277);
+ setState(289);
atom();
}
break;
@@ -2075,21 +2179,21 @@
_localctx = new CallExprContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(278);
+ setState(290);
match(FUN_NAME);
- setState(279);
+ setState(291);
match(LPAR);
- setState(281);
+ setState(293);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FUN_NAME) | (1L << SQSTRING) | (1L << DQSTRING) | (1L << BOOL) | (1L << NULL) | (1L << NOT) | (1L << LPAR) | (1L << MINUS) | (1L << AT) | (1L << INT))) != 0)) {
{
- setState(280);
+ setState(292);
paramList(0);
}
}
- setState(283);
+ setState(295);
match(RPAR);
}
break;
@@ -2098,9 +2202,9 @@
_localctx = new VarRefContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(284);
+ setState(296);
match(AT);
- setState(285);
+ setState(297);
id();
}
break;
@@ -2108,24 +2212,24 @@
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(305);
+ setState(317);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(303);
+ setState(315);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
{
_localctx = new MultDivModExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(288);
+ setState(300);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(289);
+ setState(301);
((MultDivModExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MULT) | (1L << DIV) | (1L << MOD))) != 0)) ) {
@@ -2136,7 +2240,7 @@
_errHandler.reportMatch(this);
consume();
}
- setState(290);
+ setState(302);
expr(9);
}
break;
@@ -2144,9 +2248,9 @@
{
_localctx = new PlusMinusExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(291);
+ setState(303);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
- setState(292);
+ setState(304);
((PlusMinusExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==MINUS || _la==PLUS) ) {
@@ -2157,7 +2261,7 @@
_errHandler.reportMatch(this);
consume();
}
- setState(293);
+ setState(305);
expr(8);
}
break;
@@ -2165,9 +2269,9 @@
{
_localctx = new CompExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(294);
+ setState(306);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
- setState(295);
+ setState(307);
((CompExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GTEQ) | (1L << LTEQ) | (1L << GT) | (1L << LT))) != 0)) ) {
@@ -2178,7 +2282,7 @@
_errHandler.reportMatch(this);
consume();
}
- setState(296);
+ setState(308);
expr(7);
}
break;
@@ -2186,9 +2290,9 @@
{
_localctx = new EqNeqExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(297);
+ setState(309);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(298);
+ setState(310);
((EqNeqExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==EQ || _la==NEQ) ) {
@@ -2199,7 +2303,7 @@
_errHandler.reportMatch(this);
consume();
}
- setState(299);
+ setState(311);
expr(6);
}
break;
@@ -2207,9 +2311,9 @@
{
_localctx = new AndOrExprContext(new ExprContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(300);
+ setState(312);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(301);
+ setState(313);
((AndOrExprContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==AND || _la==OR) ) {
@@ -2220,16 +2324,16 @@
_errHandler.reportMatch(this);
consume();
}
- setState(302);
+ setState(314);
expr(5);
}
break;
}
}
}
- setState(307);
+ setState(319);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,28,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
}
}
}
@@ -2274,20 +2378,20 @@
int _parentState = getState();
VarsContext _localctx = new VarsContext(_ctx, _parentState);
VarsContext _prevctx = _localctx;
- int _startState = 56;
- enterRecursionRule(_localctx, 56, RULE_vars, _p);
+ int _startState = 58;
+ enterRecursionRule(_localctx, 58, RULE_vars, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(309);
+ setState(321);
varDecl();
}
_ctx.stop = _input.LT(-1);
- setState(315);
+ setState(327);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,30,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -2296,16 +2400,16 @@
{
_localctx = new VarsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_vars);
- setState(311);
+ setState(323);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(312);
+ setState(324);
varDecl();
}
}
}
- setState(317);
+ setState(329);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,29,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,30,_ctx);
}
}
}
@@ -2345,17 +2449,17 @@
public final VarDeclContext varDecl() throws RecognitionException {
VarDeclContext _localctx = new VarDeclContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_varDecl);
+ enterRule(_localctx, 60, RULE_varDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(318);
+ setState(330);
match(AT);
- setState(319);
+ setState(331);
id();
- setState(320);
+ setState(332);
match(ASSIGN);
- setState(321);
+ setState(333);
expr(0);
}
}
@@ -2401,20 +2505,20 @@
int _parentState = getState();
ParamListContext _localctx = new ParamListContext(_ctx, _parentState);
ParamListContext _prevctx = _localctx;
- int _startState = 60;
- enterRecursionRule(_localctx, 60, RULE_paramList, _p);
+ int _startState = 62;
+ enterRecursionRule(_localctx, 62, RULE_paramList, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(324);
+ setState(336);
expr(0);
}
_ctx.stop = _input.LT(-1);
- setState(331);
+ setState(343);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,30,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,31,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -2423,18 +2527,18 @@
{
_localctx = new ParamListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_paramList);
- setState(326);
+ setState(338);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(327);
+ setState(339);
match(COMMA);
- setState(328);
+ setState(340);
expr(0);
}
}
}
- setState(333);
+ setState(345);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,30,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,31,_ctx);
}
}
}
@@ -2474,39 +2578,39 @@
public final AtomContext atom() throws RecognitionException {
AtomContext _localctx = new AtomContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_atom);
+ enterRule(_localctx, 64, RULE_atom);
try {
- setState(344);
+ setState(356);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NULL:
enterOuterAlt(_localctx, 1);
{
- setState(334);
+ setState(346);
match(NULL);
}
break;
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(335);
+ setState(347);
match(INT);
- setState(337);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
- case 1:
- {
- setState(336);
- match(REAL);
- }
- break;
- }
- setState(340);
+ setState(349);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) {
case 1:
{
- setState(339);
+ setState(348);
+ match(REAL);
+ }
+ break;
+ }
+ setState(352);
+ _errHandler.sync(this);
+ switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) {
+ case 1:
+ {
+ setState(351);
match(EXP);
}
break;
@@ -2516,7 +2620,7 @@
case BOOL:
enterOuterAlt(_localctx, 3);
{
- setState(342);
+ setState(354);
match(BOOL);
}
break;
@@ -2524,7 +2628,7 @@
case DQSTRING:
enterOuterAlt(_localctx, 4);
{
- setState(343);
+ setState(355);
qstring();
}
break;
@@ -2562,12 +2666,12 @@
public final QstringContext qstring() throws RecognitionException {
QstringContext _localctx = new QstringContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_qstring);
+ enterRule(_localctx, 66, RULE_qstring);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(346);
+ setState(358);
_la = _input.LA(1);
if ( !(_la==SQSTRING || _la==DQSTRING) ) {
_errHandler.recoverInline(this);
@@ -2613,9 +2717,9 @@
public final MinMaxContext minMax() throws RecognitionException {
MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_minMax);
+ enterRule(_localctx, 68, RULE_minMax);
try {
- setState(350);
+ setState(362);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PLUS:
@@ -2623,14 +2727,14 @@
case MULT:
enterOuterAlt(_localctx, 1);
{
- setState(348);
+ setState(360);
minMaxShortcut();
}
break;
case LBR:
enterOuterAlt(_localctx, 2);
{
- setState(349);
+ setState(361);
minMaxRange();
}
break;
@@ -2669,12 +2773,12 @@
public final MinMaxShortcutContext minMaxShortcut() throws RecognitionException {
MinMaxShortcutContext _localctx = new MinMaxShortcutContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_minMaxShortcut);
+ enterRule(_localctx, 70, RULE_minMaxShortcut);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(352);
+ setState(364);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << QUESTION) | (1L << MULT))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -2721,19 +2825,19 @@
public final MinMaxRangeContext minMaxRange() throws RecognitionException {
MinMaxRangeContext _localctx = new MinMaxRangeContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_minMaxRange);
+ enterRule(_localctx, 72, RULE_minMaxRange);
try {
enterOuterAlt(_localctx, 1);
{
- setState(354);
+ setState(366);
match(LBR);
- setState(355);
+ setState(367);
match(INT);
- setState(356);
+ setState(368);
match(COMMA);
- setState(357);
+ setState(369);
match(INT);
- setState(358);
+ setState(370);
match(RBR);
}
}
@@ -2767,12 +2871,12 @@
public final IdContext id() throws RecognitionException {
IdContext _localctx = new IdContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_id);
+ enterRule(_localctx, 74, RULE_id);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(360);
+ setState(372);
_la = _input.LA(1);
if ( !(_la==FUN_NAME || _la==ID) ) {
_errHandler.recoverInline(this);
@@ -2803,11 +2907,11 @@
return termDecls_sempred((TermDeclsContext)_localctx, predIndex);
case 25:
return javaFqn_sempred((JavaFqnContext)_localctx, predIndex);
- case 27:
- return expr_sempred((ExprContext)_localctx, predIndex);
case 28:
+ return expr_sempred((ExprContext)_localctx, predIndex);
+ case 29:
return vars_sempred((VarsContext)_localctx, predIndex);
- case 30:
+ case 31:
return paramList_sempred((ParamListContext)_localctx, predIndex);
}
return true;
@@ -2864,133 +2968,139 @@
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\66\u016d\4\2\t\2"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\66\u0179\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&\3\2\3\2\3\2\3\3\5\3Q\n\3\3\3\3\3\5"+
- "\3U\n\3\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\5\7\5d\n\5\f"+
- "\5\16\5g\13\5\3\6\3\6\3\6\5\6l\n\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\n\3\n\3\n\3\n\5\n~\n\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\5"+
- "\f\u0087\n\f\3\f\5\f\u008a\n\f\3\f\5\f\u008d\n\f\3\f\3\f\3\r\3\r\3\r\3"+
- "\r\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\5\20\u00a1"+
- "\n\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\7\22\u00ab\n\22\f\22\16"+
- "\22\u00ae\13\22\3\22\3\22\3\22\3\22\5\22\u00b4\n\22\3\23\3\23\3\23\3\23"+
- "\3\24\3\24\5\24\u00bc\n\24\3\24\3\24\5\24\u00c0\n\24\3\24\5\24\u00c3\n"+
- "\24\3\24\3\24\3\24\3\24\5\24\u00c9\n\24\3\25\3\25\3\25\3\25\7\25\u00cf"+
- "\n\25\f\25\16\25\u00d2\13\25\3\25\3\25\3\25\3\25\5\25\u00d8\n\25\3\26"+
- "\3\26\3\26\3\26\3\26\7\26\u00df\n\26\f\26\16\26\u00e2\13\26\3\27\3\27"+
- "\5\27\u00e6\n\27\3\30\3\30\3\31\3\31\5\31\u00ec\n\31\3\31\3\31\3\31\5"+
- "\31\u00f1\n\31\3\31\3\31\3\31\3\31\5\31\u00f7\n\31\3\31\5\31\u00fa\n\31"+
- "\3\32\5\32\u00fd\n\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\7\33"+
- "\u0108\n\33\f\33\16\33\u010b\13\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35"+
- "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u011c\n\35\3\35\3\35\3\35"+
- "\5\35\u0121\n\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+
- "\3\35\3\35\3\35\3\35\7\35\u0132\n\35\f\35\16\35\u0135\13\35\3\36\3\36"+
- "\3\36\3\36\3\36\7\36\u013c\n\36\f\36\16\36\u013f\13\36\3\37\3\37\3\37"+
- "\3\37\3\37\3 \3 \3 \3 \3 \3 \7 \u014c\n \f \16 \u014f\13 \3!\3!\3!\5!"+
- "\u0154\n!\3!\5!\u0157\n!\3!\3!\5!\u015b\n!\3\"\3\"\3#\3#\5#\u0161\n#\3"+
- "$\3$\3%\3%\3%\3%\3%\3%\3&\3&\3&\2\b\b*\648:>\'\2\4\6\b\n\f\16\20\22\24"+
- "\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJ\2\f\4\2\37\37((\4\2\30"+
- "\30%%\3\2+-\4\2%%))\3\2\21\24\3\2\17\20\3\2\25\26\3\2\13\f\3\2)+\4\2\3"+
- "\3\63\63\2\u0177\2L\3\2\2\2\4P\3\2\2\2\6Z\3\2\2\2\b^\3\2\2\2\nk\3\2\2"+
- "\2\fm\3\2\2\2\16r\3\2\2\2\20u\3\2\2\2\22y\3\2\2\2\24\u0081\3\2\2\2\26"+
- "\u0084\3\2\2\2\30\u0090\3\2\2\2\32\u0094\3\2\2\2\34\u0098\3\2\2\2\36\u009c"+
- "\3\2\2\2 \u00a2\3\2\2\2\"\u00b3\3\2\2\2$\u00b5\3\2\2\2&\u00c8\3\2\2\2"+
- "(\u00d7\3\2\2\2*\u00d9\3\2\2\2,\u00e5\3\2\2\2.\u00e7\3\2\2\2\60\u00e9"+
- "\3\2\2\2\62\u00fc\3\2\2\2\64\u0101\3\2\2\2\66\u010c\3\2\2\28\u0120\3\2"+
- "\2\2:\u0136\3\2\2\2<\u0140\3\2\2\2>\u0145\3\2\2\2@\u015a\3\2\2\2B\u015c"+
- "\3\2\2\2D\u0160\3\2\2\2F\u0162\3\2\2\2H\u0164\3\2\2\2J\u016a\3\2\2\2L"+
- "M\5\b\5\2MN\7\2\2\3N\3\3\2\2\2OQ\5\6\4\2PO\3\2\2\2PQ\3\2\2\2QR\3\2\2\2"+
- "RT\7\33\2\2SU\5:\36\2TS\3\2\2\2TU\3\2\2\2UV\3\2\2\2VW\58\35\2WX\7\34\2"+
- "\2XY\7\2\2\3Y\5\3\2\2\2Z[\7 \2\2[\\\5J&\2\\]\7!\2\2]\7\3\2\2\2^_\b\5\1"+
- "\2_`\5\n\6\2`e\3\2\2\2ab\f\3\2\2bd\5\n\6\2ca\3\2\2\2dg\3\2\2\2ec\3\2\2"+
- "\2ef\3\2\2\2f\t\3\2\2\2ge\3\2\2\2hl\5\26\f\2il\5\16\b\2jl\5\f\7\2kh\3"+
- "\2\2\2ki\3\2\2\2kj\3\2\2\2l\13\3\2\2\2mn\7\4\2\2no\7\31\2\2op\5B\"\2p"+
- "q\7\32\2\2q\r\3\2\2\2rs\5\20\t\2st\5*\26\2t\17\3\2\2\2uv\7\n\2\2vw\7("+
- "\2\2wx\5J&\2x\21\3\2\2\2yz\7\n\2\2z{\7\31\2\2{}\5J&\2|~\5\24\13\2}|\3"+
- "\2\2\2}~\3\2\2\2~\177\3\2\2\2\177\u0080\7\32\2\2\u0080\23\3\2\2\2\u0081"+
- "\u0082\7#\2\2\u0082\u0083\5\"\22\2\u0083\25\3\2\2\2\u0084\u0086\5\30\r"+
- "\2\u0085\u0087\5\32\16\2\u0086\u0085\3\2\2\2\u0086\u0087\3\2\2\2\u0087"+
- "\u0089\3\2\2\2\u0088\u008a\5\36\20\2\u0089\u0088\3\2\2\2\u0089\u008a\3"+
- "\2\2\2\u008a\u008c\3\2\2\2\u008b\u008d\5 \21\2\u008c\u008b\3\2\2\2\u008c"+
- "\u008d\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u008f\5*\26\2\u008f\27\3\2\2"+
- "\2\u0090\u0091\7\5\2\2\u0091\u0092\7(\2\2\u0092\u0093\5J&\2\u0093\31\3"+
- "\2\2\2\u0094\u0095\7\6\2\2\u0095\u0096\7(\2\2\u0096\u0097\7\r\2\2\u0097"+
- "\33\3\2\2\2\u0098\u0099\7,\2\2\u0099\u009a\5\62\32\2\u009a\u009b\7,\2"+
- "\2\u009b\35\3\2\2\2\u009c\u009d\7\7\2\2\u009d\u00a0\7(\2\2\u009e\u00a1"+
- "\5B\"\2\u009f\u00a1\5\34\17\2\u00a0\u009e\3\2\2\2\u00a0\u009f\3\2\2\2"+
- "\u00a1\37\3\2\2\2\u00a2\u00a3\7\b\2\2\u00a3\u00a4\7(\2\2\u00a4\u00a5\5"+
- "\"\22\2\u00a5!\3\2\2\2\u00a6\u00a7\7\33\2\2\u00a7\u00ac\5$\23\2\u00a8"+
- "\u00a9\7#\2\2\u00a9\u00ab\5$\23\2\u00aa\u00a8\3\2\2\2\u00ab\u00ae\3\2"+
- "\2\2\u00ac\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00af\3\2\2\2\u00ae"+
- "\u00ac\3\2\2\2\u00af\u00b0\7\34\2\2\u00b0\u00b4\3\2\2\2\u00b1\u00b2\7"+
- "\33\2\2\u00b2\u00b4\7\34\2\2\u00b3\u00a6\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4"+
- "#\3\2\2\2\u00b5\u00b6\5B\"\2\u00b6\u00b7\7$\2\2\u00b7\u00b8\5&\24\2\u00b8"+
- "%\3\2\2\2\u00b9\u00c9\5B\"\2\u00ba\u00bc\7%\2\2\u00bb\u00ba\3\2\2\2\u00bb"+
- "\u00bc\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\u00bf\7\60\2\2\u00be\u00c0\7"+
- "\61\2\2\u00bf\u00be\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c2\3\2\2\2\u00c1"+
- "\u00c3\7\62\2\2\u00c2\u00c1\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c9\3"+
- "\2\2\2\u00c4\u00c9\5\"\22\2\u00c5\u00c9\5(\25\2\u00c6\u00c9\7\r\2\2\u00c7"+
- "\u00c9\7\16\2\2\u00c8\u00b9\3\2\2\2\u00c8\u00bb\3\2\2\2\u00c8\u00c4\3"+
- "\2\2\2\u00c8\u00c5\3\2\2\2\u00c8\u00c6\3\2\2\2\u00c8\u00c7\3\2\2\2\u00c9"+
- "\'\3\2\2\2\u00ca\u00cb\7 \2\2\u00cb\u00d0\5&\24\2\u00cc\u00cd\7#\2\2\u00cd"+
- "\u00cf\5&\24\2\u00ce\u00cc\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\7!\2\2\u00d4\u00d8\3\2\2\2\u00d5\u00d6\7 \2\2\u00d6\u00d8\7!\2"+
- "\2\u00d7\u00ca\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d8)\3\2\2\2\u00d9\u00da"+
- "\b\26\1\2\u00da\u00db\5,\27\2\u00db\u00e0\3\2\2\2\u00dc\u00dd\f\3\2\2"+
- "\u00dd\u00df\5,\27\2\u00de\u00dc\3\2\2\2\u00df\u00e2\3\2\2\2\u00e0\u00de"+
- "\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1+\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e3"+
- "\u00e6\5\60\31\2\u00e4\u00e6\5\22\n\2\u00e5\u00e3\3\2\2\2\u00e5\u00e4"+
- "\3\2\2\2\u00e6-\3\2\2\2\u00e7\u00e8\t\2\2\2\u00e8/\3\2\2\2\u00e9\u00eb"+
- "\7\t\2\2\u00ea\u00ec\5\66\34\2\u00eb\u00ea\3\2\2\2\u00eb\u00ec\3\2\2\2"+
- "\u00ec\u00ed\3\2\2\2\u00ed\u00f6\5.\30\2\u00ee\u00f0\7\33\2\2\u00ef\u00f1"+
- "\5:\36\2\u00f0\u00ef\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2"+
- "\u00f3\58\35\2\u00f3\u00f4\7\34\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f7\5"+
- "\34\17\2\u00f6\u00ee\3\2\2\2\u00f6\u00f5\3\2\2\2\u00f7\u00f9\3\2\2\2\u00f8"+
- "\u00fa\5D#\2\u00f9\u00f8\3\2\2\2\u00f9\u00fa\3\2\2\2\u00fa\61\3\2\2\2"+
- "\u00fb\u00fd\5\64\33\2\u00fc\u00fb\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\u00fe"+
- "\3\2\2\2\u00fe\u00ff\7\"\2\2\u00ff\u0100\5J&\2\u0100\63\3\2\2\2\u0101"+
- "\u0102\b\33\1\2\u0102\u0103\5J&\2\u0103\u0109\3\2\2\2\u0104\u0105\f\3"+
- "\2\2\u0105\u0106\7&\2\2\u0106\u0108\5J&\2\u0107\u0104\3\2\2\2\u0108\u010b"+
- "\3\2\2\2\u0109\u0107\3\2\2\2\u0109\u010a\3\2\2\2\u010a\65\3\2\2\2\u010b"+
- "\u0109\3\2\2\2\u010c\u010d\7\31\2\2\u010d\u010e\5J&\2\u010e\u010f\7\32"+
- "\2\2\u010f\67\3\2\2\2\u0110\u0111\b\35\1\2\u0111\u0112\t\3\2\2\u0112\u0121"+
- "\58\35\f\u0113\u0114\7\31\2\2\u0114\u0115\58\35\2\u0115\u0116\7\32\2\2"+
- "\u0116\u0121\3\2\2\2\u0117\u0121\5@!\2\u0118\u0119\7\3\2\2\u0119\u011b"+
- "\7\31\2\2\u011a\u011c\5> \2\u011b\u011a\3\2\2\2\u011b\u011c\3\2\2\2\u011c"+
- "\u011d\3\2\2\2\u011d\u0121\7\32\2\2\u011e\u011f\7.\2\2\u011f\u0121\5J"+
- "&\2\u0120\u0110\3\2\2\2\u0120\u0113\3\2\2\2\u0120\u0117\3\2\2\2\u0120"+
- "\u0118\3\2\2\2\u0120\u011e\3\2\2\2\u0121\u0133\3\2\2\2\u0122\u0123\f\n"+
- "\2\2\u0123\u0124\t\4\2\2\u0124\u0132\58\35\13\u0125\u0126\f\t\2\2\u0126"+
- "\u0127\t\5\2\2\u0127\u0132\58\35\n\u0128\u0129\f\b\2\2\u0129\u012a\t\6"+
- "\2\2\u012a\u0132\58\35\t\u012b\u012c\f\7\2\2\u012c\u012d\t\7\2\2\u012d"+
- "\u0132\58\35\b\u012e\u012f\f\6\2\2\u012f\u0130\t\b\2\2\u0130\u0132\58"+
- "\35\7\u0131\u0122\3\2\2\2\u0131\u0125\3\2\2\2\u0131\u0128\3\2\2\2\u0131"+
- "\u012b\3\2\2\2\u0131\u012e\3\2\2\2\u0132\u0135\3\2\2\2\u0133\u0131\3\2"+
- "\2\2\u0133\u0134\3\2\2\2\u01349\3\2\2\2\u0135\u0133\3\2\2\2\u0136\u0137"+
- "\b\36\1\2\u0137\u0138\5<\37\2\u0138\u013d\3\2\2\2\u0139\u013a\f\3\2\2"+
- "\u013a\u013c\5<\37\2\u013b\u0139\3\2\2\2\u013c\u013f\3\2\2\2\u013d\u013b"+
- "\3\2\2\2\u013d\u013e\3\2\2\2\u013e;\3\2\2\2\u013f\u013d\3\2\2\2\u0140"+
- "\u0141\7.\2\2\u0141\u0142\5J&\2\u0142\u0143\7(\2\2\u0143\u0144\58\35\2"+
- "\u0144=\3\2\2\2\u0145\u0146\b \1\2\u0146\u0147\58\35\2\u0147\u014d\3\2"+
- "\2\2\u0148\u0149\f\3\2\2\u0149\u014a\7#\2\2\u014a\u014c\58\35\2\u014b"+
- "\u0148\3\2\2\2\u014c\u014f\3\2\2\2\u014d\u014b\3\2\2\2\u014d\u014e\3\2"+
- "\2\2\u014e?\3\2\2\2\u014f\u014d\3\2\2\2\u0150\u015b\7\16\2\2\u0151\u0153"+
- "\7\60\2\2\u0152\u0154\7\61\2\2\u0153\u0152\3\2\2\2\u0153\u0154\3\2\2\2"+
- "\u0154\u0156\3\2\2\2\u0155\u0157\7\62\2\2\u0156\u0155\3\2\2\2\u0156\u0157"+
- "\3\2\2\2\u0157\u015b\3\2\2\2\u0158\u015b\7\r\2\2\u0159\u015b\5B\"\2\u015a"+
- "\u0150\3\2\2\2\u015a\u0151\3\2\2\2\u015a\u0158\3\2\2\2\u015a\u0159\3\2"+
- "\2\2\u015bA\3\2\2\2\u015c\u015d\t\t\2\2\u015dC\3\2\2\2\u015e\u0161\5F"+
- "$\2\u015f\u0161\5H%\2\u0160\u015e\3\2\2\2\u0160\u015f\3\2\2\2\u0161E\3"+
- "\2\2\2\u0162\u0163\t\n\2\2\u0163G\3\2\2\2\u0164\u0165\7 \2\2\u0165\u0166"+
- "\7\60\2\2\u0166\u0167\7#\2\2\u0167\u0168\7\60\2\2\u0168\u0169\7!\2\2\u0169"+
- "I\3\2\2\2\u016a\u016b\t\13\2\2\u016bK\3\2\2\2%PTek}\u0086\u0089\u008c"+
- "\u00a0\u00ac\u00b3\u00bb\u00bf\u00c2\u00c8\u00d0\u00d7\u00e0\u00e5\u00eb"+
- "\u00f0\u00f6\u00f9\u00fc\u0109\u011b\u0120\u0131\u0133\u013d\u014d\u0153"+
- "\u0156\u015a\u0160";
+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\3\2\3\2\3\2\3\3\5\3S\n\3\3"+
+ "\3\3\3\5\3W\n\3\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\5\7"+
+ "\5f\n\5\f\5\16\5i\13\5\3\6\3\6\3\6\5\6n\n\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\n\3\n\3\n\3\n\5\n\u0080\n\n\3\n\3\n\3\13\3\13"+
+ "\3\13\3\f\3\f\5\f\u0089\n\f\3\f\5\f\u008c\n\f\3\f\5\f\u008f\n\f\3\f\3"+
+ "\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3"+
+ "\20\3\20\5\20\u00a3\n\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\7\22"+
+ "\u00ad\n\22\f\22\16\22\u00b0\13\22\3\22\3\22\3\22\3\22\5\22\u00b6\n\22"+
+ "\3\23\3\23\3\23\3\23\3\24\3\24\5\24\u00be\n\24\3\24\3\24\5\24\u00c2\n"+
+ "\24\3\24\5\24\u00c5\n\24\3\24\3\24\3\24\3\24\5\24\u00cb\n\24\3\25\3\25"+
+ "\3\25\3\25\7\25\u00d1\n\25\f\25\16\25\u00d4\13\25\3\25\3\25\3\25\3\25"+
+ "\5\25\u00da\n\25\3\26\3\26\3\26\3\26\3\26\7\26\u00e1\n\26\f\26\16\26\u00e4"+
+ "\13\26\3\27\3\27\5\27\u00e8\n\27\3\30\3\30\3\31\3\31\5\31\u00ee\n\31\3"+
+ "\31\3\31\3\31\5\31\u00f3\n\31\3\31\3\31\3\31\3\31\5\31\u00f9\n\31\3\31"+
+ "\5\31\u00fc\n\31\3\32\5\32\u00ff\n\32\3\32\3\32\3\32\3\33\3\33\3\33\3"+
+ "\33\3\33\3\33\7\33\u010a\n\33\f\33\16\33\u010d\13\33\3\34\3\34\3\34\3"+
+ "\34\3\34\3\34\3\34\3\34\5\34\u0117\n\34\3\35\3\35\3\35\3\35\3\36\3\36"+
+ "\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u0128\n\36\3\36\3\36"+
+ "\3\36\5\36\u012d\n\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36"+
+ "\3\36\3\36\3\36\3\36\3\36\7\36\u013e\n\36\f\36\16\36\u0141\13\36\3\37"+
+ "\3\37\3\37\3\37\3\37\7\37\u0148\n\37\f\37\16\37\u014b\13\37\3 \3 \3 \3"+
+ " \3 \3!\3!\3!\3!\3!\3!\7!\u0158\n!\f!\16!\u015b\13!\3\"\3\"\3\"\5\"\u0160"+
+ "\n\"\3\"\5\"\u0163\n\"\3\"\3\"\5\"\u0167\n\"\3#\3#\3$\3$\5$\u016d\n$\3"+
+ "%\3%\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\2\b\b*\64:<@(\2\4\6\b\n\f\16\20\22"+
+ "\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJL\2\f\4\2\37\37((\4\2"+
+ "\30\30%%\3\2+-\4\2%%))\3\2\21\24\3\2\17\20\3\2\25\26\3\2\13\f\3\2)+\4"+
+ "\2\3\3\63\63\2\u0189\2N\3\2\2\2\4R\3\2\2\2\6\\\3\2\2\2\b`\3\2\2\2\nm\3"+
+ "\2\2\2\fo\3\2\2\2\16t\3\2\2\2\20w\3\2\2\2\22{\3\2\2\2\24\u0083\3\2\2\2"+
+ "\26\u0086\3\2\2\2\30\u0092\3\2\2\2\32\u0096\3\2\2\2\34\u009a\3\2\2\2\36"+
+ "\u009e\3\2\2\2 \u00a4\3\2\2\2\"\u00b5\3\2\2\2$\u00b7\3\2\2\2&\u00ca\3"+
+ "\2\2\2(\u00d9\3\2\2\2*\u00db\3\2\2\2,\u00e7\3\2\2\2.\u00e9\3\2\2\2\60"+
+ "\u00eb\3\2\2\2\62\u00fe\3\2\2\2\64\u0103\3\2\2\2\66\u0116\3\2\2\28\u0118"+
+ "\3\2\2\2:\u012c\3\2\2\2<\u0142\3\2\2\2>\u014c\3\2\2\2@\u0151\3\2\2\2B"+
+ "\u0166\3\2\2\2D\u0168\3\2\2\2F\u016c\3\2\2\2H\u016e\3\2\2\2J\u0170\3\2"+
+ "\2\2L\u0176\3\2\2\2NO\5\b\5\2OP\7\2\2\3P\3\3\2\2\2QS\5\6\4\2RQ\3\2\2\2"+
+ "RS\3\2\2\2ST\3\2\2\2TV\7\33\2\2UW\5<\37\2VU\3\2\2\2VW\3\2\2\2WX\3\2\2"+
+ "\2XY\5:\36\2YZ\7\34\2\2Z[\7\2\2\3[\5\3\2\2\2\\]\7 \2\2]^\5L\'\2^_\7!\2"+
+ "\2_\7\3\2\2\2`a\b\5\1\2ab\5\n\6\2bg\3\2\2\2cd\f\3\2\2df\5\n\6\2ec\3\2"+
+ "\2\2fi\3\2\2\2ge\3\2\2\2gh\3\2\2\2h\t\3\2\2\2ig\3\2\2\2jn\5\26\f\2kn\5"+
+ "\16\b\2ln\5\f\7\2mj\3\2\2\2mk\3\2\2\2ml\3\2\2\2n\13\3\2\2\2op\7\4\2\2"+
+ "pq\7\31\2\2qr\5D#\2rs\7\32\2\2s\r\3\2\2\2tu\5\20\t\2uv\5*\26\2v\17\3\2"+
+ "\2\2wx\7\n\2\2xy\7(\2\2yz\5L\'\2z\21\3\2\2\2{|\7\n\2\2|}\7\31\2\2}\177"+
+ "\5L\'\2~\u0080\5\24\13\2\177~\3\2\2\2\177\u0080\3\2\2\2\u0080\u0081\3"+
+ "\2\2\2\u0081\u0082\7\32\2\2\u0082\23\3\2\2\2\u0083\u0084\7#\2\2\u0084"+
+ "\u0085\5\"\22\2\u0085\25\3\2\2\2\u0086\u0088\5\30\r\2\u0087\u0089\5\32"+
+ "\16\2\u0088\u0087\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008b\3\2\2\2\u008a"+
+ "\u008c\5\36\20\2\u008b\u008a\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u008e\3"+
+ "\2\2\2\u008d\u008f\5 \21\2\u008e\u008d\3\2\2\2\u008e\u008f\3\2\2\2\u008f"+
+ "\u0090\3\2\2\2\u0090\u0091\5*\26\2\u0091\27\3\2\2\2\u0092\u0093\7\5\2"+
+ "\2\u0093\u0094\7(\2\2\u0094\u0095\5L\'\2\u0095\31\3\2\2\2\u0096\u0097"+
+ "\7\6\2\2\u0097\u0098\7(\2\2\u0098\u0099\7\r\2\2\u0099\33\3\2\2\2\u009a"+
+ "\u009b\7,\2\2\u009b\u009c\5\62\32\2\u009c\u009d\7,\2\2\u009d\35\3\2\2"+
+ "\2\u009e\u009f\7\7\2\2\u009f\u00a2\7(\2\2\u00a0\u00a3\5D#\2\u00a1\u00a3"+
+ "\5\34\17\2\u00a2\u00a0\3\2\2\2\u00a2\u00a1\3\2\2\2\u00a3\37\3\2\2\2\u00a4"+
+ "\u00a5\7\b\2\2\u00a5\u00a6\7(\2\2\u00a6\u00a7\5\"\22\2\u00a7!\3\2\2\2"+
+ "\u00a8\u00a9\7\33\2\2\u00a9\u00ae\5$\23\2\u00aa\u00ab\7#\2\2\u00ab\u00ad"+
+ "\5$\23\2\u00ac\u00aa\3\2\2\2\u00ad\u00b0\3\2\2\2\u00ae\u00ac\3\2\2\2\u00ae"+
+ "\u00af\3\2\2\2\u00af\u00b1\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00b2\7\34"+
+ "\2\2\u00b2\u00b6\3\2\2\2\u00b3\u00b4\7\33\2\2\u00b4\u00b6\7\34\2\2\u00b5"+
+ "\u00a8\3\2\2\2\u00b5\u00b3\3\2\2\2\u00b6#\3\2\2\2\u00b7\u00b8\5D#\2\u00b8"+
+ "\u00b9\7$\2\2\u00b9\u00ba\5&\24\2\u00ba%\3\2\2\2\u00bb\u00cb\5D#\2\u00bc"+
+ "\u00be\7%\2\2\u00bd\u00bc\3\2\2\2\u00bd\u00be\3\2\2\2\u00be\u00bf\3\2"+
+ "\2\2\u00bf\u00c1\7\60\2\2\u00c0\u00c2\7\61\2\2\u00c1\u00c0\3\2\2\2\u00c1"+
+ "\u00c2\3\2\2\2\u00c2\u00c4\3\2\2\2\u00c3\u00c5\7\62\2\2\u00c4\u00c3\3"+
+ "\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00cb\3\2\2\2\u00c6\u00cb\5\"\22\2\u00c7"+
+ "\u00cb\5(\25\2\u00c8\u00cb\7\r\2\2\u00c9\u00cb\7\16\2\2\u00ca\u00bb\3"+
+ "\2\2\2\u00ca\u00bd\3\2\2\2\u00ca\u00c6\3\2\2\2\u00ca\u00c7\3\2\2\2\u00ca"+
+ "\u00c8\3\2\2\2\u00ca\u00c9\3\2\2\2\u00cb\'\3\2\2\2\u00cc\u00cd\7 \2\2"+
+ "\u00cd\u00d2\5&\24\2\u00ce\u00cf\7#\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"+
+ "\u00d5\3\2\2\2\u00d4\u00d2\3\2\2\2\u00d5\u00d6\7!\2\2\u00d6\u00da\3\2"+
+ "\2\2\u00d7\u00d8\7 \2\2\u00d8\u00da\7!\2\2\u00d9\u00cc\3\2\2\2\u00d9\u00d7"+
+ "\3\2\2\2\u00da)\3\2\2\2\u00db\u00dc\b\26\1\2\u00dc\u00dd\5,\27\2\u00dd"+
+ "\u00e2\3\2\2\2\u00de\u00df\f\3\2\2\u00df\u00e1\5,\27\2\u00e0\u00de\3\2"+
+ "\2\2\u00e1\u00e4\3\2\2\2\u00e2\u00e0\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3"+
+ "+\3\2\2\2\u00e4\u00e2\3\2\2\2\u00e5\u00e8\5\60\31\2\u00e6\u00e8\5\22\n"+
+ "\2\u00e7\u00e5\3\2\2\2\u00e7\u00e6\3\2\2\2\u00e8-\3\2\2\2\u00e9\u00ea"+
+ "\t\2\2\2\u00ea/\3\2\2\2\u00eb\u00ed\7\t\2\2\u00ec\u00ee\58\35\2\u00ed"+
+ "\u00ec\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f8\5."+
+ "\30\2\u00f0\u00f2\7\33\2\2\u00f1\u00f3\5<\37\2\u00f2\u00f1\3\2\2\2\u00f2"+
+ "\u00f3\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\5:\36\2\u00f5\u00f6\7\34"+
+ "\2\2\u00f6\u00f9\3\2\2\2\u00f7\u00f9\5\34\17\2\u00f8\u00f0\3\2\2\2\u00f8"+
+ "\u00f7\3\2\2\2\u00f9\u00fb\3\2\2\2\u00fa\u00fc\5F$\2\u00fb\u00fa\3\2\2"+
+ "\2\u00fb\u00fc\3\2\2\2\u00fc\61\3\2\2\2\u00fd\u00ff\5\64\33\2\u00fe\u00fd"+
+ "\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0101\7\"\2\2\u0101"+
+ "\u0102\5L\'\2\u0102\63\3\2\2\2\u0103\u0104\b\33\1\2\u0104\u0105\5\66\34"+
+ "\2\u0105\u010b\3\2\2\2\u0106\u0107\f\3\2\2\u0107\u0108\7&\2\2\u0108\u010a"+
+ "\5\66\34\2\u0109\u0106\3\2\2\2\u010a\u010d\3\2\2\2\u010b\u0109\3\2\2\2"+
+ "\u010b\u010c\3\2\2\2\u010c\65\3\2\2\2\u010d\u010b\3\2\2\2\u010e\u0117"+
+ "\5L\'\2\u010f\u0117\7\4\2\2\u0110\u0117\7\5\2\2\u0111\u0117\7\6\2\2\u0112"+
+ "\u0117\7\7\2\2\u0113\u0117\7\b\2\2\u0114\u0117\7\t\2\2\u0115\u0117\7\n"+
+ "\2\2\u0116\u010e\3\2\2\2\u0116\u010f\3\2\2\2\u0116\u0110\3\2\2\2\u0116"+
+ "\u0111\3\2\2\2\u0116\u0112\3\2\2\2\u0116\u0113\3\2\2\2\u0116\u0114\3\2"+
+ "\2\2\u0116\u0115\3\2\2\2\u0117\67\3\2\2\2\u0118\u0119\7\31\2\2\u0119\u011a"+
+ "\5L\'\2\u011a\u011b\7\32\2\2\u011b9\3\2\2\2\u011c\u011d\b\36\1\2\u011d"+
+ "\u011e\t\3\2\2\u011e\u012d\5:\36\f\u011f\u0120\7\31\2\2\u0120\u0121\5"+
+ ":\36\2\u0121\u0122\7\32\2\2\u0122\u012d\3\2\2\2\u0123\u012d\5B\"\2\u0124"+
+ "\u0125\7\3\2\2\u0125\u0127\7\31\2\2\u0126\u0128\5@!\2\u0127\u0126\3\2"+
+ "\2\2\u0127\u0128\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012d\7\32\2\2\u012a"+
+ "\u012b\7.\2\2\u012b\u012d\5L\'\2\u012c\u011c\3\2\2\2\u012c\u011f\3\2\2"+
+ "\2\u012c\u0123\3\2\2\2\u012c\u0124\3\2\2\2\u012c\u012a\3\2\2\2\u012d\u013f"+
+ "\3\2\2\2\u012e\u012f\f\n\2\2\u012f\u0130\t\4\2\2\u0130\u013e\5:\36\13"+
+ "\u0131\u0132\f\t\2\2\u0132\u0133\t\5\2\2\u0133\u013e\5:\36\n\u0134\u0135"+
+ "\f\b\2\2\u0135\u0136\t\6\2\2\u0136\u013e\5:\36\t\u0137\u0138\f\7\2\2\u0138"+
+ "\u0139\t\7\2\2\u0139\u013e\5:\36\b\u013a\u013b\f\6\2\2\u013b\u013c\t\b"+
+ "\2\2\u013c\u013e\5:\36\7\u013d\u012e\3\2\2\2\u013d\u0131\3\2\2\2\u013d"+
+ "\u0134\3\2\2\2\u013d\u0137\3\2\2\2\u013d\u013a\3\2\2\2\u013e\u0141\3\2"+
+ "\2\2\u013f\u013d\3\2\2\2\u013f\u0140\3\2\2\2\u0140;\3\2\2\2\u0141\u013f"+
+ "\3\2\2\2\u0142\u0143\b\37\1\2\u0143\u0144\5> \2\u0144\u0149\3\2\2\2\u0145"+
+ "\u0146\f\3\2\2\u0146\u0148\5> \2\u0147\u0145\3\2\2\2\u0148\u014b\3\2\2"+
+ "\2\u0149\u0147\3\2\2\2\u0149\u014a\3\2\2\2\u014a=\3\2\2\2\u014b\u0149"+
+ "\3\2\2\2\u014c\u014d\7.\2\2\u014d\u014e\5L\'\2\u014e\u014f\7(\2\2\u014f"+
+ "\u0150\5:\36\2\u0150?\3\2\2\2\u0151\u0152\b!\1\2\u0152\u0153\5:\36\2\u0153"+
+ "\u0159\3\2\2\2\u0154\u0155\f\3\2\2\u0155\u0156\7#\2\2\u0156\u0158\5:\36"+
+ "\2\u0157\u0154\3\2\2\2\u0158\u015b\3\2\2\2\u0159\u0157\3\2\2\2\u0159\u015a"+
+ "\3\2\2\2\u015aA\3\2\2\2\u015b\u0159\3\2\2\2\u015c\u0167\7\16\2\2\u015d"+
+ "\u015f\7\60\2\2\u015e\u0160\7\61\2\2\u015f\u015e\3\2\2\2\u015f\u0160\3"+
+ "\2\2\2\u0160\u0162\3\2\2\2\u0161\u0163\7\62\2\2\u0162\u0161\3\2\2\2\u0162"+
+ "\u0163\3\2\2\2\u0163\u0167\3\2\2\2\u0164\u0167\7\r\2\2\u0165\u0167\5D"+
+ "#\2\u0166\u015c\3\2\2\2\u0166\u015d\3\2\2\2\u0166\u0164\3\2\2\2\u0166"+
+ "\u0165\3\2\2\2\u0167C\3\2\2\2\u0168\u0169\t\t\2\2\u0169E\3\2\2\2\u016a"+
+ "\u016d\5H%\2\u016b\u016d\5J&\2\u016c\u016a\3\2\2\2\u016c\u016b\3\2\2\2"+
+ "\u016dG\3\2\2\2\u016e\u016f\t\n\2\2\u016fI\3\2\2\2\u0170\u0171\7 \2\2"+
+ "\u0171\u0172\7\60\2\2\u0172\u0173\7#\2\2\u0173\u0174\7\60\2\2\u0174\u0175"+
+ "\7!\2\2\u0175K\3\2\2\2\u0176\u0177\t\13\2\2\u0177M\3\2\2\2&RVgm\177\u0088"+
+ "\u008b\u008e\u00a2\u00ae\u00b5\u00bd\u00c1\u00c4\u00ca\u00d2\u00d9\u00e2"+
+ "\u00e7\u00ed\u00f2\u00f8\u00fb\u00fe\u010b\u0116\u0127\u012c\u013d\u013f"+
+ "\u0149\u0159\u015f\u0162\u0166\u016c";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {