You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by ar...@apache.org on 2021/03/18 18:53:06 UTC

[incubator-nlpcraft] 03/05: Renaming DSL -> IDL, etc.

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 57c8c3a6f2b748ba69ae219d68d170ac2114e1fc
Author: Aaron Radzinski <ar...@apache.org>
AuthorDate: Thu Mar 18 11:37:13 2021 -0700

    Renaming DSL  -> IDL, etc.
---
 .../{NCDslContext.scala => NCIdlContext.scala}     |    2 +-
 .../{NCDslIntent.scala => NCIdlIntent.scala}       |   12 +-
 .../{NCDslSynonym.scala => NCIdlSynonym.scala}     |    4 +-
 .../intent/{NCDslTerm.scala => NCIdlTerm.scala}    |    8 +-
 ...enPredicate.scala => NCIdlTokenPredicate.scala} |    2 +-
 .../{NCDslCompiler.scala => NCIdlCompiler.scala}   |  144 +-
 ...lCompilerBase.scala => NCIdlCompilerBase.scala} |  210 +-
 ...pilerGlobal.scala => NCIdlCompilerGlobal.scala} |   14 +-
 .../{NCDslFragment.scala => NCIdlFragment.scala}   |    8 +-
 .../{NCDslStack.scala => NCIdlStack.scala}         |   16 +-
 .../intent/compiler/antlr4/NCIntentIdl.interp      |  148 ++
 .../intent/compiler/antlr4/NCIntentIdl.tokens      |   91 +
 .../compiler/antlr4/NCIntentIdlBaseListener.java   |  555 ++++
 .../intent/compiler/antlr4/NCIntentIdlLexer.interp |  172 ++
 .../intent/compiler/antlr4/NCIntentIdlLexer.java   |  568 ++++
 .../intent/compiler/antlr4/NCIntentIdlLexer.tokens |   91 +
 .../compiler/antlr4/NCIntentIdlListener.java       |  458 ++++
 .../intent/compiler/antlr4/NCIntentIdlParser.java  | 2797 ++++++++++++++++++++
 .../model/intent/solver/NCIntentSolver.scala       |    4 +-
 .../model/intent/solver/NCIntentSolverEngine.scala |   20 +-
 .../apache/nlpcraft/probe/mgrs/NCProbeModel.scala  |    4 +-
 .../nlpcraft/probe/mgrs/NCProbeSynonym.scala       |    4 +-
 .../nlpcraft/probe/mgrs/NCProbeSynonymChunk.scala  |    4 +-
 .../probe/mgrs/deploy/NCDeployManager.scala        |   20 +-
 ...lCompilerSpec.scala => NCIdlCompilerSpec.scala} |   12 +-
 25 files changed, 5124 insertions(+), 244 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslContext.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlContext.scala
similarity index 98%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslContext.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlContext.scala
index 2b0a61f..1d09238 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslContext.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlContext.scala
@@ -27,7 +27,7 @@ import org.apache.nlpcraft.model.NCRequest
  * @param fragMeta Optional fragment (argument) metadata passed during intent fragment reference.
  * @param req Server request holder.
  */
-case class NCDslContext(
+case class NCIdlContext(
     intentMeta: ScalaMeta = Map.empty[String, Object],
     convMeta: ScalaMeta = Map.empty[String, Object],
     fragMeta: ScalaMeta = Map.empty[String, Object],
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslIntent.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlIntent.scala
similarity index 90%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslIntent.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlIntent.scala
index 0b965e0..76ec581 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslIntent.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlIntent.scala
@@ -22,26 +22,26 @@ import org.apache.nlpcraft.common.ScalaMeta
 import java.util.regex.Pattern
 
 /**
- * DSL intent.
+ * IDL intent.
  *
  * @param origin File path, file name, method name or URL.
- * @param dsl Original DSL of this intent.
+ * @param idl Original IDL of this intent.
  * @param id
  * @param ordered
  * @param meta
  * @param flow
  * @param terms
  */
-case class NCDslIntent(
+case class NCIdlIntent(
     origin: String,
-    dsl: String,
+    idl: String,
     id: String,
     ordered: Boolean,
     meta: ScalaMeta,
     flow: Option[String],
     flowClsName: Option[String],
     flowMtdName: Option[String],
-    terms: List[NCDslTerm]
+    terms: List[NCIdlTerm]
 ) {
     require(id != null)
     require(terms.nonEmpty)
@@ -56,5 +56,5 @@ case class NCDslIntent(
 
     lazy val isFlowDefined = flow.isDefined || flowMtdName.isDefined
 
-    override def toString: String = dsl
+    override def toString: String = idl
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslSynonym.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlSynonym.scala
similarity index 94%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslSynonym.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlSynonym.scala
index 7a6694d..4abe52a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslSynonym.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlSynonym.scala
@@ -25,10 +25,10 @@ import org.apache.nlpcraft.model.NCToken
  * @param alias
  * @param pred
  */
-case class NCDslSynonym(
+case class NCIdlSynonym(
     origin: String,
     alias: Option[String],
-    pred: NCDslTokenPredicate,
+    pred: NCIdlTokenPredicate,
 ) {
     require(origin != null)
     require(pred != null)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTerm.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTerm.scala
similarity index 91%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTerm.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTerm.scala
index 55026ae..6ef71d6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTerm.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTerm.scala
@@ -28,10 +28,10 @@ import org.apache.nlpcraft.common._
  * @param max
  * @param conv
  */
-case class NCDslTerm(
+case class NCIdlTerm(
     dsl: String,
     id: Option[String],
-    pred: NCDslTokenPredicate,
+    pred: NCIdlTokenPredicate,
     min: Int,
     max: Int,
     conv: Boolean,
@@ -45,8 +45,8 @@ case class NCDslTerm(
      * @param meta
      * @return
      */
-    def cloneWithFragMeta(meta: Map[String, Any]): NCDslTerm =
-        NCDslTerm(
+    def cloneWithFragMeta(meta: Map[String, Any]): NCIdlTerm =
+        NCIdlTerm(
             dsl,
             id,
             pred,
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTokenPredicate.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTokenPredicate.scala
similarity index 93%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTokenPredicate.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTokenPredicate.scala
index d70b463..d585a8a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCDslTokenPredicate.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/NCIdlTokenPredicate.scala
@@ -22,4 +22,4 @@ import org.apache.nlpcraft.model.NCToken
 /**
  *
  */
-trait NCDslTokenPredicate extends ((NCToken, NCDslContext) ⇒ (Boolean /* Predicate. */ , Int /* How many times a token was used. */ ))
+trait NCIdlTokenPredicate extends ((NCToken, NCIdlContext) ⇒ (Boolean /* Predicate. */ , Int /* How many times a token was used. */ ))
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompiler.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompiler.scala
similarity index 85%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompiler.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompiler.scala
index 7d538d0..720b681 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompiler.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompiler.scala
@@ -22,10 +22,10 @@ import org.antlr.v4.runtime.tree.ParseTreeWalker
 import org.antlr.v4.runtime._
 import org.antlr.v4.runtime.{ParserRuleContext ⇒ PRC}
 import org.apache.nlpcraft.common._
-import org.apache.nlpcraft.model.intent.compiler.antlr4.{NCIntentDslBaseListener, NCIntentDslLexer, NCIntentDslParser ⇒ IDP}
-import org.apache.nlpcraft.model.intent.compiler.{NCDslCompilerGlobal ⇒ Global}
+import org.apache.nlpcraft.model.intent.compiler.antlr4.{NCIntentIdlBaseListener, NCIntentIdlLexer, NCIntentIdlParser ⇒ IDP}
+import org.apache.nlpcraft.model.intent.compiler.{NCIdlCompilerGlobal ⇒ Global}
 import org.apache.nlpcraft.model._
-import org.apache.nlpcraft.model.intent.{NCDslContext, NCDslIntent, NCDslSynonym, NCDslTerm, NCDslTokenPredicate}
+import org.apache.nlpcraft.model.intent.{NCIdlContext, NCIdlIntent, NCIdlSynonym, NCIdlTerm, NCIdlTokenPredicate}
 
 import java.io._
 import java.net._
@@ -35,10 +35,10 @@ import java.util.regex.{Pattern, PatternSyntaxException}
 import scala.collection.mutable
 import scala.collection.mutable.ArrayBuffer
 
-object NCDslCompiler extends LazyLogging {
+object NCIdlCompiler extends LazyLogging {
     // Compiler caches.
-    private val intentCache = new mutable.HashMap[String, Set[NCDslIntent]]
-    private val synCache = new mutable.HashMap[String, NCDslSynonym]
+    private val intentCache = new mutable.HashMap[String, Set[NCIdlIntent]]
+    private val synCache = new mutable.HashMap[String, NCIdlSynonym]
 
     /**
       *
@@ -46,13 +46,13 @@ object NCDslCompiler extends LazyLogging {
       * @param idl
       * @param mdl
       */
-    class FiniteStateMachine(origin: String, idl: String, mdl: NCModel) extends NCIntentDslBaseListener with NCDslCompilerBase {
+    class FiniteStateMachine(origin: String, idl: String, mdl: NCModel) extends NCIntentIdlBaseListener with NCIdlCompilerBase {
         // Actual value for '*' as in min/max shortcut.
         final private val MINMAX_MAX = 100
 
         // Accumulators for parsed objects.
-        private val intents = ArrayBuffer.empty[NCDslIntent]
-        private var synonym: NCDslSynonym = _
+        private val intents = ArrayBuffer.empty[NCIdlIntent]
+        private var synonym: NCIdlSynonym = _
 
         // Synonym.
         private var alias: String = _
@@ -68,7 +68,7 @@ object NCDslCompiler extends LazyLogging {
         private var intentMeta: ScalaMeta = _
 
         // Accumulator for parsed terms.
-        private val terms = ArrayBuffer.empty[NCDslTerm]
+        private val terms = ArrayBuffer.empty[NCIdlTerm]
 
         // Currently term.
         private var termId: String = _
@@ -88,13 +88,13 @@ object NCDslCompiler extends LazyLogging {
          *
          * @return
          */
-        def getCompiledIntents: Set[NCDslIntent] = intents.toSet
+        def getCompiledIntents: Set[NCIdlIntent] = intents.toSet
 
         /**
          *
          * @return
          */
-        def getCompiledSynonym: NCDslSynonym = synonym
+        def getCompiledSynonym: NCIdlSynonym = synonym
 
         /*
          * Shared/common implementation.
@@ -115,7 +115,7 @@ object NCDslCompiler extends LazyLogging {
         override def exitAlias(ctx: IDP.AliasContext): Unit = alias = ctx.id().getText
 
         override def enterCallExpr(ctx: IDP.CallExprContext): Unit =
-            instrs += ((_, stack: NCDslStack, _) ⇒ stack.push(stack.PLIST_MARKER))
+            instrs += ((_, stack: NCIdlStack, _) ⇒ stack.push(stack.PLIST_MARKER))
 
         /**
          *
@@ -180,7 +180,7 @@ object NCDslCompiler extends LazyLogging {
 
             val pred = instrToPredicate("Synonym")
             val capture = alias
-            val wrapper: NCDslTokenPredicate = (tok: NCToken, ctx: NCDslContext) ⇒ {
+            val wrapper: NCIdlTokenPredicate = (tok: NCToken, ctx: NCIdlContext) ⇒ {
                 val (res, tokUses) = pred(tok, ctx)
 
                 // Store predicate's alias, if any, in token metadata if this token satisfies this predicate.
@@ -199,7 +199,7 @@ object NCDslCompiler extends LazyLogging {
                 (res, tokUses)
             }
 
-            synonym = NCDslSynonym(origin, Option(alias), wrapper)
+            synonym = NCIdlSynonym(origin, Option(alias), wrapper)
 
             alias = null
             instrs.clear()
@@ -254,12 +254,12 @@ object NCDslCompiler extends LazyLogging {
             if (max < 1)
                 throw newSyntaxError(s"Invalid intent term max quantifiers: $max (must be max >= 1).")(ctx.minMax())
 
-            val pred: NCDslTokenPredicate = if (refMtdName.isDefined) { // User-code defined term.
+            val pred: NCIdlTokenPredicate = if (refMtdName.isDefined) { // User-code defined term.
                 // Closure copies.
                 val clsName = refClsName.orNull
                 val mtdName = refMtdName.orNull
 
-                (tok: NCToken, termCtx: NCDslContext) ⇒ {
+                (tok: NCToken, termCtx: NCIdlContext) ⇒ {
                     val javaCtx: NCTokenPredicateContext = new NCTokenPredicateContext {
                         override lazy val getRequest: NCRequest = termCtx.req
                         override lazy val getToken: NCToken = tok
@@ -292,7 +292,7 @@ object NCDslCompiler extends LazyLogging {
                 instrToPredicate("Intent term")(ctx.expr())
 
             // Add term.
-            terms += NCDslTerm(
+            terms += NCIdlTerm(
                 ctx.getText,
                 Option(termId),
                 pred,
@@ -314,12 +314,12 @@ object NCDslCompiler extends LazyLogging {
          * @param subj
          * @return
          */
-        private def instrToPredicate(subj: String)(implicit ctx: PRC): NCDslTokenPredicate = {
+        private def instrToPredicate(subj: String)(implicit ctx: PRC): NCIdlTokenPredicate = {
             val code = mutable.Buffer.empty[I]
 
             code ++= instrs
 
-            (tok: NCToken, termCtx: NCDslContext) ⇒ {
+            (tok: NCToken, termCtx: NCIdlContext) ⇒ {
                 val stack = new S()
 
                 // Execute all instructions.
@@ -337,7 +337,7 @@ object NCDslCompiler extends LazyLogging {
         }
 
         override def exitFrag(ctx: IDP.FragContext): Unit = {
-            Global.addFragment(mdl.getId, NCDslFragment(fragId, terms.toList))
+            Global.addFragment(mdl.getId, NCIdlFragment(fragId, terms.toList))
 
             terms.clear()
             fragId = null
@@ -348,7 +348,7 @@ object NCDslCompiler extends LazyLogging {
           * @param intent
           * @param ctx
           */
-        private def addIntent(intent: NCDslIntent)(implicit ctx: ParserRuleContext): Unit = {
+        private def addIntent(intent: NCIdlIntent)(implicit ctx: ParserRuleContext): Unit = {
             val intentId = intent.id
 
             if (intents.exists(_.id == intentId))
@@ -365,13 +365,13 @@ object NCDslCompiler extends LazyLogging {
             else {
                 Global.addImport(x)
 
-                var imports: Set[NCDslIntent] = null
+                var imports: Set[NCIdlIntent] = null
 
                 val file = new File(x)
 
                 // First, try absolute path.
                 if (file.exists())
-                    imports = NCDslCompiler.compileIntents(
+                    imports = NCIdlCompiler.compileIntents(
                         U.readFile(file).mkString("\n"),
                         mdl,
                         x
@@ -382,7 +382,7 @@ object NCDslCompiler extends LazyLogging {
                     val in = mdl.getClass.getClassLoader.getResourceAsStream(x)
 
                     if (in != null)
-                        imports = NCDslCompiler.compileIntents(
+                        imports = NCIdlCompiler.compileIntents(
                             U.readStream(in).mkString("\n"),
                             mdl,
                             x
@@ -392,7 +392,7 @@ object NCDslCompiler extends LazyLogging {
                 // Finally, try as URL resource.
                 if (imports == null) {
                     try
-                        imports = NCDslCompiler.compileIntents(
+                        imports = NCIdlCompiler.compileIntents(
                             U.readStream(new URL(x).openStream()).mkString("\n"),
                             mdl,
                             x
@@ -410,7 +410,7 @@ object NCDslCompiler extends LazyLogging {
 
         override def exitIntent(ctx: IDP.IntentContext): Unit = {
             addIntent(
-                NCDslIntent(
+                NCIdlIntent(
                     origin,
                     idl,
                     intentId,
@@ -442,8 +442,8 @@ object NCDslCompiler extends LazyLogging {
      * @param srcName
      * @param line
      * @param charPos
-     * @param dsl
-     * @param origin DSL origin.
+     * @param idl
+     * @param origin IDL origin.
      * @param mdl
      * @return
      */
@@ -452,9 +452,9 @@ object NCDslCompiler extends LazyLogging {
         srcName: String,
         line: Int, // 1, 2, ...
         charPos: Int, // 0, 1, 2, ...
-        dsl: String,
+        idl: String,
         origin: String,
-        mdl: NCModel): String = mkError("syntax", msg, srcName, line, charPos, dsl, origin, mdl)
+        mdl: NCModel): String = mkError("syntax", msg, srcName, line, charPos, idl, origin, mdl)
 
     /**
      *
@@ -462,8 +462,8 @@ object NCDslCompiler extends LazyLogging {
      * @param srcName
      * @param line
      * @param charPos
-     * @param dsl
-     * @param origin DSL origin.
+     * @param idl
+     * @param origin IDL origin.
      * @param mdl
      * @return
      */
@@ -472,9 +472,9 @@ object NCDslCompiler extends LazyLogging {
         srcName: String,
         line: Int, // 1, 2, ...
         charPos: Int, // 0, 1, 2, ...
-        dsl: String,
+        idl: String,
         origin: String,
-        mdl: NCModel): String = mkError("runtime", msg, srcName, line, charPos, dsl, origin, mdl)
+        mdl: NCModel): String = mkError("runtime", msg, srcName, line, charPos, idl, origin, mdl)
 
     /**
      *
@@ -483,8 +483,8 @@ object NCDslCompiler extends LazyLogging {
      * @param srcName
      * @param line
      * @param charPos
-     * @param dsl
-     * @param origin DSL origin.
+     * @param idl
+     * @param origin IDL origin.
      * @param mdl
      * @return
      */
@@ -494,25 +494,25 @@ object NCDslCompiler extends LazyLogging {
         srcName: String,
         line: Int,
         charPos: Int,
-        dsl: String,
+        idl: String,
         origin: String,
         mdl: NCModel): String = {
-        val dslLine = dsl.split("\n")(line - 1)
-        val dash = "-" * dslLine.length
+        val idlLine = idl.split("\n")(line - 1)
+        val dash = "-" * idlLine.length
         val pos = Math.max(0, charPos)
         val posPtr = dash.substring(0, pos) + r("^") + y(dash.substring(pos + 1))
-        val dslPtr = dslLine.substring(0, pos) + r(dslLine.charAt(pos)) + y(dslLine.substring(pos + 1))
+        val idlPtr = idlLine.substring(0, pos) + r(idlLine.charAt(pos)) + y(idlLine.substring(pos + 1))
         val aMsg = U.decapitalize(msg) match {
             case s: String if s.last == '.' ⇒ s
             case s: String ⇒ s + '.'
         }
 
-        s"DSL $kind error in '$srcName' at line $line:${charPos + 1} - $aMsg\n" +
+        s"IDL $kind error in '$srcName' at line $line:${charPos + 1} - $aMsg\n" +
             s"  |-- ${c("Model ID:")} ${mdl.getId}\n" +
             s"  |-- ${c("Model origin:")} ${mdl.getOrigin}\n" +
             s"  |-- ${c("Intent origin:")} $origin\n" +
             s"  |-- $RST$W--------------$RST\n" +
-            s"  |-- ${c("Line:")}     $dslPtr\n" +
+            s"  |-- ${c("Line:")}     $idlPtr\n" +
             s"  +-- ${c("Position:")} $posPtr"
     }
 
@@ -545,27 +545,27 @@ object NCDslCompiler extends LazyLogging {
 
     /**
      *
-     * @param dsl
+     * @param idl
      * @param mdl
      * @param srcName
      * @return
      */
     private def parseIntents(
-        dsl: String,
+        idl: String,
         mdl: NCModel,
         srcName: String
-    ): Set[NCDslIntent] = {
-        require(dsl != null)
+    ): Set[NCIdlIntent] = {
+        require(idl != null)
         require(mdl != null)
         require(srcName != null)
 
-        val x = dsl.strip()
+        val x = idl.strip()
 
-        val intents: Set[NCDslIntent] = intentCache.getOrElseUpdate(x, {
+        val intents: Set[NCIdlIntent] = intentCache.getOrElseUpdate(x, {
             val (fsm, parser) = antlr4Armature(x, mdl, srcName)
 
-            // Parse the input DSL and walk built AST.
-            (new ParseTreeWalker).walk(fsm, parser.dsl())
+            // Parse the input IDL and walk built AST.
+            (new ParseTreeWalker).walk(fsm, parser.idl())
 
             // Return the compiled intents.
             fsm.getCompiledIntents
@@ -576,24 +576,24 @@ object NCDslCompiler extends LazyLogging {
 
     /**
      *
-     * @param dsl
+     * @param idl
      * @param mdl
      * @return
      */
     private def parseSynonym(
-        dsl: String,
+        idl: String,
         mdl: NCModel,
         origin: String
-    ): NCDslSynonym = {
-        require(dsl != null)
+    ): NCIdlSynonym = {
+        require(idl != null)
         require(mdl != null)
 
-        val x = dsl.strip()
+        val x = idl.strip()
 
-        val syn: NCDslSynonym = synCache.getOrElseUpdate(x, {
+        val syn: NCIdlSynonym = synCache.getOrElseUpdate(x, {
             val (fsm, parser) = antlr4Armature(x, mdl, origin)
 
-            // Parse the input DSL and walk built AST.
+            // Parse the input IDL and walk built AST.
             (new ParseTreeWalker).walk(fsm, parser.synonym())
 
             // Return the compiled synonym.
@@ -605,56 +605,56 @@ object NCDslCompiler extends LazyLogging {
 
     /**
      *
-     * @param dsl
+     * @param idl
      * @param mdl
      * @param origin
      * @return
      */
     private def antlr4Armature(
-        dsl: String,
+        idl: String,
         mdl: NCModel,
         origin: String
     ): (FiniteStateMachine, IDP) = {
-        val lexer = new NCIntentDslLexer(CharStreams.fromString(dsl, origin))
+        val lexer = new NCIntentIdlLexer(CharStreams.fromString(idl, origin))
         val parser = new IDP(new CommonTokenStream(lexer))
 
         // Set custom error handlers.
         lexer.removeErrorListeners()
         parser.removeErrorListeners()
-        lexer.addErrorListener(new CompilerErrorListener(dsl, mdl, origin))
-        parser.addErrorListener(new CompilerErrorListener(dsl, mdl, origin))
+        lexer.addErrorListener(new CompilerErrorListener(idl, mdl, origin))
+        parser.addErrorListener(new CompilerErrorListener(idl, mdl, origin))
 
         // State automata + it's parser.
-        new FiniteStateMachine(origin, dsl, mdl) → parser
+        new FiniteStateMachine(origin, idl, mdl) → parser
     }
 
     /**
      * Compiles inline (supplied) fragments and/or intents. Note that fragments are accumulated in a static
      * map keyed by model ID. Only intents are returned, if any.
      *
-     * @param dsl Intent DSL to compile.
-     * @param mdl Model DSL belongs to.
+     * @param idl Intent IDL to compile.
+     * @param mdl Model IDL belongs to.
      * @param origin Optional source name.
      * @return
      */
     @throws[NCE]
     def compileIntents(
-        dsl: String,
+        idl: String,
         mdl: NCModel,
         origin: String
-    ): Set[NCDslIntent] = parseIntents(dsl, mdl, origin)
+    ): Set[NCIdlIntent] = parseIntents(idl, mdl, origin)
 
     /**
       *
-      * @param dsl Synonym DSL to compile.
-      * @param mdl Model DSL belongs to.*
+      * @param idl Synonym IDL to compile.
+      * @param mdl Model IDL belongs to.*
       * @param origin Source name.
       * @return
       */
     @throws[NCE]
     def compileSynonym(
-        dsl: String,
+        idl: String,
         mdl: NCModel,
         origin: String,
-    ): NCDslSynonym = parseSynonym(dsl, mdl, origin)
+    ): NCIdlSynonym = parseSynonym(idl, mdl, origin)
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerBase.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
similarity index 74%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerBase.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
index 7164d36..0a7d546 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerBase.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerBase.scala
@@ -23,8 +23,8 @@ import org.apache.nlpcraft.model.NCToken
 import org.antlr.v4.runtime.{ParserRuleContext ⇒ PRC}
 import org.antlr.v4.runtime.tree.{TerminalNode ⇒ TN}
 import org.apache.commons.collections.CollectionUtils
-import org.apache.nlpcraft.model.intent.NCDslContext
-import org.apache.nlpcraft.model.intent.compiler.{NCDslStackItem ⇒ Z}
+import org.apache.nlpcraft.model.intent.NCIdlContext
+import org.apache.nlpcraft.model.intent.compiler.{NCIdlStackItem ⇒ Z}
 
 import java.lang.{
     Number ⇒ JNumber,
@@ -42,10 +42,10 @@ import java.util.{Calendar, Collections, List ⇒ JList, Map ⇒ JMap}
 
 import scala.collection.JavaConverters._
 
-trait NCDslCompilerBase {
-    type S = NCDslStack
-    type T = NCDslStackType
-    type I = (NCToken, S, NCDslContext) ⇒ Unit
+trait NCIdlCompilerBase {
+    type S = NCIdlStack
+    type T = NCIdlStackType
+    type I = (NCToken, S, NCIdlContext) ⇒ Unit
 
     def syntaxError(errMsg: String, srcName: String, line: Int, pos: Int): NCE
     def runtimeError(errMsg: String, srcName: String, line: Int, pos: Int, cause: Exception = null): NCE
@@ -202,8 +202,8 @@ trait NCDslCompilerBase {
 
         if (lt != null)
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) < asInt(v2)
@@ -217,8 +217,8 @@ trait NCDslCompilerBase {
             })
         else if (gt != null)
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) > asInt(v2)
@@ -232,8 +232,8 @@ trait NCDslCompilerBase {
             })
         else if (lteq != null)
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) <= asInt(v2)
@@ -249,8 +249,8 @@ trait NCDslCompilerBase {
             require(gteq != null)
 
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) >= asInt(v2)
@@ -276,8 +276,8 @@ trait NCDslCompilerBase {
 
         if (mult != null)
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) * asInt(v2)
@@ -291,8 +291,8 @@ trait NCDslCompilerBase {
             })
         else if (mod != null)
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) % asInt(v2)
@@ -305,8 +305,8 @@ trait NCDslCompilerBase {
             assert(div != null)
 
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 val f =
                     if (isInt(v1) && isInt(v2)) asInt(v1) / asInt(v2)
@@ -333,7 +333,7 @@ trait NCDslCompilerBase {
         stack.push(() ⇒ {
             val (op, flag) = if (and != null) ("&&", false) else ("||", true)
 
-            val Z(v1, n1) = x1()
+            val NCIdlStackItem(v1, n1) = x1()
 
             if (!isBool(v1))
                 throw rtBinaryOpError(op, v1, x2().value)
@@ -342,7 +342,7 @@ trait NCDslCompilerBase {
             if (asBool(v1) == flag)
                 Z(flag, n1)
             else {
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 if (!isBool(v2))
                     throw rtBinaryOpError(op, v2, v1)
@@ -374,8 +374,8 @@ trait NCDslCompilerBase {
         }
 
         stack.push(() ⇒ {
-            val Z(v1, n1) = x1()
-            val Z(v2, n2) = x2()
+            val NCIdlStackItem(v1, n1) = x1()
+            val NCIdlStackItem(v2, n2) = x2()
 
             val f =
                 if (eq != null)
@@ -399,8 +399,8 @@ trait NCDslCompilerBase {
         val (x1, x2) = pop2()(stack, ctx)
 
         def extract(): (Object, Object, Int) = {
-            val Z(v1, n1) = x1()
-            val Z(v2, n2) = x2()
+            val NCIdlStackItem(v1, n1) = x1()
+            val NCIdlStackItem(v2, n2) = x2()
 
             (v1, v2, n1 + n2)
         }
@@ -446,7 +446,7 @@ trait NCDslCompilerBase {
 
         if (minus != null)
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
 
                 val z =
                     if (isReal(v)) -asReal(v)
@@ -460,7 +460,7 @@ trait NCDslCompilerBase {
             assert(not != null)
 
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
 
                 if (isBool(v)) Z(!asBool(v), n)
                 else
@@ -550,8 +550,8 @@ trait NCDslCompilerBase {
 
             stack.push(
                 () ⇒ {
-                    val Z(v1, n1) = x1()
-                    val Z(v2, n2) = x2()
+                    val NCIdlStackItem(v1, n1) = x1()
+                    val NCIdlStackItem(v2, n2) = x2()
 
                    Z(util.Arrays.asList(toStr(v1).split(toStr(v2))), n1 + n2)
                 }
@@ -563,8 +563,8 @@ trait NCDslCompilerBase {
 
             stack.push(
                 () ⇒ {
-                    val Z(v1, n1) = x1()
-                    val Z(v2, n2) = x2()
+                    val NCIdlStackItem(v1, n1) = x1()
+                    val NCIdlStackItem(v2, n2) = x2()
 
                     Z(util.Arrays.asList(toStr(v1).split(toStr(v2)).toList.map(_.strip)), n1 + n2)
                 }
@@ -584,7 +584,7 @@ trait NCDslCompilerBase {
                 var z = 0
 
                 dump.reverse.foreach { x ⇒
-                    val Z(v, n) = x()
+                    val NCIdlStackItem(v, n) = x()
 
                     z += n
 
@@ -599,7 +599,7 @@ trait NCDslCompilerBase {
             val x = arg1()
             
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
         
                 val jl = toJList(v)
         
@@ -613,7 +613,7 @@ trait NCDslCompilerBase {
             val x = arg1()
     
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
                 
                 val lst = toJList(v).asInstanceOf[util.List[Object]]
                 
@@ -632,7 +632,7 @@ trait NCDslCompilerBase {
             val x = arg1()
         
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
             
                 val lst = toJList(v).asInstanceOf[util.List[Object]]
             
@@ -651,7 +651,7 @@ trait NCDslCompilerBase {
             val x = arg1()
         
             stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
             
                 val jl = toJList(v)
                 
@@ -665,8 +665,8 @@ trait NCDslCompilerBase {
             val (x1, x2) = arg2()
 
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
-                val Z(v2, n2) = x2()
+                val NCIdlStackItem(v1, n1) = x1()
+                val NCIdlStackItem(v2, n2) = x2()
 
                 Z(toJList(v1).contains(v2), n1 + n2)
             })
@@ -676,8 +676,8 @@ trait NCDslCompilerBase {
             val (x1, x2) = arg2()
 
             stack.push(() ⇒ {
-                val Z(col, n1) = x1()
-                val Z(key, n2) = x2()
+                val NCIdlStackItem(col, n1) = x1()
+                val NCIdlStackItem(key, n2) = x2()
                 val n = n1 + n2
 
                 if (isJList(col)) {
@@ -695,7 +695,7 @@ trait NCDslCompilerBase {
 
         def doAbs(): Unit = arg1() match {
             case x ⇒ stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
 
                 v match {
                     case a: JLong ⇒ Z(Math.abs(a), n)
@@ -707,7 +707,7 @@ trait NCDslCompilerBase {
 
         def doSquare(): Unit = arg1() match {
             case x ⇒ stack.push(() ⇒ {
-                val Z(v, n) = x()
+                val NCIdlStackItem(v, n) = x()
 
                 v match {
                     case a: JLong ⇒ Z(a * a, n)
@@ -721,15 +721,15 @@ trait NCDslCompilerBase {
             val (x1, x2, x3) = arg3()
 
             stack.push(() ⇒ {
-                val Z(v1, n1) = x1()
+                val NCIdlStackItem(v1, n1) = x1()
 
                 if (toBool(v1)) {
-                    val Z(v2, n2) = x2()
+                    val NCIdlStackItem(v2, n2) = x2()
 
                     Z(v2, n1 + n2)
                 }
                 else {
-                    val Z(v3, n3) = x3()
+                    val NCIdlStackItem(v3, n3) = x3()
 
                     Z(v3, n1 + n3)
                 }
@@ -741,8 +741,8 @@ trait NCDslCompilerBase {
             val (x1, x2) = arg2()
 
             stack.push(() ⇒ {
-                val Z(t, n1) = x1()
-                val Z(a, n2) = x2()
+                val NCIdlStackItem(t, n1) = x1()
+                val NCIdlStackItem(a, n2) = x2()
 
                 val tok = toToken(t)
                 val aliasId = toStr(a)
@@ -769,8 +769,8 @@ trait NCDslCompilerBase {
             val (x1, x2) = arg2()
 
             stack.push(() ⇒ {
-                val Z(t, n1) = x1()
-                val Z(a, n2) = x2()
+                val NCIdlStackItem(t, n1) = x1()
+                val NCIdlStackItem(a, n2) = x2()
 
                 val tok = toToken(t)
                 val aliasId = toStr(a)
@@ -784,19 +784,19 @@ trait NCDslCompilerBase {
 
         fun match {
             // Metadata access.
-            case "meta_part" ⇒ z[(T, T)](arg2, { x ⇒ val Z(v1, n1) = x._1(); val Z(v2, n2) = x._2(); Z(toToken(v1).meta[Object](toStr(v2)), n1 + n2) })
-            case "meta_token" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(tok.meta[Object](toStr(v)), 1) })
-            case "meta_model" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(tok.getModel.meta[Object](toStr(v)), 0) })
-            case "meta_intent" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(termCtx.intentMeta.get(toStr(v)).orNull, 0) })
-            case "meta_req" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(termCtx.req.getRequestData.get(toStr(v)), 0) })
-            case "meta_user" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(termCtx.req.getUser.getMetadata.get(toStr(v)), 0) })
-            case "meta_company" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(termCtx.req.getCompany.getMetadata.get(v), 0) })
-            case "meta_sys" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(U.sysEnv(toStr(v)).orNull, 0) })
-            case "meta_conv" ⇒ z[T](arg1, { x ⇒ val Z(v, _) = x(); Z(termCtx.convMeta.get(toStr(v)).orNull, 0) })
-            case "meta_frag" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(termCtx.fragMeta.get(toStr(v)).orNull, f) })
+            case "meta_part" ⇒ z[(T, T)](arg2, { x ⇒ val NCIdlStackItem(v1, n1) = x._1(); val NCIdlStackItem(v2, n2) = x._2(); Z(toToken(v1).meta[Object](toStr(v2)), n1 + n2) })
+            case "meta_token" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(tok.meta[Object](toStr(v)), 1) })
+            case "meta_model" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(tok.getModel.meta[Object](toStr(v)), 0) })
+            case "meta_intent" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(termCtx.intentMeta.get(toStr(v)).orNull, 0) })
+            case "meta_req" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(termCtx.req.getRequestData.get(toStr(v)), 0) })
+            case "meta_user" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(termCtx.req.getUser.getMetadata.get(toStr(v)), 0) })
+            case "meta_company" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(termCtx.req.getCompany.getMetadata.get(v), 0) })
+            case "meta_sys" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(U.sysEnv(toStr(v)).orNull, 0) })
+            case "meta_conv" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, _) = x(); Z(termCtx.convMeta.get(toStr(v)).orNull, 0) })
+            case "meta_frag" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(termCtx.fragMeta.get(toStr(v)).orNull, f) })
 
             // Converts JSON to map.
-            case "json" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(U.jsonToJavaMap(asStr(v)), f) })
+            case "json" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(U.jsonToJavaMap(asStr(v)), f) })
 
             // Inline if-statement.
             case "if" ⇒ doIf()
@@ -840,16 +840,16 @@ trait NCDslCompilerBase {
             case "comp_postcode" ⇒ z0(() ⇒ Z(termCtx.req.getCompany.getPostalCode, 0))
 
             // String functions.
-            case "trim" | "strip" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toStr(v).trim, f) })
-            case "uppercase" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toStr(v).toUpperCase, f) })
-            case "lowercase" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toStr(v).toLowerCase, f) })
-            case "is_alpha" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isAlpha(toStr(v)), f) })
-            case "is_alphanum" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isAlphanumeric(toStr(v)), f) })
-            case "is_whitespace" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isWhitespace(toStr(v)), f) })
-            case "is_num" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isNumeric(toStr(v)), f) })
-            case "is_numspace" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isNumericSpace(toStr(v)), f) })
-            case "is_alphaspace" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isAlphaSpace(toStr(v)), f) })
-            case "is_alphanumspace" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(StringUtils.isAlphanumericSpace(toStr(v)), f) }) 
+            case "trim" | "strip" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toStr(v).trim, f) })
+            case "uppercase" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toStr(v).toUpperCase, f) })
+            case "lowercase" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toStr(v).toLowerCase, f) })
+            case "is_alpha" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isAlpha(toStr(v)), f) })
+            case "is_alphanum" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isAlphanumeric(toStr(v)), f) })
+            case "is_whitespace" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isWhitespace(toStr(v)), f) })
+            case "is_num" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isNumeric(toStr(v)), f) })
+            case "is_numspace" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isNumericSpace(toStr(v)), f) })
+            case "is_alphaspace" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isAlphaSpace(toStr(v)), f) })
+            case "is_alphanumspace" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(StringUtils.isAlphanumericSpace(toStr(v)), f) })
             case "substring" ⇒
             case "charAt" ⇒
             case "regex" ⇒
@@ -861,35 +861,35 @@ trait NCDslCompilerBase {
             // Math functions.
             case "abs" ⇒ doAbs()
             case "ceil" ⇒ arg1() match { case item ⇒ stack.push(() ⇒ {
-                val Z(v, f) = item()
+                val NCIdlStackItem(v, f) = item()
 
                 Z(Math.ceil(toJDouble(v)), f)
             }) }
-            case "floor" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.floor(toJDouble(v)), f) }) 
-            case "rint" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.rint(toJDouble(v)), f) }) 
-            case "round" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.round(toJDouble(v)), f) }) 
-            case "signum" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.signum(toJDouble(v)), f) }) 
-            case "sqrt" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.sqrt(toJDouble(v)), f) }) 
-            case "cbrt" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.cbrt(toJDouble(v)), f) }) 
-            case "acos" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.acos(toJDouble(v)), f) }) 
-            case "asin" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.asin(toJDouble(v)), f) }) 
-            case "atan" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z( Math.atan(toJDouble(v)), f) }) 
-            case "cos" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.cos(toJDouble(v)), f) }) 
-            case "sin" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.sin(toJDouble(v)), f) }) 
-            case "tan" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.tan(toJDouble(v)), f) }) 
-            case "cosh" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.cosh(toJDouble(v)), f) }) 
-            case "sinh" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.sinh(toJDouble(v)), f) }) 
-            case "tanh" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.tanh(toJDouble(v)), f) }) 
-            case "atn2" ⇒ z[(T, T)](arg2, { x ⇒ val Z(v1, n1) = x._1(); val Z(v2, n2) = x._2(); Z(Math.atan2(toJDouble(v1), toJDouble(v2)), n1 + n2) })
-            case "degrees" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.toDegrees(toJDouble(v)), f) }) 
-            case "radians" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z( Math.toRadians(toJDouble(v)), f) }) 
-            case "exp" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.exp(toJDouble(v)), f) }) 
-            case "expm1" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.expm1(toJDouble(v)), f) }) 
-            case "hypot" ⇒ z[(T, T)](arg2, { x ⇒ val Z(v1, n1) = x._1(); val Z(v2, n2) = x._2(); Z(Math.hypot(toJDouble(v1), toJDouble(v2)), n1 + n2) })
-            case "log" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.log(toJDouble(v)), f) }) 
-            case "log10" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.log10(toJDouble(v)), f) }) 
-            case "log1p" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(Math.log1p(toJDouble(v)), f) }) 
-            case "pow" ⇒ z[(T, T)](arg2, { x ⇒ val Z(v1, f1) = x._1(); val Z(v2, f2) = x._2(); Z(Math.pow(toJDouble(v1), toJDouble(v2)), f1 + f2 + 1) })
+            case "floor" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.floor(toJDouble(v)), f) })
+            case "rint" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.rint(toJDouble(v)), f) })
+            case "round" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.round(toJDouble(v)), f) })
+            case "signum" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.signum(toJDouble(v)), f) })
+            case "sqrt" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.sqrt(toJDouble(v)), f) })
+            case "cbrt" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.cbrt(toJDouble(v)), f) })
+            case "acos" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.acos(toJDouble(v)), f) })
+            case "asin" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.asin(toJDouble(v)), f) })
+            case "atan" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z( Math.atan(toJDouble(v)), f) })
+            case "cos" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.cos(toJDouble(v)), f) })
+            case "sin" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.sin(toJDouble(v)), f) })
+            case "tan" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.tan(toJDouble(v)), f) })
+            case "cosh" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.cosh(toJDouble(v)), f) })
+            case "sinh" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.sinh(toJDouble(v)), f) })
+            case "tanh" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.tanh(toJDouble(v)), f) })
+            case "atn2" ⇒ z[(T, T)](arg2, { x ⇒ val NCIdlStackItem(v1, n1) = x._1(); val NCIdlStackItem(v2, n2) = x._2(); Z(Math.atan2(toJDouble(v1), toJDouble(v2)), n1 + n2) })
+            case "degrees" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.toDegrees(toJDouble(v)), f) })
+            case "radians" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z( Math.toRadians(toJDouble(v)), f) })
+            case "exp" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.exp(toJDouble(v)), f) })
+            case "expm1" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.expm1(toJDouble(v)), f) })
+            case "hypot" ⇒ z[(T, T)](arg2, { x ⇒ val NCIdlStackItem(v1, n1) = x._1(); val NCIdlStackItem(v2, n2) = x._2(); Z(Math.hypot(toJDouble(v1), toJDouble(v2)), n1 + n2) })
+            case "log" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.log(toJDouble(v)), f) })
+            case "log10" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.log10(toJDouble(v)), f) })
+            case "log1p" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(Math.log1p(toJDouble(v)), f) })
+            case "pow" ⇒ z[(T, T)](arg2, { x ⇒ val NCIdlStackItem(v1, f1) = x._1(); val NCIdlStackItem(v2, f2) = x._2(); Z(Math.pow(toJDouble(v1), toJDouble(v2)), f1 + f2 + 1) })
             case "square" ⇒ doSquare()
             case "pi" ⇒ z0(() ⇒ Z(Math.PI, 0))
             case "euler" ⇒ z0(() ⇒ Z(Math.E, 0))
@@ -899,16 +899,16 @@ trait NCDslCompilerBase {
             case "list" ⇒ doList()
             case "get" ⇒ doGet()
             case "has" ⇒ doHas()
-            case "first" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); val lst = toJList(v); Z(if (lst.isEmpty) null else lst.get(0).asInstanceOf[Object], f)})
-            case "last" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); val lst = toJList(v); Z(if (lst.isEmpty) null else lst.get(lst.size() - 1).asInstanceOf[Object], f)}) 
-            case "keys" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(new util.ArrayList(toJMap(v).keySet()), f) }) 
-            case "values" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(new util.ArrayList(toJMap(v).values()), f) }) 
-            case "size" | "count" | "length" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toJList(v).size(), f)})
+            case "first" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); val lst = toJList(v); Z(if (lst.isEmpty) null else lst.get(0).asInstanceOf[Object], f)})
+            case "last" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); val lst = toJList(v); Z(if (lst.isEmpty) null else lst.get(lst.size() - 1).asInstanceOf[Object], f)})
+            case "keys" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(new util.ArrayList(toJMap(v).keySet()), f) })
+            case "values" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(new util.ArrayList(toJMap(v).values()), f) })
+            case "size" | "count" | "length" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toJList(v).size(), f)})
             case "reverse" ⇒ doReverse()
             case "sort" ⇒ doSort()
-            case "is_empty" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toJList(v).isEmpty, f) }) 
-            case "non_empty" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(!toJList(v).isEmpty, f) }) 
-            case "to_string" ⇒ z[T](arg1, { x ⇒ val Z(v, f) = x(); Z(toJList(v).asScala.map(_.toString).asJava, f) }) 
+            case "is_empty" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toJList(v).isEmpty, f) })
+            case "non_empty" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(!toJList(v).isEmpty, f) })
+            case "to_string" ⇒ z[T](arg1, { x ⇒ val NCIdlStackItem(v, f) = x(); Z(toJList(v).asScala.map(_.toString).asJava, f) })
 
             // Statistical operations on lists.
             case "avg" ⇒
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerGlobal.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerGlobal.scala
similarity index 85%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerGlobal.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerGlobal.scala
index 4e2e9b9..697dadf 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslCompilerGlobal.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlCompilerGlobal.scala
@@ -21,10 +21,10 @@ import scala.collection.concurrent.TrieMap
 import scala.collection.mutable
 
 /**
- * Global DSL compiler state.
+ * Global IDL compiler state.
  */
-object NCDslCompilerGlobal {
-    private final val fragCache = TrieMap.empty[String /* Model ID. */ , mutable.Map[String, NCDslFragment]]
+object NCIdlCompilerGlobal {
+    private final val fragCache = TrieMap.empty[String /* Model ID. */ , mutable.Map[String, NCIdlFragment]]
     private final val importCache = mutable.HashSet.empty[String]
 
     /**
@@ -47,7 +47,7 @@ object NCDslCompilerGlobal {
      *
      * @param mdlId
      */
-    def clearCache(mdlId: String): Unit = fragCache += mdlId → mutable.HashMap.empty[String, NCDslFragment]
+    def clearCache(mdlId: String): Unit = fragCache += mdlId → mutable.HashMap.empty[String, NCIdlFragment]
 
     /**
      *
@@ -67,9 +67,9 @@ object NCDslCompilerGlobal {
      * @param mdlId
      * @param frag
      */
-    def addFragment(mdlId: String, frag: NCDslFragment): Unit =
+    def addFragment(mdlId: String, frag: NCIdlFragment): Unit =
         fragCache.getOrElse(mdlId, {
-            val m = mutable.HashMap.empty[String, NCDslFragment]
+            val m = mutable.HashMap.empty[String, NCIdlFragment]
 
             fragCache += mdlId → m
 
@@ -82,6 +82,6 @@ object NCDslCompilerGlobal {
      * @param fragId
      * @return
      */
-    def getFragment(mdlId: String, fragId: String): Option[NCDslFragment] =
+    def getFragment(mdlId: String, fragId: String): Option[NCIdlFragment] =
         fragCache.get(mdlId).flatMap(_.get(fragId))
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslFragment.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlFragment.scala
similarity index 89%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslFragment.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlFragment.scala
index 66e5daa..1e7fec7 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslFragment.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlFragment.scala
@@ -17,17 +17,17 @@
 
 package org.apache.nlpcraft.model.intent.compiler
 
-import org.apache.nlpcraft.model.intent.NCDslTerm
+import org.apache.nlpcraft.model.intent.NCIdlTerm
 
 /**
- * DSL fragment.
+ * IDL fragment.
  *
  * @param id ID of this fragment (must be unique within a model).
  * @param terms List of terms this fragment defines.
  */
-case class NCDslFragment(
+case class NCIdlFragment(
     id: String,
-    terms: List[NCDslTerm]
+    terms: List[NCIdlTerm]
 ) {
     require(id != null)
     require(terms.nonEmpty)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslStack.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlStack.scala
similarity index 72%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslStack.scala
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlStack.scala
index f16f7d7..ba36546 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCDslStack.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/NCIdlStack.scala
@@ -22,28 +22,28 @@ import scala.collection.mutable
 /**
   *
   */
-case class NCDslStackItem (
+case class NCIdlStackItem (
     value: Object,
     tokUse: Int
 )
 
-object NCDslStackItem {
-    def apply(v: Boolean, f: Int): NCDslStackItem = new NCDslStackItem(Boolean.box(v), f)
-    def apply(v: Long, f: Int): NCDslStackItem = new NCDslStackItem(Long.box(v), f)
-    def apply(v: Double, f: Int): NCDslStackItem = new NCDslStackItem(Double.box(v), f)
+object NCIdlStackItem {
+    def apply(v: Boolean, f: Int): NCIdlStackItem = new NCIdlStackItem(Boolean.box(v), f)
+    def apply(v: Long, f: Int): NCIdlStackItem = new NCIdlStackItem(Long.box(v), f)
+    def apply(v: Double, f: Int): NCIdlStackItem = new NCIdlStackItem(Double.box(v), f)
 }
 
 /**
   *
   */
-trait NCDslStackType extends (() ⇒ NCDslStackItem)
+trait NCIdlStackType extends (() ⇒ NCIdlStackItem)
 
 /**
   *
   */
-class NCDslStack extends mutable.ArrayStack[NCDslStackType] {
+class NCIdlStack extends mutable.ArrayStack[NCIdlStackType] {
     /**
       * Special marker for stack frames.
       */
-    final val PLIST_MARKER: NCDslStackType = () ⇒ { NCDslStackItem(null, 0) }
+    final val PLIST_MARKER: NCIdlStackType = () ⇒ { NCIdlStackItem(null, 0) }
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.interp
new file mode 100644
index 0000000..d305c17
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.interp
@@ -0,0 +1,148 @@
+token literal names:
+null
+'import'
+'intent'
+'ordered'
+'flow'
+'meta'
+'term'
+null
+'fragment'
+null
+null
+null
+'null'
+'=='
+'!='
+'>='
+'<='
+'>'
+'<'
+'&&'
+'||'
+'|'
+'!'
+'('
+')'
+'{'
+'}'
+'\''
+'"'
+'~'
+'['
+']'
+'#'
+','
+':'
+'-'
+'.'
+'_'
+'='
+'+'
+'?'
+'*'
+'/'
+'%'
+'$'
+null
+null
+null
+null
+null
+null
+null
+
+token symbolic names:
+null
+null
+null
+null
+null
+null
+null
+FUN_NAME
+FRAG
+SQSTRING
+DQSTRING
+BOOL
+NULL
+EQ
+NEQ
+GTEQ
+LTEQ
+GT
+LT
+AND
+OR
+VERT
+NOT
+LPAR
+RPAR
+LBRACE
+RBRACE
+SQUOTE
+DQUOTE
+TILDA
+LBR
+RBR
+POUND
+COMMA
+COLON
+MINUS
+DOT
+UNDERSCORE
+ASSIGN
+PLUS
+QUESTION
+MULT
+DIV
+MOD
+DOLLAR
+INT
+REAL
+EXP
+ID
+COMMENT
+WS
+ErrorChar
+
+rule names:
+idl
+synonym
+alias
+idlItems
+idlItem
+imp
+frag
+fragId
+fragRef
+fragMeta
+intent
+intentId
+orderedDecl
+mtdDecl
+flowDecl
+metaDecl
+jsonObj
+jsonPair
+jsonVal
+jsonArr
+terms
+termItem
+termEq
+term
+mtdRef
+javaFqn
+termId
+expr
+paramList
+atom
+qstring
+minMax
+minMaxShortcut
+minMaxRange
+id
+
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 53, 338, 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, [...]
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.tokens
new file mode 100644
index 0000000..5680142
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdl.tokens
@@ -0,0 +1,91 @@
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+FUN_NAME=7
+FRAG=8
+SQSTRING=9
+DQSTRING=10
+BOOL=11
+NULL=12
+EQ=13
+NEQ=14
+GTEQ=15
+LTEQ=16
+GT=17
+LT=18
+AND=19
+OR=20
+VERT=21
+NOT=22
+LPAR=23
+RPAR=24
+LBRACE=25
+RBRACE=26
+SQUOTE=27
+DQUOTE=28
+TILDA=29
+LBR=30
+RBR=31
+POUND=32
+COMMA=33
+COLON=34
+MINUS=35
+DOT=36
+UNDERSCORE=37
+ASSIGN=38
+PLUS=39
+QUESTION=40
+MULT=41
+DIV=42
+MOD=43
+DOLLAR=44
+INT=45
+REAL=46
+EXP=47
+ID=48
+COMMENT=49
+WS=50
+ErrorChar=51
+'import'=1
+'intent'=2
+'ordered'=3
+'flow'=4
+'meta'=5
+'term'=6
+'fragment'=8
+'null'=12
+'=='=13
+'!='=14
+'>='=15
+'<='=16
+'>'=17
+'<'=18
+'&&'=19
+'||'=20
+'|'=21
+'!'=22
+'('=23
+')'=24
+'{'=25
+'}'=26
+'\''=27
+'"'=28
+'~'=29
+'['=30
+']'=31
+'#'=32
+','=33
+':'=34
+'-'=35
+'.'=36
+'_'=37
+'='=38
+'+'=39
+'?'=40
+'*'=41
+'/'=42
+'%'=43
+'$'=44
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlBaseListener.java
new file mode 100644
index 0000000..4661771
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlBaseListener.java
@@ -0,0 +1,555 @@
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4\NCIntentIdl.g4 by ANTLR 4.9.1
+package org.apache.nlpcraft.model.intent.compiler.antlr4;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * This class provides an empty implementation of {@link NCIntentIdlListener},
+ * which can be extended to create a listener which only needs to handle a subset
+ * of the available methods.
+ */
+public class NCIntentIdlBaseListener implements NCIntentIdlListener {
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIdl(NCIntentIdlParser.IdlContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIdl(NCIntentIdlParser.IdlContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterSynonym(NCIntentIdlParser.SynonymContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitSynonym(NCIntentIdlParser.SynonymContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAlias(NCIntentIdlParser.AliasContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAlias(NCIntentIdlParser.AliasContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIdlItems(NCIntentIdlParser.IdlItemsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIdlItems(NCIntentIdlParser.IdlItemsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIdlItem(NCIntentIdlParser.IdlItemContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIdlItem(NCIntentIdlParser.IdlItemContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterImp(NCIntentIdlParser.ImpContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitImp(NCIntentIdlParser.ImpContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFrag(NCIntentIdlParser.FragContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFrag(NCIntentIdlParser.FragContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFragId(NCIntentIdlParser.FragIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFragId(NCIntentIdlParser.FragIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFragRef(NCIntentIdlParser.FragRefContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFragRef(NCIntentIdlParser.FragRefContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFragMeta(NCIntentIdlParser.FragMetaContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFragMeta(NCIntentIdlParser.FragMetaContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIntent(NCIntentIdlParser.IntentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIntent(NCIntentIdlParser.IntentContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterIntentId(NCIntentIdlParser.IntentIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitIntentId(NCIntentIdlParser.IntentIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterOrderedDecl(NCIntentIdlParser.OrderedDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitOrderedDecl(NCIntentIdlParser.OrderedDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMtdDecl(NCIntentIdlParser.MtdDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMtdDecl(NCIntentIdlParser.MtdDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterFlowDecl(NCIntentIdlParser.FlowDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitFlowDecl(NCIntentIdlParser.FlowDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMetaDecl(NCIntentIdlParser.MetaDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMetaDecl(NCIntentIdlParser.MetaDeclContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJsonObj(NCIntentIdlParser.JsonObjContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJsonObj(NCIntentIdlParser.JsonObjContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJsonPair(NCIntentIdlParser.JsonPairContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJsonPair(NCIntentIdlParser.JsonPairContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJsonVal(NCIntentIdlParser.JsonValContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJsonVal(NCIntentIdlParser.JsonValContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJsonArr(NCIntentIdlParser.JsonArrContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJsonArr(NCIntentIdlParser.JsonArrContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTerms(NCIntentIdlParser.TermsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTerms(NCIntentIdlParser.TermsContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTermItem(NCIntentIdlParser.TermItemContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTermItem(NCIntentIdlParser.TermItemContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTermEq(NCIntentIdlParser.TermEqContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTermEq(NCIntentIdlParser.TermEqContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTerm(NCIntentIdlParser.TermContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTerm(NCIntentIdlParser.TermContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMtdRef(NCIntentIdlParser.MtdRefContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMtdRef(NCIntentIdlParser.MtdRefContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterJavaFqn(NCIntentIdlParser.JavaFqnContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitJavaFqn(NCIntentIdlParser.JavaFqnContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterTermId(NCIntentIdlParser.TermIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitTermId(NCIntentIdlParser.TermIdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterParExpr(NCIntentIdlParser.ParExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitParExpr(NCIntentIdlParser.ParExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterUnaryExpr(NCIntentIdlParser.UnaryExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitUnaryExpr(NCIntentIdlParser.UnaryExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterCompExpr(NCIntentIdlParser.CompExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitCompExpr(NCIntentIdlParser.CompExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterPlusMinusExpr(NCIntentIdlParser.PlusMinusExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitPlusMinusExpr(NCIntentIdlParser.PlusMinusExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAtomExpr(NCIntentIdlParser.AtomExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAtomExpr(NCIntentIdlParser.AtomExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMultDivModExpr(NCIntentIdlParser.MultDivModExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMultDivModExpr(NCIntentIdlParser.MultDivModExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAndOrExpr(NCIntentIdlParser.AndOrExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAndOrExpr(NCIntentIdlParser.AndOrExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterCallExpr(NCIntentIdlParser.CallExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitCallExpr(NCIntentIdlParser.CallExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEqNeqExpr(NCIntentIdlParser.EqNeqExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEqNeqExpr(NCIntentIdlParser.EqNeqExprContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterParamList(NCIntentIdlParser.ParamListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitParamList(NCIntentIdlParser.ParamListContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterAtom(NCIntentIdlParser.AtomContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitAtom(NCIntentIdlParser.AtomContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterQstring(NCIntentIdlParser.QstringContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitQstring(NCIntentIdlParser.QstringContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMinMax(NCIntentIdlParser.MinMaxContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMinMax(NCIntentIdlParser.MinMaxContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMinMaxShortcut(NCIntentIdlParser.MinMaxShortcutContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMinMaxShortcut(NCIntentIdlParser.MinMaxShortcutContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterMinMaxRange(NCIntentIdlParser.MinMaxRangeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitMinMaxRange(NCIntentIdlParser.MinMaxRangeContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterId(NCIntentIdlParser.IdContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitId(NCIntentIdlParser.IdContext ctx) { }
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void enterEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void exitEveryRule(ParserRuleContext ctx) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitTerminal(TerminalNode node) { }
+	/**
+	 * {@inheritDoc}
+	 *
+	 * <p>The default implementation does nothing.</p>
+	 */
+	@Override public void visitErrorNode(ErrorNode node) { }
+}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.interp
new file mode 100644
index 0000000..218e2cb
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.interp
@@ -0,0 +1,172 @@
+token literal names:
+null
+'import'
+'intent'
+'ordered'
+'flow'
+'meta'
+'term'
+null
+'fragment'
+null
+null
+null
+'null'
+'=='
+'!='
+'>='
+'<='
+'>'
+'<'
+'&&'
+'||'
+'|'
+'!'
+'('
+')'
+'{'
+'}'
+'\''
+'"'
+'~'
+'['
+']'
+'#'
+','
+':'
+'-'
+'.'
+'_'
+'='
+'+'
+'?'
+'*'
+'/'
+'%'
+'$'
+null
+null
+null
+null
+null
+null
+null
+
+token symbolic names:
+null
+null
+null
+null
+null
+null
+null
+FUN_NAME
+FRAG
+SQSTRING
+DQSTRING
+BOOL
+NULL
+EQ
+NEQ
+GTEQ
+LTEQ
+GT
+LT
+AND
+OR
+VERT
+NOT
+LPAR
+RPAR
+LBRACE
+RBRACE
+SQUOTE
+DQUOTE
+TILDA
+LBR
+RBR
+POUND
+COMMA
+COLON
+MINUS
+DOT
+UNDERSCORE
+ASSIGN
+PLUS
+QUESTION
+MULT
+DIV
+MOD
+DOLLAR
+INT
+REAL
+EXP
+ID
+COMMENT
+WS
+ErrorChar
+
+rule names:
+T__0
+T__1
+T__2
+T__3
+T__4
+T__5
+FUN_NAME
+FRAG
+SQSTRING
+DQSTRING
+BOOL
+NULL
+EQ
+NEQ
+GTEQ
+LTEQ
+GT
+LT
+AND
+OR
+VERT
+NOT
+LPAR
+RPAR
+LBRACE
+RBRACE
+SQUOTE
+DQUOTE
+TILDA
+LBR
+RBR
+POUND
+COMMA
+COLON
+MINUS
+DOT
+UNDERSCORE
+ASSIGN
+PLUS
+QUESTION
+MULT
+DIV
+MOD
+DOLLAR
+INT
+REAL
+EXP
+UNI_CHAR
+LETTER
+ID
+COMMENT
+WS
+ErrorChar
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 53, 1185, 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/compiler/antlr4/NCIntentIdlLexer.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.java
new file mode 100644
index 0000000..70f4bf6
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.java
@@ -0,0 +1,568 @@
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4\NCIntentIdl.g4 by ANTLR 4.9.1
+package org.apache.nlpcraft.model.intent.compiler.antlr4;
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class NCIntentIdlLexer extends Lexer {
+	static { RuntimeMetaData.checkVersion("4.9.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, FUN_NAME=7, FRAG=8, SQSTRING=9, 
+		DQSTRING=10, BOOL=11, NULL=12, EQ=13, NEQ=14, GTEQ=15, LTEQ=16, GT=17, 
+		LT=18, AND=19, OR=20, VERT=21, NOT=22, LPAR=23, RPAR=24, LBRACE=25, RBRACE=26, 
+		SQUOTE=27, DQUOTE=28, TILDA=29, LBR=30, RBR=31, POUND=32, COMMA=33, COLON=34, 
+		MINUS=35, DOT=36, UNDERSCORE=37, ASSIGN=38, PLUS=39, QUESTION=40, MULT=41, 
+		DIV=42, MOD=43, DOLLAR=44, INT=45, REAL=46, EXP=47, ID=48, COMMENT=49, 
+		WS=50, ErrorChar=51;
+	public static String[] channelNames = {
+		"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+	};
+
+	public static String[] modeNames = {
+		"DEFAULT_MODE"
+	};
+
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "FUN_NAME", "FRAG", "SQSTRING", 
+			"DQSTRING", "BOOL", "NULL", "EQ", "NEQ", "GTEQ", "LTEQ", "GT", "LT", 
+			"AND", "OR", "VERT", "NOT", "LPAR", "RPAR", "LBRACE", "RBRACE", "SQUOTE", 
+			"DQUOTE", "TILDA", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", 
+			"DOT", "UNDERSCORE", "ASSIGN", "PLUS", "QUESTION", "MULT", "DIV", "MOD", 
+			"DOLLAR", "INT", "REAL", "EXP", "UNI_CHAR", "LETTER", "ID", "COMMENT", 
+			"WS", "ErrorChar"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
+
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "'import'", "'intent'", "'ordered'", "'flow'", "'meta'", "'term'", 
+			null, "'fragment'", null, null, null, "'null'", "'=='", "'!='", "'>='", 
+			"'<='", "'>'", "'<'", "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", 
+			"'}'", "'''", "'\"'", "'~'", "'['", "']'", "'#'", "','", "':'", "'-'", 
+			"'.'", "'_'", "'='", "'+'", "'?'", "'*'", "'/'", "'%'", "'$'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, null, null, null, null, null, null, "FUN_NAME", "FRAG", "SQSTRING", 
+			"DQSTRING", "BOOL", "NULL", "EQ", "NEQ", "GTEQ", "LTEQ", "GT", "LT", 
+			"AND", "OR", "VERT", "NOT", "LPAR", "RPAR", "LBRACE", "RBRACE", "SQUOTE", 
+			"DQUOTE", "TILDA", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", 
+			"DOT", "UNDERSCORE", "ASSIGN", "PLUS", "QUESTION", "MULT", "DIV", "MOD", 
+			"DOLLAR", "INT", "REAL", "EXP", "ID", "COMMENT", "WS", "ErrorChar"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+
+	public NCIntentIdlLexer(CharStream input) {
+		super(input);
+		_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	@Override
+	public String getGrammarFileName() { return "NCIntentIdl.g4"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public String[] getChannelNames() { return channelNames; }
+
+	@Override
+	public String[] getModeNames() { return modeNames; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public static final String _serializedATN =
+		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\65\u04a1\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\4\63\t\63\4\64"+
+		"\t\64\4\65\t\65\4\66\t\66\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\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\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\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b"+
+		"\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3"+
+		"\b\3\b\3\b\3\b\5\b\u03d6\n\b\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\7\n\u03e5\n\n\f\n\16\n\u03e8\13\n\3\n\3\n\3\13\3\13\3\13\3"+
+		"\13\7\13\u03f0\n\13\f\13\16\13\u03f3\13\13\3\13\3\13\3\f\3\f\3\f\3\f\3"+
+		"\f\3\f\3\f\3\f\3\f\5\f\u0400\n\f\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3"+
+		"\17\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3"+
+		"\24\3\24\3\25\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&\3&\3\'\3\'\3(\3(\3)\3)\3*\3*\3+\3+\3,\3,\3-"+
+		"\3-\3.\3.\3.\7.\u0450\n.\f.\16.\u0453\13.\5.\u0455\n.\3/\3/\6/\u0459\n"+
+		"/\r/\16/\u045a\3\60\3\60\5\60\u045f\n\60\3\60\3\60\3\61\3\61\3\62\3\62"+
+		"\3\63\3\63\3\63\3\63\6\63\u046b\n\63\r\63\16\63\u046c\3\63\3\63\3\63\3"+
+		"\63\3\63\3\63\3\63\7\63\u0476\n\63\f\63\16\63\u0479\13\63\3\64\3\64\3"+
+		"\64\3\64\7\64\u047f\n\64\f\64\16\64\u0482\13\64\3\64\5\64\u0485\n\64\3"+
+		"\64\5\64\u0488\n\64\3\64\3\64\3\64\3\64\7\64\u048e\n\64\f\64\16\64\u0491"+
+		"\13\64\3\64\3\64\5\64\u0495\n\64\3\64\3\64\3\65\6\65\u049a\n\65\r\65\16"+
+		"\65\u049b\3\65\3\65\3\66\3\66\3\u048f\2\67\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\2c\2e\62g\63i\64k\65\3\2\16\3\2))\3\2$$\3\2\63;\4\2"+
+		"\62;aa\3\2\62;\4\2GGgg\4\2--//\17\2\u00a2\u0251\u025b\u0294\u02b2\u0371"+
+		"\u0402\u0501\u1e04\u1ef5\u1f03\u2001\u200e\u200f\u2041\u2042\u2072\u2191"+
+		"\u2c02\u2ff1\u3003\ud801\uf902\ufdd1\ufdf2\uffff\4\2C\\c|\4\2\f\f\17\17"+
+		"\3\3\f\f\5\2\13\f\16\17\"\"\2\u0531\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\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2"+
+		"\2\2\3m\3\2\2\2\5t\3\2\2\2\7{\3\2\2\2\t\u0083\3\2\2\2\13\u0088\3\2\2\2"+
+		"\r\u008d\3\2\2\2\17\u03d5\3\2\2\2\21\u03d7\3\2\2\2\23\u03e0\3\2\2\2\25"+
+		"\u03eb\3\2\2\2\27\u03ff\3\2\2\2\31\u0401\3\2\2\2\33\u0406\3\2\2\2\35\u0409"+
+		"\3\2\2\2\37\u040c\3\2\2\2!\u040f\3\2\2\2#\u0412\3\2\2\2%\u0414\3\2\2\2"+
+		"\'\u0416\3\2\2\2)\u0419\3\2\2\2+\u041c\3\2\2\2-\u041e\3\2\2\2/\u0420\3"+
+		"\2\2\2\61\u0422\3\2\2\2\63\u0424\3\2\2\2\65\u0426\3\2\2\2\67\u0428\3\2"+
+		"\2\29\u042a\3\2\2\2;\u042c\3\2\2\2=\u042e\3\2\2\2?\u0430\3\2\2\2A\u0432"+
+		"\3\2\2\2C\u0434\3\2\2\2E\u0436\3\2\2\2G\u0438\3\2\2\2I\u043a\3\2\2\2K"+
+		"\u043c\3\2\2\2M\u043e\3\2\2\2O\u0440\3\2\2\2Q\u0442\3\2\2\2S\u0444\3\2"+
+		"\2\2U\u0446\3\2\2\2W\u0448\3\2\2\2Y\u044a\3\2\2\2[\u0454\3\2\2\2]\u0456"+
+		"\3\2\2\2_\u045c\3\2\2\2a\u0462\3\2\2\2c\u0464\3\2\2\2e\u046a\3\2\2\2g"+
+		"\u0494\3\2\2\2i\u0499\3\2\2\2k\u049f\3\2\2\2mn\7k\2\2no\7o\2\2op\7r\2"+
+		"\2pq\7q\2\2qr\7t\2\2rs\7v\2\2s\4\3\2\2\2tu\7k\2\2uv\7p\2\2vw\7v\2\2wx"+
+		"\7g\2\2xy\7p\2\2yz\7v\2\2z\6\3\2\2\2{|\7q\2\2|}\7t\2\2}~\7f\2\2~\177\7"+
+		"g\2\2\177\u0080\7t\2\2\u0080\u0081\7g\2\2\u0081\u0082\7f\2\2\u0082\b\3"+
+		"\2\2\2\u0083\u0084\7h\2\2\u0084\u0085\7n\2\2\u0085\u0086\7q\2\2\u0086"+
+		"\u0087\7y\2\2\u0087\n\3\2\2\2\u0088\u0089\7o\2\2\u0089\u008a\7g\2\2\u008a"+
+		"\u008b\7v\2\2\u008b\u008c\7c\2\2\u008c\f\3\2\2\2\u008d\u008e\7v\2\2\u008e"+
+		"\u008f\7g\2\2\u008f\u0090\7t\2\2\u0090\u0091\7o\2\2\u0091\16\3\2\2\2\u0092"+
+		"\u0093\7o\2\2\u0093\u0094\7g\2\2\u0094\u0095\7v\2\2\u0095\u0096\7c\2\2"+
+		"\u0096\u0097\7a\2\2\u0097\u0098\7v\2\2\u0098\u0099\7q\2\2\u0099\u009a"+
+		"\7m\2\2\u009a\u009b\7g\2\2\u009b\u03d6\7p\2\2\u009c\u009d\7o\2\2\u009d"+
+		"\u009e\7g\2\2\u009e\u009f\7v\2\2\u009f\u00a0\7c\2\2\u00a0\u00a1\7a\2\2"+
+		"\u00a1\u00a2\7r\2\2\u00a2\u00a3\7c\2\2\u00a3\u00a4\7t\2\2\u00a4\u03d6"+
+		"\7v\2\2\u00a5\u00a6\7o\2\2\u00a6\u00a7\7g\2\2\u00a7\u00a8\7v\2\2\u00a8"+
+		"\u00a9\7c\2\2\u00a9\u00aa\7a\2\2\u00aa\u00ab\7o\2\2\u00ab\u00ac\7q\2\2"+
+		"\u00ac\u00ad\7f\2\2\u00ad\u00ae\7g\2\2\u00ae\u03d6\7n\2\2\u00af\u00b0"+
+		"\7o\2\2\u00b0\u00b1\7g\2\2\u00b1\u00b2\7v\2\2\u00b2\u00b3\7c\2\2\u00b3"+
+		"\u00b4\7a\2\2\u00b4\u00b5\7k\2\2\u00b5\u00b6\7p\2\2\u00b6\u00b7\7v\2\2"+
+		"\u00b7\u00b8\7g\2\2\u00b8\u00b9\7p\2\2\u00b9\u03d6\7v\2\2\u00ba\u00bb"+
+		"\7o\2\2\u00bb\u00bc\7g\2\2\u00bc\u00bd\7v\2\2\u00bd\u00be\7c\2\2\u00be"+
+		"\u00bf\7a\2\2\u00bf\u00c0\7t\2\2\u00c0\u00c1\7g\2\2\u00c1\u03d6\7s\2\2"+
+		"\u00c2\u00c3\7o\2\2\u00c3\u00c4\7g\2\2\u00c4\u00c5\7v\2\2\u00c5\u00c6"+
+		"\7c\2\2\u00c6\u00c7\7a\2\2\u00c7\u00c8\7w\2\2\u00c8\u00c9\7u\2\2\u00c9"+
+		"\u00ca\7g\2\2\u00ca\u03d6\7t\2\2\u00cb\u00cc\7o\2\2\u00cc\u00cd\7g\2\2"+
+		"\u00cd\u00ce\7v\2\2\u00ce\u00cf\7c\2\2\u00cf\u00d0\7a\2\2\u00d0\u00d1"+
+		"\7e\2\2\u00d1\u00d2\7q\2\2\u00d2\u00d3\7o\2\2\u00d3\u00d4\7r\2\2\u00d4"+
+		"\u00d5\7c\2\2\u00d5\u00d6\7p\2\2\u00d6\u03d6\7{\2\2\u00d7\u00d8\7o\2\2"+
+		"\u00d8\u00d9\7g\2\2\u00d9\u00da\7v\2\2\u00da\u00db\7c\2\2\u00db\u00dc"+
+		"\7a\2\2\u00dc\u00dd\7u\2\2\u00dd\u00de\7{\2\2\u00de\u03d6\7u\2\2\u00df"+
+		"\u00e0\7o\2\2\u00e0\u00e1\7g\2\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7c\2\2"+
+		"\u00e3\u00e4\7a\2\2\u00e4\u00e5\7e\2\2\u00e5\u00e6\7q\2\2\u00e6\u00e7"+
+		"\7p\2\2\u00e7\u03d6\7x\2\2\u00e8\u00e9\7o\2\2\u00e9\u00ea\7g\2\2\u00ea"+
+		"\u00eb\7v\2\2\u00eb\u00ec\7c\2\2\u00ec\u00ed\7a\2\2\u00ed\u00ee\7h\2\2"+
+		"\u00ee\u00ef\7t\2\2\u00ef\u00f0\7c\2\2\u00f0\u03d6\7i\2\2\u00f1\u00f2"+
+		"\7l\2\2\u00f2\u00f3\7u\2\2\u00f3\u00f4\7q\2\2\u00f4\u03d6\7p\2\2\u00f5"+
+		"\u00f6\7k\2\2\u00f6\u03d6\7h\2\2\u00f7\u00f8\7k\2\2\u00f8\u03d6\7f\2\2"+
+		"\u00f9\u00fa\7v\2\2\u00fa\u00fb\7j\2\2\u00fb\u00fc\7k\2\2\u00fc\u03d6"+
+		"\7u\2\2\u00fd\u00fe\7r\2\2\u00fe\u00ff\7c\2\2\u00ff\u0100\7t\2\2\u0100"+
+		"\u03d6\7v\2\2\u0101\u0102\7r\2\2\u0102\u0103\7c\2\2\u0103\u0104\7t\2\2"+
+		"\u0104\u0105\7v\2\2\u0105\u03d6\7u\2\2\u0106\u0107\7c\2\2\u0107\u0108"+
+		"\7p\2\2\u0108\u0109\7e\2\2\u0109\u010a\7g\2\2\u010a\u010b\7u\2\2\u010b"+
+		"\u010c\7v\2\2\u010c\u010d\7q\2\2\u010d\u010e\7t\2\2\u010e\u03d6\7u\2\2"+
+		"\u010f\u0110\7r\2\2\u0110\u0111\7c\2\2\u0111\u0112\7t\2\2\u0112\u0113"+
+		"\7g\2\2\u0113\u0114\7p\2\2\u0114\u03d6\7v\2\2\u0115\u0116\7i\2\2\u0116"+
+		"\u0117\7t\2\2\u0117\u0118\7q\2\2\u0118\u0119\7w\2\2\u0119\u011a\7r\2\2"+
+		"\u011a\u03d6\7u\2\2\u011b\u011c\7x\2\2\u011c\u011d\7c\2\2\u011d\u011e"+
+		"\7n\2\2\u011e\u011f\7w\2\2\u011f\u03d6\7g\2\2\u0120\u0121\7c\2\2\u0121"+
+		"\u0122\7n\2\2\u0122\u0123\7k\2\2\u0123\u0124\7c\2\2\u0124\u0125\7u\2\2"+
+		"\u0125\u0126\7g\2\2\u0126\u03d6\7u\2\2\u0127\u0128\7u\2\2\u0128\u0129"+
+		"\7v\2\2\u0129\u012a\7c\2\2\u012a\u012b\7t\2\2\u012b\u012c\7v\2\2\u012c"+
+		"\u012d\7a\2\2\u012d\u012e\7k\2\2\u012e\u012f\7f\2\2\u012f\u03d6\7z\2\2"+
+		"\u0130\u0131\7g\2\2\u0131\u0132\7p\2\2\u0132\u0133\7f\2\2\u0133\u0134"+
+		"\7a\2\2\u0134\u0135\7k\2\2\u0135\u0136\7f\2\2\u0136\u03d6\7z\2\2\u0137"+
+		"\u0138\7t\2\2\u0138\u0139\7g\2\2\u0139\u013a\7s\2\2\u013a\u013b\7a\2\2"+
+		"\u013b\u013c\7k\2\2\u013c\u03d6\7f\2\2\u013d\u013e\7t\2\2\u013e\u013f"+
+		"\7g\2\2\u013f\u0140\7s\2\2\u0140\u0141\7a\2\2\u0141\u0142\7p\2\2\u0142"+
+		"\u0143\7q\2\2\u0143\u0144\7t\2\2\u0144\u0145\7o\2\2\u0145\u0146\7v\2\2"+
+		"\u0146\u0147\7g\2\2\u0147\u0148\7z\2\2\u0148\u03d6\7v\2\2\u0149\u014a"+
+		"\7t\2\2\u014a\u014b\7g\2\2\u014b\u014c\7s\2\2\u014c\u014d\7a\2\2\u014d"+
+		"\u014e\7v\2\2\u014e\u014f\7u\2\2\u014f\u0150\7v\2\2\u0150\u0151\7c\2\2"+
+		"\u0151\u0152\7o\2\2\u0152\u03d6\7r\2\2\u0153\u0154\7t\2\2\u0154\u0155"+
+		"\7g\2\2\u0155\u0156\7s\2\2\u0156\u0157\7a\2\2\u0157\u0158\7c\2\2\u0158"+
+		"\u0159\7f\2\2\u0159\u015a\7f\2\2\u015a\u03d6\7t\2\2\u015b\u015c\7t\2\2"+
+		"\u015c\u015d\7g\2\2\u015d\u015e\7s\2\2\u015e\u015f\7a\2\2\u015f\u0160"+
+		"\7c\2\2\u0160\u0161\7i\2\2\u0161\u0162\7g\2\2\u0162\u0163\7p\2\2\u0163"+
+		"\u03d6\7v\2\2\u0164\u0165\7w\2\2\u0165\u0166\7u\2\2\u0166\u0167\7g\2\2"+
+		"\u0167\u0168\7t\2\2\u0168\u0169\7a\2\2\u0169\u016a\7k\2\2\u016a\u03d6"+
+		"\7f\2\2\u016b\u016c\7w\2\2\u016c\u016d\7u\2\2\u016d\u016e\7g\2\2\u016e"+
+		"\u016f\7t\2\2\u016f\u0170\7a\2\2\u0170\u0171\7h\2\2\u0171\u0172\7p\2\2"+
+		"\u0172\u0173\7c\2\2\u0173\u0174\7o\2\2\u0174\u03d6\7g\2\2\u0175\u0176"+
+		"\7w\2\2\u0176\u0177\7u\2\2\u0177\u0178\7g\2\2\u0178\u0179\7t\2\2\u0179"+
+		"\u017a\7a\2\2\u017a\u017b\7n\2\2\u017b\u017c\7p\2\2\u017c\u017d\7c\2\2"+
+		"\u017d\u017e\7o\2\2\u017e\u03d6\7g\2\2\u017f\u0180\7w\2\2\u0180\u0181"+
+		"\7u\2\2\u0181\u0182\7g\2\2\u0182\u0183\7t\2\2\u0183\u0184\7a\2\2\u0184"+
+		"\u0185\7g\2\2\u0185\u0186\7o\2\2\u0186\u0187\7c\2\2\u0187\u0188\7k\2\2"+
+		"\u0188\u03d6\7n\2\2\u0189\u018a\7w\2\2\u018a\u018b\7u\2\2\u018b\u018c"+
+		"\7g\2\2\u018c\u018d\7t\2\2\u018d\u018e\7a\2\2\u018e\u018f\7c\2\2\u018f"+
+		"\u0190\7f\2\2\u0190\u0191\7o\2\2\u0191\u0192\7k\2\2\u0192\u03d6\7p\2\2"+
+		"\u0193\u0194\7w\2\2\u0194\u0195\7u\2\2\u0195\u0196\7g\2\2\u0196\u0197"+
+		"\7t\2\2\u0197\u0198\7a\2\2\u0198\u0199\7u\2\2\u0199\u019a\7k\2\2\u019a"+
+		"\u019b\7i\2\2\u019b\u019c\7p\2\2\u019c\u019d\7w\2\2\u019d\u019e\7r\2\2"+
+		"\u019e\u019f\7a\2\2\u019f\u01a0\7v\2\2\u01a0\u01a1\7u\2\2\u01a1\u01a2"+
+		"\7v\2\2\u01a2\u01a3\7c\2\2\u01a3\u01a4\7o\2\2\u01a4\u03d6\7r\2\2\u01a5"+
+		"\u01a6\7e\2\2\u01a6\u01a7\7q\2\2\u01a7\u01a8\7o\2\2\u01a8\u01a9\7r\2\2"+
+		"\u01a9\u01aa\7a\2\2\u01aa\u01ab\7k\2\2\u01ab\u03d6\7f\2\2\u01ac\u01ad"+
+		"\7e\2\2\u01ad\u01ae\7q\2\2\u01ae\u01af\7o\2\2\u01af\u01b0\7r\2\2\u01b0"+
+		"\u01b1\7a\2\2\u01b1\u01b2\7p\2\2\u01b2\u01b3\7c\2\2\u01b3\u01b4\7o\2\2"+
+		"\u01b4\u03d6\7g\2\2\u01b5\u01b6\7e\2\2\u01b6\u01b7\7q\2\2\u01b7\u01b8"+
+		"\7o\2\2\u01b8\u01b9\7r\2\2\u01b9\u01ba\7a\2\2\u01ba\u01bb\7y\2\2\u01bb"+
+		"\u01bc\7g\2\2\u01bc\u01bd\7d\2\2\u01bd\u01be\7u\2\2\u01be\u01bf\7k\2\2"+
+		"\u01bf\u01c0\7v\2\2\u01c0\u03d6\7g\2\2\u01c1\u01c2\7e\2\2\u01c2\u01c3"+
+		"\7q\2\2\u01c3\u01c4\7o\2\2\u01c4\u01c5\7r\2\2\u01c5\u01c6\7a\2\2\u01c6"+
+		"\u01c7\7e\2\2\u01c7\u01c8\7q\2\2\u01c8\u01c9\7w\2\2\u01c9\u01ca\7p\2\2"+
+		"\u01ca\u01cb\7v\2\2\u01cb\u01cc\7t\2\2\u01cc\u03d6\7{\2\2\u01cd\u01ce"+
+		"\7e\2\2\u01ce\u01cf\7q\2\2\u01cf\u01d0\7o\2\2\u01d0\u01d1\7r\2\2\u01d1"+
+		"\u01d2\7a\2\2\u01d2\u01d3\7t\2\2\u01d3\u01d4\7g\2\2\u01d4\u01d5\7i\2\2"+
+		"\u01d5\u01d6\7k\2\2\u01d6\u01d7\7q\2\2\u01d7\u03d6\7p\2\2\u01d8\u01d9"+
+		"\7e\2\2\u01d9\u01da\7q\2\2\u01da\u01db\7o\2\2\u01db\u01dc\7r\2\2\u01dc"+
+		"\u01dd\7a\2\2\u01dd\u01de\7e\2\2\u01de\u01df\7k\2\2\u01df\u01e0\7v\2\2"+
+		"\u01e0\u03d6\7{\2\2\u01e1\u01e2\7e\2\2\u01e2\u01e3\7q\2\2\u01e3\u01e4"+
+		"\7o\2\2\u01e4\u01e5\7r\2\2\u01e5\u01e6\7a\2\2\u01e6\u01e7\7c\2\2\u01e7"+
+		"\u01e8\7f\2\2\u01e8\u01e9\7f\2\2\u01e9\u03d6\7t\2\2\u01ea\u01eb\7e\2\2"+
+		"\u01eb\u01ec\7q\2\2\u01ec\u01ed\7o\2\2\u01ed\u01ee\7r\2\2\u01ee\u01ef"+
+		"\7a\2\2\u01ef\u01f0\7r\2\2\u01f0\u01f1\7q\2\2\u01f1\u01f2\7u\2\2\u01f2"+
+		"\u01f3\7v\2\2\u01f3\u01f4\7e\2\2\u01f4\u01f5\7q\2\2\u01f5\u01f6\7f\2\2"+
+		"\u01f6\u03d6\7g\2\2\u01f7\u01f8\7v\2\2\u01f8\u01f9\7t\2\2\u01f9\u01fa"+
+		"\7k\2\2\u01fa\u03d6\7o\2\2\u01fb\u01fc\7u\2\2\u01fc\u01fd\7v\2\2\u01fd"+
+		"\u01fe\7t\2\2\u01fe\u01ff\7k\2\2\u01ff\u03d6\7r\2\2\u0200\u0201\7w\2\2"+
+		"\u0201\u0202\7r\2\2\u0202\u0203\7r\2\2\u0203\u0204\7g\2\2\u0204\u0205"+
+		"\7t\2\2\u0205\u0206\7e\2\2\u0206\u0207\7c\2\2\u0207\u0208\7u\2\2\u0208"+
+		"\u03d6\7g\2\2\u0209\u020a\7n\2\2\u020a\u020b\7q\2\2\u020b\u020c\7y\2\2"+
+		"\u020c\u020d\7g\2\2\u020d\u020e\7t\2\2\u020e\u020f\7e\2\2\u020f\u0210"+
+		"\7c\2\2\u0210\u0211\7u\2\2\u0211\u03d6\7g\2\2\u0212\u0213\7k\2\2\u0213"+
+		"\u0214\7u\2\2\u0214\u0215\7a\2\2\u0215\u0216\7c\2\2\u0216\u0217\7n\2\2"+
+		"\u0217\u0218\7r\2\2\u0218\u0219\7j\2\2\u0219\u03d6\7c\2\2\u021a\u021b"+
+		"\7k\2\2\u021b\u021c\7u\2\2\u021c\u021d\7a\2\2\u021d\u021e\7c\2\2\u021e"+
+		"\u021f\7n\2\2\u021f\u0220\7r\2\2\u0220\u0221\7j\2\2\u0221\u0222\7c\2\2"+
+		"\u0222\u0223\7p\2\2\u0223\u0224\7w\2\2\u0224\u03d6\7o\2\2\u0225\u0226"+
+		"\7k\2\2\u0226\u0227\7u\2\2\u0227\u0228\7a\2\2\u0228\u0229\7y\2\2\u0229"+
+		"\u022a\7j\2\2\u022a\u022b\7k\2\2\u022b\u022c\7v\2\2\u022c\u022d\7g\2\2"+
+		"\u022d\u022e\7u\2\2\u022e\u022f\7r\2\2\u022f\u0230\7c\2\2\u0230\u0231"+
+		"\7e\2\2\u0231\u03d6\7g\2\2\u0232\u0233\7k\2\2\u0233\u0234\7u\2\2\u0234"+
+		"\u0235\7a\2\2\u0235\u0236\7p\2\2\u0236\u0237\7w\2\2\u0237\u03d6\7o\2\2"+
+		"\u0238\u0239\7k\2\2\u0239\u023a\7u\2\2\u023a\u023b\7a\2\2\u023b\u023c"+
+		"\7p\2\2\u023c\u023d\7w\2\2\u023d\u023e\7o\2\2\u023e\u023f\7u\2\2\u023f"+
+		"\u0240\7r\2\2\u0240\u0241\7c\2\2\u0241\u0242\7e\2\2\u0242\u03d6\7g\2\2"+
+		"\u0243\u0244\7k\2\2\u0244\u0245\7u\2\2\u0245\u0246\7a\2\2\u0246\u0247"+
+		"\7c\2\2\u0247\u0248\7n\2\2\u0248\u0249\7r\2\2\u0249\u024a\7j\2\2\u024a"+
+		"\u024b\7c\2\2\u024b\u024c\7u\2\2\u024c\u024d\7r\2\2\u024d\u024e\7c\2\2"+
+		"\u024e\u024f\7e\2\2\u024f\u03d6\7g\2\2\u0250\u0251\7k\2\2\u0251\u0252"+
+		"\7u\2\2\u0252\u0253\7a\2\2\u0253\u0254\7c\2\2\u0254\u0255\7n\2\2\u0255"+
+		"\u0256\7r\2\2\u0256\u0257\7j\2\2\u0257\u0258\7c\2\2\u0258\u0259\7p\2\2"+
+		"\u0259\u025a\7w\2\2\u025a\u025b\7o\2\2\u025b\u025c\7u\2\2\u025c\u025d"+
+		"\7r\2\2\u025d\u025e\7c\2\2\u025e\u025f\7e\2\2\u025f\u03d6\7g\2\2\u0260"+
+		"\u0261\7u\2\2\u0261\u0262\7w\2\2\u0262\u0263\7d\2\2\u0263\u0264\7u\2\2"+
+		"\u0264\u0265\7v\2\2\u0265\u0266\7t\2\2\u0266\u0267\7k\2\2\u0267\u0268"+
+		"\7p\2\2\u0268\u03d6\7i\2\2\u0269\u026a\7e\2\2\u026a\u026b\7j\2\2\u026b"+
+		"\u026c\7c\2\2\u026c\u026d\7t\2\2\u026d\u026e\7C\2\2\u026e\u03d6\7v\2\2"+
+		"\u026f\u0270\7t\2\2\u0270\u0271\7g\2\2\u0271\u0272\7i\2\2\u0272\u0273"+
+		"\7g\2\2\u0273\u03d6\7z\2\2\u0274\u0275\7u\2\2\u0275\u0276\7q\2\2\u0276"+
+		"\u0277\7w\2\2\u0277\u0278\7p\2\2\u0278\u0279\7f\2\2\u0279\u027a\7g\2\2"+
+		"\u027a\u03d6\7z\2\2\u027b\u027c\7u\2\2\u027c\u027d\7r\2\2\u027d\u027e"+
+		"\7n\2\2\u027e\u027f\7k\2\2\u027f\u03d6\7v\2\2\u0280\u0281\7u\2\2\u0281"+
+		"\u0282\7r\2\2\u0282\u0283\7n\2\2\u0283\u0284\7k\2\2\u0284\u0285\7v\2\2"+
+		"\u0285\u0286\7a\2\2\u0286\u0287\7v\2\2\u0287\u0288\7t\2\2\u0288\u0289"+
+		"\7k\2\2\u0289\u03d6\7o\2\2\u028a\u028b\7t\2\2\u028b\u028c\7g\2\2\u028c"+
+		"\u028d\7r\2\2\u028d\u028e\7n\2\2\u028e\u028f\7c\2\2\u028f\u0290\7e\2\2"+
+		"\u0290\u03d6\7g\2\2\u0291\u0292\7c\2\2\u0292\u0293\7d\2\2\u0293\u03d6"+
+		"\7u\2\2\u0294\u0295\7e\2\2\u0295\u0296\7g\2\2\u0296\u0297\7k\2\2\u0297"+
+		"\u03d6\7n\2\2\u0298\u0299\7h\2\2\u0299\u029a\7n\2\2\u029a\u029b\7q\2\2"+
+		"\u029b\u029c\7q\2\2\u029c\u03d6\7t\2\2\u029d\u029e\7t\2\2\u029e\u029f"+
+		"\7k\2\2\u029f\u02a0\7p\2\2\u02a0\u03d6\7v\2\2\u02a1\u02a2\7t\2\2\u02a2"+
+		"\u02a3\7q\2\2\u02a3\u02a4\7w\2\2\u02a4\u02a5\7p\2\2\u02a5\u03d6\7f\2\2"+
+		"\u02a6\u02a7\7u\2\2\u02a7\u02a8\7k\2\2\u02a8\u02a9\7i\2\2\u02a9\u02aa"+
+		"\7p\2\2\u02aa\u02ab\7w\2\2\u02ab\u03d6\7o\2\2\u02ac\u02ad\7u\2\2\u02ad"+
+		"\u02ae\7s\2\2\u02ae\u02af\7t\2\2\u02af\u03d6\7v\2\2\u02b0\u02b1\7e\2\2"+
+		"\u02b1\u02b2\7d\2\2\u02b2\u02b3\7t\2\2\u02b3\u03d6\7v\2\2\u02b4\u02b5"+
+		"\7r\2\2\u02b5\u03d6\7k\2\2\u02b6\u02b7\7g\2\2\u02b7\u02b8\7w\2\2\u02b8"+
+		"\u02b9\7n\2\2\u02b9\u02ba\7g\2\2\u02ba\u03d6\7t\2\2\u02bb\u02bc\7c\2\2"+
+		"\u02bc\u02bd\7e\2\2\u02bd\u02be\7q\2\2\u02be\u03d6\7u\2\2\u02bf\u02c0"+
+		"\7c\2\2\u02c0\u02c1\7u\2\2\u02c1\u02c2\7k\2\2\u02c2\u03d6\7p\2\2\u02c3"+
+		"\u02c4\7c\2\2\u02c4\u02c5\7v\2\2\u02c5\u02c6\7c\2\2\u02c6\u03d6\7p\2\2"+
+		"\u02c7\u02c8\7e\2\2\u02c8\u02c9\7q\2\2\u02c9\u03d6\7u\2\2\u02ca\u02cb"+
+		"\7u\2\2\u02cb\u02cc\7k\2\2\u02cc\u03d6\7p\2\2\u02cd\u02ce\7v\2\2\u02ce"+
+		"\u02cf\7c\2\2\u02cf\u03d6\7p\2\2\u02d0\u02d1\7e\2\2\u02d1\u02d2\7q\2\2"+
+		"\u02d2\u02d3\7u\2\2\u02d3\u03d6\7j\2\2\u02d4\u02d5\7u\2\2\u02d5\u02d6"+
+		"\7k\2\2\u02d6\u02d7\7p\2\2\u02d7\u03d6\7j\2\2\u02d8\u02d9\7v\2\2\u02d9"+
+		"\u02da\7c\2\2\u02da\u02db\7p\2\2\u02db\u03d6\7j\2\2\u02dc\u02dd\7c\2\2"+
+		"\u02dd\u02de\7v\2\2\u02de\u02df\7p\2\2\u02df\u03d6\7\64\2\2\u02e0\u02e1"+
+		"\7f\2\2\u02e1\u02e2\7g\2\2\u02e2\u02e3\7i\2\2\u02e3\u02e4\7t\2\2\u02e4"+
+		"\u02e5\7g\2\2\u02e5\u02e6\7g\2\2\u02e6\u03d6\7u\2\2\u02e7\u02e8\7t\2\2"+
+		"\u02e8\u02e9\7c\2\2\u02e9\u02ea\7f\2\2\u02ea\u02eb\7k\2\2\u02eb\u02ec"+
+		"\7c\2\2\u02ec\u02ed\7p\2\2\u02ed\u03d6\7u\2\2\u02ee\u02ef\7g\2\2\u02ef"+
+		"\u02f0\7z\2\2\u02f0\u03d6\7r\2\2\u02f1\u02f2\7g\2\2\u02f2\u02f3\7z\2\2"+
+		"\u02f3\u02f4\7r\2\2\u02f4\u02f5\7o\2\2\u02f5\u03d6\7\63\2\2\u02f6\u02f7"+
+		"\7j\2\2\u02f7\u02f8\7{\2\2\u02f8\u02f9\7r\2\2\u02f9\u02fa\7q\2\2\u02fa"+
+		"\u03d6\7v\2\2\u02fb\u02fc\7n\2\2\u02fc\u02fd\7q\2\2\u02fd\u03d6\7i\2\2"+
+		"\u02fe\u02ff\7n\2\2\u02ff\u0300\7q\2\2\u0300\u0301\7i\2\2\u0301\u0302"+
+		"\7\63\2\2\u0302\u03d6\7\62\2\2\u0303\u0304\7n\2\2\u0304\u0305\7q\2\2\u0305"+
+		"\u0306\7i\2\2\u0306\u0307\7\63\2\2\u0307\u03d6\7r\2\2\u0308\u0309\7r\2"+
+		"\2\u0309\u030a\7q\2\2\u030a\u03d6\7y\2\2\u030b\u030c\7t\2\2\u030c\u030d"+
+		"\7c\2\2\u030d\u030e\7p\2\2\u030e\u03d6\7f\2\2\u030f\u0310\7u\2\2\u0310"+
+		"\u0311\7s\2\2\u0311\u0312\7w\2\2\u0312\u0313\7c\2\2\u0313\u0314\7t\2\2"+
+		"\u0314\u03d6\7g\2\2\u0315\u0316\7n\2\2\u0316\u0317\7k\2\2\u0317\u0318"+
+		"\7u\2\2\u0318\u03d6\7v\2\2\u0319\u031a\7i\2\2\u031a\u031b\7g\2\2\u031b"+
+		"\u03d6\7v\2\2\u031c\u031d\7j\2\2\u031d\u031e\7c\2\2\u031e\u03d6\7u\2\2"+
+		"\u031f\u0320\7h\2\2\u0320\u0321\7k\2\2\u0321\u0322\7t\2\2\u0322\u0323"+
+		"\7u\2\2\u0323\u03d6\7v\2\2\u0324\u0325\7n\2\2\u0325\u0326\7c\2\2\u0326"+
+		"\u0327\7u\2\2\u0327\u03d6\7v\2\2\u0328\u0329\7m\2\2\u0329\u032a\7g\2\2"+
+		"\u032a\u032b\7{\2\2\u032b\u03d6\7u\2\2\u032c\u032d\7x\2\2\u032d\u032e"+
+		"\7c\2\2\u032e\u032f\7n\2\2\u032f\u0330\7w\2\2\u0330\u0331\7g\2\2\u0331"+
+		"\u03d6\7u\2\2\u0332\u0333\7n\2\2\u0333\u0334\7g\2\2\u0334\u0335\7p\2\2"+
+		"\u0335\u0336\7i\2\2\u0336\u0337\7v\2\2\u0337\u03d6\7j\2\2\u0338\u0339"+
+		"\7e\2\2\u0339\u033a\7q\2\2\u033a\u033b\7w\2\2\u033b\u033c\7p\2\2\u033c"+
+		"\u03d6\7v\2\2\u033d\u033e\7u\2\2\u033e\u033f\7k\2\2\u033f\u0340\7|\2\2"+
+		"\u0340\u03d6\7g\2\2\u0341\u0342\7u\2\2\u0342\u0343\7q\2\2\u0343\u0344"+
+		"\7t\2\2\u0344\u03d6\7v\2\2\u0345\u0346\7t\2\2\u0346\u0347\7g\2\2\u0347"+
+		"\u0348\7x\2\2\u0348\u0349\7g\2\2\u0349\u034a\7t\2\2\u034a\u034b\7u\2\2"+
+		"\u034b\u03d6\7g\2\2\u034c\u034d\7k\2\2\u034d\u034e\7u\2\2\u034e\u034f"+
+		"\7a\2\2\u034f\u0350\7g\2\2\u0350\u0351\7o\2\2\u0351\u0352\7r\2\2\u0352"+
+		"\u0353\7v\2\2\u0353\u03d6\7{\2\2\u0354\u0355\7p\2\2\u0355\u0356\7q\2\2"+
+		"\u0356\u0357\7p\2\2\u0357\u0358\7a\2\2\u0358\u0359\7g\2\2\u0359\u035a"+
+		"\7o\2\2\u035a\u035b\7r\2\2\u035b\u035c\7v\2\2\u035c\u03d6\7{\2\2\u035d"+
+		"\u035e\7v\2\2\u035e\u035f\7q\2\2\u035f\u0360\7a\2\2\u0360\u0361\7u\2\2"+
+		"\u0361\u0362\7v\2\2\u0362\u0363\7t\2\2\u0363\u0364\7k\2\2\u0364\u0365"+
+		"\7p\2\2\u0365\u03d6\7i\2\2\u0366\u0367\7c\2\2\u0367\u0368\7x\2\2\u0368"+
+		"\u03d6\7i\2\2\u0369\u036a\7o\2\2\u036a\u036b\7c\2\2\u036b\u03d6\7z\2\2"+
+		"\u036c\u036d\7o\2\2\u036d\u036e\7k\2\2\u036e\u03d6\7p\2\2\u036f\u0370"+
+		"\7u\2\2\u0370\u0371\7v\2\2\u0371\u0372\7f\2\2\u0372\u0373\7g\2\2\u0373"+
+		"\u03d6\7x\2\2\u0374\u0375\7u\2\2\u0375\u0376\7w\2\2\u0376\u03d6\7o\2\2"+
+		"\u0377\u0378\7{\2\2\u0378\u0379\7g\2\2\u0379\u037a\7c\2\2\u037a\u03d6"+
+		"\7t\2\2\u037b\u037c\7o\2\2\u037c\u037d\7q\2\2\u037d\u037e\7p\2\2\u037e"+
+		"\u037f\7v\2\2\u037f\u03d6\7j\2\2\u0380\u0381\7f\2\2\u0381\u0382\7c\2\2"+
+		"\u0382\u0383\7{\2\2\u0383\u0384\7a\2\2\u0384\u0385\7q\2\2\u0385\u0386"+
+		"\7h\2\2\u0386\u0387\7a\2\2\u0387\u0388\7o\2\2\u0388\u0389\7q\2\2\u0389"+
+		"\u038a\7p\2\2\u038a\u038b\7v\2\2\u038b\u03d6\7j\2\2\u038c\u038d\7f\2\2"+
+		"\u038d\u038e\7c\2\2\u038e\u038f\7{\2\2\u038f\u0390\7a\2\2\u0390\u0391"+
+		"\7q\2\2\u0391\u0392\7h\2\2\u0392\u0393\7a\2\2\u0393\u0394\7y\2\2\u0394"+
+		"\u0395\7g\2\2\u0395\u0396\7g\2\2\u0396\u03d6\7m\2\2\u0397\u0398\7f\2\2"+
+		"\u0398\u0399\7c\2\2\u0399\u039a\7{\2\2\u039a\u039b\7a\2\2\u039b\u039c"+
+		"\7q\2\2\u039c\u039d\7h\2\2\u039d\u039e\7a\2\2\u039e\u039f\7{\2\2\u039f"+
+		"\u03a0\7g\2\2\u03a0\u03a1\7c\2\2\u03a1\u03d6\7t\2\2\u03a2\u03a3\7j\2\2"+
+		"\u03a3\u03a4\7q\2\2\u03a4\u03a5\7w\2\2\u03a5\u03d6\7t\2\2\u03a6\u03a7"+
+		"\7o\2\2\u03a7\u03a8\7k\2\2\u03a8\u03a9\7p\2\2\u03a9\u03aa\7w\2\2\u03aa"+
+		"\u03ab\7v\2\2\u03ab\u03d6\7g\2\2\u03ac\u03ad\7u\2\2\u03ad\u03ae\7g\2\2"+
+		"\u03ae\u03af\7e\2\2\u03af\u03b0\7q\2\2\u03b0\u03b1\7p\2\2\u03b1\u03d6"+
+		"\7f\2\2\u03b2\u03b3\7y\2\2\u03b3\u03b4\7g\2\2\u03b4\u03b5\7g\2\2\u03b5"+
+		"\u03b6\7m\2\2\u03b6\u03b7\7a\2\2\u03b7\u03b8\7q\2\2\u03b8\u03b9\7h\2\2"+
+		"\u03b9\u03ba\7a\2\2\u03ba\u03bb\7o\2\2\u03bb\u03bc\7q\2\2\u03bc\u03bd"+
+		"\7p\2\2\u03bd\u03be\7v\2\2\u03be\u03d6\7j\2\2\u03bf\u03c0\7y\2\2\u03c0"+
+		"\u03c1\7g\2\2\u03c1\u03c2\7g\2\2\u03c2\u03c3\7m\2\2\u03c3\u03c4\7a\2\2"+
+		"\u03c4\u03c5\7q\2\2\u03c5\u03c6\7h\2\2\u03c6\u03c7\7a\2\2\u03c7\u03c8"+
+		"\7{\2\2\u03c8\u03c9\7g\2\2\u03c9\u03ca\7c\2\2\u03ca\u03d6\7t\2\2\u03cb"+
+		"\u03cc\7s\2\2\u03cc\u03cd\7w\2\2\u03cd\u03ce\7c\2\2\u03ce\u03cf\7t\2\2"+
+		"\u03cf\u03d0\7v\2\2\u03d0\u03d1\7g\2\2\u03d1\u03d6\7t\2\2\u03d2\u03d3"+
+		"\7p\2\2\u03d3\u03d4\7q\2\2\u03d4\u03d6\7y\2\2\u03d5\u0092\3\2\2\2\u03d5"+
+		"\u009c\3\2\2\2\u03d5\u00a5\3\2\2\2\u03d5\u00af\3\2\2\2\u03d5\u00ba\3\2"+
+		"\2\2\u03d5\u00c2\3\2\2\2\u03d5\u00cb\3\2\2\2\u03d5\u00d7\3\2\2\2\u03d5"+
+		"\u00df\3\2\2\2\u03d5\u00e8\3\2\2\2\u03d5\u00f1\3\2\2\2\u03d5\u00f5\3\2"+
+		"\2\2\u03d5\u00f7\3\2\2\2\u03d5\u00f9\3\2\2\2\u03d5\u00fd\3\2\2\2\u03d5"+
+		"\u0101\3\2\2\2\u03d5\u0106\3\2\2\2\u03d5\u010f\3\2\2\2\u03d5\u0115\3\2"+
+		"\2\2\u03d5\u011b\3\2\2\2\u03d5\u0120\3\2\2\2\u03d5\u0127\3\2\2\2\u03d5"+
+		"\u0130\3\2\2\2\u03d5\u0137\3\2\2\2\u03d5\u013d\3\2\2\2\u03d5\u0149\3\2"+
+		"\2\2\u03d5\u0153\3\2\2\2\u03d5\u015b\3\2\2\2\u03d5\u0164\3\2\2\2\u03d5"+
+		"\u016b\3\2\2\2\u03d5\u0175\3\2\2\2\u03d5\u017f\3\2\2\2\u03d5\u0189\3\2"+
+		"\2\2\u03d5\u0193\3\2\2\2\u03d5\u01a5\3\2\2\2\u03d5\u01ac\3\2\2\2\u03d5"+
+		"\u01b5\3\2\2\2\u03d5\u01c1\3\2\2\2\u03d5\u01cd\3\2\2\2\u03d5\u01d8\3\2"+
+		"\2\2\u03d5\u01e1\3\2\2\2\u03d5\u01ea\3\2\2\2\u03d5\u01f7\3\2\2\2\u03d5"+
+		"\u01fb\3\2\2\2\u03d5\u0200\3\2\2\2\u03d5\u0209\3\2\2\2\u03d5\u0212\3\2"+
+		"\2\2\u03d5\u021a\3\2\2\2\u03d5\u0225\3\2\2\2\u03d5\u0232\3\2\2\2\u03d5"+
+		"\u0238\3\2\2\2\u03d5\u0243\3\2\2\2\u03d5\u0250\3\2\2\2\u03d5\u0260\3\2"+
+		"\2\2\u03d5\u0269\3\2\2\2\u03d5\u026f\3\2\2\2\u03d5\u0274\3\2\2\2\u03d5"+
+		"\u027b\3\2\2\2\u03d5\u0280\3\2\2\2\u03d5\u028a\3\2\2\2\u03d5\u0291\3\2"+
+		"\2\2\u03d5\u0294\3\2\2\2\u03d5\u0298\3\2\2\2\u03d5\u029d\3\2\2\2\u03d5"+
+		"\u02a1\3\2\2\2\u03d5\u02a6\3\2\2\2\u03d5\u02ac\3\2\2\2\u03d5\u02b0\3\2"+
+		"\2\2\u03d5\u02b4\3\2\2\2\u03d5\u02b6\3\2\2\2\u03d5\u02bb\3\2\2\2\u03d5"+
+		"\u02bf\3\2\2\2\u03d5\u02c3\3\2\2\2\u03d5\u02c7\3\2\2\2\u03d5\u02ca\3\2"+
+		"\2\2\u03d5\u02cd\3\2\2\2\u03d5\u02d0\3\2\2\2\u03d5\u02d4\3\2\2\2\u03d5"+
+		"\u02d8\3\2\2\2\u03d5\u02dc\3\2\2\2\u03d5\u02e0\3\2\2\2\u03d5\u02e7\3\2"+
+		"\2\2\u03d5\u02ee\3\2\2\2\u03d5\u02f1\3\2\2\2\u03d5\u02f6\3\2\2\2\u03d5"+
+		"\u02fb\3\2\2\2\u03d5\u02fe\3\2\2\2\u03d5\u0303\3\2\2\2\u03d5\u0308\3\2"+
+		"\2\2\u03d5\u030b\3\2\2\2\u03d5\u030f\3\2\2\2\u03d5\u0315\3\2\2\2\u03d5"+
+		"\u0319\3\2\2\2\u03d5\u031c\3\2\2\2\u03d5\u031f\3\2\2\2\u03d5\u0324\3\2"+
+		"\2\2\u03d5\u0328\3\2\2\2\u03d5\u032c\3\2\2\2\u03d5\u0332\3\2\2\2\u03d5"+
+		"\u0338\3\2\2\2\u03d5\u033d\3\2\2\2\u03d5\u0341\3\2\2\2\u03d5\u0345\3\2"+
+		"\2\2\u03d5\u034c\3\2\2\2\u03d5\u0354\3\2\2\2\u03d5\u035d\3\2\2\2\u03d5"+
+		"\u0366\3\2\2\2\u03d5\u0369\3\2\2\2\u03d5\u036c\3\2\2\2\u03d5\u036f\3\2"+
+		"\2\2\u03d5\u0374\3\2\2\2\u03d5\u0377\3\2\2\2\u03d5\u037b\3\2\2\2\u03d5"+
+		"\u0380\3\2\2\2\u03d5\u038c\3\2\2\2\u03d5\u0397\3\2\2\2\u03d5\u03a2\3\2"+
+		"\2\2\u03d5\u03a6\3\2\2\2\u03d5\u03ac\3\2\2\2\u03d5\u03b2\3\2\2\2\u03d5"+
+		"\u03bf\3\2\2\2\u03d5\u03cb\3\2\2\2\u03d5\u03d2\3\2\2\2\u03d6\20\3\2\2"+
+		"\2\u03d7\u03d8\7h\2\2\u03d8\u03d9\7t\2\2\u03d9\u03da\7c\2\2\u03da\u03db"+
+		"\7i\2\2\u03db\u03dc\7o\2\2\u03dc\u03dd\7g\2\2\u03dd\u03de\7p\2\2\u03de"+
+		"\u03df\7v\2\2\u03df\22\3\2\2\2\u03e0\u03e6\5\67\34\2\u03e1\u03e5\n\2\2"+
+		"\2\u03e2\u03e3\7^\2\2\u03e3\u03e5\7)\2\2\u03e4\u03e1\3\2\2\2\u03e4\u03e2"+
+		"\3\2\2\2\u03e5\u03e8\3\2\2\2\u03e6\u03e4\3\2\2\2\u03e6\u03e7\3\2\2\2\u03e7"+
+		"\u03e9\3\2\2\2\u03e8\u03e6\3\2\2\2\u03e9\u03ea\5\67\34\2\u03ea\24\3\2"+
+		"\2\2\u03eb\u03f1\59\35\2\u03ec\u03f0\n\3\2\2\u03ed\u03ee\7^\2\2\u03ee"+
+		"\u03f0\7$\2\2\u03ef\u03ec\3\2\2\2\u03ef\u03ed\3\2\2\2\u03f0\u03f3\3\2"+
+		"\2\2\u03f1\u03ef\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f4\3\2\2\2\u03f3"+
+		"\u03f1\3\2\2\2\u03f4\u03f5\59\35\2\u03f5\26\3\2\2\2\u03f6\u03f7\7v\2\2"+
+		"\u03f7\u03f8\7t\2\2\u03f8\u03f9\7w\2\2\u03f9\u0400\7g\2\2\u03fa\u03fb"+
+		"\7h\2\2\u03fb\u03fc\7c\2\2\u03fc\u03fd\7n\2\2\u03fd\u03fe\7u\2\2\u03fe"+
+		"\u0400\7g\2\2\u03ff\u03f6\3\2\2\2\u03ff\u03fa\3\2\2\2\u0400\30\3\2\2\2"+
+		"\u0401\u0402\7p\2\2\u0402\u0403\7w\2\2\u0403\u0404\7n\2\2\u0404\u0405"+
+		"\7n\2\2\u0405\32\3\2\2\2\u0406\u0407\7?\2\2\u0407\u0408\7?\2\2\u0408\34"+
+		"\3\2\2\2\u0409\u040a\7#\2\2\u040a\u040b\7?\2\2\u040b\36\3\2\2\2\u040c"+
+		"\u040d\7@\2\2\u040d\u040e\7?\2\2\u040e \3\2\2\2\u040f\u0410\7>\2\2\u0410"+
+		"\u0411\7?\2\2\u0411\"\3\2\2\2\u0412\u0413\7@\2\2\u0413$\3\2\2\2\u0414"+
+		"\u0415\7>\2\2\u0415&\3\2\2\2\u0416\u0417\7(\2\2\u0417\u0418\7(\2\2\u0418"+
+		"(\3\2\2\2\u0419\u041a\7~\2\2\u041a\u041b\7~\2\2\u041b*\3\2\2\2\u041c\u041d"+
+		"\7~\2\2\u041d,\3\2\2\2\u041e\u041f\7#\2\2\u041f.\3\2\2\2\u0420\u0421\7"+
+		"*\2\2\u0421\60\3\2\2\2\u0422\u0423\7+\2\2\u0423\62\3\2\2\2\u0424\u0425"+
+		"\7}\2\2\u0425\64\3\2\2\2\u0426\u0427\7\177\2\2\u0427\66\3\2\2\2\u0428"+
+		"\u0429\7)\2\2\u04298\3\2\2\2\u042a\u042b\7$\2\2\u042b:\3\2\2\2\u042c\u042d"+
+		"\7\u0080\2\2\u042d<\3\2\2\2\u042e\u042f\7]\2\2\u042f>\3\2\2\2\u0430\u0431"+
+		"\7_\2\2\u0431@\3\2\2\2\u0432\u0433\7%\2\2\u0433B\3\2\2\2\u0434\u0435\7"+
+		".\2\2\u0435D\3\2\2\2\u0436\u0437\7<\2\2\u0437F\3\2\2\2\u0438\u0439\7/"+
+		"\2\2\u0439H\3\2\2\2\u043a\u043b\7\60\2\2\u043bJ\3\2\2\2\u043c\u043d\7"+
+		"a\2\2\u043dL\3\2\2\2\u043e\u043f\7?\2\2\u043fN\3\2\2\2\u0440\u0441\7-"+
+		"\2\2\u0441P\3\2\2\2\u0442\u0443\7A\2\2\u0443R\3\2\2\2\u0444\u0445\7,\2"+
+		"\2\u0445T\3\2\2\2\u0446\u0447\7\61\2\2\u0447V\3\2\2\2\u0448\u0449\7\'"+
+		"\2\2\u0449X\3\2\2\2\u044a\u044b\7&\2\2\u044bZ\3\2\2\2\u044c\u0455\7\62"+
+		"\2\2\u044d\u0451\t\4\2\2\u044e\u0450\t\5\2\2\u044f\u044e\3\2\2\2\u0450"+
+		"\u0453\3\2\2\2\u0451\u044f\3\2\2\2\u0451\u0452\3\2\2\2\u0452\u0455\3\2"+
+		"\2\2\u0453\u0451\3\2\2\2\u0454\u044c\3\2\2\2\u0454\u044d\3\2\2\2\u0455"+
+		"\\\3\2\2\2\u0456\u0458\5I%\2\u0457\u0459\t\6\2\2\u0458\u0457\3\2\2\2\u0459"+
+		"\u045a\3\2\2\2\u045a\u0458\3\2\2\2\u045a\u045b\3\2\2\2\u045b^\3\2\2\2"+
+		"\u045c\u045e\t\7\2\2\u045d\u045f\t\b\2\2\u045e\u045d\3\2\2\2\u045e\u045f"+
+		"\3\2\2\2\u045f\u0460\3\2\2\2\u0460\u0461\5[.\2\u0461`\3\2\2\2\u0462\u0463"+
+		"\t\t\2\2\u0463b\3\2\2\2\u0464\u0465\t\n\2\2\u0465d\3\2\2\2\u0466\u046b"+
+		"\5a\61\2\u0467\u046b\5K&\2\u0468\u046b\5c\62\2\u0469\u046b\5Y-\2\u046a"+
+		"\u0466\3\2\2\2\u046a\u0467\3\2\2\2\u046a\u0468\3\2\2\2\u046a\u0469\3\2"+
+		"\2\2\u046b\u046c\3\2\2\2\u046c\u046a\3\2\2\2\u046c\u046d\3\2\2\2\u046d"+
+		"\u0477\3\2\2\2\u046e\u0476\5a\61\2\u046f\u0476\5Y-\2\u0470\u0476\5c\62"+
+		"\2\u0471\u0476\t\6\2\2\u0472\u0476\5E#\2\u0473\u0476\5G$\2\u0474\u0476"+
+		"\5K&\2\u0475\u046e\3\2\2\2\u0475\u046f\3\2\2\2\u0475\u0470\3\2\2\2\u0475"+
+		"\u0471\3\2\2\2\u0475\u0472\3\2\2\2\u0475\u0473\3\2\2\2\u0475\u0474\3\2"+
+		"\2\2\u0476\u0479\3\2\2\2\u0477\u0475\3\2\2\2\u0477\u0478\3\2\2\2\u0478"+
+		"f\3\2\2\2\u0479\u0477\3\2\2\2\u047a\u047b\7\61\2\2\u047b\u047c\7\61\2"+
+		"\2\u047c\u0480\3\2\2\2\u047d\u047f\n\13\2\2\u047e\u047d\3\2\2\2\u047f"+
+		"\u0482\3\2\2\2\u0480\u047e\3\2\2\2\u0480\u0481\3\2\2\2\u0481\u0484\3\2"+
+		"\2\2\u0482\u0480\3\2\2\2\u0483\u0485\7\17\2\2\u0484\u0483\3\2\2\2\u0484"+
+		"\u0485\3\2\2\2\u0485\u0487\3\2\2\2\u0486\u0488\t\f\2\2\u0487\u0486\3\2"+
+		"\2\2\u0488\u0495\3\2\2\2\u0489\u048a\7\61\2\2\u048a\u048b\7,\2\2\u048b"+
+		"\u048f\3\2\2\2\u048c\u048e\13\2\2\2\u048d\u048c\3\2\2\2\u048e\u0491\3"+
+		"\2\2\2\u048f\u0490\3\2\2\2\u048f\u048d\3\2\2\2\u0490\u0492\3\2\2\2\u0491"+
+		"\u048f\3\2\2\2\u0492\u0493\7,\2\2\u0493\u0495\7\61\2\2\u0494\u047a\3\2"+
+		"\2\2\u0494\u0489\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u0497\b\64\2\2\u0497"+
+		"h\3\2\2\2\u0498\u049a\t\r\2\2\u0499\u0498\3\2\2\2\u049a\u049b\3\2\2\2"+
+		"\u049b\u0499\3\2\2\2\u049b\u049c\3\2\2\2\u049c\u049d\3\2\2\2\u049d\u049e"+
+		"\b\65\2\2\u049ej\3\2\2\2\u049f\u04a0\13\2\2\2\u04a0l\3\2\2\2\27\2\u03d5"+
+		"\u03e4\u03e6\u03ef\u03f1\u03ff\u0451\u0454\u045a\u045e\u046a\u046c\u0475"+
+		"\u0477\u0480\u0484\u0487\u048f\u0494\u049b\3\b\2\2";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.tokens
new file mode 100644
index 0000000..5680142
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlLexer.tokens
@@ -0,0 +1,91 @@
+T__0=1
+T__1=2
+T__2=3
+T__3=4
+T__4=5
+T__5=6
+FUN_NAME=7
+FRAG=8
+SQSTRING=9
+DQSTRING=10
+BOOL=11
+NULL=12
+EQ=13
+NEQ=14
+GTEQ=15
+LTEQ=16
+GT=17
+LT=18
+AND=19
+OR=20
+VERT=21
+NOT=22
+LPAR=23
+RPAR=24
+LBRACE=25
+RBRACE=26
+SQUOTE=27
+DQUOTE=28
+TILDA=29
+LBR=30
+RBR=31
+POUND=32
+COMMA=33
+COLON=34
+MINUS=35
+DOT=36
+UNDERSCORE=37
+ASSIGN=38
+PLUS=39
+QUESTION=40
+MULT=41
+DIV=42
+MOD=43
+DOLLAR=44
+INT=45
+REAL=46
+EXP=47
+ID=48
+COMMENT=49
+WS=50
+ErrorChar=51
+'import'=1
+'intent'=2
+'ordered'=3
+'flow'=4
+'meta'=5
+'term'=6
+'fragment'=8
+'null'=12
+'=='=13
+'!='=14
+'>='=15
+'<='=16
+'>'=17
+'<'=18
+'&&'=19
+'||'=20
+'|'=21
+'!'=22
+'('=23
+')'=24
+'{'=25
+'}'=26
+'\''=27
+'"'=28
+'~'=29
+'['=30
+']'=31
+'#'=32
+','=33
+':'=34
+'-'=35
+'.'=36
+'_'=37
+'='=38
+'+'=39
+'?'=40
+'*'=41
+'/'=42
+'%'=43
+'$'=44
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlListener.java
new file mode 100644
index 0000000..2c02411
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlListener.java
@@ -0,0 +1,458 @@
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4\NCIntentIdl.g4 by ANTLR 4.9.1
+package org.apache.nlpcraft.model.intent.compiler.antlr4;
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link NCIntentIdlParser}.
+ */
+public interface NCIntentIdlListener extends ParseTreeListener {
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#idl}.
+	 * @param ctx the parse tree
+	 */
+	void enterIdl(NCIntentIdlParser.IdlContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#idl}.
+	 * @param ctx the parse tree
+	 */
+	void exitIdl(NCIntentIdlParser.IdlContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#synonym}.
+	 * @param ctx the parse tree
+	 */
+	void enterSynonym(NCIntentIdlParser.SynonymContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#synonym}.
+	 * @param ctx the parse tree
+	 */
+	void exitSynonym(NCIntentIdlParser.SynonymContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#alias}.
+	 * @param ctx the parse tree
+	 */
+	void enterAlias(NCIntentIdlParser.AliasContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#alias}.
+	 * @param ctx the parse tree
+	 */
+	void exitAlias(NCIntentIdlParser.AliasContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#idlItems}.
+	 * @param ctx the parse tree
+	 */
+	void enterIdlItems(NCIntentIdlParser.IdlItemsContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#idlItems}.
+	 * @param ctx the parse tree
+	 */
+	void exitIdlItems(NCIntentIdlParser.IdlItemsContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#idlItem}.
+	 * @param ctx the parse tree
+	 */
+	void enterIdlItem(NCIntentIdlParser.IdlItemContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#idlItem}.
+	 * @param ctx the parse tree
+	 */
+	void exitIdlItem(NCIntentIdlParser.IdlItemContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#imp}.
+	 * @param ctx the parse tree
+	 */
+	void enterImp(NCIntentIdlParser.ImpContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#imp}.
+	 * @param ctx the parse tree
+	 */
+	void exitImp(NCIntentIdlParser.ImpContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#frag}.
+	 * @param ctx the parse tree
+	 */
+	void enterFrag(NCIntentIdlParser.FragContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#frag}.
+	 * @param ctx the parse tree
+	 */
+	void exitFrag(NCIntentIdlParser.FragContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#fragId}.
+	 * @param ctx the parse tree
+	 */
+	void enterFragId(NCIntentIdlParser.FragIdContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#fragId}.
+	 * @param ctx the parse tree
+	 */
+	void exitFragId(NCIntentIdlParser.FragIdContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#fragRef}.
+	 * @param ctx the parse tree
+	 */
+	void enterFragRef(NCIntentIdlParser.FragRefContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#fragRef}.
+	 * @param ctx the parse tree
+	 */
+	void exitFragRef(NCIntentIdlParser.FragRefContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#fragMeta}.
+	 * @param ctx the parse tree
+	 */
+	void enterFragMeta(NCIntentIdlParser.FragMetaContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#fragMeta}.
+	 * @param ctx the parse tree
+	 */
+	void exitFragMeta(NCIntentIdlParser.FragMetaContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#intent}.
+	 * @param ctx the parse tree
+	 */
+	void enterIntent(NCIntentIdlParser.IntentContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#intent}.
+	 * @param ctx the parse tree
+	 */
+	void exitIntent(NCIntentIdlParser.IntentContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#intentId}.
+	 * @param ctx the parse tree
+	 */
+	void enterIntentId(NCIntentIdlParser.IntentIdContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#intentId}.
+	 * @param ctx the parse tree
+	 */
+	void exitIntentId(NCIntentIdlParser.IntentIdContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#orderedDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterOrderedDecl(NCIntentIdlParser.OrderedDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#orderedDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitOrderedDecl(NCIntentIdlParser.OrderedDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#mtdDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterMtdDecl(NCIntentIdlParser.MtdDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#mtdDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitMtdDecl(NCIntentIdlParser.MtdDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#flowDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterFlowDecl(NCIntentIdlParser.FlowDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#flowDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitFlowDecl(NCIntentIdlParser.FlowDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#metaDecl}.
+	 * @param ctx the parse tree
+	 */
+	void enterMetaDecl(NCIntentIdlParser.MetaDeclContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#metaDecl}.
+	 * @param ctx the parse tree
+	 */
+	void exitMetaDecl(NCIntentIdlParser.MetaDeclContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#jsonObj}.
+	 * @param ctx the parse tree
+	 */
+	void enterJsonObj(NCIntentIdlParser.JsonObjContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#jsonObj}.
+	 * @param ctx the parse tree
+	 */
+	void exitJsonObj(NCIntentIdlParser.JsonObjContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#jsonPair}.
+	 * @param ctx the parse tree
+	 */
+	void enterJsonPair(NCIntentIdlParser.JsonPairContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#jsonPair}.
+	 * @param ctx the parse tree
+	 */
+	void exitJsonPair(NCIntentIdlParser.JsonPairContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#jsonVal}.
+	 * @param ctx the parse tree
+	 */
+	void enterJsonVal(NCIntentIdlParser.JsonValContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#jsonVal}.
+	 * @param ctx the parse tree
+	 */
+	void exitJsonVal(NCIntentIdlParser.JsonValContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#jsonArr}.
+	 * @param ctx the parse tree
+	 */
+	void enterJsonArr(NCIntentIdlParser.JsonArrContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#jsonArr}.
+	 * @param ctx the parse tree
+	 */
+	void exitJsonArr(NCIntentIdlParser.JsonArrContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#terms}.
+	 * @param ctx the parse tree
+	 */
+	void enterTerms(NCIntentIdlParser.TermsContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#terms}.
+	 * @param ctx the parse tree
+	 */
+	void exitTerms(NCIntentIdlParser.TermsContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#termItem}.
+	 * @param ctx the parse tree
+	 */
+	void enterTermItem(NCIntentIdlParser.TermItemContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#termItem}.
+	 * @param ctx the parse tree
+	 */
+	void exitTermItem(NCIntentIdlParser.TermItemContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#termEq}.
+	 * @param ctx the parse tree
+	 */
+	void enterTermEq(NCIntentIdlParser.TermEqContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#termEq}.
+	 * @param ctx the parse tree
+	 */
+	void exitTermEq(NCIntentIdlParser.TermEqContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#term}.
+	 * @param ctx the parse tree
+	 */
+	void enterTerm(NCIntentIdlParser.TermContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#term}.
+	 * @param ctx the parse tree
+	 */
+	void exitTerm(NCIntentIdlParser.TermContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#mtdRef}.
+	 * @param ctx the parse tree
+	 */
+	void enterMtdRef(NCIntentIdlParser.MtdRefContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#mtdRef}.
+	 * @param ctx the parse tree
+	 */
+	void exitMtdRef(NCIntentIdlParser.MtdRefContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#javaFqn}.
+	 * @param ctx the parse tree
+	 */
+	void enterJavaFqn(NCIntentIdlParser.JavaFqnContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#javaFqn}.
+	 * @param ctx the parse tree
+	 */
+	void exitJavaFqn(NCIntentIdlParser.JavaFqnContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#termId}.
+	 * @param ctx the parse tree
+	 */
+	void enterTermId(NCIntentIdlParser.TermIdContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#termId}.
+	 * @param ctx the parse tree
+	 */
+	void exitTermId(NCIntentIdlParser.TermIdContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code parExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterParExpr(NCIntentIdlParser.ParExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code parExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitParExpr(NCIntentIdlParser.ParExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code unaryExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterUnaryExpr(NCIntentIdlParser.UnaryExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code unaryExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitUnaryExpr(NCIntentIdlParser.UnaryExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code compExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterCompExpr(NCIntentIdlParser.CompExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code compExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitCompExpr(NCIntentIdlParser.CompExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code plusMinusExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterPlusMinusExpr(NCIntentIdlParser.PlusMinusExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code plusMinusExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitPlusMinusExpr(NCIntentIdlParser.PlusMinusExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code atomExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterAtomExpr(NCIntentIdlParser.AtomExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code atomExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitAtomExpr(NCIntentIdlParser.AtomExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code multDivModExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterMultDivModExpr(NCIntentIdlParser.MultDivModExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code multDivModExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitMultDivModExpr(NCIntentIdlParser.MultDivModExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code andOrExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterAndOrExpr(NCIntentIdlParser.AndOrExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code andOrExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitAndOrExpr(NCIntentIdlParser.AndOrExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code callExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterCallExpr(NCIntentIdlParser.CallExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code callExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitCallExpr(NCIntentIdlParser.CallExprContext ctx);
+	/**
+	 * Enter a parse tree produced by the {@code eqNeqExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void enterEqNeqExpr(NCIntentIdlParser.EqNeqExprContext ctx);
+	/**
+	 * Exit a parse tree produced by the {@code eqNeqExpr}
+	 * labeled alternative in {@link NCIntentIdlParser#expr}.
+	 * @param ctx the parse tree
+	 */
+	void exitEqNeqExpr(NCIntentIdlParser.EqNeqExprContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#paramList}.
+	 * @param ctx the parse tree
+	 */
+	void enterParamList(NCIntentIdlParser.ParamListContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#paramList}.
+	 * @param ctx the parse tree
+	 */
+	void exitParamList(NCIntentIdlParser.ParamListContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#atom}.
+	 * @param ctx the parse tree
+	 */
+	void enterAtom(NCIntentIdlParser.AtomContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#atom}.
+	 * @param ctx the parse tree
+	 */
+	void exitAtom(NCIntentIdlParser.AtomContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#qstring}.
+	 * @param ctx the parse tree
+	 */
+	void enterQstring(NCIntentIdlParser.QstringContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#qstring}.
+	 * @param ctx the parse tree
+	 */
+	void exitQstring(NCIntentIdlParser.QstringContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#minMax}.
+	 * @param ctx the parse tree
+	 */
+	void enterMinMax(NCIntentIdlParser.MinMaxContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#minMax}.
+	 * @param ctx the parse tree
+	 */
+	void exitMinMax(NCIntentIdlParser.MinMaxContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#minMaxShortcut}.
+	 * @param ctx the parse tree
+	 */
+	void enterMinMaxShortcut(NCIntentIdlParser.MinMaxShortcutContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#minMaxShortcut}.
+	 * @param ctx the parse tree
+	 */
+	void exitMinMaxShortcut(NCIntentIdlParser.MinMaxShortcutContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#minMaxRange}.
+	 * @param ctx the parse tree
+	 */
+	void enterMinMaxRange(NCIntentIdlParser.MinMaxRangeContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#minMaxRange}.
+	 * @param ctx the parse tree
+	 */
+	void exitMinMaxRange(NCIntentIdlParser.MinMaxRangeContext ctx);
+	/**
+	 * Enter a parse tree produced by {@link NCIntentIdlParser#id}.
+	 * @param ctx the parse tree
+	 */
+	void enterId(NCIntentIdlParser.IdContext ctx);
+	/**
+	 * Exit a parse tree produced by {@link NCIntentIdlParser#id}.
+	 * @param ctx the parse tree
+	 */
+	void exitId(NCIntentIdlParser.IdContext ctx);
+}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlParser.java
new file mode 100644
index 0000000..03c022f
--- /dev/null
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIntentIdlParser.java
@@ -0,0 +1,2797 @@
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4\NCIntentIdl.g4 by ANTLR 4.9.1
+package org.apache.nlpcraft.model.intent.compiler.antlr4;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class NCIntentIdlParser extends Parser {
+	static { RuntimeMetaData.checkVersion("4.9.1", RuntimeMetaData.VERSION); }
+
+	protected static final DFA[] _decisionToDFA;
+	protected static final PredictionContextCache _sharedContextCache =
+		new PredictionContextCache();
+	public static final int
+		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, FUN_NAME=7, FRAG=8, SQSTRING=9, 
+		DQSTRING=10, BOOL=11, NULL=12, EQ=13, NEQ=14, GTEQ=15, LTEQ=16, GT=17, 
+		LT=18, AND=19, OR=20, VERT=21, NOT=22, LPAR=23, RPAR=24, LBRACE=25, RBRACE=26, 
+		SQUOTE=27, DQUOTE=28, TILDA=29, LBR=30, RBR=31, POUND=32, COMMA=33, COLON=34, 
+		MINUS=35, DOT=36, UNDERSCORE=37, ASSIGN=38, PLUS=39, QUESTION=40, MULT=41, 
+		DIV=42, MOD=43, DOLLAR=44, INT=45, REAL=46, EXP=47, ID=48, COMMENT=49, 
+		WS=50, ErrorChar=51;
+	public static final int
+		RULE_idl = 0, RULE_synonym = 1, RULE_alias = 2, RULE_idlItems = 3, RULE_idlItem = 4, 
+		RULE_imp = 5, RULE_frag = 6, RULE_fragId = 7, RULE_fragRef = 8, RULE_fragMeta = 9, 
+		RULE_intent = 10, RULE_intentId = 11, RULE_orderedDecl = 12, RULE_mtdDecl = 13, 
+		RULE_flowDecl = 14, RULE_metaDecl = 15, RULE_jsonObj = 16, RULE_jsonPair = 17, 
+		RULE_jsonVal = 18, RULE_jsonArr = 19, RULE_terms = 20, RULE_termItem = 21, 
+		RULE_termEq = 22, RULE_term = 23, RULE_mtdRef = 24, RULE_javaFqn = 25, 
+		RULE_termId = 26, RULE_expr = 27, RULE_paramList = 28, RULE_atom = 29, 
+		RULE_qstring = 30, RULE_minMax = 31, RULE_minMaxShortcut = 32, RULE_minMaxRange = 33, 
+		RULE_id = 34;
+	private static String[] makeRuleNames() {
+		return new String[] {
+			"idl", "synonym", "alias", "idlItems", "idlItem", "imp", "frag", "fragId", 
+			"fragRef", "fragMeta", "intent", "intentId", "orderedDecl", "mtdDecl", 
+			"flowDecl", "metaDecl", "jsonObj", "jsonPair", "jsonVal", "jsonArr", 
+			"terms", "termItem", "termEq", "term", "mtdRef", "javaFqn", "termId", 
+			"expr", "paramList", "atom", "qstring", "minMax", "minMaxShortcut", "minMaxRange", 
+			"id"
+		};
+	}
+	public static final String[] ruleNames = makeRuleNames();
+
+	private static String[] makeLiteralNames() {
+		return new String[] {
+			null, "'import'", "'intent'", "'ordered'", "'flow'", "'meta'", "'term'", 
+			null, "'fragment'", null, null, null, "'null'", "'=='", "'!='", "'>='", 
+			"'<='", "'>'", "'<'", "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", 
+			"'}'", "'''", "'\"'", "'~'", "'['", "']'", "'#'", "','", "':'", "'-'", 
+			"'.'", "'_'", "'='", "'+'", "'?'", "'*'", "'/'", "'%'", "'$'"
+		};
+	}
+	private static final String[] _LITERAL_NAMES = makeLiteralNames();
+	private static String[] makeSymbolicNames() {
+		return new String[] {
+			null, null, null, null, null, null, null, "FUN_NAME", "FRAG", "SQSTRING", 
+			"DQSTRING", "BOOL", "NULL", "EQ", "NEQ", "GTEQ", "LTEQ", "GT", "LT", 
+			"AND", "OR", "VERT", "NOT", "LPAR", "RPAR", "LBRACE", "RBRACE", "SQUOTE", 
+			"DQUOTE", "TILDA", "LBR", "RBR", "POUND", "COMMA", "COLON", "MINUS", 
+			"DOT", "UNDERSCORE", "ASSIGN", "PLUS", "QUESTION", "MULT", "DIV", "MOD", 
+			"DOLLAR", "INT", "REAL", "EXP", "ID", "COMMENT", "WS", "ErrorChar"
+		};
+	}
+	private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+	/**
+	 * @deprecated Use {@link #VOCABULARY} instead.
+	 */
+	@Deprecated
+	public static final String[] tokenNames;
+	static {
+		tokenNames = new String[_SYMBOLIC_NAMES.length];
+		for (int i = 0; i < tokenNames.length; i++) {
+			tokenNames[i] = VOCABULARY.getLiteralName(i);
+			if (tokenNames[i] == null) {
+				tokenNames[i] = VOCABULARY.getSymbolicName(i);
+			}
+
+			if (tokenNames[i] == null) {
+				tokenNames[i] = "<INVALID>";
+			}
+		}
+	}
+
+	@Override
+	@Deprecated
+	public String[] getTokenNames() {
+		return tokenNames;
+	}
+
+	@Override
+
+	public Vocabulary getVocabulary() {
+		return VOCABULARY;
+	}
+
+	@Override
+	public String getGrammarFileName() { return "NCIntentIdl.g4"; }
+
+	@Override
+	public String[] getRuleNames() { return ruleNames; }
+
+	@Override
+	public String getSerializedATN() { return _serializedATN; }
+
+	@Override
+	public ATN getATN() { return _ATN; }
+
+	public NCIntentIdlParser(TokenStream input) {
+		super(input);
+		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+	}
+
+	public static class IdlContext extends ParserRuleContext {
+		public IdlItemsContext idlItems() {
+			return getRuleContext(IdlItemsContext.class,0);
+		}
+		public TerminalNode EOF() { return getToken(NCIntentIdlParser.EOF, 0); }
+		public IdlContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_idl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterIdl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitIdl(this);
+		}
+	}
+
+	public final IdlContext idl() throws RecognitionException {
+		IdlContext _localctx = new IdlContext(_ctx, getState());
+		enterRule(_localctx, 0, RULE_idl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(70);
+			idlItems(0);
+			setState(71);
+			match(EOF);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class SynonymContext extends ParserRuleContext {
+		public TerminalNode LBRACE() { return getToken(NCIntentIdlParser.LBRACE, 0); }
+		public ExprContext expr() {
+			return getRuleContext(ExprContext.class,0);
+		}
+		public TerminalNode RBRACE() { return getToken(NCIntentIdlParser.RBRACE, 0); }
+		public TerminalNode EOF() { return getToken(NCIntentIdlParser.EOF, 0); }
+		public AliasContext alias() {
+			return getRuleContext(AliasContext.class,0);
+		}
+		public SynonymContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_synonym; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterSynonym(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitSynonym(this);
+		}
+	}
+
+	public final SynonymContext synonym() throws RecognitionException {
+		SynonymContext _localctx = new SynonymContext(_ctx, getState());
+		enterRule(_localctx, 2, RULE_synonym);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(74);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==LBR) {
+				{
+				setState(73);
+				alias();
+				}
+			}
+
+			setState(76);
+			match(LBRACE);
+			setState(77);
+			expr(0);
+			setState(78);
+			match(RBRACE);
+			setState(79);
+			match(EOF);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class AliasContext extends ParserRuleContext {
+		public TerminalNode LBR() { return getToken(NCIntentIdlParser.LBR, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public TerminalNode RBR() { return getToken(NCIntentIdlParser.RBR, 0); }
+		public AliasContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_alias; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterAlias(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitAlias(this);
+		}
+	}
+
+	public final AliasContext alias() throws RecognitionException {
+		AliasContext _localctx = new AliasContext(_ctx, getState());
+		enterRule(_localctx, 4, RULE_alias);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(81);
+			match(LBR);
+			setState(82);
+			id();
+			setState(83);
+			match(RBR);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class IdlItemsContext extends ParserRuleContext {
+		public IdlItemContext idlItem() {
+			return getRuleContext(IdlItemContext.class,0);
+		}
+		public IdlItemsContext idlItems() {
+			return getRuleContext(IdlItemsContext.class,0);
+		}
+		public IdlItemsContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_idlItems; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterIdlItems(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitIdlItems(this);
+		}
+	}
+
+	public final IdlItemsContext idlItems() throws RecognitionException {
+		return idlItems(0);
+	}
+
+	private IdlItemsContext idlItems(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		IdlItemsContext _localctx = new IdlItemsContext(_ctx, _parentState);
+		IdlItemsContext _prevctx = _localctx;
+		int _startState = 6;
+		enterRecursionRule(_localctx, 6, RULE_idlItems, _p);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			{
+			setState(86);
+			idlItem();
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(92);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,1,_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 IdlItemsContext(_parentctx, _parentState);
+					pushNewRecursionContext(_localctx, _startState, RULE_idlItems);
+					setState(88);
+					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+					setState(89);
+					idlItem();
+					}
+					} 
+				}
+				setState(94);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,1,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	public static class IdlItemContext extends ParserRuleContext {
+		public IntentContext intent() {
+			return getRuleContext(IntentContext.class,0);
+		}
+		public FragContext frag() {
+			return getRuleContext(FragContext.class,0);
+		}
+		public ImpContext imp() {
+			return getRuleContext(ImpContext.class,0);
+		}
+		public IdlItemContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_idlItem; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterIdlItem(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitIdlItem(this);
+		}
+	}
+
+	public final IdlItemContext idlItem() throws RecognitionException {
+		IdlItemContext _localctx = new IdlItemContext(_ctx, getState());
+		enterRule(_localctx, 8, RULE_idlItem);
+		try {
+			setState(98);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case T__1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(95);
+				intent();
+				}
+				break;
+			case FRAG:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(96);
+				frag();
+				}
+				break;
+			case T__0:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(97);
+				imp();
+				}
+				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 ImpContext extends ParserRuleContext {
+		public TerminalNode LPAR() { return getToken(NCIntentIdlParser.LPAR, 0); }
+		public QstringContext qstring() {
+			return getRuleContext(QstringContext.class,0);
+		}
+		public TerminalNode RPAR() { return getToken(NCIntentIdlParser.RPAR, 0); }
+		public ImpContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_imp; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterImp(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitImp(this);
+		}
+	}
+
+	public final ImpContext imp() throws RecognitionException {
+		ImpContext _localctx = new ImpContext(_ctx, getState());
+		enterRule(_localctx, 10, RULE_imp);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(100);
+			match(T__0);
+			setState(101);
+			match(LPAR);
+			setState(102);
+			qstring();
+			setState(103);
+			match(RPAR);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class FragContext extends ParserRuleContext {
+		public FragIdContext fragId() {
+			return getRuleContext(FragIdContext.class,0);
+		}
+		public TermsContext terms() {
+			return getRuleContext(TermsContext.class,0);
+		}
+		public FragContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_frag; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterFrag(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitFrag(this);
+		}
+	}
+
+	public final FragContext frag() throws RecognitionException {
+		FragContext _localctx = new FragContext(_ctx, getState());
+		enterRule(_localctx, 12, RULE_frag);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(105);
+			fragId();
+			setState(106);
+			terms(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class FragIdContext extends ParserRuleContext {
+		public TerminalNode FRAG() { return getToken(NCIntentIdlParser.FRAG, 0); }
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public FragIdContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_fragId; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterFragId(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitFragId(this);
+		}
+	}
+
+	public final FragIdContext fragId() throws RecognitionException {
+		FragIdContext _localctx = new FragIdContext(_ctx, getState());
+		enterRule(_localctx, 14, RULE_fragId);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(108);
+			match(FRAG);
+			setState(109);
+			match(ASSIGN);
+			setState(110);
+			id();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class FragRefContext extends ParserRuleContext {
+		public TerminalNode FRAG() { return getToken(NCIntentIdlParser.FRAG, 0); }
+		public TerminalNode LPAR() { return getToken(NCIntentIdlParser.LPAR, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public TerminalNode RPAR() { return getToken(NCIntentIdlParser.RPAR, 0); }
+		public FragMetaContext fragMeta() {
+			return getRuleContext(FragMetaContext.class,0);
+		}
+		public FragRefContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_fragRef; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterFragRef(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitFragRef(this);
+		}
+	}
+
+	public final FragRefContext fragRef() throws RecognitionException {
+		FragRefContext _localctx = new FragRefContext(_ctx, getState());
+		enterRule(_localctx, 16, RULE_fragRef);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(112);
+			match(FRAG);
+			setState(113);
+			match(LPAR);
+			setState(114);
+			id();
+			setState(116);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==COMMA) {
+				{
+				setState(115);
+				fragMeta();
+				}
+			}
+
+			setState(118);
+			match(RPAR);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class FragMetaContext extends ParserRuleContext {
+		public TerminalNode COMMA() { return getToken(NCIntentIdlParser.COMMA, 0); }
+		public JsonObjContext jsonObj() {
+			return getRuleContext(JsonObjContext.class,0);
+		}
+		public FragMetaContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_fragMeta; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterFragMeta(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitFragMeta(this);
+		}
+	}
+
+	public final FragMetaContext fragMeta() throws RecognitionException {
+		FragMetaContext _localctx = new FragMetaContext(_ctx, getState());
+		enterRule(_localctx, 18, RULE_fragMeta);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(120);
+			match(COMMA);
+			setState(121);
+			jsonObj();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class IntentContext extends ParserRuleContext {
+		public IntentIdContext intentId() {
+			return getRuleContext(IntentIdContext.class,0);
+		}
+		public TermsContext terms() {
+			return getRuleContext(TermsContext.class,0);
+		}
+		public OrderedDeclContext orderedDecl() {
+			return getRuleContext(OrderedDeclContext.class,0);
+		}
+		public FlowDeclContext flowDecl() {
+			return getRuleContext(FlowDeclContext.class,0);
+		}
+		public MetaDeclContext metaDecl() {
+			return getRuleContext(MetaDeclContext.class,0);
+		}
+		public IntentContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_intent; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterIntent(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitIntent(this);
+		}
+	}
+
+	public final IntentContext intent() throws RecognitionException {
+		IntentContext _localctx = new IntentContext(_ctx, getState());
+		enterRule(_localctx, 20, RULE_intent);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(123);
+			intentId();
+			setState(125);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==T__2) {
+				{
+				setState(124);
+				orderedDecl();
+				}
+			}
+
+			setState(128);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==T__3) {
+				{
+				setState(127);
+				flowDecl();
+				}
+			}
+
+			setState(131);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==T__4) {
+				{
+				setState(130);
+				metaDecl();
+				}
+			}
+
+			setState(133);
+			terms(0);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class IntentIdContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public IntentIdContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_intentId; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterIntentId(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitIntentId(this);
+		}
+	}
+
+	public final IntentIdContext intentId() throws RecognitionException {
+		IntentIdContext _localctx = new IntentIdContext(_ctx, getState());
+		enterRule(_localctx, 22, RULE_intentId);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(135);
+			match(T__1);
+			setState(136);
+			match(ASSIGN);
+			setState(137);
+			id();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class OrderedDeclContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public TerminalNode BOOL() { return getToken(NCIntentIdlParser.BOOL, 0); }
+		public OrderedDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_orderedDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterOrderedDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitOrderedDecl(this);
+		}
+	}
+
+	public final OrderedDeclContext orderedDecl() throws RecognitionException {
+		OrderedDeclContext _localctx = new OrderedDeclContext(_ctx, getState());
+		enterRule(_localctx, 24, RULE_orderedDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(139);
+			match(T__2);
+			setState(140);
+			match(ASSIGN);
+			setState(141);
+			match(BOOL);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class MtdDeclContext extends ParserRuleContext {
+		public List<TerminalNode> DIV() { return getTokens(NCIntentIdlParser.DIV); }
+		public TerminalNode DIV(int i) {
+			return getToken(NCIntentIdlParser.DIV, i);
+		}
+		public MtdRefContext mtdRef() {
+			return getRuleContext(MtdRefContext.class,0);
+		}
+		public MtdDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_mtdDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMtdDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMtdDecl(this);
+		}
+	}
+
+	public final MtdDeclContext mtdDecl() throws RecognitionException {
+		MtdDeclContext _localctx = new MtdDeclContext(_ctx, getState());
+		enterRule(_localctx, 26, RULE_mtdDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(143);
+			match(DIV);
+			setState(144);
+			mtdRef();
+			setState(145);
+			match(DIV);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class FlowDeclContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public QstringContext qstring() {
+			return getRuleContext(QstringContext.class,0);
+		}
+		public MtdDeclContext mtdDecl() {
+			return getRuleContext(MtdDeclContext.class,0);
+		}
+		public FlowDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_flowDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterFlowDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitFlowDecl(this);
+		}
+	}
+
+	public final FlowDeclContext flowDecl() throws RecognitionException {
+		FlowDeclContext _localctx = new FlowDeclContext(_ctx, getState());
+		enterRule(_localctx, 28, RULE_flowDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(147);
+			match(T__3);
+			setState(148);
+			match(ASSIGN);
+			setState(151);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case SQSTRING:
+			case DQSTRING:
+				{
+				setState(149);
+				qstring();
+				}
+				break;
+			case DIV:
+				{
+				setState(150);
+				mtdDecl();
+				}
+				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 MetaDeclContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public JsonObjContext jsonObj() {
+			return getRuleContext(JsonObjContext.class,0);
+		}
+		public MetaDeclContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_metaDecl; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMetaDecl(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMetaDecl(this);
+		}
+	}
+
+	public final MetaDeclContext metaDecl() throws RecognitionException {
+		MetaDeclContext _localctx = new MetaDeclContext(_ctx, getState());
+		enterRule(_localctx, 30, RULE_metaDecl);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(153);
+			match(T__4);
+			setState(154);
+			match(ASSIGN);
+			setState(155);
+			jsonObj();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class JsonObjContext extends ParserRuleContext {
+		public TerminalNode LBRACE() { return getToken(NCIntentIdlParser.LBRACE, 0); }
+		public List<JsonPairContext> jsonPair() {
+			return getRuleContexts(JsonPairContext.class);
+		}
+		public JsonPairContext jsonPair(int i) {
+			return getRuleContext(JsonPairContext.class,i);
+		}
+		public TerminalNode RBRACE() { return getToken(NCIntentIdlParser.RBRACE, 0); }
+		public List<TerminalNode> COMMA() { return getTokens(NCIntentIdlParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(NCIntentIdlParser.COMMA, i);
+		}
+		public JsonObjContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_jsonObj; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterJsonObj(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitJsonObj(this);
+		}
+	}
+
+	public final JsonObjContext jsonObj() throws RecognitionException {
+		JsonObjContext _localctx = new JsonObjContext(_ctx, getState());
+		enterRule(_localctx, 32, RULE_jsonObj);
+		int _la;
+		try {
+			setState(170);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(157);
+				match(LBRACE);
+				setState(158);
+				jsonPair();
+				setState(163);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while (_la==COMMA) {
+					{
+					{
+					setState(159);
+					match(COMMA);
+					setState(160);
+					jsonPair();
+					}
+					}
+					setState(165);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(166);
+				match(RBRACE);
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(168);
+				match(LBRACE);
+				setState(169);
+				match(RBRACE);
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class JsonPairContext extends ParserRuleContext {
+		public QstringContext qstring() {
+			return getRuleContext(QstringContext.class,0);
+		}
+		public TerminalNode COLON() { return getToken(NCIntentIdlParser.COLON, 0); }
+		public JsonValContext jsonVal() {
+			return getRuleContext(JsonValContext.class,0);
+		}
+		public JsonPairContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_jsonPair; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterJsonPair(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitJsonPair(this);
+		}
+	}
+
+	public final JsonPairContext jsonPair() throws RecognitionException {
+		JsonPairContext _localctx = new JsonPairContext(_ctx, getState());
+		enterRule(_localctx, 34, RULE_jsonPair);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(172);
+			qstring();
+			setState(173);
+			match(COLON);
+			setState(174);
+			jsonVal();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class JsonValContext extends ParserRuleContext {
+		public QstringContext qstring() {
+			return getRuleContext(QstringContext.class,0);
+		}
+		public TerminalNode INT() { return getToken(NCIntentIdlParser.INT, 0); }
+		public TerminalNode MINUS() { return getToken(NCIntentIdlParser.MINUS, 0); }
+		public TerminalNode REAL() { return getToken(NCIntentIdlParser.REAL, 0); }
+		public TerminalNode EXP() { return getToken(NCIntentIdlParser.EXP, 0); }
+		public JsonObjContext jsonObj() {
+			return getRuleContext(JsonObjContext.class,0);
+		}
+		public JsonArrContext jsonArr() {
+			return getRuleContext(JsonArrContext.class,0);
+		}
+		public TerminalNode BOOL() { return getToken(NCIntentIdlParser.BOOL, 0); }
+		public TerminalNode NULL() { return getToken(NCIntentIdlParser.NULL, 0); }
+		public JsonValContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_jsonVal; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterJsonVal(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitJsonVal(this);
+		}
+	}
+
+	public final JsonValContext jsonVal() throws RecognitionException {
+		JsonValContext _localctx = new JsonValContext(_ctx, getState());
+		enterRule(_localctx, 36, RULE_jsonVal);
+		int _la;
+		try {
+			setState(191);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case SQSTRING:
+			case DQSTRING:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(176);
+				qstring();
+				}
+				break;
+			case MINUS:
+			case INT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(178);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==MINUS) {
+					{
+					setState(177);
+					match(MINUS);
+					}
+				}
+
+				setState(180);
+				match(INT);
+				setState(182);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==REAL) {
+					{
+					setState(181);
+					match(REAL);
+					}
+				}
+
+				setState(185);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				if (_la==EXP) {
+					{
+					setState(184);
+					match(EXP);
+					}
+				}
+
+				}
+				break;
+			case LBRACE:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(187);
+				jsonObj();
+				}
+				break;
+			case LBR:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(188);
+				jsonArr();
+				}
+				break;
+			case BOOL:
+				enterOuterAlt(_localctx, 5);
+				{
+				setState(189);
+				match(BOOL);
+				}
+				break;
+			case NULL:
+				enterOuterAlt(_localctx, 6);
+				{
+				setState(190);
+				match(NULL);
+				}
+				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 JsonArrContext extends ParserRuleContext {
+		public TerminalNode LBR() { return getToken(NCIntentIdlParser.LBR, 0); }
+		public List<JsonValContext> jsonVal() {
+			return getRuleContexts(JsonValContext.class);
+		}
+		public JsonValContext jsonVal(int i) {
+			return getRuleContext(JsonValContext.class,i);
+		}
+		public TerminalNode RBR() { return getToken(NCIntentIdlParser.RBR, 0); }
+		public List<TerminalNode> COMMA() { return getTokens(NCIntentIdlParser.COMMA); }
+		public TerminalNode COMMA(int i) {
+			return getToken(NCIntentIdlParser.COMMA, i);
+		}
+		public JsonArrContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_jsonArr; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterJsonArr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitJsonArr(this);
+		}
+	}
+
+	public final JsonArrContext jsonArr() throws RecognitionException {
+		JsonArrContext _localctx = new JsonArrContext(_ctx, getState());
+		enterRule(_localctx, 38, RULE_jsonArr);
+		int _la;
+		try {
+			setState(206);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
+			case 1:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(193);
+				match(LBR);
+				setState(194);
+				jsonVal();
+				setState(199);
+				_errHandler.sync(this);
+				_la = _input.LA(1);
+				while (_la==COMMA) {
+					{
+					{
+					setState(195);
+					match(COMMA);
+					setState(196);
+					jsonVal();
+					}
+					}
+					setState(201);
+					_errHandler.sync(this);
+					_la = _input.LA(1);
+				}
+				setState(202);
+				match(RBR);
+				}
+				break;
+			case 2:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(204);
+				match(LBR);
+				setState(205);
+				match(RBR);
+				}
+				break;
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class TermsContext extends ParserRuleContext {
+		public TermItemContext termItem() {
+			return getRuleContext(TermItemContext.class,0);
+		}
+		public TermsContext terms() {
+			return getRuleContext(TermsContext.class,0);
+		}
+		public TermsContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_terms; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterTerms(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitTerms(this);
+		}
+	}
+
+	public final TermsContext terms() throws RecognitionException {
+		return terms(0);
+	}
+
+	private TermsContext terms(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		TermsContext _localctx = new TermsContext(_ctx, _parentState);
+		TermsContext _prevctx = _localctx;
+		int _startState = 40;
+		enterRecursionRule(_localctx, 40, RULE_terms, _p);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			{
+			setState(209);
+			termItem();
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(215);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,16,_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 TermsContext(_parentctx, _parentState);
+					pushNewRecursionContext(_localctx, _startState, RULE_terms);
+					setState(211);
+					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+					setState(212);
+					termItem();
+					}
+					} 
+				}
+				setState(217);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	public static class TermItemContext extends ParserRuleContext {
+		public TermContext term() {
+			return getRuleContext(TermContext.class,0);
+		}
+		public FragRefContext fragRef() {
+			return getRuleContext(FragRefContext.class,0);
+		}
+		public TermItemContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_termItem; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterTermItem(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitTermItem(this);
+		}
+	}
+
+	public final TermItemContext termItem() throws RecognitionException {
+		TermItemContext _localctx = new TermItemContext(_ctx, getState());
+		enterRule(_localctx, 42, RULE_termItem);
+		try {
+			setState(220);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case T__5:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(218);
+				term();
+				}
+				break;
+			case FRAG:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(219);
+				fragRef();
+				}
+				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 TermEqContext extends ParserRuleContext {
+		public TerminalNode ASSIGN() { return getToken(NCIntentIdlParser.ASSIGN, 0); }
+		public TerminalNode TILDA() { return getToken(NCIntentIdlParser.TILDA, 0); }
+		public TermEqContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_termEq; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterTermEq(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitTermEq(this);
+		}
+	}
+
+	public final TermEqContext termEq() throws RecognitionException {
+		TermEqContext _localctx = new TermEqContext(_ctx, getState());
+		enterRule(_localctx, 44, RULE_termEq);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(222);
+			_la = _input.LA(1);
+			if ( !(_la==TILDA || _la==ASSIGN) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class TermContext extends ParserRuleContext {
+		public TermEqContext termEq() {
+			return getRuleContext(TermEqContext.class,0);
+		}
+		public MtdDeclContext mtdDecl() {
+			return getRuleContext(MtdDeclContext.class,0);
+		}
+		public TermIdContext termId() {
+			return getRuleContext(TermIdContext.class,0);
+		}
+		public MinMaxContext minMax() {
+			return getRuleContext(MinMaxContext.class,0);
+		}
+		public TerminalNode LBRACE() { return getToken(NCIntentIdlParser.LBRACE, 0); }
+		public ExprContext expr() {
+			return getRuleContext(ExprContext.class,0);
+		}
+		public TerminalNode RBRACE() { return getToken(NCIntentIdlParser.RBRACE, 0); }
+		public TermContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_term; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterTerm(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitTerm(this);
+		}
+	}
+
+	public final TermContext term() throws RecognitionException {
+		TermContext _localctx = new TermContext(_ctx, getState());
+		enterRule(_localctx, 46, RULE_term);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(224);
+			match(T__5);
+			setState(226);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==LPAR) {
+				{
+				setState(225);
+				termId();
+				}
+			}
+
+			setState(228);
+			termEq();
+			setState(234);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case LBRACE:
+				{
+				{
+				setState(229);
+				match(LBRACE);
+				setState(230);
+				expr(0);
+				setState(231);
+				match(RBRACE);
+				}
+				}
+				break;
+			case DIV:
+				{
+				setState(233);
+				mtdDecl();
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			setState(237);
+			_errHandler.sync(this);
+			switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
+			case 1:
+				{
+				setState(236);
+				minMax();
+				}
+				break;
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class MtdRefContext extends ParserRuleContext {
+		public TerminalNode POUND() { return getToken(NCIntentIdlParser.POUND, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public JavaFqnContext javaFqn() {
+			return getRuleContext(JavaFqnContext.class,0);
+		}
+		public MtdRefContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_mtdRef; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMtdRef(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMtdRef(this);
+		}
+	}
+
+	public final MtdRefContext mtdRef() throws RecognitionException {
+		MtdRefContext _localctx = new MtdRefContext(_ctx, getState());
+		enterRule(_localctx, 48, RULE_mtdRef);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(240);
+			_errHandler.sync(this);
+			_la = _input.LA(1);
+			if (_la==FUN_NAME || _la==ID) {
+				{
+				setState(239);
+				javaFqn(0);
+				}
+			}
+
+			setState(242);
+			match(POUND);
+			setState(243);
+			id();
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class JavaFqnContext extends ParserRuleContext {
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public JavaFqnContext javaFqn() {
+			return getRuleContext(JavaFqnContext.class,0);
+		}
+		public TerminalNode DOT() { return getToken(NCIntentIdlParser.DOT, 0); }
+		public JavaFqnContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_javaFqn; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterJavaFqn(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitJavaFqn(this);
+		}
+	}
+
+	public final JavaFqnContext javaFqn() throws RecognitionException {
+		return javaFqn(0);
+	}
+
+	private JavaFqnContext javaFqn(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		JavaFqnContext _localctx = new JavaFqnContext(_ctx, _parentState);
+		JavaFqnContext _prevctx = _localctx;
+		int _startState = 50;
+		enterRecursionRule(_localctx, 50, RULE_javaFqn, _p);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			{
+			setState(246);
+			id();
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(253);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,22,_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 JavaFqnContext(_parentctx, _parentState);
+					pushNewRecursionContext(_localctx, _startState, RULE_javaFqn);
+					setState(248);
+					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+					setState(249);
+					match(DOT);
+					setState(250);
+					id();
+					}
+					} 
+				}
+				setState(255);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,22,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	public static class TermIdContext extends ParserRuleContext {
+		public TerminalNode LPAR() { return getToken(NCIntentIdlParser.LPAR, 0); }
+		public IdContext id() {
+			return getRuleContext(IdContext.class,0);
+		}
+		public TerminalNode RPAR() { return getToken(NCIntentIdlParser.RPAR, 0); }
+		public TermIdContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_termId; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterTermId(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitTermId(this);
+		}
+	}
+
+	public final TermIdContext termId() throws RecognitionException {
+		TermIdContext _localctx = new TermIdContext(_ctx, getState());
+		enterRule(_localctx, 52, RULE_termId);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(256);
+			match(LPAR);
+			setState(257);
+			id();
+			setState(258);
+			match(RPAR);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class ExprContext extends ParserRuleContext {
+		public ExprContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_expr; }
+	 
+		public ExprContext() { }
+		public void copyFrom(ExprContext ctx) {
+			super.copyFrom(ctx);
+		}
+	}
+	public static class ParExprContext extends ExprContext {
+		public TerminalNode LPAR() { return getToken(NCIntentIdlParser.LPAR, 0); }
+		public ExprContext expr() {
+			return getRuleContext(ExprContext.class,0);
+		}
+		public TerminalNode RPAR() { return getToken(NCIntentIdlParser.RPAR, 0); }
+		public ParExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterParExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitParExpr(this);
+		}
+	}
+	public static class UnaryExprContext extends ExprContext {
+		public Token op;
+		public ExprContext expr() {
+			return getRuleContext(ExprContext.class,0);
+		}
+		public TerminalNode MINUS() { return getToken(NCIntentIdlParser.MINUS, 0); }
+		public TerminalNode NOT() { return getToken(NCIntentIdlParser.NOT, 0); }
+		public UnaryExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterUnaryExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitUnaryExpr(this);
+		}
+	}
+	public static class CompExprContext extends ExprContext {
+		public Token op;
+		public List<ExprContext> expr() {
+			return getRuleContexts(ExprContext.class);
+		}
+		public ExprContext expr(int i) {
+			return getRuleContext(ExprContext.class,i);
+		}
+		public TerminalNode LTEQ() { return getToken(NCIntentIdlParser.LTEQ, 0); }
+		public TerminalNode GTEQ() { return getToken(NCIntentIdlParser.GTEQ, 0); }
+		public TerminalNode LT() { return getToken(NCIntentIdlParser.LT, 0); }
+		public TerminalNode GT() { return getToken(NCIntentIdlParser.GT, 0); }
+		public CompExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterCompExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitCompExpr(this);
+		}
+	}
+	public static class PlusMinusExprContext extends ExprContext {
+		public Token op;
+		public List<ExprContext> expr() {
+			return getRuleContexts(ExprContext.class);
+		}
+		public ExprContext expr(int i) {
+			return getRuleContext(ExprContext.class,i);
+		}
+		public TerminalNode PLUS() { return getToken(NCIntentIdlParser.PLUS, 0); }
+		public TerminalNode MINUS() { return getToken(NCIntentIdlParser.MINUS, 0); }
+		public PlusMinusExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterPlusMinusExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitPlusMinusExpr(this);
+		}
+	}
+	public static class AtomExprContext extends ExprContext {
+		public AtomContext atom() {
+			return getRuleContext(AtomContext.class,0);
+		}
+		public AtomExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterAtomExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitAtomExpr(this);
+		}
+	}
+	public static class MultDivModExprContext extends ExprContext {
+		public Token op;
+		public List<ExprContext> expr() {
+			return getRuleContexts(ExprContext.class);
+		}
+		public ExprContext expr(int i) {
+			return getRuleContext(ExprContext.class,i);
+		}
+		public TerminalNode MULT() { return getToken(NCIntentIdlParser.MULT, 0); }
+		public TerminalNode DIV() { return getToken(NCIntentIdlParser.DIV, 0); }
+		public TerminalNode MOD() { return getToken(NCIntentIdlParser.MOD, 0); }
+		public MultDivModExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMultDivModExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMultDivModExpr(this);
+		}
+	}
+	public static class AndOrExprContext extends ExprContext {
+		public Token op;
+		public List<ExprContext> expr() {
+			return getRuleContexts(ExprContext.class);
+		}
+		public ExprContext expr(int i) {
+			return getRuleContext(ExprContext.class,i);
+		}
+		public TerminalNode AND() { return getToken(NCIntentIdlParser.AND, 0); }
+		public TerminalNode OR() { return getToken(NCIntentIdlParser.OR, 0); }
+		public AndOrExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterAndOrExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitAndOrExpr(this);
+		}
+	}
+	public static class CallExprContext extends ExprContext {
+		public TerminalNode FUN_NAME() { return getToken(NCIntentIdlParser.FUN_NAME, 0); }
+		public TerminalNode LPAR() { return getToken(NCIntentIdlParser.LPAR, 0); }
+		public TerminalNode RPAR() { return getToken(NCIntentIdlParser.RPAR, 0); }
+		public ParamListContext paramList() {
+			return getRuleContext(ParamListContext.class,0);
+		}
+		public CallExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterCallExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitCallExpr(this);
+		}
+	}
+	public static class EqNeqExprContext extends ExprContext {
+		public Token op;
+		public List<ExprContext> expr() {
+			return getRuleContexts(ExprContext.class);
+		}
+		public ExprContext expr(int i) {
+			return getRuleContext(ExprContext.class,i);
+		}
+		public TerminalNode EQ() { return getToken(NCIntentIdlParser.EQ, 0); }
+		public TerminalNode NEQ() { return getToken(NCIntentIdlParser.NEQ, 0); }
+		public EqNeqExprContext(ExprContext ctx) { copyFrom(ctx); }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterEqNeqExpr(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitEqNeqExpr(this);
+		}
+	}
+
+	public final ExprContext expr() throws RecognitionException {
+		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 = 54;
+		enterRecursionRule(_localctx, 54, RULE_expr, _p);
+		int _la;
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(274);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case NOT:
+			case MINUS:
+				{
+				_localctx = new UnaryExprContext(_localctx);
+				_ctx = _localctx;
+				_prevctx = _localctx;
+
+				setState(261);
+				((UnaryExprContext)_localctx).op = _input.LT(1);
+				_la = _input.LA(1);
+				if ( !(_la==NOT || _la==MINUS) ) {
+					((UnaryExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+				}
+				else {
+					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+					_errHandler.reportMatch(this);
+					consume();
+				}
+				setState(262);
+				expr(9);
+				}
+				break;
+			case LPAR:
+				{
+				_localctx = new ParExprContext(_localctx);
+				_ctx = _localctx;
+				_prevctx = _localctx;
+				setState(263);
+				match(LPAR);
+				setState(264);
+				expr(0);
+				setState(265);
+				match(RPAR);
+				}
+				break;
+			case SQSTRING:
+			case DQSTRING:
+			case BOOL:
+			case NULL:
+			case INT:
+				{
+				_localctx = new AtomExprContext(_localctx);
+				_ctx = _localctx;
+				_prevctx = _localctx;
+				setState(267);
+				atom();
+				}
+				break;
+			case FUN_NAME:
+				{
+				_localctx = new CallExprContext(_localctx);
+				_ctx = _localctx;
+				_prevctx = _localctx;
+				setState(268);
+				match(FUN_NAME);
+				setState(269);
+				match(LPAR);
+				setState(271);
+				_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 << INT))) != 0)) {
+					{
+					setState(270);
+					paramList(0);
+					}
+				}
+
+				setState(273);
+				match(RPAR);
+				}
+				break;
+			default:
+				throw new NoViableAltException(this);
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(293);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
+				if ( _alt==1 ) {
+					if ( _parseListeners!=null ) triggerExitRuleEvent();
+					_prevctx = _localctx;
+					{
+					setState(291);
+					_errHandler.sync(this);
+					switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
+					case 1:
+						{
+						_localctx = new MultDivModExprContext(new ExprContext(_parentctx, _parentState));
+						pushNewRecursionContext(_localctx, _startState, RULE_expr);
+						setState(276);
+						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
+						setState(277);
+						((MultDivModExprContext)_localctx).op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MULT) | (1L << DIV) | (1L << MOD))) != 0)) ) {
+							((MultDivModExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(278);
+						expr(8);
+						}
+						break;
+					case 2:
+						{
+						_localctx = new PlusMinusExprContext(new ExprContext(_parentctx, _parentState));
+						pushNewRecursionContext(_localctx, _startState, RULE_expr);
+						setState(279);
+						if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
+						setState(280);
+						((PlusMinusExprContext)_localctx).op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(_la==MINUS || _la==PLUS) ) {
+							((PlusMinusExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(281);
+						expr(7);
+						}
+						break;
+					case 3:
+						{
+						_localctx = new CompExprContext(new ExprContext(_parentctx, _parentState));
+						pushNewRecursionContext(_localctx, _startState, RULE_expr);
+						setState(282);
+						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
+						setState(283);
+						((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)) ) {
+							((CompExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(284);
+						expr(6);
+						}
+						break;
+					case 4:
+						{
+						_localctx = new EqNeqExprContext(new ExprContext(_parentctx, _parentState));
+						pushNewRecursionContext(_localctx, _startState, RULE_expr);
+						setState(285);
+						if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
+						setState(286);
+						((EqNeqExprContext)_localctx).op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(_la==EQ || _la==NEQ) ) {
+							((EqNeqExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(287);
+						expr(5);
+						}
+						break;
+					case 5:
+						{
+						_localctx = new AndOrExprContext(new ExprContext(_parentctx, _parentState));
+						pushNewRecursionContext(_localctx, _startState, RULE_expr);
+						setState(288);
+						if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
+						setState(289);
+						((AndOrExprContext)_localctx).op = _input.LT(1);
+						_la = _input.LA(1);
+						if ( !(_la==AND || _la==OR) ) {
+							((AndOrExprContext)_localctx).op = (Token)_errHandler.recoverInline(this);
+						}
+						else {
+							if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+							_errHandler.reportMatch(this);
+							consume();
+						}
+						setState(290);
+						expr(4);
+						}
+						break;
+					}
+					} 
+				}
+				setState(295);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,26,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	public static class ParamListContext extends ParserRuleContext {
+		public ExprContext expr() {
+			return getRuleContext(ExprContext.class,0);
+		}
+		public ParamListContext paramList() {
+			return getRuleContext(ParamListContext.class,0);
+		}
+		public TerminalNode COMMA() { return getToken(NCIntentIdlParser.COMMA, 0); }
+		public ParamListContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_paramList; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterParamList(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitParamList(this);
+		}
+	}
+
+	public final ParamListContext paramList() throws RecognitionException {
+		return paramList(0);
+	}
+
+	private ParamListContext paramList(int _p) throws RecognitionException {
+		ParserRuleContext _parentctx = _ctx;
+		int _parentState = getState();
+		ParamListContext _localctx = new ParamListContext(_ctx, _parentState);
+		ParamListContext _prevctx = _localctx;
+		int _startState = 56;
+		enterRecursionRule(_localctx, 56, RULE_paramList, _p);
+		try {
+			int _alt;
+			enterOuterAlt(_localctx, 1);
+			{
+			{
+			setState(297);
+			expr(0);
+			}
+			_ctx.stop = _input.LT(-1);
+			setState(304);
+			_errHandler.sync(this);
+			_alt = getInterpreter().adaptivePredict(_input,27,_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 ParamListContext(_parentctx, _parentState);
+					pushNewRecursionContext(_localctx, _startState, RULE_paramList);
+					setState(299);
+					if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
+					setState(300);
+					match(COMMA);
+					setState(301);
+					expr(0);
+					}
+					} 
+				}
+				setState(306);
+				_errHandler.sync(this);
+				_alt = getInterpreter().adaptivePredict(_input,27,_ctx);
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			unrollRecursionContexts(_parentctx);
+		}
+		return _localctx;
+	}
+
+	public static class AtomContext extends ParserRuleContext {
+		public TerminalNode NULL() { return getToken(NCIntentIdlParser.NULL, 0); }
+		public TerminalNode INT() { return getToken(NCIntentIdlParser.INT, 0); }
+		public TerminalNode REAL() { return getToken(NCIntentIdlParser.REAL, 0); }
+		public TerminalNode EXP() { return getToken(NCIntentIdlParser.EXP, 0); }
+		public TerminalNode BOOL() { return getToken(NCIntentIdlParser.BOOL, 0); }
+		public QstringContext qstring() {
+			return getRuleContext(QstringContext.class,0);
+		}
+		public AtomContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_atom; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterAtom(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitAtom(this);
+		}
+	}
+
+	public final AtomContext atom() throws RecognitionException {
+		AtomContext _localctx = new AtomContext(_ctx, getState());
+		enterRule(_localctx, 58, RULE_atom);
+		try {
+			setState(317);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case NULL:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(307);
+				match(NULL);
+				}
+				break;
+			case INT:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(308);
+				match(INT);
+				setState(310);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
+				case 1:
+					{
+					setState(309);
+					match(REAL);
+					}
+					break;
+				}
+				setState(313);
+				_errHandler.sync(this);
+				switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
+				case 1:
+					{
+					setState(312);
+					match(EXP);
+					}
+					break;
+				}
+				}
+				break;
+			case BOOL:
+				enterOuterAlt(_localctx, 3);
+				{
+				setState(315);
+				match(BOOL);
+				}
+				break;
+			case SQSTRING:
+			case DQSTRING:
+				enterOuterAlt(_localctx, 4);
+				{
+				setState(316);
+				qstring();
+				}
+				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 QstringContext extends ParserRuleContext {
+		public TerminalNode SQSTRING() { return getToken(NCIntentIdlParser.SQSTRING, 0); }
+		public TerminalNode DQSTRING() { return getToken(NCIntentIdlParser.DQSTRING, 0); }
+		public QstringContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_qstring; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterQstring(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitQstring(this);
+		}
+	}
+
+	public final QstringContext qstring() throws RecognitionException {
+		QstringContext _localctx = new QstringContext(_ctx, getState());
+		enterRule(_localctx, 60, RULE_qstring);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(319);
+			_la = _input.LA(1);
+			if ( !(_la==SQSTRING || _la==DQSTRING) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class MinMaxContext extends ParserRuleContext {
+		public MinMaxShortcutContext minMaxShortcut() {
+			return getRuleContext(MinMaxShortcutContext.class,0);
+		}
+		public MinMaxRangeContext minMaxRange() {
+			return getRuleContext(MinMaxRangeContext.class,0);
+		}
+		public MinMaxContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_minMax; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMinMax(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMinMax(this);
+		}
+	}
+
+	public final MinMaxContext minMax() throws RecognitionException {
+		MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
+		enterRule(_localctx, 62, RULE_minMax);
+		try {
+			setState(323);
+			_errHandler.sync(this);
+			switch (_input.LA(1)) {
+			case PLUS:
+			case QUESTION:
+			case MULT:
+				enterOuterAlt(_localctx, 1);
+				{
+				setState(321);
+				minMaxShortcut();
+				}
+				break;
+			case LBR:
+				enterOuterAlt(_localctx, 2);
+				{
+				setState(322);
+				minMaxRange();
+				}
+				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 MinMaxShortcutContext extends ParserRuleContext {
+		public TerminalNode PLUS() { return getToken(NCIntentIdlParser.PLUS, 0); }
+		public TerminalNode QUESTION() { return getToken(NCIntentIdlParser.QUESTION, 0); }
+		public TerminalNode MULT() { return getToken(NCIntentIdlParser.MULT, 0); }
+		public MinMaxShortcutContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_minMaxShortcut; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMinMaxShortcut(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMinMaxShortcut(this);
+		}
+	}
+
+	public final MinMaxShortcutContext minMaxShortcut() throws RecognitionException {
+		MinMaxShortcutContext _localctx = new MinMaxShortcutContext(_ctx, getState());
+		enterRule(_localctx, 64, RULE_minMaxShortcut);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(325);
+			_la = _input.LA(1);
+			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << QUESTION) | (1L << MULT))) != 0)) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class MinMaxRangeContext extends ParserRuleContext {
+		public TerminalNode LBR() { return getToken(NCIntentIdlParser.LBR, 0); }
+		public List<TerminalNode> INT() { return getTokens(NCIntentIdlParser.INT); }
+		public TerminalNode INT(int i) {
+			return getToken(NCIntentIdlParser.INT, i);
+		}
+		public TerminalNode COMMA() { return getToken(NCIntentIdlParser.COMMA, 0); }
+		public TerminalNode RBR() { return getToken(NCIntentIdlParser.RBR, 0); }
+		public MinMaxRangeContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_minMaxRange; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterMinMaxRange(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitMinMaxRange(this);
+		}
+	}
+
+	public final MinMaxRangeContext minMaxRange() throws RecognitionException {
+		MinMaxRangeContext _localctx = new MinMaxRangeContext(_ctx, getState());
+		enterRule(_localctx, 66, RULE_minMaxRange);
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(327);
+			match(LBR);
+			setState(328);
+			match(INT);
+			setState(329);
+			match(COMMA);
+			setState(330);
+			match(INT);
+			setState(331);
+			match(RBR);
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public static class IdContext extends ParserRuleContext {
+		public TerminalNode ID() { return getToken(NCIntentIdlParser.ID, 0); }
+		public TerminalNode FUN_NAME() { return getToken(NCIntentIdlParser.FUN_NAME, 0); }
+		public IdContext(ParserRuleContext parent, int invokingState) {
+			super(parent, invokingState);
+		}
+		@Override public int getRuleIndex() { return RULE_id; }
+		@Override
+		public void enterRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).enterId(this);
+		}
+		@Override
+		public void exitRule(ParseTreeListener listener) {
+			if ( listener instanceof NCIntentIdlListener ) ((NCIntentIdlListener)listener).exitId(this);
+		}
+	}
+
+	public final IdContext id() throws RecognitionException {
+		IdContext _localctx = new IdContext(_ctx, getState());
+		enterRule(_localctx, 68, RULE_id);
+		int _la;
+		try {
+			enterOuterAlt(_localctx, 1);
+			{
+			setState(333);
+			_la = _input.LA(1);
+			if ( !(_la==FUN_NAME || _la==ID) ) {
+			_errHandler.recoverInline(this);
+			}
+			else {
+				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+				_errHandler.reportMatch(this);
+				consume();
+			}
+			}
+		}
+		catch (RecognitionException re) {
+			_localctx.exception = re;
+			_errHandler.reportError(this, re);
+			_errHandler.recover(this, re);
+		}
+		finally {
+			exitRule();
+		}
+		return _localctx;
+	}
+
+	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
+		switch (ruleIndex) {
+		case 3:
+			return idlItems_sempred((IdlItemsContext)_localctx, predIndex);
+		case 20:
+			return terms_sempred((TermsContext)_localctx, predIndex);
+		case 25:
+			return javaFqn_sempred((JavaFqnContext)_localctx, predIndex);
+		case 27:
+			return expr_sempred((ExprContext)_localctx, predIndex);
+		case 28:
+			return paramList_sempred((ParamListContext)_localctx, predIndex);
+		}
+		return true;
+	}
+	private boolean idlItems_sempred(IdlItemsContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 0:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+	private boolean terms_sempred(TermsContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 1:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+	private boolean javaFqn_sempred(JavaFqnContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 2:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+	private boolean expr_sempred(ExprContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 3:
+			return precpred(_ctx, 7);
+		case 4:
+			return precpred(_ctx, 6);
+		case 5:
+			return precpred(_ctx, 5);
+		case 6:
+			return precpred(_ctx, 4);
+		case 7:
+			return precpred(_ctx, 3);
+		}
+		return true;
+	}
+	private boolean paramList_sempred(ParamListContext _localctx, int predIndex) {
+		switch (predIndex) {
+		case 8:
+			return precpred(_ctx, 1);
+		}
+		return true;
+	}
+
+	public static final String _serializedATN =
+		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\65\u0152\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\3\5\3M\n\3\3\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]\n\5\f\5\16\5`\13\5\3\6\3\6\3\6"+
+		"\5\6e\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\nw\n\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\5\f\u0080\n\f\3\f\5\f\u0083"+
+		"\n\f\3\f\5\f\u0086\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\u009a\n\20\3\21\3\21\3\21\3\21"+
+		"\3\22\3\22\3\22\3\22\7\22\u00a4\n\22\f\22\16\22\u00a7\13\22\3\22\3\22"+
+		"\3\22\3\22\5\22\u00ad\n\22\3\23\3\23\3\23\3\23\3\24\3\24\5\24\u00b5\n"+
+		"\24\3\24\3\24\5\24\u00b9\n\24\3\24\5\24\u00bc\n\24\3\24\3\24\3\24\3\24"+
+		"\5\24\u00c2\n\24\3\25\3\25\3\25\3\25\7\25\u00c8\n\25\f\25\16\25\u00cb"+
+		"\13\25\3\25\3\25\3\25\3\25\5\25\u00d1\n\25\3\26\3\26\3\26\3\26\3\26\7"+
+		"\26\u00d8\n\26\f\26\16\26\u00db\13\26\3\27\3\27\5\27\u00df\n\27\3\30\3"+
+		"\30\3\31\3\31\5\31\u00e5\n\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u00ed"+
+		"\n\31\3\31\5\31\u00f0\n\31\3\32\5\32\u00f3\n\32\3\32\3\32\3\32\3\33\3"+
+		"\33\3\33\3\33\3\33\3\33\7\33\u00fe\n\33\f\33\16\33\u0101\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\u0112\n\35\3\35\5\35\u0115\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\u0126\n\35\f\35\16\35\u0129"+
+		"\13\35\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u0131\n\36\f\36\16\36\u0134"+
+		"\13\36\3\37\3\37\3\37\5\37\u0139\n\37\3\37\5\37\u013c\n\37\3\37\3\37\5"+
+		"\37\u0140\n\37\3 \3 \3!\3!\5!\u0146\n!\3\"\3\"\3#\3#\3#\3#\3#\3#\3$\3"+
+		"$\3$\2\7\b*\648:%\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+
+		"\64\668:<>@BDF\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\t\t\62\62\2\u015a\2H\3\2\2\2\4L\3"+
+		"\2\2\2\6S\3\2\2\2\bW\3\2\2\2\nd\3\2\2\2\ff\3\2\2\2\16k\3\2\2\2\20n\3\2"+
+		"\2\2\22r\3\2\2\2\24z\3\2\2\2\26}\3\2\2\2\30\u0089\3\2\2\2\32\u008d\3\2"+
+		"\2\2\34\u0091\3\2\2\2\36\u0095\3\2\2\2 \u009b\3\2\2\2\"\u00ac\3\2\2\2"+
+		"$\u00ae\3\2\2\2&\u00c1\3\2\2\2(\u00d0\3\2\2\2*\u00d2\3\2\2\2,\u00de\3"+
+		"\2\2\2.\u00e0\3\2\2\2\60\u00e2\3\2\2\2\62\u00f2\3\2\2\2\64\u00f7\3\2\2"+
+		"\2\66\u0102\3\2\2\28\u0114\3\2\2\2:\u012a\3\2\2\2<\u013f\3\2\2\2>\u0141"+
+		"\3\2\2\2@\u0145\3\2\2\2B\u0147\3\2\2\2D\u0149\3\2\2\2F\u014f\3\2\2\2H"+
+		"I\5\b\5\2IJ\7\2\2\3J\3\3\2\2\2KM\5\6\4\2LK\3\2\2\2LM\3\2\2\2MN\3\2\2\2"+
+		"NO\7\33\2\2OP\58\35\2PQ\7\34\2\2QR\7\2\2\3R\5\3\2\2\2ST\7 \2\2TU\5F$\2"+
+		"UV\7!\2\2V\7\3\2\2\2WX\b\5\1\2XY\5\n\6\2Y^\3\2\2\2Z[\f\3\2\2[]\5\n\6\2"+
+		"\\Z\3\2\2\2]`\3\2\2\2^\\\3\2\2\2^_\3\2\2\2_\t\3\2\2\2`^\3\2\2\2ae\5\26"+
+		"\f\2be\5\16\b\2ce\5\f\7\2da\3\2\2\2db\3\2\2\2dc\3\2\2\2e\13\3\2\2\2fg"+
+		"\7\3\2\2gh\7\31\2\2hi\5> \2ij\7\32\2\2j\r\3\2\2\2kl\5\20\t\2lm\5*\26\2"+
+		"m\17\3\2\2\2no\7\n\2\2op\7(\2\2pq\5F$\2q\21\3\2\2\2rs\7\n\2\2st\7\31\2"+
+		"\2tv\5F$\2uw\5\24\13\2vu\3\2\2\2vw\3\2\2\2wx\3\2\2\2xy\7\32\2\2y\23\3"+
+		"\2\2\2z{\7#\2\2{|\5\"\22\2|\25\3\2\2\2}\177\5\30\r\2~\u0080\5\32\16\2"+
+		"\177~\3\2\2\2\177\u0080\3\2\2\2\u0080\u0082\3\2\2\2\u0081\u0083\5\36\20"+
+		"\2\u0082\u0081\3\2\2\2\u0082\u0083\3\2\2\2\u0083\u0085\3\2\2\2\u0084\u0086"+
+		"\5 \21\2\u0085\u0084\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087\3\2\2\2\u0087"+
+		"\u0088\5*\26\2\u0088\27\3\2\2\2\u0089\u008a\7\4\2\2\u008a\u008b\7(\2\2"+
+		"\u008b\u008c\5F$\2\u008c\31\3\2\2\2\u008d\u008e\7\5\2\2\u008e\u008f\7"+
+		"(\2\2\u008f\u0090\7\r\2\2\u0090\33\3\2\2\2\u0091\u0092\7,\2\2\u0092\u0093"+
+		"\5\62\32\2\u0093\u0094\7,\2\2\u0094\35\3\2\2\2\u0095\u0096\7\6\2\2\u0096"+
+		"\u0099\7(\2\2\u0097\u009a\5> \2\u0098\u009a\5\34\17\2\u0099\u0097\3\2"+
+		"\2\2\u0099\u0098\3\2\2\2\u009a\37\3\2\2\2\u009b\u009c\7\7\2\2\u009c\u009d"+
+		"\7(\2\2\u009d\u009e\5\"\22\2\u009e!\3\2\2\2\u009f\u00a0\7\33\2\2\u00a0"+
+		"\u00a5\5$\23\2\u00a1\u00a2\7#\2\2\u00a2\u00a4\5$\23\2\u00a3\u00a1\3\2"+
+		"\2\2\u00a4\u00a7\3\2\2\2\u00a5\u00a3\3\2\2\2\u00a5\u00a6\3\2\2\2\u00a6"+
+		"\u00a8\3\2\2\2\u00a7\u00a5\3\2\2\2\u00a8\u00a9\7\34\2\2\u00a9\u00ad\3"+
+		"\2\2\2\u00aa\u00ab\7\33\2\2\u00ab\u00ad\7\34\2\2\u00ac\u009f\3\2\2\2\u00ac"+
+		"\u00aa\3\2\2\2\u00ad#\3\2\2\2\u00ae\u00af\5> \2\u00af\u00b0\7$\2\2\u00b0"+
+		"\u00b1\5&\24\2\u00b1%\3\2\2\2\u00b2\u00c2\5> \2\u00b3\u00b5\7%\2\2\u00b4"+
+		"\u00b3\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b8\7/"+
+		"\2\2\u00b7\u00b9\7\60\2\2\u00b8\u00b7\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9"+
+		"\u00bb\3\2\2\2\u00ba\u00bc\7\61\2\2\u00bb\u00ba\3\2\2\2\u00bb\u00bc\3"+
+		"\2\2\2\u00bc\u00c2\3\2\2\2\u00bd\u00c2\5\"\22\2\u00be\u00c2\5(\25\2\u00bf"+
+		"\u00c2\7\r\2\2\u00c0\u00c2\7\16\2\2\u00c1\u00b2\3\2\2\2\u00c1\u00b4\3"+
+		"\2\2\2\u00c1\u00bd\3\2\2\2\u00c1\u00be\3\2\2\2\u00c1\u00bf\3\2\2\2\u00c1"+
+		"\u00c0\3\2\2\2\u00c2\'\3\2\2\2\u00c3\u00c4\7 \2\2\u00c4\u00c9\5&\24\2"+
+		"\u00c5\u00c6\7#\2\2\u00c6\u00c8\5&\24\2\u00c7\u00c5\3\2\2\2\u00c8\u00cb"+
+		"\3\2\2\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\3\2\2\2\u00cb"+
+		"\u00c9\3\2\2\2\u00cc\u00cd\7!\2\2\u00cd\u00d1\3\2\2\2\u00ce\u00cf\7 \2"+
+		"\2\u00cf\u00d1\7!\2\2\u00d0\u00c3\3\2\2\2\u00d0\u00ce\3\2\2\2\u00d1)\3"+
+		"\2\2\2\u00d2\u00d3\b\26\1\2\u00d3\u00d4\5,\27\2\u00d4\u00d9\3\2\2\2\u00d5"+
+		"\u00d6\f\3\2\2\u00d6\u00d8\5,\27\2\u00d7\u00d5\3\2\2\2\u00d8\u00db\3\2"+
+		"\2\2\u00d9\u00d7\3\2\2\2\u00d9\u00da\3\2\2\2\u00da+\3\2\2\2\u00db\u00d9"+
+		"\3\2\2\2\u00dc\u00df\5\60\31\2\u00dd\u00df\5\22\n\2\u00de\u00dc\3\2\2"+
+		"\2\u00de\u00dd\3\2\2\2\u00df-\3\2\2\2\u00e0\u00e1\t\2\2\2\u00e1/\3\2\2"+
+		"\2\u00e2\u00e4\7\b\2\2\u00e3\u00e5\5\66\34\2\u00e4\u00e3\3\2\2\2\u00e4"+
+		"\u00e5\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00ec\5.\30\2\u00e7\u00e8\7\33"+
+		"\2\2\u00e8\u00e9\58\35\2\u00e9\u00ea\7\34\2\2\u00ea\u00ed\3\2\2\2\u00eb"+
+		"\u00ed\5\34\17\2\u00ec\u00e7\3\2\2\2\u00ec\u00eb\3\2\2\2\u00ed\u00ef\3"+
+		"\2\2\2\u00ee\u00f0\5@!\2\u00ef\u00ee\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0"+
+		"\61\3\2\2\2\u00f1\u00f3\5\64\33\2\u00f2\u00f1\3\2\2\2\u00f2\u00f3\3\2"+
+		"\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f5\7\"\2\2\u00f5\u00f6\5F$\2\u00f6\63"+
+		"\3\2\2\2\u00f7\u00f8\b\33\1\2\u00f8\u00f9\5F$\2\u00f9\u00ff\3\2\2\2\u00fa"+
+		"\u00fb\f\3\2\2\u00fb\u00fc\7&\2\2\u00fc\u00fe\5F$\2\u00fd\u00fa\3\2\2"+
+		"\2\u00fe\u0101\3\2\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\65"+
+		"\3\2\2\2\u0101\u00ff\3\2\2\2\u0102\u0103\7\31\2\2\u0103\u0104\5F$\2\u0104"+
+		"\u0105\7\32\2\2\u0105\67\3\2\2\2\u0106\u0107\b\35\1\2\u0107\u0108\t\3"+
+		"\2\2\u0108\u0115\58\35\13\u0109\u010a\7\31\2\2\u010a\u010b\58\35\2\u010b"+
+		"\u010c\7\32\2\2\u010c\u0115\3\2\2\2\u010d\u0115\5<\37\2\u010e\u010f\7"+
+		"\t\2\2\u010f\u0111\7\31\2\2\u0110\u0112\5:\36\2\u0111\u0110\3\2\2\2\u0111"+
+		"\u0112\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0115\7\32\2\2\u0114\u0106\3"+
+		"\2\2\2\u0114\u0109\3\2\2\2\u0114\u010d\3\2\2\2\u0114\u010e\3\2\2\2\u0115"+
+		"\u0127\3\2\2\2\u0116\u0117\f\t\2\2\u0117\u0118\t\4\2\2\u0118\u0126\58"+
+		"\35\n\u0119\u011a\f\b\2\2\u011a\u011b\t\5\2\2\u011b\u0126\58\35\t\u011c"+
+		"\u011d\f\7\2\2\u011d\u011e\t\6\2\2\u011e\u0126\58\35\b\u011f\u0120\f\6"+
+		"\2\2\u0120\u0121\t\7\2\2\u0121\u0126\58\35\7\u0122\u0123\f\5\2\2\u0123"+
+		"\u0124\t\b\2\2\u0124\u0126\58\35\6\u0125\u0116\3\2\2\2\u0125\u0119\3\2"+
+		"\2\2\u0125\u011c\3\2\2\2\u0125\u011f\3\2\2\2\u0125\u0122\3\2\2\2\u0126"+
+		"\u0129\3\2\2\2\u0127\u0125\3\2\2\2\u0127\u0128\3\2\2\2\u01289\3\2\2\2"+
+		"\u0129\u0127\3\2\2\2\u012a\u012b\b\36\1\2\u012b\u012c\58\35\2\u012c\u0132"+
+		"\3\2\2\2\u012d\u012e\f\3\2\2\u012e\u012f\7#\2\2\u012f\u0131\58\35\2\u0130"+
+		"\u012d\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133\3\2"+
+		"\2\2\u0133;\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0140\7\16\2\2\u0136\u0138"+
+		"\7/\2\2\u0137\u0139\7\60\2\2\u0138\u0137\3\2\2\2\u0138\u0139\3\2\2\2\u0139"+
+		"\u013b\3\2\2\2\u013a\u013c\7\61\2\2\u013b\u013a\3\2\2\2\u013b\u013c\3"+
+		"\2\2\2\u013c\u0140\3\2\2\2\u013d\u0140\7\r\2\2\u013e\u0140\5> \2\u013f"+
+		"\u0135\3\2\2\2\u013f\u0136\3\2\2\2\u013f\u013d\3\2\2\2\u013f\u013e\3\2"+
+		"\2\2\u0140=\3\2\2\2\u0141\u0142\t\t\2\2\u0142?\3\2\2\2\u0143\u0146\5B"+
+		"\"\2\u0144\u0146\5D#\2\u0145\u0143\3\2\2\2\u0145\u0144\3\2\2\2\u0146A"+
+		"\3\2\2\2\u0147\u0148\t\n\2\2\u0148C\3\2\2\2\u0149\u014a\7 \2\2\u014a\u014b"+
+		"\7/\2\2\u014b\u014c\7#\2\2\u014c\u014d\7/\2\2\u014d\u014e\7!\2\2\u014e"+
+		"E\3\2\2\2\u014f\u0150\t\13\2\2\u0150G\3\2\2\2\"L^dv\177\u0082\u0085\u0099"+
+		"\u00a5\u00ac\u00b4\u00b8\u00bb\u00c1\u00c9\u00d0\u00d9\u00de\u00e4\u00ec"+
+		"\u00ef\u00f2\u00ff\u0111\u0114\u0125\u0127\u0132\u0138\u013b\u013f\u0145";
+	public static final ATN _ATN =
+		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+	static {
+		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+		}
+	}
+}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolver.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolver.scala
index 9cea556..084da88 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolver.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolver.scala
@@ -24,7 +24,7 @@ import org.apache.nlpcraft.common.debug.NCLogHolder
 import org.apache.nlpcraft.common.opencensus.NCOpenCensusTrace
 import org.apache.nlpcraft.common.util.NCUtils
 import org.apache.nlpcraft.model.impl.NCVariantImpl
-import org.apache.nlpcraft.model.intent.NCDslIntent
+import org.apache.nlpcraft.model.intent.NCIdlIntent
 import org.apache.nlpcraft.model.{NCContext, NCIntentMatch, NCIntentSkip, NCModel, NCRejection, NCResult, NCToken, NCVariant}
 import org.apache.nlpcraft.probe.mgrs.dialogflow.NCDialogFlowManager
 
@@ -33,7 +33,7 @@ import scala.collection.JavaConverters._
 /**
  * Front-end for intent solver.
  */
-class NCIntentSolver(intents: List[(NCDslIntent/*Intent*/, NCIntentMatch ⇒ NCResult/*Callback*/)])
+class NCIntentSolver(intents: List[(NCIdlIntent/*Intent*/, NCIntentMatch ⇒ NCResult/*Callback*/)])
     extends LazyLogging with NCOpenCensusTrace {
     class RedoSolver extends RuntimeException
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
index 086d57a..95af661 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/solver/NCIntentSolverEngine.scala
@@ -26,7 +26,7 @@ import org.apache.nlpcraft.model.impl.NCTokenLogger
 import org.apache.nlpcraft.model.{NCContext, NCDialogFlowItem, NCIntentMatch, NCResult, NCToken}
 import org.apache.nlpcraft.probe.mgrs.dialogflow.NCDialogFlowManager
 import org.apache.nlpcraft.model.impl.NCTokenPimp._
-import org.apache.nlpcraft.model.intent.{NCDslContext, NCDslIntent, NCDslTerm}
+import org.apache.nlpcraft.model.intent.{NCIdlContext, NCIdlIntent, NCIdlTerm}
 
 import java.util.function.Function
 import scala.collection.JavaConverters._
@@ -158,7 +158,7 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
      * @param usedTokens
      */
     private case class TermTokensGroup(
-        term: NCDslTerm,
+        term: NCIdlTerm,
         usedTokens: List[UsedToken]
     )
 
@@ -172,7 +172,7 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
     private case class IntentMatch(
         tokenGroups: List[TermTokensGroup],
         weight: Weight,
-        intent: NCDslIntent,
+        intent: NCIdlIntent,
         exactMatch: Boolean
     )
 
@@ -187,7 +187,7 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
     @throws[NCE]
     def solve(
         ctx: NCContext,
-        intents: List[(NCDslIntent /*Intent*/ , NCIntentMatch ⇒ NCResult) /*Callback*/ ],
+        intents: List[(NCIdlIntent /*Intent*/ , NCIntentMatch ⇒ NCResult) /*Callback*/ ],
         logHldr: NCLogHolder
     ): List[NCIntentSolverResult] = {
         case class MatchHolder(
@@ -418,7 +418,7 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
     //noinspection DuplicatedCode
     private def solveIntent(
         ctx: NCContext,
-        intent: NCDslIntent,
+        intent: NCIdlIntent,
         senToks: Seq[UsedToken],
         convToks: Seq[UsedToken],
         varIdx: Int
@@ -491,7 +491,7 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
             
             val x = ctx.getConversation.getMetadata
 
-            val termCtx = NCDslContext(
+            val termCtx = NCIdlContext(
                 intentMeta = intent.meta,
                 convMeta = if (x.isEmpty) Map.empty[String, Object] else x.asScala.toMap[String, Object],
                 req = ctx.getRequest
@@ -599,8 +599,8 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
      */
     @throws[NCE]
     private def solveTerm(
-        term: NCDslTerm,
-        ctx: NCDslContext,
+        term: NCIdlTerm,
+        ctx: NCIdlContext,
         senToks: Seq[UsedToken],
         convToks: Seq[UsedToken]
     ): Option[TermMatch] =
@@ -649,8 +649,8 @@ object NCIntentSolverEngine extends LazyLogging with NCOpenCensusTrace {
      */
     @throws[NCE]
     private def solvePredicate(
-        pred: (NCToken, NCDslContext) ⇒ (Boolean /*Predicate.*/ , Int /*How many times a token was used.*/ ),
-        ctx: NCDslContext,
+        pred: (NCToken, NCIdlContext) ⇒ (Boolean /*Predicate.*/ , Int /*How many times a token was used.*/ ),
+        ctx: NCIdlContext,
         min: Int,
         max: Int,
         senToks: Seq[UsedToken],
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeModel.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeModel.scala
index fec4552..e436e2b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeModel.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeModel.scala
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.probe.mgrs
 
-import org.apache.nlpcraft.model.intent.NCDslIntent
+import org.apache.nlpcraft.model.intent.NCIdlIntent
 import org.apache.nlpcraft.model.intent.solver.NCIntentSolver
 import org.apache.nlpcraft.model.{NCElement, NCModel}
 
@@ -38,7 +38,7 @@ import scala.collection.{Map, Seq}
 case class NCProbeModel(
     model: NCModel,
     solver: NCIntentSolver,
-    intents: Seq[NCDslIntent],
+    intents: Seq[NCIdlIntent],
     synonyms: Map[String /*Element ID*/ , Map[Int /*Synonym length*/ , NCProbeSynonymsWrapper]], // Fast access map.
     synonymsDsl: Map[String /*Element ID*/ , Map[Int /*Synonym length*/ , Seq[NCProbeSynonym]]], // Fast access map.
     addStopWordsStems: Set[String],
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonym.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonym.scala
index 3a89f18..910a27e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonym.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonym.scala
@@ -20,7 +20,7 @@ package org.apache.nlpcraft.probe.mgrs
 import org.apache.nlpcraft.common.nlp.{NCNlpSentenceToken, NCNlpSentenceTokenBuffer}
 import org.apache.nlpcraft.model._
 import org.apache.nlpcraft.probe.mgrs.NCProbeSynonym.NCDslContent
-import org.apache.nlpcraft.model.intent.NCDslContext
+import org.apache.nlpcraft.model.intent.NCIdlContext
 import org.apache.nlpcraft.probe.mgrs.NCProbeSynonymChunkKind._
 
 import scala.collection.mutable.ArrayBuffer
@@ -117,7 +117,7 @@ class NCProbeSynonym(
                             r.matcher(get0(_.origText, _.origText)).matches() || r.matcher(get0(_.normText, _.normText)).matches()
 
                         case DSL ⇒
-                            get0(t ⇒ chunk.dslPred.apply(t, NCDslContext(req = req))._1, _ ⇒ false)
+                            get0(t ⇒ chunk.dslPred.apply(t, NCIdlContext(req = req))._1, _ ⇒ false)
 
                         case _ ⇒ throw new AssertionError()
                     }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonymChunk.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonymChunk.scala
index 07024e2..7d17dc2 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonymChunk.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeSynonymChunk.scala
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.probe.mgrs
 
-import org.apache.nlpcraft.model.intent.NCDslTokenPredicate
+import org.apache.nlpcraft.model.intent.NCIdlTokenPredicate
 import org.apache.nlpcraft.probe.mgrs.NCProbeSynonymChunkKind._
 
 import java.util.regex.Pattern
@@ -39,7 +39,7 @@ case class NCProbeSynonymChunk(
     wordStem: String = null, // Only for kind == TEXT.
     posTag: String = null,
     regex: Pattern = null,
-    dslPred: NCDslTokenPredicate = null
+    dslPred: NCIdlTokenPredicate = null
 ) {
     require(origText != null)
     require(kind != null)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index 17aa194..4add91a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -33,7 +33,7 @@ import org.apache.nlpcraft.common.nlp.core.{NCNlpCoreManager, NCNlpPorterStemmer
 import org.apache.nlpcraft.common.util.NCUtils.{DSL_FIX, REGEX_FIX}
 import org.apache.nlpcraft.model._
 import org.apache.nlpcraft.model.factories.basic.NCBasicModelFactory
-import org.apache.nlpcraft.model.intent.compiler.NCDslCompiler
+import org.apache.nlpcraft.model.intent.compiler.NCIdlCompiler
 import org.apache.nlpcraft.model.intent.solver.NCIntentSolver
 import org.apache.nlpcraft.model.intent._
 import org.apache.nlpcraft.probe.mgrs.NCProbeSynonymChunkKind.{DSL, REGEX, TEXT}
@@ -78,7 +78,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
     )
     
     type Callback = (String /* ID */, Function[NCIntentMatch, NCResult])
-    type Intent = (NCDslIntent, Callback)
+    type Intent = (NCIdlIntent, Callback)
     type Sample = (String/* Intent ID */, Seq[Seq[String]] /* List of list of input samples for that intent. */)
     
     private final val SEPARATORS = Seq('?', ',', '.', '-', '!')
@@ -996,7 +996,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
         // DSL-based synonym.
         else if (startsAndEnds(DSL_FIX, chunk)) {
             val dsl = stripSuffix(DSL_FIX, chunk)
-            val compUnit = NCDslCompiler.compileSynonym(dsl, mdl, mdl.getOrigin)
+            val compUnit = NCIdlCompiler.compileSynonym(dsl, mdl, mdl.getOrigin)
 
             val x = NCProbeSynonymChunk(alias = compUnit.alias.orNull, kind = DSL, origText = chunk, dslPred = compUnit.pred)
 
@@ -1076,7 +1076,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
       * @param intent
       */
     @throws[NCE]
-    private def prepareCallback(mtd: Method, mdl: NCModel, intent: NCDslIntent): Callback = {
+    private def prepareCallback(mtd: Method, mdl: NCModel, intent: NCIdlIntent): Callback = {
         val mdlId = mdl.getId
 
         // Checks method result type.
@@ -1491,7 +1491,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
     @throws[NCE]
     private def scanIntents(mdl: NCModel): Set[Intent] = {
         val mdlId = mdl.getId
-        val intentDecls = mutable.Buffer.empty[NCDslIntent]
+        val intentDecls = mutable.Buffer.empty[NCIdlIntent]
         val intents = mutable.Buffer.empty[Intent]
 
         // First, get intent declarations from the JSON/YAML file, if any.
@@ -1500,7 +1500,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
                 intentDecls ++= adapter
                     .getIntents
                     .asScala
-                    .flatMap(NCDslCompiler.compileIntents(_, mdl, mdl.getOrigin))
+                    .flatMap(NCIdlCompiler.compileIntents(_, mdl, mdl.getOrigin))
 
             case _ ⇒ ()
         }
@@ -1512,7 +1512,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
             try {
                 val cls = Class.forName(mdlCls)
 
-                for (ann ← cls.getAnnotationsByType(CLS_INTENT); intent ← NCDslCompiler.compileIntents(ann.value(), mdl, mdlCls))
+                for (ann ← cls.getAnnotationsByType(CLS_INTENT); intent ← NCIdlCompiler.compileIntents(ann.value(), mdl, mdlCls))
                     if (intentDecls.exists(_.id == intent.id))
                         throw new NCE(s"Duplicate intent ID [" +
                             s"mdlId=$mdlId, " +
@@ -1532,7 +1532,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
         for (m ← getAllMethods(mdl)) {
             val mtdStr = method2Str(m)
 
-            def bindIntent(intent: NCDslIntent, cb: Callback): Unit = {
+            def bindIntent(intent: NCIdlIntent, cb: Callback): Unit = {
                 if (intents.exists(i ⇒ i._1.id == intent.id && i._2._1 != cb._1))
                     throw new NCE(s"The intent cannot be bound to more than one callback [" +
                         s"mdlId=$mdlId, " +
@@ -1547,7 +1547,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
             }
 
             // Process inline intent declarations by @NCIntent annotation.
-            for (ann ← m.getAnnotationsByType(CLS_INTENT); intent ← NCDslCompiler.compileIntents(ann.value(), mdl, mtdStr))
+            for (ann ← m.getAnnotationsByType(CLS_INTENT); intent ← NCIdlCompiler.compileIntents(ann.value(), mdl, mtdStr))
                 if (intentDecls.exists(_.id == intent.id) || intents.exists(_._1.id == intent.id))
                     throw new NCE(s"Duplicate intent ID [" +
                         s"mdlId=$mdlId, " +
@@ -1619,7 +1619,7 @@ object NCDeployManager extends NCService with DecorateAsScala {
                     val distinct = seqSeq.map(_.distinct).distinct
 
                     for (ann ← intAnns) {
-                        for (intent ← NCDslCompiler.compileIntents(ann.value(), mdl, mtdStr))
+                        for (intent ← NCIdlCompiler.compileIntents(ann.value(), mdl, mtdStr))
                             samples += (intent.id → distinct)
                     }
                     for (ann ← refAnns)
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCDslCompilerSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIdlCompilerSpec.scala
similarity index 95%
rename from nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCDslCompilerSpec.scala
rename to nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIdlCompilerSpec.scala
index 4424466..30e7c53 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCDslCompilerSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/compiler/NCIdlCompilerSpec.scala
@@ -19,13 +19,13 @@ package org.apache.nlpcraft.model.intent.dsl.compiler
 
 import org.apache.nlpcraft.common._
 import org.apache.nlpcraft.model.NCModel
-import org.apache.nlpcraft.model.intent.compiler.{NCDslCompiler, NCDslCompilerGlobal}
+import org.apache.nlpcraft.model.intent.compiler.{NCIdlCompiler, NCIdlCompilerGlobal}
 import org.junit.jupiter.api.Test
 
 /**
  * Tests for DSL compiler.
  */
-class NCDslCompilerSpec {
+class NCIdlCompilerSpec {
     private final val MODEL_ID = "test.mdl.id"
 
     private final val MODEL = new NCModel {
@@ -40,7 +40,7 @@ class NCDslCompilerSpec {
      */
     private def checkCompileOk(dsl: String): Unit =
         try {
-            NCDslCompiler.compileIntents(dsl, MODEL, MODEL_ID)
+            NCIdlCompiler.compileIntents(dsl, MODEL, MODEL_ID)
 
             assert(true)
         }
@@ -54,7 +54,7 @@ class NCDslCompilerSpec {
      */
     private def checkCompileError(txt: String): Unit =
         try {
-            NCDslCompiler.compileIntents(txt, MODEL, MODEL_ID)
+            NCIdlCompiler.compileIntents(txt, MODEL, MODEL_ID)
 
             assert(false)
         } catch {
@@ -66,7 +66,7 @@ class NCDslCompilerSpec {
     @Test
     @throws[NCException]
     def testInlineCompileOk(): Unit = {
-        NCDslCompilerGlobal.clearCache(MODEL_ID)
+        NCIdlCompilerGlobal.clearCache(MODEL_ID)
         
         checkCompileOk(
             """
@@ -122,7 +122,7 @@ class NCDslCompilerSpec {
     @Test
     @throws[NCException]
     def testInlineCompileFail(): Unit = {
-        NCDslCompilerGlobal.clearCache(MODEL_ID)
+        NCIdlCompilerGlobal.clearCache(MODEL_ID)
         
         checkCompileError(
             """